[{"data":1,"prerenderedAt":174800},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch5-han-shu-ji-chu":3,"wiki-doc-nav":2208},{"id":4,"title":5,"body":6,"description":2201,"extension":2202,"meta":2203,"navigation":148,"path":2204,"seo":2205,"stem":2206,"__hash__":2207},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":8,"toc":2181},"minimark",[9,13,18,22,25,41,44,58,62,65,98,101,161,164,178,182,260,263,267,270,337,345,348,411,414,418,424,481,491,542,546,551,559,672,678,682,687,690,701,746,759,763,766,805,808,821,824,884,888,893,896,950,954,957,1007,1013,1084,1087,1091,1094,1217,1220,1224,1227,1337,1341,1344,1383,1386,1429,1432,1496,1499,1503,2041,2044,2048,2075,2081,2143,2147,2177],[10,11,5],"h1",{"id":12},"_5-函数基础",[14,15,17],"h2",{"id":16},"_51-为什么需要函数","5.1 为什么需要函数",[19,20,21],"p",{},"函数用于封装一段可以重复使用的代码。",[19,23,24],{},"不使用函数的问题：",[26,27,28,32,35,38],"ol",{},[29,30,31],"li",{},"重复代码多。",[29,33,34],{},"修改逻辑时容易漏改。",[29,36,37],{},"主流程不清晰。",[29,39,40],{},"程序越写越长，难以维护。",[19,42,43],{},"使用函数后的好处：",[26,45,46,49,52,55],{},[29,47,48],{},"提高复用性。",[29,50,51],{},"提高可读性。",[29,53,54],{},"便于调试。",[29,56,57],{},"便于分工。",[14,59,61],{"id":60},"_52-函数定义","5.2 函数定义",[19,63,64],{},"语法：",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-python shiki shiki-themes github-light github-dark","def 函数名():\n    函数体\n","python","",[73,74,75,92],"code",{"__ignoreMap":71},[76,77,80,84,88],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"szBVR","def",[76,85,87],{"class":86},"sScJk"," 函数名",[76,89,91],{"class":90},"sVt8B","():\n",[76,93,95],{"class":78,"line":94},2,[76,96,97],{"class":90},"    函数体\n",[19,99,100],{},"示例：",[66,102,104],{"className":68,"code":103,"language":70,"meta":71,"style":71},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[73,105,106,115,131,143,150,155],{"__ignoreMap":71},[76,107,108,110,113],{"class":78,"line":79},[76,109,83],{"class":82},[76,111,112],{"class":86}," say_hello",[76,114,91],{"class":90},[76,116,117,121,124,128],{"class":78,"line":94},[76,118,120],{"class":119},"sj4cs","    print",[76,122,123],{"class":90},"(",[76,125,127],{"class":126},"sZZnC","\"hello\"",[76,129,130],{"class":90},")\n",[76,132,134,136,138,141],{"class":78,"line":133},3,[76,135,120],{"class":119},[76,137,123],{"class":90},[76,139,140],{"class":126},"\"python\"",[76,142,130],{"class":90},[76,144,146],{"class":78,"line":145},4,[76,147,149],{"emptyLinePlaceholder":148},true,"\n",[76,151,153],{"class":78,"line":152},5,[76,154,149],{"emptyLinePlaceholder":148},[76,156,158],{"class":78,"line":157},6,[76,159,160],{"class":90},"say_hello()\n",[19,162,163],{},"注意：",[26,165,166,169,172,175],{},[29,167,168],{},"函数必须先定义，再调用。",[29,170,171],{},"函数名遵循变量命名规则。",[29,173,174],{},"函数体需要缩进。",[29,176,177],{},"函数不调用就不会执行。",[14,179,181],{"id":180},"_53-函数调用","5.3 函数调用",[66,183,185],{"className":68,"code":184,"language":70,"meta":71,"style":71},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[73,186,187,196,207,218,229,240,244,249,255],{"__ignoreMap":71},[76,188,189,191,194],{"class":78,"line":79},[76,190,83],{"class":82},[76,192,193],{"class":86}," print_menu",[76,195,91],{"class":90},[76,197,198,200,202,205],{"class":78,"line":94},[76,199,120],{"class":119},[76,201,123],{"class":90},[76,203,204],{"class":126},"\"1. 查询\"",[76,206,130],{"class":90},[76,208,209,211,213,216],{"class":78,"line":133},[76,210,120],{"class":119},[76,212,123],{"class":90},[76,214,215],{"class":126},"\"2. 添加\"",[76,217,130],{"class":90},[76,219,220,222,224,227],{"class":78,"line":145},[76,221,120],{"class":119},[76,223,123],{"class":90},[76,225,226],{"class":126},"\"3. 删除\"",[76,228,130],{"class":90},[76,230,231,233,235,238],{"class":78,"line":152},[76,232,120],{"class":119},[76,234,123],{"class":90},[76,236,237],{"class":126},"\"0. 退出\"",[76,239,130],{"class":90},[76,241,242],{"class":78,"line":157},[76,243,149],{"emptyLinePlaceholder":148},[76,245,247],{"class":78,"line":246},7,[76,248,149],{"emptyLinePlaceholder":148},[76,250,252],{"class":78,"line":251},8,[76,253,254],{"class":90},"print_menu()\n",[76,256,258],{"class":78,"line":257},9,[76,259,254],{"class":90},[19,261,262],{},"函数可以多次调用，每次调用都会执行函数体。",[14,264,266],{"id":265},"_54-参数","5.4 参数",[19,268,269],{},"参数用于向函数传递数据。",[66,271,273],{"className":68,"code":272,"language":70,"meta":71,"style":71},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[73,274,275,284,310,314,318,328],{"__ignoreMap":71},[76,276,277,279,281],{"class":78,"line":79},[76,278,83],{"class":82},[76,280,112],{"class":86},[76,282,283],{"class":90},"(name):\n",[76,285,286,288,290,293,296,299,302,305,308],{"class":78,"line":94},[76,287,120],{"class":119},[76,289,123],{"class":90},[76,291,292],{"class":82},"f",[76,294,295],{"class":126},"\"你好，",[76,297,298],{"class":119},"{",[76,300,301],{"class":90},"name",[76,303,304],{"class":119},"}",[76,306,307],{"class":126},"\"",[76,309,130],{"class":90},[76,311,312],{"class":78,"line":133},[76,313,149],{"emptyLinePlaceholder":148},[76,315,316],{"class":78,"line":145},[76,317,149],{"emptyLinePlaceholder":148},[76,319,320,323,326],{"class":78,"line":152},[76,321,322],{"class":90},"say_hello(",[76,324,325],{"class":126},"\"小明\"",[76,327,130],{"class":90},[76,329,330,332,335],{"class":78,"line":157},[76,331,322],{"class":90},[76,333,334],{"class":126},"\"小红\"",[76,336,130],{"class":90},[19,338,339,341,342,344],{},[73,340,301],{}," 是形参，",[73,343,325],{}," 是实参。",[19,346,347],{},"多个参数：",[66,349,351],{"className":68,"code":350,"language":70,"meta":71,"style":71},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[73,352,353,363,380,387,391,395],{"__ignoreMap":71},[76,354,355,357,360],{"class":78,"line":79},[76,356,83],{"class":82},[76,358,359],{"class":86}," add",[76,361,362],{"class":90},"(a, b):\n",[76,364,365,368,371,374,377],{"class":78,"line":94},[76,366,367],{"class":90},"    result ",[76,369,370],{"class":82},"=",[76,372,373],{"class":90}," a ",[76,375,376],{"class":82},"+",[76,378,379],{"class":90}," b\n",[76,381,382,384],{"class":78,"line":133},[76,383,120],{"class":119},[76,385,386],{"class":90},"(result)\n",[76,388,389],{"class":78,"line":145},[76,390,149],{"emptyLinePlaceholder":148},[76,392,393],{"class":78,"line":152},[76,394,149],{"emptyLinePlaceholder":148},[76,396,397,400,403,406,409],{"class":78,"line":157},[76,398,399],{"class":90},"add(",[76,401,402],{"class":119},"10",[76,404,405],{"class":90},", ",[76,407,408],{"class":119},"20",[76,410,130],{"class":90},[19,412,413],{},"调用时参数数量必须匹配。",[14,415,417],{"id":416},"_55-返回值","5.5 返回值",[19,419,420,423],{},[73,421,422],{},"return"," 用于把函数内部的结果返回给调用者。",[66,425,427],{"className":68,"code":426,"language":70,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[73,428,429,437,448,452,456,474],{"__ignoreMap":71},[76,430,431,433,435],{"class":78,"line":79},[76,432,83],{"class":82},[76,434,359],{"class":86},[76,436,362],{"class":90},[76,438,439,442,444,446],{"class":78,"line":94},[76,440,441],{"class":82},"    return",[76,443,373],{"class":90},[76,445,376],{"class":82},[76,447,379],{"class":90},[76,449,450],{"class":78,"line":133},[76,451,149],{"emptyLinePlaceholder":148},[76,453,454],{"class":78,"line":145},[76,455,149],{"emptyLinePlaceholder":148},[76,457,458,461,463,466,468,470,472],{"class":78,"line":152},[76,459,460],{"class":90},"result ",[76,462,370],{"class":82},[76,464,465],{"class":90}," add(",[76,467,402],{"class":119},[76,469,405],{"class":90},[76,471,408],{"class":119},[76,473,130],{"class":90},[76,475,476,479],{"class":78,"line":157},[76,477,478],{"class":119},"print",[76,480,386],{"class":90},[19,482,483,484,486,487,490],{},"如果函数没有写 ",[73,485,422],{},"，默认返回 ",[73,488,489],{},"None","。",[66,492,494],{"className":68,"code":493,"language":70,"meta":71,"style":71},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[73,495,496,504,514,518,522,531],{"__ignoreMap":71},[76,497,498,500,502],{"class":78,"line":79},[76,499,83],{"class":82},[76,501,112],{"class":86},[76,503,91],{"class":90},[76,505,506,508,510,512],{"class":78,"line":94},[76,507,120],{"class":119},[76,509,123],{"class":90},[76,511,127],{"class":126},[76,513,130],{"class":90},[76,515,516],{"class":78,"line":133},[76,517,149],{"emptyLinePlaceholder":148},[76,519,520],{"class":78,"line":145},[76,521,149],{"emptyLinePlaceholder":148},[76,523,524,526,528],{"class":78,"line":152},[76,525,460],{"class":90},[76,527,370],{"class":82},[76,529,530],{"class":90}," say_hello()\n",[76,532,533,535,538],{"class":78,"line":157},[76,534,478],{"class":119},[76,536,537],{"class":90},"(result)  ",[76,539,541],{"class":540},"sJ8bj","# None\n",[14,543,545],{"id":544},"_56-return的作用","5.6 return的作用",[19,547,548,550],{},[73,549,422],{}," 有两个作用：",[26,552,553,556],{},[29,554,555],{},"返回结果。",[29,557,558],{},"结束函数。",[66,560,562],{"className":68,"code":561,"language":70,"meta":71,"style":71},"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",[73,563,564,574,591,599,603,617,624,628,635,639,644,657],{"__ignoreMap":71},[76,565,566,568,571],{"class":78,"line":79},[76,567,83],{"class":82},[76,569,570],{"class":86}," check_age",[76,572,573],{"class":90},"(age):\n",[76,575,576,579,582,585,588],{"class":78,"line":94},[76,577,578],{"class":82},"    if",[76,580,581],{"class":90}," age ",[76,583,584],{"class":82},"\u003C",[76,586,587],{"class":119}," 0",[76,589,590],{"class":90},":\n",[76,592,593,596],{"class":78,"line":133},[76,594,595],{"class":82},"        return",[76,597,598],{"class":126}," \"年龄不合法\"\n",[76,600,601],{"class":78,"line":145},[76,602,149],{"emptyLinePlaceholder":148},[76,604,605,607,609,612,615],{"class":78,"line":152},[76,606,578],{"class":82},[76,608,581],{"class":90},[76,610,611],{"class":82},">=",[76,613,614],{"class":119}," 18",[76,616,590],{"class":90},[76,618,619,621],{"class":78,"line":157},[76,620,595],{"class":82},[76,622,623],{"class":126}," \"成年人\"\n",[76,625,626],{"class":78,"line":246},[76,627,149],{"emptyLinePlaceholder":148},[76,629,630,632],{"class":78,"line":251},[76,631,441],{"class":82},[76,633,634],{"class":126}," \"未成年人\"\n",[76,636,637],{"class":78,"line":257},[76,638,149],{"emptyLinePlaceholder":148},[76,640,642],{"class":78,"line":641},10,[76,643,149],{"emptyLinePlaceholder":148},[76,645,647,649,652,654],{"class":78,"line":646},11,[76,648,478],{"class":119},[76,650,651],{"class":90},"(check_age(",[76,653,408],{"class":119},[76,655,656],{"class":90},"))\n",[76,658,660,662,664,667,670],{"class":78,"line":659},12,[76,661,478],{"class":119},[76,663,651],{"class":90},[76,665,666],{"class":82},"-",[76,668,669],{"class":119},"1",[76,671,656],{"class":90},[19,673,674,675,677],{},"函数执行到 ",[73,676,422],{}," 后，后面的代码不会继续执行。",[14,679,681],{"id":680},"_57-none","5.7 None",[19,683,684,686],{},[73,685,489],{}," 表示空值或没有结果。",[19,688,689],{},"常见使用场景：",[26,691,692,695,698],{},[29,693,694],{},"函数没有返回值。",[29,696,697],{},"变量暂时没有具体值。",[29,699,700],{},"表示查询不到结果。",[66,702,704],{"className":68,"code":703,"language":70,"meta":71,"style":71},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[73,705,706,715,719,735],{"__ignoreMap":71},[76,707,708,710,712],{"class":78,"line":79},[76,709,460],{"class":90},[76,711,370],{"class":82},[76,713,714],{"class":119}," None\n",[76,716,717],{"class":78,"line":94},[76,718,149],{"emptyLinePlaceholder":148},[76,720,721,724,727,730,733],{"class":78,"line":133},[76,722,723],{"class":82},"if",[76,725,726],{"class":90}," result ",[76,728,729],{"class":82},"is",[76,731,732],{"class":119}," None",[76,734,590],{"class":90},[76,736,737,739,741,744],{"class":78,"line":145},[76,738,120],{"class":119},[76,740,123],{"class":90},[76,742,743],{"class":126},"\"没有数据\"",[76,745,130],{"class":90},[19,747,748,749,751,752,755,756,490],{},"判断 ",[73,750,489],{}," 推荐使用 ",[73,753,754],{},"is None","，不要写成 ",[73,757,758],{},"== None",[14,760,762],{"id":761},"_58-函数文档字符串","5.8 函数文档字符串",[19,764,765],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[66,767,769],{"className":68,"code":768,"language":70,"meta":71,"style":71},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[73,770,771,781,786],{"__ignoreMap":71},[76,772,773,775,778],{"class":78,"line":79},[76,774,83],{"class":82},[76,776,777],{"class":86}," calculate_bmi",[76,779,780],{"class":90},"(weight, height):\n",[76,782,783],{"class":78,"line":94},[76,784,785],{"class":126},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[76,787,788,790,793,796,799,802],{"class":78,"line":133},[76,789,441],{"class":82},[76,791,792],{"class":90}," weight ",[76,794,795],{"class":82},"\u002F",[76,797,798],{"class":90}," height ",[76,800,801],{"class":82},"**",[76,803,804],{"class":119}," 2\n",[19,806,807],{},"查看说明：",[66,809,811],{"className":68,"code":810,"language":70,"meta":71,"style":71},"help(calculate_bmi)\n",[73,812,813],{"__ignoreMap":71},[76,814,815,818],{"class":78,"line":79},[76,816,817],{"class":119},"help",[76,819,820],{"class":90},"(calculate_bmi)\n",[19,822,823],{},"较完整的写法：",[66,825,827],{"className":68,"code":826,"language":70,"meta":71,"style":71},"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",[73,828,829,837,842,847,851,856,861,866,870],{"__ignoreMap":71},[76,830,831,833,835],{"class":78,"line":79},[76,832,83],{"class":82},[76,834,777],{"class":86},[76,836,780],{"class":90},[76,838,839],{"class":78,"line":94},[76,840,841],{"class":126},"    \"\"\"\n",[76,843,844],{"class":78,"line":133},[76,845,846],{"class":126},"    计算BMI。\n",[76,848,849],{"class":78,"line":145},[76,850,149],{"emptyLinePlaceholder":148},[76,852,853],{"class":78,"line":152},[76,854,855],{"class":126},"    :param weight: 体重，单位kg\n",[76,857,858],{"class":78,"line":157},[76,859,860],{"class":126},"    :param height: 身高，单位m\n",[76,862,863],{"class":78,"line":246},[76,864,865],{"class":126},"    :return: BMI数值\n",[76,867,868],{"class":78,"line":251},[76,869,841],{"class":126},[76,871,872,874,876,878,880,882],{"class":78,"line":257},[76,873,441],{"class":82},[76,875,792],{"class":90},[76,877,795],{"class":82},[76,879,798],{"class":90},[76,881,801],{"class":82},[76,883,804],{"class":119},[14,885,887],{"id":886},"_59-变量作用域","5.9 变量作用域",[889,890,892],"h3",{"id":891},"_591-局部变量","5.9.1 局部变量",[19,894,895],{},"在函数内部定义的变量，只能在函数内部使用。",[66,897,899],{"className":68,"code":898,"language":70,"meta":71,"style":71},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[73,900,901,910,920,927,931,935,940],{"__ignoreMap":71},[76,902,903,905,908],{"class":78,"line":79},[76,904,83],{"class":82},[76,906,907],{"class":86}," test",[76,909,91],{"class":90},[76,911,912,915,917],{"class":78,"line":94},[76,913,914],{"class":90},"    num ",[76,916,370],{"class":82},[76,918,919],{"class":119}," 10\n",[76,921,922,924],{"class":78,"line":133},[76,923,120],{"class":119},[76,925,926],{"class":90},"(num)\n",[76,928,929],{"class":78,"line":145},[76,930,149],{"emptyLinePlaceholder":148},[76,932,933],{"class":78,"line":152},[76,934,149],{"emptyLinePlaceholder":148},[76,936,937],{"class":78,"line":157},[76,938,939],{"class":90},"test()\n",[76,941,942,944,947],{"class":78,"line":246},[76,943,478],{"class":119},[76,945,946],{"class":90},"(num)  ",[76,948,949],{"class":540},"# 报错\n",[889,951,953],{"id":952},"_592-全局变量","5.9.2 全局变量",[19,955,956],{},"在函数外部定义的变量，可以在函数内部读取。",[66,958,960],{"className":68,"code":959,"language":70,"meta":71,"style":71},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[73,961,962,972,976,980,988,995,999,1003],{"__ignoreMap":71},[76,963,964,967,969],{"class":78,"line":79},[76,965,966],{"class":90},"name ",[76,968,370],{"class":82},[76,970,971],{"class":126}," \"小明\"\n",[76,973,974],{"class":78,"line":94},[76,975,149],{"emptyLinePlaceholder":148},[76,977,978],{"class":78,"line":133},[76,979,149],{"emptyLinePlaceholder":148},[76,981,982,984,986],{"class":78,"line":145},[76,983,83],{"class":82},[76,985,112],{"class":86},[76,987,91],{"class":90},[76,989,990,992],{"class":78,"line":152},[76,991,120],{"class":119},[76,993,994],{"class":90},"(name)\n",[76,996,997],{"class":78,"line":157},[76,998,149],{"emptyLinePlaceholder":148},[76,1000,1001],{"class":78,"line":246},[76,1002,149],{"emptyLinePlaceholder":148},[76,1004,1005],{"class":78,"line":251},[76,1006,160],{"class":90},[19,1008,1009,1010,490],{},"如果要在函数内部修改全局变量，需要 ",[73,1011,1012],{},"global",[66,1014,1016],{"className":68,"code":1015,"language":70,"meta":71,"style":71},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[73,1017,1018,1028,1032,1036,1045,1053,1064,1068,1072,1077],{"__ignoreMap":71},[76,1019,1020,1023,1025],{"class":78,"line":79},[76,1021,1022],{"class":90},"count ",[76,1024,370],{"class":82},[76,1026,1027],{"class":119}," 0\n",[76,1029,1030],{"class":78,"line":94},[76,1031,149],{"emptyLinePlaceholder":148},[76,1033,1034],{"class":78,"line":133},[76,1035,149],{"emptyLinePlaceholder":148},[76,1037,1038,1040,1043],{"class":78,"line":145},[76,1039,83],{"class":82},[76,1041,1042],{"class":86}," add_count",[76,1044,91],{"class":90},[76,1046,1047,1050],{"class":78,"line":152},[76,1048,1049],{"class":82},"    global",[76,1051,1052],{"class":90}," count\n",[76,1054,1055,1058,1061],{"class":78,"line":157},[76,1056,1057],{"class":90},"    count ",[76,1059,1060],{"class":82},"+=",[76,1062,1063],{"class":119}," 1\n",[76,1065,1066],{"class":78,"line":246},[76,1067,149],{"emptyLinePlaceholder":148},[76,1069,1070],{"class":78,"line":251},[76,1071,149],{"emptyLinePlaceholder":148},[76,1073,1074],{"class":78,"line":257},[76,1075,1076],{"class":90},"add_count()\n",[76,1078,1079,1081],{"class":78,"line":641},[76,1080,478],{"class":119},[76,1082,1083],{"class":90},"(count)\n",[19,1085,1086],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,1088,1090],{"id":1089},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,1092,1093],{},"一个函数中可以调用另一个函数。",[66,1095,1097],{"className":68,"code":1096,"language":70,"meta":71,"style":71},"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",[73,1098,1099,1108,1125,1129,1133,1143,1148,1169,1191,1195,1199,1203],{"__ignoreMap":71},[76,1100,1101,1103,1106],{"class":78,"line":79},[76,1102,83],{"class":82},[76,1104,1105],{"class":86}," print_line",[76,1107,91],{"class":90},[76,1109,1110,1112,1114,1117,1120,1123],{"class":78,"line":94},[76,1111,120],{"class":119},[76,1113,123],{"class":90},[76,1115,1116],{"class":126},"\"-\"",[76,1118,1119],{"class":82}," *",[76,1121,1122],{"class":119}," 30",[76,1124,130],{"class":90},[76,1126,1127],{"class":78,"line":133},[76,1128,149],{"emptyLinePlaceholder":148},[76,1130,1131],{"class":78,"line":145},[76,1132,149],{"emptyLinePlaceholder":148},[76,1134,1135,1137,1140],{"class":78,"line":152},[76,1136,83],{"class":82},[76,1138,1139],{"class":86}," print_info",[76,1141,1142],{"class":90},"(name, age):\n",[76,1144,1145],{"class":78,"line":157},[76,1146,1147],{"class":90},"    print_line()\n",[76,1149,1150,1152,1154,1156,1159,1161,1163,1165,1167],{"class":78,"line":246},[76,1151,120],{"class":119},[76,1153,123],{"class":90},[76,1155,292],{"class":82},[76,1157,1158],{"class":126},"\"姓名:",[76,1160,298],{"class":119},[76,1162,301],{"class":90},[76,1164,304],{"class":119},[76,1166,307],{"class":126},[76,1168,130],{"class":90},[76,1170,1171,1173,1175,1177,1180,1182,1185,1187,1189],{"class":78,"line":251},[76,1172,120],{"class":119},[76,1174,123],{"class":90},[76,1176,292],{"class":82},[76,1178,1179],{"class":126},"\"年龄:",[76,1181,298],{"class":119},[76,1183,1184],{"class":90},"age",[76,1186,304],{"class":119},[76,1188,307],{"class":126},[76,1190,130],{"class":90},[76,1192,1193],{"class":78,"line":257},[76,1194,1147],{"class":90},[76,1196,1197],{"class":78,"line":641},[76,1198,149],{"emptyLinePlaceholder":148},[76,1200,1201],{"class":78,"line":646},[76,1202,149],{"emptyLinePlaceholder":148},[76,1204,1205,1208,1210,1212,1215],{"class":78,"line":659},[76,1206,1207],{"class":90},"print_info(",[76,1209,325],{"class":126},[76,1211,405],{"class":90},[76,1213,1214],{"class":119},"18",[76,1216,130],{"class":90},[19,1218,1219],{},"这种方式可以把小功能组合成大功能。",[14,1221,1223],{"id":1222},"_511-参数检查","5.11 参数检查",[19,1225,1226],{},"函数内部可以检查参数是否合法。",[66,1228,1230],{"className":68,"code":1229,"language":70,"meta":71,"style":71},"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",[73,1231,1232,1241,1255,1261,1271,1275,1279,1297,1301,1313,1324,1331],{"__ignoreMap":71},[76,1233,1234,1236,1239],{"class":78,"line":79},[76,1235,83],{"class":82},[76,1237,1238],{"class":86}," divide",[76,1240,362],{"class":90},[76,1242,1243,1245,1248,1251,1253],{"class":78,"line":94},[76,1244,578],{"class":82},[76,1246,1247],{"class":90}," b ",[76,1249,1250],{"class":82},"==",[76,1252,587],{"class":119},[76,1254,590],{"class":90},[76,1256,1257,1259],{"class":78,"line":133},[76,1258,595],{"class":82},[76,1260,714],{"class":119},[76,1262,1263,1265,1267,1269],{"class":78,"line":145},[76,1264,441],{"class":82},[76,1266,373],{"class":90},[76,1268,795],{"class":82},[76,1270,379],{"class":90},[76,1272,1273],{"class":78,"line":152},[76,1274,149],{"emptyLinePlaceholder":148},[76,1276,1277],{"class":78,"line":157},[76,1278,149],{"emptyLinePlaceholder":148},[76,1280,1281,1283,1285,1288,1290,1292,1295],{"class":78,"line":246},[76,1282,460],{"class":90},[76,1284,370],{"class":82},[76,1286,1287],{"class":90}," divide(",[76,1289,402],{"class":119},[76,1291,405],{"class":90},[76,1293,1294],{"class":119},"0",[76,1296,130],{"class":90},[76,1298,1299],{"class":78,"line":251},[76,1300,149],{"emptyLinePlaceholder":148},[76,1302,1303,1305,1307,1309,1311],{"class":78,"line":257},[76,1304,723],{"class":82},[76,1306,726],{"class":90},[76,1308,729],{"class":82},[76,1310,732],{"class":119},[76,1312,590],{"class":90},[76,1314,1315,1317,1319,1322],{"class":78,"line":641},[76,1316,120],{"class":119},[76,1318,123],{"class":90},[76,1320,1321],{"class":126},"\"除数不能为0\"",[76,1323,130],{"class":90},[76,1325,1326,1329],{"class":78,"line":646},[76,1327,1328],{"class":82},"else",[76,1330,590],{"class":90},[76,1332,1333,1335],{"class":78,"line":659},[76,1334,120],{"class":119},[76,1336,386],{"class":90},[14,1338,1340],{"id":1339},"_512-类型提示","5.12 类型提示",[19,1342,1343],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[66,1345,1347],{"className":68,"code":1346,"language":70,"meta":71,"style":71},"def add(a: int, b: int) -> int:\n    return a + b\n",[73,1348,1349,1373],{"__ignoreMap":71},[76,1350,1351,1353,1355,1358,1361,1364,1366,1369,1371],{"class":78,"line":79},[76,1352,83],{"class":82},[76,1354,359],{"class":86},[76,1356,1357],{"class":90},"(a: ",[76,1359,1360],{"class":119},"int",[76,1362,1363],{"class":90},", b: ",[76,1365,1360],{"class":119},[76,1367,1368],{"class":90},") -> ",[76,1370,1360],{"class":119},[76,1372,590],{"class":90},[76,1374,1375,1377,1379,1381],{"class":78,"line":94},[76,1376,441],{"class":82},[76,1378,373],{"class":90},[76,1380,376],{"class":82},[76,1382,379],{"class":90},[19,1384,1385],{},"字符串参数：",[66,1387,1389],{"className":68,"code":1388,"language":70,"meta":71,"style":71},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[73,1390,1391,1409],{"__ignoreMap":71},[76,1392,1393,1395,1397,1400,1403,1405,1407],{"class":78,"line":79},[76,1394,83],{"class":82},[76,1396,112],{"class":86},[76,1398,1399],{"class":90},"(name: ",[76,1401,1402],{"class":119},"str",[76,1404,1368],{"class":90},[76,1406,489],{"class":119},[76,1408,590],{"class":90},[76,1410,1411,1413,1415,1417,1419,1421,1423,1425,1427],{"class":78,"line":94},[76,1412,120],{"class":119},[76,1414,123],{"class":90},[76,1416,292],{"class":82},[76,1418,295],{"class":126},[76,1420,298],{"class":119},[76,1422,301],{"class":90},[76,1424,304],{"class":119},[76,1426,307],{"class":126},[76,1428,130],{"class":90},[19,1430,1431],{},"列表参数：",[66,1433,1435],{"className":68,"code":1434,"language":70,"meta":71,"style":71},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[73,1436,1437,1456,1465,1479,1489],{"__ignoreMap":71},[76,1438,1439,1441,1444,1447,1449,1452,1454],{"class":78,"line":79},[76,1440,83],{"class":82},[76,1442,1443],{"class":86}," get_total",[76,1445,1446],{"class":90},"(numbers: list[",[76,1448,1360],{"class":119},[76,1450,1451],{"class":90},"]) -> ",[76,1453,1360],{"class":119},[76,1455,590],{"class":90},[76,1457,1458,1461,1463],{"class":78,"line":94},[76,1459,1460],{"class":90},"    total ",[76,1462,370],{"class":82},[76,1464,1027],{"class":119},[76,1466,1467,1470,1473,1476],{"class":78,"line":133},[76,1468,1469],{"class":82},"    for",[76,1471,1472],{"class":90}," number ",[76,1474,1475],{"class":82},"in",[76,1477,1478],{"class":90}," numbers:\n",[76,1480,1481,1484,1486],{"class":78,"line":145},[76,1482,1483],{"class":90},"        total ",[76,1485,1060],{"class":82},[76,1487,1488],{"class":90}," number\n",[76,1490,1491,1493],{"class":78,"line":152},[76,1492,441],{"class":82},[76,1494,1495],{"class":90}," total\n",[19,1497,1498],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,1500,1502],{"id":1501},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[66,1504,1506],{"className":68,"code":1505,"language":70,"meta":71,"style":71},"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",[73,1507,1508,1518,1522,1526,1535,1546,1557,1568,1579,1589,1593,1597,1606,1630,1635,1640,1650,1658,1681,1696,1709,1715,1726,1738,1744,1749,1754,1764,1771,1791,1804,1815,1820,1833,1845,1850,1860,1872,1877,1882,1887,1898,1904,1922,1927,1942,1948,1963,1969,1983,1989,2003,2015,2021,2029],{"__ignoreMap":71},[76,1509,1510,1513,1515],{"class":78,"line":79},[76,1511,1512],{"class":90},"balance ",[76,1514,370],{"class":82},[76,1516,1517],{"class":119}," 1000\n",[76,1519,1520],{"class":78,"line":94},[76,1521,149],{"emptyLinePlaceholder":148},[76,1523,1524],{"class":78,"line":133},[76,1525,149],{"emptyLinePlaceholder":148},[76,1527,1528,1530,1533],{"class":78,"line":145},[76,1529,83],{"class":82},[76,1531,1532],{"class":86}," show_menu",[76,1534,91],{"class":90},[76,1536,1537,1539,1541,1544],{"class":78,"line":152},[76,1538,120],{"class":119},[76,1540,123],{"class":90},[76,1542,1543],{"class":126},"\"====== ATM ======\"",[76,1545,130],{"class":90},[76,1547,1548,1550,1552,1555],{"class":78,"line":157},[76,1549,120],{"class":119},[76,1551,123],{"class":90},[76,1553,1554],{"class":126},"\"1. 查询余额\"",[76,1556,130],{"class":90},[76,1558,1559,1561,1563,1566],{"class":78,"line":246},[76,1560,120],{"class":119},[76,1562,123],{"class":90},[76,1564,1565],{"class":126},"\"2. 存款\"",[76,1567,130],{"class":90},[76,1569,1570,1572,1574,1577],{"class":78,"line":251},[76,1571,120],{"class":119},[76,1573,123],{"class":90},[76,1575,1576],{"class":126},"\"3. 取款\"",[76,1578,130],{"class":90},[76,1580,1581,1583,1585,1587],{"class":78,"line":257},[76,1582,120],{"class":119},[76,1584,123],{"class":90},[76,1586,237],{"class":126},[76,1588,130],{"class":90},[76,1590,1591],{"class":78,"line":641},[76,1592,149],{"emptyLinePlaceholder":148},[76,1594,1595],{"class":78,"line":646},[76,1596,149],{"emptyLinePlaceholder":148},[76,1598,1599,1601,1604],{"class":78,"line":659},[76,1600,83],{"class":82},[76,1602,1603],{"class":86}," show_balance",[76,1605,91],{"class":90},[76,1607,1609,1611,1613,1615,1618,1620,1623,1625,1628],{"class":78,"line":1608},13,[76,1610,120],{"class":119},[76,1612,123],{"class":90},[76,1614,292],{"class":82},[76,1616,1617],{"class":126},"\"当前余额:",[76,1619,298],{"class":119},[76,1621,1622],{"class":90},"balance",[76,1624,304],{"class":119},[76,1626,1627],{"class":126},"元\"",[76,1629,130],{"class":90},[76,1631,1633],{"class":78,"line":1632},14,[76,1634,149],{"emptyLinePlaceholder":148},[76,1636,1638],{"class":78,"line":1637},15,[76,1639,149],{"emptyLinePlaceholder":148},[76,1641,1643,1645,1648],{"class":78,"line":1642},16,[76,1644,83],{"class":82},[76,1646,1647],{"class":86}," save_money",[76,1649,91],{"class":90},[76,1651,1653,1655],{"class":78,"line":1652},17,[76,1654,1049],{"class":82},[76,1656,1657],{"class":90}," balance\n",[76,1659,1661,1664,1666,1669,1671,1674,1676,1679],{"class":78,"line":1660},18,[76,1662,1663],{"class":90},"    money ",[76,1665,370],{"class":82},[76,1667,1668],{"class":119}," float",[76,1670,123],{"class":90},[76,1672,1673],{"class":119},"input",[76,1675,123],{"class":90},[76,1677,1678],{"class":126},"\"请输入存款金额:\"",[76,1680,656],{"class":90},[76,1682,1684,1686,1689,1692,1694],{"class":78,"line":1683},19,[76,1685,578],{"class":82},[76,1687,1688],{"class":90}," money ",[76,1690,1691],{"class":82},"\u003C=",[76,1693,587],{"class":119},[76,1695,590],{"class":90},[76,1697,1699,1702,1704,1707],{"class":78,"line":1698},20,[76,1700,1701],{"class":119},"        print",[76,1703,123],{"class":90},[76,1705,1706],{"class":126},"\"金额必须大于0\"",[76,1708,130],{"class":90},[76,1710,1712],{"class":78,"line":1711},21,[76,1713,1714],{"class":82},"        return\n",[76,1716,1718,1721,1723],{"class":78,"line":1717},22,[76,1719,1720],{"class":90},"    balance ",[76,1722,1060],{"class":82},[76,1724,1725],{"class":90}," money\n",[76,1727,1729,1731,1733,1736],{"class":78,"line":1728},23,[76,1730,120],{"class":119},[76,1732,123],{"class":90},[76,1734,1735],{"class":126},"\"存款成功\"",[76,1737,130],{"class":90},[76,1739,1741],{"class":78,"line":1740},24,[76,1742,1743],{"class":90},"    show_balance()\n",[76,1745,1747],{"class":78,"line":1746},25,[76,1748,149],{"emptyLinePlaceholder":148},[76,1750,1752],{"class":78,"line":1751},26,[76,1753,149],{"emptyLinePlaceholder":148},[76,1755,1757,1759,1762],{"class":78,"line":1756},27,[76,1758,83],{"class":82},[76,1760,1761],{"class":86}," withdraw_money",[76,1763,91],{"class":90},[76,1765,1767,1769],{"class":78,"line":1766},28,[76,1768,1049],{"class":82},[76,1770,1657],{"class":90},[76,1772,1774,1776,1778,1780,1782,1784,1786,1789],{"class":78,"line":1773},29,[76,1775,1663],{"class":90},[76,1777,370],{"class":82},[76,1779,1668],{"class":119},[76,1781,123],{"class":90},[76,1783,1673],{"class":119},[76,1785,123],{"class":90},[76,1787,1788],{"class":126},"\"请输入取款金额:\"",[76,1790,656],{"class":90},[76,1792,1794,1796,1798,1800,1802],{"class":78,"line":1793},30,[76,1795,578],{"class":82},[76,1797,1688],{"class":90},[76,1799,1691],{"class":82},[76,1801,587],{"class":119},[76,1803,590],{"class":90},[76,1805,1807,1809,1811,1813],{"class":78,"line":1806},31,[76,1808,1701],{"class":119},[76,1810,123],{"class":90},[76,1812,1706],{"class":126},[76,1814,130],{"class":90},[76,1816,1818],{"class":78,"line":1817},32,[76,1819,1714],{"class":82},[76,1821,1823,1825,1827,1830],{"class":78,"line":1822},33,[76,1824,578],{"class":82},[76,1826,1688],{"class":90},[76,1828,1829],{"class":82},">",[76,1831,1832],{"class":90}," balance:\n",[76,1834,1836,1838,1840,1843],{"class":78,"line":1835},34,[76,1837,1701],{"class":119},[76,1839,123],{"class":90},[76,1841,1842],{"class":126},"\"余额不足\"",[76,1844,130],{"class":90},[76,1846,1848],{"class":78,"line":1847},35,[76,1849,1714],{"class":82},[76,1851,1853,1855,1858],{"class":78,"line":1852},36,[76,1854,1720],{"class":90},[76,1856,1857],{"class":82},"-=",[76,1859,1725],{"class":90},[76,1861,1863,1865,1867,1870],{"class":78,"line":1862},37,[76,1864,120],{"class":119},[76,1866,123],{"class":90},[76,1868,1869],{"class":126},"\"取款成功\"",[76,1871,130],{"class":90},[76,1873,1875],{"class":78,"line":1874},38,[76,1876,1743],{"class":90},[76,1878,1880],{"class":78,"line":1879},39,[76,1881,149],{"emptyLinePlaceholder":148},[76,1883,1885],{"class":78,"line":1884},40,[76,1886,149],{"emptyLinePlaceholder":148},[76,1888,1890,1893,1896],{"class":78,"line":1889},41,[76,1891,1892],{"class":82},"while",[76,1894,1895],{"class":119}," True",[76,1897,590],{"class":90},[76,1899,1901],{"class":78,"line":1900},42,[76,1902,1903],{"class":90},"    show_menu()\n",[76,1905,1907,1910,1912,1915,1917,1920],{"class":78,"line":1906},43,[76,1908,1909],{"class":90},"    choice ",[76,1911,370],{"class":82},[76,1913,1914],{"class":119}," input",[76,1916,123],{"class":90},[76,1918,1919],{"class":126},"\"请输入操作:\"",[76,1921,130],{"class":90},[76,1923,1925],{"class":78,"line":1924},44,[76,1926,149],{"emptyLinePlaceholder":148},[76,1928,1930,1932,1935,1937,1940],{"class":78,"line":1929},45,[76,1931,578],{"class":82},[76,1933,1934],{"class":90}," choice ",[76,1936,1250],{"class":82},[76,1938,1939],{"class":126}," \"1\"",[76,1941,590],{"class":90},[76,1943,1945],{"class":78,"line":1944},46,[76,1946,1947],{"class":90},"        show_balance()\n",[76,1949,1951,1954,1956,1958,1961],{"class":78,"line":1950},47,[76,1952,1953],{"class":82},"    elif",[76,1955,1934],{"class":90},[76,1957,1250],{"class":82},[76,1959,1960],{"class":126}," \"2\"",[76,1962,590],{"class":90},[76,1964,1966],{"class":78,"line":1965},48,[76,1967,1968],{"class":90},"        save_money()\n",[76,1970,1972,1974,1976,1978,1981],{"class":78,"line":1971},49,[76,1973,1953],{"class":82},[76,1975,1934],{"class":90},[76,1977,1250],{"class":82},[76,1979,1980],{"class":126}," \"3\"",[76,1982,590],{"class":90},[76,1984,1986],{"class":78,"line":1985},50,[76,1987,1988],{"class":90},"        withdraw_money()\n",[76,1990,1992,1994,1996,1998,2001],{"class":78,"line":1991},51,[76,1993,1953],{"class":82},[76,1995,1934],{"class":90},[76,1997,1250],{"class":82},[76,1999,2000],{"class":126}," \"0\"",[76,2002,590],{"class":90},[76,2004,2006,2008,2010,2013],{"class":78,"line":2005},52,[76,2007,1701],{"class":119},[76,2009,123],{"class":90},[76,2011,2012],{"class":126},"\"退出系统\"",[76,2014,130],{"class":90},[76,2016,2018],{"class":78,"line":2017},53,[76,2019,2020],{"class":82},"        break\n",[76,2022,2024,2027],{"class":78,"line":2023},54,[76,2025,2026],{"class":82},"    else",[76,2028,590],{"class":90},[76,2030,2032,2034,2036,2039],{"class":78,"line":2031},55,[76,2033,1701],{"class":119},[76,2035,123],{"class":90},[76,2037,2038],{"class":126},"\"输入错误\"",[76,2040,130],{"class":90},[19,2042,2043],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,2045,2047],{"id":2046},"_514-易错点","5.14 易错点",[26,2049,2050,2053,2056,2061,2066,2069],{},[29,2051,2052],{},"函数定义后必须调用才会执行。",[29,2054,2055],{},"函数名后面有括号才是调用。",[29,2057,2058,2060],{},[73,2059,422],{}," 后面的代码不会执行。",[29,2062,2063,2064,490],{},"没有返回值的函数默认返回 ",[73,2065,489],{},[29,2067,2068],{},"局部变量不能在函数外部访问。",[29,2070,2071,2072,2074],{},"不要滥用 ",[73,2073,1012],{},"，更好的方式是让函数返回新值。",[19,2076,2077,2078,2080],{},"例如不用 ",[73,2079,1012],{}," 改写存款：",[66,2082,2084],{"className":68,"code":2083,"language":70,"meta":71,"style":71},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[73,2085,2086,2095,2106,2110,2114,2122,2136],{"__ignoreMap":71},[76,2087,2088,2090,2092],{"class":78,"line":79},[76,2089,83],{"class":82},[76,2091,1647],{"class":86},[76,2093,2094],{"class":90},"(balance, money):\n",[76,2096,2097,2099,2102,2104],{"class":78,"line":94},[76,2098,441],{"class":82},[76,2100,2101],{"class":90}," balance ",[76,2103,376],{"class":82},[76,2105,1725],{"class":90},[76,2107,2108],{"class":78,"line":133},[76,2109,149],{"emptyLinePlaceholder":148},[76,2111,2112],{"class":78,"line":145},[76,2113,149],{"emptyLinePlaceholder":148},[76,2115,2116,2118,2120],{"class":78,"line":152},[76,2117,1512],{"class":90},[76,2119,370],{"class":82},[76,2121,1517],{"class":119},[76,2123,2124,2126,2128,2131,2134],{"class":78,"line":157},[76,2125,1512],{"class":90},[76,2127,370],{"class":82},[76,2129,2130],{"class":90}," save_money(balance, ",[76,2132,2133],{"class":119},"200",[76,2135,130],{"class":90},[76,2137,2138,2140],{"class":78,"line":246},[76,2139,478],{"class":119},[76,2141,2142],{"class":90},"(balance)\n",[14,2144,2146],{"id":2145},"_515-本章练习","5.15 本章练习",[26,2148,2149,2156,2162,2168,2174],{},[29,2150,2151,2152,2155],{},"定义函数 ",[73,2153,2154],{},"print_student(name, age)","，输出学生信息。",[29,2157,2151,2158,2161],{},[73,2159,2160],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,2163,2151,2164,2167],{},[73,2165,2166],{},"is_even(num)","，判断一个数是否为偶数。",[29,2169,2151,2170,2173],{},[73,2171,2172],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,2175,2176],{},"把第 4 章的菜单程序拆分成多个函数。",[2178,2179,2180],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":71,"searchDepth":94,"depth":94,"links":2182},[2183,2184,2185,2186,2187,2188,2189,2190,2191,2195,2196,2197,2198,2199,2200],{"id":16,"depth":94,"text":17},{"id":60,"depth":94,"text":61},{"id":180,"depth":94,"text":181},{"id":265,"depth":94,"text":266},{"id":416,"depth":94,"text":417},{"id":544,"depth":94,"text":545},{"id":680,"depth":94,"text":681},{"id":761,"depth":94,"text":762},{"id":886,"depth":94,"text":887,"children":2192},[2193,2194],{"id":891,"depth":133,"text":892},{"id":952,"depth":133,"text":953},{"id":1089,"depth":94,"text":1090},{"id":1222,"depth":94,"text":1223},{"id":1339,"depth":94,"text":1340},{"id":1501,"depth":94,"text":1502},{"id":2046,"depth":94,"text":2047},{"id":2145,"depth":94,"text":2146},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":5,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",[2209,7244,8349,9768,12735,14084,15572,16661,25420,25432,26031,26057,26181,26422,26487,26505,26518,26565,26689,26858,27057,27237,27442,27578,27673,27710,27723,28033,28773,29481,29502,30521,32152,32303,32316,32328,32625,52425,52440,52457,52490,55362,78704,94847,94868,94981,95102,95872,96535,96896,96934,97040,97140,97183,97209,97270,98922,99023,99048,99539,100039,101119,101402,102144,102646,102658,104674,106338,107841,109539,111455,113373,115395,118865,119297,119760,120509,123453,123801,123823,124179,127486,127498,127901,127924,128071,128238,128443,128744,129301,129958,131889,133487,134136,135630,137061,138296,139990,141742,144152,144268,145203,145414,146299,147534,147762,147775,148927,151339,153695,157005,159478,161121,162890,164675,167727,169907,172434,174628],{"id":2210,"title":2211,"body":2212,"description":71,"extension":2202,"meta":7239,"navigation":148,"path":7240,"seo":7241,"stem":7242,"__hash__":7243},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2213,"toc":7211},[2214,2217,2221,2224,2228,2239,2243,2247,2250,2253,2256,2259,2262,2286,2290,2293,2296,2299,2302,2351,2355,2373,2375,2389,2392,2400,2403,3253,3260,3277,3281,3367,3371,3377,3462,3466,3504,3508,3572,3576,3580,3587,3598,3602,3607,3611,3616,3620,3625,3629,3633,3638,3884,3889,4027,4032,4288,4291,4299,4303,4308,4411,4414,4712,4721,4822,4825,4828,4831,4834,5093,5098,5237,5240,5418,5421,5549,5552,5704,5708,5713,5716,5727,5735,5738,5844,5848,5852,5857,5907,5912,5917,5941,5946,5999,6002,6007,6182,6187,6472,6477,6874,6878,6883,6940,6945,6953,6956,7096,7099,7208],[10,2215,2211],{"id":2216},"_1基础入门",[14,2218,2220],{"id":2219},"_11注释","1.1注释",[19,2222,2223],{},"\u002F\u002F或者\u002F* *\u002F",[14,2225,2227],{"id":2226},"_12命名","1.2命名",[26,2229,2230,2233,2236],{},[29,2231,2232],{},"字母数字下划线",[29,2234,2235],{},"开头必须是字母或_",[29,2237,2238],{},"不能使用关键词",[14,2240,2242],{"id":2241},"_13数据类型","1.3数据类型",[889,2244,2246],{"id":2245},"_131整形","1.3.1整形",[19,2248,2249],{},"short 短整形 2",[19,2251,2252],{},"int 整形 4",[19,2254,2255],{},"long 长整形 win4 linux32位4 linux64位8",[19,2257,2258],{},"long long 长长整形 8",[19,2260,2261],{},"利用sizeof可以求数据类型占用的内存空间大小",[66,2263,2267],{"className":2264,"code":2265,"language":2266,"meta":71,"style":71},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[73,2268,2269,2280],{"__ignoreMap":71},[76,2270,2271,2274,2276,2278],{"class":78,"line":79},[76,2272,2273],{"class":82},"sizeof",[76,2275,123],{"class":90},[76,2277,1360],{"class":82},[76,2279,130],{"class":90},[76,2281,2282,2284],{"class":78,"line":94},[76,2283,2273],{"class":82},[76,2285,926],{"class":90},[889,2287,2289],{"id":2288},"_132浮点型","1.3.2浮点型",[19,2291,2292],{},"float 单精度 4节 7位有效数字",[19,2294,2295],{},"double 双精度 8节 15-16有效数字",[19,2297,2298],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2300,2301],{},"注意点：",[66,2303,2305],{"className":2264,"code":2304,"language":2266,"meta":71,"style":71},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[73,2306,2307,2328],{"__ignoreMap":71},[76,2308,2309,2312,2315,2317,2320,2322,2325],{"class":78,"line":79},[76,2310,2311],{"class":82},"float",[76,2313,2314],{"class":90}," f1",[76,2316,370],{"class":82},[76,2318,2319],{"class":119},"3.14",[76,2321,292],{"class":82},[76,2323,2324],{"class":90},";",[76,2326,2327],{"class":540}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[76,2329,2330,2332,2335,2337,2340,2343,2346,2348],{"class":78,"line":94},[76,2331,2311],{"class":82},[76,2333,2334],{"class":90}," f2",[76,2336,370],{"class":82},[76,2338,2339],{"class":119},"3",[76,2341,2342],{"class":82},"e",[76,2344,2345],{"class":119},"2",[76,2347,2324],{"class":90},[76,2349,2350],{"class":540}," \u002F\u002F科学记数法\n",[889,2352,2354],{"id":2353},"_133字符型","1.3.3字符型",[66,2356,2358],{"className":2264,"code":2357,"language":2266,"meta":71,"style":71},"char ch='a'\n",[73,2359,2360],{"__ignoreMap":71},[76,2361,2362,2365,2368,2370],{"class":78,"line":79},[76,2363,2364],{"class":82},"char",[76,2366,2367],{"class":90}," ch",[76,2369,370],{"class":82},[76,2371,2372],{"class":126},"'a'\n",[19,2374,2301],{},[26,2376,2377,2380,2383,2386],{},[29,2378,2379],{},"在显示字符型变量时，只能单引号，双引号x",[29,2381,2382],{},"单引号内只能一个字符，不能字符串",[29,2384,2385],{},"c和c++字符型变量只占用一个字符",[29,2387,2388],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2390,2391],{},"ASCII码大致由以下两部分组成：",[26,2393,2394,2397],{},[29,2395,2396],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2398,2399],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2401,2402],{},"ASCII码表格：",[2404,2405,2406,2450],"table",{},[2407,2408,2409],"thead",{},[2410,2411,2412,2420,2425,2429,2434,2438,2442,2446],"tr",{},[2413,2414,2415,2419],"th",{},[2416,2417,2418],"strong",{},"ASCII","值",[2413,2421,2422],{},[2416,2423,2424],{},"控制字符",[2413,2426,2427,2419],{},[2416,2428,2418],{},[2413,2430,2431],{},[2416,2432,2433],{},"字符",[2413,2435,2436,2419],{},[2416,2437,2418],{},[2413,2439,2440],{},[2416,2441,2433],{},[2413,2443,2444,2419],{},[2416,2445,2418],{},[2413,2447,2448],{},[2416,2449,2433],{},[2451,2452,2453,2479,2504,2528,2553,2579,2604,2629,2655,2680,2706,2731,2756,2781,2806,2832,2857,2881,2906,2930,2955,2979,3004,3029,3054,3079,3104,3130,3154,3178,3202,3227],"tbody",{},[2410,2454,2455,2458,2461,2464,2467,2470,2473,2476],{},[2456,2457,1294],"td",{},[2456,2459,2460],{},"NUT",[2456,2462,2463],{},"32",[2456,2465,2466],{},"(space)",[2456,2468,2469],{},"64",[2456,2471,2472],{},"@",[2456,2474,2475],{},"96",[2456,2477,2478],{},"、",[2410,2480,2481,2483,2486,2489,2492,2495,2498,2501],{},[2456,2482,669],{},[2456,2484,2485],{},"SOH",[2456,2487,2488],{},"33",[2456,2490,2491],{},"!",[2456,2493,2494],{},"65",[2456,2496,2497],{},"A",[2456,2499,2500],{},"97",[2456,2502,2503],{},"a",[2410,2505,2506,2508,2511,2514,2516,2519,2522,2525],{},[2456,2507,2345],{},[2456,2509,2510],{},"STX",[2456,2512,2513],{},"34",[2456,2515,307],{},[2456,2517,2518],{},"66",[2456,2520,2521],{},"B",[2456,2523,2524],{},"98",[2456,2526,2527],{},"b",[2410,2529,2530,2532,2535,2538,2541,2544,2547,2550],{},[2456,2531,2339],{},[2456,2533,2534],{},"ETX",[2456,2536,2537],{},"35",[2456,2539,2540],{},"#",[2456,2542,2543],{},"67",[2456,2545,2546],{},"C",[2456,2548,2549],{},"99",[2456,2551,2552],{},"c",[2410,2554,2555,2558,2561,2564,2567,2570,2573,2576],{},[2456,2556,2557],{},"4",[2456,2559,2560],{},"EOT",[2456,2562,2563],{},"36",[2456,2565,2566],{},"$",[2456,2568,2569],{},"68",[2456,2571,2572],{},"D",[2456,2574,2575],{},"100",[2456,2577,2578],{},"d",[2410,2580,2581,2584,2587,2590,2593,2596,2599,2602],{},[2456,2582,2583],{},"5",[2456,2585,2586],{},"ENQ",[2456,2588,2589],{},"37",[2456,2591,2592],{},"%",[2456,2594,2595],{},"69",[2456,2597,2598],{},"E",[2456,2600,2601],{},"101",[2456,2603,2342],{},[2410,2605,2606,2609,2612,2615,2618,2621,2624,2627],{},[2456,2607,2608],{},"6",[2456,2610,2611],{},"ACK",[2456,2613,2614],{},"38",[2456,2616,2617],{},"&",[2456,2619,2620],{},"70",[2456,2622,2623],{},"F",[2456,2625,2626],{},"102",[2456,2628,292],{},[2410,2630,2631,2634,2637,2640,2643,2646,2649,2652],{},[2456,2632,2633],{},"7",[2456,2635,2636],{},"BEL",[2456,2638,2639],{},"39",[2456,2641,2642],{},",",[2456,2644,2645],{},"71",[2456,2647,2648],{},"G",[2456,2650,2651],{},"103",[2456,2653,2654],{},"g",[2410,2656,2657,2660,2663,2666,2668,2671,2674,2677],{},[2456,2658,2659],{},"8",[2456,2661,2662],{},"BS",[2456,2664,2665],{},"40",[2456,2667,123],{},[2456,2669,2670],{},"72",[2456,2672,2673],{},"H",[2456,2675,2676],{},"104",[2456,2678,2679],{},"h",[2410,2681,2682,2685,2688,2691,2694,2697,2700,2703],{},[2456,2683,2684],{},"9",[2456,2686,2687],{},"HT",[2456,2689,2690],{},"41",[2456,2692,2693],{},")",[2456,2695,2696],{},"73",[2456,2698,2699],{},"I",[2456,2701,2702],{},"105",[2456,2704,2705],{},"i",[2410,2707,2708,2710,2713,2716,2719,2722,2725,2728],{},[2456,2709,402],{},[2456,2711,2712],{},"LF",[2456,2714,2715],{},"42",[2456,2717,2718],{},"*",[2456,2720,2721],{},"74",[2456,2723,2724],{},"J",[2456,2726,2727],{},"106",[2456,2729,2730],{},"j",[2410,2732,2733,2736,2739,2742,2744,2747,2750,2753],{},[2456,2734,2735],{},"11",[2456,2737,2738],{},"VT",[2456,2740,2741],{},"43",[2456,2743,376],{},[2456,2745,2746],{},"75",[2456,2748,2749],{},"K",[2456,2751,2752],{},"107",[2456,2754,2755],{},"k",[2410,2757,2758,2761,2764,2767,2769,2772,2775,2778],{},[2456,2759,2760],{},"12",[2456,2762,2763],{},"FF",[2456,2765,2766],{},"44",[2456,2768,2642],{},[2456,2770,2771],{},"76",[2456,2773,2774],{},"L",[2456,2776,2777],{},"108",[2456,2779,2780],{},"l",[2410,2782,2783,2786,2789,2792,2794,2797,2800,2803],{},[2456,2784,2785],{},"13",[2456,2787,2788],{},"CR",[2456,2790,2791],{},"45",[2456,2793,666],{},[2456,2795,2796],{},"77",[2456,2798,2799],{},"M",[2456,2801,2802],{},"109",[2456,2804,2805],{},"m",[2410,2807,2808,2811,2814,2817,2820,2823,2826,2829],{},[2456,2809,2810],{},"14",[2456,2812,2813],{},"SO",[2456,2815,2816],{},"46",[2456,2818,2819],{},".",[2456,2821,2822],{},"78",[2456,2824,2825],{},"N",[2456,2827,2828],{},"110",[2456,2830,2831],{},"n",[2410,2833,2834,2837,2840,2843,2845,2848,2851,2854],{},[2456,2835,2836],{},"15",[2456,2838,2839],{},"SI",[2456,2841,2842],{},"47",[2456,2844,795],{},[2456,2846,2847],{},"79",[2456,2849,2850],{},"O",[2456,2852,2853],{},"111",[2456,2855,2856],{},"o",[2410,2858,2859,2862,2865,2868,2870,2873,2876,2879],{},[2456,2860,2861],{},"16",[2456,2863,2864],{},"DLE",[2456,2866,2867],{},"48",[2456,2869,1294],{},[2456,2871,2872],{},"80",[2456,2874,2875],{},"P",[2456,2877,2878],{},"112",[2456,2880,19],{},[2410,2882,2883,2886,2889,2892,2894,2897,2900,2903],{},[2456,2884,2885],{},"17",[2456,2887,2888],{},"DCI",[2456,2890,2891],{},"49",[2456,2893,669],{},[2456,2895,2896],{},"81",[2456,2898,2899],{},"Q",[2456,2901,2902],{},"113",[2456,2904,2905],{},"q",[2410,2907,2908,2910,2913,2916,2918,2921,2924,2927],{},[2456,2909,1214],{},[2456,2911,2912],{},"DC2",[2456,2914,2915],{},"50",[2456,2917,2345],{},[2456,2919,2920],{},"82",[2456,2922,2923],{},"R",[2456,2925,2926],{},"114",[2456,2928,2929],{},"r",[2410,2931,2932,2935,2938,2941,2943,2946,2949,2952],{},[2456,2933,2934],{},"19",[2456,2936,2937],{},"DC3",[2456,2939,2940],{},"51",[2456,2942,2339],{},[2456,2944,2945],{},"83",[2456,2947,2948],{},"S",[2456,2950,2951],{},"115",[2456,2953,2954],{},"s",[2410,2956,2957,2959,2962,2965,2967,2970,2973,2976],{},[2456,2958,408],{},[2456,2960,2961],{},"DC4",[2456,2963,2964],{},"52",[2456,2966,2557],{},[2456,2968,2969],{},"84",[2456,2971,2972],{},"T",[2456,2974,2975],{},"116",[2456,2977,2978],{},"t",[2410,2980,2981,2984,2987,2990,2992,2995,2998,3001],{},[2456,2982,2983],{},"21",[2456,2985,2986],{},"NAK",[2456,2988,2989],{},"53",[2456,2991,2583],{},[2456,2993,2994],{},"85",[2456,2996,2997],{},"U",[2456,2999,3000],{},"117",[2456,3002,3003],{},"u",[2410,3005,3006,3009,3012,3015,3017,3020,3023,3026],{},[2456,3007,3008],{},"22",[2456,3010,3011],{},"SYN",[2456,3013,3014],{},"54",[2456,3016,2608],{},[2456,3018,3019],{},"86",[2456,3021,3022],{},"V",[2456,3024,3025],{},"118",[2456,3027,3028],{},"v",[2410,3030,3031,3034,3037,3040,3042,3045,3048,3051],{},[2456,3032,3033],{},"23",[2456,3035,3036],{},"TB",[2456,3038,3039],{},"55",[2456,3041,2633],{},[2456,3043,3044],{},"87",[2456,3046,3047],{},"W",[2456,3049,3050],{},"119",[2456,3052,3053],{},"w",[2410,3055,3056,3059,3062,3065,3067,3070,3073,3076],{},[2456,3057,3058],{},"24",[2456,3060,3061],{},"CAN",[2456,3063,3064],{},"56",[2456,3066,2659],{},[2456,3068,3069],{},"88",[2456,3071,3072],{},"X",[2456,3074,3075],{},"120",[2456,3077,3078],{},"x",[2410,3080,3081,3084,3087,3090,3092,3095,3098,3101],{},[2456,3082,3083],{},"25",[2456,3085,3086],{},"EM",[2456,3088,3089],{},"57",[2456,3091,2684],{},[2456,3093,3094],{},"89",[2456,3096,3097],{},"Y",[2456,3099,3100],{},"121",[2456,3102,3103],{},"y",[2410,3105,3106,3109,3112,3115,3118,3121,3124,3127],{},[2456,3107,3108],{},"26",[2456,3110,3111],{},"SUB",[2456,3113,3114],{},"58",[2456,3116,3117],{},":",[2456,3119,3120],{},"90",[2456,3122,3123],{},"Z",[2456,3125,3126],{},"122",[2456,3128,3129],{},"z",[2410,3131,3132,3135,3138,3141,3143,3146,3149,3152],{},[2456,3133,3134],{},"27",[2456,3136,3137],{},"ESC",[2456,3139,3140],{},"59",[2456,3142,2324],{},[2456,3144,3145],{},"91",[2456,3147,3148],{},"[",[2456,3150,3151],{},"123",[2456,3153,298],{},[2410,3155,3156,3159,3162,3165,3167,3170,3172,3175],{},[2456,3157,3158],{},"28",[2456,3160,3161],{},"FS",[2456,3163,3164],{},"60",[2456,3166,584],{},[2456,3168,3169],{},"92",[2456,3171,795],{},[2456,3173,3174],{},"124",[2456,3176,3177],{},"|",[2410,3179,3180,3183,3186,3189,3191,3194,3197,3200],{},[2456,3181,3182],{},"29",[2456,3184,3185],{},"GS",[2456,3187,3188],{},"61",[2456,3190,370],{},[2456,3192,3193],{},"93",[2456,3195,3196],{},"]",[2456,3198,3199],{},"125",[2456,3201,304],{},[2410,3203,3204,3207,3210,3213,3215,3218,3221,3224],{},[2456,3205,3206],{},"30",[2456,3208,3209],{},"RS",[2456,3211,3212],{},"62",[2456,3214,1829],{},[2456,3216,3217],{},"94",[2456,3219,3220],{},"^",[2456,3222,3223],{},"126",[2456,3225,3226],{},"`",[2410,3228,3229,3232,3235,3238,3241,3244,3247,3250],{},[2456,3230,3231],{},"31",[2456,3233,3234],{},"US",[2456,3236,3237],{},"63",[2456,3239,3240],{},"?",[2456,3242,3243],{},"95",[2456,3245,3246],{},"_",[2456,3248,3249],{},"127",[2456,3251,3252],{},"DEL",[19,3254,3255,3256,3259],{},"ASCII 码大致由以下",[2416,3257,3258],{},"两部分组","成：",[3261,3262,3263,3270],"ul",{},[29,3264,3265,3266,3269],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2416,3267,3268],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3271,3272,3273,3276],{},"ASCII 打印字符：数字 ",[2416,3274,3275],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[889,3278,3280],{"id":3279},"_134转义字符","1.3.4转义字符",[66,3282,3284],{"className":2264,"code":3283,"language":2266,"meta":71,"style":71},"\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",[73,3285,3286,3291,3307,3321,3326,3339,3344],{"__ignoreMap":71},[76,3287,3288],{"class":78,"line":79},[76,3289,3290],{"class":540},"\u002F\u002F换行符\n",[76,3292,3293,3296,3299,3302,3304],{"class":78,"line":94},[76,3294,3295],{"class":90},"cout ",[76,3297,3298],{"class":82},"\u003C\u003C",[76,3300,3301],{"class":126},"\"hello world\u002Fn\"",[76,3303,2324],{"class":90},[76,3305,3306],{"class":540}," \u002F\u002F就等同于如下：\n",[76,3308,3309,3311,3313,3316,3318],{"class":78,"line":133},[76,3310,3295],{"class":90},[76,3312,3298],{"class":82},[76,3314,3315],{"class":126},"\"hello world\"",[76,3317,3298],{"class":82},[76,3319,3320],{"class":90},"endl;\n",[76,3322,3323],{"class":78,"line":145},[76,3324,3325],{"class":540},"\u002F\u002F反斜杠\n",[76,3327,3328,3330,3332,3335,3337],{"class":78,"line":152},[76,3329,3295],{"class":90},[76,3331,3298],{"class":82},[76,3333,3334],{"class":126},"\"\u002F\u002F\"",[76,3336,3298],{"class":82},[76,3338,3320],{"class":90},[76,3340,3341],{"class":78,"line":157},[76,3342,3343],{"class":540},"\u002F\u002F水平制表符\n",[76,3345,3346,3348,3350,3353,3356,3359,3361,3364],{"class":78,"line":246},[76,3347,3295],{"class":90},[76,3349,3298],{"class":82},[76,3351,3352],{"class":126},"\"aaaa",[76,3354,3355],{"class":119},"\\t",[76,3357,3358],{"class":126},"helloworld\"",[76,3360,3298],{"class":82},[76,3362,3363],{"class":90},"endl;",[76,3365,3366],{"class":540}," \u002F\u002F输出窗口时有对齐效果\n",[889,3368,3370],{"id":3369},"_135字符串型","1.3.5字符串型",[19,3372,3373,3374,3376],{},"char 变量名",[76,3375],{},"=\"字符串值\"",[66,3378,3380],{"className":2264,"code":3379,"language":2266,"meta":71,"style":71},"\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",[73,3381,3382,3387,3392,3397,3402,3416,3428,3433,3438,3449],{"__ignoreMap":71},[76,3383,3384],{"class":78,"line":79},[76,3385,3386],{"class":540},"\u002F\u002Fc风格字符串\n",[76,3388,3389],{"class":78,"line":94},[76,3390,3391],{"class":540},"\u002F\u002F注意事项：\n",[76,3393,3394],{"class":78,"line":133},[76,3395,3396],{"class":540},"\u002F\u002F1.char字符串名[]\n",[76,3398,3399],{"class":78,"line":145},[76,3400,3401],{"class":540},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[76,3403,3404,3406,3409,3411,3413],{"class":78,"line":152},[76,3405,2364],{"class":82},[76,3407,3408],{"class":90}," str[]",[76,3410,370],{"class":82},[76,3412,3315],{"class":126},[76,3414,3415],{"class":90},";\n",[76,3417,3418,3420,3422,3424,3426],{"class":78,"line":157},[76,3419,3295],{"class":90},[76,3421,3298],{"class":82},[76,3423,1402],{"class":90},[76,3425,3298],{"class":82},[76,3427,3320],{"class":90},[76,3429,3430],{"class":78,"line":246},[76,3431,3432],{"class":540},"\u002F\u002Fc++风格字符串\n",[76,3434,3435],{"class":78,"line":251},[76,3436,3437],{"class":540},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[76,3439,3440,3443,3445,3447],{"class":78,"line":257},[76,3441,3442],{"class":90},"string str2",[76,3444,370],{"class":82},[76,3446,3315],{"class":126},[76,3448,3415],{"class":90},[76,3450,3451,3453,3455,3458,3460],{"class":78,"line":641},[76,3452,3295],{"class":90},[76,3454,3298],{"class":82},[76,3456,3457],{"class":90},"str2",[76,3459,3298],{"class":82},[76,3461,3320],{"class":90},[889,3463,3465],{"id":3464},"_136布尔类型bool","1.3.6布尔类型bool",[66,3467,3469],{"className":2264,"code":3468,"language":2266,"meta":71,"style":71},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[73,3470,3471,3486],{"__ignoreMap":71},[76,3472,3473,3476,3479,3481,3484],{"class":78,"line":79},[76,3474,3475],{"class":82},"bool",[76,3477,3478],{"class":90}," flag",[76,3480,370],{"class":82},[76,3482,3483],{"class":119},"true",[76,3485,3415],{"class":90},[76,3487,3488,3491,3494,3497,3499,3501],{"class":78,"line":94},[76,3489,3490],{"class":90},"cout",[76,3492,3493],{"class":82},"\u003C\u003Csizeof",[76,3495,3496],{"class":90},"(flag)",[76,3498,3298],{"class":82},[76,3500,3363],{"class":90},[76,3502,3503],{"class":540}," \u002F\u002F查看布尔占内存空间\n",[14,3505,3507],{"id":3506},"_14键盘输入cin","1.4键盘输入cin",[66,3509,3511],{"className":2264,"code":3510,"language":2266,"meta":71,"style":71},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[73,3512,3513,3526,3543,3554],{"__ignoreMap":71},[76,3514,3515,3517,3520,3522,3524],{"class":78,"line":79},[76,3516,1360],{"class":82},[76,3518,3519],{"class":90}," a",[76,3521,370],{"class":82},[76,3523,1294],{"class":119},[76,3525,3415],{"class":90},[76,3527,3528,3530,3532,3535,3537,3539,3541],{"class":78,"line":94},[76,3529,3490],{"class":90},[76,3531,3298],{"class":82},[76,3533,3534],{"class":126},"\"请给整型变量a赋值\"",[76,3536,3298],{"class":82},[76,3538,2503],{"class":90},[76,3540,3298],{"class":82},[76,3542,3320],{"class":90},[76,3544,3545,3548,3551],{"class":78,"line":133},[76,3546,3547],{"class":90},"cin ",[76,3549,3550],{"class":82},">>",[76,3552,3553],{"class":90}," a;\n",[76,3555,3556,3558,3560,3563,3566,3568,3570],{"class":78,"line":145},[76,3557,3295],{"class":90},[76,3559,3298],{"class":82},[76,3561,3562],{"class":126}," \"整型变量a=\"",[76,3564,3565],{"class":82}," \u003C\u003C",[76,3567,2503],{"class":90},[76,3569,3298],{"class":82},[76,3571,3320],{"class":90},[14,3573,3575],{"id":3574},"_15运算符","1.5运算符",[889,3577,3579],{"id":3578},"_151算术运算符","1.5.1算术运算符",[19,3581,3582,3586],{},[3583,3584],"img",{"alt":71,"src":3585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3588,3589,3592,3595],{},[29,3590,3591],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3593,3594],{},"两个小数不可以做取模运算",[29,3596,3597],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[889,3599,3601],{"id":3600},"_152赋值运算符","1.5.2赋值运算符",[19,3603,3604],{},[3583,3605],{"alt":71,"src":3606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[889,3608,3610],{"id":3609},"_153比较运算符","1.5.3比较运算符",[19,3612,3613],{},[3583,3614],{"alt":71,"src":3615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[889,3617,3619],{"id":3618},"_154逻辑运算符","1.5.4逻辑运算符",[19,3621,3622],{},[3583,3623],{"alt":71,"src":3624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3626,3628],{"id":3627},"_16程序流程结构","1.6程序流程结构",[889,3630,3632],{"id":3631},"_161选择结构","1.6.1选择结构",[26,3634,3635],{},[29,3636,3637],{},"if语句\n单行、多行、多条件if语句",[66,3639,3641],{"className":2264,"code":3640,"language":2266,"meta":71,"style":71},"\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",[73,3642,3643,3648,3662,3667,3681,3686,3691,3700,3712,3716,3729,3733,3738,3742,3755,3759,3764,3784,3788,3801,3805,3830,3834,3850,3854,3858,3862,3875,3879],{"__ignoreMap":71},[76,3644,3645],{"class":78,"line":79},[76,3646,3647],{"class":540},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[76,3649,3650,3652,3655,3657,3660],{"class":78,"line":94},[76,3651,723],{"class":82},[76,3653,3654],{"class":90},"(score",[76,3656,1829],{"class":82},[76,3658,3659],{"class":119},"600",[76,3661,130],{"class":90},[76,3663,3664],{"class":78,"line":133},[76,3665,3666],{"class":90},"{\n",[76,3668,3669,3672,3674,3677,3679],{"class":78,"line":145},[76,3670,3671],{"class":90},"    cout",[76,3673,3298],{"class":82},[76,3675,3676],{"class":126},"'这是单行if语句'",[76,3678,3298],{"class":82},[76,3680,3320],{"class":90},[76,3682,3683],{"class":78,"line":152},[76,3684,3685],{"class":90},"}\n",[76,3687,3688],{"class":78,"line":157},[76,3689,3690],{"class":540},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[76,3692,3693,3695,3697],{"class":78,"line":246},[76,3694,3547],{"class":90},[76,3696,3550],{"class":82},[76,3698,3699],{"class":90}," score\n",[76,3701,3702,3704,3706,3708,3710],{"class":78,"line":251},[76,3703,723],{"class":82},[76,3705,3654],{"class":90},[76,3707,1691],{"class":82},[76,3709,3659],{"class":119},[76,3711,130],{"class":90},[76,3713,3714],{"class":78,"line":257},[76,3715,3666],{"class":90},[76,3717,3718,3720,3722,3725,3727],{"class":78,"line":641},[76,3719,3671],{"class":90},[76,3721,3550],{"class":82},[76,3723,3724],{"class":126},"\"小于等于600\"",[76,3726,3298],{"class":82},[76,3728,3320],{"class":90},[76,3730,3731],{"class":78,"line":646},[76,3732,3685],{"class":90},[76,3734,3735],{"class":78,"line":659},[76,3736,3737],{"class":82},"else\n",[76,3739,3740],{"class":78,"line":1608},[76,3741,3666],{"class":90},[76,3743,3744,3746,3748,3751,3753],{"class":78,"line":1632},[76,3745,3671],{"class":90},[76,3747,3550],{"class":82},[76,3749,3750],{"class":126},"\"大于600\"",[76,3752,3550],{"class":82},[76,3754,3320],{"class":90},[76,3756,3757],{"class":78,"line":1637},[76,3758,3685],{"class":90},[76,3760,3761],{"class":78,"line":1642},[76,3762,3763],{"class":540},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[76,3765,3766,3768,3771,3773,3775,3778,3780,3782],{"class":78,"line":1652},[76,3767,723],{"class":82},[76,3769,3770],{"class":90}," (",[76,3772,1294],{"class":119},[76,3774,584],{"class":82},[76,3776,3777],{"class":90},"num",[76,3779,584],{"class":82},[76,3781,2575],{"class":119},[76,3783,130],{"class":90},[76,3785,3786],{"class":78,"line":1660},[76,3787,3666],{"class":90},[76,3789,3790,3792,3794,3797,3799],{"class":78,"line":1683},[76,3791,3671],{"class":90},[76,3793,3298],{"class":82},[76,3795,3796],{"class":126},"\"小于100\"",[76,3798,3298],{"class":82},[76,3800,3320],{"class":90},[76,3802,3803],{"class":78,"line":1698},[76,3804,3685],{"class":90},[76,3806,3807,3809,3812,3815,3817,3819,3822,3824,3826,3828],{"class":78,"line":1711},[76,3808,1328],{"class":82},[76,3810,3811],{"class":82}," if",[76,3813,3814],{"class":90}," (nmu",[76,3816,611],{"class":82},[76,3818,2575],{"class":119},[76,3820,3821],{"class":82},"&&",[76,3823,3777],{"class":90},[76,3825,584],{"class":82},[76,3827,2133],{"class":119},[76,3829,130],{"class":90},[76,3831,3832],{"class":78,"line":1717},[76,3833,3666],{"class":90},[76,3835,3836,3838,3840,3843,3845,3847],{"class":78,"line":1728},[76,3837,3671],{"class":90},[76,3839,3298],{"class":82},[76,3841,3842],{"class":126},"\"不小于100且小于200\"",[76,3844,3298],{"class":82},[76,3846,3363],{"class":90},[76,3848,3849],{"class":540}," \u002F\u002F可以无限else if,python中是elif：\n",[76,3851,3852],{"class":78,"line":1740},[76,3853,3685],{"class":90},[76,3855,3856],{"class":78,"line":1746},[76,3857,3737],{"class":82},[76,3859,3860],{"class":78,"line":1751},[76,3861,3666],{"class":90},[76,3863,3864,3866,3868,3871,3873],{"class":78,"line":1756},[76,3865,3671],{"class":90},[76,3867,3298],{"class":82},[76,3869,3870],{"class":126},"\"不小于200\"",[76,3872,3298],{"class":82},[76,3874,3320],{"class":90},[76,3876,3877],{"class":78,"line":1766},[76,3878,3685],{"class":90},[76,3880,3881],{"class":78,"line":1773},[76,3882,3883],{"class":540},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,3885,3886],{"start":94},[29,3887,3888],{},"三目运算符",[66,3890,3892],{"className":2264,"code":3891,"language":2266,"meta":71,"style":71},"\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",[73,3893,3894,3899,3904,3930,3952,3969,3974,3997,4012],{"__ignoreMap":71},[76,3895,3896],{"class":78,"line":79},[76,3897,3898],{"class":540},"\u002F\u002F创建三个变量a,b,c\n",[76,3900,3901],{"class":78,"line":94},[76,3902,3903],{"class":540},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[76,3905,3906,3908,3910,3912,3914,3917,3919,3921,3924,3926,3928],{"class":78,"line":133},[76,3907,1360],{"class":82},[76,3909,3519],{"class":90},[76,3911,370],{"class":82},[76,3913,408],{"class":119},[76,3915,3916],{"class":90},",b",[76,3918,370],{"class":82},[76,3920,402],{"class":119},[76,3922,3923],{"class":90},",c",[76,3925,370],{"class":82},[76,3927,1294],{"class":119},[76,3929,3415],{"class":90},[76,3931,3932,3934,3936,3939,3941,3943,3945,3947,3949],{"class":78,"line":145},[76,3933,2552],{"class":90},[76,3935,370],{"class":82},[76,3937,3938],{"class":90},"(a",[76,3940,1829],{"class":82},[76,3942,2527],{"class":90},[76,3944,3240],{"class":82},[76,3946,2503],{"class":90},[76,3948,3117],{"class":82},[76,3950,3951],{"class":90},"b)\n",[76,3953,3954,3956,3958,3961,3963,3965,3967],{"class":78,"line":152},[76,3955,3490],{"class":90},[76,3957,3298],{"class":82},[76,3959,3960],{"class":126},"\"c=\"",[76,3962,3298],{"class":82},[76,3964,2552],{"class":90},[76,3966,3298],{"class":82},[76,3968,3320],{"class":90},[76,3970,3971],{"class":78,"line":157},[76,3972,3973],{"class":540},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[76,3975,3976,3978,3980,3982,3984,3986,3988,3991,3993,3995],{"class":78,"line":246},[76,3977,3938],{"class":90},[76,3979,1829],{"class":82},[76,3981,2527],{"class":90},[76,3983,3240],{"class":82},[76,3985,2503],{"class":90},[76,3987,3117],{"class":82},[76,3989,3990],{"class":90},"b)",[76,3992,370],{"class":82},[76,3994,2575],{"class":119},[76,3996,3415],{"class":90},[76,3998,3999,4001,4003,4005,4007,4009],{"class":78,"line":251},[76,4000,3490],{"class":90},[76,4002,3298],{"class":82},[76,4004,2503],{"class":90},[76,4006,3298],{"class":82},[76,4008,3363],{"class":90},[76,4010,4011],{"class":540}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[76,4013,4014,4016,4018,4020,4022,4024],{"class":78,"line":257},[76,4015,3490],{"class":90},[76,4017,3298],{"class":82},[76,4019,2527],{"class":90},[76,4021,3298],{"class":82},[76,4023,3363],{"class":90},[76,4025,4026],{"class":540}," \u002F\u002F10   a>b,b还是原值\n",[26,4028,4029],{"start":133},[29,4030,4031],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[66,4033,4035],{"className":2264,"code":4034,"language":2266,"meta":71,"style":71},"\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",[73,4036,4037,4042,4050,4063,4073,4077,4091,4104,4114,4122,4127,4152,4173,4195,4216,4238,4259,4279,4284],{"__ignoreMap":71},[76,4038,4039],{"class":78,"line":79},[76,4040,4041],{"class":540},"\u002F\u002F案例-电影打分\n",[76,4043,4044,4047],{"class":78,"line":94},[76,4045,4046],{"class":82},"#include",[76,4048,4049],{"class":126},"\u003Ciostream>\n",[76,4051,4052,4055,4058,4061],{"class":78,"line":133},[76,4053,4054],{"class":82},"using",[76,4056,4057],{"class":82}," namespace",[76,4059,4060],{"class":86}," std",[76,4062,3415],{"class":90},[76,4064,4065,4067,4070],{"class":78,"line":145},[76,4066,1360],{"class":82},[76,4068,4069],{"class":86}," main",[76,4071,4072],{"class":90},"()\n",[76,4074,4075],{"class":78,"line":152},[76,4076,3666],{"class":90},[76,4078,4079,4082,4085,4087,4089],{"class":78,"line":157},[76,4080,4081],{"class":82},"    int",[76,4083,4084],{"class":90}," score",[76,4086,370],{"class":82},[76,4088,1294],{"class":119},[76,4090,3415],{"class":90},[76,4092,4093,4095,4097,4100,4102],{"class":78,"line":246},[76,4094,3671],{"class":90},[76,4096,3298],{"class":82},[76,4098,4099],{"class":126},"\"电影打分：\"",[76,4101,3298],{"class":82},[76,4103,3320],{"class":90},[76,4105,4106,4109,4111],{"class":78,"line":251},[76,4107,4108],{"class":90},"    cin",[76,4110,3550],{"class":82},[76,4112,4113],{"class":90},"score;\n",[76,4115,4116,4119],{"class":78,"line":257},[76,4117,4118],{"class":82},"    switch",[76,4120,4121],{"class":90},"(score)\n",[76,4123,4124],{"class":78,"line":641},[76,4125,4126],{"class":90},"    {\n",[76,4128,4129,4132,4135,4138,4140,4143,4145,4147,4150],{"class":78,"line":646},[76,4130,4131],{"class":82},"        case",[76,4133,4134],{"class":119}," 10",[76,4136,4137],{"class":90},":cout",[76,4139,3298],{"class":82},[76,4141,4142],{"class":126},"\"经典\"",[76,4144,3298],{"class":82},[76,4146,3363],{"class":90},[76,4148,4149],{"class":82},"break",[76,4151,3415],{"class":90},[76,4153,4154,4156,4159,4161,4163,4165,4167,4169,4171],{"class":78,"line":659},[76,4155,4131],{"class":82},[76,4157,4158],{"class":119}," 9",[76,4160,4137],{"class":90},[76,4162,3298],{"class":82},[76,4164,4142],{"class":126},[76,4166,3298],{"class":82},[76,4168,3363],{"class":90},[76,4170,4149],{"class":82},[76,4172,3415],{"class":90},[76,4174,4175,4177,4180,4182,4184,4187,4189,4191,4193],{"class":78,"line":1608},[76,4176,4131],{"class":82},[76,4178,4179],{"class":119}," 8",[76,4181,4137],{"class":90},[76,4183,3298],{"class":82},[76,4185,4186],{"class":126},"\"非常好\"",[76,4188,3298],{"class":82},[76,4190,3363],{"class":90},[76,4192,4149],{"class":82},[76,4194,3415],{"class":90},[76,4196,4197,4199,4202,4204,4206,4208,4210,4212,4214],{"class":78,"line":1632},[76,4198,4131],{"class":82},[76,4200,4201],{"class":119}," 7",[76,4203,4137],{"class":90},[76,4205,3298],{"class":82},[76,4207,4186],{"class":126},[76,4209,3298],{"class":82},[76,4211,3363],{"class":90},[76,4213,4149],{"class":82},[76,4215,3415],{"class":90},[76,4217,4218,4220,4223,4225,4227,4230,4232,4234,4236],{"class":78,"line":1637},[76,4219,4131],{"class":82},[76,4221,4222],{"class":119}," 6",[76,4224,4137],{"class":90},[76,4226,3298],{"class":82},[76,4228,4229],{"class":126},"\"一般\"",[76,4231,3298],{"class":82},[76,4233,3363],{"class":90},[76,4235,4149],{"class":82},[76,4237,3415],{"class":90},[76,4239,4240,4242,4245,4247,4249,4251,4253,4255,4257],{"class":78,"line":1642},[76,4241,4131],{"class":82},[76,4243,4244],{"class":119}," 5",[76,4246,4137],{"class":90},[76,4248,3298],{"class":82},[76,4250,4229],{"class":126},[76,4252,3298],{"class":82},[76,4254,3363],{"class":90},[76,4256,4149],{"class":82},[76,4258,3415],{"class":90},[76,4260,4261,4264,4266,4268,4271,4273,4275,4277],{"class":78,"line":1652},[76,4262,4263],{"class":82},"        default",[76,4265,4137],{"class":90},[76,4267,3298],{"class":82},[76,4269,4270],{"class":126},"\"烂片\"",[76,4272,3298],{"class":82},[76,4274,3363],{"class":90},[76,4276,4149],{"class":82},[76,4278,3415],{"class":90},[76,4280,4281],{"class":78,"line":1660},[76,4282,4283],{"class":90},"    }\n",[76,4285,4286],{"class":78,"line":1683},[76,4287,3685],{"class":90},[19,4289,4290],{},"if和switch区别：",[3261,4292,4293,4296],{},[29,4294,4295],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4297,4298],{},"switch优点：结构清晰，执行效率高",[889,4300,4302],{"id":4301},"_162循环结构","1.6.2循环结构",[26,4304,4305],{},[29,4306,4307],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[66,4309,4311],{"className":2264,"code":4310,"language":2266,"meta":71,"style":71},"\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",[73,4312,4313,4318,4326,4330,4343,4357,4361,4381,4391,4395,4407],{"__ignoreMap":71},[76,4314,4315],{"class":78,"line":79},[76,4316,4317],{"class":540},"\u002F\u002F打印0-9数字\n",[76,4319,4320,4322,4324],{"class":78,"line":94},[76,4321,1360],{"class":82},[76,4323,4069],{"class":86},[76,4325,4072],{"class":90},[76,4327,4328],{"class":78,"line":133},[76,4329,3666],{"class":90},[76,4331,4332,4334,4337,4339,4341],{"class":78,"line":145},[76,4333,4081],{"class":82},[76,4335,4336],{"class":90}," num",[76,4338,370],{"class":82},[76,4340,1294],{"class":119},[76,4342,3415],{"class":90},[76,4344,4345,4348,4351,4353,4355],{"class":78,"line":152},[76,4346,4347],{"class":82},"    while",[76,4349,4350],{"class":90},"(num",[76,4352,584],{"class":82},[76,4354,402],{"class":119},[76,4356,130],{"class":90},[76,4358,4359],{"class":78,"line":157},[76,4360,4126],{"class":90},[76,4362,4363,4366,4369,4371,4373,4375,4378],{"class":78,"line":246},[76,4364,4365],{"class":86},"       std",[76,4367,4368],{"class":90},"::cout",[76,4370,3298],{"class":82},[76,4372,3777],{"class":90},[76,4374,3298],{"class":82},[76,4376,4377],{"class":86},"std",[76,4379,4380],{"class":90},"::endl;\n",[76,4382,4383,4386,4389],{"class":78,"line":251},[76,4384,4385],{"class":90},"        num",[76,4387,4388],{"class":82},"++",[76,4390,3415],{"class":90},[76,4392,4393],{"class":78,"line":257},[76,4394,4283],{"class":90},[76,4396,4397,4400,4402,4405],{"class":78,"line":641},[76,4398,4399],{"class":86},"    system",[76,4401,123],{"class":90},[76,4403,4404],{"class":126},"\"pause\"",[76,4406,130],{"class":90},[76,4408,4409],{"class":78,"line":646},[76,4410,3685],{"class":90},[19,4412,4413],{},"注意：写好循环条件，避免死循环情况",[66,4415,4417],{"className":2264,"code":4416,"language":2266,"meta":71,"style":71},"\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",[73,4418,4419,4424,4431,4438,4448,4456,4460,4465,4492,4496,4501,4509,4536,4541,4546,4559,4569,4573,4583,4588,4601,4606,4620,4625,4640,4644,4657,4661,4666,4670,4683,4690,4694,4699,4704,4708],{"__ignoreMap":71},[76,4420,4421],{"class":78,"line":79},[76,4422,4423],{"class":540},"\u002F\u002F循环结构-猜数字\n",[76,4425,4426,4428],{"class":78,"line":94},[76,4427,4046],{"class":82},[76,4429,4430],{"class":126}," \u003Ciostream>\n",[76,4432,4433,4435],{"class":78,"line":133},[76,4434,4046],{"class":82},[76,4436,4437],{"class":126}," \u003Cctime>\n",[76,4439,4440,4442,4444,4446],{"class":78,"line":145},[76,4441,4054],{"class":82},[76,4443,4057],{"class":82},[76,4445,4060],{"class":86},[76,4447,3415],{"class":90},[76,4449,4450,4452,4454],{"class":78,"line":152},[76,4451,1360],{"class":82},[76,4453,4069],{"class":86},[76,4455,4072],{"class":90},[76,4457,4458],{"class":78,"line":157},[76,4459,3666],{"class":90},[76,4461,4462],{"class":78,"line":246},[76,4463,4464],{"class":540},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[76,4466,4467,4470,4473,4476,4479,4481,4484,4486,4489],{"class":78,"line":251},[76,4468,4469],{"class":86},"    srand",[76,4471,4472],{"class":90},"((",[76,4474,4475],{"class":82},"unsigned",[76,4477,4478],{"class":82}," int",[76,4480,2693],{"class":90},[76,4482,4483],{"class":86},"time",[76,4485,123],{"class":90},[76,4487,4488],{"class":119},"NULL",[76,4490,4491],{"class":90},"));\n",[76,4493,4494],{"class":78,"line":257},[76,4495,149],{"emptyLinePlaceholder":148},[76,4497,4498],{"class":78,"line":641},[76,4499,4500],{"class":540},"    \u002F\u002F1.系统生成随机数\n",[76,4502,4503,4506],{"class":78,"line":646},[76,4504,4505],{"class":540},"    \u002F\u002Frand()%100",[76,4507,4508],{"class":540}," \u002F\u002F生成0-99的随机数\n",[76,4510,4511,4513,4515,4517,4520,4523,4525,4527,4529,4531,4533],{"class":78,"line":659},[76,4512,4081],{"class":82},[76,4514,4336],{"class":90},[76,4516,370],{"class":82},[76,4518,4519],{"class":86},"rand",[76,4521,4522],{"class":90},"()",[76,4524,2592],{"class":82},[76,4526,2575],{"class":119},[76,4528,376],{"class":82},[76,4530,669],{"class":119},[76,4532,2324],{"class":90},[76,4534,4535],{"class":540}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[76,4537,4538],{"class":78,"line":1608},[76,4539,4540],{"class":540},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[76,4542,4543],{"class":78,"line":1632},[76,4544,4545],{"class":540},"    \u002F\u002F2.玩家猜测\n",[76,4547,4548,4550,4553,4555,4557],{"class":78,"line":1637},[76,4549,4081],{"class":82},[76,4551,4552],{"class":90}," val",[76,4554,370],{"class":82},[76,4556,1294],{"class":119},[76,4558,3415],{"class":90},[76,4560,4561,4563,4565,4567],{"class":78,"line":1642},[76,4562,4347],{"class":82},[76,4564,3770],{"class":90},[76,4566,669],{"class":119},[76,4568,130],{"class":90},[76,4570,4571],{"class":78,"line":1652},[76,4572,4126],{"class":90},[76,4574,4575,4578,4580],{"class":78,"line":1660},[76,4576,4577],{"class":90},"        cin",[76,4579,3550],{"class":82},[76,4581,4582],{"class":90},"val;\n",[76,4584,4585],{"class":78,"line":1683},[76,4586,4587],{"class":540},"        \u002F\u002F3.判断玩家猜测\n",[76,4589,4590,4593,4596,4598],{"class":78,"line":1698},[76,4591,4592],{"class":82},"        if",[76,4594,4595],{"class":90},"(val",[76,4597,584],{"class":82},[76,4599,4600],{"class":90},"num) \n",[76,4602,4603],{"class":78,"line":1711},[76,4604,4605],{"class":90},"        {\n",[76,4607,4608,4611,4613,4616,4618],{"class":78,"line":1717},[76,4609,4610],{"class":90},"            cout",[76,4612,3298],{"class":82},[76,4614,4615],{"class":126},"\"猜小了！\"",[76,4617,3298],{"class":82},[76,4619,3320],{"class":90},[76,4621,4622],{"class":78,"line":1728},[76,4623,4624],{"class":90},"        }\n",[76,4626,4627,4630,4632,4635,4637],{"class":78,"line":1740},[76,4628,4629],{"class":82},"        else",[76,4631,3811],{"class":82},[76,4633,4634],{"class":90}," (val",[76,4636,1829],{"class":82},[76,4638,4639],{"class":90},"num)\n",[76,4641,4642],{"class":78,"line":1746},[76,4643,4605],{"class":90},[76,4645,4646,4648,4650,4653,4655],{"class":78,"line":1751},[76,4647,4610],{"class":90},[76,4649,3298],{"class":82},[76,4651,4652],{"class":126},"\"猜大了！\"",[76,4654,3298],{"class":82},[76,4656,3320],{"class":90},[76,4658,4659],{"class":78,"line":1756},[76,4660,4624],{"class":90},[76,4662,4663],{"class":78,"line":1766},[76,4664,4665],{"class":82},"        else\n",[76,4667,4668],{"class":78,"line":1773},[76,4669,4605],{"class":90},[76,4671,4672,4674,4676,4679,4681],{"class":78,"line":1793},[76,4673,4610],{"class":90},[76,4675,3298],{"class":82},[76,4677,4678],{"class":126},"\"猜对了！\"",[76,4680,3298],{"class":82},[76,4682,3320],{"class":90},[76,4684,4685,4688],{"class":78,"line":1806},[76,4686,4687],{"class":82},"            break",[76,4689,3415],{"class":90},[76,4691,4692],{"class":78,"line":1817},[76,4693,4624],{"class":90},[76,4695,4696],{"class":78,"line":1822},[76,4697,4698],{"class":540},"        \u002F\u002F猜对 退出游戏\n",[76,4700,4701],{"class":78,"line":1835},[76,4702,4703],{"class":540},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[76,4705,4706],{"class":78,"line":1847},[76,4707,4283],{"class":90},[76,4709,4710],{"class":78,"line":1852},[76,4711,3685],{"class":90},[26,4713,4714],{"start":94},[29,4715,4716,4717,4720],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2416,4718,4719],{},"do...while会先执行一次循环语句","，在判断循环语句",[66,4722,4724],{"className":2264,"code":4723,"language":2266,"meta":71,"style":71},"\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",[73,4725,4726,4731,4739,4743,4755,4763,4767,4784,4791,4795,4808,4818],{"__ignoreMap":71},[76,4727,4728],{"class":78,"line":79},[76,4729,4730],{"class":540},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[76,4732,4733,4735,4737],{"class":78,"line":94},[76,4734,1360],{"class":82},[76,4736,4069],{"class":86},[76,4738,4072],{"class":90},[76,4740,4741],{"class":78,"line":133},[76,4742,3666],{"class":90},[76,4744,4745,4747,4749,4751,4753],{"class":78,"line":145},[76,4746,4081],{"class":82},[76,4748,4336],{"class":90},[76,4750,370],{"class":82},[76,4752,1294],{"class":119},[76,4754,3415],{"class":90},[76,4756,4757,4760],{"class":78,"line":152},[76,4758,4759],{"class":82},"    do",[76,4761,4762],{"class":90}," \n",[76,4764,4765],{"class":78,"line":157},[76,4766,4126],{"class":90},[76,4768,4769,4772,4774,4776,4778,4780,4782],{"class":78,"line":246},[76,4770,4771],{"class":86},"        std",[76,4773,4368],{"class":90},[76,4775,3298],{"class":82},[76,4777,3777],{"class":90},[76,4779,3298],{"class":82},[76,4781,4377],{"class":86},[76,4783,4380],{"class":90},[76,4785,4786,4788],{"class":78,"line":251},[76,4787,4385],{"class":90},[76,4789,4790],{"class":82},"++\n",[76,4792,4793],{"class":78,"line":257},[76,4794,4283],{"class":90},[76,4796,4797,4799,4801,4803,4805],{"class":78,"line":641},[76,4798,4347],{"class":82},[76,4800,4350],{"class":90},[76,4802,584],{"class":82},[76,4804,402],{"class":119},[76,4806,4807],{"class":90},");\n",[76,4809,4810,4812,4814,4816],{"class":78,"line":646},[76,4811,4399],{"class":86},[76,4813,123],{"class":90},[76,4815,4404],{"class":126},[76,4817,4807],{"class":90},[76,4819,4820],{"class":78,"line":659},[76,4821,3685],{"class":90},[19,4823,4824],{},"案例-水仙花数",[19,4826,4827],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4829,4830],{},"例如：1^3+5^3+3^3=153",[19,4832,4833],{},"请用do...while语句，求出所有3位数的水仙花数",[66,4835,4837],{"className":2264,"code":4836,"language":2266,"meta":71,"style":71},"#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",[73,4838,4839,4845,4855,4863,4867,4872,4884,4890,4894,4899,4915,4931,4947,4962,4981,4996,5043,5047,5059,5063,5071,5075,5089],{"__ignoreMap":71},[76,4840,4841,4843],{"class":78,"line":79},[76,4842,4046],{"class":82},[76,4844,4430],{"class":126},[76,4846,4847,4849,4851,4853],{"class":78,"line":94},[76,4848,4054],{"class":82},[76,4850,4057],{"class":82},[76,4852,4060],{"class":86},[76,4854,3415],{"class":90},[76,4856,4857,4859,4861],{"class":78,"line":133},[76,4858,1360],{"class":82},[76,4860,4069],{"class":86},[76,4862,4072],{"class":90},[76,4864,4865],{"class":78,"line":145},[76,4866,3666],{"class":90},[76,4868,4869],{"class":78,"line":152},[76,4870,4871],{"class":540},"    \u002F\u002F1.先打印所有三位数字\n",[76,4873,4874,4876,4878,4880,4882],{"class":78,"line":157},[76,4875,4081],{"class":82},[76,4877,4336],{"class":90},[76,4879,370],{"class":82},[76,4881,2575],{"class":119},[76,4883,3415],{"class":90},[76,4885,4886,4888],{"class":78,"line":246},[76,4887,4759],{"class":82},[76,4889,4762],{"class":90},[76,4891,4892],{"class":78,"line":251},[76,4893,4126],{"class":90},[76,4895,4896],{"class":78,"line":257},[76,4897,4898],{"class":540},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[76,4900,4901,4904,4906,4908,4910,4912],{"class":78,"line":641},[76,4902,4903],{"class":82},"        int",[76,4905,3519],{"class":90},[76,4907,370],{"class":82},[76,4909,1294],{"class":119},[76,4911,2324],{"class":90},[76,4913,4914],{"class":540}," \u002F\u002F个位\n",[76,4916,4917,4919,4922,4924,4926,4928],{"class":78,"line":646},[76,4918,4903],{"class":82},[76,4920,4921],{"class":90}," b",[76,4923,370],{"class":82},[76,4925,1294],{"class":119},[76,4927,2324],{"class":90},[76,4929,4930],{"class":540}," \u002F\u002F十位\n",[76,4932,4933,4935,4938,4940,4942,4944],{"class":78,"line":659},[76,4934,4903],{"class":82},[76,4936,4937],{"class":90}," c",[76,4939,370],{"class":82},[76,4941,1294],{"class":119},[76,4943,2324],{"class":90},[76,4945,4946],{"class":540}," \u002F\u002F百位\n",[76,4948,4949,4952,4954,4956,4958,4960],{"class":78,"line":1608},[76,4950,4951],{"class":90},"        a",[76,4953,370],{"class":82},[76,4955,3777],{"class":90},[76,4957,2592],{"class":82},[76,4959,402],{"class":119},[76,4961,3415],{"class":90},[76,4963,4964,4967,4969,4971,4973,4975,4977,4979],{"class":78,"line":1632},[76,4965,4966],{"class":90},"        b",[76,4968,370],{"class":82},[76,4970,3777],{"class":90},[76,4972,795],{"class":82},[76,4974,402],{"class":119},[76,4976,2592],{"class":82},[76,4978,402],{"class":119},[76,4980,3415],{"class":90},[76,4982,4983,4986,4988,4990,4992,4994],{"class":78,"line":1637},[76,4984,4985],{"class":90},"        c",[76,4987,370],{"class":82},[76,4989,3777],{"class":90},[76,4991,795],{"class":82},[76,4993,2575],{"class":119},[76,4995,3415],{"class":90},[76,4997,4998,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032,5035,5037,5040],{"class":78,"line":1642},[76,4999,4592],{"class":82},[76,5001,3938],{"class":90},[76,5003,2718],{"class":82},[76,5005,2503],{"class":90},[76,5007,2718],{"class":82},[76,5009,2503],{"class":90},[76,5011,376],{"class":82},[76,5013,2527],{"class":90},[76,5015,2718],{"class":82},[76,5017,2527],{"class":90},[76,5019,2718],{"class":82},[76,5021,2527],{"class":90},[76,5023,376],{"class":82},[76,5025,2552],{"class":90},[76,5027,2718],{"class":82},[76,5029,2552],{"class":90},[76,5031,2718],{"class":82},[76,5033,5034],{"class":90},"c ",[76,5036,1250],{"class":82},[76,5038,5039],{"class":90}," num)",[76,5041,5042],{"class":540}," \u002F\u002F如果是水仙花数，才打印\n",[76,5044,5045],{"class":78,"line":1652},[76,5046,4605],{"class":90},[76,5048,5049,5051,5053,5055,5057],{"class":78,"line":1660},[76,5050,4610],{"class":90},[76,5052,3298],{"class":82},[76,5054,3777],{"class":90},[76,5056,3298],{"class":82},[76,5058,3320],{"class":90},[76,5060,5061],{"class":78,"line":1683},[76,5062,4624],{"class":90},[76,5064,5065,5067,5069],{"class":78,"line":1698},[76,5066,4385],{"class":90},[76,5068,4388],{"class":82},[76,5070,3415],{"class":90},[76,5072,5073],{"class":78,"line":1711},[76,5074,4283],{"class":90},[76,5076,5077,5079,5082,5084,5087],{"class":78,"line":1717},[76,5078,4347],{"class":82},[76,5080,5081],{"class":90}," (num ",[76,5083,584],{"class":82},[76,5085,5086],{"class":119}," 1000",[76,5088,4807],{"class":90},[76,5090,5091],{"class":78,"line":1728},[76,5092,3685],{"class":90},[26,5094,5095],{"start":133},[29,5096,5097],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[66,5099,5101],{"className":2264,"code":5100,"language":2266,"meta":71,"style":71},"\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",[73,5102,5103,5108,5137,5141,5153,5157,5162,5173,5180,5184,5197,5201,5208,5212,5224,5233],{"__ignoreMap":71},[76,5104,5105],{"class":78,"line":79},[76,5106,5107],{"class":540},"\u002F\u002F从数字0-9打印\n",[76,5109,5110,5113,5115,5117,5120,5122,5124,5127,5129,5131,5133,5135],{"class":78,"line":94},[76,5111,5112],{"class":82},"for",[76,5114,123],{"class":90},[76,5116,1360],{"class":82},[76,5118,5119],{"class":90}," i",[76,5121,370],{"class":82},[76,5123,1294],{"class":119},[76,5125,5126],{"class":90},";i",[76,5128,584],{"class":82},[76,5130,402],{"class":119},[76,5132,5126],{"class":90},[76,5134,4388],{"class":82},[76,5136,130],{"class":90},[76,5138,5139],{"class":78,"line":133},[76,5140,3666],{"class":90},[76,5142,5143,5145,5147,5149,5151],{"class":78,"line":145},[76,5144,3671],{"class":90},[76,5146,3298],{"class":82},[76,5148,2705],{"class":90},[76,5150,3298],{"class":82},[76,5152,3320],{"class":90},[76,5154,5155],{"class":78,"line":152},[76,5156,3685],{"class":90},[76,5158,5159],{"class":78,"line":157},[76,5160,5161],{"class":540},"\u002F\u002F上式可以进行拆分\n",[76,5163,5164,5166,5168,5170],{"class":78,"line":246},[76,5165,1360],{"class":82},[76,5167,5119],{"class":90},[76,5169,370],{"class":82},[76,5171,5172],{"class":119},"0\n",[76,5174,5175,5177],{"class":78,"line":251},[76,5176,5112],{"class":82},[76,5178,5179],{"class":90},"(;;;)\n",[76,5181,5182],{"class":78,"line":257},[76,5183,3666],{"class":90},[76,5185,5186,5188,5191,5193,5195],{"class":78,"line":641},[76,5187,578],{"class":82},[76,5189,5190],{"class":90},"(i",[76,5192,611],{"class":82},[76,5194,402],{"class":119},[76,5196,130],{"class":90},[76,5198,5199],{"class":78,"line":646},[76,5200,4126],{"class":90},[76,5202,5203,5206],{"class":78,"line":659},[76,5204,5205],{"class":82},"        break",[76,5207,3415],{"class":90},[76,5209,5210],{"class":78,"line":1608},[76,5211,4283],{"class":90},[76,5213,5214,5216,5218,5220,5222],{"class":78,"line":1632},[76,5215,3671],{"class":90},[76,5217,3298],{"class":82},[76,5219,2705],{"class":90},[76,5221,3298],{"class":82},[76,5223,3320],{"class":90},[76,5225,5226,5229,5231],{"class":78,"line":1637},[76,5227,5228],{"class":90},"    i",[76,5230,4388],{"class":82},[76,5232,3415],{"class":90},[76,5234,5235],{"class":78,"line":1642},[76,5236,3685],{"class":90},[19,5238,5239],{},"小练习",[66,5241,5243],{"className":2264,"code":5242,"language":2266,"meta":71,"style":71},"#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",[73,5244,5245,5251,5261,5269,5273,5278,5283,5310,5314,5319,5324,5365,5369,5382,5386,5390,5394,5406,5410,5414],{"__ignoreMap":71},[76,5246,5247,5249],{"class":78,"line":79},[76,5248,4046],{"class":82},[76,5250,4049],{"class":126},[76,5252,5253,5255,5257,5259],{"class":78,"line":94},[76,5254,4054],{"class":82},[76,5256,4057],{"class":82},[76,5258,4060],{"class":86},[76,5260,3415],{"class":90},[76,5262,5263,5265,5267],{"class":78,"line":133},[76,5264,1360],{"class":82},[76,5266,4069],{"class":86},[76,5268,4072],{"class":90},[76,5270,5271],{"class":78,"line":145},[76,5272,3666],{"class":90},[76,5274,5275],{"class":78,"line":152},[76,5276,5277],{"class":540},"    \u002F\u002F敲桌子案例\n",[76,5279,5280],{"class":78,"line":157},[76,5281,5282],{"class":540},"    \u002F\u002F1.先输出1-100的数字\n",[76,5284,5285,5287,5289,5291,5293,5295,5297,5300,5302,5304,5306,5308],{"class":78,"line":246},[76,5286,1469],{"class":82},[76,5288,123],{"class":90},[76,5290,1360],{"class":82},[76,5292,5119],{"class":90},[76,5294,370],{"class":82},[76,5296,669],{"class":119},[76,5298,5299],{"class":90},"; i",[76,5301,1691],{"class":82},[76,5303,2575],{"class":119},[76,5305,5299],{"class":90},[76,5307,4388],{"class":82},[76,5309,130],{"class":90},[76,5311,5312],{"class":78,"line":251},[76,5313,4126],{"class":90},[76,5315,5316],{"class":78,"line":257},[76,5317,5318],{"class":540},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[76,5320,5321],{"class":78,"line":641},[76,5322,5323],{"class":540},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[76,5325,5326,5328,5330,5332,5334,5336,5338,5341,5343,5345,5347,5349,5351,5353,5355,5357,5359,5361,5363],{"class":78,"line":646},[76,5327,4592],{"class":82},[76,5329,5190],{"class":90},[76,5331,2592],{"class":82},[76,5333,2633],{"class":119},[76,5335,1250],{"class":82},[76,5337,1294],{"class":119},[76,5339,5340],{"class":82}," ||",[76,5342,5119],{"class":90},[76,5344,2592],{"class":82},[76,5346,402],{"class":119},[76,5348,1250],{"class":82},[76,5350,2633],{"class":119},[76,5352,5340],{"class":82},[76,5354,5119],{"class":90},[76,5356,795],{"class":82},[76,5358,402],{"class":119},[76,5360,1250],{"class":82},[76,5362,2633],{"class":119},[76,5364,130],{"class":90},[76,5366,5367],{"class":78,"line":659},[76,5368,4605],{"class":90},[76,5370,5371,5373,5375,5378,5380],{"class":78,"line":1608},[76,5372,4610],{"class":90},[76,5374,3298],{"class":82},[76,5376,5377],{"class":126},"\"敲桌子\"",[76,5379,3298],{"class":82},[76,5381,3320],{"class":90},[76,5383,5384],{"class":78,"line":1632},[76,5385,4624],{"class":90},[76,5387,5388],{"class":78,"line":1637},[76,5389,4665],{"class":82},[76,5391,5392],{"class":78,"line":1642},[76,5393,4605],{"class":90},[76,5395,5396,5398,5400,5402,5404],{"class":78,"line":1652},[76,5397,4610],{"class":90},[76,5399,3298],{"class":82},[76,5401,2705],{"class":90},[76,5403,3298],{"class":82},[76,5405,3320],{"class":90},[76,5407,5408],{"class":78,"line":1660},[76,5409,4624],{"class":90},[76,5411,5412],{"class":78,"line":1683},[76,5413,4283],{"class":90},[76,5415,5416],{"class":78,"line":1698},[76,5417,3685],{"class":90},[19,5419,5420],{},"嵌套实现星图",[66,5422,5424],{"className":2264,"code":5423,"language":2266,"meta":71,"style":71},"#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",[73,5425,5426,5432,5442,5450,5454,5480,5484,5513,5517,5528,5532,5541,5545],{"__ignoreMap":71},[76,5427,5428,5430],{"class":78,"line":79},[76,5429,4046],{"class":82},[76,5431,4049],{"class":126},[76,5433,5434,5436,5438,5440],{"class":78,"line":94},[76,5435,4054],{"class":82},[76,5437,4057],{"class":82},[76,5439,4060],{"class":86},[76,5441,3415],{"class":90},[76,5443,5444,5446,5448],{"class":78,"line":133},[76,5445,1360],{"class":82},[76,5447,4069],{"class":86},[76,5449,4072],{"class":90},[76,5451,5452],{"class":78,"line":145},[76,5453,3666],{"class":90},[76,5455,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5478],{"class":78,"line":152},[76,5457,1469],{"class":82},[76,5459,3770],{"class":90},[76,5461,1360],{"class":82},[76,5463,5119],{"class":90},[76,5465,370],{"class":82},[76,5467,1294],{"class":119},[76,5469,5126],{"class":90},[76,5471,584],{"class":82},[76,5473,402],{"class":119},[76,5475,5126],{"class":90},[76,5477,4388],{"class":82},[76,5479,130],{"class":90},[76,5481,5482],{"class":78,"line":157},[76,5483,4126],{"class":90},[76,5485,5486,5489,5491,5493,5496,5498,5500,5503,5505,5507,5509,5511],{"class":78,"line":246},[76,5487,5488],{"class":82},"        for",[76,5490,3770],{"class":90},[76,5492,1360],{"class":82},[76,5494,5495],{"class":90}," j",[76,5497,370],{"class":82},[76,5499,1294],{"class":119},[76,5501,5502],{"class":90},";j",[76,5504,584],{"class":82},[76,5506,402],{"class":119},[76,5508,5502],{"class":90},[76,5510,4388],{"class":82},[76,5512,130],{"class":90},[76,5514,5515],{"class":78,"line":251},[76,5516,4605],{"class":90},[76,5518,5519,5521,5523,5526],{"class":78,"line":257},[76,5520,4610],{"class":90},[76,5522,3298],{"class":82},[76,5524,5525],{"class":126},"\"*\"",[76,5527,3415],{"class":90},[76,5529,5530],{"class":78,"line":641},[76,5531,4624],{"class":90},[76,5533,5534,5537,5539],{"class":78,"line":646},[76,5535,5536],{"class":90},"        cout",[76,5538,3298],{"class":82},[76,5540,3320],{"class":90},[76,5542,5543],{"class":78,"line":659},[76,5544,4283],{"class":90},[76,5546,5547],{"class":78,"line":1608},[76,5548,3685],{"class":90},[19,5550,5551],{},"乘法口诀表",[66,5553,5555],{"className":2264,"code":5554,"language":2266,"meta":71,"style":71},"#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",[73,5556,5557,5563,5573,5581,5585,5611,5615,5640,5644,5684,5688,5696,5700],{"__ignoreMap":71},[76,5558,5559,5561],{"class":78,"line":79},[76,5560,4046],{"class":82},[76,5562,4430],{"class":126},[76,5564,5565,5567,5569,5571],{"class":78,"line":94},[76,5566,4054],{"class":82},[76,5568,4057],{"class":82},[76,5570,4060],{"class":86},[76,5572,3415],{"class":90},[76,5574,5575,5577,5579],{"class":78,"line":133},[76,5576,1360],{"class":82},[76,5578,4069],{"class":86},[76,5580,4072],{"class":90},[76,5582,5583],{"class":78,"line":145},[76,5584,3666],{"class":90},[76,5586,5587,5589,5591,5593,5595,5597,5599,5601,5603,5605,5607,5609],{"class":78,"line":152},[76,5588,1469],{"class":82},[76,5590,123],{"class":90},[76,5592,1360],{"class":82},[76,5594,5119],{"class":90},[76,5596,370],{"class":82},[76,5598,669],{"class":119},[76,5600,5126],{"class":90},[76,5602,584],{"class":82},[76,5604,402],{"class":119},[76,5606,5126],{"class":90},[76,5608,4388],{"class":82},[76,5610,130],{"class":90},[76,5612,5613],{"class":78,"line":157},[76,5614,4126],{"class":90},[76,5616,5617,5619,5621,5623,5625,5627,5629,5631,5633,5636,5638],{"class":78,"line":246},[76,5618,5488],{"class":82},[76,5620,123],{"class":90},[76,5622,1360],{"class":82},[76,5624,5495],{"class":90},[76,5626,370],{"class":82},[76,5628,669],{"class":119},[76,5630,5502],{"class":90},[76,5632,1691],{"class":82},[76,5634,5635],{"class":90},"i;j",[76,5637,4388],{"class":82},[76,5639,130],{"class":90},[76,5641,5642],{"class":78,"line":251},[76,5643,4605],{"class":90},[76,5645,5646,5648,5650,5652,5654,5656,5658,5660,5662,5665,5667,5669,5671,5673,5675,5678,5680,5682],{"class":78,"line":257},[76,5647,4610],{"class":90},[76,5649,3298],{"class":82},[76,5651,2730],{"class":90},[76,5653,3298],{"class":82},[76,5655,5525],{"class":126},[76,5657,3298],{"class":82},[76,5659,2705],{"class":90},[76,5661,3298],{"class":82},[76,5663,5664],{"class":126},"\"=\"",[76,5666,3298],{"class":82},[76,5668,2705],{"class":90},[76,5670,2718],{"class":82},[76,5672,2730],{"class":90},[76,5674,3298],{"class":82},[76,5676,5677],{"class":126},"'",[76,5679,3355],{"class":119},[76,5681,5677],{"class":126},[76,5683,3415],{"class":90},[76,5685,5686],{"class":78,"line":641},[76,5687,4624],{"class":90},[76,5689,5690,5692,5694],{"class":78,"line":646},[76,5691,5536],{"class":90},[76,5693,3298],{"class":82},[76,5695,3320],{"class":90},[76,5697,5698],{"class":78,"line":659},[76,5699,4283],{"class":90},[76,5701,5702],{"class":78,"line":1608},[76,5703,3685],{"class":90},[889,5705,5707],{"id":5706},"_163跳出语句","1.6.3跳出语句",[26,5709,5710],{},[29,5711,5712],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5714,5715],{},"break使用时机：",[3261,5717,5718,5721,5724],{},[29,5719,5720],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5722,5723],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5725,5726],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5728,5729,5732],{"start":94},[29,5730,5731],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5733,5734],{},"goto语句\n语法：goto 标记;",[19,5736,5737],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[66,5739,5741],{"className":2264,"code":5740,"language":2266,"meta":71,"style":71},"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",[73,5742,5743,5751,5755,5768,5778,5791,5804,5817,5824,5840],{"__ignoreMap":71},[76,5744,5745,5747,5749],{"class":78,"line":79},[76,5746,1360],{"class":82},[76,5748,4069],{"class":86},[76,5750,4072],{"class":90},[76,5752,5753],{"class":78,"line":94},[76,5754,3666],{"class":90},[76,5756,5757,5759,5761,5764,5766],{"class":78,"line":133},[76,5758,3671],{"class":90},[76,5760,3298],{"class":82},[76,5762,5763],{"class":126},"\"1\"",[76,5765,3298],{"class":82},[76,5767,3320],{"class":90},[76,5769,5770,5773,5776],{"class":78,"line":145},[76,5771,5772],{"class":82},"    goto",[76,5774,5775],{"class":86}," FLAG",[76,5777,3415],{"class":90},[76,5779,5780,5782,5784,5787,5789],{"class":78,"line":152},[76,5781,3671],{"class":90},[76,5783,3298],{"class":82},[76,5785,5786],{"class":126},"\"2\"",[76,5788,3298],{"class":82},[76,5790,3320],{"class":90},[76,5792,5793,5795,5797,5800,5802],{"class":78,"line":157},[76,5794,3671],{"class":90},[76,5796,3298],{"class":82},[76,5798,5799],{"class":126},"\"3\"",[76,5801,3298],{"class":82},[76,5803,3320],{"class":90},[76,5805,5806,5808,5810,5813,5815],{"class":78,"line":246},[76,5807,3671],{"class":90},[76,5809,3298],{"class":82},[76,5811,5812],{"class":126},"\"4\"",[76,5814,3298],{"class":82},[76,5816,3320],{"class":90},[76,5818,5819,5822],{"class":78,"line":251},[76,5820,5821],{"class":86},"    FLAG",[76,5823,590],{"class":90},[76,5825,5826,5828,5830,5833,5835,5837],{"class":78,"line":257},[76,5827,3671],{"class":90},[76,5829,3298],{"class":82},[76,5831,5832],{"class":126},"\"5\"",[76,5834,3298],{"class":82},[76,5836,3363],{"class":90},[76,5838,5839],{"class":540},"\u002F\u002F跳过了2,3,4,直接到5\n",[76,5841,5842],{"class":78,"line":641},[76,5843,3685],{"class":90},[14,5845,5847],{"id":5846},"_17数组","1.7数组",[889,5849,5851],{"id":5850},"_171一维数组","1.7.1一维数组",[26,5853,5854],{},[29,5855,5856],{},"一维数组定义方式",[2404,5858,5859,5869],{},[2407,5860,5861],{},[2410,5862,5863,5866],{},[2413,5864,5865],{},"方式",[2413,5867,5868],{},"注意事项",[2451,5870,5871,5885,5895],{},[2410,5872,5873,5879],{},[2456,5874,5875,5876,2324],{},"数据类型 数组名",[76,5877,5878],{},"数组长度",[2456,5880,5881,5882,5884],{},"这种方式是先定义再arr",[76,5883,2705],{},"赋值",[2410,5886,5887,5892],{},[2456,5888,5875,5889,5891],{},[76,5890,5878],{},"={值1,值2....};",[2456,5893,5894],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2410,5896,5897,5901],{},[2456,5898,5875,5899,5891],{},[76,5900],{},[2456,5902,5903,5904,5906],{},"int arr",[76,5905],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5908,5909],{"start":94},[29,5910,5911],{},"一维数组数组名\n用途：",[3261,5913,5914],{},[29,5915,5916],{},"1.可以统计整个数组在内存中的长度：",[66,5918,5920],{"className":2264,"code":5919,"language":2266,"meta":71,"style":71},"sizeof(arr);\nsizeof(arr[0]);\n",[73,5921,5922,5929],{"__ignoreMap":71},[76,5923,5924,5926],{"class":78,"line":79},[76,5925,2273],{"class":82},[76,5927,5928],{"class":90},"(arr);\n",[76,5930,5931,5933,5936,5938],{"class":78,"line":94},[76,5932,2273],{"class":82},[76,5934,5935],{"class":90},"(arr[",[76,5937,1294],{"class":119},[76,5939,5940],{"class":90},"]);\n",[3261,5942,5943],{},[29,5944,5945],{},"2.可以获取数组在内存中的首地址:",[66,5947,5949],{"className":2264,"code":5948,"language":2266,"meta":71,"style":71},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[73,5950,5951,5956,5969,5974],{"__ignoreMap":71},[76,5952,5953],{"class":78,"line":79},[76,5954,5955],{"class":540},"\u002F\u002F查看16进制的首地址\n",[76,5957,5958,5960,5962,5965,5967],{"class":78,"line":94},[76,5959,3490],{"class":90},[76,5961,3298],{"class":82},[76,5963,5964],{"class":90},"arr",[76,5966,3298],{"class":82},[76,5968,3320],{"class":90},[76,5970,5971],{"class":78,"line":133},[76,5972,5973],{"class":540},"\u002F\u002F看10进制数\n",[76,5975,5976,5978,5980,5982,5984,5986,5988,5991,5993,5995,5997],{"class":78,"line":145},[76,5977,3490],{"class":90},[76,5979,3298],{"class":82},[76,5981,123],{"class":90},[76,5983,1360],{"class":82},[76,5985,2693],{"class":90},[76,5987,2617],{"class":82},[76,5989,5990],{"class":90},"arr[",[76,5992,1294],{"class":119},[76,5994,3196],{"class":90},[76,5996,3298],{"class":82},[76,5998,3320],{"class":90},[19,6000,6001],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3261,6003,6004],{},[29,6005,6006],{},"1️⃣五只小猪称体重",[66,6008,6010],{"className":2264,"code":6009,"language":2266,"meta":71,"style":71},"#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",[73,6011,6012,6018,6028,6036,6040,6080,6093,6119,6123,6135,6139,6149,6153,6157,6170,6178],{"__ignoreMap":71},[76,6013,6014,6016],{"class":78,"line":79},[76,6015,4046],{"class":82},[76,6017,4049],{"class":126},[76,6019,6020,6022,6024,6026],{"class":78,"line":94},[76,6021,4054],{"class":82},[76,6023,4057],{"class":82},[76,6025,4060],{"class":86},[76,6027,3415],{"class":90},[76,6029,6030,6032,6034],{"class":78,"line":133},[76,6031,1360],{"class":82},[76,6033,4069],{"class":86},[76,6035,4072],{"class":90},[76,6037,6038],{"class":78,"line":145},[76,6039,3666],{"class":90},[76,6041,6042,6044,6047,6049,6051,6053,6055,6058,6060,6063,6065,6067,6069,6072,6074,6077],{"class":78,"line":152},[76,6043,4081],{"class":82},[76,6045,6046],{"class":90}," arr[",[76,6048,2583],{"class":119},[76,6050,3196],{"class":90},[76,6052,370],{"class":82},[76,6054,298],{"class":90},[76,6056,6057],{"class":119},"300",[76,6059,2642],{"class":90},[76,6061,6062],{"class":119},"350",[76,6064,2642],{"class":90},[76,6066,2133],{"class":119},[76,6068,2642],{"class":90},[76,6070,6071],{"class":119},"400",[76,6073,2642],{"class":90},[76,6075,6076],{"class":119},"250",[76,6078,6079],{"class":90},"};\n",[76,6081,6082,6084,6087,6089,6091],{"class":78,"line":157},[76,6083,4081],{"class":82},[76,6085,6086],{"class":90}," tmp",[76,6088,370],{"class":82},[76,6090,1294],{"class":119},[76,6092,3415],{"class":90},[76,6094,6095,6097,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117],{"class":78,"line":246},[76,6096,1469],{"class":82},[76,6098,3770],{"class":90},[76,6100,1360],{"class":82},[76,6102,5119],{"class":90},[76,6104,370],{"class":82},[76,6106,1294],{"class":119},[76,6108,5126],{"class":90},[76,6110,584],{"class":82},[76,6112,2583],{"class":119},[76,6114,5126],{"class":90},[76,6116,4388],{"class":82},[76,6118,130],{"class":90},[76,6120,6121],{"class":78,"line":251},[76,6122,4126],{"class":90},[76,6124,6125,6127,6130,6132],{"class":78,"line":257},[76,6126,4592],{"class":82},[76,6128,6129],{"class":90},"(tmp",[76,6131,584],{"class":82},[76,6133,6134],{"class":90},"arr[i])\n",[76,6136,6137],{"class":78,"line":641},[76,6138,4605],{"class":90},[76,6140,6141,6144,6146],{"class":78,"line":646},[76,6142,6143],{"class":90},"            tmp",[76,6145,370],{"class":82},[76,6147,6148],{"class":90},"arr[i];\n",[76,6150,6151],{"class":78,"line":659},[76,6152,4624],{"class":90},[76,6154,6155],{"class":78,"line":1608},[76,6156,4283],{"class":90},[76,6158,6159,6161,6163,6166,6168],{"class":78,"line":1632},[76,6160,3671],{"class":90},[76,6162,3298],{"class":82},[76,6164,6165],{"class":90},"tmp",[76,6167,3298],{"class":82},[76,6169,3320],{"class":90},[76,6171,6172,6174,6176],{"class":78,"line":1637},[76,6173,441],{"class":82},[76,6175,587],{"class":119},[76,6177,3415],{"class":90},[76,6179,6180],{"class":78,"line":1642},[76,6181,3685],{"class":90},[3261,6183,6184],{},[29,6185,6186],{},"2️⃣数组元素逆置",[66,6188,6190],{"className":2264,"code":6189,"language":2266,"meta":71,"style":71},"\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",[73,6191,6192,6197,6203,6213,6221,6225,6260,6276,6308,6321,6326,6331,6343,6353,6363,6368,6377,6387,6392,6397,6424,6428,6444,6448,6459,6468],{"__ignoreMap":71},[76,6193,6194],{"class":78,"line":79},[76,6195,6196],{"class":540},"\u002F\u002F元素逆置\n",[76,6198,6199,6201],{"class":78,"line":94},[76,6200,4046],{"class":82},[76,6202,4049],{"class":126},[76,6204,6205,6207,6209,6211],{"class":78,"line":133},[76,6206,4054],{"class":82},[76,6208,4057],{"class":82},[76,6210,4060],{"class":86},[76,6212,3415],{"class":90},[76,6214,6215,6217,6219],{"class":78,"line":145},[76,6216,1360],{"class":82},[76,6218,4069],{"class":86},[76,6220,4072],{"class":90},[76,6222,6223],{"class":78,"line":152},[76,6224,3666],{"class":90},[76,6226,6227,6230,6232,6234,6236,6238,6240,6242,6244,6246,6248,6250,6252,6254,6256,6258],{"class":78,"line":157},[76,6228,6229],{"class":82},"   int",[76,6231,6046],{"class":90},[76,6233,2583],{"class":119},[76,6235,3196],{"class":90},[76,6237,370],{"class":82},[76,6239,298],{"class":90},[76,6241,669],{"class":119},[76,6243,2642],{"class":90},[76,6245,2345],{"class":119},[76,6247,2642],{"class":90},[76,6249,2339],{"class":119},[76,6251,2642],{"class":90},[76,6253,2557],{"class":119},[76,6255,2642],{"class":90},[76,6257,2583],{"class":119},[76,6259,6079],{"class":90},[76,6261,6262,6264,6267,6269,6271,6273],{"class":78,"line":246},[76,6263,6229],{"class":82},[76,6265,6266],{"class":90}," start",[76,6268,370],{"class":82},[76,6270,1294],{"class":119},[76,6272,2324],{"class":90},[76,6274,6275],{"class":540},"\u002F\u002F起始下标\n",[76,6277,6278,6280,6283,6286,6289,6292,6294,6296,6299,6301,6303,6305],{"class":78,"line":251},[76,6279,6229],{"class":82},[76,6281,6282],{"class":90}," end",[76,6284,6285],{"class":82},"=sizeof",[76,6287,6288],{"class":90},"(arr)",[76,6290,6291],{"class":82},"\u002Fsizeof",[76,6293,5935],{"class":90},[76,6295,1294],{"class":119},[76,6297,6298],{"class":90},"])",[76,6300,666],{"class":82},[76,6302,669],{"class":119},[76,6304,2324],{"class":90},[76,6306,6307],{"class":540},"\u002F\u002F结束下标\n",[76,6309,6310,6313,6316,6318],{"class":78,"line":257},[76,6311,6312],{"class":82},"   while",[76,6314,6315],{"class":90}," (start",[76,6317,584],{"class":82},[76,6319,6320],{"class":90},"end)\n",[76,6322,6323],{"class":78,"line":641},[76,6324,6325],{"class":90},"   {\n",[76,6327,6328],{"class":78,"line":646},[76,6329,6330],{"class":540},"    \u002F\u002F实现元素互换代码\n",[76,6332,6333,6335,6338,6340],{"class":78,"line":659},[76,6334,4081],{"class":82},[76,6336,6337],{"class":90}," temp",[76,6339,370],{"class":82},[76,6341,6342],{"class":90},"arr[start];\n",[76,6344,6345,6348,6350],{"class":78,"line":1608},[76,6346,6347],{"class":90},"    arr[start]",[76,6349,370],{"class":82},[76,6351,6352],{"class":90},"arr[end];\n",[76,6354,6355,6358,6360],{"class":78,"line":1632},[76,6356,6357],{"class":90},"    arr[end]",[76,6359,370],{"class":82},[76,6361,6362],{"class":90},"temp;\n",[76,6364,6365],{"class":78,"line":1637},[76,6366,6367],{"class":540},"    \u002F\u002F下标更新\n",[76,6369,6370,6373,6375],{"class":78,"line":1642},[76,6371,6372],{"class":90},"    start",[76,6374,4388],{"class":82},[76,6376,3415],{"class":90},[76,6378,6379,6382,6385],{"class":78,"line":1652},[76,6380,6381],{"class":90},"    end",[76,6383,6384],{"class":82},"--",[76,6386,3415],{"class":90},[76,6388,6389],{"class":78,"line":1660},[76,6390,6391],{"class":90},"   }\n",[76,6393,6394],{"class":78,"line":1683},[76,6395,6396],{"class":540},"   \u002F\u002F输出逆置后的数组\n",[76,6398,6399,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422],{"class":78,"line":1698},[76,6400,6401],{"class":82},"   for",[76,6403,3770],{"class":90},[76,6405,1360],{"class":82},[76,6407,5119],{"class":90},[76,6409,370],{"class":82},[76,6411,1294],{"class":119},[76,6413,5126],{"class":90},[76,6415,584],{"class":82},[76,6417,2583],{"class":119},[76,6419,5126],{"class":90},[76,6421,4388],{"class":82},[76,6423,130],{"class":90},[76,6425,6426],{"class":78,"line":1711},[76,6427,6325],{"class":90},[76,6429,6430,6432,6434,6437,6439,6442],{"class":78,"line":1717},[76,6431,3671],{"class":90},[76,6433,3298],{"class":82},[76,6435,6436],{"class":90},"arr[i]",[76,6438,3298],{"class":82},[76,6440,6441],{"class":126},"\" \"",[76,6443,3415],{"class":90},[76,6445,6446],{"class":78,"line":1728},[76,6447,6391],{"class":90},[76,6449,6450,6453,6455,6457],{"class":78,"line":1740},[76,6451,6452],{"class":86},"   system",[76,6454,123],{"class":90},[76,6456,4404],{"class":126},[76,6458,4807],{"class":90},[76,6460,6461,6464,6466],{"class":78,"line":1746},[76,6462,6463],{"class":82},"   return",[76,6465,587],{"class":119},[76,6467,3415],{"class":90},[76,6469,6470],{"class":78,"line":1751},[76,6471,3685],{"class":90},[3261,6473,6474],{},[29,6475,6476],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[66,6478,6480],{"className":2264,"code":6479,"language":2266,"meta":71,"style":71},"\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",[73,6481,6482,6487,6493,6503,6511,6515,6567,6580,6606,6610,6624,6628,6633,6638,6668,6672,6677,6711,6715,6720,6740,6745,6757,6773,6788,6793,6797,6801,6814,6840,6844,6858,6862,6870],{"__ignoreMap":71},[76,6483,6484],{"class":78,"line":79},[76,6485,6486],{"class":540},"\u002F\u002F冒泡排序,升序\n",[76,6488,6489,6491],{"class":78,"line":94},[76,6490,4046],{"class":82},[76,6492,4049],{"class":126},[76,6494,6495,6497,6499,6501],{"class":78,"line":133},[76,6496,4054],{"class":82},[76,6498,4057],{"class":82},[76,6500,4060],{"class":86},[76,6502,3415],{"class":90},[76,6504,6505,6507,6509],{"class":78,"line":145},[76,6506,1360],{"class":82},[76,6508,4069],{"class":86},[76,6510,4072],{"class":90},[76,6512,6513],{"class":78,"line":152},[76,6514,3666],{"class":90},[76,6516,6517,6519,6521,6523,6526,6528,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6559,6561,6563,6565],{"class":78,"line":157},[76,6518,4081],{"class":82},[76,6520,6046],{"class":90},[76,6522,2684],{"class":119},[76,6524,6525],{"class":90},"] ",[76,6527,370],{"class":82},[76,6529,6530],{"class":90}," {",[76,6532,2557],{"class":119},[76,6534,2642],{"class":90},[76,6536,2345],{"class":119},[76,6538,2642],{"class":90},[76,6540,2659],{"class":119},[76,6542,2642],{"class":90},[76,6544,1294],{"class":119},[76,6546,2642],{"class":90},[76,6548,2583],{"class":119},[76,6550,2642],{"class":90},[76,6552,2633],{"class":119},[76,6554,2642],{"class":90},[76,6556,669],{"class":119},[76,6558,2642],{"class":90},[76,6560,2339],{"class":119},[76,6562,2642],{"class":90},[76,6564,2684],{"class":119},[76,6566,6079],{"class":90},[76,6568,6569,6571,6573,6576,6578],{"class":78,"line":246},[76,6570,3671],{"class":90},[76,6572,3298],{"class":82},[76,6574,6575],{"class":126},"\"排序前：\"",[76,6577,3298],{"class":82},[76,6579,3320],{"class":90},[76,6581,6582,6584,6586,6588,6590,6592,6594,6596,6598,6600,6602,6604],{"class":78,"line":251},[76,6583,1469],{"class":82},[76,6585,3770],{"class":90},[76,6587,1360],{"class":82},[76,6589,5119],{"class":90},[76,6591,370],{"class":82},[76,6593,1294],{"class":119},[76,6595,5126],{"class":90},[76,6597,584],{"class":82},[76,6599,2684],{"class":119},[76,6601,5126],{"class":90},[76,6603,4388],{"class":82},[76,6605,130],{"class":90},[76,6607,6608],{"class":78,"line":257},[76,6609,4126],{"class":90},[76,6611,6612,6614,6616,6618,6620,6622],{"class":78,"line":641},[76,6613,5536],{"class":90},[76,6615,3298],{"class":82},[76,6617,6436],{"class":90},[76,6619,3298],{"class":82},[76,6621,6441],{"class":126},[76,6623,3415],{"class":90},[76,6625,6626],{"class":78,"line":646},[76,6627,4283],{"class":90},[76,6629,6630],{"class":78,"line":659},[76,6631,6632],{"class":540},"    \u002F\u002F开始冒泡排序\n",[76,6634,6635],{"class":78,"line":1608},[76,6636,6637],{"class":540},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[76,6639,6640,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660,6662,6664,6666],{"class":78,"line":1632},[76,6641,1469],{"class":82},[76,6643,3770],{"class":90},[76,6645,1360],{"class":82},[76,6647,5119],{"class":90},[76,6649,370],{"class":82},[76,6651,1294],{"class":119},[76,6653,5126],{"class":90},[76,6655,584],{"class":82},[76,6657,2684],{"class":119},[76,6659,666],{"class":82},[76,6661,669],{"class":119},[76,6663,5126],{"class":90},[76,6665,4388],{"class":82},[76,6667,130],{"class":90},[76,6669,6670],{"class":78,"line":1637},[76,6671,4126],{"class":90},[76,6673,6674],{"class":78,"line":1642},[76,6675,6676],{"class":540},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[76,6678,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6709],{"class":78,"line":1652},[76,6680,5488],{"class":82},[76,6682,3770],{"class":90},[76,6684,1360],{"class":82},[76,6686,5495],{"class":90},[76,6688,370],{"class":82},[76,6690,1294],{"class":119},[76,6692,5502],{"class":90},[76,6694,584],{"class":82},[76,6696,2684],{"class":119},[76,6698,666],{"class":82},[76,6700,2705],{"class":90},[76,6702,666],{"class":82},[76,6704,669],{"class":119},[76,6706,5502],{"class":90},[76,6708,4388],{"class":82},[76,6710,130],{"class":90},[76,6712,6713],{"class":78,"line":1660},[76,6714,4605],{"class":90},[76,6716,6717],{"class":78,"line":1683},[76,6718,6719],{"class":540},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[76,6721,6722,6725,6728,6730,6733,6735,6737],{"class":78,"line":1698},[76,6723,6724],{"class":82},"            if",[76,6726,6727],{"class":90},"(arr[j]",[76,6729,1829],{"class":82},[76,6731,6732],{"class":90},"arr[j",[76,6734,376],{"class":82},[76,6736,669],{"class":119},[76,6738,6739],{"class":90},"])\n",[76,6741,6742],{"class":78,"line":1711},[76,6743,6744],{"class":90},"            {\n",[76,6746,6747,6750,6752,6754],{"class":78,"line":1717},[76,6748,6749],{"class":82},"                int",[76,6751,6337],{"class":90},[76,6753,370],{"class":82},[76,6755,6756],{"class":90},"arr[j];\n",[76,6758,6759,6762,6764,6766,6768,6770],{"class":78,"line":1728},[76,6760,6761],{"class":90},"                arr[j]",[76,6763,370],{"class":82},[76,6765,6732],{"class":90},[76,6767,376],{"class":82},[76,6769,669],{"class":119},[76,6771,6772],{"class":90},"];\n",[76,6774,6775,6778,6780,6782,6784,6786],{"class":78,"line":1740},[76,6776,6777],{"class":90},"                arr[j",[76,6779,376],{"class":82},[76,6781,669],{"class":119},[76,6783,3196],{"class":90},[76,6785,370],{"class":82},[76,6787,6362],{"class":90},[76,6789,6790],{"class":78,"line":1746},[76,6791,6792],{"class":90},"            }\n",[76,6794,6795],{"class":78,"line":1751},[76,6796,4624],{"class":90},[76,6798,6799],{"class":78,"line":1756},[76,6800,4283],{"class":90},[76,6802,6803,6805,6807,6810,6812],{"class":78,"line":1766},[76,6804,3671],{"class":90},[76,6806,3298],{"class":82},[76,6808,6809],{"class":126},"\"排序后：\"",[76,6811,3298],{"class":82},[76,6813,3320],{"class":90},[76,6815,6816,6818,6820,6822,6824,6826,6828,6830,6832,6834,6836,6838],{"class":78,"line":1773},[76,6817,1469],{"class":82},[76,6819,3770],{"class":90},[76,6821,1360],{"class":82},[76,6823,5119],{"class":90},[76,6825,370],{"class":82},[76,6827,1294],{"class":119},[76,6829,5126],{"class":90},[76,6831,584],{"class":82},[76,6833,2684],{"class":119},[76,6835,5126],{"class":90},[76,6837,4388],{"class":82},[76,6839,130],{"class":90},[76,6841,6842],{"class":78,"line":1793},[76,6843,4126],{"class":90},[76,6845,6846,6848,6850,6852,6854,6856],{"class":78,"line":1806},[76,6847,5536],{"class":90},[76,6849,3298],{"class":82},[76,6851,6436],{"class":90},[76,6853,3298],{"class":82},[76,6855,6441],{"class":126},[76,6857,3415],{"class":90},[76,6859,6860],{"class":78,"line":1817},[76,6861,4283],{"class":90},[76,6863,6864,6866,6868],{"class":78,"line":1822},[76,6865,441],{"class":82},[76,6867,587],{"class":119},[76,6869,3415],{"class":90},[76,6871,6872],{"class":78,"line":1835},[76,6873,3685],{"class":90},[889,6875,6877],{"id":6876},"_172二维数组","1.7.2二维数组",[26,6879,6880],{},[29,6881,6882],{},"二维数组的四种定义方式",[2404,6884,6885,6894],{},[2407,6886,6887],{},[2410,6888,6889,6892],{},[2413,6890,6891],{},"序号",[2413,6893,5865],{},[2451,6895,6896,6906,6915,6924,6933],{},[2410,6897,6898,6900],{},[2456,6899,669],{},[2456,6901,6902,6903,2324],{},"数据类型 数组名[行数]",[76,6904,6905],{},"列数",[2410,6907,6908,6910],{},[2456,6909,2345],{},[2456,6911,6902,6912,6914],{},[76,6913,6905],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2410,6916,6917,6919],{},[2456,6918,2339],{},[2456,6920,6902,6921,6923],{},[76,6922,6905],{},"={数据1,数据2,数据3...}",[2410,6925,6926,6928],{},[2456,6927,2557],{},[2456,6929,6930,6931,6923],{},"数据类型 数组名[]",[76,6932,6905],{},[2410,6934,6935,6938],{},[2456,6936,6937],{},"注意：不能只省略列数",[2456,6939],{},[26,6941,6942],{"start":94},[29,6943,6944],{},"二维数组数组名",[3261,6946,6947,6950],{},[29,6948,6949],{},"1.查看二维数组所占内存空间",[29,6951,6952],{},"2.获取二维数组首地址",[19,6954,6955],{},"已知二维数组，求二维数组的行数与列数",[66,6957,6959],{"className":2264,"code":6958,"language":2266,"meta":71,"style":71},"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",[73,6960,6961,6969,6973,6991,6995,7013,7029,7034,7059,7092],{"__ignoreMap":71},[76,6962,6963,6965,6967],{"class":78,"line":79},[76,6964,1360],{"class":82},[76,6966,4069],{"class":86},[76,6968,4072],{"class":90},[76,6970,6971],{"class":78,"line":94},[76,6972,3666],{"class":90},[76,6974,6975,6977,6979,6981,6984,6986,6988],{"class":78,"line":133},[76,6976,4081],{"class":82},[76,6978,6046],{"class":90},[76,6980,2345],{"class":119},[76,6982,6983],{"class":90},"][",[76,6985,2339],{"class":119},[76,6987,3196],{"class":90},[76,6989,6990],{"class":82},"=\n",[76,6992,6993],{"class":78,"line":145},[76,6994,4126],{"class":90},[76,6996,6997,7000,7002,7004,7006,7008,7010],{"class":78,"line":152},[76,6998,6999],{"class":90},"        {",[76,7001,669],{"class":119},[76,7003,2642],{"class":90},[76,7005,2345],{"class":119},[76,7007,2642],{"class":90},[76,7009,2339],{"class":119},[76,7011,7012],{"class":90},"},\n",[76,7014,7015,7017,7019,7021,7023,7025,7027],{"class":78,"line":157},[76,7016,6999],{"class":90},[76,7018,2557],{"class":119},[76,7020,2642],{"class":90},[76,7022,2583],{"class":119},[76,7024,2642],{"class":90},[76,7026,2608],{"class":119},[76,7028,3685],{"class":90},[76,7030,7031],{"class":78,"line":246},[76,7032,7033],{"class":90},"    };\n",[76,7035,7036,7038,7040,7043,7045,7047,7049,7051,7053,7055,7057],{"class":78,"line":251},[76,7037,3671],{"class":90},[76,7039,3298],{"class":82},[76,7041,7042],{"class":126},"\"二维数组的行数\"",[76,7044,3493],{"class":82},[76,7046,6288],{"class":90},[76,7048,6291],{"class":82},[76,7050,5935],{"class":90},[76,7052,1294],{"class":119},[76,7054,6298],{"class":90},[76,7056,3298],{"class":82},[76,7058,3320],{"class":90},[76,7060,7061,7063,7065,7068,7070,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090],{"class":78,"line":257},[76,7062,3671],{"class":90},[76,7064,3298],{"class":82},[76,7066,7067],{"class":126},"\"二维数组的列数\"",[76,7069,3493],{"class":82},[76,7071,5935],{"class":90},[76,7073,1294],{"class":119},[76,7075,6298],{"class":90},[76,7077,6291],{"class":82},[76,7079,5935],{"class":90},[76,7081,1294],{"class":119},[76,7083,6983],{"class":90},[76,7085,1294],{"class":119},[76,7087,6298],{"class":90},[76,7089,3298],{"class":82},[76,7091,3320],{"class":90},[76,7093,7094],{"class":78,"line":641},[76,7095,3685],{"class":90},[19,7097,7098],{},"查看二维数组首地址",[66,7100,7102],{"className":2264,"code":7101,"language":2266,"meta":71,"style":71},"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",[73,7103,7104,7121,7147,7172],{"__ignoreMap":71},[76,7105,7106,7108,7110,7113,7115,7117,7119],{"class":78,"line":79},[76,7107,3490],{"class":90},[76,7109,3298],{"class":82},[76,7111,7112],{"class":126},"\"二维数组首地址：\"",[76,7114,3298],{"class":82},[76,7116,5964],{"class":90},[76,7118,3298],{"class":82},[76,7120,3320],{"class":90},[76,7122,7123,7125,7127,7130,7132,7134,7136,7139,7141,7143,7145],{"class":78,"line":94},[76,7124,3490],{"class":90},[76,7126,3298],{"class":82},[76,7128,7129],{"class":126},"\"二维数组第一行的首地址：\"",[76,7131,3298],{"class":82},[76,7133,123],{"class":90},[76,7135,1360],{"class":82},[76,7137,7138],{"class":90},")arr[",[76,7140,1294],{"class":119},[76,7142,3196],{"class":90},[76,7144,3298],{"class":82},[76,7146,3320],{"class":90},[76,7148,7149,7151,7153,7156,7158,7160,7162,7164,7166,7168,7170],{"class":78,"line":133},[76,7150,3490],{"class":90},[76,7152,3298],{"class":82},[76,7154,7155],{"class":126},"\"二维数组第二行的首地址：\"",[76,7157,3298],{"class":82},[76,7159,123],{"class":90},[76,7161,1360],{"class":82},[76,7163,7138],{"class":90},[76,7165,669],{"class":119},[76,7167,3196],{"class":90},[76,7169,3298],{"class":82},[76,7171,3320],{"class":90},[76,7173,7174,7176,7178,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201,7203,7205],{"class":78,"line":145},[76,7175,3490],{"class":90},[76,7177,3298],{"class":82},[76,7179,7180],{"class":126},"\"二维数组第一个元素的首地址:\"",[76,7182,3298],{"class":82},[76,7184,123],{"class":90},[76,7186,1360],{"class":82},[76,7188,2693],{"class":90},[76,7190,2617],{"class":82},[76,7192,5990],{"class":90},[76,7194,1294],{"class":119},[76,7196,6983],{"class":90},[76,7198,1294],{"class":119},[76,7200,3196],{"class":90},[76,7202,3298],{"class":82},[76,7204,3363],{"class":90},[76,7206,7207],{"class":540},"\u002F\u002F对于数，要加取址符\n",[2178,7209,7210],{},"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":71,"searchDepth":94,"depth":94,"links":7212},[7213,7214,7215,7223,7224,7230,7235],{"id":2219,"depth":94,"text":2220},{"id":2226,"depth":94,"text":2227},{"id":2241,"depth":94,"text":2242,"children":7216},[7217,7218,7219,7220,7221,7222],{"id":2245,"depth":133,"text":2246},{"id":2288,"depth":133,"text":2289},{"id":2353,"depth":133,"text":2354},{"id":3279,"depth":133,"text":3280},{"id":3369,"depth":133,"text":3370},{"id":3464,"depth":133,"text":3465},{"id":3506,"depth":94,"text":3507},{"id":3574,"depth":94,"text":3575,"children":7225},[7226,7227,7228,7229],{"id":3578,"depth":133,"text":3579},{"id":3600,"depth":133,"text":3601},{"id":3609,"depth":133,"text":3610},{"id":3618,"depth":133,"text":3619},{"id":3627,"depth":94,"text":3628,"children":7231},[7232,7233,7234],{"id":3631,"depth":133,"text":3632},{"id":4301,"depth":133,"text":4302},{"id":5706,"depth":133,"text":5707},{"id":5846,"depth":94,"text":5847,"children":7236},[7237,7238],{"id":5850,"depth":133,"text":5851},{"id":6876,"depth":133,"text":6877},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2211,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7245,"title":7246,"body":7247,"description":71,"extension":2202,"meta":8344,"navigation":148,"path":8345,"seo":8346,"stem":8347,"__hash__":8348},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7248,"toc":8336},[7249,7252,7256,7263,7271,7274,7339,7343,7346,7422,7426,7429,7432,7435,7648,7652,7657,7721,7726,7793,7798,7889,7892,7996,8000,8003,8009,8153,8157,8160,8174,8177,8222,8225,8333],[10,7250,7246],{"id":7251},"_2函数",[14,7253,7255],{"id":7254},"_21函数概述","2.1函数概述",[26,7257,7258,7261],{},[29,7259,7260],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,7262,64],{},[66,7264,7269],{"className":7265,"code":7267,"language":7268,"meta":71},[7266],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[73,7270,7267],{"__ignoreMap":71},[19,7272,7273],{},"小案例",[66,7275,7277],{"className":2264,"code":7276,"language":2266,"meta":71,"style":71},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[73,7278,7279,7284,7307,7311,7328,7335],{"__ignoreMap":71},[76,7280,7281],{"class":78,"line":79},[76,7282,7283],{"class":540},"\u002F\u002Fnum1,num2形参\n",[76,7285,7286,7288,7290,7292,7294,7298,7300,7302,7305],{"class":78,"line":94},[76,7287,1360],{"class":82},[76,7289,359],{"class":86},[76,7291,123],{"class":90},[76,7293,1360],{"class":82},[76,7295,7297],{"class":7296},"s4XuR"," num1",[76,7299,2642],{"class":90},[76,7301,1360],{"class":82},[76,7303,7304],{"class":7296}," num2",[76,7306,130],{"class":90},[76,7308,7309],{"class":78,"line":133},[76,7310,3666],{"class":90},[76,7312,7313,7315,7318,7320,7323,7325],{"class":78,"line":145},[76,7314,4081],{"class":82},[76,7316,7317],{"class":90}," sum",[76,7319,370],{"class":82},[76,7321,7322],{"class":90},"num1",[76,7324,376],{"class":82},[76,7326,7327],{"class":90},"num2;\n",[76,7329,7330,7332],{"class":78,"line":152},[76,7331,441],{"class":82},[76,7333,7334],{"class":90}," sum;\n",[76,7336,7337],{"class":78,"line":157},[76,7338,3685],{"class":90},[14,7340,7342],{"id":7341},"_22函数调用","2.2函数调用",[19,7344,7345],{},"调用刚刚写的求和函数",[66,7347,7349],{"className":2264,"code":7348,"language":2266,"meta":71,"style":71},"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",[73,7350,7351,7359,7363,7368,7380,7392,7401,7406,7418],{"__ignoreMap":71},[76,7352,7353,7355,7357],{"class":78,"line":79},[76,7354,1360],{"class":82},[76,7356,4069],{"class":86},[76,7358,4072],{"class":90},[76,7360,7361],{"class":78,"line":94},[76,7362,3666],{"class":90},[76,7364,7365],{"class":78,"line":133},[76,7366,7367],{"class":540},"    \u002F\u002Fa,b实参\n",[76,7369,7370,7372,7374,7376,7378],{"class":78,"line":145},[76,7371,4081],{"class":82},[76,7373,3519],{"class":90},[76,7375,370],{"class":82},[76,7377,1294],{"class":119},[76,7379,3415],{"class":90},[76,7381,7382,7384,7386,7388,7390],{"class":78,"line":152},[76,7383,4081],{"class":82},[76,7385,4921],{"class":90},[76,7387,370],{"class":82},[76,7389,1294],{"class":119},[76,7391,3415],{"class":90},[76,7393,7394,7396,7398],{"class":78,"line":157},[76,7395,4108],{"class":90},[76,7397,3550],{"class":82},[76,7399,7400],{"class":90},"a,b;\n",[76,7402,7403],{"class":78,"line":246},[76,7404,7405],{"class":540},"    \u002F\u002F调用函数时，实参值传给了形参\n",[76,7407,7408,7410,7412,7415],{"class":78,"line":251},[76,7409,3671],{"class":90},[76,7411,3298],{"class":82},[76,7413,7414],{"class":86},"add",[76,7416,7417],{"class":90},"(a,b);\n",[76,7419,7420],{"class":78,"line":257},[76,7421,3685],{"class":90},[14,7423,7425],{"id":7424},"_23值传递","2.3值传递",[19,7427,7428],{},"值传递就是函数调用时实参将数值传给形参",[19,7430,7431],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7433,7434],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[66,7436,7438],{"className":2264,"code":7437,"language":2266,"meta":71,"style":71},"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",[73,7439,7440,7462,7466,7479,7496,7514,7525,7534,7543,7556,7572,7588,7597,7601,7609,7613,7625,7637,7644],{"__ignoreMap":71},[76,7441,7442,7445,7448,7450,7452,7454,7456,7458,7460],{"class":78,"line":79},[76,7443,7444],{"class":82},"void",[76,7446,7447],{"class":86}," swap",[76,7449,123],{"class":90},[76,7451,1360],{"class":82},[76,7453,7297],{"class":7296},[76,7455,2642],{"class":90},[76,7457,1360],{"class":82},[76,7459,7304],{"class":7296},[76,7461,130],{"class":90},[76,7463,7464],{"class":78,"line":94},[76,7465,3666],{"class":90},[76,7467,7468,7470,7472,7475,7477],{"class":78,"line":133},[76,7469,3671],{"class":90},[76,7471,3298],{"class":82},[76,7473,7474],{"class":126},"\"交换前：\"",[76,7476,3298],{"class":82},[76,7478,3320],{"class":90},[76,7480,7481,7483,7485,7488,7490,7492,7494],{"class":78,"line":145},[76,7482,3671],{"class":90},[76,7484,3298],{"class":82},[76,7486,7487],{"class":126},"\"num1=\"",[76,7489,3298],{"class":82},[76,7491,7322],{"class":90},[76,7493,3298],{"class":82},[76,7495,3320],{"class":90},[76,7497,7498,7500,7502,7505,7507,7510,7512],{"class":78,"line":152},[76,7499,3671],{"class":90},[76,7501,3298],{"class":82},[76,7503,7504],{"class":126},"\"num2=\"",[76,7506,3298],{"class":82},[76,7508,7509],{"class":90},"num2",[76,7511,3298],{"class":82},[76,7513,3320],{"class":90},[76,7515,7516,7518,7520,7522],{"class":78,"line":157},[76,7517,4081],{"class":82},[76,7519,6337],{"class":90},[76,7521,370],{"class":82},[76,7523,7524],{"class":90},"num1;\n",[76,7526,7527,7530,7532],{"class":78,"line":246},[76,7528,7529],{"class":90},"    num1",[76,7531,370],{"class":82},[76,7533,7327],{"class":90},[76,7535,7536,7539,7541],{"class":78,"line":251},[76,7537,7538],{"class":90},"    num2",[76,7540,370],{"class":82},[76,7542,6362],{"class":90},[76,7544,7545,7547,7549,7552,7554],{"class":78,"line":257},[76,7546,3671],{"class":90},[76,7548,3298],{"class":82},[76,7550,7551],{"class":126},"\"交换后：\"",[76,7553,3298],{"class":82},[76,7555,3320],{"class":90},[76,7557,7558,7560,7562,7564,7566,7568,7570],{"class":78,"line":641},[76,7559,3671],{"class":90},[76,7561,3298],{"class":82},[76,7563,7487],{"class":126},[76,7565,3298],{"class":82},[76,7567,7322],{"class":90},[76,7569,3298],{"class":82},[76,7571,3320],{"class":90},[76,7573,7574,7576,7578,7580,7582,7584,7586],{"class":78,"line":646},[76,7575,3671],{"class":90},[76,7577,3298],{"class":82},[76,7579,7504],{"class":126},[76,7581,3298],{"class":82},[76,7583,7509],{"class":90},[76,7585,3298],{"class":82},[76,7587,3320],{"class":90},[76,7589,7590,7592,7594],{"class":78,"line":659},[76,7591,441],{"class":82},[76,7593,2324],{"class":90},[76,7595,7596],{"class":540},"\u002F\u002F或者不写\n",[76,7598,7599],{"class":78,"line":1608},[76,7600,3685],{"class":90},[76,7602,7603,7605,7607],{"class":78,"line":1632},[76,7604,1360],{"class":82},[76,7606,4069],{"class":86},[76,7608,4072],{"class":90},[76,7610,7611],{"class":78,"line":1637},[76,7612,3666],{"class":90},[76,7614,7615,7617,7619,7621,7623],{"class":78,"line":1642},[76,7616,4081],{"class":82},[76,7618,3519],{"class":90},[76,7620,370],{"class":82},[76,7622,402],{"class":119},[76,7624,3415],{"class":90},[76,7626,7627,7629,7631,7633,7635],{"class":78,"line":1652},[76,7628,4081],{"class":82},[76,7630,4921],{"class":90},[76,7632,370],{"class":82},[76,7634,408],{"class":119},[76,7636,3415],{"class":90},[76,7638,7639,7642],{"class":78,"line":1660},[76,7640,7641],{"class":86},"    swap",[76,7643,7417],{"class":90},[76,7645,7646],{"class":78,"line":1683},[76,7647,3685],{"class":90},[14,7649,7651],{"id":7650},"_24函数的常见形式","2.4函数的常见形式",[26,7653,7654],{},[29,7655,7656],{},"无参无返",[66,7658,7660],{"className":2264,"code":7659,"language":2266,"meta":71,"style":71},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[73,7661,7662,7671,7675,7688,7692,7700,7704,7709,7717],{"__ignoreMap":71},[76,7663,7664,7666,7669],{"class":78,"line":79},[76,7665,7444],{"class":82},[76,7667,7668],{"class":86}," test01",[76,7670,4072],{"class":90},[76,7672,7673],{"class":78,"line":94},[76,7674,3666],{"class":90},[76,7676,7677,7679,7681,7684,7686],{"class":78,"line":133},[76,7678,3671],{"class":90},[76,7680,3298],{"class":82},[76,7682,7683],{"class":126},"\"你好\"",[76,7685,3298],{"class":82},[76,7687,3320],{"class":90},[76,7689,7690],{"class":78,"line":145},[76,7691,3685],{"class":90},[76,7693,7694,7696,7698],{"class":78,"line":152},[76,7695,1360],{"class":82},[76,7697,4069],{"class":86},[76,7699,4072],{"class":90},[76,7701,7702],{"class":78,"line":157},[76,7703,3666],{"class":90},[76,7705,7706],{"class":78,"line":246},[76,7707,7708],{"class":540},"    \u002F\u002F函数调用\n",[76,7710,7711,7714],{"class":78,"line":251},[76,7712,7713],{"class":86},"    test01",[76,7715,7716],{"class":90},"();\n",[76,7718,7719],{"class":78,"line":257},[76,7720,3685],{"class":90},[26,7722,7723],{"start":94},[29,7724,7725],{},"有参无返",[66,7727,7729],{"className":2264,"code":7728,"language":2266,"meta":71,"style":71},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[73,7730,7731,7746,7750,7762,7766,7774,7778,7789],{"__ignoreMap":71},[76,7732,7733,7735,7738,7740,7742,7744],{"class":78,"line":79},[76,7734,7444],{"class":82},[76,7736,7737],{"class":86}," test02",[76,7739,123],{"class":90},[76,7741,1360],{"class":82},[76,7743,3519],{"class":7296},[76,7745,130],{"class":90},[76,7747,7748],{"class":78,"line":94},[76,7749,3666],{"class":90},[76,7751,7752,7754,7756,7758,7760],{"class":78,"line":133},[76,7753,3671],{"class":90},[76,7755,3298],{"class":82},[76,7757,7683],{"class":126},[76,7759,3298],{"class":82},[76,7761,3320],{"class":90},[76,7763,7764],{"class":78,"line":145},[76,7765,3685],{"class":90},[76,7767,7768,7770,7772],{"class":78,"line":152},[76,7769,1360],{"class":82},[76,7771,4069],{"class":86},[76,7773,4072],{"class":90},[76,7775,7776],{"class":78,"line":157},[76,7777,3666],{"class":90},[76,7779,7780,7783,7785,7787],{"class":78,"line":246},[76,7781,7782],{"class":86},"    test02",[76,7784,123],{"class":90},[76,7786,2575],{"class":119},[76,7788,4807],{"class":90},[76,7790,7791],{"class":78,"line":251},[76,7792,3685],{"class":90},[26,7794,7795],{"start":133},[29,7796,7797],{},"无参有返",[66,7799,7801],{"className":2264,"code":7800,"language":2266,"meta":71,"style":71},"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",[73,7802,7803,7812,7816,7828,7837,7841,7849,7853,7866,7885],{"__ignoreMap":71},[76,7804,7805,7807,7810],{"class":78,"line":79},[76,7806,1360],{"class":82},[76,7808,7809],{"class":86}," test03",[76,7811,4072],{"class":90},[76,7813,7814],{"class":78,"line":94},[76,7815,3666],{"class":90},[76,7817,7818,7820,7822,7824,7826],{"class":78,"line":133},[76,7819,3671],{"class":90},[76,7821,3298],{"class":82},[76,7823,7683],{"class":126},[76,7825,3298],{"class":82},[76,7827,3320],{"class":90},[76,7829,7830,7832,7835],{"class":78,"line":145},[76,7831,441],{"class":82},[76,7833,7834],{"class":119}," 100",[76,7836,3415],{"class":90},[76,7838,7839],{"class":78,"line":152},[76,7840,3685],{"class":90},[76,7842,7843,7845,7847],{"class":78,"line":157},[76,7844,1360],{"class":82},[76,7846,4069],{"class":86},[76,7848,4072],{"class":90},[76,7850,7851],{"class":78,"line":246},[76,7852,3666],{"class":90},[76,7854,7855,7857,7859,7861,7864],{"class":78,"line":251},[76,7856,4081],{"class":82},[76,7858,7297],{"class":90},[76,7860,370],{"class":82},[76,7862,7863],{"class":86},"test03",[76,7865,7716],{"class":90},[76,7867,7868,7870,7872,7874,7876,7878,7880,7882],{"class":78,"line":257},[76,7869,3671],{"class":90},[76,7871,3298],{"class":82},[76,7873,7487],{"class":126},[76,7875,3298],{"class":82},[76,7877,7322],{"class":90},[76,7879,3298],{"class":82},[76,7881,3363],{"class":90},[76,7883,7884],{"class":540}," \u002F\u002F100\n",[76,7886,7887],{"class":78,"line":641},[76,7888,3685],{"class":90},[19,7890,7891],{},"4.有参有返",[66,7893,7895],{"className":2264,"code":7894,"language":2266,"meta":71,"style":71},"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",[73,7896,7897,7912,7916,7928,7934,7938,7947,7951,7963,7977,7992],{"__ignoreMap":71},[76,7898,7899,7901,7904,7906,7908,7910],{"class":78,"line":79},[76,7900,1360],{"class":82},[76,7902,7903],{"class":86}," test04",[76,7905,123],{"class":90},[76,7907,1360],{"class":82},[76,7909,3519],{"class":7296},[76,7911,130],{"class":90},[76,7913,7914],{"class":78,"line":94},[76,7915,3666],{"class":90},[76,7917,7918,7920,7922,7924,7926],{"class":78,"line":133},[76,7919,3671],{"class":90},[76,7921,3298],{"class":82},[76,7923,127],{"class":126},[76,7925,3298],{"class":82},[76,7927,3320],{"class":90},[76,7929,7930,7932],{"class":78,"line":145},[76,7931,441],{"class":82},[76,7933,3553],{"class":90},[76,7935,7936],{"class":78,"line":152},[76,7937,3685],{"class":90},[76,7939,7940,7942,7945],{"class":78,"line":157},[76,7941,1360],{"class":82},[76,7943,7944],{"class":86}," mian",[76,7946,4072],{"class":90},[76,7948,7949],{"class":78,"line":246},[76,7950,3666],{"class":90},[76,7952,7953,7955,7957,7959,7961],{"class":78,"line":251},[76,7954,4081],{"class":82},[76,7956,4921],{"class":90},[76,7958,370],{"class":82},[76,7960,669],{"class":119},[76,7962,3415],{"class":90},[76,7964,7965,7967,7969,7971,7974],{"class":78,"line":257},[76,7966,4081],{"class":82},[76,7968,4937],{"class":90},[76,7970,370],{"class":82},[76,7972,7973],{"class":86},"test04",[76,7975,7976],{"class":90},"(b);\n",[76,7978,7979,7981,7983,7985,7987,7989],{"class":78,"line":641},[76,7980,3671],{"class":90},[76,7982,3298],{"class":82},[76,7984,2552],{"class":90},[76,7986,3298],{"class":82},[76,7988,3363],{"class":90},[76,7990,7991],{"class":540}," \u002F\u002F1\n",[76,7993,7994],{"class":78,"line":646},[76,7995,3685],{"class":90},[14,7997,7999],{"id":7998},"_25函数的声明","2.5函数的声明",[19,8001,8002],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8004,8005,8006],{},"函数的",[2416,8007,8008],{},"声明可以多次，但是函数的定义只能有一次",[66,8010,8012],{"className":2264,"code":8011,"language":2266,"meta":71,"style":71},"\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",[73,8013,8014,8019,8024,8049,8058,8062,8074,8086,8102,8106,8126,8130,8149],{"__ignoreMap":71},[76,8015,8016],{"class":78,"line":79},[76,8017,8018],{"class":540},"\u002F\u002F函数声明\n",[76,8020,8021],{"class":78,"line":94},[76,8022,8023],{"class":540},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[76,8025,8026,8028,8031,8033,8035,8037,8039,8041,8043,8046],{"class":78,"line":133},[76,8027,1360],{"class":82},[76,8029,8030],{"class":86}," max",[76,8032,123],{"class":90},[76,8034,1360],{"class":82},[76,8036,3519],{"class":7296},[76,8038,2642],{"class":90},[76,8040,1360],{"class":82},[76,8042,4921],{"class":7296},[76,8044,8045],{"class":90},");",[76,8047,8048],{"class":540},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[76,8050,8051,8053,8055],{"class":78,"line":145},[76,8052,1360],{"class":82},[76,8054,4069],{"class":86},[76,8056,8057],{"class":90},"() \n",[76,8059,8060],{"class":78,"line":152},[76,8061,3666],{"class":90},[76,8063,8064,8066,8068,8070,8072],{"class":78,"line":157},[76,8065,4081],{"class":82},[76,8067,3519],{"class":90},[76,8069,370],{"class":82},[76,8071,402],{"class":119},[76,8073,3415],{"class":90},[76,8075,8076,8078,8080,8082,8084],{"class":78,"line":246},[76,8077,4081],{"class":82},[76,8079,4921],{"class":90},[76,8081,370],{"class":82},[76,8083,408],{"class":119},[76,8085,3415],{"class":90},[76,8087,8088,8090,8092,8095,8098,8100],{"class":78,"line":251},[76,8089,3671],{"class":90},[76,8091,3298],{"class":82},[76,8093,8094],{"class":86},"max",[76,8096,8097],{"class":90},"(a,b)",[76,8099,3298],{"class":82},[76,8101,3320],{"class":90},[76,8103,8104],{"class":78,"line":257},[76,8105,3685],{"class":90},[76,8107,8108,8110,8112,8114,8116,8118,8120,8122,8124],{"class":78,"line":641},[76,8109,1360],{"class":82},[76,8111,8030],{"class":86},[76,8113,123],{"class":90},[76,8115,1360],{"class":82},[76,8117,3519],{"class":7296},[76,8119,2642],{"class":90},[76,8121,1360],{"class":82},[76,8123,4921],{"class":7296},[76,8125,130],{"class":90},[76,8127,8128],{"class":78,"line":646},[76,8129,3666],{"class":90},[76,8131,8132,8134,8136,8138,8140,8142,8144,8146],{"class":78,"line":659},[76,8133,441],{"class":82},[76,8135,3519],{"class":90},[76,8137,1829],{"class":82},[76,8139,2527],{"class":90},[76,8141,3240],{"class":82},[76,8143,2503],{"class":90},[76,8145,3117],{"class":82},[76,8147,8148],{"class":90},"b;\n",[76,8150,8151],{"class":78,"line":1608},[76,8152,3685],{"class":90},[14,8154,8156],{"id":8155},"_26函数的分文件编写","2.6函数的分文件编写",[19,8158,8159],{},"4个步骤：",[3261,8161,8162,8165,8168,8171],{},[29,8163,8164],{},"1.创建后缀名为.h的头文件",[29,8166,8167],{},"2.创建后缀名为.cpp的源文件",[29,8169,8170],{},"3.在头文件中写函数的定义",[29,8172,8173],{},"4.在源文件中写函数的定义\n示例：",[19,8175,8176],{},"头文件：swap.h",[66,8178,8180],{"className":2264,"code":8179,"language":2266,"meta":71,"style":71},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[73,8181,8182,8188,8198,8202],{"__ignoreMap":71},[76,8183,8184,8186],{"class":78,"line":79},[76,8185,4046],{"class":82},[76,8187,4049],{"class":126},[76,8189,8190,8192,8194,8196],{"class":78,"line":94},[76,8191,4054],{"class":82},[76,8193,4057],{"class":82},[76,8195,4060],{"class":86},[76,8197,3415],{"class":90},[76,8199,8200],{"class":78,"line":133},[76,8201,8018],{"class":540},[76,8203,8204,8206,8208,8210,8212,8214,8216,8218,8220],{"class":78,"line":145},[76,8205,7444],{"class":82},[76,8207,7447],{"class":86},[76,8209,123],{"class":90},[76,8211,1360],{"class":82},[76,8213,3519],{"class":7296},[76,8215,2642],{"class":90},[76,8217,1360],{"class":82},[76,8219,4921],{"class":7296},[76,8221,4807],{"class":90},[19,8223,8224],{},"源文件：swap.cpp",[66,8226,8228],{"className":2264,"code":8227,"language":2266,"meta":71,"style":71},"#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",[73,8229,8230,8237,8242,8262,8266,8277,8286,8295,8312,8329],{"__ignoreMap":71},[76,8231,8232,8234],{"class":78,"line":79},[76,8233,4046],{"class":82},[76,8235,8236],{"class":126}," \"swap.h\"\n",[76,8238,8239],{"class":78,"line":94},[76,8240,8241],{"class":540},"\u002F\u002F函数的定义\n",[76,8243,8244,8246,8248,8250,8252,8254,8256,8258,8260],{"class":78,"line":133},[76,8245,7444],{"class":82},[76,8247,7447],{"class":86},[76,8249,123],{"class":90},[76,8251,1360],{"class":82},[76,8253,3519],{"class":7296},[76,8255,2642],{"class":90},[76,8257,1360],{"class":82},[76,8259,4921],{"class":7296},[76,8261,130],{"class":90},[76,8263,8264],{"class":78,"line":145},[76,8265,3666],{"class":90},[76,8267,8268,8270,8272,8274],{"class":78,"line":152},[76,8269,4081],{"class":82},[76,8271,6337],{"class":90},[76,8273,370],{"class":82},[76,8275,8276],{"class":90},"a;\n",[76,8278,8279,8282,8284],{"class":78,"line":157},[76,8280,8281],{"class":90},"    a",[76,8283,370],{"class":82},[76,8285,8148],{"class":90},[76,8287,8288,8291,8293],{"class":78,"line":246},[76,8289,8290],{"class":90},"    b",[76,8292,370],{"class":82},[76,8294,6362],{"class":90},[76,8296,8297,8299,8301,8304,8306,8308,8310],{"class":78,"line":251},[76,8298,3671],{"class":90},[76,8300,3298],{"class":82},[76,8302,8303],{"class":126},"\"a=\"",[76,8305,3298],{"class":82},[76,8307,2503],{"class":90},[76,8309,3298],{"class":82},[76,8311,3320],{"class":90},[76,8313,8314,8316,8318,8321,8323,8325,8327],{"class":78,"line":257},[76,8315,3671],{"class":90},[76,8317,3298],{"class":82},[76,8319,8320],{"class":126},"\"b=\"",[76,8322,3298],{"class":82},[76,8324,2527],{"class":90},[76,8326,3298],{"class":82},[76,8328,3320],{"class":90},[76,8330,8331],{"class":78,"line":641},[76,8332,3685],{"class":90},[2178,8334,8335],{},"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":71,"searchDepth":94,"depth":94,"links":8337},[8338,8339,8340,8341,8342,8343],{"id":7254,"depth":94,"text":7255},{"id":7341,"depth":94,"text":7342},{"id":7424,"depth":94,"text":7425},{"id":7650,"depth":94,"text":7651},{"id":7998,"depth":94,"text":7999},{"id":8155,"depth":94,"text":8156},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7246,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8350,"title":8351,"body":8352,"description":8359,"extension":2202,"meta":9763,"navigation":148,"path":9764,"seo":9765,"stem":9766,"__hash__":9767},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8353,"toc":9753},[8354,8357,8360,8364,8526,8530,8533,8536,8539,8542,8681,8685,8688,8691,8694,8759,8763,8768,8835,8838,8842,8845,8856,8861,8881,8884,8889,8908,8911,8915,8934,8937,8941,9176,9180,9183,9186,9189,9351,9354,9358,9361,9367,9750],[10,8355,8351],{"id":8356},"_3指针",[19,8358,8359],{},"通过指针保存一个地址，指针就是个地址",[14,8361,8363],{"id":8362},"_31定义指针","3.1定义指针",[66,8365,8367],{"className":2264,"code":8366,"language":2266,"meta":71,"style":71},"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",[73,8368,8369,8377,8381,8386,8398,8403,8411,8421,8439,8459,8463,8468,8473,8478,8492,8508,8522],{"__ignoreMap":71},[76,8370,8371,8373,8375],{"class":78,"line":79},[76,8372,1360],{"class":82},[76,8374,4069],{"class":86},[76,8376,4072],{"class":90},[76,8378,8379],{"class":78,"line":94},[76,8380,3666],{"class":90},[76,8382,8383],{"class":78,"line":133},[76,8384,8385],{"class":540},"    \u002F\u002F1.定义指针\n",[76,8387,8388,8390,8392,8394,8396],{"class":78,"line":145},[76,8389,4081],{"class":82},[76,8391,3519],{"class":90},[76,8393,370],{"class":82},[76,8395,402],{"class":119},[76,8397,3415],{"class":90},[76,8399,8400],{"class":78,"line":152},[76,8401,8402],{"class":540},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[76,8404,8405,8408],{"class":78,"line":157},[76,8406,8407],{"class":82},"    int*",[76,8409,8410],{"class":90},"p;\n",[76,8412,8413,8416,8419],{"class":78,"line":246},[76,8414,8415],{"class":90},"    p",[76,8417,8418],{"class":82},"=&",[76,8420,8276],{"class":90},[76,8422,8423,8425,8427,8430,8433,8435,8437],{"class":78,"line":251},[76,8424,3671],{"class":90},[76,8426,3298],{"class":82},[76,8428,8429],{"class":126},"\"a的地址为：\"",[76,8431,8432],{"class":82},"\u003C\u003C&",[76,8434,2503],{"class":90},[76,8436,3298],{"class":82},[76,8438,3320],{"class":90},[76,8440,8441,8443,8445,8448,8450,8452,8454,8456],{"class":78,"line":257},[76,8442,3671],{"class":90},[76,8444,3298],{"class":82},[76,8446,8447],{"class":126},"\"指针p为：\"",[76,8449,3298],{"class":82},[76,8451,19],{"class":90},[76,8453,3298],{"class":82},[76,8455,3363],{"class":90},[76,8457,8458],{"class":540},"\u002F\u002F指针p表示的就是a的地址\n",[76,8460,8461],{"class":78,"line":641},[76,8462,149],{"emptyLinePlaceholder":148},[76,8464,8465],{"class":78,"line":646},[76,8466,8467],{"class":540},"    \u002F\u002F2.使用指针\n",[76,8469,8470],{"class":78,"line":659},[76,8471,8472],{"class":540},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[76,8474,8475],{"class":78,"line":1608},[76,8476,8477],{"class":540},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[76,8479,8480,8483,8485,8487,8490],{"class":78,"line":1632},[76,8481,8482],{"class":82},"    *",[76,8484,19],{"class":90},[76,8486,370],{"class":82},[76,8488,8489],{"class":119},"1000",[76,8491,3415],{"class":90},[76,8493,8494,8496,8499,8501,8503,8505],{"class":78,"line":1637},[76,8495,3671],{"class":90},[76,8497,8498],{"class":82},"\u003C\u003C*",[76,8500,19],{"class":90},[76,8502,3298],{"class":82},[76,8504,3363],{"class":90},[76,8506,8507],{"class":540},"\u002F\u002F1000\n",[76,8509,8510,8512,8514,8516,8518,8520],{"class":78,"line":1642},[76,8511,3671],{"class":90},[76,8513,3298],{"class":82},[76,8515,2503],{"class":90},[76,8517,3298],{"class":82},[76,8519,3363],{"class":90},[76,8521,8507],{"class":540},[76,8523,8524],{"class":78,"line":1652},[76,8525,3685],{"class":90},[14,8527,8529],{"id":8528},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8531,8532],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8534,8535],{},"在32位操作系统下：占用4个字节空间",[19,8537,8538],{},"在64位操作系统下：占用8个字节空间",[19,8540,8541],{},"上方是不管啥数据类型的",[66,8543,8545],{"className":2264,"code":8544,"language":2266,"meta":71,"style":71},"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",[73,8546,8547,8555,8559,8564,8576,8581,8586,8591,8603,8625,8651,8677],{"__ignoreMap":71},[76,8548,8549,8551,8553],{"class":78,"line":79},[76,8550,1360],{"class":82},[76,8552,4069],{"class":86},[76,8554,4072],{"class":90},[76,8556,8557],{"class":78,"line":94},[76,8558,3666],{"class":90},[76,8560,8561],{"class":78,"line":133},[76,8562,8563],{"class":540},"    \u002F\u002F指针所占内存空间\n",[76,8565,8566,8568,8570,8572,8574],{"class":78,"line":145},[76,8567,4081],{"class":82},[76,8569,3519],{"class":90},[76,8571,370],{"class":82},[76,8573,402],{"class":119},[76,8575,3415],{"class":90},[76,8577,8578],{"class":78,"line":152},[76,8579,8580],{"class":540},"    \u002F\u002Fint *p;\n",[76,8582,8583],{"class":78,"line":157},[76,8584,8585],{"class":540},"    \u002F\u002Fp=&a;\n",[76,8587,8588],{"class":78,"line":246},[76,8589,8590],{"class":540},"    \u002F\u002F上述可以写为以下：\n",[76,8592,8593,8595,8597,8599,8601],{"class":78,"line":251},[76,8594,4081],{"class":82},[76,8596,1119],{"class":82},[76,8598,19],{"class":90},[76,8600,8418],{"class":82},[76,8602,8276],{"class":90},[76,8604,8605,8608,8610,8613,8615,8618,8620,8622],{"class":78,"line":257},[76,8606,8607],{"class":90},"    cout ",[76,8609,3298],{"class":82},[76,8611,8612],{"class":126},"\"sizeof(int *)\"",[76,8614,3493],{"class":82},[76,8616,8617],{"class":90},"(p)",[76,8619,3298],{"class":82},[76,8621,3363],{"class":90},[76,8623,8624],{"class":540},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[76,8626,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8648],{"class":78,"line":641},[76,8628,8607],{"class":90},[76,8630,3298],{"class":82},[76,8632,8612],{"class":126},[76,8634,3493],{"class":82},[76,8636,123],{"class":90},[76,8638,1360],{"class":82},[76,8640,1119],{"class":82},[76,8642,2693],{"class":90},[76,8644,3298],{"class":82},[76,8646,8647],{"class":90},"endl",[76,8649,8650],{"class":540},"  \u002F\u002F4字节(32位的话)\n",[76,8652,8653,8655,8657,8660,8662,8664,8666,8668,8670,8672,8674],{"class":78,"line":646},[76,8654,8607],{"class":90},[76,8656,3298],{"class":82},[76,8658,8659],{"class":126},"\"sizeof(char *)\"",[76,8661,3493],{"class":82},[76,8663,123],{"class":90},[76,8665,2364],{"class":82},[76,8667,1119],{"class":82},[76,8669,2693],{"class":90},[76,8671,3298],{"class":82},[76,8673,3363],{"class":90},[76,8675,8676],{"class":540}," \u002F\u002F4字节(32位的话)\n",[76,8678,8679],{"class":78,"line":659},[76,8680,3685],{"class":90},[14,8682,8684],{"id":8683},"_33空指针","3.3空指针",[19,8686,8687],{},"空指针：指针变量指向内存中编号为0的空间",[19,8689,8690],{},"用途：初始化指针变量",[19,8692,8693],{},"注意：空指针指向的内存是不可以访问的",[66,8695,8697],{"className":2264,"code":8696,"language":2266,"meta":71,"style":71},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[73,8698,8699,8707,8711,8716,8730,8735,8750,8755],{"__ignoreMap":71},[76,8700,8701,8703,8705],{"class":78,"line":79},[76,8702,1360],{"class":82},[76,8704,4069],{"class":86},[76,8706,4072],{"class":90},[76,8708,8709],{"class":78,"line":94},[76,8710,3666],{"class":90},[76,8712,8713],{"class":78,"line":133},[76,8714,8715],{"class":540},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[76,8717,8718,8720,8722,8724,8726,8728],{"class":78,"line":145},[76,8719,4081],{"class":82},[76,8721,1119],{"class":82},[76,8723,19],{"class":90},[76,8725,370],{"class":82},[76,8727,4488],{"class":119},[76,8729,3415],{"class":90},[76,8731,8732],{"class":78,"line":152},[76,8733,8734],{"class":540},"    \u002F\u002F2.空指针不能进行访问\n",[76,8736,8737,8739,8741,8743,8745,8747],{"class":78,"line":157},[76,8738,8482],{"class":82},[76,8740,19],{"class":90},[76,8742,370],{"class":82},[76,8744,2575],{"class":119},[76,8746,2324],{"class":90},[76,8748,8749],{"class":540},"\u002F\u002F直接报错，压根不能访问\n",[76,8751,8752],{"class":78,"line":246},[76,8753,8754],{"class":540},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[76,8756,8757],{"class":78,"line":251},[76,8758,3685],{"class":90},[14,8760,8762],{"id":8761},"_34野指针","3.4野指针",[19,8764,8765],{},[2416,8766,8767],{},"指针变量指向非法的内存空间",[66,8769,8771],{"className":2264,"code":8770,"language":2266,"meta":71,"style":71},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[73,8772,8773,8781,8785,8814,8819,8831],{"__ignoreMap":71},[76,8774,8775,8777,8779],{"class":78,"line":79},[76,8776,1360],{"class":82},[76,8778,4069],{"class":86},[76,8780,4072],{"class":90},[76,8782,8783],{"class":78,"line":94},[76,8784,3666],{"class":90},[76,8786,8787,8789,8791,8793,8795,8797,8799,8801,8803,8806,8809,8811],{"class":78,"line":133},[76,8788,4081],{"class":82},[76,8790,1119],{"class":82},[76,8792,19],{"class":90},[76,8794,370],{"class":82},[76,8796,123],{"class":90},[76,8798,1360],{"class":82},[76,8800,1119],{"class":82},[76,8802,2693],{"class":90},[76,8804,8805],{"class":82},"0x",[76,8807,8808],{"class":119},"1100",[76,8810,2324],{"class":90},[76,8812,8813],{"class":540}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[76,8815,8816],{"class":78,"line":145},[76,8817,8818],{"class":540},"    \u002F\u002F访问野指针报错\n",[76,8820,8821,8823,8825,8827,8829],{"class":78,"line":152},[76,8822,3671],{"class":90},[76,8824,8498],{"class":82},[76,8826,19],{"class":90},[76,8828,3298],{"class":82},[76,8830,3320],{"class":90},[76,8832,8833],{"class":78,"line":157},[76,8834,3685],{"class":90},[19,8836,8837],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8839,8841],{"id":8840},"_35const修饰指针","3.5const修饰指针",[19,8843,8844],{},"三种情况：",[3261,8846,8847,8850,8853],{},[29,8848,8849],{},"const修饰指针 常量指针",[29,8851,8852],{},"const修饰常量 指针常量",[29,8854,8855],{},"const即修饰指针，又修饰常量",[26,8857,8858],{},[29,8859,8860],{},"常量指针",[66,8862,8864],{"className":2264,"code":8863,"language":2266,"meta":71,"style":71},"const int *p=&a;\n",[73,8865,8866],{"__ignoreMap":71},[76,8867,8868,8871,8873,8875,8877,8879],{"class":78,"line":79},[76,8869,8870],{"class":82},"const",[76,8872,4478],{"class":82},[76,8874,1119],{"class":82},[76,8876,19],{"class":90},[76,8878,8418],{"class":82},[76,8880,8276],{"class":90},[19,8882,8883],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,8885,8886],{"start":94},[29,8887,8888],{},"指针常量",[66,8890,8892],{"className":2264,"code":8891,"language":2266,"meta":71,"style":71},"int *const p=&a;\n",[73,8893,8894],{"__ignoreMap":71},[76,8895,8896,8898,8901,8904,8906],{"class":78,"line":79},[76,8897,1360],{"class":82},[76,8899,8900],{"class":82}," *const",[76,8902,8903],{"class":90}," p",[76,8905,8418],{"class":82},[76,8907,8276],{"class":90},[19,8909,8910],{},"指针的指向不可以改，指针指向的值可以改",[26,8912,8913],{"start":133},[29,8914,8855],{},[66,8916,8918],{"className":2264,"code":8917,"language":2266,"meta":71,"style":71},"const int *const p=&a;\n",[73,8919,8920],{"__ignoreMap":71},[76,8921,8922,8924,8926,8928,8930,8932],{"class":78,"line":79},[76,8923,8870],{"class":82},[76,8925,4478],{"class":82},[76,8927,8900],{"class":82},[76,8929,8903],{"class":90},[76,8931,8418],{"class":82},[76,8933,8276],{"class":90},[19,8935,8936],{},"指针的指向和指针指向的值都不可以改变",[14,8938,8940],{"id":8939},"_36指针和数组","3.6指针和数组",[66,8942,8944],{"className":2264,"code":8943,"language":2266,"meta":71,"style":71},"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",[73,8945,8946,8954,8958,8963,9017,9038,9054,9070,9081,9098,9103,9117,9143,9147,9159,9168,9172],{"__ignoreMap":71},[76,8947,8948,8950,8952],{"class":78,"line":79},[76,8949,1360],{"class":82},[76,8951,4069],{"class":86},[76,8953,4072],{"class":90},[76,8955,8956],{"class":78,"line":94},[76,8957,3666],{"class":90},[76,8959,8960],{"class":78,"line":133},[76,8961,8962],{"class":540},"    \u002F\u002F利用指针访问数组中的元素\n",[76,8964,8965,8967,8969,8971,8973,8975,8977,8979,8981,8983,8985,8987,8989,8991,8993,8995,8997,8999,9001,9003,9005,9007,9009,9011,9013,9015],{"class":78,"line":145},[76,8966,4081],{"class":82},[76,8968,6046],{"class":90},[76,8970,402],{"class":119},[76,8972,3196],{"class":90},[76,8974,370],{"class":82},[76,8976,298],{"class":90},[76,8978,669],{"class":119},[76,8980,2642],{"class":90},[76,8982,2345],{"class":119},[76,8984,2642],{"class":90},[76,8986,2339],{"class":119},[76,8988,2642],{"class":90},[76,8990,2557],{"class":119},[76,8992,2642],{"class":90},[76,8994,2583],{"class":119},[76,8996,2642],{"class":90},[76,8998,2608],{"class":119},[76,9000,2642],{"class":90},[76,9002,2633],{"class":119},[76,9004,2642],{"class":90},[76,9006,2659],{"class":119},[76,9008,2642],{"class":90},[76,9010,2684],{"class":119},[76,9012,2642],{"class":90},[76,9014,402],{"class":119},[76,9016,6079],{"class":90},[76,9018,9019,9021,9023,9026,9028,9030,9032,9034,9036],{"class":78,"line":152},[76,9020,3671],{"class":90},[76,9022,3298],{"class":82},[76,9024,9025],{"class":126},"\"数组的第一个元素为：\"",[76,9027,3298],{"class":82},[76,9029,5990],{"class":90},[76,9031,1294],{"class":119},[76,9033,3196],{"class":90},[76,9035,3298],{"class":82},[76,9037,3320],{"class":90},[76,9039,9040,9042,9044,9046,9048,9051],{"class":78,"line":157},[76,9041,4081],{"class":82},[76,9043,1119],{"class":82},[76,9045,19],{"class":90},[76,9047,370],{"class":82},[76,9049,9050],{"class":90},"arr;",[76,9052,9053],{"class":540},"\u002F\u002F注意数才要加取地址符号&\n",[76,9055,9056,9058,9060,9062,9064,9066,9068],{"class":78,"line":246},[76,9057,3671],{"class":90},[76,9059,3298],{"class":82},[76,9061,9025],{"class":126},[76,9063,8498],{"class":82},[76,9065,19],{"class":90},[76,9067,3298],{"class":82},[76,9069,3320],{"class":90},[76,9071,9072,9074,9076,9078],{"class":78,"line":251},[76,9073,8415],{"class":90},[76,9075,4388],{"class":82},[76,9077,2324],{"class":90},[76,9079,9080],{"class":540}," \u002F\u002F让指针向后偏移4个字节\n",[76,9082,9083,9085,9087,9090,9092,9094,9096],{"class":78,"line":257},[76,9084,3671],{"class":90},[76,9086,3298],{"class":82},[76,9088,9089],{"class":126},"\"数组的第二个元素为：\"",[76,9091,8498],{"class":82},[76,9093,19],{"class":90},[76,9095,3298],{"class":82},[76,9097,3320],{"class":90},[76,9099,9100],{"class":78,"line":641},[76,9101,9102],{"class":540},"    \u002F\u002F利用指针遍历数组\n",[76,9104,9105,9107,9109,9112,9114],{"class":78,"line":646},[76,9106,4081],{"class":82},[76,9108,1119],{"class":82},[76,9110,9111],{"class":90},"p2",[76,9113,370],{"class":82},[76,9115,9116],{"class":90},"arr;\n",[76,9118,9119,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139,9141],{"class":78,"line":659},[76,9120,1469],{"class":82},[76,9122,3770],{"class":90},[76,9124,1360],{"class":82},[76,9126,5119],{"class":90},[76,9128,370],{"class":82},[76,9130,1294],{"class":119},[76,9132,5126],{"class":90},[76,9134,584],{"class":82},[76,9136,402],{"class":119},[76,9138,5126],{"class":90},[76,9140,4388],{"class":82},[76,9142,130],{"class":90},[76,9144,9145],{"class":78,"line":1608},[76,9146,4126],{"class":90},[76,9148,9149,9151,9153,9155,9157],{"class":78,"line":1632},[76,9150,5536],{"class":90},[76,9152,8498],{"class":82},[76,9154,9111],{"class":90},[76,9156,3298],{"class":82},[76,9158,3320],{"class":90},[76,9160,9161,9164,9166],{"class":78,"line":1637},[76,9162,9163],{"class":90},"        p2",[76,9165,4388],{"class":82},[76,9167,3415],{"class":90},[76,9169,9170],{"class":78,"line":1642},[76,9171,4283],{"class":90},[76,9173,9174],{"class":78,"line":1652},[76,9175,3685],{"class":90},[14,9177,9179],{"id":9178},"_37指针和函数","3.7指针和函数",[19,9181,9182],{},"利用指针做函数参数，可以修改实参的值",[19,9184,9185],{},"值传递：只改变形参，不改变实参",[19,9187,9188],{},"地址传递：",[66,9190,9192],{"className":2264,"code":9191,"language":2266,"meta":71,"style":71},"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",[73,9193,9194,9219,9223,9235,9246,9256,9260,9268,9272,9284,9296,9301,9317,9332,9347],{"__ignoreMap":71},[76,9195,9196,9198,9200,9202,9204,9206,9209,9211,9213,9215,9217],{"class":78,"line":79},[76,9197,7444],{"class":82},[76,9199,7447],{"class":86},[76,9201,123],{"class":90},[76,9203,1360],{"class":82},[76,9205,1119],{"class":82},[76,9207,9208],{"class":7296},"p1",[76,9210,2642],{"class":90},[76,9212,1360],{"class":82},[76,9214,1119],{"class":82},[76,9216,9111],{"class":7296},[76,9218,130],{"class":90},[76,9220,9221],{"class":78,"line":94},[76,9222,3666],{"class":90},[76,9224,9225,9227,9229,9232],{"class":78,"line":133},[76,9226,4081],{"class":82},[76,9228,6337],{"class":90},[76,9230,9231],{"class":82},"=*",[76,9233,9234],{"class":90},"p1;\n",[76,9236,9237,9239,9241,9243],{"class":78,"line":145},[76,9238,8482],{"class":82},[76,9240,9208],{"class":90},[76,9242,9231],{"class":82},[76,9244,9245],{"class":90},"p2;\n",[76,9247,9248,9250,9252,9254],{"class":78,"line":152},[76,9249,8482],{"class":82},[76,9251,9111],{"class":90},[76,9253,370],{"class":82},[76,9255,6362],{"class":90},[76,9257,9258],{"class":78,"line":157},[76,9259,3685],{"class":90},[76,9261,9262,9264,9266],{"class":78,"line":246},[76,9263,1360],{"class":82},[76,9265,4069],{"class":86},[76,9267,4072],{"class":90},[76,9269,9270],{"class":78,"line":251},[76,9271,3666],{"class":90},[76,9273,9274,9276,9278,9280,9282],{"class":78,"line":257},[76,9275,4081],{"class":82},[76,9277,3519],{"class":90},[76,9279,370],{"class":82},[76,9281,402],{"class":119},[76,9283,3415],{"class":90},[76,9285,9286,9288,9290,9292,9294],{"class":78,"line":641},[76,9287,4081],{"class":82},[76,9289,4921],{"class":90},[76,9291,370],{"class":82},[76,9293,408],{"class":119},[76,9295,3415],{"class":90},[76,9297,9298],{"class":78,"line":646},[76,9299,9300],{"class":540},"    \u002F\u002F地址传递\n",[76,9302,9303,9305,9307,9309,9312,9314],{"class":78,"line":659},[76,9304,7641],{"class":86},[76,9306,123],{"class":90},[76,9308,2617],{"class":82},[76,9310,9311],{"class":90},"a,",[76,9313,2617],{"class":82},[76,9315,9316],{"class":90},"b);\n",[76,9318,9319,9321,9323,9325,9327,9329],{"class":78,"line":1608},[76,9320,3671],{"class":90},[76,9322,3298],{"class":82},[76,9324,2503],{"class":90},[76,9326,3298],{"class":82},[76,9328,3363],{"class":90},[76,9330,9331],{"class":540},"\u002F\u002F20\n",[76,9333,9334,9336,9338,9340,9342,9344],{"class":78,"line":1632},[76,9335,3671],{"class":90},[76,9337,3298],{"class":82},[76,9339,2527],{"class":90},[76,9341,3298],{"class":82},[76,9343,3363],{"class":90},[76,9345,9346],{"class":540},"\u002F\u002F10\n",[76,9348,9349],{"class":78,"line":1637},[76,9350,3685],{"class":90},[19,9352,9353],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9355,9357],{"id":9356},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9359,9360],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9362,9363,9364,9366],{},"例如数组：int arr",[76,9365,402],{},"={4,3,6,9,1,2,10,8,7,5}",[66,9368,9370],{"className":2264,"code":9369,"language":2266,"meta":71,"style":71},"#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",[73,9371,9372,9378,9388,9412,9416,9447,9451,9485,9489,9507,9511,9522,9537,9552,9556,9560,9564,9568,9572,9580,9584,9589,9643,9655,9667,9672,9680,9684,9689,9714,9718,9733,9742,9746],{"__ignoreMap":71},[76,9373,9374,9376],{"class":78,"line":79},[76,9375,4046],{"class":82},[76,9377,4049],{"class":126},[76,9379,9380,9382,9384,9386],{"class":78,"line":94},[76,9381,4054],{"class":82},[76,9383,4057],{"class":82},[76,9385,4060],{"class":86},[76,9387,3415],{"class":90},[76,9389,9390,9392,9395,9397,9399,9401,9403,9405,9407,9410],{"class":78,"line":133},[76,9391,7444],{"class":82},[76,9393,9394],{"class":86}," bubbleSort",[76,9396,123],{"class":90},[76,9398,1360],{"class":82},[76,9400,1119],{"class":82},[76,9402,19],{"class":7296},[76,9404,2642],{"class":90},[76,9406,1360],{"class":82},[76,9408,9409],{"class":7296}," len",[76,9411,130],{"class":90},[76,9413,9414],{"class":78,"line":145},[76,9415,3666],{"class":90},[76,9417,9418,9420,9422,9424,9426,9428,9430,9432,9434,9437,9439,9441,9443,9445],{"class":78,"line":152},[76,9419,1469],{"class":82},[76,9421,123],{"class":90},[76,9423,1360],{"class":82},[76,9425,5119],{"class":90},[76,9427,370],{"class":82},[76,9429,1294],{"class":119},[76,9431,5126],{"class":90},[76,9433,584],{"class":82},[76,9435,9436],{"class":90},"len",[76,9438,666],{"class":82},[76,9440,669],{"class":119},[76,9442,5126],{"class":90},[76,9444,4388],{"class":82},[76,9446,130],{"class":90},[76,9448,9449],{"class":78,"line":157},[76,9450,4126],{"class":90},[76,9452,9453,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477,9479,9481,9483],{"class":78,"line":246},[76,9454,5488],{"class":82},[76,9456,123],{"class":90},[76,9458,1360],{"class":82},[76,9460,5495],{"class":90},[76,9462,370],{"class":82},[76,9464,1294],{"class":119},[76,9466,5502],{"class":90},[76,9468,584],{"class":82},[76,9470,9436],{"class":90},[76,9472,666],{"class":82},[76,9474,2705],{"class":90},[76,9476,666],{"class":82},[76,9478,669],{"class":119},[76,9480,5502],{"class":90},[76,9482,4388],{"class":82},[76,9484,130],{"class":90},[76,9486,9487],{"class":78,"line":251},[76,9488,4605],{"class":90},[76,9490,9491,9493,9496,9498,9501,9503,9505],{"class":78,"line":257},[76,9492,6724],{"class":82},[76,9494,9495],{"class":90},"(p[j]",[76,9497,1829],{"class":82},[76,9499,9500],{"class":90},"p[j",[76,9502,376],{"class":82},[76,9504,669],{"class":119},[76,9506,6739],{"class":90},[76,9508,9509],{"class":78,"line":641},[76,9510,6744],{"class":90},[76,9512,9513,9515,9517,9519],{"class":78,"line":646},[76,9514,6749],{"class":82},[76,9516,6337],{"class":90},[76,9518,370],{"class":82},[76,9520,9521],{"class":90},"p[j];\n",[76,9523,9524,9527,9529,9531,9533,9535],{"class":78,"line":659},[76,9525,9526],{"class":90},"                p[j]",[76,9528,370],{"class":82},[76,9530,9500],{"class":90},[76,9532,376],{"class":82},[76,9534,669],{"class":119},[76,9536,6772],{"class":90},[76,9538,9539,9542,9544,9546,9548,9550],{"class":78,"line":1608},[76,9540,9541],{"class":90},"                p[j",[76,9543,376],{"class":82},[76,9545,669],{"class":119},[76,9547,3196],{"class":90},[76,9549,370],{"class":82},[76,9551,6362],{"class":90},[76,9553,9554],{"class":78,"line":1632},[76,9555,6792],{"class":90},[76,9557,9558],{"class":78,"line":1637},[76,9559,4624],{"class":90},[76,9561,9562],{"class":78,"line":1642},[76,9563,4283],{"class":90},[76,9565,9566],{"class":78,"line":1652},[76,9567,3685],{"class":90},[76,9569,9570],{"class":78,"line":1660},[76,9571,149],{"emptyLinePlaceholder":148},[76,9573,9574,9576,9578],{"class":78,"line":1683},[76,9575,1360],{"class":82},[76,9577,4069],{"class":86},[76,9579,4072],{"class":90},[76,9581,9582],{"class":78,"line":1698},[76,9583,3666],{"class":90},[76,9585,9586],{"class":78,"line":1711},[76,9587,9588],{"class":540},"    \u002F\u002F 1.创建数组\n",[76,9590,9591,9593,9595,9597,9599,9601,9603,9605,9607,9609,9611,9613,9615,9617,9619,9621,9623,9625,9627,9629,9631,9633,9635,9637,9639,9641],{"class":78,"line":1717},[76,9592,4081],{"class":82},[76,9594,6046],{"class":90},[76,9596,402],{"class":119},[76,9598,3196],{"class":90},[76,9600,370],{"class":82},[76,9602,298],{"class":90},[76,9604,2557],{"class":119},[76,9606,2642],{"class":90},[76,9608,2339],{"class":119},[76,9610,2642],{"class":90},[76,9612,2608],{"class":119},[76,9614,2642],{"class":90},[76,9616,2684],{"class":119},[76,9618,2642],{"class":90},[76,9620,669],{"class":119},[76,9622,2642],{"class":90},[76,9624,2345],{"class":119},[76,9626,2642],{"class":90},[76,9628,402],{"class":119},[76,9630,2642],{"class":90},[76,9632,2659],{"class":119},[76,9634,2642],{"class":90},[76,9636,2633],{"class":119},[76,9638,2642],{"class":90},[76,9640,2583],{"class":119},[76,9642,6079],{"class":90},[76,9644,9645,9647,9649,9651,9653],{"class":78,"line":1728},[76,9646,4081],{"class":82},[76,9648,9409],{"class":90},[76,9650,370],{"class":82},[76,9652,402],{"class":119},[76,9654,3415],{"class":90},[76,9656,9657,9659,9661,9663,9665],{"class":78,"line":1740},[76,9658,4081],{"class":82},[76,9660,1119],{"class":82},[76,9662,19],{"class":90},[76,9664,370],{"class":82},[76,9666,9116],{"class":90},[76,9668,9669],{"class":78,"line":1746},[76,9670,9671],{"class":540},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[76,9673,9674,9677],{"class":78,"line":1751},[76,9675,9676],{"class":86},"    bubbleSort",[76,9678,9679],{"class":90},"(p,len);\n",[76,9681,9682],{"class":78,"line":1756},[76,9683,149],{"emptyLinePlaceholder":148},[76,9685,9686],{"class":78,"line":1766},[76,9687,9688],{"class":540},"    \u002F\u002F 3.打印排序后的数组\n",[76,9690,9691,9693,9695,9697,9699,9701,9703,9705,9707,9710,9712],{"class":78,"line":1773},[76,9692,1469],{"class":82},[76,9694,3770],{"class":90},[76,9696,1360],{"class":82},[76,9698,5119],{"class":90},[76,9700,370],{"class":82},[76,9702,1294],{"class":119},[76,9704,5299],{"class":90},[76,9706,584],{"class":82},[76,9708,9709],{"class":90},"len; i",[76,9711,4388],{"class":82},[76,9713,130],{"class":90},[76,9715,9716],{"class":78,"line":1793},[76,9717,4126],{"class":90},[76,9719,9720,9722,9724,9726,9728,9731],{"class":78,"line":1806},[76,9721,5536],{"class":90},[76,9723,8498],{"class":82},[76,9725,19],{"class":90},[76,9727,3298],{"class":82},[76,9729,9730],{"class":126},"\"\"",[76,9732,3415],{"class":90},[76,9734,9735,9738,9740],{"class":78,"line":1817},[76,9736,9737],{"class":90},"        p",[76,9739,4388],{"class":82},[76,9741,3415],{"class":90},[76,9743,9744],{"class":78,"line":1822},[76,9745,4283],{"class":90},[76,9747,9748],{"class":78,"line":1835},[76,9749,3685],{"class":90},[2178,9751,9752],{},"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":71,"searchDepth":94,"depth":94,"links":9754},[9755,9756,9757,9758,9759,9760,9761,9762],{"id":8362,"depth":94,"text":8363},{"id":8528,"depth":94,"text":8529},{"id":8683,"depth":94,"text":8684},{"id":8761,"depth":94,"text":8762},{"id":8840,"depth":94,"text":8841},{"id":8939,"depth":94,"text":8940},{"id":9178,"depth":94,"text":9179},{"id":9356,"depth":94,"text":9357},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8351,"description":8359},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9769,"title":9770,"body":9771,"description":9778,"extension":2202,"meta":12730,"navigation":148,"path":12731,"seo":12732,"stem":12733,"__hash__":12734},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9772,"toc":12721},[9773,9776,9779,9783,9786,9789,9800,10128,10131,10135,10138,10145,10400,10404,10407,10410,10565,10569,10572,10575,10781,10785,10788,11091,11093,11101,11105,11108,11259,11261,11272,11329,11333,11338,11985,11993,11996,12090,12093,12713,12718],[10,9774,9770],{"id":9775},"_4结构体",[19,9777,9778],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9780,9782],{"id":9781},"_41结构体定义与使用","4.1结构体定义与使用",[19,9784,9785],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9787,9788],{},"通过结构体创建变量的方式：",[3261,9790,9791,9794,9797],{},[29,9792,9793],{},"struct 结构体名 变量名",[29,9795,9796],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9798,9799],{},"定义结构体时顺便创建变量",[66,9801,9803],{"className":2264,"code":9802,"language":2266,"meta":71,"style":71},"#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",[73,9804,9805,9811,9821,9828,9833,9841,9845,9850,9854,9859,9864,9869,9876,9881,9888,9892,9899,9903,9907,9911,9915,9919,9923,9929,9933,9939,9947,9955,9959,9964,9969,9980,9985,9997,10008,10019,10024,10047,10051,10056,10082,10086,10091,10102,10113,10124],{"__ignoreMap":71},[76,9806,9807,9809],{"class":78,"line":79},[76,9808,4046],{"class":82},[76,9810,4049],{"class":126},[76,9812,9813,9815,9817,9819],{"class":78,"line":94},[76,9814,4054],{"class":82},[76,9816,4057],{"class":82},[76,9818,4060],{"class":86},[76,9820,3415],{"class":90},[76,9822,9823,9825],{"class":78,"line":133},[76,9824,4046],{"class":82},[76,9826,9827],{"class":126},"\u003Cstring>\n",[76,9829,9830],{"class":78,"line":145},[76,9831,9832],{"class":540},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[76,9834,9835,9838],{"class":78,"line":152},[76,9836,9837],{"class":82},"struct",[76,9839,9840],{"class":86}," Student\n",[76,9842,9843],{"class":78,"line":157},[76,9844,3666],{"class":90},[76,9846,9847],{"class":78,"line":246},[76,9848,9849],{"class":540},"    \u002F\u002F成员列表\n",[76,9851,9852],{"class":78,"line":251},[76,9853,149],{"emptyLinePlaceholder":148},[76,9855,9856],{"class":78,"line":257},[76,9857,9858],{"class":540},"    \u002F\u002F姓名\n",[76,9860,9861],{"class":78,"line":641},[76,9862,9863],{"class":90},"    string name;\n",[76,9865,9866],{"class":78,"line":646},[76,9867,9868],{"class":540},"    \u002F\u002F年龄\n",[76,9870,9871,9873],{"class":78,"line":659},[76,9872,4081],{"class":82},[76,9874,9875],{"class":90}," age;\n",[76,9877,9878],{"class":78,"line":1608},[76,9879,9880],{"class":540},"    \u002F\u002F分数\n",[76,9882,9883,9885],{"class":78,"line":1632},[76,9884,4081],{"class":82},[76,9886,9887],{"class":90}," score;\n",[76,9889,9890],{"class":78,"line":1637},[76,9891,6079],{"class":90},[76,9893,9894,9896],{"class":78,"line":1642},[76,9895,9837],{"class":82},[76,9897,9898],{"class":86}," School\n",[76,9900,9901],{"class":78,"line":1652},[76,9902,3666],{"class":90},[76,9904,9905],{"class":78,"line":1660},[76,9906,9849],{"class":540},[76,9908,9909],{"class":78,"line":1683},[76,9910,149],{"emptyLinePlaceholder":148},[76,9912,9913],{"class":78,"line":1698},[76,9914,9858],{"class":540},[76,9916,9917],{"class":78,"line":1711},[76,9918,9863],{"class":90},[76,9920,9921],{"class":78,"line":1717},[76,9922,9868],{"class":540},[76,9924,9925,9927],{"class":78,"line":1728},[76,9926,4081],{"class":82},[76,9928,9875],{"class":90},[76,9930,9931],{"class":78,"line":1740},[76,9932,9880],{"class":540},[76,9934,9935,9937],{"class":78,"line":1746},[76,9936,4081],{"class":82},[76,9938,9887],{"class":90},[76,9940,9941,9944],{"class":78,"line":1751},[76,9942,9943],{"class":90},"} s3;",[76,9945,9946],{"class":540}," \u002F\u002F创建结构体时就创建了变量\n",[76,9948,9949,9951,9953],{"class":78,"line":1756},[76,9950,1360],{"class":82},[76,9952,4069],{"class":86},[76,9954,4072],{"class":90},[76,9956,9957],{"class":78,"line":1766},[76,9958,3666],{"class":90},[76,9960,9961],{"class":78,"line":1773},[76,9962,9963],{"class":540},"    \u002F\u002F2.通过学生类型创建具体学生\n",[76,9965,9966],{"class":78,"line":1793},[76,9967,9968],{"class":540},"    \u002F\u002F2.1 struct Student s1;\n",[76,9970,9971,9974,9977],{"class":78,"line":1806},[76,9972,9973],{"class":82},"    struct",[76,9975,9976],{"class":86}," Student",[76,9978,9979],{"class":90}," s1;\n",[76,9981,9982],{"class":78,"line":1817},[76,9983,9984],{"class":540},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[76,9986,9987,9990,9992,9995],{"class":78,"line":1822},[76,9988,9989],{"class":90},"    s1.name",[76,9991,370],{"class":82},[76,9993,9994],{"class":126},"\"张三\"",[76,9996,3415],{"class":90},[76,9998,9999,10002,10004,10006],{"class":78,"line":1835},[76,10000,10001],{"class":90},"    s1.age",[76,10003,370],{"class":82},[76,10005,1214],{"class":119},[76,10007,3415],{"class":90},[76,10009,10010,10013,10015,10017],{"class":78,"line":1847},[76,10011,10012],{"class":90},"    s1.score",[76,10014,370],{"class":82},[76,10016,2518],{"class":119},[76,10018,3415],{"class":90},[76,10020,10021],{"class":78,"line":1852},[76,10022,10023],{"class":540},"    \u002F\u002F输出结果\n",[76,10025,10026,10028,10030,10033,10035,10038,10040,10043,10045],{"class":78,"line":1862},[76,10027,3671],{"class":90},[76,10029,3298],{"class":82},[76,10031,10032],{"class":90},"s1.name",[76,10034,3298],{"class":82},[76,10036,10037],{"class":90},"s1.age",[76,10039,3298],{"class":82},[76,10041,10042],{"class":90},"s1.score",[76,10044,3298],{"class":82},[76,10046,3320],{"class":90},[76,10048,10049],{"class":78,"line":1874},[76,10050,149],{"emptyLinePlaceholder":148},[76,10052,10053],{"class":78,"line":1879},[76,10054,10055],{"class":540},"    \u002F\u002F2.2 struct Student s2={...}\n",[76,10057,10058,10060,10062,10065,10067,10069,10072,10074,10076,10078,10080],{"class":78,"line":1884},[76,10059,9973],{"class":82},[76,10061,9976],{"class":86},[76,10063,10064],{"class":90}," s2",[76,10066,370],{"class":82},[76,10068,298],{"class":90},[76,10070,10071],{"class":126},"\"王五\"",[76,10073,2642],{"class":90},[76,10075,1214],{"class":119},[76,10077,2642],{"class":90},[76,10079,2518],{"class":119},[76,10081,6079],{"class":90},[76,10083,10084],{"class":78,"line":1889},[76,10085,149],{"emptyLinePlaceholder":148},[76,10087,10088],{"class":78,"line":1900},[76,10089,10090],{"class":540},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[76,10092,10093,10096,10098,10100],{"class":78,"line":1906},[76,10094,10095],{"class":90},"    s3.name",[76,10097,370],{"class":82},[76,10099,5763],{"class":126},[76,10101,3415],{"class":90},[76,10103,10104,10107,10109,10111],{"class":78,"line":1924},[76,10105,10106],{"class":90},"    s3.age",[76,10108,370],{"class":82},[76,10110,1214],{"class":119},[76,10112,3415],{"class":90},[76,10114,10115,10118,10120,10122],{"class":78,"line":1929},[76,10116,10117],{"class":90},"    s3.score",[76,10119,370],{"class":82},[76,10121,408],{"class":119},[76,10123,3415],{"class":90},[76,10125,10126],{"class":78,"line":1944},[76,10127,3685],{"class":90},[19,10129,10130],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10132,10134],{"id":10133},"_42结构体数组","4.2结构体数组",[19,10136,10137],{},"将自定义的结构体放入到数组中方便维护",[19,10139,10140,10141,10144],{},"语法：struct 结构体名 数组名",[76,10142,10143],{},"元素个数","={ {}，{},...{} };",[66,10146,10148],{"className":2264,"code":10147,"language":2266,"meta":71,"style":71},"#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",[73,10149,10150,10156,10166,10172,10177,10183,10187,10191,10197,10203,10207,10211,10219,10223,10228,10243,10247,10263,10279,10283,10288,10304,10319,10334,10339,10365,10369,10392,10396],{"__ignoreMap":71},[76,10151,10152,10154],{"class":78,"line":79},[76,10153,4046],{"class":82},[76,10155,4049],{"class":126},[76,10157,10158,10160,10162,10164],{"class":78,"line":94},[76,10159,4054],{"class":82},[76,10161,4057],{"class":82},[76,10163,4060],{"class":86},[76,10165,3415],{"class":90},[76,10167,10168,10170],{"class":78,"line":133},[76,10169,4046],{"class":82},[76,10171,9827],{"class":126},[76,10173,10174],{"class":78,"line":145},[76,10175,10176],{"class":540},"\u002F\u002F1.定义结构体\n",[76,10178,10179,10181],{"class":78,"line":152},[76,10180,9837],{"class":82},[76,10182,9840],{"class":86},[76,10184,10185],{"class":78,"line":157},[76,10186,3666],{"class":90},[76,10188,10189],{"class":78,"line":246},[76,10190,9863],{"class":90},[76,10192,10193,10195],{"class":78,"line":251},[76,10194,4081],{"class":82},[76,10196,9875],{"class":90},[76,10198,10199,10201],{"class":78,"line":257},[76,10200,4081],{"class":82},[76,10202,9887],{"class":90},[76,10204,10205],{"class":78,"line":641},[76,10206,149],{"emptyLinePlaceholder":148},[76,10208,10209],{"class":78,"line":646},[76,10210,6079],{"class":90},[76,10212,10213,10215,10217],{"class":78,"line":659},[76,10214,1360],{"class":82},[76,10216,4069],{"class":86},[76,10218,4072],{"class":90},[76,10220,10221],{"class":78,"line":1608},[76,10222,3666],{"class":90},[76,10224,10225],{"class":78,"line":1632},[76,10226,10227],{"class":540},"    \u002F\u002F2.创建结构体数组\n",[76,10229,10230,10232,10234,10237,10239,10241],{"class":78,"line":1637},[76,10231,9973],{"class":82},[76,10233,9976],{"class":86},[76,10235,10236],{"class":90}," stuArray[",[76,10238,2345],{"class":119},[76,10240,3196],{"class":90},[76,10242,6990],{"class":82},[76,10244,10245],{"class":78,"line":1642},[76,10246,4126],{"class":90},[76,10248,10249,10251,10253,10255,10257,10259,10261],{"class":78,"line":1652},[76,10250,6999],{"class":90},[76,10252,9994],{"class":126},[76,10254,2642],{"class":90},[76,10256,1214],{"class":119},[76,10258,2642],{"class":90},[76,10260,2575],{"class":119},[76,10262,7012],{"class":90},[76,10264,10265,10267,10269,10271,10273,10275,10277],{"class":78,"line":1660},[76,10266,6999],{"class":90},[76,10268,5763],{"class":126},[76,10270,2642],{"class":90},[76,10272,2836],{"class":119},[76,10274,2642],{"class":90},[76,10276,2836],{"class":119},[76,10278,3685],{"class":90},[76,10280,10281],{"class":78,"line":1683},[76,10282,4283],{"class":90},[76,10284,10285],{"class":78,"line":1698},[76,10286,10287],{"class":540},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[76,10289,10290,10293,10295,10298,10300,10302],{"class":78,"line":1711},[76,10291,10292],{"class":90},"    stuArray[",[76,10294,669],{"class":119},[76,10296,10297],{"class":90},"].name",[76,10299,370],{"class":82},[76,10301,5786],{"class":126},[76,10303,3415],{"class":90},[76,10305,10306,10308,10310,10313,10315,10317],{"class":78,"line":1717},[76,10307,10292],{"class":90},[76,10309,669],{"class":119},[76,10311,10312],{"class":90},"].age",[76,10314,370],{"class":82},[76,10316,2345],{"class":119},[76,10318,3415],{"class":90},[76,10320,10321,10323,10325,10328,10330,10332],{"class":78,"line":1728},[76,10322,10292],{"class":90},[76,10324,669],{"class":119},[76,10326,10327],{"class":90},"].score",[76,10329,370],{"class":82},[76,10331,2345],{"class":119},[76,10333,3415],{"class":90},[76,10335,10336],{"class":78,"line":1740},[76,10337,10338],{"class":540},"    \u002F\u002F4.遍历结构体数组\n",[76,10340,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10363],{"class":78,"line":1746},[76,10342,1469],{"class":82},[76,10344,3770],{"class":90},[76,10346,1360],{"class":82},[76,10348,5119],{"class":90},[76,10350,370],{"class":82},[76,10352,1294],{"class":119},[76,10354,5126],{"class":90},[76,10356,584],{"class":82},[76,10358,2345],{"class":119},[76,10360,5126],{"class":90},[76,10362,4388],{"class":82},[76,10364,130],{"class":90},[76,10366,10367],{"class":78,"line":1751},[76,10368,4126],{"class":90},[76,10370,10371,10373,10375,10378,10380,10383,10385,10388,10390],{"class":78,"line":1756},[76,10372,5536],{"class":90},[76,10374,3298],{"class":82},[76,10376,10377],{"class":90},"stuArray[i].name",[76,10379,3298],{"class":82},[76,10381,10382],{"class":90},"stuArray[i].age",[76,10384,3298],{"class":82},[76,10386,10387],{"class":90},"stuArray[i].score",[76,10389,3298],{"class":82},[76,10391,3320],{"class":90},[76,10393,10394],{"class":78,"line":1766},[76,10395,4283],{"class":90},[76,10397,10398],{"class":78,"line":1773},[76,10399,3685],{"class":90},[14,10401,10403],{"id":10402},"_43结构体指针","4.3结构体指针",[19,10405,10406],{},"作用：通过指针访问结构体中的成员",[19,10408,10409],{},"利用操作符->可以通过结构体指针访问结构体属性",[66,10411,10413],{"className":2264,"code":10412,"language":2266,"meta":71,"style":71},"#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",[73,10414,10415,10421,10431,10437,10441,10447,10451,10455,10461,10467,10471,10479,10483,10488,10513,10518,10533,10538,10561],{"__ignoreMap":71},[76,10416,10417,10419],{"class":78,"line":79},[76,10418,4046],{"class":82},[76,10420,4049],{"class":126},[76,10422,10423,10425,10427,10429],{"class":78,"line":94},[76,10424,4054],{"class":82},[76,10426,4057],{"class":82},[76,10428,4060],{"class":86},[76,10430,3415],{"class":90},[76,10432,10433,10435],{"class":78,"line":133},[76,10434,4046],{"class":82},[76,10436,9827],{"class":126},[76,10438,10439],{"class":78,"line":145},[76,10440,10176],{"class":540},[76,10442,10443,10445],{"class":78,"line":152},[76,10444,9837],{"class":82},[76,10446,9840],{"class":86},[76,10448,10449],{"class":78,"line":157},[76,10450,3666],{"class":90},[76,10452,10453],{"class":78,"line":246},[76,10454,9863],{"class":90},[76,10456,10457,10459],{"class":78,"line":251},[76,10458,4081],{"class":82},[76,10460,9875],{"class":90},[76,10462,10463,10465],{"class":78,"line":257},[76,10464,4081],{"class":82},[76,10466,9887],{"class":90},[76,10468,10469],{"class":78,"line":641},[76,10470,6079],{"class":90},[76,10472,10473,10475,10477],{"class":78,"line":646},[76,10474,1360],{"class":82},[76,10476,4069],{"class":86},[76,10478,4072],{"class":90},[76,10480,10481],{"class":78,"line":659},[76,10482,3666],{"class":90},[76,10484,10485],{"class":78,"line":1608},[76,10486,10487],{"class":540},"    \u002F\u002F创建学生结构体变量\n",[76,10489,10490,10492,10494,10497,10499,10501,10503,10505,10507,10509,10511],{"class":78,"line":1632},[76,10491,9973],{"class":82},[76,10493,9976],{"class":86},[76,10495,10496],{"class":90}," s",[76,10498,370],{"class":82},[76,10500,298],{"class":90},[76,10502,9994],{"class":126},[76,10504,2642],{"class":90},[76,10506,1214],{"class":119},[76,10508,2642],{"class":90},[76,10510,2133],{"class":119},[76,10512,6079],{"class":90},[76,10514,10515],{"class":78,"line":1637},[76,10516,10517],{"class":540},"    \u002F\u002F通过指针指向结构体变量\n",[76,10519,10520,10522,10524,10526,10528,10530],{"class":78,"line":1642},[76,10521,9973],{"class":82},[76,10523,9976],{"class":86},[76,10525,1119],{"class":82},[76,10527,19],{"class":90},[76,10529,8418],{"class":82},[76,10531,10532],{"class":90},"s\n",[76,10534,10535],{"class":78,"line":1652},[76,10536,10537],{"class":540},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[76,10539,10540,10542,10544,10547,10549,10552,10554,10557,10559],{"class":78,"line":1660},[76,10541,3671],{"class":90},[76,10543,3298],{"class":82},[76,10545,10546],{"class":90},"p->name",[76,10548,3298],{"class":82},[76,10550,10551],{"class":90},"p->age",[76,10553,3298],{"class":82},[76,10555,10556],{"class":90},"p->score",[76,10558,3298],{"class":82},[76,10560,3320],{"class":90},[76,10562,10563],{"class":78,"line":1683},[76,10564,3685],{"class":90},[14,10566,10568],{"id":10567},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10570,10571],{},"作用：结构体中的成员可以是另一个结构体",[19,10573,10574],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[66,10576,10578],{"className":2264,"code":10577,"language":2266,"meta":71,"style":71},"#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",[73,10579,10580,10586,10596,10602,10607,10615,10619,10623,10629,10635,10639,10644,10651,10655,10662,10666,10672,10677,10681,10689,10693,10698,10703,10708,10719,10731,10742,10755,10766,10777],{"__ignoreMap":71},[76,10581,10582,10584],{"class":78,"line":79},[76,10583,4046],{"class":82},[76,10585,4049],{"class":126},[76,10587,10588,10590,10592,10594],{"class":78,"line":94},[76,10589,4054],{"class":82},[76,10591,4057],{"class":82},[76,10593,4060],{"class":86},[76,10595,3415],{"class":90},[76,10597,10598,10600],{"class":78,"line":133},[76,10599,4046],{"class":82},[76,10601,9827],{"class":126},[76,10603,10604],{"class":78,"line":145},[76,10605,10606],{"class":540},"\u002F\u002F定义学生结构体\n",[76,10608,10609,10611,10613],{"class":78,"line":152},[76,10610,9837],{"class":82},[76,10612,9976],{"class":86},[76,10614,4762],{"class":90},[76,10616,10617],{"class":78,"line":157},[76,10618,3666],{"class":90},[76,10620,10621],{"class":78,"line":246},[76,10622,9863],{"class":90},[76,10624,10625,10627],{"class":78,"line":251},[76,10626,4081],{"class":82},[76,10628,9875],{"class":90},[76,10630,10631,10633],{"class":78,"line":257},[76,10632,4081],{"class":82},[76,10634,9887],{"class":90},[76,10636,10637],{"class":78,"line":641},[76,10638,3685],{"class":90},[76,10640,10641],{"class":78,"line":646},[76,10642,10643],{"class":540},"\u002F\u002F定义老师结构体\n",[76,10645,10646,10648],{"class":78,"line":659},[76,10647,9837],{"class":82},[76,10649,10650],{"class":86}," Teacher\n",[76,10652,10653],{"class":78,"line":1608},[76,10654,3666],{"class":90},[76,10656,10657,10659],{"class":78,"line":1632},[76,10658,4081],{"class":82},[76,10660,10661],{"class":90}," id;\n",[76,10663,10664],{"class":78,"line":1637},[76,10665,9863],{"class":90},[76,10667,10668,10670],{"class":78,"line":1642},[76,10669,4081],{"class":82},[76,10671,9875],{"class":90},[76,10673,10674],{"class":78,"line":1652},[76,10675,10676],{"class":90},"    Student stu;\n",[76,10678,10679],{"class":78,"line":1660},[76,10680,3685],{"class":90},[76,10682,10683,10685,10687],{"class":78,"line":1683},[76,10684,1360],{"class":82},[76,10686,4069],{"class":86},[76,10688,8057],{"class":90},[76,10690,10691],{"class":78,"line":1698},[76,10692,3666],{"class":90},[76,10694,10695],{"class":78,"line":1711},[76,10696,10697],{"class":540},"    \u002F\u002F结构体嵌套结构体\n",[76,10699,10700],{"class":78,"line":1717},[76,10701,10702],{"class":540},"    \u002F\u002F创建老师\n",[76,10704,10705],{"class":78,"line":1728},[76,10706,10707],{"class":90},"    Teacher t;\n",[76,10709,10710,10713,10715,10717],{"class":78,"line":1740},[76,10711,10712],{"class":90},"    t.id",[76,10714,370],{"class":82},[76,10716,2575],{"class":119},[76,10718,3415],{"class":90},[76,10720,10721,10724,10726,10729],{"class":78,"line":1746},[76,10722,10723],{"class":90},"    t.name",[76,10725,370],{"class":82},[76,10727,10728],{"class":126},"\"老王\"",[76,10730,3415],{"class":90},[76,10732,10733,10736,10738,10740],{"class":78,"line":1751},[76,10734,10735],{"class":90},"    t.age",[76,10737,370],{"class":82},[76,10739,1214],{"class":119},[76,10741,3415],{"class":90},[76,10743,10744,10747,10749,10752],{"class":78,"line":1756},[76,10745,10746],{"class":90},"    t.stu.name",[76,10748,370],{"class":82},[76,10750,10751],{"class":126},"\"小王\"",[76,10753,10754],{"class":90},"；\n",[76,10756,10757,10760,10762,10764],{"class":78,"line":1766},[76,10758,10759],{"class":90},"    t.stu.age",[76,10761,370],{"class":82},[76,10763,408],{"class":119},[76,10765,3415],{"class":90},[76,10767,10768,10771,10773,10775],{"class":78,"line":1773},[76,10769,10770],{"class":90},"    t.stu.score",[76,10772,370],{"class":82},[76,10774,2608],{"class":119},[76,10776,3415],{"class":90},[76,10778,10779],{"class":78,"line":1793},[76,10780,3685],{"class":90},[14,10782,10784],{"id":10783},"_45结构体做函数参数","4.5结构体做函数参数",[19,10786,10787],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[66,10789,10791],{"className":2264,"code":10790,"language":2266,"meta":71,"style":71},"#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",[73,10792,10793,10799,10809,10815,10821,10825,10829,10835,10841,10845,10850,10855,10872,10876,10909,10913,10918,10937,10941,10972,10976,10984,10988,10997,11009,11021,11033,11046,11054,11067,11079,11087],{"__ignoreMap":71},[76,10794,10795,10797],{"class":78,"line":79},[76,10796,4046],{"class":82},[76,10798,4049],{"class":126},[76,10800,10801,10803,10805,10807],{"class":78,"line":94},[76,10802,4054],{"class":82},[76,10804,4057],{"class":82},[76,10806,4060],{"class":86},[76,10808,3415],{"class":90},[76,10810,10811,10813],{"class":78,"line":133},[76,10812,4046],{"class":82},[76,10814,9827],{"class":126},[76,10816,10817,10819],{"class":78,"line":145},[76,10818,9837],{"class":82},[76,10820,9840],{"class":86},[76,10822,10823],{"class":78,"line":152},[76,10824,3666],{"class":90},[76,10826,10827],{"class":78,"line":157},[76,10828,9863],{"class":90},[76,10830,10831,10833],{"class":78,"line":246},[76,10832,4081],{"class":82},[76,10834,9875],{"class":90},[76,10836,10837,10839],{"class":78,"line":251},[76,10838,4081],{"class":82},[76,10840,9887],{"class":90},[76,10842,10843],{"class":78,"line":257},[76,10844,6079],{"class":90},[76,10846,10847],{"class":78,"line":641},[76,10848,10849],{"class":540},"\u002F\u002F打印学生信息的函数\n",[76,10851,10852],{"class":78,"line":646},[76,10853,10854],{"class":540},"\u002F\u002F值传递\n",[76,10856,10857,10859,10862,10864,10866,10868,10870],{"class":78,"line":659},[76,10858,7444],{"class":82},[76,10860,10861],{"class":86}," printStudent1",[76,10863,123],{"class":90},[76,10865,9837],{"class":82},[76,10867,9976],{"class":86},[76,10869,10496],{"class":7296},[76,10871,130],{"class":90},[76,10873,10874],{"class":78,"line":1608},[76,10875,3666],{"class":90},[76,10877,10878,10880,10882,10885,10887,10890,10892,10895,10897,10899,10901,10904,10906],{"class":78,"line":1632},[76,10879,8607],{"class":90},[76,10881,3298],{"class":82},[76,10883,10884],{"class":90}," s.name ",[76,10886,3298],{"class":82},[76,10888,10889],{"class":126}," \" \"",[76,10891,3565],{"class":82},[76,10893,10894],{"class":90}," s.age ",[76,10896,3298],{"class":82},[76,10898,10889],{"class":126},[76,10900,3565],{"class":82},[76,10902,10903],{"class":90}," s.score ",[76,10905,3298],{"class":82},[76,10907,10908],{"class":90}," endl;\n",[76,10910,10911],{"class":78,"line":1637},[76,10912,3685],{"class":90},[76,10914,10915],{"class":78,"line":1642},[76,10916,10917],{"class":540},"\u002F\u002F地址传递\n",[76,10919,10920,10922,10925,10927,10929,10931,10933,10935],{"class":78,"line":1652},[76,10921,7444],{"class":82},[76,10923,10924],{"class":86}," printStudent2",[76,10926,123],{"class":90},[76,10928,9837],{"class":82},[76,10930,9976],{"class":86},[76,10932,1119],{"class":82},[76,10934,2954],{"class":7296},[76,10936,130],{"class":90},[76,10938,10939],{"class":78,"line":1660},[76,10940,3666],{"class":90},[76,10942,10943,10945,10947,10950,10952,10954,10956,10959,10961,10963,10965,10968,10970],{"class":78,"line":1683},[76,10944,8607],{"class":90},[76,10946,3298],{"class":82},[76,10948,10949],{"class":90}," s->name ",[76,10951,3298],{"class":82},[76,10953,10889],{"class":126},[76,10955,3565],{"class":82},[76,10957,10958],{"class":90}," s->age ",[76,10960,3298],{"class":82},[76,10962,10889],{"class":126},[76,10964,3565],{"class":82},[76,10966,10967],{"class":90}," s->score ",[76,10969,3298],{"class":82},[76,10971,10908],{"class":90},[76,10973,10974],{"class":78,"line":1698},[76,10975,3685],{"class":90},[76,10977,10978,10980,10982],{"class":78,"line":1711},[76,10979,1360],{"class":82},[76,10981,4069],{"class":86},[76,10983,4072],{"class":90},[76,10985,10986],{"class":78,"line":1717},[76,10987,3666],{"class":90},[76,10989,10990,10992,10994],{"class":78,"line":1728},[76,10991,9973],{"class":82},[76,10993,9976],{"class":86},[76,10995,10996],{"class":90}," s;\n",[76,10998,10999,11002,11004,11007],{"class":78,"line":1740},[76,11000,11001],{"class":90},"    s.name ",[76,11003,370],{"class":82},[76,11005,11006],{"class":126}," \"张三\"",[76,11008,3415],{"class":90},[76,11010,11011,11014,11016,11019],{"class":78,"line":1746},[76,11012,11013],{"class":90},"    s.age ",[76,11015,370],{"class":82},[76,11017,11018],{"class":119}," 20",[76,11020,3415],{"class":90},[76,11022,11023,11026,11028,11031],{"class":78,"line":1751},[76,11024,11025],{"class":90},"    s.score ",[76,11027,370],{"class":82},[76,11029,11030],{"class":119}," 85",[76,11032,3415],{"class":90},[76,11034,11035,11037,11039,11042,11044],{"class":78,"line":1756},[76,11036,3671],{"class":90},[76,11038,3298],{"class":82},[76,11040,11041],{"class":126},"\"值传递:\"",[76,11043,3298],{"class":82},[76,11045,3320],{"class":90},[76,11047,11048,11051],{"class":78,"line":1766},[76,11049,11050],{"class":86},"    printStudent1",[76,11052,11053],{"class":90},"(s);\n",[76,11055,11056,11058,11060,11063,11065],{"class":78,"line":1773},[76,11057,3671],{"class":90},[76,11059,3298],{"class":82},[76,11061,11062],{"class":126},"\"地址传递:\"",[76,11064,3298],{"class":82},[76,11066,3320],{"class":90},[76,11068,11069,11072,11074,11076],{"class":78,"line":1793},[76,11070,11071],{"class":86},"    printStudent2",[76,11073,123],{"class":90},[76,11075,2617],{"class":82},[76,11077,11078],{"class":90},"s); \n",[76,11080,11081,11083,11085],{"class":78,"line":1806},[76,11082,441],{"class":82},[76,11084,587],{"class":119},[76,11086,3415],{"class":90},[76,11088,11089],{"class":78,"line":1817},[76,11090,3685],{"class":90},[19,11092,163],{},[3261,11094,11095,11098],{},[29,11096,11097],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,11099,11100],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11102,11104],{"id":11103},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11106,11107],{},"用const防止误操作",[66,11109,11111],{"className":2264,"code":11110,"language":2266,"meta":71,"style":71},"#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",[73,11112,11113,11119,11129,11135,11140,11144,11148,11154,11160,11164,11180,11184,11207,11211,11219,11223,11244,11251,11255],{"__ignoreMap":71},[76,11114,11115,11117],{"class":78,"line":79},[76,11116,4046],{"class":82},[76,11118,4049],{"class":126},[76,11120,11121,11123,11125,11127],{"class":78,"line":94},[76,11122,4054],{"class":82},[76,11124,4057],{"class":82},[76,11126,4060],{"class":86},[76,11128,3415],{"class":90},[76,11130,11131,11133],{"class":78,"line":133},[76,11132,4046],{"class":82},[76,11134,9827],{"class":126},[76,11136,11137],{"class":78,"line":145},[76,11138,11139],{"class":90},"sctuct Student\n",[76,11141,11142],{"class":78,"line":152},[76,11143,3666],{"class":90},[76,11145,11146],{"class":78,"line":157},[76,11147,9863],{"class":90},[76,11149,11150,11152],{"class":78,"line":246},[76,11151,4081],{"class":82},[76,11153,9875],{"class":90},[76,11155,11156,11158],{"class":78,"line":251},[76,11157,4081],{"class":82},[76,11159,9887],{"class":90},[76,11161,11162],{"class":78,"line":257},[76,11163,6079],{"class":90},[76,11165,11166,11168,11171,11173,11176,11178],{"class":78,"line":641},[76,11167,7444],{"class":82},[76,11169,11170],{"class":86}," printStudents",[76,11172,123],{"class":90},[76,11174,11175],{"class":86},"student",[76,11177,10496],{"class":7296},[76,11179,130],{"class":90},[76,11181,11182],{"class":78,"line":646},[76,11183,3666],{"class":90},[76,11185,11186,11188,11190,11193,11195,11198,11200,11203,11205],{"class":78,"line":659},[76,11187,3671],{"class":90},[76,11189,3298],{"class":82},[76,11191,11192],{"class":90},"s.name",[76,11194,3298],{"class":82},[76,11196,11197],{"class":90},"s.age",[76,11199,3298],{"class":82},[76,11201,11202],{"class":90},"s.score",[76,11204,3298],{"class":82},[76,11206,3320],{"class":90},[76,11208,11209],{"class":78,"line":1608},[76,11210,3685],{"class":90},[76,11212,11213,11215,11217],{"class":78,"line":1632},[76,11214,1360],{"class":82},[76,11216,4069],{"class":86},[76,11218,8057],{"class":90},[76,11220,11221],{"class":78,"line":1637},[76,11222,3666],{"class":90},[76,11224,11225,11228,11230,11232,11234,11236,11238,11240,11242],{"class":78,"line":1642},[76,11226,11227],{"class":90},"    Student s",[76,11229,370],{"class":82},[76,11231,298],{"class":90},[76,11233,9994],{"class":126},[76,11235,2642],{"class":90},[76,11237,1214],{"class":119},[76,11239,2642],{"class":90},[76,11241,1214],{"class":119},[76,11243,6079],{"class":90},[76,11245,11246,11249],{"class":78,"line":1652},[76,11247,11248],{"class":86},"    printStudent",[76,11250,11053],{"class":90},[76,11252,11253],{"class":78,"line":1660},[76,11254,149],{"emptyLinePlaceholder":148},[76,11256,11257],{"class":78,"line":1683},[76,11258,3685],{"class":90},[19,11260,163],{},[3261,11262,11263,11266,11269],{},[29,11264,11265],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11267,11268],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11270,11271],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[66,11273,11275],{"className":2264,"code":11274,"language":2266,"meta":71,"style":71},"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",[73,11276,11277,11296,11300,11305,11325],{"__ignoreMap":71},[76,11278,11279,11281,11283,11285,11287,11290,11292,11294],{"class":78,"line":79},[76,11280,7444],{"class":82},[76,11282,11170],{"class":86},[76,11284,123],{"class":90},[76,11286,8870],{"class":82},[76,11288,11289],{"class":86}," student",[76,11291,1119],{"class":82},[76,11293,2954],{"class":7296},[76,11295,130],{"class":90},[76,11297,11298],{"class":78,"line":94},[76,11299,3666],{"class":90},[76,11301,11302],{"class":78,"line":133},[76,11303,11304],{"class":540},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[76,11306,11307,11309,11311,11313,11315,11317,11319,11321,11323],{"class":78,"line":145},[76,11308,3671],{"class":90},[76,11310,3298],{"class":82},[76,11312,11192],{"class":90},[76,11314,3298],{"class":82},[76,11316,11197],{"class":90},[76,11318,3298],{"class":82},[76,11320,11202],{"class":90},[76,11322,3298],{"class":82},[76,11324,3320],{"class":90},[76,11326,11327],{"class":78,"line":152},[76,11328,3685],{"class":90},[14,11330,11332],{"id":11331},"_47案例","4.7案例",[26,11334,11335],{},[29,11336,11337],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[66,11339,11341],{"className":2264,"code":11340,"language":2266,"meta":71,"style":71},"#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",[73,11342,11343,11349,11359,11365,11372,11376,11382,11386,11391,11397,11403,11407,11411,11417,11421,11426,11431,11444,11448,11453,11479,11483,11495,11522,11526,11538,11547,11551,11556,11585,11589,11601,11610,11637,11648,11658,11662,11666,11670,11675,11699,11703,11727,11731,11750,11776,11780,11804,11826,11849,11853,11857,11861,11869,11873,11878,11899,11905,11919,11925,11952,11961,11967,11975,11980],{"__ignoreMap":71},[76,11344,11345,11347],{"class":78,"line":79},[76,11346,4046],{"class":82},[76,11348,4049],{"class":126},[76,11350,11351,11353,11355,11357],{"class":78,"line":94},[76,11352,4054],{"class":82},[76,11354,4057],{"class":82},[76,11356,4060],{"class":86},[76,11358,3415],{"class":90},[76,11360,11361,11363],{"class":78,"line":133},[76,11362,4046],{"class":82},[76,11364,9827],{"class":126},[76,11366,11367,11369],{"class":78,"line":145},[76,11368,4046],{"class":82},[76,11370,11371],{"class":126},"\u003Cctime>\n",[76,11373,11374],{"class":78,"line":152},[76,11375,10606],{"class":540},[76,11377,11378,11380],{"class":78,"line":157},[76,11379,9837],{"class":82},[76,11381,9840],{"class":86},[76,11383,11384],{"class":78,"line":246},[76,11385,3666],{"class":90},[76,11387,11388],{"class":78,"line":251},[76,11389,11390],{"class":90},"    string sName;\n",[76,11392,11393,11395],{"class":78,"line":257},[76,11394,4081],{"class":82},[76,11396,9875],{"class":90},[76,11398,11399,11401],{"class":78,"line":641},[76,11400,4081],{"class":82},[76,11402,9887],{"class":90},[76,11404,11405],{"class":78,"line":646},[76,11406,6079],{"class":90},[76,11408,11409],{"class":78,"line":659},[76,11410,10643],{"class":540},[76,11412,11413,11415],{"class":78,"line":1608},[76,11414,9837],{"class":82},[76,11416,10650],{"class":86},[76,11418,11419],{"class":78,"line":1632},[76,11420,3666],{"class":90},[76,11422,11423],{"class":78,"line":1637},[76,11424,11425],{"class":90},"    string tName;\n",[76,11427,11428],{"class":78,"line":1642},[76,11429,11430],{"class":540},"    \u002F\u002F学生数组\n",[76,11432,11433,11435,11437,11440,11442],{"class":78,"line":1652},[76,11434,9973],{"class":82},[76,11436,9976],{"class":86},[76,11438,11439],{"class":90}," sArray[",[76,11441,2583],{"class":119},[76,11443,6772],{"class":90},[76,11445,11446],{"class":78,"line":1660},[76,11447,6079],{"class":90},[76,11449,11450],{"class":78,"line":1683},[76,11451,11452],{"class":540},"\u002F\u002F给老师和学生赋值的函数\n",[76,11454,11455,11457,11460,11462,11464,11467,11470,11473,11475,11477],{"class":78,"line":1698},[76,11456,7444],{"class":82},[76,11458,11459],{"class":86}," allocateSpace",[76,11461,123],{"class":90},[76,11463,9837],{"class":82},[76,11465,11466],{"class":86}," Teacher",[76,11468,11469],{"class":7296}," tArray",[76,11471,11472],{"class":90},"[],",[76,11474,1360],{"class":82},[76,11476,9409],{"class":7296},[76,11478,130],{"class":90},[76,11480,11481],{"class":78,"line":1711},[76,11482,3666],{"class":90},[76,11484,11485,11488,11490,11493],{"class":78,"line":1717},[76,11486,11487],{"class":90},"    string nameSeed",[76,11489,370],{"class":82},[76,11491,11492],{"class":126},"\"ABCDE\"",[76,11494,3415],{"class":90},[76,11496,11497,11499,11501,11503,11506,11508,11510,11513,11515,11518,11520],{"class":78,"line":1728},[76,11498,1469],{"class":82},[76,11500,3770],{"class":90},[76,11502,1360],{"class":82},[76,11504,11505],{"class":90}," i ",[76,11507,370],{"class":82},[76,11509,587],{"class":119},[76,11511,11512],{"class":90},"; i ",[76,11514,584],{"class":82},[76,11516,11517],{"class":90}," len; i",[76,11519,4388],{"class":82},[76,11521,130],{"class":90},[76,11523,11524],{"class":78,"line":1740},[76,11525,4126],{"class":90},[76,11527,11528,11531,11533,11536],{"class":78,"line":1746},[76,11529,11530],{"class":90},"        tArray[i].tName ",[76,11532,370],{"class":82},[76,11534,11535],{"class":126}," \"Teacher_\"",[76,11537,3415],{"class":90},[76,11539,11540,11542,11544],{"class":78,"line":1751},[76,11541,11530],{"class":90},[76,11543,1060],{"class":82},[76,11545,11546],{"class":90},"nameSeed[i];\n",[76,11548,11549],{"class":78,"line":1756},[76,11550,149],{"emptyLinePlaceholder":148},[76,11552,11553],{"class":78,"line":1766},[76,11554,11555],{"class":540},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[76,11557,11558,11560,11562,11564,11567,11569,11571,11574,11576,11578,11581,11583],{"class":78,"line":1773},[76,11559,5488],{"class":82},[76,11561,3770],{"class":90},[76,11563,1360],{"class":82},[76,11565,11566],{"class":90}," j ",[76,11568,370],{"class":82},[76,11570,587],{"class":119},[76,11572,11573],{"class":90},"; j ",[76,11575,584],{"class":82},[76,11577,4244],{"class":119},[76,11579,11580],{"class":90},"; j",[76,11582,4388],{"class":82},[76,11584,130],{"class":90},[76,11586,11587],{"class":78,"line":1793},[76,11588,4605],{"class":90},[76,11590,11591,11594,11596,11599],{"class":78,"line":1806},[76,11592,11593],{"class":90},"            tArray[i].sArray[j].sName ",[76,11595,370],{"class":82},[76,11597,11598],{"class":126}," \"Student_\"",[76,11600,3415],{"class":90},[76,11602,11603,11605,11607],{"class":78,"line":1817},[76,11604,11593],{"class":90},[76,11606,1060],{"class":82},[76,11608,11609],{"class":90}," nameSeed[j];\n",[76,11611,11612,11615,11618,11620,11622,11624,11626,11628,11630,11632,11634],{"class":78,"line":1822},[76,11613,11614],{"class":82},"            int",[76,11616,11617],{"class":90}," random",[76,11619,370],{"class":82},[76,11621,4519],{"class":86},[76,11623,4522],{"class":90},[76,11625,2592],{"class":82},[76,11627,3164],{"class":119},[76,11629,376],{"class":82},[76,11631,2665],{"class":119},[76,11633,2324],{"class":90},[76,11635,11636],{"class":540},"\u002F\u002F40~99\n",[76,11638,11639,11642,11644,11646],{"class":78,"line":1835},[76,11640,11641],{"class":90},"            tArray[i].sArray[j].age ",[76,11643,370],{"class":82},[76,11645,11018],{"class":119},[76,11647,3415],{"class":90},[76,11649,11650,11653,11655],{"class":78,"line":1847},[76,11651,11652],{"class":90},"            tArray[i].sArray[j].score ",[76,11654,370],{"class":82},[76,11656,11657],{"class":90}," random;\n",[76,11659,11660],{"class":78,"line":1852},[76,11661,4624],{"class":90},[76,11663,11664],{"class":78,"line":1862},[76,11665,4283],{"class":90},[76,11667,11668],{"class":78,"line":1874},[76,11669,3685],{"class":90},[76,11671,11672],{"class":78,"line":1879},[76,11673,11674],{"class":540},"\u002F\u002F打印所有信息的函数\n",[76,11676,11677,11679,11682,11684,11686,11688,11690,11693,11695,11697],{"class":78,"line":1884},[76,11678,7444],{"class":82},[76,11680,11681],{"class":86}," printInfo",[76,11683,123],{"class":90},[76,11685,9837],{"class":82},[76,11687,11466],{"class":86},[76,11689,11469],{"class":7296},[76,11691,11692],{"class":90},"[], ",[76,11694,1360],{"class":82},[76,11696,9409],{"class":7296},[76,11698,130],{"class":90},[76,11700,11701],{"class":78,"line":1889},[76,11702,3666],{"class":90},[76,11704,11705,11707,11709,11711,11713,11715,11717,11719,11721,11723,11725],{"class":78,"line":1900},[76,11706,1469],{"class":82},[76,11708,3770],{"class":90},[76,11710,1360],{"class":82},[76,11712,11505],{"class":90},[76,11714,370],{"class":82},[76,11716,587],{"class":119},[76,11718,11512],{"class":90},[76,11720,584],{"class":82},[76,11722,11517],{"class":90},[76,11724,4388],{"class":82},[76,11726,130],{"class":90},[76,11728,11729],{"class":78,"line":1906},[76,11730,4126],{"class":90},[76,11732,11733,11736,11738,11741,11743,11746,11748],{"class":78,"line":1924},[76,11734,11735],{"class":90},"        cout ",[76,11737,3298],{"class":82},[76,11739,11740],{"class":126}," \"Teacher: \"",[76,11742,3565],{"class":82},[76,11744,11745],{"class":90}," tArray[i].tName ",[76,11747,3298],{"class":82},[76,11749,10908],{"class":90},[76,11751,11752,11754,11756,11758,11760,11762,11764,11766,11768,11770,11772,11774],{"class":78,"line":1929},[76,11753,5488],{"class":82},[76,11755,3770],{"class":90},[76,11757,1360],{"class":82},[76,11759,11566],{"class":90},[76,11761,370],{"class":82},[76,11763,587],{"class":119},[76,11765,11573],{"class":90},[76,11767,584],{"class":82},[76,11769,4244],{"class":119},[76,11771,11580],{"class":90},[76,11773,4388],{"class":82},[76,11775,130],{"class":90},[76,11777,11778],{"class":78,"line":1944},[76,11779,4605],{"class":90},[76,11781,11782,11785,11787,11790,11792,11795,11797,11800,11802],{"class":78,"line":1950},[76,11783,11784],{"class":90},"            cout ",[76,11786,3298],{"class":82},[76,11788,11789],{"class":126}," \"",[76,11791,3355],{"class":119},[76,11793,11794],{"class":126},"Student: \"",[76,11796,3565],{"class":82},[76,11798,11799],{"class":90}," tArray[i].sArray[j].sName",[76,11801,3298],{"class":82},[76,11803,3320],{"class":90},[76,11805,11806,11808,11810,11812,11814,11817,11819,11822,11824],{"class":78,"line":1965},[76,11807,11784],{"class":90},[76,11809,3298],{"class":82},[76,11811,11789],{"class":126},[76,11813,3355],{"class":119},[76,11815,11816],{"class":126},"Age: \"",[76,11818,3565],{"class":82},[76,11820,11821],{"class":90}," tArray[i].sArray[j].age ",[76,11823,3298],{"class":82},[76,11825,10908],{"class":90},[76,11827,11828,11830,11832,11834,11836,11839,11841,11844,11846],{"class":78,"line":1971},[76,11829,11784],{"class":90},[76,11831,3298],{"class":82},[76,11833,11789],{"class":126},[76,11835,3355],{"class":119},[76,11837,11838],{"class":126},"Score: \"",[76,11840,3565],{"class":82},[76,11842,11843],{"class":90}," tArray[i].sArray[j].score ",[76,11845,3298],{"class":82},[76,11847,11848],{"class":90}," endl;   \n",[76,11850,11851],{"class":78,"line":1985},[76,11852,4624],{"class":90},[76,11854,11855],{"class":78,"line":1991},[76,11856,4283],{"class":90},[76,11858,11859],{"class":78,"line":2005},[76,11860,3685],{"class":90},[76,11862,11863,11865,11867],{"class":78,"line":2017},[76,11864,1360],{"class":82},[76,11866,4069],{"class":86},[76,11868,4072],{"class":90},[76,11870,11871],{"class":78,"line":2023},[76,11872,3666],{"class":90},[76,11874,11875],{"class":78,"line":2031},[76,11876,11877],{"class":540},"    \u002F\u002F随机数种子\n",[76,11879,11881,11883,11885,11887,11889,11891,11893,11895,11897],{"class":78,"line":11880},56,[76,11882,4469],{"class":86},[76,11884,4472],{"class":90},[76,11886,4475],{"class":82},[76,11888,4478],{"class":82},[76,11890,2693],{"class":90},[76,11892,4483],{"class":86},[76,11894,123],{"class":90},[76,11896,4488],{"class":119},[76,11898,4491],{"class":90},[76,11900,11902],{"class":78,"line":11901},57,[76,11903,11904],{"class":540},"    \u002F\u002F1.创建3名老师的数组\n",[76,11906,11908,11910,11912,11915,11917],{"class":78,"line":11907},58,[76,11909,9973],{"class":82},[76,11911,11466],{"class":86},[76,11913,11914],{"class":90}," tArray[",[76,11916,2339],{"class":119},[76,11918,6772],{"class":90},[76,11920,11922],{"class":78,"line":11921},59,[76,11923,11924],{"class":540},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[76,11926,11928,11930,11933,11935,11938,11941,11943,11945,11948,11950],{"class":78,"line":11927},60,[76,11929,4081],{"class":82},[76,11931,11932],{"class":90}," len ",[76,11934,370],{"class":82},[76,11936,11937],{"class":82}," sizeof",[76,11939,11940],{"class":90},"(tArray) ",[76,11942,795],{"class":82},[76,11944,11937],{"class":82},[76,11946,11947],{"class":90},"(tArray[",[76,11949,1294],{"class":119},[76,11951,5940],{"class":90},[76,11953,11955,11958],{"class":78,"line":11954},61,[76,11956,11957],{"class":86},"    allocateSpace",[76,11959,11960],{"class":90},"(tArray, len);\n",[76,11962,11964],{"class":78,"line":11963},62,[76,11965,11966],{"class":540},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[76,11968,11970,11973],{"class":78,"line":11969},63,[76,11971,11972],{"class":86},"    printInfo",[76,11974,11960],{"class":90},[76,11976,11978],{"class":78,"line":11977},64,[76,11979,149],{"emptyLinePlaceholder":148},[76,11981,11983],{"class":78,"line":11982},65,[76,11984,3685],{"class":90},[26,11986,11987],{"start":94},[29,11988,11989,11992],{},[2416,11990,11991],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11994,11995],{},"五名英雄信息如下：",[66,11997,12001],{"className":11998,"code":11999,"language":12000,"meta":71,"style":71},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[73,12002,12003,12021,12038,12055,12072],{"__ignoreMap":71},[76,12004,12005,12007,12010,12012,12014,12016,12019],{"class":78,"line":79},[76,12006,6999],{"class":90},[76,12008,12009],{"class":126},"\"刘备\"",[76,12011,2642],{"class":90},[76,12013,3033],{"class":119},[76,12015,2642],{"class":90},[76,12017,12018],{"class":126},"\"男\"",[76,12020,7012],{"class":90},[76,12022,12023,12025,12028,12030,12032,12034,12036],{"class":78,"line":94},[76,12024,6999],{"class":90},[76,12026,12027],{"class":126},"\"关羽\"",[76,12029,2642],{"class":90},[76,12031,3008],{"class":119},[76,12033,2642],{"class":90},[76,12035,12018],{"class":126},[76,12037,7012],{"class":90},[76,12039,12040,12042,12045,12047,12049,12051,12053],{"class":78,"line":133},[76,12041,6999],{"class":90},[76,12043,12044],{"class":126},"\"张飞\"",[76,12046,2642],{"class":90},[76,12048,408],{"class":119},[76,12050,2642],{"class":90},[76,12052,12018],{"class":126},[76,12054,7012],{"class":90},[76,12056,12057,12059,12062,12064,12066,12068,12070],{"class":78,"line":145},[76,12058,6999],{"class":90},[76,12060,12061],{"class":126},"\"赵云\"",[76,12063,2642],{"class":90},[76,12065,2983],{"class":119},[76,12067,2642],{"class":90},[76,12069,12018],{"class":126},[76,12071,7012],{"class":90},[76,12073,12074,12076,12079,12081,12083,12085,12088],{"class":78,"line":152},[76,12075,6999],{"class":90},[76,12077,12078],{"class":126},"\"貂蝉\"",[76,12080,2642],{"class":90},[76,12082,2934],{"class":119},[76,12084,2642],{"class":90},[76,12086,12087],{"class":126},"\"女\"",[76,12089,7012],{"class":90},[19,12091,12092],{},"代码：",[66,12094,12096],{"className":2264,"code":12095,"language":2266,"meta":71,"style":71},"#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",[73,12097,12098,12104,12114,12120,12127,12131,12135,12141,12146,12150,12155,12178,12182,12207,12211,12244,12249,12278,12283,12298,12324,12344,12349,12354,12358,12362,12367,12389,12393,12417,12421,12483,12487,12491,12499,12503,12508,12519,12523,12539,12555,12571,12587,12603,12607,12627,12649,12654,12667,12674,12679,12685,12690,12703,12709],{"__ignoreMap":71},[76,12099,12100,12102],{"class":78,"line":79},[76,12101,4046],{"class":82},[76,12103,4049],{"class":126},[76,12105,12106,12108,12110,12112],{"class":78,"line":94},[76,12107,4054],{"class":82},[76,12109,4057],{"class":82},[76,12111,4060],{"class":86},[76,12113,3415],{"class":90},[76,12115,12116,12118],{"class":78,"line":133},[76,12117,4046],{"class":82},[76,12119,9827],{"class":126},[76,12121,12122,12124],{"class":78,"line":145},[76,12123,9837],{"class":82},[76,12125,12126],{"class":86}," Sanguo\n",[76,12128,12129],{"class":78,"line":152},[76,12130,3666],{"class":90},[76,12132,12133],{"class":78,"line":157},[76,12134,9863],{"class":90},[76,12136,12137,12139],{"class":78,"line":246},[76,12138,4081],{"class":82},[76,12140,9875],{"class":90},[76,12142,12143],{"class":78,"line":251},[76,12144,12145],{"class":90},"    string gender;\n",[76,12147,12148],{"class":78,"line":257},[76,12149,6079],{"class":90},[76,12151,12152],{"class":78,"line":641},[76,12153,12154],{"class":540},"\u002F\u002F定义排序函数\n",[76,12156,12157,12159,12161,12163,12166,12168,12170,12172,12174,12176],{"class":78,"line":646},[76,12158,7444],{"class":82},[76,12160,9394],{"class":86},[76,12162,123],{"class":90},[76,12164,12165],{"class":86},"Sanguo",[76,12167,1119],{"class":82},[76,12169,2954],{"class":7296},[76,12171,2642],{"class":90},[76,12173,1360],{"class":82},[76,12175,9409],{"class":7296},[76,12177,130],{"class":90},[76,12179,12180],{"class":78,"line":659},[76,12181,3666],{"class":90},[76,12183,12184,12186,12188,12190,12192,12194,12196,12198,12200,12203,12205],{"class":78,"line":1608},[76,12185,1469],{"class":82},[76,12187,123],{"class":90},[76,12189,1360],{"class":82},[76,12191,5119],{"class":90},[76,12193,370],{"class":82},[76,12195,1294],{"class":119},[76,12197,5126],{"class":90},[76,12199,584],{"class":82},[76,12201,12202],{"class":90},"len;i",[76,12204,4388],{"class":82},[76,12206,130],{"class":90},[76,12208,12209],{"class":78,"line":1632},[76,12210,4126],{"class":90},[76,12212,12213,12216,12218,12220,12222,12224,12226,12228,12230,12232,12234,12236,12238,12240,12242],{"class":78,"line":1637},[76,12214,12215],{"class":82},"     for",[76,12217,3770],{"class":90},[76,12219,1360],{"class":82},[76,12221,5495],{"class":90},[76,12223,370],{"class":82},[76,12225,1294],{"class":119},[76,12227,5502],{"class":90},[76,12229,584],{"class":82},[76,12231,9436],{"class":90},[76,12233,666],{"class":82},[76,12235,669],{"class":119},[76,12237,666],{"class":82},[76,12239,5635],{"class":90},[76,12241,4388],{"class":82},[76,12243,130],{"class":90},[76,12245,12246],{"class":78,"line":1642},[76,12247,12248],{"class":90},"     {\n",[76,12250,12251,12254,12257,12259,12262,12264,12267,12269,12271,12273,12275],{"class":78,"line":1652},[76,12252,12253],{"class":82},"         if",[76,12255,12256],{"class":90}," ((s",[76,12258,376],{"class":82},[76,12260,12261],{"class":90},"j)->age ",[76,12263,1829],{"class":82},[76,12265,12266],{"class":90}," (s",[76,12268,376],{"class":82},[76,12270,2730],{"class":90},[76,12272,376],{"class":82},[76,12274,669],{"class":119},[76,12276,12277],{"class":90},")->age)\n",[76,12279,12280],{"class":78,"line":1660},[76,12281,12282],{"class":90},"         {\n",[76,12284,12285,12288,12290,12293,12295],{"class":78,"line":1683},[76,12286,12287],{"class":90},"             Sanguo temp",[76,12289,9231],{"class":82},[76,12291,12292],{"class":90},"(s",[76,12294,376],{"class":82},[76,12296,12297],{"class":90},"j);\n",[76,12299,12300,12303,12305,12307,12310,12312,12314,12316,12318,12320,12322],{"class":78,"line":1698},[76,12301,12302],{"class":82},"             *",[76,12304,12292],{"class":90},[76,12306,376],{"class":82},[76,12308,12309],{"class":90},"j)",[76,12311,9231],{"class":82},[76,12313,12292],{"class":90},[76,12315,376],{"class":82},[76,12317,2730],{"class":90},[76,12319,376],{"class":82},[76,12321,669],{"class":119},[76,12323,4807],{"class":90},[76,12325,12326,12328,12330,12332,12334,12336,12338,12340,12342],{"class":78,"line":1711},[76,12327,12302],{"class":82},[76,12329,12292],{"class":90},[76,12331,376],{"class":82},[76,12333,2730],{"class":90},[76,12335,376],{"class":82},[76,12337,669],{"class":119},[76,12339,2693],{"class":90},[76,12341,370],{"class":82},[76,12343,6362],{"class":90},[76,12345,12346],{"class":78,"line":1717},[76,12347,12348],{"class":90},"         }\n",[76,12350,12351],{"class":78,"line":1728},[76,12352,12353],{"class":90},"     }\n",[76,12355,12356],{"class":78,"line":1740},[76,12357,4283],{"class":90},[76,12359,12360],{"class":78,"line":1746},[76,12361,3685],{"class":90},[76,12363,12364],{"class":78,"line":1751},[76,12365,12366],{"class":540},"\u002F\u002F定义打印函数\n",[76,12368,12369,12371,12373,12375,12377,12379,12381,12383,12385,12387],{"class":78,"line":1756},[76,12370,7444],{"class":82},[76,12372,11681],{"class":86},[76,12374,123],{"class":90},[76,12376,12165],{"class":86},[76,12378,1119],{"class":82},[76,12380,2954],{"class":7296},[76,12382,2642],{"class":90},[76,12384,1360],{"class":82},[76,12386,9409],{"class":7296},[76,12388,130],{"class":90},[76,12390,12391],{"class":78,"line":1766},[76,12392,3666],{"class":90},[76,12394,12395,12397,12399,12401,12403,12405,12407,12409,12411,12413,12415],{"class":78,"line":1773},[76,12396,1469],{"class":82},[76,12398,3770],{"class":90},[76,12400,1360],{"class":82},[76,12402,5119],{"class":90},[76,12404,370],{"class":82},[76,12406,1294],{"class":119},[76,12408,5126],{"class":90},[76,12410,584],{"class":82},[76,12412,12202],{"class":90},[76,12414,4388],{"class":82},[76,12416,130],{"class":90},[76,12418,12419],{"class":78,"line":1793},[76,12420,4126],{"class":90},[76,12422,12423,12425,12427,12429,12431,12434,12436,12438,12440,12443,12445,12447,12449,12452,12454,12456,12458,12461,12463,12465,12467,12470,12472,12474,12476,12479,12481],{"class":78,"line":1806},[76,12424,5536],{"class":90},[76,12426,3298],{"class":82},[76,12428,307],{"class":126},[76,12430,3355],{"class":119},[76,12432,12433],{"class":126},"姓名：\"",[76,12435,3298],{"class":82},[76,12437,12292],{"class":90},[76,12439,376],{"class":82},[76,12441,12442],{"class":90},"i)->name",[76,12444,3298],{"class":82},[76,12446,307],{"class":126},[76,12448,3355],{"class":119},[76,12450,12451],{"class":126},"年龄：\"",[76,12453,3298],{"class":82},[76,12455,12292],{"class":90},[76,12457,376],{"class":82},[76,12459,12460],{"class":90},"i)->age",[76,12462,3298],{"class":82},[76,12464,307],{"class":126},[76,12466,3355],{"class":119},[76,12468,12469],{"class":126},"性别：\"",[76,12471,3298],{"class":82},[76,12473,12292],{"class":90},[76,12475,376],{"class":82},[76,12477,12478],{"class":90},"i)->gender",[76,12480,3298],{"class":82},[76,12482,3320],{"class":90},[76,12484,12485],{"class":78,"line":1817},[76,12486,4283],{"class":90},[76,12488,12489],{"class":78,"line":1822},[76,12490,3685],{"class":90},[76,12492,12493,12495,12497],{"class":78,"line":1835},[76,12494,1360],{"class":82},[76,12496,4069],{"class":86},[76,12498,4072],{"class":90},[76,12500,12501],{"class":78,"line":1847},[76,12502,3666],{"class":90},[76,12504,12505],{"class":78,"line":1852},[76,12506,12507],{"class":540},"    \u002F\u002F定义结构体变量\n",[76,12509,12510,12513,12515,12517],{"class":78,"line":1862},[76,12511,12512],{"class":90},"    Sanguo s1[",[76,12514,2583],{"class":119},[76,12516,3196],{"class":90},[76,12518,6990],{"class":82},[76,12520,12521],{"class":78,"line":1874},[76,12522,4126],{"class":90},[76,12524,12525,12527,12529,12531,12533,12535,12537],{"class":78,"line":1879},[76,12526,6999],{"class":90},[76,12528,12009],{"class":126},[76,12530,2642],{"class":90},[76,12532,3033],{"class":119},[76,12534,2642],{"class":90},[76,12536,12018],{"class":126},[76,12538,7012],{"class":90},[76,12540,12541,12543,12545,12547,12549,12551,12553],{"class":78,"line":1884},[76,12542,6999],{"class":90},[76,12544,12027],{"class":126},[76,12546,2642],{"class":90},[76,12548,3008],{"class":119},[76,12550,2642],{"class":90},[76,12552,12018],{"class":126},[76,12554,7012],{"class":90},[76,12556,12557,12559,12561,12563,12565,12567,12569],{"class":78,"line":1889},[76,12558,6999],{"class":90},[76,12560,12044],{"class":126},[76,12562,2642],{"class":90},[76,12564,408],{"class":119},[76,12566,2642],{"class":90},[76,12568,12018],{"class":126},[76,12570,7012],{"class":90},[76,12572,12573,12575,12577,12579,12581,12583,12585],{"class":78,"line":1900},[76,12574,6999],{"class":90},[76,12576,12061],{"class":126},[76,12578,2642],{"class":90},[76,12580,2983],{"class":119},[76,12582,2642],{"class":90},[76,12584,12018],{"class":126},[76,12586,7012],{"class":90},[76,12588,12589,12591,12593,12595,12597,12599,12601],{"class":78,"line":1906},[76,12590,6999],{"class":90},[76,12592,12078],{"class":126},[76,12594,2642],{"class":90},[76,12596,2934],{"class":119},[76,12598,2642],{"class":90},[76,12600,12087],{"class":126},[76,12602,7012],{"class":90},[76,12604,12605],{"class":78,"line":1924},[76,12606,7033],{"class":90},[76,12608,12609,12611,12613,12615,12618,12620,12623,12625],{"class":78,"line":1929},[76,12610,4081],{"class":82},[76,12612,9409],{"class":90},[76,12614,6285],{"class":82},[76,12616,12617],{"class":90},"(s1)",[76,12619,6291],{"class":82},[76,12621,12622],{"class":90},"(s1[",[76,12624,1294],{"class":119},[76,12626,5940],{"class":90},[76,12628,12629,12632,12634,12637,12639,12642,12645,12647],{"class":78,"line":1944},[76,12630,12631],{"class":90},"    Sanguo ",[76,12633,2718],{"class":82},[76,12635,12636],{"class":90},"s ",[76,12638,370],{"class":82},[76,12640,12641],{"class":82}," &",[76,12643,12644],{"class":90},"s1[",[76,12646,1294],{"class":119},[76,12648,6772],{"class":90},[76,12650,12651],{"class":78,"line":1950},[76,12652,12653],{"class":540},"    \u002F\u002F排序前：\n",[76,12655,12656,12658,12660,12663,12665],{"class":78,"line":1965},[76,12657,8607],{"class":90},[76,12659,3298],{"class":82},[76,12661,12662],{"class":126}," \"排序前：\"",[76,12664,3565],{"class":82},[76,12666,10908],{"class":90},[76,12668,12669,12671],{"class":78,"line":1971},[76,12670,11972],{"class":86},[76,12672,12673],{"class":90},"(s,len);\n",[76,12675,12676],{"class":78,"line":1985},[76,12677,12678],{"class":540},"    \u002F\u002F调用排序函数\n",[76,12680,12681,12683],{"class":78,"line":1991},[76,12682,9676],{"class":86},[76,12684,12673],{"class":90},[76,12686,12687],{"class":78,"line":2005},[76,12688,12689],{"class":540},"    \u002F\u002F排序后\n",[76,12691,12692,12694,12696,12699,12701],{"class":78,"line":2017},[76,12693,8607],{"class":90},[76,12695,3298],{"class":82},[76,12697,12698],{"class":126}," \"排序后：\"",[76,12700,3565],{"class":82},[76,12702,10908],{"class":90},[76,12704,12705,12707],{"class":78,"line":2023},[76,12706,11972],{"class":86},[76,12708,12673],{"class":90},[76,12710,12711],{"class":78,"line":2031},[76,12712,3685],{"class":90},[19,12714,12715,12716,801],{},"注意：使用指针时直接用传首地址**&s",[76,12717,1294],{},[2178,12719,12720],{},"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":71,"searchDepth":94,"depth":94,"links":12722},[12723,12724,12725,12726,12727,12728,12729],{"id":9781,"depth":94,"text":9782},{"id":10133,"depth":94,"text":10134},{"id":10402,"depth":94,"text":10403},{"id":10567,"depth":94,"text":10568},{"id":10783,"depth":94,"text":10784},{"id":11103,"depth":94,"text":11104},{"id":11331,"depth":94,"text":11332},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9770,"description":9778},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12736,"title":12737,"body":12738,"description":71,"extension":2202,"meta":14079,"navigation":148,"path":14080,"seo":14081,"stem":14082,"__hash__":14083},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12739,"toc":14073},[12740,12743,12747,12753,12767,12772,12775,12779,12786,12792,12795,12802,12808,12813,12816,12819,12822,13384,13387,13401,13405,13410,13426,13566,13569,13575,13578,13583,13591,13699,13702,13707,13710,13715,13718,13724,13727,14070],[10,12741,12737],{"id":12742},"_5程序内存模型",[14,12744,12746],{"id":12745},"_51内存分区模型","5.1内存分区模型",[19,12748,12749,12750],{},"C++程序在执行时，将内存大方向划分为",[2416,12751,12752],{},"4个区域",[3261,12754,12755,12758,12761,12764],{},[29,12756,12757],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12759,12760],{},"全局区：存放全局变量和静态变量以及常量",[29,12762,12763],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12765,12766],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12768,12769],{},[2416,12770,12771],{},"内存四区意义：",[19,12773,12774],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[889,12776,12778],{"id":12777},"_511程序运行前","5.1.1程序运行前",[19,12780,12781,12782,12785],{},"​\t在程序编译后，生成了exe可执行程序，",[2416,12783,12784],{},"未执行该程序前","分为两个区域",[19,12787,12788,12789],{},"​\t",[2416,12790,12791],{},"代码区：",[19,12793,12794],{},"​\t\t存放 CPU 执行的机器指令",[19,12796,12797,12798,12801],{},"​\t\t代码区是",[2416,12799,12800],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12803,12797,12804,12807],{},[2416,12805,12806],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12809,12788,12810],{},[2416,12811,12812],{},"全局区：",[19,12814,12815],{},"​\t\t全局变量和静态变量存放在此.",[19,12817,12818],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12820,12821],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[66,12823,12825],{"className":2264,"code":12824,"language":2266,"meta":71,"style":71},"\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",[73,12826,12827,12832,12845,12858,12862,12867,12882,12897,12901,12910,12914,12919,12931,12943,12947,12952,12978,13004,13008,13035,13061,13065,13070,13086,13101,13105,13131,13157,13161,13186,13211,13215,13241,13267,13271,13287,13302,13328,13354,13358,13368,13372,13380],{"__ignoreMap":71},[76,12828,12829],{"class":78,"line":79},[76,12830,12831],{"class":540},"\u002F\u002F全局变量\n",[76,12833,12834,12836,12839,12841,12843],{"class":78,"line":94},[76,12835,1360],{"class":82},[76,12837,12838],{"class":90}," g_a ",[76,12840,370],{"class":82},[76,12842,4134],{"class":119},[76,12844,3415],{"class":90},[76,12846,12847,12849,12852,12854,12856],{"class":78,"line":133},[76,12848,1360],{"class":82},[76,12850,12851],{"class":90}," g_b ",[76,12853,370],{"class":82},[76,12855,4134],{"class":119},[76,12857,3415],{"class":90},[76,12859,12860],{"class":78,"line":145},[76,12861,149],{"emptyLinePlaceholder":148},[76,12863,12864],{"class":78,"line":152},[76,12865,12866],{"class":540},"\u002F\u002F全局常量\n",[76,12868,12869,12871,12873,12876,12878,12880],{"class":78,"line":157},[76,12870,8870],{"class":82},[76,12872,4478],{"class":82},[76,12874,12875],{"class":90}," c_g_a ",[76,12877,370],{"class":82},[76,12879,4134],{"class":119},[76,12881,3415],{"class":90},[76,12883,12884,12886,12888,12891,12893,12895],{"class":78,"line":246},[76,12885,8870],{"class":82},[76,12887,4478],{"class":82},[76,12889,12890],{"class":90}," c_g_b ",[76,12892,370],{"class":82},[76,12894,4134],{"class":119},[76,12896,3415],{"class":90},[76,12898,12899],{"class":78,"line":251},[76,12900,149],{"emptyLinePlaceholder":148},[76,12902,12903,12905,12907],{"class":78,"line":257},[76,12904,1360],{"class":82},[76,12906,4069],{"class":86},[76,12908,12909],{"class":90},"() {\n",[76,12911,12912],{"class":78,"line":641},[76,12913,149],{"emptyLinePlaceholder":148},[76,12915,12916],{"class":78,"line":646},[76,12917,12918],{"class":540},"    \u002F\u002F局部变量\n",[76,12920,12921,12923,12925,12927,12929],{"class":78,"line":659},[76,12922,4081],{"class":82},[76,12924,373],{"class":90},[76,12926,370],{"class":82},[76,12928,4134],{"class":119},[76,12930,3415],{"class":90},[76,12932,12933,12935,12937,12939,12941],{"class":78,"line":1608},[76,12934,4081],{"class":82},[76,12936,1247],{"class":90},[76,12938,370],{"class":82},[76,12940,4134],{"class":119},[76,12942,3415],{"class":90},[76,12944,12945],{"class":78,"line":1632},[76,12946,149],{"emptyLinePlaceholder":148},[76,12948,12949],{"class":78,"line":1637},[76,12950,12951],{"class":540},"    \u002F\u002F打印地址\n",[76,12953,12954,12956,12958,12961,12963,12965,12967,12969,12971,12974,12976],{"class":78,"line":1642},[76,12955,8607],{"class":90},[76,12957,3298],{"class":82},[76,12959,12960],{"class":126}," \"局部变量a地址为： \"",[76,12962,3565],{"class":82},[76,12964,3770],{"class":90},[76,12966,1360],{"class":82},[76,12968,2693],{"class":90},[76,12970,2617],{"class":82},[76,12972,12973],{"class":90},"a ",[76,12975,3298],{"class":82},[76,12977,10908],{"class":90},[76,12979,12980,12982,12984,12987,12989,12991,12993,12995,12997,13000,13002],{"class":78,"line":1652},[76,12981,8607],{"class":90},[76,12983,3298],{"class":82},[76,12985,12986],{"class":126}," \"局部变量b地址为： \"",[76,12988,3565],{"class":82},[76,12990,3770],{"class":90},[76,12992,1360],{"class":82},[76,12994,2693],{"class":90},[76,12996,2617],{"class":82},[76,12998,12999],{"class":90},"b ",[76,13001,3298],{"class":82},[76,13003,10908],{"class":90},[76,13005,13006],{"class":78,"line":1660},[76,13007,149],{"emptyLinePlaceholder":148},[76,13009,13010,13012,13014,13017,13019,13022,13024,13026,13028,13031,13033],{"class":78,"line":1683},[76,13011,8607],{"class":90},[76,13013,3298],{"class":82},[76,13015,13016],{"class":126}," \"全局变量g_a地址为： \"",[76,13018,3565],{"class":82},[76,13020,13021],{"class":90},"  (",[76,13023,1360],{"class":82},[76,13025,2693],{"class":90},[76,13027,2617],{"class":82},[76,13029,13030],{"class":90},"g_a ",[76,13032,3298],{"class":82},[76,13034,10908],{"class":90},[76,13036,13037,13039,13041,13044,13046,13048,13050,13052,13054,13057,13059],{"class":78,"line":1698},[76,13038,8607],{"class":90},[76,13040,3298],{"class":82},[76,13042,13043],{"class":126}," \"全局变量g_b地址为： \"",[76,13045,3565],{"class":82},[76,13047,13021],{"class":90},[76,13049,1360],{"class":82},[76,13051,2693],{"class":90},[76,13053,2617],{"class":82},[76,13055,13056],{"class":90},"g_b ",[76,13058,3298],{"class":82},[76,13060,10908],{"class":90},[76,13062,13063],{"class":78,"line":1711},[76,13064,149],{"emptyLinePlaceholder":148},[76,13066,13067],{"class":78,"line":1717},[76,13068,13069],{"class":540},"    \u002F\u002F静态变量\n",[76,13071,13072,13075,13077,13080,13082,13084],{"class":78,"line":1728},[76,13073,13074],{"class":82},"    static",[76,13076,4478],{"class":82},[76,13078,13079],{"class":90}," s_a ",[76,13081,370],{"class":82},[76,13083,4134],{"class":119},[76,13085,3415],{"class":90},[76,13087,13088,13090,13092,13095,13097,13099],{"class":78,"line":1740},[76,13089,13074],{"class":82},[76,13091,4478],{"class":82},[76,13093,13094],{"class":90}," s_b ",[76,13096,370],{"class":82},[76,13098,4134],{"class":119},[76,13100,3415],{"class":90},[76,13102,13103],{"class":78,"line":1746},[76,13104,149],{"emptyLinePlaceholder":148},[76,13106,13107,13109,13111,13114,13116,13118,13120,13122,13124,13127,13129],{"class":78,"line":1751},[76,13108,8607],{"class":90},[76,13110,3298],{"class":82},[76,13112,13113],{"class":126}," \"静态变量s_a地址为： \"",[76,13115,3565],{"class":82},[76,13117,3770],{"class":90},[76,13119,1360],{"class":82},[76,13121,2693],{"class":90},[76,13123,2617],{"class":82},[76,13125,13126],{"class":90},"s_a ",[76,13128,3298],{"class":82},[76,13130,10908],{"class":90},[76,13132,13133,13135,13137,13140,13142,13144,13146,13148,13150,13153,13155],{"class":78,"line":1756},[76,13134,8607],{"class":90},[76,13136,3298],{"class":82},[76,13138,13139],{"class":126}," \"静态变量s_b地址为： \"",[76,13141,3565],{"class":82},[76,13143,3770],{"class":90},[76,13145,1360],{"class":82},[76,13147,2693],{"class":90},[76,13149,2617],{"class":82},[76,13151,13152],{"class":90},"s_b ",[76,13154,3298],{"class":82},[76,13156,10908],{"class":90},[76,13158,13159],{"class":78,"line":1766},[76,13160,149],{"emptyLinePlaceholder":148},[76,13162,13163,13165,13167,13170,13172,13174,13176,13178,13180,13182,13184],{"class":78,"line":1773},[76,13164,8607],{"class":90},[76,13166,3298],{"class":82},[76,13168,13169],{"class":126}," \"字符串常量地址为： \"",[76,13171,3565],{"class":82},[76,13173,3770],{"class":90},[76,13175,1360],{"class":82},[76,13177,2693],{"class":90},[76,13179,2617],{"class":82},[76,13181,3315],{"class":126},[76,13183,3565],{"class":82},[76,13185,10908],{"class":90},[76,13187,13188,13190,13192,13194,13196,13198,13200,13202,13204,13207,13209],{"class":78,"line":1793},[76,13189,8607],{"class":90},[76,13191,3298],{"class":82},[76,13193,13169],{"class":126},[76,13195,3565],{"class":82},[76,13197,3770],{"class":90},[76,13199,1360],{"class":82},[76,13201,2693],{"class":90},[76,13203,2617],{"class":82},[76,13205,13206],{"class":126},"\"hello world1\"",[76,13208,3565],{"class":82},[76,13210,10908],{"class":90},[76,13212,13213],{"class":78,"line":1806},[76,13214,149],{"emptyLinePlaceholder":148},[76,13216,13217,13219,13221,13224,13226,13228,13230,13232,13234,13237,13239],{"class":78,"line":1817},[76,13218,8607],{"class":90},[76,13220,3298],{"class":82},[76,13222,13223],{"class":126}," \"全局常量c_g_a地址为： \"",[76,13225,3565],{"class":82},[76,13227,3770],{"class":90},[76,13229,1360],{"class":82},[76,13231,2693],{"class":90},[76,13233,2617],{"class":82},[76,13235,13236],{"class":90},"c_g_a ",[76,13238,3298],{"class":82},[76,13240,10908],{"class":90},[76,13242,13243,13245,13247,13250,13252,13254,13256,13258,13260,13263,13265],{"class":78,"line":1822},[76,13244,8607],{"class":90},[76,13246,3298],{"class":82},[76,13248,13249],{"class":126}," \"全局常量c_g_b地址为： \"",[76,13251,3565],{"class":82},[76,13253,3770],{"class":90},[76,13255,1360],{"class":82},[76,13257,2693],{"class":90},[76,13259,2617],{"class":82},[76,13261,13262],{"class":90},"c_g_b ",[76,13264,3298],{"class":82},[76,13266,10908],{"class":90},[76,13268,13269],{"class":78,"line":1835},[76,13270,149],{"emptyLinePlaceholder":148},[76,13272,13273,13276,13278,13281,13283,13285],{"class":78,"line":1847},[76,13274,13275],{"class":82},"    const",[76,13277,4478],{"class":82},[76,13279,13280],{"class":90}," c_l_a ",[76,13282,370],{"class":82},[76,13284,4134],{"class":119},[76,13286,3415],{"class":90},[76,13288,13289,13291,13293,13296,13298,13300],{"class":78,"line":1852},[76,13290,13275],{"class":82},[76,13292,4478],{"class":82},[76,13294,13295],{"class":90}," c_l_b ",[76,13297,370],{"class":82},[76,13299,4134],{"class":119},[76,13301,3415],{"class":90},[76,13303,13304,13306,13308,13311,13313,13315,13317,13319,13321,13324,13326],{"class":78,"line":1862},[76,13305,8607],{"class":90},[76,13307,3298],{"class":82},[76,13309,13310],{"class":126}," \"局部常量c_l_a地址为： \"",[76,13312,3565],{"class":82},[76,13314,3770],{"class":90},[76,13316,1360],{"class":82},[76,13318,2693],{"class":90},[76,13320,2617],{"class":82},[76,13322,13323],{"class":90},"c_l_a ",[76,13325,3298],{"class":82},[76,13327,10908],{"class":90},[76,13329,13330,13332,13334,13337,13339,13341,13343,13345,13347,13350,13352],{"class":78,"line":1874},[76,13331,8607],{"class":90},[76,13333,3298],{"class":82},[76,13335,13336],{"class":126}," \"局部常量c_l_b地址为： \"",[76,13338,3565],{"class":82},[76,13340,3770],{"class":90},[76,13342,1360],{"class":82},[76,13344,2693],{"class":90},[76,13346,2617],{"class":82},[76,13348,13349],{"class":90},"c_l_b ",[76,13351,3298],{"class":82},[76,13353,10908],{"class":90},[76,13355,13356],{"class":78,"line":1879},[76,13357,149],{"emptyLinePlaceholder":148},[76,13359,13360,13362,13364,13366],{"class":78,"line":1884},[76,13361,4399],{"class":86},[76,13363,123],{"class":90},[76,13365,4404],{"class":126},[76,13367,4807],{"class":90},[76,13369,13370],{"class":78,"line":1889},[76,13371,149],{"emptyLinePlaceholder":148},[76,13373,13374,13376,13378],{"class":78,"line":1900},[76,13375,441],{"class":82},[76,13377,587],{"class":119},[76,13379,3415],{"class":90},[76,13381,13382],{"class":78,"line":1906},[76,13383,3685],{"class":90},[19,13385,13386],{},"总结：",[3261,13388,13389,13392,13395,13398],{},[29,13390,13391],{},"c++中程序运行前分为全局区和代码区",[29,13393,13394],{},"代码区特点是共享和只读",[29,13396,13397],{},"全局区中存放全局变量、静态变量、常量",[29,13399,13400],{},"常量区中存放const修饰的全局常量和字符串常量",[889,13402,13404],{"id":13403},"_512程序运行后","5.1.2程序运行后",[26,13406,13407],{},[29,13408,13409],{},"栈区：",[3261,13411,13412,13419],{},[29,13413,13414,13415,13418],{},"由编译器自动分配释放, 存放",[2416,13416,13417],{},"函数的参数值,局部变量","等",[29,13420,13421,13422,13425],{},"注意事项：",[2416,13423,13424],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[66,13427,13429],{"className":2264,"code":13428,"language":2266,"meta":71,"style":71},"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",[73,13430,13431,13442,13446,13461,13473,13477,13481,13489,13494,13509,13527,13544,13554,13562],{"__ignoreMap":71},[76,13432,13433,13435,13437,13440],{"class":78,"line":79},[76,13434,1360],{"class":82},[76,13436,1119],{"class":82},[76,13438,13439],{"class":86}," func",[76,13441,4072],{"class":90},[76,13443,13444],{"class":78,"line":94},[76,13445,3666],{"class":90},[76,13447,13448,13450,13452,13454,13456,13458],{"class":78,"line":133},[76,13449,4081],{"class":82},[76,13451,373],{"class":90},[76,13453,370],{"class":82},[76,13455,4134],{"class":119},[76,13457,2324],{"class":90},[76,13459,13460],{"class":540}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[76,13462,13463,13465,13467,13470],{"class":78,"line":145},[76,13464,441],{"class":82},[76,13466,12641],{"class":82},[76,13468,13469],{"class":90},"a;",[76,13471,13472],{"class":540}," \u002F\u002F放回局部变量的地址\n",[76,13474,13475],{"class":78,"line":152},[76,13476,3685],{"class":90},[76,13478,13479],{"class":78,"line":157},[76,13480,149],{"emptyLinePlaceholder":148},[76,13482,13483,13485,13487],{"class":78,"line":246},[76,13484,1360],{"class":82},[76,13486,4069],{"class":86},[76,13488,12909],{"class":90},[76,13490,13491],{"class":78,"line":251},[76,13492,13493],{"class":540},"    \u002F\u002F接受func的返回值\n",[76,13495,13496,13498,13500,13503,13505,13507],{"class":78,"line":257},[76,13497,4081],{"class":82},[76,13499,1119],{"class":82},[76,13501,13502],{"class":90},"p ",[76,13504,370],{"class":82},[76,13506,13439],{"class":86},[76,13508,7716],{"class":90},[76,13510,13511,13513,13515,13517,13519,13521,13524],{"class":78,"line":641},[76,13512,8607],{"class":90},[76,13514,3298],{"class":82},[76,13516,1119],{"class":82},[76,13518,13502],{"class":90},[76,13520,3298],{"class":82},[76,13522,13523],{"class":90}," endl;",[76,13525,13526],{"class":540}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[76,13528,13529,13531,13533,13535,13537,13539,13541],{"class":78,"line":646},[76,13530,8607],{"class":90},[76,13532,3298],{"class":82},[76,13534,1119],{"class":82},[76,13536,13502],{"class":90},[76,13538,3298],{"class":82},[76,13540,13523],{"class":90},[76,13542,13543],{"class":540}," \u002F\u002F第二次这个数据不再保留\n",[76,13545,13546,13548,13550,13552],{"class":78,"line":659},[76,13547,4399],{"class":86},[76,13549,123],{"class":90},[76,13551,4404],{"class":126},[76,13553,4807],{"class":90},[76,13555,13556,13558,13560],{"class":78,"line":1608},[76,13557,441],{"class":82},[76,13559,587],{"class":119},[76,13561,3415],{"class":90},[76,13563,13564],{"class":78,"line":1632},[76,13565,3685],{"class":90},[19,13567,13568],{},"输出结果：",[19,13570,13571],{},[3583,13572],{"alt":13573,"src":13574},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13576,13577],{},"总结：不要返回局部变量的地址",[26,13579,13580],{"start":94},[29,13581,13582],{},"堆区",[3261,13584,13585,13588],{},[29,13586,13587],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13589,13590],{},"在c++中主要利用new在堆区开辟内存",[66,13592,13594],{"className":2264,"code":13593,"language":2266,"meta":71,"style":71},"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",[73,13595,13596,13611,13615,13620,13641,13648,13652,13660,13664,13669,13683,13695],{"__ignoreMap":71},[76,13597,13598,13600,13603,13606,13608],{"class":78,"line":79},[76,13599,1360],{"class":82},[76,13601,13602],{"class":82},"  *",[76,13604,13605],{"class":86},"func",[76,13607,4522],{"class":90},[76,13609,13610],{"class":540},"  \u002F\u002F函数返回指针\n",[76,13612,13613],{"class":78,"line":94},[76,13614,3666],{"class":90},[76,13616,13617],{"class":78,"line":133},[76,13618,13619],{"class":540},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[76,13621,13622,13624,13626,13628,13630,13633,13635,13637,13639],{"class":78,"line":145},[76,13623,6229],{"class":82},[76,13625,1119],{"class":82},[76,13627,19],{"class":90},[76,13629,370],{"class":82},[76,13631,13632],{"class":82}," new",[76,13634,4478],{"class":82},[76,13636,123],{"class":90},[76,13638,402],{"class":119},[76,13640,4807],{"class":90},[76,13642,13643,13645],{"class":78,"line":152},[76,13644,6463],{"class":82},[76,13646,13647],{"class":90}," p;\n",[76,13649,13650],{"class":78,"line":157},[76,13651,3685],{"class":90},[76,13653,13654,13656,13658],{"class":78,"line":246},[76,13655,1360],{"class":82},[76,13657,4069],{"class":86},[76,13659,4072],{"class":90},[76,13661,13662],{"class":78,"line":251},[76,13663,3666],{"class":90},[76,13665,13666],{"class":78,"line":257},[76,13667,13668],{"class":540},"    \u002F\u002F在堆区开辟数据\n",[76,13670,13671,13673,13675,13677,13679,13681],{"class":78,"line":641},[76,13672,4081],{"class":82},[76,13674,1119],{"class":82},[76,13676,19],{"class":90},[76,13678,370],{"class":82},[76,13680,13605],{"class":86},[76,13682,7716],{"class":90},[76,13684,13685,13687,13689,13691,13693],{"class":78,"line":646},[76,13686,3671],{"class":90},[76,13688,8498],{"class":82},[76,13690,19],{"class":90},[76,13692,3298],{"class":82},[76,13694,3320],{"class":90},[76,13696,13697],{"class":78,"line":659},[76,13698,3685],{"class":90},[19,13700,13701],{},"图片展示：",[19,13703,13704],{},[3583,13705],{"alt":13573,"src":13706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13708,13709],{},"堆区内存由程序员管生死！！！",[26,13711,13712],{"start":133},[29,13713,13714],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13716,13717],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13719,13720,13721],{},"​语法：",[73,13722,13723],{}," new 数据类型",[19,13725,13726],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[66,13728,13730],{"className":2264,"code":13729,"language":2266,"meta":71,"style":71},"\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",[73,13731,13732,13737,13747,13751,13756,13761,13783,13787,13795,13799,13813,13825,13837,13849,13854,13859,13870,13874,13879,13887,13891,13896,13918,13944,13948,13966,13970,13996,14000,14012,14016,14021,14026,14034,14038,14042,14050,14054,14060,14066],{"__ignoreMap":71},[76,13733,13734],{"class":78,"line":79},[76,13735,13736],{"class":540},"\u002F\u002F1.new的基本语法\n",[76,13738,13739,13741,13743,13745],{"class":78,"line":94},[76,13740,1360],{"class":82},[76,13742,1119],{"class":82},[76,13744,13605],{"class":86},[76,13746,4072],{"class":90},[76,13748,13749],{"class":78,"line":133},[76,13750,3666],{"class":90},[76,13752,13753],{"class":78,"line":145},[76,13754,13755],{"class":540},"    \u002F\u002F在堆区创建整型数据\n",[76,13757,13758],{"class":78,"line":152},[76,13759,13760],{"class":540},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[76,13762,13763,13765,13767,13769,13772,13774,13776,13778,13780],{"class":78,"line":157},[76,13764,4081],{"class":82},[76,13766,1119],{"class":82},[76,13768,19],{"class":90},[76,13770,13771],{"class":82},"=new",[76,13773,4478],{"class":82},[76,13775,123],{"class":90},[76,13777,402],{"class":119},[76,13779,8045],{"class":90},[76,13781,13782],{"class":540},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[76,13784,13785],{"class":78,"line":246},[76,13786,3685],{"class":90},[76,13788,13789,13791,13793],{"class":78,"line":251},[76,13790,7444],{"class":82},[76,13792,7668],{"class":86},[76,13794,4072],{"class":90},[76,13796,13797],{"class":78,"line":257},[76,13798,3666],{"class":90},[76,13800,13801,13803,13805,13807,13809,13811],{"class":78,"line":641},[76,13802,4081],{"class":82},[76,13804,1119],{"class":82},[76,13806,19],{"class":90},[76,13808,370],{"class":82},[76,13810,13605],{"class":86},[76,13812,7716],{"class":90},[76,13814,13815,13817,13819,13821,13823],{"class":78,"line":646},[76,13816,3671],{"class":90},[76,13818,8498],{"class":82},[76,13820,19],{"class":90},[76,13822,3298],{"class":82},[76,13824,3320],{"class":90},[76,13826,13827,13829,13831,13833,13835],{"class":78,"line":659},[76,13828,3671],{"class":90},[76,13830,8498],{"class":82},[76,13832,19],{"class":90},[76,13834,3298],{"class":82},[76,13836,3320],{"class":90},[76,13838,13839,13841,13843,13845,13847],{"class":78,"line":1608},[76,13840,3671],{"class":90},[76,13842,8498],{"class":82},[76,13844,19],{"class":90},[76,13846,3298],{"class":82},[76,13848,3320],{"class":90},[76,13850,13851],{"class":78,"line":1632},[76,13852,13853],{"class":540},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[76,13855,13856],{"class":78,"line":1637},[76,13857,13858],{"class":540},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[76,13860,13861,13864,13867],{"class":78,"line":1642},[76,13862,13863],{"class":82},"    delete",[76,13865,13866],{"class":90}," p;",[76,13868,13869],{"class":540},"\u002F\u002F删除这块地址\n",[76,13871,13872],{"class":78,"line":1652},[76,13873,3685],{"class":90},[76,13875,13876],{"class":78,"line":1660},[76,13877,13878],{"class":540},"\u002F\u002F2.在堆区利用new开辟数组\n",[76,13880,13881,13883,13885],{"class":78,"line":1683},[76,13882,7444],{"class":82},[76,13884,7737],{"class":86},[76,13886,4072],{"class":90},[76,13888,13889],{"class":78,"line":1698},[76,13890,3666],{"class":90},[76,13892,13893],{"class":78,"line":1711},[76,13894,13895],{"class":540},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[76,13897,13898,13900,13902,13904,13906,13908,13910,13912,13915],{"class":78,"line":1717},[76,13899,4081],{"class":82},[76,13901,1119],{"class":82},[76,13903,5964],{"class":90},[76,13905,13771],{"class":82},[76,13907,4478],{"class":82},[76,13909,3148],{"class":90},[76,13911,402],{"class":119},[76,13913,13914],{"class":90},"];",[76,13916,13917],{"class":540},"\u002F\u002F10代表数组有10个元素\n",[76,13919,13920,13922,13924,13926,13928,13930,13932,13934,13936,13938,13940,13942],{"class":78,"line":1728},[76,13921,1469],{"class":82},[76,13923,3770],{"class":90},[76,13925,1360],{"class":82},[76,13927,5119],{"class":90},[76,13929,370],{"class":82},[76,13931,1294],{"class":119},[76,13933,5126],{"class":90},[76,13935,584],{"class":82},[76,13937,402],{"class":119},[76,13939,5126],{"class":90},[76,13941,4388],{"class":82},[76,13943,130],{"class":90},[76,13945,13946],{"class":78,"line":1740},[76,13947,4126],{"class":90},[76,13949,13950,13953,13955,13957,13959,13961,13963],{"class":78,"line":1746},[76,13951,13952],{"class":90},"        arr[i]",[76,13954,370],{"class":82},[76,13956,2705],{"class":90},[76,13958,376],{"class":82},[76,13960,2575],{"class":119},[76,13962,2324],{"class":90},[76,13964,13965],{"class":540},"\u002F\u002F给10个元素赋值100～109\n",[76,13967,13968],{"class":78,"line":1751},[76,13969,4283],{"class":90},[76,13971,13972,13974,13976,13978,13980,13982,13984,13986,13988,13990,13992,13994],{"class":78,"line":1756},[76,13973,1469],{"class":82},[76,13975,3770],{"class":90},[76,13977,1360],{"class":82},[76,13979,5119],{"class":90},[76,13981,370],{"class":82},[76,13983,1294],{"class":119},[76,13985,5126],{"class":90},[76,13987,584],{"class":82},[76,13989,402],{"class":119},[76,13991,5126],{"class":90},[76,13993,4388],{"class":82},[76,13995,130],{"class":90},[76,13997,13998],{"class":78,"line":1766},[76,13999,4126],{"class":90},[76,14001,14002,14004,14006,14008,14010],{"class":78,"line":1773},[76,14003,5536],{"class":90},[76,14005,3298],{"class":82},[76,14007,6436],{"class":90},[76,14009,3298],{"class":82},[76,14011,3320],{"class":90},[76,14013,14014],{"class":78,"line":1793},[76,14015,4283],{"class":90},[76,14017,14018],{"class":78,"line":1806},[76,14019,14020],{"class":540},"    \u002F\u002F释放堆区数组\n",[76,14022,14023],{"class":78,"line":1817},[76,14024,14025],{"class":540},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[76,14027,14028,14031],{"class":78,"line":1822},[76,14029,14030],{"class":82},"    delete[]",[76,14032,14033],{"class":90}," arr;\n",[76,14035,14036],{"class":78,"line":1835},[76,14037,3685],{"class":90},[76,14039,14040],{"class":78,"line":1847},[76,14041,149],{"emptyLinePlaceholder":148},[76,14043,14044,14046,14048],{"class":78,"line":1852},[76,14045,1360],{"class":82},[76,14047,4069],{"class":86},[76,14049,4072],{"class":90},[76,14051,14052],{"class":78,"line":1862},[76,14053,3666],{"class":90},[76,14055,14056,14058],{"class":78,"line":1874},[76,14057,7713],{"class":86},[76,14059,7716],{"class":90},[76,14061,14062,14064],{"class":78,"line":1879},[76,14063,7782],{"class":86},[76,14065,7716],{"class":90},[76,14067,14068],{"class":78,"line":1884},[76,14069,3685],{"class":90},[2178,14071,14072],{},"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":71,"searchDepth":94,"depth":94,"links":14074},[14075],{"id":12745,"depth":94,"text":12746,"children":14076},[14077,14078],{"id":12777,"depth":133,"text":12778},{"id":13403,"depth":133,"text":13404},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12737,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14085,"title":14086,"body":14087,"description":71,"extension":2202,"meta":15567,"navigation":148,"path":15568,"seo":15569,"stem":15570,"__hash__":15571},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14088,"toc":15559},[14089,14092,14096,14099,14102,14271,14275,14280,14297,14302,14454,14458,14461,14464,14857,14861,14864,14869,14872,15184,15188,15194,15354,15356,15364,15368,15371,15378,15556],[10,14090,14086],{"id":14091},"_6引用",[14,14093,14095],{"id":14094},"_61引用基本用法","6.1引用基本用法",[19,14097,14098],{},"引用的本质：给变量起别名",[19,14100,14101],{},"语法：数据类型 &别名=原名",[66,14103,14105],{"className":2264,"code":14104,"language":2266,"meta":71,"style":71},"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",[73,14106,14107,14115,14119,14131,14143,14147,14166,14185,14189,14200,14204,14223,14241,14245,14255,14259,14267],{"__ignoreMap":71},[76,14108,14109,14111,14113],{"class":78,"line":79},[76,14110,1360],{"class":82},[76,14112,4069],{"class":86},[76,14114,12909],{"class":90},[76,14116,14117],{"class":78,"line":94},[76,14118,149],{"emptyLinePlaceholder":148},[76,14120,14121,14123,14125,14127,14129],{"class":78,"line":133},[76,14122,4081],{"class":82},[76,14124,373],{"class":90},[76,14126,370],{"class":82},[76,14128,4134],{"class":119},[76,14130,3415],{"class":90},[76,14132,14133,14135,14137,14139,14141],{"class":78,"line":145},[76,14134,4081],{"class":82},[76,14136,12641],{"class":82},[76,14138,12999],{"class":90},[76,14140,370],{"class":82},[76,14142,3553],{"class":90},[76,14144,14145],{"class":78,"line":152},[76,14146,149],{"emptyLinePlaceholder":148},[76,14148,14149,14151,14153,14156,14158,14160,14162,14164],{"class":78,"line":157},[76,14150,8607],{"class":90},[76,14152,3298],{"class":82},[76,14154,14155],{"class":126}," \"a = \"",[76,14157,3565],{"class":82},[76,14159,373],{"class":90},[76,14161,3298],{"class":82},[76,14163,13523],{"class":90},[76,14165,9346],{"class":540},[76,14167,14168,14170,14172,14175,14177,14179,14181,14183],{"class":78,"line":246},[76,14169,8607],{"class":90},[76,14171,3298],{"class":82},[76,14173,14174],{"class":126}," \"b = \"",[76,14176,3565],{"class":82},[76,14178,1247],{"class":90},[76,14180,3298],{"class":82},[76,14182,13523],{"class":90},[76,14184,9346],{"class":540},[76,14186,14187],{"class":78,"line":251},[76,14188,149],{"emptyLinePlaceholder":148},[76,14190,14191,14194,14196,14198],{"class":78,"line":257},[76,14192,14193],{"class":90},"    b ",[76,14195,370],{"class":82},[76,14197,7834],{"class":119},[76,14199,3415],{"class":90},[76,14201,14202],{"class":78,"line":641},[76,14203,149],{"emptyLinePlaceholder":148},[76,14205,14206,14208,14210,14212,14214,14216,14218,14220],{"class":78,"line":646},[76,14207,8607],{"class":90},[76,14209,3298],{"class":82},[76,14211,14155],{"class":126},[76,14213,3565],{"class":82},[76,14215,373],{"class":90},[76,14217,3298],{"class":82},[76,14219,13523],{"class":90},[76,14221,14222],{"class":540},"\u002F\u002F100\n",[76,14224,14225,14227,14229,14231,14233,14235,14237,14239],{"class":78,"line":659},[76,14226,8607],{"class":90},[76,14228,3298],{"class":82},[76,14230,14174],{"class":126},[76,14232,3565],{"class":82},[76,14234,1247],{"class":90},[76,14236,3298],{"class":82},[76,14238,13523],{"class":90},[76,14240,14222],{"class":540},[76,14242,14243],{"class":78,"line":1608},[76,14244,149],{"emptyLinePlaceholder":148},[76,14246,14247,14249,14251,14253],{"class":78,"line":1632},[76,14248,4399],{"class":86},[76,14250,123],{"class":90},[76,14252,4404],{"class":126},[76,14254,4807],{"class":90},[76,14256,14257],{"class":78,"line":1637},[76,14258,149],{"emptyLinePlaceholder":148},[76,14260,14261,14263,14265],{"class":78,"line":1642},[76,14262,441],{"class":82},[76,14264,587],{"class":119},[76,14266,3415],{"class":90},[76,14268,14269],{"class":78,"line":1652},[76,14270,3685],{"class":90},[14,14272,14274],{"id":14273},"_62引用的注意事项","6.2引用的注意事项",[26,14276,14277],{},[29,14278,14279],{},"引用必须要初始化",[66,14281,14283],{"className":2264,"code":14282,"language":2266,"meta":71,"style":71},"int &b;\u002F\u002F非常错误！\n",[73,14284,14285],{"__ignoreMap":71},[76,14286,14287,14289,14291,14294],{"class":78,"line":79},[76,14288,1360],{"class":82},[76,14290,12641],{"class":82},[76,14292,14293],{"class":90},"b;",[76,14295,14296],{"class":540},"\u002F\u002F非常错误！\n",[26,14298,14299],{"start":94},[29,14300,14301],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[66,14303,14305],{"className":2264,"code":14304,"language":2266,"meta":71,"style":71},"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",[73,14306,14307,14315,14327,14339,14347,14363,14376,14394,14412,14432,14442,14450],{"__ignoreMap":71},[76,14308,14309,14311,14313],{"class":78,"line":79},[76,14310,1360],{"class":82},[76,14312,4069],{"class":86},[76,14314,12909],{"class":90},[76,14316,14317,14319,14321,14323,14325],{"class":78,"line":94},[76,14318,4081],{"class":82},[76,14320,373],{"class":90},[76,14322,370],{"class":82},[76,14324,4134],{"class":119},[76,14326,3415],{"class":90},[76,14328,14329,14331,14333,14335,14337],{"class":78,"line":133},[76,14330,4081],{"class":82},[76,14332,1247],{"class":90},[76,14334,370],{"class":82},[76,14336,11018],{"class":119},[76,14338,3415],{"class":90},[76,14340,14341,14344],{"class":78,"line":145},[76,14342,14343],{"class":540},"    \u002F\u002Fint &c;",[76,14345,14346],{"class":540}," \u002F\u002F错误，引用必须初始化\n",[76,14348,14349,14351,14353,14355,14357,14360],{"class":78,"line":152},[76,14350,4081],{"class":82},[76,14352,12641],{"class":82},[76,14354,5034],{"class":90},[76,14356,370],{"class":82},[76,14358,14359],{"class":90}," a;",[76,14361,14362],{"class":540}," \u002F\u002F一旦初始化后，就不可以更改\n",[76,14364,14365,14368,14370,14373],{"class":78,"line":157},[76,14366,14367],{"class":90},"    c ",[76,14369,370],{"class":82},[76,14371,14372],{"class":90}," b;",[76,14374,14375],{"class":540}," \u002F\u002F这是赋值操作，不是更改引用\n",[76,14377,14378,14380,14382,14384,14386,14388,14390,14392],{"class":78,"line":246},[76,14379,8607],{"class":90},[76,14381,3298],{"class":82},[76,14383,14155],{"class":126},[76,14385,3565],{"class":82},[76,14387,373],{"class":90},[76,14389,3298],{"class":82},[76,14391,13523],{"class":90},[76,14393,9331],{"class":540},[76,14395,14396,14398,14400,14402,14404,14406,14408,14410],{"class":78,"line":251},[76,14397,8607],{"class":90},[76,14399,3298],{"class":82},[76,14401,14174],{"class":126},[76,14403,3565],{"class":82},[76,14405,1247],{"class":90},[76,14407,3298],{"class":82},[76,14409,13523],{"class":90},[76,14411,9331],{"class":540},[76,14413,14414,14416,14418,14421,14423,14426,14428,14430],{"class":78,"line":257},[76,14415,8607],{"class":90},[76,14417,3298],{"class":82},[76,14419,14420],{"class":126}," \"c = \"",[76,14422,3565],{"class":82},[76,14424,14425],{"class":90}," c ",[76,14427,3298],{"class":82},[76,14429,13523],{"class":90},[76,14431,9331],{"class":540},[76,14433,14434,14436,14438,14440],{"class":78,"line":641},[76,14435,4399],{"class":86},[76,14437,123],{"class":90},[76,14439,4404],{"class":126},[76,14441,4807],{"class":90},[76,14443,14444,14446,14448],{"class":78,"line":646},[76,14445,441],{"class":82},[76,14447,587],{"class":119},[76,14449,3415],{"class":90},[76,14451,14452],{"class":78,"line":659},[76,14453,3685],{"class":90},[14,14455,14457],{"id":14456},"_63引用做函数参数","6.3引用做函数参数",[19,14459,14460],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14462,14463],{},"优点：可以简化指针修改实参",[66,14465,14467],{"className":2264,"code":14466,"language":2266,"meta":71,"style":71},"\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",[73,14468,14469,14474,14496,14507,14517,14526,14530,14534,14539,14561,14573,14585,14595,14599,14603,14608,14630,14640,14648,14656,14660,14664,14672,14676,14688,14700,14704,14715,14741,14745,14765,14789,14793,14803,14827,14831,14841,14845,14853],{"__ignoreMap":71},[76,14470,14471],{"class":78,"line":79},[76,14472,14473],{"class":540},"\u002F\u002F1. 值传递\n",[76,14475,14476,14478,14481,14483,14485,14487,14489,14491,14493],{"class":78,"line":94},[76,14477,7444],{"class":82},[76,14479,14480],{"class":86}," mySwap01",[76,14482,123],{"class":90},[76,14484,1360],{"class":82},[76,14486,3519],{"class":7296},[76,14488,405],{"class":90},[76,14490,1360],{"class":82},[76,14492,4921],{"class":7296},[76,14494,14495],{"class":90},") {\n",[76,14497,14498,14500,14503,14505],{"class":78,"line":133},[76,14499,4081],{"class":82},[76,14501,14502],{"class":90}," temp ",[76,14504,370],{"class":82},[76,14506,3553],{"class":90},[76,14508,14509,14512,14514],{"class":78,"line":145},[76,14510,14511],{"class":90},"    a ",[76,14513,370],{"class":82},[76,14515,14516],{"class":90}," b;\n",[76,14518,14519,14521,14523],{"class":78,"line":152},[76,14520,14193],{"class":90},[76,14522,370],{"class":82},[76,14524,14525],{"class":90}," temp;\n",[76,14527,14528],{"class":78,"line":157},[76,14529,3685],{"class":90},[76,14531,14532],{"class":78,"line":246},[76,14533,149],{"emptyLinePlaceholder":148},[76,14535,14536],{"class":78,"line":251},[76,14537,14538],{"class":540},"\u002F\u002F2. 地址传递\n",[76,14540,14541,14543,14546,14548,14551,14553,14555,14557,14559],{"class":78,"line":257},[76,14542,7444],{"class":82},[76,14544,14545],{"class":86}," mySwap02",[76,14547,123],{"class":90},[76,14549,14550],{"class":82},"int*",[76,14552,3519],{"class":7296},[76,14554,405],{"class":90},[76,14556,14550],{"class":82},[76,14558,4921],{"class":7296},[76,14560,14495],{"class":90},[76,14562,14563,14565,14567,14569,14571],{"class":78,"line":641},[76,14564,4081],{"class":82},[76,14566,14502],{"class":90},[76,14568,370],{"class":82},[76,14570,1119],{"class":82},[76,14572,8276],{"class":90},[76,14574,14575,14577,14579,14581,14583],{"class":78,"line":646},[76,14576,8482],{"class":82},[76,14578,12973],{"class":90},[76,14580,370],{"class":82},[76,14582,1119],{"class":82},[76,14584,8148],{"class":90},[76,14586,14587,14589,14591,14593],{"class":78,"line":659},[76,14588,8482],{"class":82},[76,14590,12999],{"class":90},[76,14592,370],{"class":82},[76,14594,14525],{"class":90},[76,14596,14597],{"class":78,"line":1608},[76,14598,3685],{"class":90},[76,14600,14601],{"class":78,"line":1632},[76,14602,149],{"emptyLinePlaceholder":148},[76,14604,14605],{"class":78,"line":1637},[76,14606,14607],{"class":540},"\u002F\u002F3. 引用传递\n",[76,14609,14610,14612,14615,14617,14620,14622,14624,14626,14628],{"class":78,"line":1642},[76,14611,7444],{"class":82},[76,14613,14614],{"class":86}," mySwap03",[76,14616,123],{"class":90},[76,14618,14619],{"class":82},"int&",[76,14621,3519],{"class":7296},[76,14623,405],{"class":90},[76,14625,14619],{"class":82},[76,14627,4921],{"class":7296},[76,14629,14495],{"class":90},[76,14631,14632,14634,14636,14638],{"class":78,"line":1652},[76,14633,4081],{"class":82},[76,14635,14502],{"class":90},[76,14637,370],{"class":82},[76,14639,3553],{"class":90},[76,14641,14642,14644,14646],{"class":78,"line":1660},[76,14643,14511],{"class":90},[76,14645,370],{"class":82},[76,14647,14516],{"class":90},[76,14649,14650,14652,14654],{"class":78,"line":1683},[76,14651,14193],{"class":90},[76,14653,370],{"class":82},[76,14655,14525],{"class":90},[76,14657,14658],{"class":78,"line":1698},[76,14659,3685],{"class":90},[76,14661,14662],{"class":78,"line":1711},[76,14663,149],{"emptyLinePlaceholder":148},[76,14665,14666,14668,14670],{"class":78,"line":1717},[76,14667,1360],{"class":82},[76,14669,4069],{"class":86},[76,14671,12909],{"class":90},[76,14673,14674],{"class":78,"line":1728},[76,14675,149],{"emptyLinePlaceholder":148},[76,14677,14678,14680,14682,14684,14686],{"class":78,"line":1740},[76,14679,4081],{"class":82},[76,14681,373],{"class":90},[76,14683,370],{"class":82},[76,14685,4134],{"class":119},[76,14687,3415],{"class":90},[76,14689,14690,14692,14694,14696,14698],{"class":78,"line":1746},[76,14691,4081],{"class":82},[76,14693,1247],{"class":90},[76,14695,370],{"class":82},[76,14697,11018],{"class":119},[76,14699,3415],{"class":90},[76,14701,14702],{"class":78,"line":1751},[76,14703,149],{"emptyLinePlaceholder":148},[76,14705,14706,14709,14712],{"class":78,"line":1756},[76,14707,14708],{"class":86},"    mySwap01",[76,14710,14711],{"class":90},"(a, b);",[76,14713,14714],{"class":540},"\u002F\u002F值传递，形参不会修饰实参\n",[76,14716,14717,14719,14721,14724,14726,14728,14730,14733,14735,14737,14739],{"class":78,"line":1766},[76,14718,8607],{"class":90},[76,14720,3298],{"class":82},[76,14722,14723],{"class":126}," \"a:\"",[76,14725,3565],{"class":82},[76,14727,373],{"class":90},[76,14729,3298],{"class":82},[76,14731,14732],{"class":126}," \" b:\"",[76,14734,3565],{"class":82},[76,14736,1247],{"class":90},[76,14738,3298],{"class":82},[76,14740,10908],{"class":90},[76,14742,14743],{"class":78,"line":1773},[76,14744,149],{"emptyLinePlaceholder":148},[76,14746,14747,14750,14752,14754,14757,14759,14762],{"class":78,"line":1793},[76,14748,14749],{"class":86},"    mySwap02",[76,14751,123],{"class":90},[76,14753,2617],{"class":82},[76,14755,14756],{"class":90},"a, ",[76,14758,2617],{"class":82},[76,14760,14761],{"class":90},"b);",[76,14763,14764],{"class":540},"\u002F\u002F地址传递，形参会修饰实参\n",[76,14766,14767,14769,14771,14773,14775,14777,14779,14781,14783,14785,14787],{"class":78,"line":1806},[76,14768,8607],{"class":90},[76,14770,3298],{"class":82},[76,14772,14723],{"class":126},[76,14774,3565],{"class":82},[76,14776,373],{"class":90},[76,14778,3298],{"class":82},[76,14780,14732],{"class":126},[76,14782,3565],{"class":82},[76,14784,1247],{"class":90},[76,14786,3298],{"class":82},[76,14788,10908],{"class":90},[76,14790,14791],{"class":78,"line":1817},[76,14792,149],{"emptyLinePlaceholder":148},[76,14794,14795,14798,14800],{"class":78,"line":1822},[76,14796,14797],{"class":86},"    mySwap03",[76,14799,14711],{"class":90},[76,14801,14802],{"class":540},"\u002F\u002F引用传递，形参会修饰实参\n",[76,14804,14805,14807,14809,14811,14813,14815,14817,14819,14821,14823,14825],{"class":78,"line":1835},[76,14806,8607],{"class":90},[76,14808,3298],{"class":82},[76,14810,14723],{"class":126},[76,14812,3565],{"class":82},[76,14814,373],{"class":90},[76,14816,3298],{"class":82},[76,14818,14732],{"class":126},[76,14820,3565],{"class":82},[76,14822,1247],{"class":90},[76,14824,3298],{"class":82},[76,14826,10908],{"class":90},[76,14828,14829],{"class":78,"line":1847},[76,14830,149],{"emptyLinePlaceholder":148},[76,14832,14833,14835,14837,14839],{"class":78,"line":1852},[76,14834,4399],{"class":86},[76,14836,123],{"class":90},[76,14838,4404],{"class":126},[76,14840,4807],{"class":90},[76,14842,14843],{"class":78,"line":1862},[76,14844,149],{"emptyLinePlaceholder":148},[76,14846,14847,14849,14851],{"class":78,"line":1874},[76,14848,441],{"class":82},[76,14850,587],{"class":119},[76,14852,3415],{"class":90},[76,14854,14855],{"class":78,"line":1879},[76,14856,3685],{"class":90},[14,14858,14860],{"id":14859},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14862,14863],{},"作用：引用是可以作为函数的返回值存在的",[19,14865,163,14866],{},[2416,14867,14868],{},"不要返回局部变量引用",[19,14870,14871],{},"用法：函数调用作为左值",[66,14873,14875],{"className":11998,"code":14874,"language":12000,"meta":71,"style":71},"\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",[73,14876,14877,14882,14890,14905,14911,14915,14919,14924,14932,14949,14955,14959,14963,14971,14975,14980,14994,15014,15033,15037,15042,15055,15075,15093,15097,15113,15117,15136,15154,15158,15168,15172,15180],{"__ignoreMap":71},[76,14878,14879],{"class":78,"line":79},[76,14880,14881],{"class":540},"\u002F\u002F返回局部变量引用\n",[76,14883,14884,14886,14888],{"class":78,"line":94},[76,14885,14619],{"class":82},[76,14887,7668],{"class":86},[76,14889,12909],{"class":90},[76,14891,14892,14894,14896,14898,14900,14902],{"class":78,"line":133},[76,14893,4081],{"class":82},[76,14895,373],{"class":90},[76,14897,370],{"class":82},[76,14899,4134],{"class":119},[76,14901,2324],{"class":90},[76,14903,14904],{"class":540}," \u002F\u002F局部变量\n",[76,14906,14907,14909],{"class":78,"line":145},[76,14908,441],{"class":82},[76,14910,3553],{"class":90},[76,14912,14913],{"class":78,"line":152},[76,14914,3685],{"class":90},[76,14916,14917],{"class":78,"line":157},[76,14918,149],{"emptyLinePlaceholder":148},[76,14920,14921],{"class":78,"line":246},[76,14922,14923],{"class":540},"\u002F\u002F返回静态变量引用\n",[76,14925,14926,14928,14930],{"class":78,"line":251},[76,14927,14619],{"class":82},[76,14929,7737],{"class":86},[76,14931,12909],{"class":90},[76,14933,14934,14936,14938,14940,14942,14944,14946],{"class":78,"line":257},[76,14935,13074],{"class":82},[76,14937,4478],{"class":82},[76,14939,373],{"class":90},[76,14941,370],{"class":82},[76,14943,11018],{"class":119},[76,14945,2324],{"class":90},[76,14947,14948],{"class":540},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[76,14950,14951,14953],{"class":78,"line":641},[76,14952,441],{"class":82},[76,14954,3553],{"class":90},[76,14956,14957],{"class":78,"line":646},[76,14958,3685],{"class":90},[76,14960,14961],{"class":78,"line":659},[76,14962,149],{"emptyLinePlaceholder":148},[76,14964,14965,14967,14969],{"class":78,"line":1608},[76,14966,1360],{"class":82},[76,14968,4069],{"class":86},[76,14970,12909],{"class":90},[76,14972,14973],{"class":78,"line":1632},[76,14974,149],{"emptyLinePlaceholder":148},[76,14976,14977],{"class":78,"line":1637},[76,14978,14979],{"class":540},"    \u002F\u002F不能返回局部变量的引用\n",[76,14981,14982,14985,14988,14990,14992],{"class":78,"line":1642},[76,14983,14984],{"class":82},"    int&",[76,14986,14987],{"class":90}," ref ",[76,14989,370],{"class":82},[76,14991,7668],{"class":86},[76,14993,7716],{"class":90},[76,14995,14996,14998,15000,15003,15005,15007,15009,15011],{"class":78,"line":1652},[76,14997,8607],{"class":90},[76,14999,3298],{"class":82},[76,15001,15002],{"class":126}," \"ref = \"",[76,15004,3565],{"class":82},[76,15006,14987],{"class":90},[76,15008,3298],{"class":82},[76,15010,13523],{"class":90},[76,15012,15013],{"class":540},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[76,15015,15016,15018,15020,15022,15024,15026,15028,15030],{"class":78,"line":1660},[76,15017,8607],{"class":90},[76,15019,3298],{"class":82},[76,15021,15002],{"class":126},[76,15023,3565],{"class":82},[76,15025,14987],{"class":90},[76,15027,3298],{"class":82},[76,15029,13523],{"class":90},[76,15031,15032],{"class":540},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[76,15034,15035],{"class":78,"line":1683},[76,15036,149],{"emptyLinePlaceholder":148},[76,15038,15039],{"class":78,"line":1698},[76,15040,15041],{"class":540},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[76,15043,15044,15046,15049,15051,15053],{"class":78,"line":1711},[76,15045,14984],{"class":82},[76,15047,15048],{"class":90}," ref2 ",[76,15050,370],{"class":82},[76,15052,7737],{"class":86},[76,15054,7716],{"class":90},[76,15056,15057,15059,15061,15064,15066,15068,15070,15072],{"class":78,"line":1717},[76,15058,8607],{"class":90},[76,15060,3298],{"class":82},[76,15062,15063],{"class":126}," \"ref2 = \"",[76,15065,3565],{"class":82},[76,15067,15048],{"class":90},[76,15069,3298],{"class":82},[76,15071,13523],{"class":90},[76,15073,15074],{"class":540}," \u002F\u002F20\n",[76,15076,15077,15079,15081,15083,15085,15087,15089,15091],{"class":78,"line":1728},[76,15078,8607],{"class":90},[76,15080,3298],{"class":82},[76,15082,15063],{"class":126},[76,15084,3565],{"class":82},[76,15086,15048],{"class":90},[76,15088,3298],{"class":82},[76,15090,13523],{"class":90},[76,15092,15074],{"class":540},[76,15094,15095],{"class":78,"line":1740},[76,15096,149],{"emptyLinePlaceholder":148},[76,15098,15099,15101,15104,15106,15108,15110],{"class":78,"line":1746},[76,15100,7782],{"class":86},[76,15102,15103],{"class":90},"() ",[76,15105,370],{"class":82},[76,15107,5086],{"class":119},[76,15109,2324],{"class":90},[76,15111,15112],{"class":540},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[76,15114,15115],{"class":78,"line":1751},[76,15116,149],{"emptyLinePlaceholder":148},[76,15118,15119,15121,15123,15125,15127,15129,15131,15133],{"class":78,"line":1756},[76,15120,8607],{"class":90},[76,15122,3298],{"class":82},[76,15124,15063],{"class":126},[76,15126,3565],{"class":82},[76,15128,15048],{"class":90},[76,15130,3298],{"class":82},[76,15132,13523],{"class":90},[76,15134,15135],{"class":540}," \u002F\u002F1000\n",[76,15137,15138,15140,15142,15144,15146,15148,15150,15152],{"class":78,"line":1766},[76,15139,8607],{"class":90},[76,15141,3298],{"class":82},[76,15143,15063],{"class":126},[76,15145,3565],{"class":82},[76,15147,15048],{"class":90},[76,15149,3298],{"class":82},[76,15151,13523],{"class":90},[76,15153,15135],{"class":540},[76,15155,15156],{"class":78,"line":1773},[76,15157,149],{"emptyLinePlaceholder":148},[76,15159,15160,15162,15164,15166],{"class":78,"line":1793},[76,15161,4399],{"class":86},[76,15163,123],{"class":90},[76,15165,4404],{"class":126},[76,15167,4807],{"class":90},[76,15169,15170],{"class":78,"line":1806},[76,15171,149],{"emptyLinePlaceholder":148},[76,15173,15174,15176,15178],{"class":78,"line":1817},[76,15175,441],{"class":82},[76,15177,587],{"class":119},[76,15179,3415],{"class":90},[76,15181,15182],{"class":78,"line":1822},[76,15183,3685],{"class":90},[14,15185,15187],{"id":15186},"_65引用的本质","6.5引用的本质",[19,15189,15190,15191],{},"本质：",[2416,15192,15193],{},"引用的本质在c++内部实现是一个指针常量.",[66,15195,15197],{"className":2264,"code":15196,"language":2266,"meta":71,"style":71},"\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",[73,15198,15199,15204,15220,15234,15238,15247,15259,15264,15269,15280,15293,15297,15313,15330,15334,15342,15350],{"__ignoreMap":71},[76,15200,15201],{"class":78,"line":79},[76,15202,15203],{"class":540},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[76,15205,15206,15208,15210,15212,15214,15217],{"class":78,"line":94},[76,15207,7444],{"class":82},[76,15209,13439],{"class":86},[76,15211,123],{"class":90},[76,15213,14619],{"class":82},[76,15215,15216],{"class":7296}," ref",[76,15218,15219],{"class":90},"){\n",[76,15221,15222,15225,15227,15229,15231],{"class":78,"line":133},[76,15223,15224],{"class":90},"    ref ",[76,15226,370],{"class":82},[76,15228,7834],{"class":119},[76,15230,2324],{"class":90},[76,15232,15233],{"class":540}," \u002F\u002F ref是引用，转换为*ref = 100\n",[76,15235,15236],{"class":78,"line":145},[76,15237,3685],{"class":90},[76,15239,15240,15242,15244],{"class":78,"line":152},[76,15241,1360],{"class":82},[76,15243,4069],{"class":86},[76,15245,15246],{"class":90},"(){\n",[76,15248,15249,15251,15253,15255,15257],{"class":78,"line":157},[76,15250,4081],{"class":82},[76,15252,373],{"class":90},[76,15254,370],{"class":82},[76,15256,4134],{"class":119},[76,15258,3415],{"class":90},[76,15260,15261],{"class":78,"line":246},[76,15262,15263],{"class":90},"    \n",[76,15265,15266],{"class":78,"line":251},[76,15267,15268],{"class":540},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[76,15270,15271,15273,15275,15277],{"class":78,"line":257},[76,15272,14984],{"class":82},[76,15274,14987],{"class":90},[76,15276,370],{"class":82},[76,15278,15279],{"class":90}," a; \n",[76,15281,15282,15284,15286,15288,15290],{"class":78,"line":641},[76,15283,15224],{"class":90},[76,15285,370],{"class":82},[76,15287,11018],{"class":119},[76,15289,2324],{"class":90},[76,15291,15292],{"class":540}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[76,15294,15295],{"class":78,"line":646},[76,15296,15263],{"class":90},[76,15298,15299,15301,15303,15305,15307,15309,15311],{"class":78,"line":659},[76,15300,8607],{"class":90},[76,15302,3298],{"class":82},[76,15304,14723],{"class":126},[76,15306,3565],{"class":82},[76,15308,373],{"class":90},[76,15310,3298],{"class":82},[76,15312,10908],{"class":90},[76,15314,15315,15317,15319,15322,15324,15326,15328],{"class":78,"line":1608},[76,15316,8607],{"class":90},[76,15318,3298],{"class":82},[76,15320,15321],{"class":126}," \"ref:\"",[76,15323,3565],{"class":82},[76,15325,14987],{"class":90},[76,15327,3298],{"class":82},[76,15329,10908],{"class":90},[76,15331,15332],{"class":78,"line":1632},[76,15333,15263],{"class":90},[76,15335,15336,15339],{"class":78,"line":1637},[76,15337,15338],{"class":86},"    func",[76,15340,15341],{"class":90},"(a);\n",[76,15343,15344,15346,15348],{"class":78,"line":1642},[76,15345,441],{"class":82},[76,15347,587],{"class":119},[76,15349,3415],{"class":90},[76,15351,15352],{"class":78,"line":1652},[76,15353,3685],{"class":90},[19,15355,13386],{},[26,15357,15358,15361],{},[29,15359,15360],{},"引用的本质，就是一个指针常量",[29,15362,15363],{},"引用一旦初始化，就不可以发生改变",[14,15365,15367],{"id":15366},"_66常量引用","6.6常量引用",[19,15369,15370],{},"作用：常量引用主要用来修饰形参",[19,15372,15373,15374,15377],{},"在函数形参列表中，可以加",[2416,15375,15376],{},"const修饰形参","，防止形参改变实参",[66,15379,15381],{"className":2264,"code":15380,"language":2266,"meta":71,"style":71},"\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",[73,15382,15383,15388,15393,15412,15417,15430,15434,15438,15446,15450,15455,15460,15474,15478,15486,15498,15502,15507,15519,15526,15530,15540,15544,15552],{"__ignoreMap":71},[76,15384,15385],{"class":78,"line":79},[76,15386,15387],{"class":540},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[76,15389,15390],{"class":78,"line":94},[76,15391,15392],{"class":540},"\u002F\u002F加上const就不能修改实参的\n",[76,15394,15395,15397,15400,15402,15404,15407,15410],{"class":78,"line":133},[76,15396,7444],{"class":82},[76,15398,15399],{"class":86}," showValue",[76,15401,123],{"class":90},[76,15403,8870],{"class":82},[76,15405,15406],{"class":82}," int&",[76,15408,15409],{"class":7296}," v",[76,15411,14495],{"class":90},[76,15413,15414],{"class":78,"line":145},[76,15415,15416],{"class":540},"    \u002F\u002Fv += 100;\n",[76,15418,15419,15421,15423,15426,15428],{"class":78,"line":152},[76,15420,8607],{"class":90},[76,15422,3298],{"class":82},[76,15424,15425],{"class":90}," v ",[76,15427,3298],{"class":82},[76,15429,10908],{"class":90},[76,15431,15432],{"class":78,"line":157},[76,15433,3685],{"class":90},[76,15435,15436],{"class":78,"line":246},[76,15437,149],{"emptyLinePlaceholder":148},[76,15439,15440,15442,15444],{"class":78,"line":251},[76,15441,1360],{"class":82},[76,15443,4069],{"class":86},[76,15445,12909],{"class":90},[76,15447,15448],{"class":78,"line":257},[76,15449,149],{"emptyLinePlaceholder":148},[76,15451,15452],{"class":78,"line":641},[76,15453,15454],{"class":540},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[76,15456,15457],{"class":78,"line":646},[76,15458,15459],{"class":540},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[76,15461,15462,15464,15466,15468,15470,15472],{"class":78,"line":659},[76,15463,13275],{"class":82},[76,15465,15406],{"class":82},[76,15467,14987],{"class":90},[76,15469,370],{"class":82},[76,15471,4134],{"class":119},[76,15473,3415],{"class":90},[76,15475,15476],{"class":78,"line":1608},[76,15477,149],{"emptyLinePlaceholder":148},[76,15479,15480,15483],{"class":78,"line":1632},[76,15481,15482],{"class":540},"    \u002F\u002Fref = 100;",[76,15484,15485],{"class":540},"  \u002F\u002F加入const后不可以修改变量\n",[76,15487,15488,15490,15492,15494,15496],{"class":78,"line":1637},[76,15489,8607],{"class":90},[76,15491,3298],{"class":82},[76,15493,14987],{"class":90},[76,15495,3298],{"class":82},[76,15497,10908],{"class":90},[76,15499,15500],{"class":78,"line":1642},[76,15501,149],{"emptyLinePlaceholder":148},[76,15503,15504],{"class":78,"line":1652},[76,15505,15506],{"class":540},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[76,15508,15509,15511,15513,15515,15517],{"class":78,"line":1660},[76,15510,4081],{"class":82},[76,15512,373],{"class":90},[76,15514,370],{"class":82},[76,15516,4134],{"class":119},[76,15518,3415],{"class":90},[76,15520,15521,15524],{"class":78,"line":1683},[76,15522,15523],{"class":86},"    showValue",[76,15525,15341],{"class":90},[76,15527,15528],{"class":78,"line":1698},[76,15529,149],{"emptyLinePlaceholder":148},[76,15531,15532,15534,15536,15538],{"class":78,"line":1711},[76,15533,4399],{"class":86},[76,15535,123],{"class":90},[76,15537,4404],{"class":126},[76,15539,4807],{"class":90},[76,15541,15542],{"class":78,"line":1717},[76,15543,149],{"emptyLinePlaceholder":148},[76,15545,15546,15548,15550],{"class":78,"line":1728},[76,15547,441],{"class":82},[76,15549,587],{"class":119},[76,15551,3415],{"class":90},[76,15553,15554],{"class":78,"line":1740},[76,15555,3685],{"class":90},[2178,15557,15558],{},"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":71,"searchDepth":94,"depth":94,"links":15560},[15561,15562,15563,15564,15565,15566],{"id":14094,"depth":94,"text":14095},{"id":14273,"depth":94,"text":14274},{"id":14456,"depth":94,"text":14457},{"id":14859,"depth":94,"text":14860},{"id":15186,"depth":94,"text":15187},{"id":15366,"depth":94,"text":15367},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14086,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15573,"title":15574,"body":15575,"description":71,"extension":2202,"meta":16656,"navigation":148,"path":16657,"seo":16658,"stem":16659,"__hash__":16660},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15576,"toc":16648},[15577,15580,15584,15587,15592,15824,15826,15837,15841,15844,15852,15956,15959,15963,15966,15970,15973,15978,16000,16006,16333,16336,16340,16348,16645],[10,15578,15574],{"id":15579},"_7函数高级部分",[14,15581,15583],{"id":15582},"_71函数默认参数","7.1函数默认参数",[19,15585,15586],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15588,64,15589],{},[73,15590,15591],{}," 返回值类型  函数名 （参数= 默认值）{}",[66,15593,15595],{"className":2264,"code":15594,"language":2266,"meta":71,"style":71},"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",[73,15596,15597,15632,15647,15651,15655,15660,15665,15694,15714,15724,15728,15732,15740,15744,15772,15794,15798,15808,15812,15820],{"__ignoreMap":71},[76,15598,15599,15601,15603,15605,15607,15609,15611,15613,15615,15618,15620,15622,15624,15626,15628,15630],{"class":78,"line":79},[76,15600,1360],{"class":82},[76,15602,13439],{"class":86},[76,15604,123],{"class":90},[76,15606,1360],{"class":82},[76,15608,3519],{"class":7296},[76,15610,405],{"class":90},[76,15612,1360],{"class":82},[76,15614,4921],{"class":7296},[76,15616,15617],{"class":82}," =",[76,15619,4134],{"class":119},[76,15621,405],{"class":90},[76,15623,1360],{"class":82},[76,15625,4937],{"class":7296},[76,15627,15617],{"class":82},[76,15629,4134],{"class":119},[76,15631,14495],{"class":90},[76,15633,15634,15636,15638,15640,15642,15644],{"class":78,"line":94},[76,15635,441],{"class":82},[76,15637,373],{"class":90},[76,15639,376],{"class":82},[76,15641,1247],{"class":90},[76,15643,376],{"class":82},[76,15645,15646],{"class":90}," c;\n",[76,15648,15649],{"class":78,"line":133},[76,15650,3685],{"class":90},[76,15652,15653],{"class":78,"line":145},[76,15654,149],{"emptyLinePlaceholder":148},[76,15656,15657],{"class":78,"line":152},[76,15658,15659],{"class":540},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[76,15661,15662],{"class":78,"line":157},[76,15663,15664],{"class":540},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[76,15666,15667,15669,15672,15674,15676,15678,15680,15682,15684,15686,15688,15690,15692],{"class":78,"line":246},[76,15668,1360],{"class":82},[76,15670,15671],{"class":86}," func2",[76,15673,123],{"class":90},[76,15675,1360],{"class":82},[76,15677,3519],{"class":7296},[76,15679,15617],{"class":82},[76,15681,4134],{"class":119},[76,15683,405],{"class":90},[76,15685,1360],{"class":82},[76,15687,4921],{"class":7296},[76,15689,15617],{"class":82},[76,15691,4134],{"class":119},[76,15693,4807],{"class":90},[76,15695,15696,15698,15700,15702,15704,15706,15708,15710,15712],{"class":78,"line":251},[76,15697,1360],{"class":82},[76,15699,15671],{"class":86},[76,15701,123],{"class":90},[76,15703,1360],{"class":82},[76,15705,3519],{"class":7296},[76,15707,405],{"class":90},[76,15709,1360],{"class":82},[76,15711,4921],{"class":7296},[76,15713,14495],{"class":90},[76,15715,15716,15718,15720,15722],{"class":78,"line":257},[76,15717,441],{"class":82},[76,15719,373],{"class":90},[76,15721,376],{"class":82},[76,15723,14516],{"class":90},[76,15725,15726],{"class":78,"line":641},[76,15727,3685],{"class":90},[76,15729,15730],{"class":78,"line":646},[76,15731,149],{"emptyLinePlaceholder":148},[76,15733,15734,15736,15738],{"class":78,"line":659},[76,15735,1360],{"class":82},[76,15737,4069],{"class":86},[76,15739,12909],{"class":90},[76,15741,15742],{"class":78,"line":1608},[76,15743,149],{"emptyLinePlaceholder":148},[76,15745,15746,15748,15750,15753,15755,15757,15759,15761,15763,15765,15768,15770],{"class":78,"line":1632},[76,15747,8607],{"class":90},[76,15749,3298],{"class":82},[76,15751,15752],{"class":126}," \"ret = \"",[76,15754,3565],{"class":82},[76,15756,13439],{"class":86},[76,15758,123],{"class":90},[76,15760,408],{"class":119},[76,15762,405],{"class":90},[76,15764,408],{"class":119},[76,15766,15767],{"class":90},") ",[76,15769,3298],{"class":82},[76,15771,10908],{"class":90},[76,15773,15774,15776,15778,15780,15782,15784,15786,15788,15790,15792],{"class":78,"line":1637},[76,15775,8607],{"class":90},[76,15777,3298],{"class":82},[76,15779,15752],{"class":126},[76,15781,3565],{"class":82},[76,15783,13439],{"class":86},[76,15785,123],{"class":90},[76,15787,2575],{"class":119},[76,15789,15767],{"class":90},[76,15791,3298],{"class":82},[76,15793,10908],{"class":90},[76,15795,15796],{"class":78,"line":1642},[76,15797,149],{"emptyLinePlaceholder":148},[76,15799,15800,15802,15804,15806],{"class":78,"line":1652},[76,15801,4399],{"class":86},[76,15803,123],{"class":90},[76,15805,4404],{"class":126},[76,15807,4807],{"class":90},[76,15809,15810],{"class":78,"line":1660},[76,15811,149],{"emptyLinePlaceholder":148},[76,15813,15814,15816,15818],{"class":78,"line":1683},[76,15815,441],{"class":82},[76,15817,587],{"class":119},[76,15819,3415],{"class":90},[76,15821,15822],{"class":78,"line":1698},[76,15823,3685],{"class":90},[19,15825,13386],{},[26,15827,15828,15831,15834],{},[29,15829,15830],{},"我传就用我；没传就用你",[29,15832,15833],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15835,15836],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15838,15840],{"id":15839},"_72函数的占位参数","7.2函数的占位参数",[19,15842,15843],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15845,15846,15848,15849],{},[2416,15847,64],{}," ",[73,15850,15851],{},"返回值类型 函数名 (数据类型){}",[66,15853,15855],{"className":2264,"code":15854,"language":2266,"meta":71,"style":71},"\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",[73,15856,15857,15862,15880,15893,15897,15905,15909,15926,15930,15940,15944,15952],{"__ignoreMap":71},[76,15858,15859],{"class":78,"line":79},[76,15860,15861],{"class":540},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[76,15863,15864,15866,15868,15870,15872,15874,15876,15878],{"class":78,"line":94},[76,15865,7444],{"class":82},[76,15867,13439],{"class":86},[76,15869,123],{"class":90},[76,15871,1360],{"class":82},[76,15873,3519],{"class":7296},[76,15875,405],{"class":90},[76,15877,1360],{"class":82},[76,15879,14495],{"class":90},[76,15881,15882,15884,15886,15889,15891],{"class":78,"line":133},[76,15883,8607],{"class":90},[76,15885,3298],{"class":82},[76,15887,15888],{"class":126}," \"this is func\"",[76,15890,3565],{"class":82},[76,15892,10908],{"class":90},[76,15894,15895],{"class":78,"line":145},[76,15896,3685],{"class":90},[76,15898,15899,15901,15903],{"class":78,"line":152},[76,15900,1360],{"class":82},[76,15902,4069],{"class":86},[76,15904,12909],{"class":90},[76,15906,15907],{"class":78,"line":157},[76,15908,149],{"emptyLinePlaceholder":148},[76,15910,15911,15913,15915,15917,15919,15921,15923],{"class":78,"line":246},[76,15912,15338],{"class":86},[76,15914,123],{"class":90},[76,15916,402],{"class":119},[76,15918,2642],{"class":90},[76,15920,402],{"class":119},[76,15922,8045],{"class":90},[76,15924,15925],{"class":540}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[76,15927,15928],{"class":78,"line":251},[76,15929,149],{"emptyLinePlaceholder":148},[76,15931,15932,15934,15936,15938],{"class":78,"line":257},[76,15933,4399],{"class":86},[76,15935,123],{"class":90},[76,15937,4404],{"class":126},[76,15939,4807],{"class":90},[76,15941,15942],{"class":78,"line":641},[76,15943,149],{"emptyLinePlaceholder":148},[76,15945,15946,15948,15950],{"class":78,"line":646},[76,15947,441],{"class":82},[76,15949,587],{"class":119},[76,15951,3415],{"class":90},[76,15953,15954],{"class":78,"line":659},[76,15955,3685],{"class":90},[19,15957,15958],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15960,15962],{"id":15961},"_73函数重载","7.3函数重载",[19,15964,15965],{},"意思是函数名是可以相同的",[889,15967,15969],{"id":15968},"_731基本语法","7.3.1基本语法",[19,15971,15972],{},"作用：函数名可以相同，提高复用性",[19,15974,15975],{},[2416,15976,15977],{},"函数重载满足条件：",[3261,15979,15980,15983,15986],{},[29,15981,15982],{},"同一个作用域下",[29,15984,15985],{},"函数名称相同",[29,15987,15988,15989,15992,15993,15996,15997],{},"函数参数",[2416,15990,15991],{},"类型不同","  或者 ",[2416,15994,15995],{},"个数不同"," 或者 ",[2416,15998,15999],{},"顺序不同",[19,16001,16002,16005],{},[2416,16003,16004],{},"注意:","  函数的返回值不可以作为函数重载的条件",[66,16007,16009],{"className":11998,"code":16008,"language":12000,"meta":71,"style":71},"\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",[73,16010,16011,16016,16024,16028,16041,16045,16059,16063,16076,16080,16095,16099,16112,16116,16137,16141,16154,16158,16178,16182,16195,16199,16203,16208,16213,16218,16223,16228,16232,16236,16244,16248,16254,16264,16274,16288,16303,16307,16317,16321,16329],{"__ignoreMap":71},[76,16012,16013],{"class":78,"line":79},[76,16014,16015],{"class":540},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[76,16017,16018,16020,16022],{"class":78,"line":94},[76,16019,7444],{"class":82},[76,16021,13439],{"class":86},[76,16023,4072],{"class":90},[76,16025,16026],{"class":78,"line":133},[76,16027,3666],{"class":90},[76,16029,16030,16032,16034,16037,16039],{"class":78,"line":145},[76,16031,8607],{"class":90},[76,16033,3298],{"class":82},[76,16035,16036],{"class":126}," \"func 的调用！\"",[76,16038,3565],{"class":82},[76,16040,10908],{"class":90},[76,16042,16043],{"class":78,"line":152},[76,16044,3685],{"class":90},[76,16046,16047,16049,16051,16053,16055,16057],{"class":78,"line":157},[76,16048,7444],{"class":82},[76,16050,13439],{"class":86},[76,16052,123],{"class":90},[76,16054,1360],{"class":82},[76,16056,3519],{"class":7296},[76,16058,130],{"class":90},[76,16060,16061],{"class":78,"line":246},[76,16062,3666],{"class":90},[76,16064,16065,16067,16069,16072,16074],{"class":78,"line":251},[76,16066,8607],{"class":90},[76,16068,3298],{"class":82},[76,16070,16071],{"class":126}," \"func (int a) 的调用！\"",[76,16073,3565],{"class":82},[76,16075,10908],{"class":90},[76,16077,16078],{"class":78,"line":257},[76,16079,3685],{"class":90},[76,16081,16082,16084,16086,16088,16091,16093],{"class":78,"line":641},[76,16083,7444],{"class":82},[76,16085,13439],{"class":86},[76,16087,123],{"class":90},[76,16089,16090],{"class":82},"double",[76,16092,3519],{"class":7296},[76,16094,130],{"class":90},[76,16096,16097],{"class":78,"line":646},[76,16098,3666],{"class":90},[76,16100,16101,16103,16105,16108,16110],{"class":78,"line":659},[76,16102,8607],{"class":90},[76,16104,3298],{"class":82},[76,16106,16107],{"class":126}," \"func (double a)的调用！\"",[76,16109,3565],{"class":82},[76,16111,10908],{"class":90},[76,16113,16114],{"class":78,"line":1608},[76,16115,3685],{"class":90},[76,16117,16118,16120,16122,16124,16126,16128,16131,16133,16135],{"class":78,"line":1632},[76,16119,7444],{"class":82},[76,16121,13439],{"class":86},[76,16123,123],{"class":90},[76,16125,1360],{"class":82},[76,16127,3519],{"class":7296},[76,16129,16130],{"class":90}," ,",[76,16132,16090],{"class":82},[76,16134,4921],{"class":7296},[76,16136,130],{"class":90},[76,16138,16139],{"class":78,"line":1637},[76,16140,3666],{"class":90},[76,16142,16143,16145,16147,16150,16152],{"class":78,"line":1642},[76,16144,8607],{"class":90},[76,16146,3298],{"class":82},[76,16148,16149],{"class":126}," \"func (int a ,double b) 的调用！\"",[76,16151,3565],{"class":82},[76,16153,10908],{"class":90},[76,16155,16156],{"class":78,"line":1652},[76,16157,3685],{"class":90},[76,16159,16160,16162,16164,16166,16168,16170,16172,16174,16176],{"class":78,"line":1660},[76,16161,7444],{"class":82},[76,16163,13439],{"class":86},[76,16165,123],{"class":90},[76,16167,16090],{"class":82},[76,16169,3519],{"class":7296},[76,16171,16130],{"class":90},[76,16173,1360],{"class":82},[76,16175,4921],{"class":7296},[76,16177,130],{"class":90},[76,16179,16180],{"class":78,"line":1683},[76,16181,3666],{"class":90},[76,16183,16184,16186,16188,16191,16193],{"class":78,"line":1698},[76,16185,8607],{"class":90},[76,16187,3298],{"class":82},[76,16189,16190],{"class":126}," \"func (double a ,int b)的调用！\"",[76,16192,3565],{"class":82},[76,16194,10908],{"class":90},[76,16196,16197],{"class":78,"line":1711},[76,16198,3685],{"class":90},[76,16200,16201],{"class":78,"line":1717},[76,16202,149],{"emptyLinePlaceholder":148},[76,16204,16205],{"class":78,"line":1728},[76,16206,16207],{"class":540},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[76,16209,16210],{"class":78,"line":1740},[76,16211,16212],{"class":540},"\u002F\u002Fint func(double a, int b)\n",[76,16214,16215],{"class":78,"line":1746},[76,16216,16217],{"class":540},"\u002F\u002F{\n",[76,16219,16220],{"class":78,"line":1751},[76,16221,16222],{"class":540},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[76,16224,16225],{"class":78,"line":1756},[76,16226,16227],{"class":540},"\u002F\u002F}\n",[76,16229,16230],{"class":78,"line":1766},[76,16231,149],{"emptyLinePlaceholder":148},[76,16233,16234],{"class":78,"line":1773},[76,16235,149],{"emptyLinePlaceholder":148},[76,16237,16238,16240,16242],{"class":78,"line":1793},[76,16239,1360],{"class":82},[76,16241,4069],{"class":86},[76,16243,12909],{"class":90},[76,16245,16246],{"class":78,"line":1806},[76,16247,149],{"emptyLinePlaceholder":148},[76,16249,16250,16252],{"class":78,"line":1817},[76,16251,15338],{"class":86},[76,16253,7716],{"class":90},[76,16255,16256,16258,16260,16262],{"class":78,"line":1822},[76,16257,15338],{"class":86},[76,16259,123],{"class":90},[76,16261,402],{"class":119},[76,16263,4807],{"class":90},[76,16265,16266,16268,16270,16272],{"class":78,"line":1835},[76,16267,15338],{"class":86},[76,16269,123],{"class":90},[76,16271,2319],{"class":119},[76,16273,4807],{"class":90},[76,16275,16276,16278,16280,16282,16284,16286],{"class":78,"line":1847},[76,16277,15338],{"class":86},[76,16279,123],{"class":90},[76,16281,402],{"class":119},[76,16283,2642],{"class":90},[76,16285,2319],{"class":119},[76,16287,4807],{"class":90},[76,16289,16290,16292,16294,16296,16299,16301],{"class":78,"line":1852},[76,16291,15338],{"class":86},[76,16293,123],{"class":90},[76,16295,2319],{"class":119},[76,16297,16298],{"class":90}," , ",[76,16300,402],{"class":119},[76,16302,4807],{"class":90},[76,16304,16305],{"class":78,"line":1862},[76,16306,15263],{"class":90},[76,16308,16309,16311,16313,16315],{"class":78,"line":1874},[76,16310,4399],{"class":86},[76,16312,123],{"class":90},[76,16314,4404],{"class":126},[76,16316,4807],{"class":90},[76,16318,16319],{"class":78,"line":1879},[76,16320,149],{"emptyLinePlaceholder":148},[76,16322,16323,16325,16327],{"class":78,"line":1884},[76,16324,441],{"class":82},[76,16326,587],{"class":119},[76,16328,3415],{"class":90},[76,16330,16331],{"class":78,"line":1889},[76,16332,3685],{"class":90},[19,16334,16335],{},"重点：函数返回值不可以作为函数重载条件！",[889,16337,16339],{"id":16338},"_732注意事项","7.3.2注意事项",[3261,16341,16342,16345],{},[29,16343,16344],{},"引用作为重载条件!!!",[29,16346,16347],{},"函数重载碰到函数默认参数",[66,16349,16351],{"className":2264,"code":16350,"language":2266,"meta":71,"style":71},"\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",[73,16352,16353,16358,16363,16367,16383,16387,16400,16404,16408,16426,16430,16443,16447,16451,16455,16460,16464,16488,16492,16505,16509,16513,16527,16531,16544,16548,16552,16560,16564,16576,16586,16599,16603,16607,16615,16619,16629,16633,16641],{"__ignoreMap":71},[76,16354,16355],{"class":78,"line":79},[76,16356,16357],{"class":540},"\u002F\u002F函数重载注意事项\n",[76,16359,16360],{"class":78,"line":94},[76,16361,16362],{"class":540},"\u002F\u002F1、引用作为重载条件\n",[76,16364,16365],{"class":78,"line":133},[76,16366,149],{"emptyLinePlaceholder":148},[76,16368,16369,16371,16373,16375,16377,16379,16381],{"class":78,"line":145},[76,16370,7444],{"class":82},[76,16372,13439],{"class":86},[76,16374,123],{"class":90},[76,16376,1360],{"class":82},[76,16378,12641],{"class":82},[76,16380,2503],{"class":7296},[76,16382,130],{"class":90},[76,16384,16385],{"class":78,"line":152},[76,16386,3666],{"class":90},[76,16388,16389,16391,16393,16396,16398],{"class":78,"line":157},[76,16390,8607],{"class":90},[76,16392,3298],{"class":82},[76,16394,16395],{"class":126}," \"func (int &a) 调用 \"",[76,16397,3565],{"class":82},[76,16399,10908],{"class":90},[76,16401,16402],{"class":78,"line":246},[76,16403,3685],{"class":90},[76,16405,16406],{"class":78,"line":251},[76,16407,149],{"emptyLinePlaceholder":148},[76,16409,16410,16412,16414,16416,16418,16420,16422,16424],{"class":78,"line":257},[76,16411,7444],{"class":82},[76,16413,13439],{"class":86},[76,16415,123],{"class":90},[76,16417,8870],{"class":82},[76,16419,4478],{"class":82},[76,16421,12641],{"class":82},[76,16423,2503],{"class":7296},[76,16425,130],{"class":90},[76,16427,16428],{"class":78,"line":641},[76,16429,3666],{"class":90},[76,16431,16432,16434,16436,16439,16441],{"class":78,"line":646},[76,16433,8607],{"class":90},[76,16435,3298],{"class":82},[76,16437,16438],{"class":126}," \"func (const int &a) 调用 \"",[76,16440,3565],{"class":82},[76,16442,10908],{"class":90},[76,16444,16445],{"class":78,"line":659},[76,16446,3685],{"class":90},[76,16448,16449],{"class":78,"line":1608},[76,16450,149],{"emptyLinePlaceholder":148},[76,16452,16453],{"class":78,"line":1632},[76,16454,149],{"emptyLinePlaceholder":148},[76,16456,16457],{"class":78,"line":1637},[76,16458,16459],{"class":540},"\u002F\u002F2、函数重载碰到函数默认参数\n",[76,16461,16462],{"class":78,"line":1642},[76,16463,149],{"emptyLinePlaceholder":148},[76,16465,16466,16468,16470,16472,16474,16476,16478,16480,16482,16484,16486],{"class":78,"line":1652},[76,16467,7444],{"class":82},[76,16469,15671],{"class":86},[76,16471,123],{"class":90},[76,16473,1360],{"class":82},[76,16475,3519],{"class":7296},[76,16477,405],{"class":90},[76,16479,1360],{"class":82},[76,16481,4921],{"class":7296},[76,16483,15617],{"class":82},[76,16485,4134],{"class":119},[76,16487,130],{"class":90},[76,16489,16490],{"class":78,"line":1660},[76,16491,3666],{"class":90},[76,16493,16494,16496,16498,16501,16503],{"class":78,"line":1683},[76,16495,8607],{"class":90},[76,16497,3298],{"class":82},[76,16499,16500],{"class":126}," \"func2(int a, int b = 10) 调用\"",[76,16502,3565],{"class":82},[76,16504,10908],{"class":90},[76,16506,16507],{"class":78,"line":1698},[76,16508,3685],{"class":90},[76,16510,16511],{"class":78,"line":1711},[76,16512,149],{"emptyLinePlaceholder":148},[76,16514,16515,16517,16519,16521,16523,16525],{"class":78,"line":1717},[76,16516,7444],{"class":82},[76,16518,15671],{"class":86},[76,16520,123],{"class":90},[76,16522,1360],{"class":82},[76,16524,3519],{"class":7296},[76,16526,130],{"class":90},[76,16528,16529],{"class":78,"line":1728},[76,16530,3666],{"class":90},[76,16532,16533,16535,16537,16540,16542],{"class":78,"line":1740},[76,16534,8607],{"class":90},[76,16536,3298],{"class":82},[76,16538,16539],{"class":126}," \"func2(int a) 调用\"",[76,16541,3565],{"class":82},[76,16543,10908],{"class":90},[76,16545,16546],{"class":78,"line":1746},[76,16547,3685],{"class":90},[76,16549,16550],{"class":78,"line":1751},[76,16551,149],{"emptyLinePlaceholder":148},[76,16553,16554,16556,16558],{"class":78,"line":1756},[76,16555,1360],{"class":82},[76,16557,4069],{"class":86},[76,16559,12909],{"class":90},[76,16561,16562],{"class":78,"line":1766},[76,16563,15263],{"class":90},[76,16565,16566,16568,16570,16572,16574],{"class":78,"line":1773},[76,16567,4081],{"class":82},[76,16569,373],{"class":90},[76,16571,370],{"class":82},[76,16573,4134],{"class":119},[76,16575,3415],{"class":90},[76,16577,16578,16580,16583],{"class":78,"line":1793},[76,16579,15338],{"class":86},[76,16581,16582],{"class":90},"(a);",[76,16584,16585],{"class":540}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[76,16587,16588,16590,16592,16594,16596],{"class":78,"line":1806},[76,16589,15338],{"class":86},[76,16591,123],{"class":90},[76,16593,402],{"class":119},[76,16595,8045],{"class":90},[76,16597,16598],{"class":540},"\u002F\u002F调用有const   10是个常量\n",[76,16600,16601],{"class":78,"line":1817},[76,16602,149],{"emptyLinePlaceholder":148},[76,16604,16605],{"class":78,"line":1822},[76,16606,149],{"emptyLinePlaceholder":148},[76,16608,16609,16612],{"class":78,"line":1835},[76,16610,16611],{"class":540},"    \u002F\u002Ffunc2(10);",[76,16613,16614],{"class":540}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[76,16616,16617],{"class":78,"line":1847},[76,16618,149],{"emptyLinePlaceholder":148},[76,16620,16621,16623,16625,16627],{"class":78,"line":1852},[76,16622,4399],{"class":86},[76,16624,123],{"class":90},[76,16626,4404],{"class":126},[76,16628,4807],{"class":90},[76,16630,16631],{"class":78,"line":1862},[76,16632,149],{"emptyLinePlaceholder":148},[76,16634,16635,16637,16639],{"class":78,"line":1874},[76,16636,441],{"class":82},[76,16638,587],{"class":119},[76,16640,3415],{"class":90},[76,16642,16643],{"class":78,"line":1879},[76,16644,3685],{"class":90},[2178,16646,16647],{},"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":71,"searchDepth":94,"depth":94,"links":16649},[16650,16651,16652],{"id":15582,"depth":94,"text":15583},{"id":15839,"depth":94,"text":15840},{"id":15961,"depth":94,"text":15962,"children":16653},[16654,16655],{"id":15968,"depth":133,"text":15969},{"id":16338,"depth":133,"text":16339},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15574,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16662,"title":16663,"body":16664,"description":25414,"extension":2202,"meta":25415,"navigation":148,"path":25416,"seo":25417,"stem":25418,"__hash__":25419},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16665,"toc":25395},[16666,16669,16675,16682,16687,16690,16693,16696,16700,16704,16707,16710,16718,16723,16726,16733,16738,16896,16899,17152,17155,17158,17161,17166,17169,17172,17183,17187,17423,17427,17437,17440,17448,17595,17599,17602,17605,17609,18053,18057,18065,18073,18985,18992,18997,19624,19627,19630,19633,19752,19755,19842,19845,19971,19974,20068,20071,20424,20428,20436,20440,20447,20450,20453,20464,20470,20475,20487,20495,20515,20523,20540,20726,20729,20733,20736,20739,20742,20745,20748,20751,20754,21214,21220,21224,21227,21238,21825,21828,22317,22321,22324,22327,22330,22333,22336,22344,22740,22744,22747,22750,23197,23200,23203,23208,23211,23216,23219,23223,23226,23228,23234,23237,23543,23553,23594,23598,23601,23603,23636,23639,23946,23948,23963,23966,23989,23998,24004,24007,24011,24014,24017,24022,24033,24038,24046,24051,24181,24184,24187,24362,24367,24579,24583,24586,24700,24705,24944,24948,24952,24955,24958,24963,25068,25071,25074,25077,25081,25192,25195,25198,25203,25255,25258,25261,25266,25312,25315,25320,25388,25390,25393],[10,16667,16663],{"id":16668},"_8类和对象",[19,16670,16671,16672],{},"C++面向对象的三大特性为",[2416,16673,16674],{},"封装、继承、多态",[19,16676,16677,16678,16681],{},"C++认为",[2416,16679,16680],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16683,16684],{},[2416,16685,16686],{},"例如：",[19,16688,16689],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16691,16692],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16694,16695],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16697,16699],{"id":16698},"_81封装","8.1封装",[889,16701,16703],{"id":16702},"_811封装的意义","8.1.1封装的意义",[19,16705,16706],{},"封装是C++面向对象三大特性之一",[19,16708,16709],{},"封装的意义：",[3261,16711,16712,16715],{},[29,16713,16714],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16716,16717],{},"将属性和行为加以权限控制",[19,16719,16720],{},[2416,16721,16722],{},"封装意义一：",[19,16724,16725],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16727,16728,15848,16730],{},[2416,16729,64],{},[73,16731,16732],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16734,16735],{},[29,16736,16737],{},"**示例1：**设计一个圆类，求圆的周长",[66,16739,16741],{"className":2264,"code":16740,"language":2266,"meta":71,"style":71},"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",[73,16742,16743,16751,16755,16760,16765,16770,16775,16782,16787,16797,16801,16818,16822,16826,16834,16838,16843,16848,16853,16858,16869,16892],{"__ignoreMap":71},[76,16744,16745,16748],{"class":78,"line":79},[76,16746,16747],{"class":82},"class",[76,16749,16750],{"class":86}," Circle\n",[76,16752,16753],{"class":78,"line":94},[76,16754,3666],{"class":90},[76,16756,16757],{"class":78,"line":133},[76,16758,16759],{"class":540},"    \u002F\u002F访问权限\n",[76,16761,16762],{"class":78,"line":145},[76,16763,16764],{"class":540},"    \u002F\u002F公共权限\n",[76,16766,16767],{"class":78,"line":152},[76,16768,16769],{"class":82},"public:\n",[76,16771,16772],{"class":78,"line":157},[76,16773,16774],{"class":540},"    \u002F\u002F属性\n",[76,16776,16777,16779],{"class":78,"line":246},[76,16778,4081],{"class":82},[76,16780,16781],{"class":90}," m_r;\n",[76,16783,16784],{"class":78,"line":251},[76,16785,16786],{"class":540},"    \u002F\u002F行为\n",[76,16788,16789,16792,16795],{"class":78,"line":257},[76,16790,16791],{"class":82},"    double",[76,16793,16794],{"class":86}," calculateZC",[76,16796,4072],{"class":90},[76,16798,16799],{"class":78,"line":641},[76,16800,4126],{"class":90},[76,16802,16803,16805,16808,16810,16813,16815],{"class":78,"line":646},[76,16804,595],{"class":82},[76,16806,16807],{"class":119}," 2",[76,16809,2718],{"class":82},[76,16811,16812],{"class":90},"PI",[76,16814,2718],{"class":82},[76,16816,16817],{"class":90},"m_r;\n",[76,16819,16820],{"class":78,"line":659},[76,16821,4283],{"class":90},[76,16823,16824],{"class":78,"line":1608},[76,16825,6079],{"class":90},[76,16827,16828,16830,16832],{"class":78,"line":1632},[76,16829,1360],{"class":82},[76,16831,4069],{"class":86},[76,16833,4072],{"class":90},[76,16835,16836],{"class":78,"line":1637},[76,16837,3666],{"class":90},[76,16839,16840],{"class":78,"line":1642},[76,16841,16842],{"class":540},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[76,16844,16845],{"class":78,"line":1652},[76,16846,16847],{"class":540},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[76,16849,16850],{"class":78,"line":1660},[76,16851,16852],{"class":90},"    Circle c1;\n",[76,16854,16855],{"class":78,"line":1683},[76,16856,16857],{"class":540},"    \u002F\u002F给圆对象 的属性进行赋值\n",[76,16859,16860,16863,16865,16867],{"class":78,"line":1698},[76,16861,16862],{"class":90},"    c1.m_r",[76,16864,370],{"class":82},[76,16866,402],{"class":119},[76,16868,3415],{"class":90},[76,16870,16871,16873,16875,16878,16880,16883,16886,16888,16890],{"class":78,"line":1711},[76,16872,3671],{"class":90},[76,16874,3298],{"class":82},[76,16876,16877],{"class":126},"\"圆的周长\"",[76,16879,3298],{"class":82},[76,16881,16882],{"class":90},"c1.",[76,16884,16885],{"class":86},"calculateZC",[76,16887,4522],{"class":90},[76,16889,3298],{"class":82},[76,16891,3320],{"class":90},[76,16893,16894],{"class":78,"line":1717},[76,16895,3685],{"class":90},[19,16897,16898],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[66,16900,16902],{"className":2264,"code":16901,"language":2266,"meta":71,"style":71},"#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",[73,16903,16904,16910,16920,16926,16932,16936,16940,16945,16952,16957,16975,16979,16989,16993,16998,17014,17018,17028,17032,17037,17045,17049,17081,17085,17089,17097,17101,17106,17111,17125,17139,17148],{"__ignoreMap":71},[76,16905,16906,16908],{"class":78,"line":79},[76,16907,4046],{"class":82},[76,16909,4049],{"class":126},[76,16911,16912,16914,16916,16918],{"class":78,"line":94},[76,16913,4054],{"class":82},[76,16915,4057],{"class":82},[76,16917,4060],{"class":86},[76,16919,3415],{"class":90},[76,16921,16922,16924],{"class":78,"line":133},[76,16923,4046],{"class":82},[76,16925,9827],{"class":126},[76,16927,16928,16930],{"class":78,"line":145},[76,16929,16747],{"class":82},[76,16931,9840],{"class":86},[76,16933,16934],{"class":78,"line":152},[76,16935,3666],{"class":90},[76,16937,16938],{"class":78,"line":157},[76,16939,16769],{"class":82},[76,16941,16942],{"class":78,"line":246},[76,16943,16944],{"class":90},"    string m_name;\n",[76,16946,16947,16949],{"class":78,"line":251},[76,16948,4081],{"class":82},[76,16950,16951],{"class":90}," m_id;\n",[76,16953,16954],{"class":78,"line":257},[76,16955,16956],{"class":540},"    \u002F\u002F赋值姓名\n",[76,16958,16959,16962,16965,16967,16970,16973],{"class":78,"line":641},[76,16960,16961],{"class":82},"    void",[76,16963,16964],{"class":86}," setName",[76,16966,123],{"class":90},[76,16968,16969],{"class":86},"string",[76,16971,16972],{"class":7296}," name",[76,16974,130],{"class":90},[76,16976,16977],{"class":78,"line":646},[76,16978,4126],{"class":90},[76,16980,16981,16984,16986],{"class":78,"line":659},[76,16982,16983],{"class":90},"        m_name",[76,16985,370],{"class":82},[76,16987,16988],{"class":90},"name;\n",[76,16990,16991],{"class":78,"line":1608},[76,16992,4283],{"class":90},[76,16994,16995],{"class":78,"line":1632},[76,16996,16997],{"class":540},"    \u002F\u002F赋值学号\n",[76,16999,17000,17002,17005,17007,17009,17012],{"class":78,"line":1637},[76,17001,16961],{"class":82},[76,17003,17004],{"class":86}," setId",[76,17006,123],{"class":90},[76,17008,1360],{"class":82},[76,17010,17011],{"class":7296}," id",[76,17013,130],{"class":90},[76,17015,17016],{"class":78,"line":1642},[76,17017,4126],{"class":90},[76,17019,17020,17023,17025],{"class":78,"line":1652},[76,17021,17022],{"class":90},"        m_id",[76,17024,370],{"class":82},[76,17026,17027],{"class":90},"id;\n",[76,17029,17030],{"class":78,"line":1660},[76,17031,4283],{"class":90},[76,17033,17034],{"class":78,"line":1683},[76,17035,17036],{"class":540},"    \u002F\u002F打印学生信息\n",[76,17038,17039,17041,17043],{"class":78,"line":1698},[76,17040,16961],{"class":82},[76,17042,11681],{"class":86},[76,17044,4072],{"class":90},[76,17046,17047],{"class":78,"line":1711},[76,17048,4126],{"class":90},[76,17050,17051,17053,17055,17058,17060,17063,17065,17067,17069,17072,17074,17077,17079],{"class":78,"line":1717},[76,17052,5536],{"class":90},[76,17054,3298],{"class":82},[76,17056,17057],{"class":126},"\"姓名：\"",[76,17059,3298],{"class":82},[76,17061,17062],{"class":90},"m_name",[76,17064,3298],{"class":82},[76,17066,6441],{"class":126},[76,17068,3298],{"class":82},[76,17070,17071],{"class":126},"\"学号：\"",[76,17073,3298],{"class":82},[76,17075,17076],{"class":90},"m_id",[76,17078,3298],{"class":82},[76,17080,3320],{"class":90},[76,17082,17083],{"class":78,"line":1728},[76,17084,4283],{"class":90},[76,17086,17087],{"class":78,"line":1740},[76,17088,6079],{"class":90},[76,17090,17091,17093,17095],{"class":78,"line":1746},[76,17092,1360],{"class":82},[76,17094,4069],{"class":86},[76,17096,4072],{"class":90},[76,17098,17099],{"class":78,"line":1751},[76,17100,3666],{"class":90},[76,17102,17103],{"class":78,"line":1756},[76,17104,17105],{"class":540},"    \u002F\u002F实例化\n",[76,17107,17108],{"class":78,"line":1766},[76,17109,17110],{"class":90},"    Student s1;\n",[76,17112,17113,17116,17119,17121,17123],{"class":78,"line":1773},[76,17114,17115],{"class":90},"    s1.",[76,17117,17118],{"class":86},"setName",[76,17120,123],{"class":90},[76,17122,9994],{"class":126},[76,17124,4807],{"class":90},[76,17126,17127,17129,17132,17134,17137],{"class":78,"line":1793},[76,17128,17115],{"class":90},[76,17130,17131],{"class":86},"setId",[76,17133,123],{"class":90},[76,17135,17136],{"class":119},"123456",[76,17138,4807],{"class":90},[76,17140,17141,17143,17146],{"class":78,"line":1806},[76,17142,17115],{"class":90},[76,17144,17145],{"class":86},"printInfo",[76,17147,7716],{"class":90},[76,17149,17150],{"class":78,"line":1817},[76,17151,3685],{"class":90},[19,17153,17154],{},"类中的属性和行为统称为成员",[19,17156,17157],{},"属性：成员属性(成员变量)",[19,17159,17160],{},"方法：成员函数(成员方法)",[19,17162,17163],{},[2416,17164,17165],{},"封装意义二：",[19,17167,17168],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17170,17171],{},"访问权限有三种：",[26,17173,17174,17177,17180],{},[29,17175,17176],{},"public        公共权限",[29,17178,17179],{},"protected 保护权限",[29,17181,17182],{},"private      私有权限",[19,17184,17185],{},[2416,17186,100],{},[66,17188,17190],{"className":11998,"code":17189,"language":12000,"meta":71,"style":71},"\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",[73,17191,17192,17197,17202,17207,17212,17216,17223,17227,17232,17236,17241,17245,17250,17255,17260,17264,17269,17274,17281,17285,17289,17297,17301,17312,17324,17336,17340,17344,17348,17356,17360,17365,17377,17385,17393,17397,17407,17411,17419],{"__ignoreMap":71},[76,17193,17194],{"class":78,"line":79},[76,17195,17196],{"class":540},"\u002F\u002F三种权限\n",[76,17198,17199],{"class":78,"line":94},[76,17200,17201],{"class":540},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[76,17203,17204],{"class":78,"line":133},[76,17205,17206],{"class":540},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[76,17208,17209],{"class":78,"line":145},[76,17210,17211],{"class":540},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[76,17213,17214],{"class":78,"line":152},[76,17215,149],{"emptyLinePlaceholder":148},[76,17217,17218,17220],{"class":78,"line":157},[76,17219,16747],{"class":82},[76,17221,17222],{"class":86}," Person\n",[76,17224,17225],{"class":78,"line":246},[76,17226,3666],{"class":90},[76,17228,17229],{"class":78,"line":251},[76,17230,17231],{"class":540},"    \u002F\u002F姓名  公共权限\n",[76,17233,17234],{"class":78,"line":257},[76,17235,16769],{"class":82},[76,17237,17238],{"class":78,"line":641},[76,17239,17240],{"class":90},"    string m_Name;\n",[76,17242,17243],{"class":78,"line":646},[76,17244,149],{"emptyLinePlaceholder":148},[76,17246,17247],{"class":78,"line":659},[76,17248,17249],{"class":540},"    \u002F\u002F汽车  保护权限\n",[76,17251,17252],{"class":78,"line":1608},[76,17253,17254],{"class":82},"protected:\n",[76,17256,17257],{"class":78,"line":1632},[76,17258,17259],{"class":90},"    string m_Car;\n",[76,17261,17262],{"class":78,"line":1637},[76,17263,149],{"emptyLinePlaceholder":148},[76,17265,17266],{"class":78,"line":1642},[76,17267,17268],{"class":540},"    \u002F\u002F银行卡密码  私有权限\n",[76,17270,17271],{"class":78,"line":1652},[76,17272,17273],{"class":82},"private:\n",[76,17275,17276,17278],{"class":78,"line":1660},[76,17277,4081],{"class":82},[76,17279,17280],{"class":90}," m_Password;\n",[76,17282,17283],{"class":78,"line":1683},[76,17284,149],{"emptyLinePlaceholder":148},[76,17286,17287],{"class":78,"line":1698},[76,17288,16769],{"class":82},[76,17290,17291,17293,17295],{"class":78,"line":1711},[76,17292,16961],{"class":82},[76,17294,13439],{"class":86},[76,17296,4072],{"class":90},[76,17298,17299],{"class":78,"line":1717},[76,17300,4126],{"class":90},[76,17302,17303,17306,17308,17310],{"class":78,"line":1728},[76,17304,17305],{"class":90},"        m_Name ",[76,17307,370],{"class":82},[76,17309,11006],{"class":126},[76,17311,3415],{"class":90},[76,17313,17314,17317,17319,17322],{"class":78,"line":1740},[76,17315,17316],{"class":90},"        m_Car ",[76,17318,370],{"class":82},[76,17320,17321],{"class":126}," \"拖拉机\"",[76,17323,3415],{"class":90},[76,17325,17326,17329,17331,17334],{"class":78,"line":1746},[76,17327,17328],{"class":90},"        m_Password ",[76,17330,370],{"class":82},[76,17332,17333],{"class":119}," 123456",[76,17335,3415],{"class":90},[76,17337,17338],{"class":78,"line":1751},[76,17339,4283],{"class":90},[76,17341,17342],{"class":78,"line":1756},[76,17343,6079],{"class":90},[76,17345,17346],{"class":78,"line":1766},[76,17347,149],{"emptyLinePlaceholder":148},[76,17349,17350,17352,17354],{"class":78,"line":1773},[76,17351,1360],{"class":82},[76,17353,4069],{"class":86},[76,17355,12909],{"class":90},[76,17357,17358],{"class":78,"line":1793},[76,17359,149],{"emptyLinePlaceholder":148},[76,17361,17362],{"class":78,"line":1806},[76,17363,17364],{"class":90},"    Person p;\n",[76,17366,17367,17370,17372,17375],{"class":78,"line":1817},[76,17368,17369],{"class":90},"    p.m_Name ",[76,17371,370],{"class":82},[76,17373,17374],{"class":126}," \"李四\"",[76,17376,3415],{"class":90},[76,17378,17379,17382],{"class":78,"line":1822},[76,17380,17381],{"class":540},"    \u002F\u002Fp.m_Car = \"奔驰\";",[76,17383,17384],{"class":540},"  \u002F\u002F保护权限类外访问不到\n",[76,17386,17387,17390],{"class":78,"line":1835},[76,17388,17389],{"class":540},"    \u002F\u002Fp.m_Password = 123;",[76,17391,17392],{"class":540}," \u002F\u002F私有权限类外访问不到\n",[76,17394,17395],{"class":78,"line":1847},[76,17396,149],{"emptyLinePlaceholder":148},[76,17398,17399,17401,17403,17405],{"class":78,"line":1852},[76,17400,4399],{"class":86},[76,17402,123],{"class":90},[76,17404,4404],{"class":126},[76,17406,4807],{"class":90},[76,17408,17409],{"class":78,"line":1862},[76,17410,149],{"emptyLinePlaceholder":148},[76,17412,17413,17415,17417],{"class":78,"line":1874},[76,17414,441],{"class":82},[76,17416,587],{"class":119},[76,17418,3415],{"class":90},[76,17420,17421],{"class":78,"line":1879},[76,17422,3685],{"class":90},[889,17424,17426],{"id":17425},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17428,17429,17430,17433,17434],{},"在C++中 struct和class唯一的",[2416,17431,17432],{},"区别","就在于 ",[2416,17435,17436],{},"默认的访问权限不同",[19,17438,17439],{},"区别：",[3261,17441,17442,17445],{},[29,17443,17444],{},"struct 默认权限为公共",[29,17446,17447],{},"class   默认权限为私有",[66,17449,17451],{"className":11998,"code":17450,"language":12000,"meta":71,"style":71},"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",[73,17452,17453,17460,17464,17474,17478,17482,17489,17493,17503,17507,17511,17519,17523,17528,17542,17546,17551,17565,17569,17579,17583,17591],{"__ignoreMap":71},[76,17454,17455,17457],{"class":78,"line":79},[76,17456,16747],{"class":82},[76,17458,17459],{"class":86}," C1\n",[76,17461,17462],{"class":78,"line":94},[76,17463,3666],{"class":90},[76,17465,17466,17468,17471],{"class":78,"line":133},[76,17467,4081],{"class":82},[76,17469,17470],{"class":90},"  m_A;",[76,17472,17473],{"class":540}," \u002F\u002F默认是私有权限\n",[76,17475,17476],{"class":78,"line":145},[76,17477,6079],{"class":90},[76,17479,17480],{"class":78,"line":152},[76,17481,149],{"emptyLinePlaceholder":148},[76,17483,17484,17486],{"class":78,"line":157},[76,17485,9837],{"class":82},[76,17487,17488],{"class":86}," C2\n",[76,17490,17491],{"class":78,"line":246},[76,17492,3666],{"class":90},[76,17494,17495,17497,17500],{"class":78,"line":251},[76,17496,4081],{"class":82},[76,17498,17499],{"class":90}," m_A;",[76,17501,17502],{"class":540},"  \u002F\u002F默认是公共权限\n",[76,17504,17505],{"class":78,"line":257},[76,17506,6079],{"class":90},[76,17508,17509],{"class":78,"line":641},[76,17510,149],{"emptyLinePlaceholder":148},[76,17512,17513,17515,17517],{"class":78,"line":646},[76,17514,1360],{"class":82},[76,17516,4069],{"class":86},[76,17518,12909],{"class":90},[76,17520,17521],{"class":78,"line":659},[76,17522,149],{"emptyLinePlaceholder":148},[76,17524,17525],{"class":78,"line":1608},[76,17526,17527],{"class":90},"    C1 c1;\n",[76,17529,17530,17533,17535,17537,17539],{"class":78,"line":1632},[76,17531,17532],{"class":90},"    c1.m_A ",[76,17534,370],{"class":82},[76,17536,4134],{"class":119},[76,17538,2324],{"class":90},[76,17540,17541],{"class":540}," \u002F\u002F错误，访问权限是私有\n",[76,17543,17544],{"class":78,"line":1637},[76,17545,149],{"emptyLinePlaceholder":148},[76,17547,17548],{"class":78,"line":1642},[76,17549,17550],{"class":90},"    C2 c2;\n",[76,17552,17553,17556,17558,17560,17562],{"class":78,"line":1652},[76,17554,17555],{"class":90},"    c2.m_A ",[76,17557,370],{"class":82},[76,17559,4134],{"class":119},[76,17561,2324],{"class":90},[76,17563,17564],{"class":540}," \u002F\u002F正确，访问权限是公共\n",[76,17566,17567],{"class":78,"line":1660},[76,17568,149],{"emptyLinePlaceholder":148},[76,17570,17571,17573,17575,17577],{"class":78,"line":1683},[76,17572,4399],{"class":86},[76,17574,123],{"class":90},[76,17576,4404],{"class":126},[76,17578,4807],{"class":90},[76,17580,17581],{"class":78,"line":1698},[76,17582,149],{"emptyLinePlaceholder":148},[76,17584,17585,17587,17589],{"class":78,"line":1711},[76,17586,441],{"class":82},[76,17588,587],{"class":119},[76,17590,3415],{"class":90},[76,17592,17593],{"class":78,"line":1717},[76,17594,3685],{"class":90},[889,17596,17598],{"id":17597},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17600,17601],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17603,17604],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17606,17607],{},[2416,17608,100],{},[66,17610,17612],{"className":11998,"code":17611,"language":12000,"meta":71,"style":71},"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",[73,17613,17614,17624,17628,17632,17637,17651,17660,17664,17674,17678,17685,17689,17693,17697,17702,17711,17718,17722,17727,17743,17765,17778,17785,17789,17798,17802,17806,17811,17827,17837,17841,17845,17849,17857,17861,17871,17875,17883,17887,17891,17899,17903,17907,17912,17925,17948,17952,17957,17970,17992,17996,18001,18015,18023,18027,18037,18041,18049],{"__ignoreMap":71},[76,17615,17616,17618,17621],{"class":78,"line":79},[76,17617,16747],{"class":82},[76,17619,17620],{"class":86}," Person",[76,17622,17623],{"class":90}," {\n",[76,17625,17626],{"class":78,"line":94},[76,17627,16769],{"class":82},[76,17629,17630],{"class":78,"line":133},[76,17631,149],{"emptyLinePlaceholder":148},[76,17633,17634],{"class":78,"line":145},[76,17635,17636],{"class":540},"    \u002F\u002F姓名设置可读可写\n",[76,17638,17639,17641,17643,17645,17647,17649],{"class":78,"line":152},[76,17640,16961],{"class":82},[76,17642,16964],{"class":86},[76,17644,123],{"class":90},[76,17646,16969],{"class":86},[76,17648,16972],{"class":7296},[76,17650,14495],{"class":90},[76,17652,17653,17655,17657],{"class":78,"line":157},[76,17654,17305],{"class":90},[76,17656,370],{"class":82},[76,17658,17659],{"class":90}," name;\n",[76,17661,17662],{"class":78,"line":246},[76,17663,4283],{"class":90},[76,17665,17666,17669,17672],{"class":78,"line":251},[76,17667,17668],{"class":86},"    string",[76,17670,17671],{"class":86}," getName",[76,17673,4072],{"class":90},[76,17675,17676],{"class":78,"line":257},[76,17677,4126],{"class":90},[76,17679,17680,17682],{"class":78,"line":641},[76,17681,595],{"class":82},[76,17683,17684],{"class":90}," m_Name;\n",[76,17686,17687],{"class":78,"line":646},[76,17688,4283],{"class":90},[76,17690,17691],{"class":78,"line":659},[76,17692,149],{"emptyLinePlaceholder":148},[76,17694,17695],{"class":78,"line":1608},[76,17696,149],{"emptyLinePlaceholder":148},[76,17698,17699],{"class":78,"line":1632},[76,17700,17701],{"class":540},"    \u002F\u002F获取年龄 \n",[76,17703,17704,17706,17709],{"class":78,"line":1637},[76,17705,4081],{"class":82},[76,17707,17708],{"class":86}," getAge",[76,17710,12909],{"class":90},[76,17712,17713,17715],{"class":78,"line":1642},[76,17714,595],{"class":82},[76,17716,17717],{"class":90}," m_Age;\n",[76,17719,17720],{"class":78,"line":1652},[76,17721,4283],{"class":90},[76,17723,17724],{"class":78,"line":1660},[76,17725,17726],{"class":540},"    \u002F\u002F设置年龄\n",[76,17728,17729,17731,17734,17736,17738,17741],{"class":78,"line":1683},[76,17730,16961],{"class":82},[76,17732,17733],{"class":86}," setAge",[76,17735,123],{"class":90},[76,17737,1360],{"class":82},[76,17739,17740],{"class":7296}," age",[76,17742,14495],{"class":90},[76,17744,17745,17747,17750,17752,17754,17756,17758,17760,17763],{"class":78,"line":1698},[76,17746,4592],{"class":82},[76,17748,17749],{"class":90}," (age ",[76,17751,584],{"class":82},[76,17753,587],{"class":119},[76,17755,5340],{"class":82},[76,17757,581],{"class":90},[76,17759,1829],{"class":82},[76,17761,17762],{"class":119}," 150",[76,17764,14495],{"class":90},[76,17766,17767,17769,17771,17774,17776],{"class":78,"line":1711},[76,17768,11784],{"class":90},[76,17770,3298],{"class":82},[76,17772,17773],{"class":126}," \"你个老妖精!\"",[76,17775,3565],{"class":82},[76,17777,10908],{"class":90},[76,17779,17780,17783],{"class":78,"line":1717},[76,17781,17782],{"class":82},"            return",[76,17784,3415],{"class":90},[76,17786,17787],{"class":78,"line":1728},[76,17788,4624],{"class":90},[76,17790,17791,17794,17796],{"class":78,"line":1740},[76,17792,17793],{"class":90},"        m_Age ",[76,17795,370],{"class":82},[76,17797,9875],{"class":90},[76,17799,17800],{"class":78,"line":1746},[76,17801,4283],{"class":90},[76,17803,17804],{"class":78,"line":1751},[76,17805,149],{"emptyLinePlaceholder":148},[76,17807,17808],{"class":78,"line":1756},[76,17809,17810],{"class":540},"    \u002F\u002F情人设置为只写\n",[76,17812,17813,17815,17818,17820,17822,17825],{"class":78,"line":1766},[76,17814,16961],{"class":82},[76,17816,17817],{"class":86}," setLover",[76,17819,123],{"class":90},[76,17821,16969],{"class":86},[76,17823,17824],{"class":7296}," lover",[76,17826,14495],{"class":90},[76,17828,17829,17832,17834],{"class":78,"line":1773},[76,17830,17831],{"class":90},"        m_Lover ",[76,17833,370],{"class":82},[76,17835,17836],{"class":90}," lover;\n",[76,17838,17839],{"class":78,"line":1793},[76,17840,4283],{"class":90},[76,17842,17843],{"class":78,"line":1806},[76,17844,149],{"emptyLinePlaceholder":148},[76,17846,17847],{"class":78,"line":1817},[76,17848,17273],{"class":82},[76,17850,17851,17854],{"class":78,"line":1822},[76,17852,17853],{"class":90},"    string m_Name;",[76,17855,17856],{"class":540}," \u002F\u002F可读可写  姓名\n",[76,17858,17859],{"class":78,"line":1835},[76,17860,15263],{"class":90},[76,17862,17863,17865,17868],{"class":78,"line":1847},[76,17864,4081],{"class":82},[76,17866,17867],{"class":90}," m_Age;",[76,17869,17870],{"class":540}," \u002F\u002F只读  年龄\n",[76,17872,17873],{"class":78,"line":1852},[76,17874,149],{"emptyLinePlaceholder":148},[76,17876,17877,17880],{"class":78,"line":1862},[76,17878,17879],{"class":90},"    string m_Lover;",[76,17881,17882],{"class":540}," \u002F\u002F只写  情人\n",[76,17884,17885],{"class":78,"line":1874},[76,17886,6079],{"class":90},[76,17888,17889],{"class":78,"line":1879},[76,17890,149],{"emptyLinePlaceholder":148},[76,17892,17893,17895,17897],{"class":78,"line":1884},[76,17894,1360],{"class":82},[76,17896,4069],{"class":86},[76,17898,12909],{"class":90},[76,17900,17901],{"class":78,"line":1889},[76,17902,149],{"emptyLinePlaceholder":148},[76,17904,17905],{"class":78,"line":1900},[76,17906,17364],{"class":90},[76,17908,17909],{"class":78,"line":1906},[76,17910,17911],{"class":540},"    \u002F\u002F姓名设置\n",[76,17913,17914,17917,17919,17921,17923],{"class":78,"line":1924},[76,17915,17916],{"class":90},"    p.",[76,17918,17118],{"class":86},[76,17920,123],{"class":90},[76,17922,9994],{"class":126},[76,17924,4807],{"class":90},[76,17926,17927,17929,17931,17934,17936,17939,17942,17944,17946],{"class":78,"line":1929},[76,17928,8607],{"class":90},[76,17930,3298],{"class":82},[76,17932,17933],{"class":126}," \"姓名： \"",[76,17935,3565],{"class":82},[76,17937,17938],{"class":90}," p.",[76,17940,17941],{"class":86},"getName",[76,17943,15103],{"class":90},[76,17945,3298],{"class":82},[76,17947,10908],{"class":90},[76,17949,17950],{"class":78,"line":1944},[76,17951,149],{"emptyLinePlaceholder":148},[76,17953,17954],{"class":78,"line":1950},[76,17955,17956],{"class":540},"    \u002F\u002F年龄设置\n",[76,17958,17959,17961,17964,17966,17968],{"class":78,"line":1965},[76,17960,17916],{"class":90},[76,17962,17963],{"class":86},"setAge",[76,17965,123],{"class":90},[76,17967,2915],{"class":119},[76,17969,4807],{"class":90},[76,17971,17972,17974,17976,17979,17981,17983,17986,17988,17990],{"class":78,"line":1971},[76,17973,8607],{"class":90},[76,17975,3298],{"class":82},[76,17977,17978],{"class":126}," \"年龄： \"",[76,17980,3565],{"class":82},[76,17982,17938],{"class":90},[76,17984,17985],{"class":86},"getAge",[76,17987,15103],{"class":90},[76,17989,3298],{"class":82},[76,17991,10908],{"class":90},[76,17993,17994],{"class":78,"line":1985},[76,17995,149],{"emptyLinePlaceholder":148},[76,17997,17998],{"class":78,"line":1991},[76,17999,18000],{"class":540},"    \u002F\u002F情人设置\n",[76,18002,18003,18005,18008,18010,18013],{"class":78,"line":2005},[76,18004,17916],{"class":90},[76,18006,18007],{"class":86},"setLover",[76,18009,123],{"class":90},[76,18011,18012],{"class":126},"\"苍井\"",[76,18014,4807],{"class":90},[76,18016,18017,18020],{"class":78,"line":2017},[76,18018,18019],{"class":540},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[76,18021,18022],{"class":540},"  \u002F\u002F只写属性，不可以读取\n",[76,18024,18025],{"class":78,"line":2023},[76,18026,149],{"emptyLinePlaceholder":148},[76,18028,18029,18031,18033,18035],{"class":78,"line":2031},[76,18030,4399],{"class":86},[76,18032,123],{"class":90},[76,18034,4404],{"class":126},[76,18036,4807],{"class":90},[76,18038,18039],{"class":78,"line":11880},[76,18040,149],{"emptyLinePlaceholder":148},[76,18042,18043,18045,18047],{"class":78,"line":11901},[76,18044,441],{"class":82},[76,18046,587],{"class":119},[76,18048,3415],{"class":90},[76,18050,18051],{"class":78,"line":11907},[76,18052,3685],{"class":90},[889,18054,18056],{"id":18055},"_814封装案例","8.1.4封装案例",[26,18058,18059],{},[29,18060,18061,18064],{},[2416,18062,18063],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3261,18066,18067,18070],{},[29,18068,18069],{},"求出立方体的面积和体积",[29,18071,18072],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[66,18074,18076],{"className":2264,"code":18075,"language":2266,"meta":71,"style":71},"#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",[73,18077,18078,18084,18094,18101,18105,18109,18114,18144,18148,18158,18168,18178,18182,18191,18195,18231,18235,18244,18248,18264,18268,18273,18282,18286,18293,18297,18306,18310,18317,18321,18330,18334,18341,18345,18350,18367,18371,18417,18421,18430,18434,18438,18442,18451,18455,18459,18464,18468,18474,18480,18486,18490,18494,18499,18521,18525,18579,18583,18591,18595,18600,18605,18618,18625,18641,18652,18658,18681,18687,18710,18724,18744,18750,18761,18784,18806,18811,18817,18831,18844,18849,18863,18868,18874,18879,18893,18898,18903,18917,18929,18934,18947,18952,18957,18962,18975,18980],{"__ignoreMap":71},[76,18079,18080,18082],{"class":78,"line":79},[76,18081,4046],{"class":82},[76,18083,4049],{"class":126},[76,18085,18086,18088,18090,18092],{"class":78,"line":94},[76,18087,4054],{"class":82},[76,18089,4057],{"class":82},[76,18091,4060],{"class":86},[76,18093,3415],{"class":90},[76,18095,18096,18098],{"class":78,"line":133},[76,18097,16747],{"class":82},[76,18099,18100],{"class":86}," Cube\n",[76,18102,18103],{"class":78,"line":145},[76,18104,3666],{"class":90},[76,18106,18107],{"class":78,"line":152},[76,18108,16769],{"class":82},[76,18110,18111],{"class":78,"line":157},[76,18112,18113],{"class":540},"    \u002F\u002F输入长宽高\n",[76,18115,18116,18118,18121,18123,18125,18128,18130,18132,18135,18137,18139,18142],{"class":78,"line":246},[76,18117,16961],{"class":82},[76,18119,18120],{"class":86}," setLwh",[76,18122,123],{"class":90},[76,18124,1360],{"class":82},[76,18126,18127],{"class":7296}," l",[76,18129,2642],{"class":90},[76,18131,1360],{"class":82},[76,18133,18134],{"class":7296}," w",[76,18136,2642],{"class":90},[76,18138,1360],{"class":82},[76,18140,18141],{"class":7296}," h",[76,18143,130],{"class":90},[76,18145,18146],{"class":78,"line":251},[76,18147,4126],{"class":90},[76,18149,18150,18153,18155],{"class":78,"line":257},[76,18151,18152],{"class":90},"        m_L",[76,18154,370],{"class":82},[76,18156,18157],{"class":90},"l;\n",[76,18159,18160,18163,18165],{"class":78,"line":641},[76,18161,18162],{"class":90},"        m_W",[76,18164,370],{"class":82},[76,18166,18167],{"class":90},"w;\n",[76,18169,18170,18173,18175],{"class":78,"line":646},[76,18171,18172],{"class":90},"        m_H",[76,18174,370],{"class":82},[76,18176,18177],{"class":90},"h;\n",[76,18179,18180],{"class":78,"line":659},[76,18181,4283],{"class":90},[76,18183,18184,18186,18189],{"class":78,"line":1608},[76,18185,4081],{"class":82},[76,18187,18188],{"class":86}," mianji",[76,18190,4072],{"class":90},[76,18192,18193],{"class":78,"line":1632},[76,18194,4126],{"class":90},[76,18196,18197,18199,18201,18203,18206,18208,18211,18213,18216,18218,18221,18223,18226,18228],{"class":78,"line":1637},[76,18198,595],{"class":82},[76,18200,16807],{"class":119},[76,18202,2718],{"class":82},[76,18204,18205],{"class":90},"(m_L",[76,18207,2718],{"class":82},[76,18209,18210],{"class":90},"m_W ",[76,18212,376],{"class":82},[76,18214,18215],{"class":90}," m_L",[76,18217,2718],{"class":82},[76,18219,18220],{"class":90},"m_H ",[76,18222,376],{"class":82},[76,18224,18225],{"class":90}," m_W",[76,18227,2718],{"class":82},[76,18229,18230],{"class":90},"m_H);\n",[76,18232,18233],{"class":78,"line":1642},[76,18234,4283],{"class":90},[76,18236,18237,18239,18242],{"class":78,"line":1652},[76,18238,4081],{"class":82},[76,18240,18241],{"class":86}," tiji",[76,18243,4072],{"class":90},[76,18245,18246],{"class":78,"line":1660},[76,18247,4126],{"class":90},[76,18249,18250,18252,18254,18256,18259,18261],{"class":78,"line":1683},[76,18251,595],{"class":82},[76,18253,18215],{"class":90},[76,18255,2718],{"class":82},[76,18257,18258],{"class":90},"m_W",[76,18260,2718],{"class":82},[76,18262,18263],{"class":90},"m_H;\n",[76,18265,18266],{"class":78,"line":1698},[76,18267,4283],{"class":90},[76,18269,18270],{"class":78,"line":1711},[76,18271,18272],{"class":540},"    \u002F\u002F获取长宽高\n",[76,18274,18275,18277,18280],{"class":78,"line":1717},[76,18276,4081],{"class":82},[76,18278,18279],{"class":86}," getLength",[76,18281,4072],{"class":90},[76,18283,18284],{"class":78,"line":1728},[76,18285,4126],{"class":90},[76,18287,18288,18290],{"class":78,"line":1740},[76,18289,595],{"class":82},[76,18291,18292],{"class":90}," m_L;\n",[76,18294,18295],{"class":78,"line":1746},[76,18296,4283],{"class":90},[76,18298,18299,18301,18304],{"class":78,"line":1751},[76,18300,4081],{"class":82},[76,18302,18303],{"class":86}," getWidth",[76,18305,4072],{"class":90},[76,18307,18308],{"class":78,"line":1756},[76,18309,4126],{"class":90},[76,18311,18312,18314],{"class":78,"line":1766},[76,18313,595],{"class":82},[76,18315,18316],{"class":90}," m_W;\n",[76,18318,18319],{"class":78,"line":1773},[76,18320,4283],{"class":90},[76,18322,18323,18325,18328],{"class":78,"line":1793},[76,18324,4081],{"class":82},[76,18326,18327],{"class":86}," getHeight",[76,18329,4072],{"class":90},[76,18331,18332],{"class":78,"line":1806},[76,18333,4126],{"class":90},[76,18335,18336,18338],{"class":78,"line":1817},[76,18337,595],{"class":82},[76,18339,18340],{"class":90}," m_H;\n",[76,18342,18343],{"class":78,"line":1822},[76,18344,4283],{"class":90},[76,18346,18347],{"class":78,"line":1835},[76,18348,18349],{"class":540},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[76,18351,18352,18355,18358,18360,18363,18365],{"class":78,"line":1847},[76,18353,18354],{"class":82},"    bool",[76,18356,18357],{"class":86}," isEqual",[76,18359,123],{"class":90},[76,18361,18362],{"class":86},"Cube",[76,18364,4937],{"class":7296},[76,18366,130],{"class":90},[76,18368,18369],{"class":78,"line":1852},[76,18370,4126],{"class":90},[76,18372,18373,18375,18378,18381,18383,18385,18388,18390,18393,18396,18398,18400,18403,18405,18407,18410,18412,18414],{"class":78,"line":1862},[76,18374,4592],{"class":82},[76,18376,18377],{"class":90}," (c.",[76,18379,18380],{"class":86},"getLength",[76,18382,15103],{"class":90},[76,18384,1250],{"class":82},[76,18386,18387],{"class":90}," m_L ",[76,18389,3821],{"class":82},[76,18391,18392],{"class":90}," c.",[76,18394,18395],{"class":86},"getWidth",[76,18397,15103],{"class":90},[76,18399,1250],{"class":82},[76,18401,18402],{"class":90}," m_W ",[76,18404,3821],{"class":82},[76,18406,18392],{"class":90},[76,18408,18409],{"class":86},"getHeight",[76,18411,15103],{"class":90},[76,18413,1250],{"class":82},[76,18415,18416],{"class":90}," m_H)\n",[76,18418,18419],{"class":78,"line":1874},[76,18420,4605],{"class":90},[76,18422,18423,18425,18428],{"class":78,"line":1879},[76,18424,17782],{"class":82},[76,18426,18427],{"class":119}," true",[76,18429,3415],{"class":90},[76,18431,18432],{"class":78,"line":1884},[76,18433,4624],{"class":90},[76,18435,18436],{"class":78,"line":1889},[76,18437,4665],{"class":82},[76,18439,18440],{"class":78,"line":1900},[76,18441,4605],{"class":90},[76,18443,18444,18446,18449],{"class":78,"line":1906},[76,18445,17782],{"class":82},[76,18447,18448],{"class":119}," false",[76,18450,3415],{"class":90},[76,18452,18453],{"class":78,"line":1924},[76,18454,4624],{"class":90},[76,18456,18457],{"class":78,"line":1929},[76,18458,4283],{"class":90},[76,18460,18461],{"class":78,"line":1944},[76,18462,18463],{"class":540},"    \u002F\u002F私有属性\n",[76,18465,18466],{"class":78,"line":1950},[76,18467,17273],{"class":82},[76,18469,18470,18472],{"class":78,"line":1965},[76,18471,4081],{"class":82},[76,18473,18292],{"class":90},[76,18475,18476,18478],{"class":78,"line":1971},[76,18477,4081],{"class":82},[76,18479,18316],{"class":90},[76,18481,18482,18484],{"class":78,"line":1985},[76,18483,4081],{"class":82},[76,18485,18340],{"class":90},[76,18487,18488],{"class":78,"line":1991},[76,18489,149],{"emptyLinePlaceholder":148},[76,18491,18492],{"class":78,"line":2005},[76,18493,6079],{"class":90},[76,18495,18496],{"class":78,"line":2017},[76,18497,18498],{"class":540},"\u002F\u002F全局函数判断两个立方体是否相等\n",[76,18500,18501,18503,18505,18507,18509,18512,18514,18516,18519],{"class":78,"line":2023},[76,18502,3475],{"class":82},[76,18504,18357],{"class":86},[76,18506,123],{"class":90},[76,18508,18362],{"class":86},[76,18510,18511],{"class":7296}," c1",[76,18513,2642],{"class":90},[76,18515,18362],{"class":86},[76,18517,18518],{"class":7296}," c2",[76,18520,130],{"class":90},[76,18522,18523],{"class":78,"line":2031},[76,18524,3666],{"class":90},[76,18526,18527,18529,18532,18534,18536,18538,18541,18543,18546,18548,18550,18552,18554,18556,18558,18560,18562,18564,18566,18568,18570,18572,18574,18576],{"class":78,"line":11880},[76,18528,441],{"class":82},[76,18530,18531],{"class":90}," (c1.",[76,18533,18380],{"class":86},[76,18535,15103],{"class":90},[76,18537,1250],{"class":82},[76,18539,18540],{"class":90}," c2.",[76,18542,18380],{"class":86},[76,18544,18545],{"class":90},"()) ",[76,18547,3821],{"class":82},[76,18549,18531],{"class":90},[76,18551,18395],{"class":86},[76,18553,15103],{"class":90},[76,18555,1250],{"class":82},[76,18557,18540],{"class":90},[76,18559,18395],{"class":86},[76,18561,18545],{"class":90},[76,18563,3821],{"class":82},[76,18565,18531],{"class":90},[76,18567,18409],{"class":86},[76,18569,15103],{"class":90},[76,18571,1250],{"class":82},[76,18573,18540],{"class":90},[76,18575,18409],{"class":86},[76,18577,18578],{"class":90},"());\n",[76,18580,18581],{"class":78,"line":11901},[76,18582,3685],{"class":90},[76,18584,18585,18587,18589],{"class":78,"line":11907},[76,18586,1360],{"class":82},[76,18588,4069],{"class":86},[76,18590,4072],{"class":90},[76,18592,18593],{"class":78,"line":11921},[76,18594,3666],{"class":90},[76,18596,18597],{"class":78,"line":11927},[76,18598,18599],{"class":90},"    Cube c1;\n",[76,18601,18602],{"class":78,"line":11954},[76,18603,18604],{"class":540},"    \u002F\u002F输入立方体的长宽高\n",[76,18606,18607,18609,18611,18614,18616],{"class":78,"line":11963},[76,18608,3671],{"class":90},[76,18610,3298],{"class":82},[76,18612,18613],{"class":126},"\"请输入第一个立方体的长、宽、高：\"",[76,18615,3298],{"class":82},[76,18617,3320],{"class":90},[76,18619,18620,18622],{"class":78,"line":11969},[76,18621,4081],{"class":82},[76,18623,18624],{"class":90}," l,w,h,l1,w1,h1;\n",[76,18626,18627,18629,18631,18633,18635,18637,18639],{"class":78,"line":11977},[76,18628,4108],{"class":90},[76,18630,3550],{"class":82},[76,18632,2780],{"class":90},[76,18634,3550],{"class":82},[76,18636,3053],{"class":90},[76,18638,3550],{"class":82},[76,18640,18177],{"class":90},[76,18642,18643,18646,18649],{"class":78,"line":11982},[76,18644,18645],{"class":90},"    c1.",[76,18647,18648],{"class":86},"setLwh",[76,18650,18651],{"class":90},"(l,w,h);\n",[76,18653,18655],{"class":78,"line":18654},66,[76,18656,18657],{"class":540},"    \u002F\u002F面积\n",[76,18659,18661,18663,18665,18668,18670,18672,18675,18677,18679],{"class":78,"line":18660},67,[76,18662,3671],{"class":90},[76,18664,3298],{"class":82},[76,18666,18667],{"class":126},"\"立方体的表面积为：\"",[76,18669,3298],{"class":82},[76,18671,16882],{"class":90},[76,18673,18674],{"class":86},"mianji",[76,18676,4522],{"class":90},[76,18678,3298],{"class":82},[76,18680,3320],{"class":90},[76,18682,18684],{"class":78,"line":18683},68,[76,18685,18686],{"class":540},"    \u002F\u002F体积\n",[76,18688,18690,18692,18694,18697,18699,18701,18704,18706,18708],{"class":78,"line":18689},69,[76,18691,3671],{"class":90},[76,18693,3298],{"class":82},[76,18695,18696],{"class":126},"\"立方体的体积为：\"",[76,18698,3298],{"class":82},[76,18700,16882],{"class":90},[76,18702,18703],{"class":86},"tiji",[76,18705,4522],{"class":90},[76,18707,3298],{"class":82},[76,18709,3320],{"class":90},[76,18711,18713,18715,18717,18720,18722],{"class":78,"line":18712},70,[76,18714,3671],{"class":90},[76,18716,3298],{"class":82},[76,18718,18719],{"class":126},"\"请输入第二个立方体的长、宽、高：\"",[76,18721,3298],{"class":82},[76,18723,3320],{"class":90},[76,18725,18727,18729,18731,18734,18736,18739,18741],{"class":78,"line":18726},71,[76,18728,4108],{"class":90},[76,18730,3550],{"class":82},[76,18732,18733],{"class":90},"l1",[76,18735,3550],{"class":82},[76,18737,18738],{"class":90},"w1",[76,18740,3550],{"class":82},[76,18742,18743],{"class":90},"h1;\n",[76,18745,18747],{"class":78,"line":18746},72,[76,18748,18749],{"class":90},"    Cube c2;\n",[76,18751,18753,18756,18758],{"class":78,"line":18752},73,[76,18754,18755],{"class":90},"    c2.",[76,18757,18648],{"class":86},[76,18759,18760],{"class":90},"(l1,w1,h1);\n",[76,18762,18764,18766,18768,18771,18773,18776,18778,18780,18782],{"class":78,"line":18763},74,[76,18765,3671],{"class":90},[76,18767,3298],{"class":82},[76,18769,18770],{"class":126},"\"第二个立方体的表面积为：\"",[76,18772,3298],{"class":82},[76,18774,18775],{"class":90},"c2.",[76,18777,18674],{"class":86},[76,18779,4522],{"class":90},[76,18781,3298],{"class":82},[76,18783,3320],{"class":90},[76,18785,18787,18789,18791,18794,18796,18798,18800,18802,18804],{"class":78,"line":18786},75,[76,18788,3671],{"class":90},[76,18790,3298],{"class":82},[76,18792,18793],{"class":126},"\"第二个立方体的体积为：\"",[76,18795,3298],{"class":82},[76,18797,18775],{"class":90},[76,18799,18703],{"class":86},[76,18801,4522],{"class":90},[76,18803,3298],{"class":82},[76,18805,3320],{"class":90},[76,18807,18809],{"class":78,"line":18808},76,[76,18810,149],{"emptyLinePlaceholder":148},[76,18812,18814],{"class":78,"line":18813},77,[76,18815,18816],{"class":540},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[76,18818,18820,18822,18824,18827,18829],{"class":78,"line":18819},78,[76,18821,3671],{"class":90},[76,18823,3298],{"class":82},[76,18825,18826],{"class":126},"\"内部函数判断结果：\"",[76,18828,3298],{"class":82},[76,18830,3320],{"class":90},[76,18832,18834,18836,18838,18841],{"class":78,"line":18833},79,[76,18835,578],{"class":82},[76,18837,18531],{"class":90},[76,18839,18840],{"class":86},"isEqual",[76,18842,18843],{"class":90},"(c2))\n",[76,18845,18847],{"class":78,"line":18846},80,[76,18848,4126],{"class":90},[76,18850,18852,18854,18856,18859,18861],{"class":78,"line":18851},81,[76,18853,5536],{"class":90},[76,18855,3298],{"class":82},[76,18857,18858],{"class":126},"\"两个立方体相等\"",[76,18860,3298],{"class":82},[76,18862,3320],{"class":90},[76,18864,18866],{"class":78,"line":18865},82,[76,18867,4283],{"class":90},[76,18869,18871],{"class":78,"line":18870},83,[76,18872,18873],{"class":82},"    else\n",[76,18875,18877],{"class":78,"line":18876},84,[76,18878,4126],{"class":90},[76,18880,18882,18884,18886,18889,18891],{"class":78,"line":18881},85,[76,18883,5536],{"class":90},[76,18885,3298],{"class":82},[76,18887,18888],{"class":126},"\"两个立方体不相等\"",[76,18890,3298],{"class":82},[76,18892,3320],{"class":90},[76,18894,18896],{"class":78,"line":18895},86,[76,18897,4283],{"class":90},[76,18899,18901],{"class":78,"line":18900},87,[76,18902,149],{"emptyLinePlaceholder":148},[76,18904,18906,18908,18910,18913,18915],{"class":78,"line":18905},88,[76,18907,3671],{"class":90},[76,18909,3298],{"class":82},[76,18911,18912],{"class":126},"\"全局函数判断结果：\"",[76,18914,3298],{"class":82},[76,18916,3320],{"class":90},[76,18918,18920,18922,18924,18926],{"class":78,"line":18919},89,[76,18921,578],{"class":82},[76,18923,3770],{"class":90},[76,18925,18840],{"class":86},[76,18927,18928],{"class":90},"(c1, c2))\n",[76,18930,18932],{"class":78,"line":18931},90,[76,18933,4126],{"class":90},[76,18935,18937,18939,18941,18943,18945],{"class":78,"line":18936},91,[76,18938,5536],{"class":90},[76,18940,3298],{"class":82},[76,18942,18858],{"class":126},[76,18944,3298],{"class":82},[76,18946,3320],{"class":90},[76,18948,18950],{"class":78,"line":18949},92,[76,18951,4283],{"class":90},[76,18953,18955],{"class":78,"line":18954},93,[76,18956,18873],{"class":82},[76,18958,18960],{"class":78,"line":18959},94,[76,18961,4126],{"class":90},[76,18963,18965,18967,18969,18971,18973],{"class":78,"line":18964},95,[76,18966,5536],{"class":90},[76,18968,3298],{"class":82},[76,18970,18888],{"class":126},[76,18972,3298],{"class":82},[76,18974,3320],{"class":90},[76,18976,18978],{"class":78,"line":18977},96,[76,18979,4283],{"class":90},[76,18981,18983],{"class":78,"line":18982},97,[76,18984,3685],{"class":90},[26,18986,18987],{"start":94},[29,18988,18989],{},[2416,18990,18991],{},"练习案例2：点和圆的关系",[3261,18993,18994],{},[29,18995,18996],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[66,18998,19000],{"className":2264,"code":18999,"language":2266,"meta":71,"style":71},"#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",[73,19001,19002,19008,19018,19025,19032,19036,19040,19045,19079,19084,19099,19113,19117,19121,19128,19135,19139,19145,19149,19153,19157,19179,19202,19207,19221,19236,19240,19244,19250,19255,19260,19264,19290,19294,19324,19352,19380,19397,19401,19414,19418,19422,19426,19439,19443,19447,19455,19459,19463,19467,19472,19476,19487,19494,19503,19513,19524,19531,19544,19555,19565,19576,19583,19597,19602,19612,19620],{"__ignoreMap":71},[76,19003,19004,19006],{"class":78,"line":79},[76,19005,4046],{"class":82},[76,19007,4049],{"class":126},[76,19009,19010,19012,19014,19016],{"class":78,"line":94},[76,19011,4054],{"class":82},[76,19013,4057],{"class":82},[76,19015,4060],{"class":86},[76,19017,3415],{"class":90},[76,19019,19020,19022],{"class":78,"line":133},[76,19021,4046],{"class":82},[76,19023,19024],{"class":126},"\u003Ccmath>\n",[76,19026,19027,19029],{"class":78,"line":145},[76,19028,16747],{"class":82},[76,19030,19031],{"class":86}," Point\n",[76,19033,19034],{"class":78,"line":152},[76,19035,3666],{"class":90},[76,19037,19038],{"class":78,"line":157},[76,19039,16769],{"class":82},[76,19041,19042],{"class":78,"line":246},[76,19043,19044],{"class":540},"    \u002F\u002F赋值\n",[76,19046,19047,19049,19052,19054,19056,19059,19061,19063,19066,19069,19071,19074,19076],{"class":78,"line":251},[76,19048,16961],{"class":82},[76,19050,19051],{"class":86}," setPoint",[76,19053,123],{"class":90},[76,19055,16090],{"class":82},[76,19057,19058],{"class":7296}," x",[76,19060,405],{"class":90},[76,19062,16090],{"class":82},[76,19064,19065],{"class":7296}," y",[76,19067,19068],{"class":90},") { m_x ",[76,19070,370],{"class":82},[76,19072,19073],{"class":90}," x; m_y ",[76,19075,370],{"class":82},[76,19077,19078],{"class":90}," y; }\n",[76,19080,19081],{"class":78,"line":257},[76,19082,19083],{"class":540},"    \u002F\u002F获取坐标\n",[76,19085,19086,19088,19091,19094,19096],{"class":78,"line":641},[76,19087,16791],{"class":82},[76,19089,19090],{"class":86}," getX",[76,19092,19093],{"class":90},"() { ",[76,19095,422],{"class":82},[76,19097,19098],{"class":90}," m_x; }\n",[76,19100,19101,19103,19106,19108,19110],{"class":78,"line":646},[76,19102,16791],{"class":82},[76,19104,19105],{"class":86}," getY",[76,19107,19093],{"class":90},[76,19109,422],{"class":82},[76,19111,19112],{"class":90}," m_y; }\n",[76,19114,19115],{"class":78,"line":659},[76,19116,149],{"emptyLinePlaceholder":148},[76,19118,19119],{"class":78,"line":1608},[76,19120,17273],{"class":82},[76,19122,19123,19125],{"class":78,"line":1632},[76,19124,16791],{"class":82},[76,19126,19127],{"class":90}," m_x;\n",[76,19129,19130,19132],{"class":78,"line":1637},[76,19131,16791],{"class":82},[76,19133,19134],{"class":90}," m_y;\n",[76,19136,19137],{"class":78,"line":1642},[76,19138,6079],{"class":90},[76,19140,19141,19143],{"class":78,"line":1652},[76,19142,16747],{"class":82},[76,19144,16750],{"class":86},[76,19146,19147],{"class":78,"line":1660},[76,19148,3666],{"class":90},[76,19150,19151],{"class":78,"line":1683},[76,19152,16769],{"class":82},[76,19154,19155],{"class":78,"line":1698},[76,19156,19044],{"class":540},[76,19158,19159,19161,19164,19166,19168,19171,19174,19176],{"class":78,"line":1711},[76,19160,16961],{"class":82},[76,19162,19163],{"class":86}," setRadius",[76,19165,123],{"class":90},[76,19167,16090],{"class":82},[76,19169,19170],{"class":7296}," r",[76,19172,19173],{"class":90},") { m_r ",[76,19175,370],{"class":82},[76,19177,19178],{"class":90}," r; }\n",[76,19180,19181,19183,19186,19188,19191,19194,19197,19199],{"class":78,"line":1717},[76,19182,16961],{"class":82},[76,19184,19185],{"class":86}," setCenter",[76,19187,123],{"class":90},[76,19189,19190],{"class":86},"Point",[76,19192,19193],{"class":7296}," center",[76,19195,19196],{"class":90},") { m_center ",[76,19198,370],{"class":82},[76,19200,19201],{"class":90}," center; }\n",[76,19203,19204],{"class":78,"line":1728},[76,19205,19206],{"class":540},"    \u002F\u002F获取属性\n",[76,19208,19209,19211,19214,19216,19218],{"class":78,"line":1740},[76,19210,16791],{"class":82},[76,19212,19213],{"class":86}," getRadius",[76,19215,19093],{"class":90},[76,19217,422],{"class":82},[76,19219,19220],{"class":90}," m_r; }\n",[76,19222,19223,19226,19229,19231,19233],{"class":78,"line":1746},[76,19224,19225],{"class":86},"    Point",[76,19227,19228],{"class":86}," getCenter",[76,19230,19093],{"class":90},[76,19232,422],{"class":82},[76,19234,19235],{"class":90}," m_center; }\n",[76,19237,19238],{"class":78,"line":1751},[76,19239,149],{"emptyLinePlaceholder":148},[76,19241,19242],{"class":78,"line":1756},[76,19243,17273],{"class":82},[76,19245,19246,19248],{"class":78,"line":1766},[76,19247,16791],{"class":82},[76,19249,16781],{"class":90},[76,19251,19252],{"class":78,"line":1773},[76,19253,19254],{"class":540},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[76,19256,19257],{"class":78,"line":1793},[76,19258,19259],{"class":90},"    Point m_center;\n",[76,19261,19262],{"class":78,"line":1806},[76,19263,6079],{"class":90},[76,19265,19266,19268,19271,19273,19276,19278,19280,19282,19284,19286,19288],{"class":78,"line":1817},[76,19267,7444],{"class":82},[76,19269,19270],{"class":86}," isInCircle",[76,19272,123],{"class":90},[76,19274,19275],{"class":86},"Circle",[76,19277,12641],{"class":82},[76,19279,2552],{"class":7296},[76,19281,2642],{"class":90},[76,19283,19190],{"class":86},[76,19285,12641],{"class":82},[76,19287,19],{"class":7296},[76,19289,130],{"class":90},[76,19291,19292],{"class":78,"line":1822},[76,19293,3666],{"class":90},[76,19295,19296,19298,19301,19303,19305,19308,19311,19314,19316,19318,19320,19322],{"class":78,"line":1835},[76,19297,16791],{"class":82},[76,19299,19300],{"class":90}," dx ",[76,19302,370],{"class":82},[76,19304,18392],{"class":90},[76,19306,19307],{"class":86},"getCenter",[76,19309,19310],{"class":90},"().",[76,19312,19313],{"class":86},"getX",[76,19315,15103],{"class":90},[76,19317,666],{"class":82},[76,19319,17938],{"class":90},[76,19321,19313],{"class":86},[76,19323,7716],{"class":90},[76,19325,19326,19328,19331,19333,19335,19337,19339,19342,19344,19346,19348,19350],{"class":78,"line":1847},[76,19327,16791],{"class":82},[76,19329,19330],{"class":90}," dy ",[76,19332,370],{"class":82},[76,19334,18392],{"class":90},[76,19336,19307],{"class":86},[76,19338,19310],{"class":90},[76,19340,19341],{"class":86},"getY",[76,19343,15103],{"class":90},[76,19345,666],{"class":82},[76,19347,17938],{"class":90},[76,19349,19341],{"class":86},[76,19351,7716],{"class":90},[76,19353,19354,19356,19359,19361,19364,19367,19369,19371,19373,19375,19377],{"class":78,"line":1852},[76,19355,16791],{"class":82},[76,19357,19358],{"class":90}," distance ",[76,19360,370],{"class":82},[76,19362,19363],{"class":86}," sqrt",[76,19365,19366],{"class":90},"(dx ",[76,19368,2718],{"class":82},[76,19370,19300],{"class":90},[76,19372,376],{"class":82},[76,19374,19330],{"class":90},[76,19376,2718],{"class":82},[76,19378,19379],{"class":90}," dy);\n",[76,19381,19382,19384,19387,19389,19391,19394],{"class":78,"line":1862},[76,19383,578],{"class":82},[76,19385,19386],{"class":90}," (distance ",[76,19388,584],{"class":82},[76,19390,18392],{"class":90},[76,19392,19393],{"class":86},"getRadius",[76,19395,19396],{"class":90},"())\n",[76,19398,19399],{"class":78,"line":1874},[76,19400,4126],{"class":90},[76,19402,19403,19405,19407,19410,19412],{"class":78,"line":1879},[76,19404,11735],{"class":90},[76,19406,3298],{"class":82},[76,19408,19409],{"class":126}," \"点在圆内\"",[76,19411,3565],{"class":82},[76,19413,10908],{"class":90},[76,19415,19416],{"class":78,"line":1884},[76,19417,4283],{"class":90},[76,19419,19420],{"class":78,"line":1889},[76,19421,18873],{"class":82},[76,19423,19424],{"class":78,"line":1900},[76,19425,4126],{"class":90},[76,19427,19428,19430,19432,19435,19437],{"class":78,"line":1906},[76,19429,11735],{"class":90},[76,19431,3298],{"class":82},[76,19433,19434],{"class":126}," \"点在圆外\"",[76,19436,3565],{"class":82},[76,19438,10908],{"class":90},[76,19440,19441],{"class":78,"line":1924},[76,19442,4283],{"class":90},[76,19444,19445],{"class":78,"line":1929},[76,19446,3685],{"class":90},[76,19448,19449,19451,19453],{"class":78,"line":1944},[76,19450,1360],{"class":82},[76,19452,4069],{"class":86},[76,19454,4072],{"class":90},[76,19456,19457],{"class":78,"line":1950},[76,19458,3666],{"class":90},[76,19460,19461],{"class":78,"line":1965},[76,19462,17105],{"class":540},[76,19464,19465],{"class":78,"line":1971},[76,19466,16852],{"class":90},[76,19468,19469],{"class":78,"line":1985},[76,19470,19471],{"class":90},"    Point p1;\n",[76,19473,19474],{"class":78,"line":1991},[76,19475,19044],{"class":540},[76,19477,19478,19480,19482,19485],{"class":78,"line":2005},[76,19479,3671],{"class":90},[76,19481,3298],{"class":82},[76,19483,19484],{"class":126},"\"请输入圆的半径：\"",[76,19486,3415],{"class":90},[76,19488,19489,19491],{"class":78,"line":2017},[76,19490,16791],{"class":82},[76,19492,19493],{"class":90}," r;\n",[76,19495,19496,19498,19500],{"class":78,"line":2023},[76,19497,4108],{"class":90},[76,19499,3550],{"class":82},[76,19501,19502],{"class":90},"r;\n",[76,19504,19505,19507,19510],{"class":78,"line":2031},[76,19506,18645],{"class":90},[76,19508,19509],{"class":86},"setRadius",[76,19511,19512],{"class":90},"(r);\n",[76,19514,19515,19517,19519,19522],{"class":78,"line":11880},[76,19516,3671],{"class":90},[76,19518,3298],{"class":82},[76,19520,19521],{"class":126},"\"请输入圆心坐标：\"",[76,19523,3415],{"class":90},[76,19525,19526,19528],{"class":78,"line":11901},[76,19527,16791],{"class":82},[76,19529,19530],{"class":90}," x, y;\n",[76,19532,19533,19535,19537,19539,19541],{"class":78,"line":11907},[76,19534,4108],{"class":90},[76,19536,3550],{"class":82},[76,19538,3078],{"class":90},[76,19540,3550],{"class":82},[76,19542,19543],{"class":90},"y;\n",[76,19545,19546,19549,19552],{"class":78,"line":11921},[76,19547,19548],{"class":90},"    p1.",[76,19550,19551],{"class":86},"setPoint",[76,19553,19554],{"class":90},"(x, y);\n",[76,19556,19557,19559,19562],{"class":78,"line":11927},[76,19558,18645],{"class":90},[76,19560,19561],{"class":86},"setCenter",[76,19563,19564],{"class":90},"(p1);\n",[76,19566,19567,19569,19571,19574],{"class":78,"line":11954},[76,19568,3671],{"class":90},[76,19570,3298],{"class":82},[76,19572,19573],{"class":126},"\"请输入测试点坐标：\"",[76,19575,3415],{"class":90},[76,19577,19578,19580],{"class":78,"line":11963},[76,19579,16791],{"class":82},[76,19581,19582],{"class":90}," x1, y1;\n",[76,19584,19585,19587,19589,19592,19594],{"class":78,"line":11969},[76,19586,4108],{"class":90},[76,19588,3550],{"class":82},[76,19590,19591],{"class":90},"x1",[76,19593,3550],{"class":82},[76,19595,19596],{"class":90},"y1;\n",[76,19598,19599],{"class":78,"line":11977},[76,19600,19601],{"class":90},"    Point p2;\n",[76,19603,19604,19607,19609],{"class":78,"line":11982},[76,19605,19606],{"class":90},"    p2.",[76,19608,19551],{"class":86},[76,19610,19611],{"class":90},"(x1, y1);\n",[76,19613,19614,19617],{"class":78,"line":18654},[76,19615,19616],{"class":86},"    isInCircle",[76,19618,19619],{"class":90},"(c1, p2);\n",[76,19621,19622],{"class":78,"line":18660},[76,19623,3685],{"class":90},[19,19625,19626],{},"在类中可以让另一个类作为本来的成员",[19,19628,19629],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19631,19632],{},"创建point.h",[66,19634,19636],{"className":2264,"code":19635,"language":2266,"meta":71,"style":71},"#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",[73,19637,19638,19649,19655,19665,19671,19675,19680,19684,19688,19708,19712,19720,19728,19732,19736,19742,19748],{"__ignoreMap":71},[76,19639,19640,19643,19646],{"class":78,"line":79},[76,19641,19642],{"class":82},"#pragma",[76,19644,19645],{"class":86}," once",[76,19647,19648],{"class":540}," \u002F\u002F防止头文件重复包含\n",[76,19650,19651,19653],{"class":78,"line":94},[76,19652,4046],{"class":82},[76,19654,4049],{"class":126},[76,19656,19657,19659,19661,19663],{"class":78,"line":133},[76,19658,4054],{"class":82},[76,19660,4057],{"class":82},[76,19662,4060],{"class":86},[76,19664,3415],{"class":90},[76,19666,19667,19669],{"class":78,"line":145},[76,19668,16747],{"class":82},[76,19670,19031],{"class":86},[76,19672,19673],{"class":78,"line":152},[76,19674,3666],{"class":90},[76,19676,19677],{"class":78,"line":157},[76,19678,19679],{"class":540},"\u002F\u002F做好声明与变量定义就可以\n",[76,19681,19682],{"class":78,"line":246},[76,19683,16769],{"class":82},[76,19685,19686],{"class":78,"line":251},[76,19687,19044],{"class":540},[76,19689,19690,19692,19694,19696,19698,19700,19702,19704,19706],{"class":78,"line":257},[76,19691,16961],{"class":82},[76,19693,19051],{"class":86},[76,19695,123],{"class":90},[76,19697,16090],{"class":82},[76,19699,19058],{"class":7296},[76,19701,405],{"class":90},[76,19703,16090],{"class":82},[76,19705,19065],{"class":7296},[76,19707,4807],{"class":90},[76,19709,19710],{"class":78,"line":641},[76,19711,19083],{"class":540},[76,19713,19714,19716,19718],{"class":78,"line":646},[76,19715,16791],{"class":82},[76,19717,19090],{"class":86},[76,19719,7716],{"class":90},[76,19721,19722,19724,19726],{"class":78,"line":659},[76,19723,16791],{"class":82},[76,19725,19105],{"class":86},[76,19727,7716],{"class":90},[76,19729,19730],{"class":78,"line":1608},[76,19731,149],{"emptyLinePlaceholder":148},[76,19733,19734],{"class":78,"line":1632},[76,19735,17273],{"class":82},[76,19737,19738,19740],{"class":78,"line":1637},[76,19739,16791],{"class":82},[76,19741,19127],{"class":90},[76,19743,19744,19746],{"class":78,"line":1642},[76,19745,16791],{"class":82},[76,19747,19134],{"class":90},[76,19749,19750],{"class":78,"line":1652},[76,19751,6079],{"class":90},[19,19753,19754],{},"创建point.cpp",[66,19756,19758],{"className":2264,"code":19757,"language":2266,"meta":71,"style":71},"#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",[73,19759,19760,19767,19772,19806,19810,19826],{"__ignoreMap":71},[76,19761,19762,19764],{"class":78,"line":79},[76,19763,4046],{"class":82},[76,19765,19766],{"class":126},"\u003Cpoint.h>\n",[76,19768,19769],{"class":78,"line":94},[76,19770,19771],{"class":540},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[76,19773,19774,19776,19779,19782,19784,19786,19788,19790,19792,19794,19796,19798,19800,19802,19804],{"class":78,"line":133},[76,19775,16961],{"class":82},[76,19777,19778],{"class":86}," Point",[76,19780,19781],{"class":90},"::",[76,19783,19551],{"class":86},[76,19785,123],{"class":90},[76,19787,16090],{"class":82},[76,19789,19058],{"class":7296},[76,19791,405],{"class":90},[76,19793,16090],{"class":82},[76,19795,19065],{"class":7296},[76,19797,19068],{"class":90},[76,19799,370],{"class":82},[76,19801,19073],{"class":90},[76,19803,370],{"class":82},[76,19805,19078],{"class":90},[76,19807,19808],{"class":78,"line":145},[76,19809,19083],{"class":540},[76,19811,19812,19814,19816,19818,19820,19822,19824],{"class":78,"line":152},[76,19813,16791],{"class":82},[76,19815,19778],{"class":86},[76,19817,19781],{"class":90},[76,19819,19313],{"class":86},[76,19821,19093],{"class":90},[76,19823,422],{"class":82},[76,19825,19098],{"class":90},[76,19827,19828,19830,19832,19834,19836,19838,19840],{"class":78,"line":157},[76,19829,16791],{"class":82},[76,19831,19778],{"class":86},[76,19833,19781],{"class":90},[76,19835,19341],{"class":86},[76,19837,19093],{"class":90},[76,19839,422],{"class":82},[76,19841,19112],{"class":90},[19,19843,19844],{},"创建circle.h",[66,19846,19848],{"className":2264,"code":19847,"language":2266,"meta":71,"style":71},"#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",[73,19849,19850,19857,19863,19873,19879,19885,19889,19893,19897,19911,19925,19929,19937,19945,19949,19953,19959,19963,19967],{"__ignoreMap":71},[76,19851,19852,19854],{"class":78,"line":79},[76,19853,19642],{"class":82},[76,19855,19856],{"class":86}," once\n",[76,19858,19859,19861],{"class":78,"line":94},[76,19860,4046],{"class":82},[76,19862,4049],{"class":126},[76,19864,19865,19867,19869,19871],{"class":78,"line":133},[76,19866,4054],{"class":82},[76,19868,4057],{"class":82},[76,19870,4060],{"class":86},[76,19872,3415],{"class":90},[76,19874,19875,19877],{"class":78,"line":145},[76,19876,4046],{"class":82},[76,19878,19766],{"class":126},[76,19880,19881,19883],{"class":78,"line":152},[76,19882,16747],{"class":82},[76,19884,16750],{"class":86},[76,19886,19887],{"class":78,"line":157},[76,19888,3666],{"class":90},[76,19890,19891],{"class":78,"line":246},[76,19892,16769],{"class":82},[76,19894,19895],{"class":78,"line":251},[76,19896,19044],{"class":540},[76,19898,19899,19901,19903,19905,19907,19909],{"class":78,"line":257},[76,19900,16961],{"class":82},[76,19902,19163],{"class":86},[76,19904,123],{"class":90},[76,19906,16090],{"class":82},[76,19908,19170],{"class":7296},[76,19910,4807],{"class":90},[76,19912,19913,19915,19917,19919,19921,19923],{"class":78,"line":641},[76,19914,16961],{"class":82},[76,19916,19185],{"class":86},[76,19918,123],{"class":90},[76,19920,19190],{"class":86},[76,19922,19193],{"class":7296},[76,19924,4807],{"class":90},[76,19926,19927],{"class":78,"line":646},[76,19928,19206],{"class":540},[76,19930,19931,19933,19935],{"class":78,"line":659},[76,19932,16791],{"class":82},[76,19934,19213],{"class":86},[76,19936,7716],{"class":90},[76,19938,19939,19941,19943],{"class":78,"line":1608},[76,19940,19225],{"class":86},[76,19942,19228],{"class":86},[76,19944,7716],{"class":90},[76,19946,19947],{"class":78,"line":1632},[76,19948,149],{"emptyLinePlaceholder":148},[76,19950,19951],{"class":78,"line":1637},[76,19952,17273],{"class":82},[76,19954,19955,19957],{"class":78,"line":1642},[76,19956,16791],{"class":82},[76,19958,16781],{"class":90},[76,19960,19961],{"class":78,"line":1652},[76,19962,19254],{"class":540},[76,19964,19965],{"class":78,"line":1660},[76,19966,19259],{"class":90},[76,19968,19969],{"class":78,"line":1683},[76,19970,6079],{"class":90},[19,19972,19973],{},"创建circle.cpp",[66,19975,19977],{"className":2264,"code":19976,"language":2266,"meta":71,"style":71},"#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",[73,19978,19979,19986,20009,20031,20036,20052],{"__ignoreMap":71},[76,19980,19981,19983],{"class":78,"line":79},[76,19982,4046],{"class":82},[76,19984,19985],{"class":126},"\u003Ccircle.h>\n",[76,19987,19988,19990,19993,19995,19997,19999,20001,20003,20005,20007],{"class":78,"line":94},[76,19989,7444],{"class":82},[76,19991,19992],{"class":86}," Circle",[76,19994,19781],{"class":90},[76,19996,19509],{"class":86},[76,19998,123],{"class":90},[76,20000,16090],{"class":82},[76,20002,19170],{"class":7296},[76,20004,19173],{"class":90},[76,20006,370],{"class":82},[76,20008,19178],{"class":90},[76,20010,20011,20013,20015,20017,20019,20021,20023,20025,20027,20029],{"class":78,"line":133},[76,20012,7444],{"class":82},[76,20014,19992],{"class":86},[76,20016,19781],{"class":90},[76,20018,19561],{"class":86},[76,20020,123],{"class":90},[76,20022,19190],{"class":86},[76,20024,19193],{"class":7296},[76,20026,19196],{"class":90},[76,20028,370],{"class":82},[76,20030,19201],{"class":90},[76,20032,20033],{"class":78,"line":145},[76,20034,20035],{"class":540},"\u002F\u002F获取属性\n",[76,20037,20038,20040,20042,20044,20046,20048,20050],{"class":78,"line":152},[76,20039,16090],{"class":82},[76,20041,19992],{"class":86},[76,20043,19781],{"class":90},[76,20045,19393],{"class":86},[76,20047,19093],{"class":90},[76,20049,422],{"class":82},[76,20051,19220],{"class":90},[76,20053,20054,20056,20058,20060,20062,20064,20066],{"class":78,"line":157},[76,20055,19190],{"class":86},[76,20057,19992],{"class":86},[76,20059,19781],{"class":90},[76,20061,19307],{"class":86},[76,20063,19093],{"class":90},[76,20065,422],{"class":82},[76,20067,19235],{"class":90},[19,20069,20070],{},"使用封装的类",[66,20072,20074],{"className":2264,"code":20073,"language":2266,"meta":71,"style":71},"#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",[73,20075,20076,20082,20092,20098,20104,20128,20132,20158,20184,20208,20222,20226,20238,20242,20246,20250,20262,20266,20270,20278,20282,20286,20290,20294,20298,20308,20314,20322,20330,20340,20346,20358,20366,20374,20384,20390,20402,20406,20414,20420],{"__ignoreMap":71},[76,20077,20078,20080],{"class":78,"line":79},[76,20079,4046],{"class":82},[76,20081,4049],{"class":126},[76,20083,20084,20086,20088,20090],{"class":78,"line":94},[76,20085,4054],{"class":82},[76,20087,4057],{"class":82},[76,20089,4060],{"class":86},[76,20091,3415],{"class":90},[76,20093,20094,20096],{"class":78,"line":133},[76,20095,4046],{"class":82},[76,20097,19985],{"class":126},[76,20099,20100,20102],{"class":78,"line":145},[76,20101,4046],{"class":82},[76,20103,19766],{"class":126},[76,20105,20106,20108,20110,20112,20114,20116,20118,20120,20122,20124,20126],{"class":78,"line":152},[76,20107,7444],{"class":82},[76,20109,19270],{"class":86},[76,20111,123],{"class":90},[76,20113,19275],{"class":86},[76,20115,12641],{"class":82},[76,20117,2552],{"class":7296},[76,20119,2642],{"class":90},[76,20121,19190],{"class":86},[76,20123,12641],{"class":82},[76,20125,19],{"class":7296},[76,20127,130],{"class":90},[76,20129,20130],{"class":78,"line":157},[76,20131,3666],{"class":90},[76,20133,20134,20136,20138,20140,20142,20144,20146,20148,20150,20152,20154,20156],{"class":78,"line":246},[76,20135,16791],{"class":82},[76,20137,19300],{"class":90},[76,20139,370],{"class":82},[76,20141,18392],{"class":90},[76,20143,19307],{"class":86},[76,20145,19310],{"class":90},[76,20147,19313],{"class":86},[76,20149,15103],{"class":90},[76,20151,666],{"class":82},[76,20153,17938],{"class":90},[76,20155,19313],{"class":86},[76,20157,7716],{"class":90},[76,20159,20160,20162,20164,20166,20168,20170,20172,20174,20176,20178,20180,20182],{"class":78,"line":251},[76,20161,16791],{"class":82},[76,20163,19330],{"class":90},[76,20165,370],{"class":82},[76,20167,18392],{"class":90},[76,20169,19307],{"class":86},[76,20171,19310],{"class":90},[76,20173,19341],{"class":86},[76,20175,15103],{"class":90},[76,20177,666],{"class":82},[76,20179,17938],{"class":90},[76,20181,19341],{"class":86},[76,20183,7716],{"class":90},[76,20185,20186,20188,20190,20192,20194,20196,20198,20200,20202,20204,20206],{"class":78,"line":257},[76,20187,16791],{"class":82},[76,20189,19358],{"class":90},[76,20191,370],{"class":82},[76,20193,19363],{"class":86},[76,20195,19366],{"class":90},[76,20197,2718],{"class":82},[76,20199,19300],{"class":90},[76,20201,376],{"class":82},[76,20203,19330],{"class":90},[76,20205,2718],{"class":82},[76,20207,19379],{"class":90},[76,20209,20210,20212,20214,20216,20218,20220],{"class":78,"line":641},[76,20211,578],{"class":82},[76,20213,19386],{"class":90},[76,20215,584],{"class":82},[76,20217,18392],{"class":90},[76,20219,19393],{"class":86},[76,20221,19396],{"class":90},[76,20223,20224],{"class":78,"line":646},[76,20225,4126],{"class":90},[76,20227,20228,20230,20232,20234,20236],{"class":78,"line":659},[76,20229,11735],{"class":90},[76,20231,3298],{"class":82},[76,20233,19409],{"class":126},[76,20235,3565],{"class":82},[76,20237,10908],{"class":90},[76,20239,20240],{"class":78,"line":1608},[76,20241,4283],{"class":90},[76,20243,20244],{"class":78,"line":1632},[76,20245,18873],{"class":82},[76,20247,20248],{"class":78,"line":1637},[76,20249,4126],{"class":90},[76,20251,20252,20254,20256,20258,20260],{"class":78,"line":1642},[76,20253,11735],{"class":90},[76,20255,3298],{"class":82},[76,20257,19434],{"class":126},[76,20259,3565],{"class":82},[76,20261,10908],{"class":90},[76,20263,20264],{"class":78,"line":1652},[76,20265,4283],{"class":90},[76,20267,20268],{"class":78,"line":1660},[76,20269,3685],{"class":90},[76,20271,20272,20274,20276],{"class":78,"line":1683},[76,20273,1360],{"class":82},[76,20275,4069],{"class":86},[76,20277,4072],{"class":90},[76,20279,20280],{"class":78,"line":1698},[76,20281,3666],{"class":90},[76,20283,20284],{"class":78,"line":1711},[76,20285,17105],{"class":540},[76,20287,20288],{"class":78,"line":1717},[76,20289,16852],{"class":90},[76,20291,20292],{"class":78,"line":1728},[76,20293,19471],{"class":90},[76,20295,20296],{"class":78,"line":1740},[76,20297,19044],{"class":540},[76,20299,20300,20302,20304,20306],{"class":78,"line":1746},[76,20301,3671],{"class":90},[76,20303,3298],{"class":82},[76,20305,19484],{"class":126},[76,20307,3415],{"class":90},[76,20309,20310,20312],{"class":78,"line":1751},[76,20311,16791],{"class":82},[76,20313,19493],{"class":90},[76,20315,20316,20318,20320],{"class":78,"line":1756},[76,20317,4108],{"class":90},[76,20319,3550],{"class":82},[76,20321,19502],{"class":90},[76,20323,20324,20326,20328],{"class":78,"line":1766},[76,20325,18645],{"class":90},[76,20327,19509],{"class":86},[76,20329,19512],{"class":90},[76,20331,20332,20334,20336,20338],{"class":78,"line":1773},[76,20333,3671],{"class":90},[76,20335,3298],{"class":82},[76,20337,19521],{"class":126},[76,20339,3415],{"class":90},[76,20341,20342,20344],{"class":78,"line":1793},[76,20343,16791],{"class":82},[76,20345,19530],{"class":90},[76,20347,20348,20350,20352,20354,20356],{"class":78,"line":1806},[76,20349,4108],{"class":90},[76,20351,3550],{"class":82},[76,20353,3078],{"class":90},[76,20355,3550],{"class":82},[76,20357,19543],{"class":90},[76,20359,20360,20362,20364],{"class":78,"line":1817},[76,20361,19548],{"class":90},[76,20363,19551],{"class":86},[76,20365,19554],{"class":90},[76,20367,20368,20370,20372],{"class":78,"line":1822},[76,20369,18645],{"class":90},[76,20371,19561],{"class":86},[76,20373,19564],{"class":90},[76,20375,20376,20378,20380,20382],{"class":78,"line":1835},[76,20377,3671],{"class":90},[76,20379,3298],{"class":82},[76,20381,19573],{"class":126},[76,20383,3415],{"class":90},[76,20385,20386,20388],{"class":78,"line":1847},[76,20387,16791],{"class":82},[76,20389,19582],{"class":90},[76,20391,20392,20394,20396,20398,20400],{"class":78,"line":1852},[76,20393,4108],{"class":90},[76,20395,3550],{"class":82},[76,20397,19591],{"class":90},[76,20399,3550],{"class":82},[76,20401,19596],{"class":90},[76,20403,20404],{"class":78,"line":1862},[76,20405,19601],{"class":90},[76,20407,20408,20410,20412],{"class":78,"line":1874},[76,20409,19606],{"class":90},[76,20411,19551],{"class":86},[76,20413,19611],{"class":90},[76,20415,20416,20418],{"class":78,"line":1879},[76,20417,19616],{"class":86},[76,20419,19619],{"class":90},[76,20421,20422],{"class":78,"line":1884},[76,20423,3685],{"class":90},[14,20425,20427],{"id":20426},"_82对象的初始化清理","8.2对象的初始化清理",[3261,20429,20430,20433],{},[29,20431,20432],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20434,20435],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[889,20437,20439],{"id":20438},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20441,20442,20443,20446],{},"对象的",[2416,20444,20445],{},"初始化和清理","也是两个非常重要的安全问题",[19,20448,20449],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20451,20452],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20454,20455,20456,20459,20460,20463],{},"c++利用了",[2416,20457,20458],{},"构造函数","和",[2416,20461,20462],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20465,20466,20467],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2416,20468,20469],{},"我们不提供构造和析构，编译器会提供",[19,20471,20472],{},[2416,20473,20474],{},"编译器提供的构造函数和析构函数是空实现。",[3261,20476,20477,20480],{},[29,20478,20479],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20481,20482,20483,20486],{},"析构函数：主要作用在于对象",[2416,20484,20485],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20488,20489,20492],{},[2416,20490,20491],{},"构造函数语法：",[73,20493,20494],{},"类名(){}",[26,20496,20497,20500,20503,20506,20509],{},[29,20498,20499],{},"构造函数，没有返回值也不写void",[29,20501,20502],{},"函数名称与类名相同",[29,20504,20505],{},"构造函数可以有参数，因此可以发生重载",[29,20507,20508],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20510,20511,20512,2693],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[73,20513,20514],{},"Person(){}",[19,20516,20517,15848,20520],{},[2416,20518,20519],{},"析构函数语法：",[73,20521,20522],{},"~类名(){}",[26,20524,20525,20528,20531,20537],{},[29,20526,20527],{},"析构函数，没有返回值也不写void",[29,20529,20530],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20532,20533,20534],{},"析构函数不可以有参数，因此",[2416,20535,20536],{},"不可以发生重载",[29,20538,20539],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[66,20541,20543],{"className":2264,"code":20542,"language":2266,"meta":71,"style":71},"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",[73,20544,20545,20551,20555,20559,20564,20571,20575,20588,20592,20597,20604,20608,20621,20625,20629,20633,20637,20645,20649,20657,20661,20665,20673,20677,20682,20686,20693,20697,20710,20714,20722],{"__ignoreMap":71},[76,20546,20547,20549],{"class":78,"line":79},[76,20548,16747],{"class":82},[76,20550,17222],{"class":86},[76,20552,20553],{"class":78,"line":94},[76,20554,3666],{"class":90},[76,20556,20557],{"class":78,"line":133},[76,20558,16769],{"class":82},[76,20560,20561],{"class":78,"line":145},[76,20562,20563],{"class":540},"    \u002F\u002F构造函数\n",[76,20565,20566,20569],{"class":78,"line":152},[76,20567,20568],{"class":86},"    Person",[76,20570,4072],{"class":90},[76,20572,20573],{"class":78,"line":157},[76,20574,4126],{"class":90},[76,20576,20577,20579,20581,20584,20586],{"class":78,"line":246},[76,20578,11735],{"class":90},[76,20580,3298],{"class":82},[76,20582,20583],{"class":126}," \"Person的构造函数调用\"",[76,20585,3565],{"class":82},[76,20587,10908],{"class":90},[76,20589,20590],{"class":78,"line":251},[76,20591,4283],{"class":90},[76,20593,20594],{"class":78,"line":257},[76,20595,20596],{"class":540},"    \u002F\u002F析构函数\n",[76,20598,20599,20602],{"class":78,"line":641},[76,20600,20601],{"class":86},"    ~Person",[76,20603,4072],{"class":90},[76,20605,20606],{"class":78,"line":646},[76,20607,4126],{"class":90},[76,20609,20610,20612,20614,20617,20619],{"class":78,"line":659},[76,20611,11735],{"class":90},[76,20613,3298],{"class":82},[76,20615,20616],{"class":126}," \"Person的析构函数调用\"",[76,20618,3565],{"class":82},[76,20620,10908],{"class":90},[76,20622,20623],{"class":78,"line":1608},[76,20624,4283],{"class":90},[76,20626,20627],{"class":78,"line":1632},[76,20628,149],{"emptyLinePlaceholder":148},[76,20630,20631],{"class":78,"line":1637},[76,20632,6079],{"class":90},[76,20634,20635],{"class":78,"line":1642},[76,20636,149],{"emptyLinePlaceholder":148},[76,20638,20639,20641,20643],{"class":78,"line":1652},[76,20640,7444],{"class":82},[76,20642,7668],{"class":86},[76,20644,4072],{"class":90},[76,20646,20647],{"class":78,"line":1660},[76,20648,3666],{"class":90},[76,20650,20651,20654],{"class":78,"line":1683},[76,20652,20653],{"class":90},"    Person p;",[76,20655,20656],{"class":540},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[76,20658,20659],{"class":78,"line":1698},[76,20660,3685],{"class":90},[76,20662,20663],{"class":78,"line":1711},[76,20664,149],{"emptyLinePlaceholder":148},[76,20666,20667,20669,20671],{"class":78,"line":1717},[76,20668,1360],{"class":82},[76,20670,4069],{"class":86},[76,20672,12909],{"class":90},[76,20674,20675],{"class":78,"line":1728},[76,20676,15263],{"class":90},[76,20678,20679],{"class":78,"line":1740},[76,20680,20681],{"class":540},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[76,20683,20684],{"class":78,"line":1746},[76,20685,149],{"emptyLinePlaceholder":148},[76,20687,20688,20690],{"class":78,"line":1751},[76,20689,20653],{"class":90},[76,20691,20692],{"class":540},"\u002F\u002F只有构造函数\n",[76,20694,20695],{"class":78,"line":1756},[76,20696,149],{"emptyLinePlaceholder":148},[76,20698,20699,20701,20703,20705,20707],{"class":78,"line":1766},[76,20700,4399],{"class":86},[76,20702,123],{"class":90},[76,20704,4404],{"class":126},[76,20706,8045],{"class":90},[76,20708,20709],{"class":540},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[76,20711,20712],{"class":78,"line":1773},[76,20713,149],{"emptyLinePlaceholder":148},[76,20715,20716,20718,20720],{"class":78,"line":1793},[76,20717,441],{"class":82},[76,20719,587],{"class":119},[76,20721,3415],{"class":90},[76,20723,20724],{"class":78,"line":1806},[76,20725,3685],{"class":90},[19,20727,20728],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[889,20730,20732],{"id":20731},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20734,20735],{},"两种分类方式：",[19,20737,20738],{},"​\t按参数分为： 有参构造和无参构造",[19,20740,20741],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20743,20744],{},"三种调用方式：",[19,20746,20747],{},"​\t括号法",[19,20749,20750],{},"​\t显示法",[19,20752,20753],{},"​\t隐式转换法",[66,20755,20757],{"className":2264,"code":20756,"language":2266,"meta":71,"style":71},"#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",[73,20758,20759,20765,20775,20780,20785,20790,20795,20799,20807,20811,20815,20819,20825,20829,20842,20846,20858,20862,20871,20884,20888,20892,20898,20902,20915,20919,20924,20940,20944,20949,20958,20971,20975,20981,20985,20990,20998,21002,21007,21011,21019,21023,21028,21033,21038,21043,21048,21052,21057,21062,21067,21072,21076,21081,21086,21102,21114,21119,21123,21128,21133,21138,21142,21147,21161,21174,21178,21186,21190,21196,21202,21210],{"__ignoreMap":71},[76,20760,20761,20763],{"class":78,"line":79},[76,20762,4046],{"class":82},[76,20764,4049],{"class":126},[76,20766,20767,20769,20771,20773],{"class":78,"line":94},[76,20768,4054],{"class":82},[76,20770,4057],{"class":82},[76,20772,4060],{"class":86},[76,20774,3415],{"class":90},[76,20776,20777],{"class":78,"line":133},[76,20778,20779],{"class":540},"\u002F\u002F1.构造函数的分类及调用\n",[76,20781,20782],{"class":78,"line":145},[76,20783,20784],{"class":540},"\u002F\u002F分类\n",[76,20786,20787],{"class":78,"line":152},[76,20788,20789],{"class":540},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[76,20791,20792],{"class":78,"line":157},[76,20793,20794],{"class":540},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[76,20796,20797],{"class":78,"line":246},[76,20798,149],{"emptyLinePlaceholder":148},[76,20800,20801,20803,20805],{"class":78,"line":251},[76,20802,16747],{"class":82},[76,20804,17620],{"class":86},[76,20806,4762],{"class":90},[76,20808,20809],{"class":78,"line":257},[76,20810,3666],{"class":90},[76,20812,20813],{"class":78,"line":641},[76,20814,16769],{"class":82},[76,20816,20817],{"class":78,"line":646},[76,20818,20563],{"class":540},[76,20820,20821,20823],{"class":78,"line":659},[76,20822,20568],{"class":86},[76,20824,4072],{"class":90},[76,20826,20827],{"class":78,"line":1608},[76,20828,4126],{"class":90},[76,20830,20831,20833,20835,20838,20840],{"class":78,"line":1632},[76,20832,5536],{"class":90},[76,20834,3298],{"class":82},[76,20836,20837],{"class":126},"\"Person构造函数无参构造\"",[76,20839,3298],{"class":82},[76,20841,3320],{"class":90},[76,20843,20844],{"class":78,"line":1637},[76,20845,4283],{"class":90},[76,20847,20848,20850,20852,20854,20856],{"class":78,"line":1642},[76,20849,20568],{"class":86},[76,20851,123],{"class":90},[76,20853,1360],{"class":82},[76,20855,3519],{"class":7296},[76,20857,130],{"class":90},[76,20859,20860],{"class":78,"line":1652},[76,20861,4126],{"class":90},[76,20863,20864,20867,20869],{"class":78,"line":1660},[76,20865,20866],{"class":90},"        age",[76,20868,370],{"class":82},[76,20870,8276],{"class":90},[76,20872,20873,20875,20877,20880,20882],{"class":78,"line":1683},[76,20874,5536],{"class":90},[76,20876,3298],{"class":82},[76,20878,20879],{"class":126},"\"Person构造函数有参构造\"",[76,20881,3298],{"class":82},[76,20883,3320],{"class":90},[76,20885,20886],{"class":78,"line":1698},[76,20887,4283],{"class":90},[76,20889,20890],{"class":78,"line":1711},[76,20891,20596],{"class":540},[76,20893,20894,20896],{"class":78,"line":1717},[76,20895,20601],{"class":86},[76,20897,4072],{"class":90},[76,20899,20900],{"class":78,"line":1728},[76,20901,4126],{"class":90},[76,20903,20904,20906,20908,20911,20913],{"class":78,"line":1740},[76,20905,5536],{"class":90},[76,20907,3298],{"class":82},[76,20909,20910],{"class":126},"\"Person析构函数被调用\"",[76,20912,3298],{"class":82},[76,20914,3320],{"class":90},[76,20916,20917],{"class":78,"line":1746},[76,20918,4283],{"class":90},[76,20920,20921],{"class":78,"line":1751},[76,20922,20923],{"class":540},"    \u002F\u002F拷贝构造函数\n",[76,20925,20926,20928,20930,20932,20934,20936,20938],{"class":78,"line":1756},[76,20927,20568],{"class":86},[76,20929,123],{"class":90},[76,20931,8870],{"class":82},[76,20933,17620],{"class":86},[76,20935,12641],{"class":82},[76,20937,19],{"class":7296},[76,20939,130],{"class":90},[76,20941,20942],{"class":78,"line":1766},[76,20943,4126],{"class":90},[76,20945,20946],{"class":78,"line":1773},[76,20947,20948],{"class":540},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[76,20950,20951,20953,20955],{"class":78,"line":1793},[76,20952,20866],{"class":90},[76,20954,370],{"class":82},[76,20956,20957],{"class":90},"p.age;\n",[76,20959,20960,20962,20964,20967,20969],{"class":78,"line":1806},[76,20961,5536],{"class":90},[76,20963,3298],{"class":82},[76,20965,20966],{"class":126},"\"Person拷贝构造函数被调用\"",[76,20968,3298],{"class":82},[76,20970,3320],{"class":90},[76,20972,20973],{"class":78,"line":1817},[76,20974,4283],{"class":90},[76,20976,20977,20979],{"class":78,"line":1822},[76,20978,4081],{"class":82},[76,20980,9875],{"class":90},[76,20982,20983],{"class":78,"line":1835},[76,20984,6079],{"class":90},[76,20986,20987],{"class":78,"line":1847},[76,20988,20989],{"class":540},"\u002F\u002F调用\n",[76,20991,20992,20994,20996],{"class":78,"line":1852},[76,20993,7444],{"class":82},[76,20995,7668],{"class":86},[76,20997,4072],{"class":90},[76,20999,21000],{"class":78,"line":1862},[76,21001,3666],{"class":90},[76,21003,21004],{"class":78,"line":1874},[76,21005,21006],{"class":540},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[76,21008,21009],{"class":78,"line":1879},[76,21010,3685],{"class":90},[76,21012,21013,21015,21017],{"class":78,"line":1884},[76,21014,7444],{"class":82},[76,21016,7737],{"class":86},[76,21018,4072],{"class":90},[76,21020,21021],{"class":78,"line":1889},[76,21022,3666],{"class":90},[76,21024,21025],{"class":78,"line":1900},[76,21026,21027],{"class":540},"    \u002F\u002F1.括号法\n",[76,21029,21030],{"class":78,"line":1906},[76,21031,21032],{"class":540},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[76,21034,21035],{"class":78,"line":1924},[76,21036,21037],{"class":540},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[76,21039,21040],{"class":78,"line":1929},[76,21041,21042],{"class":540},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[76,21044,21045],{"class":78,"line":1944},[76,21046,21047],{"class":540},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[76,21049,21050],{"class":78,"line":1950},[76,21051,149],{"emptyLinePlaceholder":148},[76,21053,21054],{"class":78,"line":1965},[76,21055,21056],{"class":540},"    \u002F\u002F注意事项\n",[76,21058,21059],{"class":78,"line":1971},[76,21060,21061],{"class":540},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[76,21063,21064],{"class":78,"line":1985},[76,21065,21066],{"class":540},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[76,21068,21069],{"class":78,"line":1991},[76,21070,21071],{"class":540},"    \u002F\u002F Person p4();\n",[76,21073,21074],{"class":78,"line":2005},[76,21075,149],{"emptyLinePlaceholder":148},[76,21077,21078],{"class":78,"line":2017},[76,21079,21080],{"class":540},"    \u002F\u002F2.显示法\n",[76,21082,21083],{"class":78,"line":2023},[76,21084,21085],{"class":90},"    Person p1;\n",[76,21087,21088,21091,21093,21096,21098,21100],{"class":78,"line":2031},[76,21089,21090],{"class":90},"    Person p2",[76,21092,370],{"class":82},[76,21094,21095],{"class":86},"Person",[76,21097,123],{"class":90},[76,21099,402],{"class":119},[76,21101,4807],{"class":90},[76,21103,21104,21107,21109,21111],{"class":78,"line":11880},[76,21105,21106],{"class":90},"    Person p3",[76,21108,370],{"class":82},[76,21110,21095],{"class":86},[76,21112,21113],{"class":90},"(p2);\n",[76,21115,21116],{"class":78,"line":11901},[76,21117,21118],{"class":540},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[76,21120,21121],{"class":78,"line":11907},[76,21122,149],{"emptyLinePlaceholder":148},[76,21124,21125],{"class":78,"line":11921},[76,21126,21127],{"class":540},"    \u002F\u002F 注意事项2\n",[76,21129,21130],{"class":78,"line":11927},[76,21131,21132],{"class":540},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[76,21134,21135],{"class":78,"line":11954},[76,21136,21137],{"class":540},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[76,21139,21140],{"class":78,"line":11963},[76,21141,149],{"emptyLinePlaceholder":148},[76,21143,21144],{"class":78,"line":11969},[76,21145,21146],{"class":540},"    \u002F\u002F3.隐士转换法\n",[76,21148,21149,21152,21154,21156,21158],{"class":78,"line":11977},[76,21150,21151],{"class":90},"    Person p4",[76,21153,370],{"class":82},[76,21155,402],{"class":119},[76,21157,2324],{"class":90},[76,21159,21160],{"class":540},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[76,21162,21163,21166,21168,21171],{"class":78,"line":11982},[76,21164,21165],{"class":90},"    Person p5",[76,21167,370],{"class":82},[76,21169,21170],{"class":90},"p4;",[76,21172,21173],{"class":540}," \u002F\u002F 这里会调用拷贝构造函数\n",[76,21175,21176],{"class":78,"line":18654},[76,21177,3685],{"class":90},[76,21179,21180,21182,21184],{"class":78,"line":18660},[76,21181,1360],{"class":82},[76,21183,4069],{"class":86},[76,21185,4072],{"class":90},[76,21187,21188],{"class":78,"line":18683},[76,21189,3666],{"class":90},[76,21191,21192,21194],{"class":78,"line":18689},[76,21193,7713],{"class":86},[76,21195,7716],{"class":90},[76,21197,21198,21200],{"class":78,"line":18712},[76,21199,7782],{"class":86},[76,21201,7716],{"class":90},[76,21203,21204,21206,21208],{"class":78,"line":18726},[76,21205,441],{"class":82},[76,21207,587],{"class":119},[76,21209,3415],{"class":90},[76,21211,21212],{"class":78,"line":18746},[76,21213,3685],{"class":90},[19,21215,21216,21219],{},[2416,21217,21218],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[889,21221,21223],{"id":21222},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21225,21226],{},"C++中拷贝构造函数调用时机通常有三种情况",[3261,21228,21229,21232,21235],{},[29,21230,21231],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,21233,21234],{},"值传递的方式给函数参数传值",[29,21236,21237],{},"以值方式返回局部对象",[66,21239,21241],{"className":2264,"code":21240,"language":2266,"meta":71,"style":71},"#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",[73,21242,21243,21249,21259,21263,21268,21272,21277,21282,21287,21293,21297,21301,21307,21311,21324,21328,21333,21345,21349,21357,21370,21374,21378,21394,21398,21407,21420,21424,21430,21434,21446,21450,21456,21460,21464,21472,21476,21489,21497,21515,21519,21524,21529,21544,21548,21561,21565,21573,21577,21581,21589,21593,21598,21607,21611,21615,21640,21650,21654,21662,21666,21677,21702,21706,21710,21714,21722,21726,21731,21736,21743,21748,21753,21758,21763,21767,21772,21776,21781,21785,21790,21795,21799,21803,21808,21813,21821],{"__ignoreMap":71},[76,21244,21245,21247],{"class":78,"line":79},[76,21246,4046],{"class":82},[76,21248,4049],{"class":126},[76,21250,21251,21253,21255,21257],{"class":78,"line":94},[76,21252,4054],{"class":82},[76,21254,4057],{"class":82},[76,21256,4060],{"class":86},[76,21258,3415],{"class":90},[76,21260,21261],{"class":78,"line":133},[76,21262,149],{"emptyLinePlaceholder":148},[76,21264,21265],{"class":78,"line":145},[76,21266,21267],{"class":540},"\u002F\u002F拷贝构造函数调用时机\n",[76,21269,21270],{"class":78,"line":152},[76,21271,149],{"emptyLinePlaceholder":148},[76,21273,21274],{"class":78,"line":157},[76,21275,21276],{"class":540},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[76,21278,21279],{"class":78,"line":246},[76,21280,21281],{"class":540},"\u002F\u002F2.值传递的方式给函数参数传值\n",[76,21283,21284],{"class":78,"line":251},[76,21285,21286],{"class":540},"\u002F\u002F3.以值方式返回局部对象\n",[76,21288,21289,21291],{"class":78,"line":257},[76,21290,16747],{"class":82},[76,21292,17222],{"class":86},[76,21294,21295],{"class":78,"line":641},[76,21296,3666],{"class":90},[76,21298,21299],{"class":78,"line":646},[76,21300,16769],{"class":82},[76,21302,21303,21305],{"class":78,"line":659},[76,21304,20568],{"class":86},[76,21306,4072],{"class":90},[76,21308,21309],{"class":78,"line":1608},[76,21310,4126],{"class":90},[76,21312,21313,21315,21317,21320,21322],{"class":78,"line":1632},[76,21314,11735],{"class":90},[76,21316,3298],{"class":82},[76,21318,21319],{"class":126}," \"Person的默认构造函数调用\"",[76,21321,3565],{"class":82},[76,21323,10908],{"class":90},[76,21325,21326],{"class":78,"line":1637},[76,21327,4283],{"class":90},[76,21329,21330],{"class":78,"line":1642},[76,21331,21332],{"class":540},"    \u002F\u002F有参构造\n",[76,21334,21335,21337,21339,21341,21343],{"class":78,"line":1652},[76,21336,20568],{"class":86},[76,21338,123],{"class":90},[76,21340,1360],{"class":82},[76,21342,17740],{"class":7296},[76,21344,130],{"class":90},[76,21346,21347],{"class":78,"line":1660},[76,21348,4126],{"class":90},[76,21350,21351,21353,21355],{"class":78,"line":1683},[76,21352,17793],{"class":90},[76,21354,370],{"class":82},[76,21356,9875],{"class":90},[76,21358,21359,21361,21363,21366,21368],{"class":78,"line":1698},[76,21360,11735],{"class":90},[76,21362,3298],{"class":82},[76,21364,21365],{"class":126}," \"Person的有参构造函数调用\"",[76,21367,3565],{"class":82},[76,21369,10908],{"class":90},[76,21371,21372],{"class":78,"line":1711},[76,21373,4283],{"class":90},[76,21375,21376],{"class":78,"line":1717},[76,21377,20923],{"class":540},[76,21379,21380,21382,21384,21386,21388,21390,21392],{"class":78,"line":1728},[76,21381,20568],{"class":86},[76,21383,123],{"class":90},[76,21385,8870],{"class":82},[76,21387,17620],{"class":86},[76,21389,12641],{"class":82},[76,21391,19],{"class":7296},[76,21393,130],{"class":90},[76,21395,21396],{"class":78,"line":1740},[76,21397,4126],{"class":90},[76,21399,21400,21402,21404],{"class":78,"line":1746},[76,21401,17793],{"class":90},[76,21403,370],{"class":82},[76,21405,21406],{"class":90}," p.m_Age;\n",[76,21408,21409,21411,21413,21416,21418],{"class":78,"line":1751},[76,21410,11735],{"class":90},[76,21412,3298],{"class":82},[76,21414,21415],{"class":126}," \"Person的拷贝构造函数调用\"",[76,21417,3565],{"class":82},[76,21419,10908],{"class":90},[76,21421,21422],{"class":78,"line":1756},[76,21423,4283],{"class":90},[76,21425,21426,21428],{"class":78,"line":1766},[76,21427,20601],{"class":86},[76,21429,4072],{"class":90},[76,21431,21432],{"class":78,"line":1773},[76,21433,4126],{"class":90},[76,21435,21436,21438,21440,21442,21444],{"class":78,"line":1793},[76,21437,11735],{"class":90},[76,21439,3298],{"class":82},[76,21441,20616],{"class":126},[76,21443,3565],{"class":82},[76,21445,10908],{"class":90},[76,21447,21448],{"class":78,"line":1806},[76,21449,4283],{"class":90},[76,21451,21452,21454],{"class":78,"line":1817},[76,21453,4081],{"class":82},[76,21455,17717],{"class":90},[76,21457,21458],{"class":78,"line":1822},[76,21459,6079],{"class":90},[76,21461,21462],{"class":78,"line":1835},[76,21463,21276],{"class":540},[76,21465,21466,21468,21470],{"class":78,"line":1847},[76,21467,7444],{"class":82},[76,21469,7668],{"class":86},[76,21471,4072],{"class":90},[76,21473,21474],{"class":78,"line":1852},[76,21475,3666],{"class":90},[76,21477,21478,21481,21483,21485,21487],{"class":78,"line":1862},[76,21479,21480],{"class":90},"    Person ",[76,21482,9208],{"class":86},[76,21484,123],{"class":90},[76,21486,408],{"class":119},[76,21488,4807],{"class":90},[76,21490,21491,21493,21495],{"class":78,"line":1874},[76,21492,21480],{"class":90},[76,21494,9111],{"class":86},[76,21496,19564],{"class":90},[76,21498,21499,21501,21503,21506,21508,21511,21513],{"class":78,"line":1879},[76,21500,3671],{"class":90},[76,21502,3298],{"class":82},[76,21504,21505],{"class":126},"\"P2的年龄为：\"",[76,21507,3298],{"class":82},[76,21509,21510],{"class":90},"p2.m_Age",[76,21512,3298],{"class":82},[76,21514,3320],{"class":90},[76,21516,21517],{"class":78,"line":1884},[76,21518,3685],{"class":90},[76,21520,21521],{"class":78,"line":1889},[76,21522,21523],{"class":540},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[76,21525,21526],{"class":78,"line":1900},[76,21527,21528],{"class":540},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[76,21530,21531,21533,21536,21538,21540,21542],{"class":78,"line":1906},[76,21532,7444],{"class":82},[76,21534,21535],{"class":86}," doWork",[76,21537,123],{"class":90},[76,21539,21095],{"class":86},[76,21541,8903],{"class":7296},[76,21543,130],{"class":90},[76,21545,21546],{"class":78,"line":1924},[76,21547,3666],{"class":90},[76,21549,21550,21552,21554,21557,21559],{"class":78,"line":1929},[76,21551,8607],{"class":90},[76,21553,3298],{"class":82},[76,21555,21556],{"class":126}," \"doWork函数调用\"",[76,21558,3565],{"class":82},[76,21560,10908],{"class":90},[76,21562,21563],{"class":78,"line":1944},[76,21564,3685],{"class":90},[76,21566,21567,21569,21571],{"class":78,"line":1950},[76,21568,7444],{"class":82},[76,21570,7737],{"class":86},[76,21572,4072],{"class":90},[76,21574,21575],{"class":78,"line":1965},[76,21576,3666],{"class":90},[76,21578,21579],{"class":78,"line":1971},[76,21580,17364],{"class":90},[76,21582,21583,21586],{"class":78,"line":1985},[76,21584,21585],{"class":86},"    doWork",[76,21587,21588],{"class":90},"(p);\n",[76,21590,21591],{"class":78,"line":1991},[76,21592,3685],{"class":90},[76,21594,21595],{"class":78,"line":2005},[76,21596,21597],{"class":540},"\u002F\u002F 3.以值方式返回局部对象\n",[76,21599,21600,21602,21605],{"class":78,"line":2017},[76,21601,21095],{"class":86},[76,21603,21604],{"class":86}," doWork2",[76,21606,4072],{"class":90},[76,21608,21609],{"class":78,"line":2023},[76,21610,3666],{"class":90},[76,21612,21613],{"class":78,"line":2031},[76,21614,21085],{"class":90},[76,21616,21617,21619,21621,21623,21625,21627,21629,21631,21633,21635,21637],{"class":78,"line":11880},[76,21618,3671],{"class":90},[76,21620,3298],{"class":82},[76,21622,123],{"class":90},[76,21624,1360],{"class":82},[76,21626,1119],{"class":82},[76,21628,2693],{"class":90},[76,21630,2617],{"class":82},[76,21632,9208],{"class":90},[76,21634,3298],{"class":82},[76,21636,3363],{"class":90},[76,21638,21639],{"class":540},"\u002F\u002F打印p1的地址\n",[76,21641,21642,21644,21647],{"class":78,"line":11901},[76,21643,441],{"class":82},[76,21645,21646],{"class":90}," p1;",[76,21648,21649],{"class":540},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[76,21651,21652],{"class":78,"line":11907},[76,21653,3685],{"class":90},[76,21655,21656,21658,21660],{"class":78,"line":11921},[76,21657,7444],{"class":82},[76,21659,7809],{"class":86},[76,21661,4072],{"class":90},[76,21663,21664],{"class":78,"line":11927},[76,21665,3666],{"class":90},[76,21667,21668,21671,21673,21675],{"class":78,"line":11954},[76,21669,21670],{"class":90},"    Person p ",[76,21672,370],{"class":82},[76,21674,21604],{"class":86},[76,21676,7716],{"class":90},[76,21678,21679,21681,21683,21685,21687,21689,21691,21693,21695,21697,21699],{"class":78,"line":11963},[76,21680,3671],{"class":90},[76,21682,3298],{"class":82},[76,21684,123],{"class":90},[76,21686,1360],{"class":82},[76,21688,1119],{"class":82},[76,21690,2693],{"class":90},[76,21692,2617],{"class":82},[76,21694,19],{"class":90},[76,21696,3298],{"class":82},[76,21698,3363],{"class":90},[76,21700,21701],{"class":540},"\u002F\u002F打印p的地址\n",[76,21703,21704],{"class":78,"line":11969},[76,21705,3685],{"class":90},[76,21707,21708],{"class":78,"line":11977},[76,21709,149],{"emptyLinePlaceholder":148},[76,21711,21712],{"class":78,"line":11982},[76,21713,149],{"emptyLinePlaceholder":148},[76,21715,21716,21718,21720],{"class":78,"line":18654},[76,21717,1360],{"class":82},[76,21719,4069],{"class":86},[76,21721,4072],{"class":90},[76,21723,21724],{"class":78,"line":18660},[76,21725,3666],{"class":90},[76,21727,21728],{"class":78,"line":18683},[76,21729,21730],{"class":540},"    \u002F\u002F test01();\n",[76,21732,21733],{"class":78,"line":18689},[76,21734,21735],{"class":540},"    \u002F\u002F test02();\n",[76,21737,21738,21741],{"class":78,"line":18712},[76,21739,21740],{"class":86},"    test03",[76,21742,7716],{"class":90},[76,21744,21745],{"class":78,"line":18726},[76,21746,21747],{"class":540},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[76,21749,21750],{"class":78,"line":18746},[76,21751,21752],{"class":540},"\u002F\u002F 输出结果如下：\n",[76,21754,21755],{"class":78,"line":18752},[76,21756,21757],{"class":540},"\u002F\u002F Person的默认构造函数调用\n",[76,21759,21760],{"class":78,"line":18763},[76,21761,21762],{"class":540},"\u002F\u002F 0x7fffffffceec\n",[76,21764,21765],{"class":78,"line":18786},[76,21766,21762],{"class":540},[76,21768,21769],{"class":78,"line":18808},[76,21770,21771],{"class":540},"\u002F\u002F Person的析构函数调用\n",[76,21773,21774],{"class":78,"line":18813},[76,21775,149],{"emptyLinePlaceholder":148},[76,21777,21778],{"class":78,"line":18819},[76,21779,21780],{"class":540},"\u002F\u002F 之前的输出结果如下：\n",[76,21782,21783],{"class":78,"line":18833},[76,21784,21757],{"class":540},[76,21786,21787],{"class":78,"line":18846},[76,21788,21789],{"class":540},"\u002F\u002F 地址\n",[76,21791,21792],{"class":78,"line":18851},[76,21793,21794],{"class":540},"\u002F\u002F Person的拷贝构造函数调用\n",[76,21796,21797],{"class":78,"line":18865},[76,21798,21771],{"class":540},[76,21800,21801],{"class":78,"line":18870},[76,21802,21789],{"class":540},[76,21804,21805],{"class":78,"line":18876},[76,21806,21807],{"class":540},"\u002F\u002F (这两次输出的地址也是不同的) \n",[76,21809,21810],{"class":78,"line":18881},[76,21811,21812],{"class":540},"\u002F\u002F Person的析构函数调用     \n",[76,21814,21815,21817,21819],{"class":78,"line":18895},[76,21816,441],{"class":82},[76,21818,587],{"class":119},[76,21820,3415],{"class":90},[76,21822,21823],{"class":78,"line":18900},[76,21824,3685],{"class":90},[19,21826,21827],{},"简化版理解",[66,21829,21831],{"className":2264,"code":21830,"language":2266,"meta":71,"style":71},"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",[73,21832,21833,21841,21845,21851,21864,21875,21879,21891,21904,21912,21916,21932,21945,21954,21958,21963,21969,21982,21986,21990,21997,22001,22005,22010,22018,22022,22038,22051,22064,22068,22073,22081,22085,22089,22094,22099,22115,22123,22130,22136,22140,22144,22149,22157,22161,22165,22188,22195,22199,22203,22211,22215,22225,22247,22251,22255,22259,22267,22271,22276,22281,22287,22291,22301,22305,22313],{"__ignoreMap":71},[76,21834,21835,21837,21839],{"class":78,"line":79},[76,21836,16747],{"class":82},[76,21838,17620],{"class":86},[76,21840,17623],{"class":90},[76,21842,21843],{"class":78,"line":94},[76,21844,16769],{"class":82},[76,21846,21847,21849],{"class":78,"line":133},[76,21848,20568],{"class":86},[76,21850,12909],{"class":90},[76,21852,21853,21855,21857,21860,21862],{"class":78,"line":145},[76,21854,11735],{"class":90},[76,21856,3298],{"class":82},[76,21858,21859],{"class":126}," \"无参构造函数!\"",[76,21861,3565],{"class":82},[76,21863,10908],{"class":90},[76,21865,21866,21869,21871,21873],{"class":78,"line":152},[76,21867,21868],{"class":90},"        mAge ",[76,21870,370],{"class":82},[76,21872,587],{"class":119},[76,21874,3415],{"class":90},[76,21876,21877],{"class":78,"line":157},[76,21878,4283],{"class":90},[76,21880,21881,21883,21885,21887,21889],{"class":78,"line":246},[76,21882,20568],{"class":86},[76,21884,123],{"class":90},[76,21886,1360],{"class":82},[76,21888,17740],{"class":7296},[76,21890,14495],{"class":90},[76,21892,21893,21895,21897,21900,21902],{"class":78,"line":251},[76,21894,11735],{"class":90},[76,21896,3298],{"class":82},[76,21898,21899],{"class":126}," \"有参构造函数!\"",[76,21901,3565],{"class":82},[76,21903,10908],{"class":90},[76,21905,21906,21908,21910],{"class":78,"line":257},[76,21907,21868],{"class":90},[76,21909,370],{"class":82},[76,21911,9875],{"class":90},[76,21913,21914],{"class":78,"line":641},[76,21915,4283],{"class":90},[76,21917,21918,21920,21922,21924,21926,21928,21930],{"class":78,"line":646},[76,21919,20568],{"class":86},[76,21921,123],{"class":90},[76,21923,8870],{"class":82},[76,21925,17620],{"class":86},[76,21927,2617],{"class":82},[76,21929,8903],{"class":7296},[76,21931,14495],{"class":90},[76,21933,21934,21936,21938,21941,21943],{"class":78,"line":659},[76,21935,11735],{"class":90},[76,21937,3298],{"class":82},[76,21939,21940],{"class":126}," \"拷贝构造函数!\"",[76,21942,3565],{"class":82},[76,21944,10908],{"class":90},[76,21946,21947,21949,21951],{"class":78,"line":1608},[76,21948,21868],{"class":90},[76,21950,370],{"class":82},[76,21952,21953],{"class":90}," p.mAge;\n",[76,21955,21956],{"class":78,"line":1632},[76,21957,4283],{"class":90},[76,21959,21960],{"class":78,"line":1637},[76,21961,21962],{"class":540},"    \u002F\u002F析构函数在释放内存之前调用\n",[76,21964,21965,21967],{"class":78,"line":1642},[76,21966,20601],{"class":86},[76,21968,12909],{"class":90},[76,21970,21971,21973,21975,21978,21980],{"class":78,"line":1652},[76,21972,11735],{"class":90},[76,21974,3298],{"class":82},[76,21976,21977],{"class":126}," \"析构函数!\"",[76,21979,3565],{"class":82},[76,21981,10908],{"class":90},[76,21983,21984],{"class":78,"line":1660},[76,21985,4283],{"class":90},[76,21987,21988],{"class":78,"line":1683},[76,21989,16769],{"class":82},[76,21991,21992,21994],{"class":78,"line":1698},[76,21993,4081],{"class":82},[76,21995,21996],{"class":90}," mAge;\n",[76,21998,21999],{"class":78,"line":1711},[76,22000,6079],{"class":90},[76,22002,22003],{"class":78,"line":1717},[76,22004,149],{"emptyLinePlaceholder":148},[76,22006,22007],{"class":78,"line":1728},[76,22008,22009],{"class":540},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[76,22011,22012,22014,22016],{"class":78,"line":1740},[76,22013,7444],{"class":82},[76,22015,7668],{"class":86},[76,22017,12909],{"class":90},[76,22019,22020],{"class":78,"line":1746},[76,22021,149],{"emptyLinePlaceholder":148},[76,22023,22024,22026,22029,22031,22033,22035],{"class":78,"line":1751},[76,22025,21480],{"class":90},[76,22027,22028],{"class":86},"man",[76,22030,123],{"class":90},[76,22032,2575],{"class":119},[76,22034,8045],{"class":90},[76,22036,22037],{"class":540}," \u002F\u002Fp对象已经创建完毕\n",[76,22039,22040,22042,22045,22048],{"class":78,"line":1756},[76,22041,21480],{"class":90},[76,22043,22044],{"class":86},"newman",[76,22046,22047],{"class":90},"(man);",[76,22049,22050],{"class":540}," \u002F\u002F调用拷贝构造函数\n",[76,22052,22053,22056,22058,22061],{"class":78,"line":1766},[76,22054,22055],{"class":90},"    Person newman2 ",[76,22057,370],{"class":82},[76,22059,22060],{"class":90}," man;",[76,22062,22063],{"class":540}," \u002F\u002F拷贝构造\n",[76,22065,22066],{"class":78,"line":1773},[76,22067,149],{"emptyLinePlaceholder":148},[76,22069,22070],{"class":78,"line":1793},[76,22071,22072],{"class":540},"    \u002F\u002FPerson newman3;\n",[76,22074,22075,22078],{"class":78,"line":1806},[76,22076,22077],{"class":540},"    \u002F\u002Fnewman3 = man;",[76,22079,22080],{"class":540}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[76,22082,22083],{"class":78,"line":1817},[76,22084,3685],{"class":90},[76,22086,22087],{"class":78,"line":1822},[76,22088,149],{"emptyLinePlaceholder":148},[76,22090,22091],{"class":78,"line":1835},[76,22092,22093],{"class":540},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[76,22095,22096],{"class":78,"line":1847},[76,22097,22098],{"class":540},"\u002F\u002F相当于Person p1 = p;\n",[76,22100,22101,22103,22105,22107,22109,22112],{"class":78,"line":1852},[76,22102,7444],{"class":82},[76,22104,21535],{"class":86},[76,22106,123],{"class":90},[76,22108,21095],{"class":86},[76,22110,22111],{"class":7296}," p1",[76,22113,22114],{"class":90},") {}\n",[76,22116,22117,22119,22121],{"class":78,"line":1862},[76,22118,7444],{"class":82},[76,22120,7737],{"class":86},[76,22122,12909],{"class":90},[76,22124,22125,22127],{"class":78,"line":1874},[76,22126,20653],{"class":90},[76,22128,22129],{"class":540}," \u002F\u002F无参构造函数\n",[76,22131,22132,22134],{"class":78,"line":1879},[76,22133,21585],{"class":86},[76,22135,21588],{"class":90},[76,22137,22138],{"class":78,"line":1884},[76,22139,3685],{"class":90},[76,22141,22142],{"class":78,"line":1889},[76,22143,149],{"emptyLinePlaceholder":148},[76,22145,22146],{"class":78,"line":1900},[76,22147,22148],{"class":540},"\u002F\u002F3. 以值方式返回局部对象\n",[76,22150,22151,22153,22155],{"class":78,"line":1906},[76,22152,21095],{"class":86},[76,22154,21604],{"class":86},[76,22156,4072],{"class":90},[76,22158,22159],{"class":78,"line":1924},[76,22160,3666],{"class":90},[76,22162,22163],{"class":78,"line":1929},[76,22164,21085],{"class":90},[76,22166,22167,22169,22171,22173,22175,22177,22179,22181,22184,22186],{"class":78,"line":1944},[76,22168,8607],{"class":90},[76,22170,3298],{"class":82},[76,22172,3770],{"class":90},[76,22174,1360],{"class":82},[76,22176,1119],{"class":82},[76,22178,2693],{"class":90},[76,22180,2617],{"class":82},[76,22182,22183],{"class":90},"p1 ",[76,22185,3298],{"class":82},[76,22187,10908],{"class":90},[76,22189,22190,22192],{"class":78,"line":1950},[76,22191,441],{"class":82},[76,22193,22194],{"class":90}," p1;\n",[76,22196,22197],{"class":78,"line":1965},[76,22198,3685],{"class":90},[76,22200,22201],{"class":78,"line":1971},[76,22202,149],{"emptyLinePlaceholder":148},[76,22204,22205,22207,22209],{"class":78,"line":1985},[76,22206,7444],{"class":82},[76,22208,7809],{"class":86},[76,22210,4072],{"class":90},[76,22212,22213],{"class":78,"line":1991},[76,22214,3666],{"class":90},[76,22216,22217,22219,22221,22223],{"class":78,"line":2005},[76,22218,21670],{"class":90},[76,22220,370],{"class":82},[76,22222,21604],{"class":86},[76,22224,7716],{"class":90},[76,22226,22227,22229,22231,22233,22235,22237,22239,22241,22243,22245],{"class":78,"line":2017},[76,22228,8607],{"class":90},[76,22230,3298],{"class":82},[76,22232,3770],{"class":90},[76,22234,1360],{"class":82},[76,22236,1119],{"class":82},[76,22238,2693],{"class":90},[76,22240,2617],{"class":82},[76,22242,13502],{"class":90},[76,22244,3298],{"class":82},[76,22246,10908],{"class":90},[76,22248,22249],{"class":78,"line":2023},[76,22250,3685],{"class":90},[76,22252,22253],{"class":78,"line":2031},[76,22254,149],{"emptyLinePlaceholder":148},[76,22256,22257],{"class":78,"line":11880},[76,22258,149],{"emptyLinePlaceholder":148},[76,22260,22261,22263,22265],{"class":78,"line":11901},[76,22262,1360],{"class":82},[76,22264,4069],{"class":86},[76,22266,12909],{"class":90},[76,22268,22269],{"class":78,"line":11907},[76,22270,149],{"emptyLinePlaceholder":148},[76,22272,22273],{"class":78,"line":11921},[76,22274,22275],{"class":540},"    \u002F\u002Ftest01();\n",[76,22277,22278],{"class":78,"line":11927},[76,22279,22280],{"class":540},"    \u002F\u002Ftest02();\n",[76,22282,22283,22285],{"class":78,"line":11954},[76,22284,21740],{"class":86},[76,22286,7716],{"class":90},[76,22288,22289],{"class":78,"line":11963},[76,22290,149],{"emptyLinePlaceholder":148},[76,22292,22293,22295,22297,22299],{"class":78,"line":11969},[76,22294,4399],{"class":86},[76,22296,123],{"class":90},[76,22298,4404],{"class":126},[76,22300,4807],{"class":90},[76,22302,22303],{"class":78,"line":11977},[76,22304,149],{"emptyLinePlaceholder":148},[76,22306,22307,22309,22311],{"class":78,"line":11982},[76,22308,441],{"class":82},[76,22310,587],{"class":119},[76,22312,3415],{"class":90},[76,22314,22315],{"class":78,"line":18654},[76,22316,3685],{"class":90},[889,22318,22320],{"id":22319},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22322,22323],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22325,22326],{},"1．默认构造函数(无参，函数体为空)",[19,22328,22329],{},"2．默认析构函数(无参，函数体为空)",[19,22331,22332],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22334,22335],{},"构造函数调用规则如下：",[3261,22337,22338,22341],{},[29,22339,22340],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22342,22343],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[66,22345,22347],{"className":2264,"code":22346,"language":2266,"meta":71,"style":71},"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",[73,22348,22349,22357,22361,22366,22372,22384,22388,22393,22405,22414,22426,22430,22434,22450,22459,22471,22475,22479,22485,22497,22501,22505,22511,22515,22519,22527,22531,22543,22548,22556,22560,22578,22582,22586,22594,22598,22603,22611,22626,22639,22643,22648,22655,22671,22684,22688,22692,22700,22704,22710,22714,22724,22728,22736],{"__ignoreMap":71},[76,22350,22351,22353,22355],{"class":78,"line":79},[76,22352,16747],{"class":82},[76,22354,17620],{"class":86},[76,22356,17623],{"class":90},[76,22358,22359],{"class":78,"line":94},[76,22360,16769],{"class":82},[76,22362,22363],{"class":78,"line":133},[76,22364,22365],{"class":540},"    \u002F\u002F无参（默认）构造函数\n",[76,22367,22368,22370],{"class":78,"line":145},[76,22369,20568],{"class":86},[76,22371,12909],{"class":90},[76,22373,22374,22376,22378,22380,22382],{"class":78,"line":152},[76,22375,11735],{"class":90},[76,22377,3298],{"class":82},[76,22379,21859],{"class":126},[76,22381,3565],{"class":82},[76,22383,10908],{"class":90},[76,22385,22386],{"class":78,"line":157},[76,22387,4283],{"class":90},[76,22389,22390],{"class":78,"line":246},[76,22391,22392],{"class":540},"    \u002F\u002F有参构造函数\n",[76,22394,22395,22397,22399,22401,22403],{"class":78,"line":251},[76,22396,20568],{"class":86},[76,22398,123],{"class":90},[76,22400,1360],{"class":82},[76,22402,3519],{"class":7296},[76,22404,14495],{"class":90},[76,22406,22407,22410,22412],{"class":78,"line":257},[76,22408,22409],{"class":90},"        age ",[76,22411,370],{"class":82},[76,22413,3553],{"class":90},[76,22415,22416,22418,22420,22422,22424],{"class":78,"line":641},[76,22417,11735],{"class":90},[76,22419,3298],{"class":82},[76,22421,21899],{"class":126},[76,22423,3565],{"class":82},[76,22425,10908],{"class":90},[76,22427,22428],{"class":78,"line":646},[76,22429,4283],{"class":90},[76,22431,22432],{"class":78,"line":659},[76,22433,20923],{"class":540},[76,22435,22436,22438,22440,22442,22444,22446,22448],{"class":78,"line":1608},[76,22437,20568],{"class":86},[76,22439,123],{"class":90},[76,22441,8870],{"class":82},[76,22443,17620],{"class":86},[76,22445,2617],{"class":82},[76,22447,8903],{"class":7296},[76,22449,14495],{"class":90},[76,22451,22452,22454,22456],{"class":78,"line":1632},[76,22453,22409],{"class":90},[76,22455,370],{"class":82},[76,22457,22458],{"class":90}," p.age;\n",[76,22460,22461,22463,22465,22467,22469],{"class":78,"line":1637},[76,22462,11735],{"class":90},[76,22464,3298],{"class":82},[76,22466,21940],{"class":126},[76,22468,3565],{"class":82},[76,22470,10908],{"class":90},[76,22472,22473],{"class":78,"line":1642},[76,22474,4283],{"class":90},[76,22476,22477],{"class":78,"line":1652},[76,22478,20596],{"class":540},[76,22480,22481,22483],{"class":78,"line":1660},[76,22482,20601],{"class":86},[76,22484,12909],{"class":90},[76,22486,22487,22489,22491,22493,22495],{"class":78,"line":1683},[76,22488,11735],{"class":90},[76,22490,3298],{"class":82},[76,22492,21977],{"class":126},[76,22494,3565],{"class":82},[76,22496,10908],{"class":90},[76,22498,22499],{"class":78,"line":1698},[76,22500,4283],{"class":90},[76,22502,22503],{"class":78,"line":1711},[76,22504,16769],{"class":82},[76,22506,22507,22509],{"class":78,"line":1717},[76,22508,4081],{"class":82},[76,22510,9875],{"class":90},[76,22512,22513],{"class":78,"line":1728},[76,22514,6079],{"class":90},[76,22516,22517],{"class":78,"line":1740},[76,22518,149],{"emptyLinePlaceholder":148},[76,22520,22521,22523,22525],{"class":78,"line":1746},[76,22522,7444],{"class":82},[76,22524,7668],{"class":86},[76,22526,4072],{"class":90},[76,22528,22529],{"class":78,"line":1751},[76,22530,3666],{"class":90},[76,22532,22533,22535,22537,22539,22541],{"class":78,"line":1756},[76,22534,21480],{"class":90},[76,22536,9208],{"class":86},[76,22538,123],{"class":90},[76,22540,1214],{"class":119},[76,22542,4807],{"class":90},[76,22544,22545],{"class":78,"line":1766},[76,22546,22547],{"class":540},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[76,22549,22550,22552,22554],{"class":78,"line":1773},[76,22551,21480],{"class":90},[76,22553,9111],{"class":86},[76,22555,19564],{"class":90},[76,22557,22558],{"class":78,"line":1793},[76,22559,149],{"emptyLinePlaceholder":148},[76,22561,22562,22564,22566,22569,22571,22574,22576],{"class":78,"line":1806},[76,22563,8607],{"class":90},[76,22565,3298],{"class":82},[76,22567,22568],{"class":126}," \"p2的年龄为： \"",[76,22570,3565],{"class":82},[76,22572,22573],{"class":90}," p2.age ",[76,22575,3298],{"class":82},[76,22577,10908],{"class":90},[76,22579,22580],{"class":78,"line":1817},[76,22581,3685],{"class":90},[76,22583,22584],{"class":78,"line":1822},[76,22585,149],{"emptyLinePlaceholder":148},[76,22587,22588,22590,22592],{"class":78,"line":1835},[76,22589,7444],{"class":82},[76,22591,7737],{"class":86},[76,22593,4072],{"class":90},[76,22595,22596],{"class":78,"line":1847},[76,22597,3666],{"class":90},[76,22599,22600],{"class":78,"line":1852},[76,22601,22602],{"class":540},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[76,22604,22605,22608],{"class":78,"line":1862},[76,22606,22607],{"class":90},"    Person p1;",[76,22609,22610],{"class":540}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[76,22612,22613,22615,22617,22619,22621,22623],{"class":78,"line":1874},[76,22614,21480],{"class":90},[76,22616,9111],{"class":86},[76,22618,123],{"class":90},[76,22620,402],{"class":119},[76,22622,8045],{"class":90},[76,22624,22625],{"class":540}," \u002F\u002F用户提供的有参\n",[76,22627,22628,22630,22633,22636],{"class":78,"line":1879},[76,22629,21480],{"class":90},[76,22631,22632],{"class":86},"p3",[76,22634,22635],{"class":90},"(p2);",[76,22637,22638],{"class":540}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[76,22640,22641],{"class":78,"line":1884},[76,22642,149],{"emptyLinePlaceholder":148},[76,22644,22645],{"class":78,"line":1889},[76,22646,22647],{"class":540},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[76,22649,22650,22653],{"class":78,"line":1900},[76,22651,22652],{"class":90},"    Person p4;",[76,22654,22610],{"class":540},[76,22656,22657,22659,22662,22664,22666,22668],{"class":78,"line":1906},[76,22658,21480],{"class":90},[76,22660,22661],{"class":86},"p5",[76,22663,123],{"class":90},[76,22665,402],{"class":119},[76,22667,8045],{"class":90},[76,22669,22670],{"class":540}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[76,22672,22673,22675,22678,22681],{"class":78,"line":1924},[76,22674,21480],{"class":90},[76,22676,22677],{"class":86},"p6",[76,22679,22680],{"class":90},"(p5);",[76,22682,22683],{"class":540}," \u002F\u002F用户自己提供拷贝构造\n",[76,22685,22686],{"class":78,"line":1929},[76,22687,3685],{"class":90},[76,22689,22690],{"class":78,"line":1944},[76,22691,149],{"emptyLinePlaceholder":148},[76,22693,22694,22696,22698],{"class":78,"line":1950},[76,22695,1360],{"class":82},[76,22697,4069],{"class":86},[76,22699,12909],{"class":90},[76,22701,22702],{"class":78,"line":1965},[76,22703,149],{"emptyLinePlaceholder":148},[76,22705,22706,22708],{"class":78,"line":1971},[76,22707,7713],{"class":86},[76,22709,7716],{"class":90},[76,22711,22712],{"class":78,"line":1985},[76,22713,149],{"emptyLinePlaceholder":148},[76,22715,22716,22718,22720,22722],{"class":78,"line":1991},[76,22717,4399],{"class":86},[76,22719,123],{"class":90},[76,22721,4404],{"class":126},[76,22723,4807],{"class":90},[76,22725,22726],{"class":78,"line":2005},[76,22727,149],{"emptyLinePlaceholder":148},[76,22729,22730,22732,22734],{"class":78,"line":2017},[76,22731,441],{"class":82},[76,22733,587],{"class":119},[76,22735,3415],{"class":90},[76,22737,22738],{"class":78,"line":2023},[76,22739,3685],{"class":90},[889,22741,22743],{"id":22742},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22745,22746],{},"浅拷贝：简单的赋值拷贝操作",[19,22748,22749],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[66,22751,22753],{"className":2264,"code":22752,"language":2266,"meta":71,"style":71},"#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",[73,22754,22755,22761,22771,22777,22781,22785,22790,22796,22800,22813,22817,22821,22828,22832,22842,22857,22870,22874,22879,22884,22900,22904,22917,22922,22927,22932,22941,22946,22961,22965,22969,22973,22979,22983,22988,23003,23007,23018,23032,23036,23045,23049,23055,23067,23071,23079,23083,23100,23131,23139,23167,23171,23175,23183,23187,23193],{"__ignoreMap":71},[76,22756,22757,22759],{"class":78,"line":79},[76,22758,4046],{"class":82},[76,22760,4049],{"class":126},[76,22762,22763,22765,22767,22769],{"class":78,"line":94},[76,22764,4054],{"class":82},[76,22766,4057],{"class":82},[76,22768,4060],{"class":86},[76,22770,3415],{"class":90},[76,22772,22773,22775],{"class":78,"line":133},[76,22774,16747],{"class":82},[76,22776,17222],{"class":86},[76,22778,22779],{"class":78,"line":145},[76,22780,3666],{"class":90},[76,22782,22783],{"class":78,"line":152},[76,22784,16769],{"class":82},[76,22786,22787],{"class":78,"line":157},[76,22788,22789],{"class":540},"    \u002F\u002F默认构造函数\n",[76,22791,22792,22794],{"class":78,"line":246},[76,22793,20568],{"class":86},[76,22795,4072],{"class":90},[76,22797,22798],{"class":78,"line":251},[76,22799,4126],{"class":90},[76,22801,22802,22804,22806,22809,22811],{"class":78,"line":257},[76,22803,5536],{"class":90},[76,22805,3298],{"class":82},[76,22807,22808],{"class":126},"\"默认构造函数\"",[76,22810,3298],{"class":82},[76,22812,3320],{"class":90},[76,22814,22815],{"class":78,"line":641},[76,22816,4283],{"class":90},[76,22818,22819],{"class":78,"line":646},[76,22820,22392],{"class":540},[76,22822,22823,22825],{"class":78,"line":659},[76,22824,20601],{"class":86},[76,22826,22827],{"class":90},"(int age,int height)\n",[76,22829,22830],{"class":78,"line":1608},[76,22831,4126],{"class":90},[76,22833,22834,22837,22839],{"class":78,"line":1632},[76,22835,22836],{"class":90},"        m_Age",[76,22838,370],{"class":82},[76,22840,22841],{"class":90},"age;\n",[76,22843,22844,22847,22849,22851,22854],{"class":78,"line":1637},[76,22845,22846],{"class":90},"        m_Height",[76,22848,13771],{"class":82},[76,22850,4478],{"class":82},[76,22852,22853],{"class":90},"(height);",[76,22855,22856],{"class":540},"\u002F\u002F放到堆区\n",[76,22858,22859,22861,22863,22866,22868],{"class":78,"line":1642},[76,22860,5536],{"class":90},[76,22862,3298],{"class":82},[76,22864,22865],{"class":126},"\"有参构造函数\"",[76,22867,3298],{"class":82},[76,22869,3320],{"class":90},[76,22871,22872],{"class":78,"line":1652},[76,22873,4283],{"class":90},[76,22875,22876],{"class":78,"line":1660},[76,22877,22878],{"class":540},"    \u002F\u002F深拷贝解决上述问题\n",[76,22880,22881],{"class":78,"line":1683},[76,22882,22883],{"class":540},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[76,22885,22886,22888,22890,22892,22894,22896,22898],{"class":78,"line":1698},[76,22887,20568],{"class":86},[76,22889,123],{"class":90},[76,22891,8870],{"class":82},[76,22893,17620],{"class":86},[76,22895,12641],{"class":82},[76,22897,19],{"class":7296},[76,22899,130],{"class":90},[76,22901,22902],{"class":78,"line":1711},[76,22903,4126],{"class":90},[76,22905,22906,22908,22910,22913,22915],{"class":78,"line":1717},[76,22907,5536],{"class":90},[76,22909,3298],{"class":82},[76,22911,22912],{"class":126},"\"拷贝构造函数\"",[76,22914,3298],{"class":82},[76,22916,3320],{"class":90},[76,22918,22919],{"class":78,"line":1728},[76,22920,22921],{"class":540},"        \u002F\u002F编译器默认的写如下注释部分\n",[76,22923,22924],{"class":78,"line":1740},[76,22925,22926],{"class":540},"        \u002F\u002Fm_Age=p.m_Age;\n",[76,22928,22929],{"class":78,"line":1746},[76,22930,22931],{"class":540},"        \u002F\u002Fm_Height=p.m_Height;\n",[76,22933,22934,22936,22938],{"class":78,"line":1751},[76,22935,22836],{"class":90},[76,22937,370],{"class":82},[76,22939,22940],{"class":90},"p.m_Age;\n",[76,22942,22943],{"class":78,"line":1756},[76,22944,22945],{"class":540},"        \u002F\u002F深拷贝操作\n",[76,22947,22948,22950,22952,22954,22956,22958],{"class":78,"line":1766},[76,22949,22846],{"class":90},[76,22951,13771],{"class":82},[76,22953,4478],{"class":82},[76,22955,123],{"class":90},[76,22957,2718],{"class":82},[76,22959,22960],{"class":90},"p.m_Height);\n",[76,22962,22963],{"class":78,"line":1773},[76,22964,4283],{"class":90},[76,22966,22967],{"class":78,"line":1793},[76,22968,149],{"emptyLinePlaceholder":148},[76,22970,22971],{"class":78,"line":1806},[76,22972,20596],{"class":540},[76,22974,22975,22977],{"class":78,"line":1817},[76,22976,20601],{"class":86},[76,22978,4072],{"class":90},[76,22980,22981],{"class":78,"line":1822},[76,22982,4126],{"class":90},[76,22984,22985],{"class":78,"line":1835},[76,22986,22987],{"class":540},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[76,22989,22990,22992,22995,22998,23001],{"class":78,"line":1847},[76,22991,4592],{"class":82},[76,22993,22994],{"class":90},"(m_Height ",[76,22996,22997],{"class":82},"!=",[76,22999,23000],{"class":119}," NULL",[76,23002,130],{"class":90},[76,23004,23005],{"class":78,"line":1852},[76,23006,4605],{"class":90},[76,23008,23009,23012,23015],{"class":78,"line":1862},[76,23010,23011],{"class":82},"            delete",[76,23013,23014],{"class":90}," m_Height;",[76,23016,23017],{"class":540}," \u002F\u002F释放堆区内存\n",[76,23019,23020,23023,23025,23027,23029],{"class":78,"line":1874},[76,23021,23022],{"class":90},"            m_Height",[76,23024,370],{"class":82},[76,23026,4488],{"class":119},[76,23028,2324],{"class":90},[76,23030,23031],{"class":540}," \u002F\u002F防止野指针\n",[76,23033,23034],{"class":78,"line":1879},[76,23035,4624],{"class":90},[76,23037,23038,23040,23042],{"class":78,"line":1884},[76,23039,5536],{"class":90},[76,23041,3298],{"class":82},[76,23043,23044],{"class":126},"\"Person的析构函数调用\"\n",[76,23046,23047],{"class":78,"line":1889},[76,23048,4283],{"class":90},[76,23050,23051,23053],{"class":78,"line":1900},[76,23052,4081],{"class":82},[76,23054,17717],{"class":90},[76,23056,23057,23059,23061,23064],{"class":78,"line":1906},[76,23058,4081],{"class":82},[76,23060,1119],{"class":82},[76,23062,23063],{"class":90},"m_Height;",[76,23065,23066],{"class":540}," \u002F\u002F定义一个指针，指向身高\n",[76,23068,23069],{"class":78,"line":1924},[76,23070,6079],{"class":90},[76,23072,23073,23075,23077],{"class":78,"line":1929},[76,23074,7444],{"class":82},[76,23076,7668],{"class":86},[76,23078,4072],{"class":90},[76,23080,23081],{"class":78,"line":1944},[76,23082,3666],{"class":90},[76,23084,23085,23087,23089,23091,23093,23095,23098],{"class":78,"line":1950},[76,23086,21480],{"class":90},[76,23088,9208],{"class":86},[76,23090,123],{"class":90},[76,23092,1214],{"class":119},[76,23094,2642],{"class":90},[76,23096,23097],{"class":119},"160",[76,23099,4807],{"class":90},[76,23101,23102,23104,23106,23109,23111,23114,23116,23119,23121,23124,23126,23128],{"class":78,"line":1965},[76,23103,3671],{"class":90},[76,23105,3298],{"class":82},[76,23107,23108],{"class":126},"\"p1的年龄为:\"",[76,23110,3298],{"class":82},[76,23112,23113],{"class":90},"p1.m_Age",[76,23115,3298],{"class":82},[76,23117,23118],{"class":126},"\"身高为：\"",[76,23120,8498],{"class":82},[76,23122,23123],{"class":90},"p1.m_Height",[76,23125,3298],{"class":82},[76,23127,3363],{"class":90},[76,23129,23130],{"class":540},"  \u002F\u002F18\n",[76,23132,23133,23135,23137],{"class":78,"line":1971},[76,23134,21480],{"class":90},[76,23136,9111],{"class":86},[76,23138,19564],{"class":90},[76,23140,23141,23143,23145,23148,23150,23152,23154,23156,23158,23161,23163,23165],{"class":78,"line":1985},[76,23142,3671],{"class":90},[76,23144,3298],{"class":82},[76,23146,23147],{"class":126},"\"p2的年龄为：\"",[76,23149,3298],{"class":82},[76,23151,21510],{"class":90},[76,23153,3298],{"class":82},[76,23155,23118],{"class":126},[76,23157,8498],{"class":82},[76,23159,23160],{"class":90},"p2.m_Height",[76,23162,3298],{"class":82},[76,23164,3363],{"class":90},[76,23166,23130],{"class":540},[76,23168,23169],{"class":78,"line":1991},[76,23170,15263],{"class":90},[76,23172,23173],{"class":78,"line":2005},[76,23174,3685],{"class":90},[76,23176,23177,23179,23181],{"class":78,"line":2017},[76,23178,1360],{"class":82},[76,23180,4069],{"class":86},[76,23182,4072],{"class":90},[76,23184,23185],{"class":78,"line":2023},[76,23186,3666],{"class":90},[76,23188,23189,23191],{"class":78,"line":2031},[76,23190,7713],{"class":86},[76,23192,7716],{"class":90},[76,23194,23195],{"class":78,"line":11880},[76,23196,3685],{"class":90},[19,23198,23199],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23201,23202],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23204,23205],{},[3583,23206],{"alt":71,"src":23207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23209,23210],{},"浅拷贝问题要使用深拷贝来解决",[19,23212,23213],{},[3583,23214],{"alt":71,"src":23215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23217,23218],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[889,23220,23222],{"id":23221},"_826初始化列表","8.2.6初始化列表",[19,23224,23225],{},"作用：初始化属性",[19,23227,64],{},[66,23229,23232],{"className":23230,"code":23231,"language":7268},[7266],"构造函数():属性1(值1),属性2(值2).....{}\n",[73,23233,23231],{"__ignoreMap":71},[19,23235,23236],{},"例子",[66,23238,23240],{"className":2264,"code":23239,"language":2266,"meta":71,"style":71},"#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",[73,23241,23242,23248,23258,23264,23268,23273,23277,23282,23287,23292,23297,23302,23307,23311,23316,23321,23364,23373,23391,23409,23427,23431,23435,23442,23449,23456,23460,23464,23472,23476,23480,23500,23509,23513,23517,23527,23531,23539],{"__ignoreMap":71},[76,23243,23244,23246],{"class":78,"line":79},[76,23245,4046],{"class":82},[76,23247,4049],{"class":126},[76,23249,23250,23252,23254,23256],{"class":78,"line":94},[76,23251,4054],{"class":82},[76,23253,4057],{"class":82},[76,23255,4060],{"class":86},[76,23257,3415],{"class":90},[76,23259,23260,23262],{"class":78,"line":133},[76,23261,16747],{"class":82},[76,23263,17222],{"class":86},[76,23265,23266],{"class":78,"line":145},[76,23267,3666],{"class":90},[76,23269,23270],{"class":78,"line":152},[76,23271,23272],{"class":82},"    public:\n",[76,23274,23275],{"class":78,"line":157},[76,23276,149],{"emptyLinePlaceholder":148},[76,23278,23279],{"class":78,"line":246},[76,23280,23281],{"class":540},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[76,23283,23284],{"class":78,"line":251},[76,23285,23286],{"class":540},"    \u002F\u002FPerson(int a, int b, int c) {\n",[76,23288,23289],{"class":78,"line":257},[76,23290,23291],{"class":540},"    \u002F\u002F  m_A = a;\n",[76,23293,23294],{"class":78,"line":641},[76,23295,23296],{"class":540},"    \u002F\u002F  m_B = b;\n",[76,23298,23299],{"class":78,"line":646},[76,23300,23301],{"class":540},"    \u002F\u002F  m_C = c;\n",[76,23303,23304],{"class":78,"line":659},[76,23305,23306],{"class":540},"    \u002F\u002F}\n",[76,23308,23309],{"class":78,"line":1608},[76,23310,149],{"emptyLinePlaceholder":148},[76,23312,23313],{"class":78,"line":1632},[76,23314,23315],{"class":540},"    \u002F\u002F初始化列表方式初始化\n",[76,23317,23318],{"class":78,"line":1637},[76,23319,23320],{"class":540},"    \u002F\u002F使用有参构造函数\n",[76,23322,23323,23325,23327,23329,23331,23333,23335,23337,23339,23341,23343,23346,23349,23352,23355,23358,23361],{"class":78,"line":1642},[76,23324,20568],{"class":86},[76,23326,123],{"class":90},[76,23328,1360],{"class":82},[76,23330,3519],{"class":7296},[76,23332,405],{"class":90},[76,23334,1360],{"class":82},[76,23336,4921],{"class":7296},[76,23338,405],{"class":90},[76,23340,1360],{"class":82},[76,23342,4937],{"class":7296},[76,23344,23345],{"class":90},") :",[76,23347,23348],{"class":86},"m_A",[76,23350,23351],{"class":90},"(a), ",[76,23353,23354],{"class":86},"m_B",[76,23356,23357],{"class":90},"(b), ",[76,23359,23360],{"class":86},"m_C",[76,23362,23363],{"class":90},"(c) {}\n",[76,23365,23366,23368,23371],{"class":78,"line":1652},[76,23367,16961],{"class":82},[76,23369,23370],{"class":86}," PrintPerson",[76,23372,12909],{"class":90},[76,23374,23375,23377,23379,23382,23384,23387,23389],{"class":78,"line":1660},[76,23376,11735],{"class":90},[76,23378,3298],{"class":82},[76,23380,23381],{"class":126}," \"mA:\"",[76,23383,3565],{"class":82},[76,23385,23386],{"class":90}," m_A ",[76,23388,3298],{"class":82},[76,23390,10908],{"class":90},[76,23392,23393,23395,23397,23400,23402,23405,23407],{"class":78,"line":1683},[76,23394,11735],{"class":90},[76,23396,3298],{"class":82},[76,23398,23399],{"class":126}," \"mB:\"",[76,23401,3565],{"class":82},[76,23403,23404],{"class":90}," m_B ",[76,23406,3298],{"class":82},[76,23408,10908],{"class":90},[76,23410,23411,23413,23415,23418,23420,23423,23425],{"class":78,"line":1698},[76,23412,11735],{"class":90},[76,23414,3298],{"class":82},[76,23416,23417],{"class":126}," \"mC:\"",[76,23419,3565],{"class":82},[76,23421,23422],{"class":90}," m_C ",[76,23424,3298],{"class":82},[76,23426,10908],{"class":90},[76,23428,23429],{"class":78,"line":1711},[76,23430,4283],{"class":90},[76,23432,23433],{"class":78,"line":1717},[76,23434,17273],{"class":82},[76,23436,23437,23439],{"class":78,"line":1728},[76,23438,4081],{"class":82},[76,23440,23441],{"class":90}," m_A;\n",[76,23443,23444,23446],{"class":78,"line":1740},[76,23445,4081],{"class":82},[76,23447,23448],{"class":90}," m_B;\n",[76,23450,23451,23453],{"class":78,"line":1746},[76,23452,4081],{"class":82},[76,23454,23455],{"class":90}," m_C;\n",[76,23457,23458],{"class":78,"line":1751},[76,23459,6079],{"class":90},[76,23461,23462],{"class":78,"line":1756},[76,23463,149],{"emptyLinePlaceholder":148},[76,23465,23466,23468,23470],{"class":78,"line":1766},[76,23467,1360],{"class":82},[76,23469,4069],{"class":86},[76,23471,8057],{"class":90},[76,23473,23474],{"class":78,"line":1773},[76,23475,3666],{"class":90},[76,23477,23478],{"class":78,"line":1793},[76,23479,149],{"emptyLinePlaceholder":148},[76,23481,23482,23484,23486,23488,23490,23492,23494,23496,23498],{"class":78,"line":1806},[76,23483,21480],{"class":90},[76,23485,19],{"class":86},[76,23487,123],{"class":90},[76,23489,669],{"class":119},[76,23491,405],{"class":90},[76,23493,2345],{"class":119},[76,23495,405],{"class":90},[76,23497,2339],{"class":119},[76,23499,4807],{"class":90},[76,23501,23502,23504,23507],{"class":78,"line":1817},[76,23503,17916],{"class":90},[76,23505,23506],{"class":86},"PrintPerson",[76,23508,7716],{"class":90},[76,23510,23511],{"class":78,"line":1822},[76,23512,149],{"emptyLinePlaceholder":148},[76,23514,23515],{"class":78,"line":1835},[76,23516,149],{"emptyLinePlaceholder":148},[76,23518,23519,23521,23523,23525],{"class":78,"line":1847},[76,23520,4399],{"class":86},[76,23522,123],{"class":90},[76,23524,4404],{"class":126},[76,23526,4807],{"class":90},[76,23528,23529],{"class":78,"line":1852},[76,23530,149],{"emptyLinePlaceholder":148},[76,23532,23533,23535,23537],{"class":78,"line":1862},[76,23534,441],{"class":82},[76,23536,587],{"class":119},[76,23538,3415],{"class":90},[76,23540,23541],{"class":78,"line":1874},[76,23542,3685],{"class":90},[19,23544,23545,23546,23549,23550],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2416,23547,23548],{},"参数名就是定义的对象属性","，",[2416,23551,23552],{},"属性后面的值为有参构造函数的形参",[66,23554,23556],{"className":2264,"code":23555,"language":2266,"meta":71,"style":71},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[73,23557,23558],{"__ignoreMap":71},[76,23559,23560,23562,23564,23566,23569,23571,23574,23576,23579,23581,23584,23586,23589,23591],{"class":78,"line":79},[76,23561,21095],{"class":86},[76,23563,123],{"class":90},[76,23565,1360],{"class":82},[76,23567,23568],{"class":90}," a.",[76,23570,1360],{"class":82},[76,23572,23573],{"class":90}," b,",[76,23575,1360],{"class":82},[76,23577,23578],{"class":90}," b):",[76,23580,23348],{"class":86},[76,23582,23583],{"class":90},"(a),",[76,23585,23354],{"class":86},[76,23587,23588],{"class":90},"(c),",[76,23590,23360],{"class":86},[76,23592,23593],{"class":90},"(b) {}\n",[889,23595,23597],{"id":23596},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23599,23600],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23602,16686],{},[66,23604,23606],{"className":2264,"code":23605,"language":2266,"meta":71,"style":71},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[73,23607,23608,23613,23618,23622,23627,23631],{"__ignoreMap":71},[76,23609,23610],{"class":78,"line":79},[76,23611,23612],{"class":90},"A{};\n",[76,23614,23615],{"class":78,"line":94},[76,23616,23617],{"class":90},"B\n",[76,23619,23620],{"class":78,"line":133},[76,23621,3666],{"class":90},[76,23623,23624],{"class":78,"line":145},[76,23625,23626],{"class":90},"    A a;\n",[76,23628,23629],{"class":78,"line":152},[76,23630,3685],{"class":90},[76,23632,23633],{"class":78,"line":157},[76,23634,23635],{"class":540},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23637,23638],{},"案例",[66,23640,23642],{"className":2264,"code":23641,"language":2266,"meta":71,"style":71},"\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",[73,23643,23644,23649,23656,23660,23665,23670,23684,23688,23698,23709,23713,23720,23724,23737,23741,23746,23751,23755,23761,23765,23769,23773,23804,23808,23819,23823,23829,23833,23846,23850,23854,23858,23863,23868,23872,23880,23884,23901,23920,23924,23932,23936,23942],{"__ignoreMap":71},[76,23645,23646],{"class":78,"line":79},[76,23647,23648],{"class":540},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[76,23650,23651,23653],{"class":78,"line":94},[76,23652,16747],{"class":82},[76,23654,23655],{"class":86}," Phone\n",[76,23657,23658],{"class":78,"line":133},[76,23659,3666],{"class":90},[76,23661,23662],{"class":78,"line":145},[76,23663,23664],{"class":90},"public：\n",[76,23666,23667],{"class":78,"line":152},[76,23668,23669],{"class":540},"    \u002F\u002F 赋值(构造函数)\n",[76,23671,23672,23675,23677,23679,23682],{"class":78,"line":157},[76,23673,23674],{"class":86},"    Phone",[76,23676,123],{"class":90},[76,23678,16969],{"class":86},[76,23680,23681],{"class":7296}," pName",[76,23683,130],{"class":90},[76,23685,23686],{"class":78,"line":246},[76,23687,4126],{"class":90},[76,23689,23690,23693,23695],{"class":78,"line":251},[76,23691,23692],{"class":90},"        m_pName",[76,23694,370],{"class":82},[76,23696,23697],{"class":90},"pName;\n",[76,23699,23700,23702,23704,23707],{"class":78,"line":257},[76,23701,5536],{"class":90},[76,23703,3298],{"class":82},[76,23705,23706],{"class":126},"\"Phone的构造函数调用\"",[76,23708,3415],{"class":90},[76,23710,23711],{"class":78,"line":641},[76,23712,4283],{"class":90},[76,23714,23715,23718],{"class":78,"line":646},[76,23716,23717],{"class":86},"    ~Phone",[76,23719,4072],{"class":90},[76,23721,23722],{"class":78,"line":659},[76,23723,4126],{"class":90},[76,23725,23726,23728,23730,23733,23735],{"class":78,"line":1608},[76,23727,5536],{"class":90},[76,23729,3298],{"class":82},[76,23731,23732],{"class":126},"\"Phone析构函数调用\"",[76,23734,3298],{"class":82},[76,23736,3320],{"class":90},[76,23738,23739],{"class":78,"line":1632},[76,23740,4283],{"class":90},[76,23742,23743],{"class":78,"line":1637},[76,23744,23745],{"class":540},"    \u002F\u002F\n",[76,23747,23748],{"class":78,"line":1642},[76,23749,23750],{"class":90},"    string m_PName;\n",[76,23752,23753],{"class":78,"line":1652},[76,23754,6079],{"class":90},[76,23756,23757,23759],{"class":78,"line":1660},[76,23758,16747],{"class":82},[76,23760,17222],{"class":86},[76,23762,23763],{"class":78,"line":1683},[76,23764,3666],{"class":90},[76,23766,23767],{"class":78,"line":1698},[76,23768,16769],{"class":82},[76,23770,23771],{"class":78,"line":1711},[76,23772,19044],{"class":540},[76,23774,23775,23777,23779,23781,23783,23785,23787,23790,23793,23795,23798,23801],{"class":78,"line":1717},[76,23776,20568],{"class":86},[76,23778,123],{"class":90},[76,23780,16969],{"class":86},[76,23782,16972],{"class":7296},[76,23784,2642],{"class":90},[76,23786,16969],{"class":86},[76,23788,23789],{"class":7296}," pname",[76,23791,23792],{"class":90},"):",[76,23794,17062],{"class":86},[76,23796,23797],{"class":90},"(name),m_phone.",[76,23799,23800],{"class":86},"m_PName",[76,23802,23803],{"class":90},"(pname) \n",[76,23805,23806],{"class":78,"line":1728},[76,23807,4126],{"class":90},[76,23809,23810,23812,23814,23817],{"class":78,"line":1740},[76,23811,5536],{"class":90},[76,23813,3298],{"class":82},[76,23815,23816],{"class":126},"\"Person的构造函数调用\"",[76,23818,3415],{"class":90},[76,23820,23821],{"class":78,"line":1746},[76,23822,4283],{"class":90},[76,23824,23825,23827],{"class":78,"line":1751},[76,23826,20601],{"class":86},[76,23828,4072],{"class":90},[76,23830,23831],{"class":78,"line":1756},[76,23832,4126],{"class":90},[76,23834,23835,23837,23839,23842,23844],{"class":78,"line":1766},[76,23836,5536],{"class":90},[76,23838,3298],{"class":82},[76,23840,23841],{"class":126},"\"Person析构函数调用\"",[76,23843,3298],{"class":82},[76,23845,3320],{"class":90},[76,23847,23848],{"class":78,"line":1773},[76,23849,4283],{"class":90},[76,23851,23852],{"class":78,"line":1793},[76,23853,9858],{"class":540},[76,23855,23856],{"class":78,"line":1806},[76,23857,16944],{"class":90},[76,23859,23860],{"class":78,"line":1817},[76,23861,23862],{"class":540},"    \u002F\u002F手机\n",[76,23864,23865],{"class":78,"line":1822},[76,23866,23867],{"class":90},"    Phone m_Phone;\n",[76,23869,23870],{"class":78,"line":1835},[76,23871,6079],{"class":90},[76,23873,23874,23876,23878],{"class":78,"line":1847},[76,23875,7444],{"class":82},[76,23877,7668],{"class":86},[76,23879,4072],{"class":90},[76,23881,23882],{"class":78,"line":1852},[76,23883,3666],{"class":90},[76,23885,23886,23888,23890,23892,23894,23896,23899],{"class":78,"line":1862},[76,23887,21480],{"class":90},[76,23889,19],{"class":86},[76,23891,123],{"class":90},[76,23893,9994],{"class":126},[76,23895,2642],{"class":90},[76,23897,23898],{"class":126},"\"安卓\"",[76,23900,4807],{"class":90},[76,23902,23903,23905,23907,23910,23912,23915,23917],{"class":78,"line":1874},[76,23904,3671],{"class":90},[76,23906,3298],{"class":82},[76,23908,23909],{"class":90},"p.Name",[76,23911,3298],{"class":82},[76,23913,23914],{"class":126},"\"拿着：\"",[76,23916,3298],{"class":82},[76,23918,23919],{"class":90},"p.m_phone.m_PName;\n",[76,23921,23922],{"class":78,"line":1879},[76,23923,3685],{"class":90},[76,23925,23926,23928,23930],{"class":78,"line":1884},[76,23927,1360],{"class":82},[76,23929,4069],{"class":86},[76,23931,4072],{"class":90},[76,23933,23934],{"class":78,"line":1889},[76,23935,3666],{"class":90},[76,23937,23938,23940],{"class":78,"line":1900},[76,23939,7713],{"class":86},[76,23941,7716],{"class":90},[76,23943,23944],{"class":78,"line":1906},[76,23945,3685],{"class":90},[19,23947,163],{},[66,23949,23951],{"className":2264,"code":23950,"language":2266,"meta":71,"style":71},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[73,23952,23953,23958],{"__ignoreMap":71},[76,23954,23955],{"class":78,"line":79},[76,23956,23957],{"class":540},"    \u002F\u002F不需要写这个：\n",[76,23959,23960],{"class":78,"line":94},[76,23961,23962],{"class":540},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23964,23965],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[66,23967,23969],{"className":2264,"code":23968,"language":2266,"meta":71,"style":71},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[73,23970,23971],{"__ignoreMap":71},[76,23972,23973,23975,23978,23980,23983,23986],{"class":78,"line":79},[76,23974,21095],{"class":86},[76,23976,23977],{"class":90},"(string name.string pname):",[76,23979,17062],{"class":86},[76,23981,23982],{"class":90},"(name),",[76,23984,23985],{"class":86},"m_phone",[76,23987,23988],{"class":90},"(pname) {}\n",[19,23990,23991,23992,370,23995],{},"采用的是隐式转换法，实际为如下：\n",[73,23993,23994],{},"m_phone(pname)",[73,23996,23997],{},"Phone m_phone=pname",[19,23999,24000,24003],{},[2416,24001,24002],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24005,24006],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[889,24008,24010],{"id":24009},"_828静态对象","8.2.8静态对象",[19,24012,24013],{},"静态对象在成员对象前static，称为静态对象",[19,24015,24016],{},"静态对象分为两类：",[26,24018,24019],{},[29,24020,24021],{},"静态成员变量",[3261,24023,24024,24027,24030],{},[29,24025,24026],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,24028,24029],{},"②在编译阶段分配内存",[29,24031,24032],{},"③类内声明，类外初始化",[26,24034,24035],{"start":94},[29,24036,24037],{},"静态成员函数",[3261,24039,24040,24043],{},[29,24041,24042],{},"①所有对象共享同一个函数",[29,24044,24045],{},"②静态成员函数只能访问静态成员变量",[24047,24048,24050],"h4",{"id":24049},"_8281静态成员变量","8.2.8.1静态成员变量",[66,24052,24054],{"className":2264,"code":24053,"language":2266,"meta":71,"style":71},"#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",[73,24055,24056,24062,24072,24078,24082,24086,24091,24096,24101,24109,24113,24117,24121,24129,24133,24137,24142,24155,24159,24167,24171,24177],{"__ignoreMap":71},[76,24057,24058,24060],{"class":78,"line":79},[76,24059,4046],{"class":82},[76,24061,4049],{"class":126},[76,24063,24064,24066,24068,24070],{"class":78,"line":94},[76,24065,4054],{"class":82},[76,24067,4057],{"class":82},[76,24069,4060],{"class":86},[76,24071,3415],{"class":90},[76,24073,24074,24076],{"class":78,"line":133},[76,24075,16747],{"class":82},[76,24077,17222],{"class":86},[76,24079,24080],{"class":78,"line":145},[76,24081,3666],{"class":90},[76,24083,24084],{"class":78,"line":152},[76,24085,16769],{"class":82},[76,24087,24088],{"class":78,"line":157},[76,24089,24090],{"class":540},"    \u002F\u002F非静态成员变量\n",[76,24092,24093],{"class":78,"line":246},[76,24094,24095],{"class":540},"    \u002F\u002F int m_A;\n",[76,24097,24098],{"class":78,"line":251},[76,24099,24100],{"class":540},"    \u002F\u002F定义静态成员变量\n",[76,24102,24103,24105,24107],{"class":78,"line":257},[76,24104,13074],{"class":82},[76,24106,4478],{"class":82},[76,24108,23441],{"class":90},[76,24110,24111],{"class":78,"line":641},[76,24112,149],{"emptyLinePlaceholder":148},[76,24114,24115],{"class":78,"line":646},[76,24116,149],{"emptyLinePlaceholder":148},[76,24118,24119],{"class":78,"line":659},[76,24120,6079],{"class":90},[76,24122,24123,24125,24127],{"class":78,"line":1608},[76,24124,7444],{"class":82},[76,24126,7668],{"class":86},[76,24128,4072],{"class":90},[76,24130,24131],{"class":78,"line":1632},[76,24132,3666],{"class":90},[76,24134,24135],{"class":78,"line":1637},[76,24136,17364],{"class":90},[76,24138,24139],{"class":78,"line":1642},[76,24140,24141],{"class":540},"    \u002F\u002F输出类成员变量这块内存\n",[76,24143,24144,24146,24148,24151,24153],{"class":78,"line":1652},[76,24145,3671],{"class":90},[76,24147,3298],{"class":82},[76,24149,24150],{"class":90},"p.m_A",[76,24152,3298],{"class":82},[76,24154,3320],{"class":90},[76,24156,24157],{"class":78,"line":1660},[76,24158,3685],{"class":90},[76,24160,24161,24163,24165],{"class":78,"line":1683},[76,24162,1360],{"class":82},[76,24164,4069],{"class":86},[76,24166,4072],{"class":90},[76,24168,24169],{"class":78,"line":1698},[76,24170,3666],{"class":90},[76,24172,24173,24175],{"class":78,"line":1711},[76,24174,7713],{"class":86},[76,24176,4072],{"class":90},[76,24178,24179],{"class":78,"line":1717},[76,24180,3685],{"class":90},[19,24182,24183],{},"此时输出是报错的：无法解析外部命令",[19,24185,24186],{},"解决这一问题：必须用到类内声明，类外初始化操作",[66,24188,24190],{"className":2264,"code":24189,"language":2266,"meta":71,"style":71},"#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",[73,24191,24192,24198,24208,24214,24218,24222,24227,24235,24239,24244,24259,24267,24271,24275,24280,24285,24297,24302,24313,24318,24323,24336,24340,24348,24352,24358],{"__ignoreMap":71},[76,24193,24194,24196],{"class":78,"line":79},[76,24195,4046],{"class":82},[76,24197,4049],{"class":126},[76,24199,24200,24202,24204,24206],{"class":78,"line":94},[76,24201,4054],{"class":82},[76,24203,4057],{"class":82},[76,24205,4060],{"class":86},[76,24207,3415],{"class":90},[76,24209,24210,24212],{"class":78,"line":133},[76,24211,16747],{"class":82},[76,24213,17222],{"class":86},[76,24215,24216],{"class":78,"line":145},[76,24217,3666],{"class":90},[76,24219,24220],{"class":78,"line":152},[76,24221,16769],{"class":82},[76,24223,24224],{"class":78,"line":157},[76,24225,24226],{"class":540},"    \u002F\u002F类内声明\n",[76,24228,24229,24231,24233],{"class":78,"line":246},[76,24230,13074],{"class":82},[76,24232,4478],{"class":82},[76,24234,23441],{"class":90},[76,24236,24237],{"class":78,"line":251},[76,24238,6079],{"class":90},[76,24240,24241],{"class":78,"line":257},[76,24242,24243],{"class":540},"\u002F\u002F类外初始化\n",[76,24245,24246,24248,24250,24253,24255,24257],{"class":78,"line":641},[76,24247,1360],{"class":82},[76,24249,17620],{"class":86},[76,24251,24252],{"class":90},"::m_A",[76,24254,370],{"class":82},[76,24256,402],{"class":119},[76,24258,3415],{"class":90},[76,24260,24261,24263,24265],{"class":78,"line":646},[76,24262,7444],{"class":82},[76,24264,7668],{"class":86},[76,24266,4072],{"class":90},[76,24268,24269],{"class":78,"line":659},[76,24270,3666],{"class":90},[76,24272,24273],{"class":78,"line":1608},[76,24274,17364],{"class":90},[76,24276,24277],{"class":78,"line":1632},[76,24278,24279],{"class":540},"    \u002F\u002F访问变量的原内存空间\n",[76,24281,24282],{"class":78,"line":1637},[76,24283,24284],{"class":540},"    \u002F\u002F100\n",[76,24286,24287,24289,24291,24293,24295],{"class":78,"line":1642},[76,24288,3671],{"class":90},[76,24290,3298],{"class":82},[76,24292,24150],{"class":90},[76,24294,3298],{"class":82},[76,24296,3320],{"class":90},[76,24298,24299],{"class":78,"line":1652},[76,24300,24301],{"class":90},"    Person p2;\n",[76,24303,24304,24307,24309,24311],{"class":78,"line":1660},[76,24305,24306],{"class":90},"    p2.m_A",[76,24308,370],{"class":82},[76,24310,2133],{"class":119},[76,24312,3415],{"class":90},[76,24314,24315],{"class":78,"line":1683},[76,24316,24317],{"class":540},"    \u002F\u002F继续访问这片空间\n",[76,24319,24320],{"class":78,"line":1698},[76,24321,24322],{"class":540},"    \u002F\u002F200\n",[76,24324,24325,24327,24329,24332,24334],{"class":78,"line":1711},[76,24326,3671],{"class":90},[76,24328,3298],{"class":82},[76,24330,24331],{"class":90},"p2.m_A",[76,24333,3298],{"class":82},[76,24335,3320],{"class":90},[76,24337,24338],{"class":78,"line":1717},[76,24339,3685],{"class":90},[76,24341,24342,24344,24346],{"class":78,"line":1728},[76,24343,1360],{"class":82},[76,24345,4069],{"class":86},[76,24347,4072],{"class":90},[76,24349,24350],{"class":78,"line":1740},[76,24351,3666],{"class":90},[76,24353,24354,24356],{"class":78,"line":1746},[76,24355,7713],{"class":86},[76,24357,7716],{"class":90},[76,24359,24360],{"class":78,"line":1751},[76,24361,3685],{"class":90},[19,24363,24364],{},[2416,24365,24366],{},"静态变量的访问",[66,24368,24370],{"className":2264,"code":24369,"language":2266,"meta":71,"style":71},"#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",[73,24371,24372,24378,24388,24394,24398,24402,24406,24414,24418,24423,24431,24435,24439,24453,24468,24476,24480,24485,24490,24495,24500,24512,24517,24522,24536,24553,24557,24565,24569,24575],{"__ignoreMap":71},[76,24373,24374,24376],{"class":78,"line":79},[76,24375,4046],{"class":82},[76,24377,4049],{"class":126},[76,24379,24380,24382,24384,24386],{"class":78,"line":94},[76,24381,4054],{"class":82},[76,24383,4057],{"class":82},[76,24385,4060],{"class":86},[76,24387,3415],{"class":90},[76,24389,24390,24392],{"class":78,"line":133},[76,24391,16747],{"class":82},[76,24393,17222],{"class":86},[76,24395,24396],{"class":78,"line":145},[76,24397,3666],{"class":90},[76,24399,24400],{"class":78,"line":152},[76,24401,16769],{"class":82},[76,24403,24404],{"class":78,"line":157},[76,24405,24226],{"class":540},[76,24407,24408,24410,24412],{"class":78,"line":246},[76,24409,13074],{"class":82},[76,24411,4478],{"class":82},[76,24413,23441],{"class":90},[76,24415,24416],{"class":78,"line":251},[76,24417,17273],{"class":82},[76,24419,24420],{"class":78,"line":257},[76,24421,24422],{"class":540},"    \u002F\u002F静态成员变量也是有访问权限的\n",[76,24424,24425,24427,24429],{"class":78,"line":641},[76,24426,13074],{"class":82},[76,24428,4478],{"class":82},[76,24430,23448],{"class":90},[76,24432,24433],{"class":78,"line":646},[76,24434,6079],{"class":90},[76,24436,24437],{"class":78,"line":659},[76,24438,24243],{"class":540},[76,24440,24441,24443,24445,24447,24449,24451],{"class":78,"line":1608},[76,24442,1360],{"class":82},[76,24444,17620],{"class":86},[76,24446,24252],{"class":90},[76,24448,370],{"class":82},[76,24450,402],{"class":119},[76,24452,3415],{"class":90},[76,24454,24455,24457,24459,24462,24464,24466],{"class":78,"line":1632},[76,24456,1360],{"class":82},[76,24458,17620],{"class":86},[76,24460,24461],{"class":90},"::m_B",[76,24463,370],{"class":82},[76,24465,408],{"class":119},[76,24467,3415],{"class":90},[76,24469,24470,24472,24474],{"class":78,"line":1637},[76,24471,7444],{"class":82},[76,24473,7737],{"class":86},[76,24475,4072],{"class":90},[76,24477,24478],{"class":78,"line":1642},[76,24479,3666],{"class":90},[76,24481,24482],{"class":78,"line":1652},[76,24483,24484],{"class":540},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[76,24486,24487],{"class":78,"line":1660},[76,24488,24489],{"class":540},"    \u002F\u002F静态成员变量有两种访问方式：\n",[76,24491,24492],{"class":78,"line":1683},[76,24493,24494],{"class":540},"    \u002F\u002F1.通过对象进行访问\n",[76,24496,24497],{"class":78,"line":1698},[76,24498,24499],{"class":90},"    Person p;  \n",[76,24501,24502,24504,24506,24508,24510],{"class":78,"line":1711},[76,24503,3671],{"class":90},[76,24505,3298],{"class":82},[76,24507,24150],{"class":90},[76,24509,3298],{"class":82},[76,24511,3320],{"class":90},[76,24513,24514],{"class":78,"line":1717},[76,24515,24516],{"class":540},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[76,24518,24519],{"class":78,"line":1728},[76,24520,24521],{"class":540},"    \u002F\u002F2.通过类名进行访问\n",[76,24523,24524,24526,24528,24530,24532,24534],{"class":78,"line":1740},[76,24525,3671],{"class":90},[76,24527,3298],{"class":82},[76,24529,21095],{"class":86},[76,24531,24252],{"class":90},[76,24533,3298],{"class":82},[76,24535,3320],{"class":90},[76,24537,24538,24540,24542,24544,24546,24548,24550],{"class":78,"line":1746},[76,24539,3671],{"class":90},[76,24541,3298],{"class":82},[76,24543,21095],{"class":86},[76,24545,24461],{"class":90},[76,24547,3298],{"class":82},[76,24549,3363],{"class":90},[76,24551,24552],{"class":540}," \u002F\u002F没有访问权限，报错\n",[76,24554,24555],{"class":78,"line":1751},[76,24556,3685],{"class":90},[76,24558,24559,24561,24563],{"class":78,"line":1756},[76,24560,1360],{"class":82},[76,24562,4069],{"class":86},[76,24564,4072],{"class":90},[76,24566,24567],{"class":78,"line":1766},[76,24568,3666],{"class":90},[76,24570,24571,24573],{"class":78,"line":1773},[76,24572,7782],{"class":86},[76,24574,7716],{"class":90},[76,24576,24577],{"class":78,"line":1793},[76,24578,3685],{"class":90},[24047,24580,24582],{"id":24581},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24584,24585],{},"1.静态成员函数定义与访问",[66,24587,24589],{"className":2264,"code":24588,"language":2266,"meta":71,"style":71},"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",[73,24590,24591,24597,24601,24605,24610,24621,24625,24639,24643,24647,24655,24659,24664,24669,24673,24681,24686,24696],{"__ignoreMap":71},[76,24592,24593,24595],{"class":78,"line":79},[76,24594,16747],{"class":82},[76,24596,17222],{"class":86},[76,24598,24599],{"class":78,"line":94},[76,24600,3666],{"class":90},[76,24602,24603],{"class":78,"line":133},[76,24604,16769],{"class":82},[76,24606,24607],{"class":78,"line":145},[76,24608,24609],{"class":540},"    \u002F\u002F在公共权限下定义静态成员函数\n",[76,24611,24612,24614,24617,24619],{"class":78,"line":152},[76,24613,13074],{"class":82},[76,24615,24616],{"class":82}," void",[76,24618,13439],{"class":86},[76,24620,4072],{"class":90},[76,24622,24623],{"class":78,"line":157},[76,24624,4126],{"class":90},[76,24626,24627,24630,24632,24635,24637],{"class":78,"line":246},[76,24628,24629],{"class":90},"        coout",[76,24631,3298],{"class":82},[76,24633,24634],{"class":126},"\"静态成员函数的调用\"",[76,24636,3298],{"class":82},[76,24638,3320],{"class":90},[76,24640,24641],{"class":78,"line":251},[76,24642,4283],{"class":90},[76,24644,24645],{"class":78,"line":257},[76,24646,6079],{"class":90},[76,24648,24649,24651,24653],{"class":78,"line":641},[76,24650,7444],{"class":82},[76,24652,7668],{"class":86},[76,24654,4072],{"class":90},[76,24656,24657],{"class":78,"line":646},[76,24658,3666],{"class":90},[76,24660,24661],{"class":78,"line":659},[76,24662,24663],{"class":540},"    \u002F\u002F静态成员函数的调用方式:\n",[76,24665,24666],{"class":78,"line":1608},[76,24667,24668],{"class":540},"    \u002F\u002F1.通过对象访问\n",[76,24670,24671],{"class":78,"line":1632},[76,24672,17364],{"class":90},[76,24674,24675,24677,24679],{"class":78,"line":1637},[76,24676,17916],{"class":90},[76,24678,13605],{"class":86},[76,24680,7716],{"class":90},[76,24682,24683],{"class":78,"line":1642},[76,24684,24685],{"class":540},"    \u002F\u002F2.通过类名访问\n",[76,24687,24688,24690,24692,24694],{"class":78,"line":1652},[76,24689,20568],{"class":86},[76,24691,19781],{"class":90},[76,24693,13605],{"class":86},[76,24695,7716],{"class":90},[76,24697,24698],{"class":78,"line":1660},[76,24699,3685],{"class":90},[26,24701,24702],{"start":94},[29,24703,24704],{},"静态成员函数只能访问静态成员变量",[66,24706,24708],{"className":2264,"code":24707,"language":2266,"meta":71,"style":71},"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",[73,24709,24710,24716,24720,24724,24728,24738,24742,24756,24761,24773,24777,24788,24798,24802,24806,24810,24820,24824,24837,24841,24845,24849,24853,24867,24875,24879,24883,24887,24891,24899,24903,24913,24918,24922,24930,24934,24940],{"__ignoreMap":71},[76,24711,24712,24714],{"class":78,"line":79},[76,24713,16747],{"class":82},[76,24715,17222],{"class":86},[76,24717,24718],{"class":78,"line":94},[76,24719,3666],{"class":90},[76,24721,24722],{"class":78,"line":133},[76,24723,16769],{"class":82},[76,24725,24726],{"class":78,"line":145},[76,24727,24609],{"class":540},[76,24729,24730,24732,24734,24736],{"class":78,"line":152},[76,24731,13074],{"class":82},[76,24733,24616],{"class":82},[76,24735,13439],{"class":86},[76,24737,4072],{"class":90},[76,24739,24740],{"class":78,"line":157},[76,24741,4126],{"class":90},[76,24743,24744,24747,24749,24751,24753],{"class":78,"line":246},[76,24745,24746],{"class":90},"        m_A",[76,24748,370],{"class":82},[76,24750,2575],{"class":119},[76,24752,2324],{"class":90},[76,24754,24755],{"class":540}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[76,24757,24758],{"class":78,"line":251},[76,24759,24760],{"class":540},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[76,24762,24763,24765,24767,24769,24771],{"class":78,"line":257},[76,24764,24629],{"class":90},[76,24766,3298],{"class":82},[76,24768,24634],{"class":126},[76,24770,3298],{"class":82},[76,24772,3320],{"class":90},[76,24774,24775],{"class":78,"line":641},[76,24776,4283],{"class":90},[76,24778,24779,24781,24783,24785],{"class":78,"line":646},[76,24780,13074],{"class":82},[76,24782,4478],{"class":82},[76,24784,17499],{"class":90},[76,24786,24787],{"class":540}," \u002F\u002F静态成员变量\n",[76,24789,24790,24792,24795],{"class":78,"line":659},[76,24791,4081],{"class":82},[76,24793,24794],{"class":90}," m_B;",[76,24796,24797],{"class":540}," \u002F\u002F非静态成员变量\n",[76,24799,24800],{"class":78,"line":1608},[76,24801,149],{"emptyLinePlaceholder":148},[76,24803,24804],{"class":78,"line":1632},[76,24805,17273],{"class":82},[76,24807,24808],{"class":78,"line":1637},[76,24809,24422],{"class":540},[76,24811,24812,24814,24816,24818],{"class":78,"line":1642},[76,24813,13074],{"class":82},[76,24815,24616],{"class":82},[76,24817,15671],{"class":86},[76,24819,4072],{"class":90},[76,24821,24822],{"class":78,"line":1652},[76,24823,4126],{"class":90},[76,24825,24826,24828,24830,24833,24835],{"class":78,"line":1660},[76,24827,5536],{"class":90},[76,24829,3298],{"class":82},[76,24831,24832],{"class":126},"\"这是私有权限下的静态函数调用\"",[76,24834,3298],{"class":82},[76,24836,3320],{"class":90},[76,24838,24839],{"class":78,"line":1683},[76,24840,4283],{"class":90},[76,24842,24843],{"class":78,"line":1698},[76,24844,149],{"emptyLinePlaceholder":148},[76,24846,24847],{"class":78,"line":1711},[76,24848,149],{"emptyLinePlaceholder":148},[76,24850,24851],{"class":78,"line":1717},[76,24852,6079],{"class":90},[76,24854,24855,24857,24859,24861,24863,24865],{"class":78,"line":1728},[76,24856,1360],{"class":82},[76,24858,17620],{"class":86},[76,24860,24252],{"class":90},[76,24862,370],{"class":82},[76,24864,1294],{"class":119},[76,24866,3415],{"class":90},[76,24868,24869,24871,24873],{"class":78,"line":1740},[76,24870,7444],{"class":82},[76,24872,7668],{"class":86},[76,24874,4072],{"class":90},[76,24876,24877],{"class":78,"line":1746},[76,24878,3666],{"class":90},[76,24880,24881],{"class":78,"line":1751},[76,24882,24663],{"class":540},[76,24884,24885],{"class":78,"line":1756},[76,24886,24668],{"class":540},[76,24888,24889],{"class":78,"line":1766},[76,24890,17364],{"class":90},[76,24892,24893,24895,24897],{"class":78,"line":1773},[76,24894,17916],{"class":90},[76,24896,13605],{"class":86},[76,24898,7716],{"class":90},[76,24900,24901],{"class":78,"line":1793},[76,24902,24685],{"class":540},[76,24904,24905,24907,24909,24911],{"class":78,"line":1806},[76,24906,20568],{"class":86},[76,24908,19781],{"class":90},[76,24910,13605],{"class":86},[76,24912,7716],{"class":90},[76,24914,24915],{"class":78,"line":1817},[76,24916,24917],{"class":540},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[76,24919,24920],{"class":78,"line":1822},[76,24921,3685],{"class":90},[76,24923,24924,24926,24928],{"class":78,"line":1835},[76,24925,1360],{"class":82},[76,24927,4069],{"class":86},[76,24929,4072],{"class":90},[76,24931,24932],{"class":78,"line":1847},[76,24933,3666],{"class":90},[76,24935,24936,24938],{"class":78,"line":1852},[76,24937,7713],{"class":86},[76,24939,7716],{"class":90},[76,24941,24942],{"class":78,"line":1862},[76,24943,3685],{"class":90},[889,24945,24947],{"id":24946},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24047,24949,24951],{"id":24950},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24953,24954],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24956,24957],{},"只有非静态成员变量才属于类的对象上",[24959,24960,24962],"h5",{"id":24961},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[66,24964,24966],{"className":2264,"code":24965,"language":2266,"meta":71,"style":71},"#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",[73,24967,24968,24975,24985,24991,24995,24999,25003,25011,25015,25019,25042,25046,25054,25058,25064],{"__ignoreMap":71},[76,24969,24970,24972],{"class":78,"line":79},[76,24971,4046],{"class":82},[76,24973,24974],{"class":126},"\u003Ciostraem>\n",[76,24976,24977,24979,24981,24983],{"class":78,"line":94},[76,24978,4054],{"class":82},[76,24980,4057],{"class":82},[76,24982,4060],{"class":86},[76,24984,3415],{"class":90},[76,24986,24987,24989],{"class":78,"line":133},[76,24988,16747],{"class":82},[76,24990,17222],{"class":86},[76,24992,24993],{"class":78,"line":145},[76,24994,3666],{"class":90},[76,24996,24997],{"class":78,"line":152},[76,24998,149],{"emptyLinePlaceholder":148},[76,25000,25001],{"class":78,"line":157},[76,25002,6079],{"class":90},[76,25004,25005,25007,25009],{"class":78,"line":246},[76,25006,7444],{"class":82},[76,25008,7668],{"class":86},[76,25010,4072],{"class":90},[76,25012,25013],{"class":78,"line":251},[76,25014,3666],{"class":90},[76,25016,25017],{"class":78,"line":257},[76,25018,17364],{"class":90},[76,25020,25021,25023,25025,25028,25030,25033,25035,25037,25039],{"class":78,"line":641},[76,25022,3671],{"class":90},[76,25024,3298],{"class":82},[76,25026,25027],{"class":126},"\"size of p=\"",[76,25029,3298],{"class":82},[76,25031,25032],{"class":86},"sizeoif",[76,25034,8617],{"class":90},[76,25036,3298],{"class":82},[76,25038,3363],{"class":90},[76,25040,25041],{"class":540}," \u002F\u002F查看这个空类的占用的内存空间\n",[76,25043,25044],{"class":78,"line":646},[76,25045,3685],{"class":90},[76,25047,25048,25050,25052],{"class":78,"line":659},[76,25049,1360],{"class":82},[76,25051,4069],{"class":86},[76,25053,4072],{"class":90},[76,25055,25056],{"class":78,"line":1608},[76,25057,3666],{"class":90},[76,25059,25060,25062],{"class":78,"line":1632},[76,25061,7713],{"class":86},[76,25063,7716],{"class":90},[76,25065,25066],{"class":78,"line":1637},[76,25067,3685],{"class":90},[19,25069,25070],{},"输出结果为：size of p=1",[19,25072,25073],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25075,25076],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24959,25078,25080],{"id":25079},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[66,25082,25084],{"className":2264,"code":25083,"language":2266,"meta":71,"style":71},"#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",[73,25085,25086,25092,25102,25110,25114,25123,25127,25135,25139,25143,25162,25166,25170,25178,25182,25188],{"__ignoreMap":71},[76,25087,25088,25090],{"class":78,"line":79},[76,25089,4046],{"class":82},[76,25091,4049],{"class":126},[76,25093,25094,25096,25098,25100],{"class":78,"line":94},[76,25095,4054],{"class":82},[76,25097,4057],{"class":82},[76,25099,4060],{"class":86},[76,25101,3415],{"class":90},[76,25103,25104,25106,25108],{"class":78,"line":133},[76,25105,16747],{"class":82},[76,25107,17620],{"class":86},[76,25109,4762],{"class":90},[76,25111,25112],{"class":78,"line":145},[76,25113,3666],{"class":90},[76,25115,25116,25118,25120],{"class":78,"line":152},[76,25117,4081],{"class":82},[76,25119,17499],{"class":90},[76,25121,25122],{"class":540},"\u002F\u002F非静态成员变量\n",[76,25124,25125],{"class":78,"line":157},[76,25126,6079],{"class":90},[76,25128,25129,25131,25133],{"class":78,"line":246},[76,25130,7444],{"class":82},[76,25132,7668],{"class":86},[76,25134,4072],{"class":90},[76,25136,25137],{"class":78,"line":251},[76,25138,3666],{"class":90},[76,25140,25141],{"class":78,"line":257},[76,25142,17364],{"class":90},[76,25144,25145,25147,25149,25151,25153,25155,25157,25159],{"class":78,"line":641},[76,25146,3671],{"class":90},[76,25148,3298],{"class":82},[76,25150,25027],{"class":126},[76,25152,3493],{"class":82},[76,25154,8617],{"class":90},[76,25156,3298],{"class":82},[76,25158,3363],{"class":90},[76,25160,25161],{"class":540}," \u002F\u002F查看不是空对象时占用多少内存\n",[76,25163,25164],{"class":78,"line":646},[76,25165,149],{"emptyLinePlaceholder":148},[76,25167,25168],{"class":78,"line":659},[76,25169,3685],{"class":90},[76,25171,25172,25174,25176],{"class":78,"line":1608},[76,25173,1360],{"class":82},[76,25175,4069],{"class":86},[76,25177,4072],{"class":90},[76,25179,25180],{"class":78,"line":1632},[76,25181,3666],{"class":90},[76,25183,25184,25186],{"class":78,"line":1637},[76,25185,7713],{"class":86},[76,25187,7716],{"class":90},[76,25189,25190],{"class":78,"line":1642},[76,25191,3685],{"class":90},[19,25193,25194],{},"输出结果：size of p=4",[19,25196,25197],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,25199,25200],{},[29,25201,25202],{},"如果加上非静态成员变量，Person类修改如下",[66,25204,25206],{"className":2264,"code":25205,"language":2266,"meta":71,"style":71},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[73,25207,25208,25214,25218,25224,25232,25236,25241],{"__ignoreMap":71},[76,25209,25210,25212],{"class":78,"line":79},[76,25211,16747],{"class":82},[76,25213,17222],{"class":86},[76,25215,25216],{"class":78,"line":94},[76,25217,3666],{"class":90},[76,25219,25220,25222],{"class":78,"line":133},[76,25221,4081],{"class":82},[76,25223,23441],{"class":90},[76,25225,25226,25228,25230],{"class":78,"line":145},[76,25227,13074],{"class":82},[76,25229,4478],{"class":82},[76,25231,23448],{"class":90},[76,25233,25234],{"class":78,"line":152},[76,25235,6079],{"class":90},[76,25237,25238],{"class":78,"line":157},[76,25239,25240],{"class":540},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[76,25242,25243,25245,25247,25249,25251,25253],{"class":78,"line":246},[76,25244,1360],{"class":82},[76,25246,17620],{"class":86},[76,25248,24461],{"class":90},[76,25250,370],{"class":82},[76,25252,1294],{"class":119},[76,25254,3415],{"class":90},[19,25256,25257],{},"输出结果：4",[19,25259,25260],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25262,25263],{"start":94},[29,25264,25265],{},"加上非静态成员函数",[66,25267,25269],{"className":2264,"code":25268,"language":2266,"meta":71,"style":71},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[73,25270,25271,25278,25282,25288,25296,25300,25304,25308],{"__ignoreMap":71},[76,25272,25273,25275],{"class":78,"line":79},[76,25274,16747],{"class":82},[76,25276,25277],{"class":86},"  Person\n",[76,25279,25280],{"class":78,"line":94},[76,25281,3666],{"class":90},[76,25283,25284,25286],{"class":78,"line":133},[76,25285,4081],{"class":82},[76,25287,23441],{"class":90},[76,25289,25290,25292,25294],{"class":78,"line":145},[76,25291,16961],{"class":82},[76,25293,13439],{"class":86},[76,25295,4072],{"class":90},[76,25297,25298],{"class":78,"line":152},[76,25299,4126],{"class":90},[76,25301,25302],{"class":78,"line":157},[76,25303,149],{"emptyLinePlaceholder":148},[76,25305,25306],{"class":78,"line":246},[76,25307,4283],{"class":90},[76,25309,25310],{"class":78,"line":251},[76,25311,6079],{"class":90},[19,25313,25314],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25316,25317],{"start":133},[29,25318,25319],{},"加上静态成员函数",[66,25321,25323],{"className":2264,"code":25322,"language":2266,"meta":71,"style":71},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[73,25324,25325,25331,25335,25341,25349,25353,25357,25361,25372,25376,25380,25384],{"__ignoreMap":71},[76,25326,25327,25329],{"class":78,"line":79},[76,25328,16747],{"class":82},[76,25330,25277],{"class":86},[76,25332,25333],{"class":78,"line":94},[76,25334,3666],{"class":90},[76,25336,25337,25339],{"class":78,"line":133},[76,25338,4081],{"class":82},[76,25340,23441],{"class":90},[76,25342,25343,25345,25347],{"class":78,"line":145},[76,25344,16961],{"class":82},[76,25346,13439],{"class":86},[76,25348,4072],{"class":90},[76,25350,25351],{"class":78,"line":152},[76,25352,4126],{"class":90},[76,25354,25355],{"class":78,"line":157},[76,25356,149],{"emptyLinePlaceholder":148},[76,25358,25359],{"class":78,"line":246},[76,25360,4283],{"class":90},[76,25362,25363,25365,25367,25370],{"class":78,"line":251},[76,25364,13074],{"class":82},[76,25366,24616],{"class":82},[76,25368,25369],{"class":86}," func1",[76,25371,4072],{"class":90},[76,25373,25374],{"class":78,"line":257},[76,25375,4126],{"class":90},[76,25377,25378],{"class":78,"line":641},[76,25379,149],{"emptyLinePlaceholder":148},[76,25381,25382],{"class":78,"line":646},[76,25383,4283],{"class":90},[76,25385,25386],{"class":78,"line":659},[76,25387,6079],{"class":90},[19,25389,25257],{},[19,25391,25392],{},"解释：静态成员函数也不属于类上",[2178,25394,9752],{},{"title":71,"searchDepth":94,"depth":94,"links":25396},[25397,25403],{"id":16698,"depth":94,"text":16699,"children":25398},[25399,25400,25401,25402],{"id":16702,"depth":133,"text":16703},{"id":17425,"depth":133,"text":17426},{"id":17597,"depth":133,"text":17598},{"id":18055,"depth":133,"text":18056},{"id":20426,"depth":94,"text":20427,"children":25404},[25405,25406,25407,25408,25409,25410,25411,25412,25413],{"id":20438,"depth":133,"text":20439},{"id":20731,"depth":133,"text":20732},{"id":21222,"depth":133,"text":21223},{"id":22319,"depth":133,"text":22320},{"id":22742,"depth":133,"text":22743},{"id":23221,"depth":133,"text":23222},{"id":23596,"depth":133,"text":23597},{"id":24009,"depth":133,"text":24010},{"id":24946,"depth":133,"text":24947},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16663,"description":25414},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25421,"title":2266,"body":25422,"description":2201,"extension":2202,"meta":25426,"navigation":148,"path":25428,"seo":25429,"stem":25430,"__hash__":25431},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25423,"toc":25424},[],{"title":71,"searchDepth":94,"depth":94,"links":25425},[],{"category":25427},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2266,"description":2201},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25433,"title":25434,"body":25435,"description":71,"extension":2202,"meta":26026,"navigation":148,"path":26027,"seo":26028,"stem":26029,"__hash__":26030},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25436,"toc":26008},[25437,25440,25444,25447,25450,25453,25471,25476,25479,25482,25485,25488,25493,25496,25501,25504,25507,25511,25514,25517,25523,25526,25544,25548,25552,25555,25560,25563,25567,25570,25583,25586,25590,25593,25596,25599,25624,25627,25636,25647,25662,25694,25698,25705,25713,25717,25720,25723,25728,25732,25735,25738,25743,25746,25750,25753,25756,25761,25764,25768,25773,25777,25844,25848,25851,25854,25857,25860,25863,25869,25890,25893,25907,25916,25920,25923,25926,25931,25934,25939,25944,25947,25950,25955,25960,25963,25968,25973,25976,25981,25986,25989,25992,25997,26000,26005],[10,25438,25434],{"id":25439},"_1强化学习基本认识",[14,25441,25443],{"id":25442},"_11什么是强化学习","1.1.什么是强化学习",[19,25445,25446],{},"强化学习有两部分组成：智能体和环境；",[19,25448,25449],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25451,25452],{},"强化学习与监督学习的区别:",[26,25454,25455,25458,25461,25464],{},[29,25456,25457],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25459,25460],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25462,25463],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25465,25466,25467,25470],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2416,25468,25469],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25472,25473],{},[3583,25474],{"alt":71,"src":25475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25477,25478],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25480,25481],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25483,25484],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25486,25487],{},"获取奖励",[19,25489,25490],{},[3583,25491],{"alt":71,"src":25492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25494,25495],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25497,25498],{},[3583,25499],{"alt":71,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25502,25503],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25505,25506],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25508,25510],{"id":25509},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25512,25513],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25515,25516],{},"具身智能中的应用",[19,25518,25519,25522],{},[2416,25520,25521],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25524,25525],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25527,25528,25529,25532,25533,25536,25537,25540,25541],{},"机器人是",[2416,25530,25531],{},"躯体","，深度学习是",[2416,25534,25535],{},"神经元****网络","，VLA是",[2416,25538,25539],{},"通用的行为逻辑","，而强化学习是",[2416,25542,25543],{},"教练",[14,25545,25547],{"id":25546},"_13序列决策","1.3.序列决策",[889,25549,25551],{"id":25550},"_131智能体与环境","1.3.1.智能体与环境",[19,25553,25554],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25556,25557],{},[3583,25558],{"alt":71,"src":25559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25561,25562],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[889,25564,25566],{"id":25565},"_132奖励","1.3.2.奖励",[19,25568,25569],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25571,25572,25573,25582],{},"取某个策略的表现如何。强化学习的目的就是",[2416,25574,25575,25576,25581],{},"最大化",[2416,25577,25578],{},[2416,25579,25580],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25584,25585],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[889,25587,25589],{"id":25588},"_133序列决策","1.3.3.序列决策",[19,25591,25592],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25594,25595],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25597,25598],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25600,25601,25605,25606,25608,25609,25611,25612,25614,25615,15848,25618,15848,25621],{},[25602,25603,25604],"em",{},"Ht"," = ",[25602,25607,2856],{},"1*, a",[25602,25610,669],{},", r",[25602,25613,669],{},", . . . ,* ",[25602,25616,25617],{},"ot",[25602,25619,25620],{},", at ,",[25602,25622,25623],{},"rt",[19,25625,25626],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25628,25629,25605,25632,3770,25634,2693],{},[25602,25630,25631],{},"st",[25602,25633,292],{},[25602,25635,25604],{},[19,25637,25638,25639,25642,25643,25646],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2416,25640,25641],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2416,25644,25645],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25648,25649,25650,25653,25654,25657,25658,25661],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2416,25651,25652],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2416,25655,25656],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25602,25659,25660],{},"S, A, T, R, Ω, O, γ",")。",[19,25663,25664,25665,25667,25668,25670,25671,123,25673,25676,25677,25679,25680,123,25683,25686,25687,25689,25690,25693],{},"其中 ",[25602,25666,2948],{}," 表示状态空间，为隐变量，",[25602,25669,2497],{}," 为动作空间，",[25602,25672,2972],{},[25602,25674,25675],{},"s ′ |s, a",") 为状态转移概率，",[25602,25678,2923],{}," 为奖励函数，",[25602,25681,25682],{},"Ω",[25602,25684,25685],{},"o|s, a",") 为观测概率，",[25602,25688,2850],{}," 为观测空间，",[25602,25691,25692],{},"γ"," 为折扣因子。",[14,25695,25697],{"id":25696},"_14动作空间","1.4.动作空间",[19,25699,25700,25701,25704],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2416,25702,25703],{},"动作空间"," ，动作空间分为:",[26,25706,25707,25710],{},[29,25708,25709],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25711,25712],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25714,25716],{"id":25715},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25718,25719],{},"由策略、价值函数、模型三部分组成",[19,25721,25722],{},"这三者组成马尔可夫决策过程",[19,25724,25725],{},[3583,25726],{"alt":71,"src":25727},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[889,25729,25731],{"id":25730},"_151策略","1.5.1.策略",[19,25733,25734],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25736,25737],{},"策略可分为两种：",[19,25739,25740],{},[3583,25741],{"alt":71,"src":25742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25744,25745],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[889,25747,25749],{"id":25748},"_152价值函数","1.5.2.价值函数",[19,25751,25752],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25754,25755],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25757,25758],{},[3583,25759],{"alt":71,"src":25760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25762,25763],{},"进入某个状态采取的最优动作可以通过Q函数得到",[889,25765,25767],{"id":25766},"_153模型","1.5.3.模型",[19,25769,25770],{},[3583,25771],{"alt":71,"src":25772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25774,25776],{"id":25775},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2404,25778,25779,25790],{},[2407,25780,25781],{},[2410,25782,25783,25787],{},[2413,25784,25786],{"align":25785},"left","类型",[2413,25788,25789],{"align":25785},"特点",[2451,25791,25792,25802,25812,25822,25834],{},[2410,25793,25794,25799],{},[2456,25795,25796],{"align":25785},[2416,25797,25798],{},"基于价值的智能体",[2456,25800,25801],{"align":25785},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2410,25803,25804,25809],{},[2456,25805,25806],{"align":25785},[2416,25807,25808],{},"基于策略的智能体",[2456,25810,25811],{"align":25785},"直接学习策略，没有学习价值函数",[2410,25813,25814,25819],{},[2456,25815,25816],{"align":25785},[2416,25817,25818],{},"演员-评论员智能体",[2456,25820,25821],{"align":25785},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2410,25823,25824,25829],{},[2456,25825,25826],{"align":25785},[2416,25827,25828],{},"有模型强化学习智能体",[2456,25830,25831],{"align":25785},[3583,25832],{"alt":71,"src":25833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2410,25835,25836,25841],{},[2456,25837,25838],{"align":25785},[2416,25839,25840],{},"免模型强化学习智能体",[2456,25842,25843],{"align":25785},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25845,25847],{"id":25846},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25849,25850],{},"学习和规划是序列决策的两个基本问题",[19,25852,25853],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25855,25856],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25858,25859],{},"强化学习用到的库：Gym",[19,25861,25862],{},"Gym可以检验强化学习算法的优劣",[19,25864,25865,25868],{},[2416,25866,25867],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[66,25870,25874],{"className":25871,"code":25872,"language":25873,"meta":71,"style":71},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[73,25875,25876],{"__ignoreMap":71},[76,25877,25878,25881,25884,25887],{"class":78,"line":79},[76,25879,25880],{"class":86},"pip",[76,25882,25883],{"class":126}," install",[76,25885,25886],{"class":126}," gym==",[76,25888,25889],{"class":119},"0.25.2\n",[19,25891,25892],{},"显示图形界面需要",[66,25894,25896],{"className":25871,"code":25895,"language":25873,"meta":71,"style":71},"pip install pygame\n",[73,25897,25898],{"__ignoreMap":71},[76,25899,25900,25902,25904],{"class":78,"line":79},[76,25901,25880],{"class":86},[76,25903,25883],{"class":126},[76,25905,25906],{"class":126}," pygame\n",[19,25908,25909,25910],{},"有关Gym库的相关文档介绍：",[2503,25911,25915],{"href":25912,"rel":25913},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25914],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25917,25919],{"id":25918},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25921,25922],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25924,25925],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25927,25928],{},[3583,25929],{"alt":71,"src":25930},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25932,25933],{},"折扣率需要自己来设定",[19,25935,25936],{},[3583,25937],{"alt":71,"src":25938},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25940,25941],{},[29,25942,25943],{},"状态转移函数：",[19,25945,25946],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25948,25949],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25951,25952],{},[3583,25953],{"alt":71,"src":25954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25956,25957],{"start":94},[29,25958,25959],{},"动作价值函数：",[19,25961,25962],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25964,25965],{},[3583,25966],{"alt":71,"src":25967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25969,25970],{"start":133},[29,25971,25972],{},"最优动作价值函数：",[19,25974,25975],{},"这个函数是对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,25977,25978],{},[3583,25979],{"alt":71,"src":25980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25982,25983],{"start":145},[29,25984,25985],{},"状态价值函数:",[19,25987,25988],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25990,25991],{},"它衡量的是“一个具体动作”的长期价值",[19,25993,25994],{},[3583,25995],{"alt":71,"src":25996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25998,25999],{},"几个价值函数之间的比较：",[19,26001,26002],{},[3583,26003],{"alt":71,"src":26004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2178,26006,26007],{},"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":71,"searchDepth":94,"depth":94,"links":26009},[26010,26011,26012,26017,26018,26023,26024,26025],{"id":25442,"depth":94,"text":25443},{"id":25509,"depth":94,"text":25510},{"id":25546,"depth":94,"text":25547,"children":26013},[26014,26015,26016],{"id":25550,"depth":133,"text":25551},{"id":25565,"depth":133,"text":25566},{"id":25588,"depth":133,"text":25589},{"id":25696,"depth":94,"text":25697},{"id":25715,"depth":94,"text":25716,"children":26019},[26020,26021,26022],{"id":25730,"depth":133,"text":25731},{"id":25748,"depth":133,"text":25749},{"id":25766,"depth":133,"text":25767},{"id":25775,"depth":94,"text":25776},{"id":25846,"depth":94,"text":25847},{"id":25918,"depth":94,"text":25919},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25434,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26032,"title":26033,"body":26034,"description":26041,"extension":2202,"meta":26052,"navigation":148,"path":26053,"seo":26054,"stem":26055,"__hash__":26056},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26035,"toc":26050},[26036,26039,26042,26047],[10,26037,26033],{"id":26038},"_2马尔可夫决策过程",[19,26040,26041],{},"这是强化学习的基本框架",[19,26043,26044],{},[3583,26045],{"alt":71,"src":26046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26048,26049],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":71,"searchDepth":94,"depth":94,"links":26051},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26033,"description":26041},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26058,"title":26059,"body":26060,"description":71,"extension":2202,"meta":26176,"navigation":148,"path":26177,"seo":26178,"stem":26179,"__hash__":26180},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26061,"toc":26171},[26062,26065,26069,26072,26077,26082,26085,26090,26093,26098,26101,26105,26110,26113,26118,26123,26128,26131,26135,26140,26143,26148,26153,26158,26163,26166],[10,26063,26059],{"id":26064},"_3动作价值函数",[14,26066,26068],{"id":26067},"_31dqn","3.1.DQN",[19,26070,26071],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26073,26074],{},[3583,26075],{"alt":71,"src":26076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26078,26079],{},[3583,26080],{"alt":71,"src":26081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26083,26084],{},"DQN算法的描述：",[19,26086,26087],{},[3583,26088],{"alt":71,"src":26089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26091,26092],{},"这里的Dense指的是全连接层",[19,26094,26095],{},[3583,26096],{"alt":71,"src":26097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26099,26100],{},"当前观测的状态为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,26102,26104],{"id":26103},"_32dqn的举例","3.2.DQN的举例",[19,26106,26107],{},[3583,26108],{"alt":71,"src":26109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26111,26112],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26114,26115],{},[3583,26116],{"alt":71,"src":26117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26119,26120],{},[3583,26121],{"alt":71,"src":26122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26124,26125],{},[3583,26126],{"alt":71,"src":26127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26129,26130],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26132,26134],{"id":26133},"_33td算法","3.3.TD算法",[19,26136,26137],{},[3583,26138],{"alt":71,"src":26139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26141,26142],{},"强化学习TD算法公式的粗略解释：",[19,26144,26145],{},[3583,26146],{"alt":71,"src":26147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26149,26150],{},[3583,26151],{"alt":71,"src":26152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26154,26155],{},[3583,26156],{"alt":71,"src":26157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26159,26160],{},[3583,26161],{"alt":71,"src":26162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26164,26165],{},"TD算法总结：",[19,26167,26168],{},[3583,26169],{"alt":71,"src":26170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":71,"searchDepth":94,"depth":94,"links":26172},[26173,26174,26175],{"id":26067,"depth":94,"text":26068},{"id":26103,"depth":94,"text":26104},{"id":26133,"depth":94,"text":26134},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26059,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26182,"title":26183,"body":26184,"description":71,"extension":2202,"meta":26417,"navigation":148,"path":26418,"seo":26419,"stem":26420,"__hash__":26421},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26185,"toc":26413},[26186,26189,26193,26196,26199,26204,26209,26212,26217,26222,26225,26230,26233,26238,26241,26246,26249,26254,26257,26262,26267,26270,26275,26278,26281,26286,26289,26294,26299,26303,26306,26309,26314,26319,26322,26327,26332,26335,26340,26343,26346,26351,26354,26359,26362,26367,26372,26375,26380,26385,26388,26393,26396,26401,26404],[10,26187,26183],{"id":26188},"_4策略学习",[14,26190,26192],{"id":26191},"_41概念描述","4.1.概念描述",[19,26194,26195],{},"用神经网络（策略网络）近似策略函数",[19,26197,26198],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26200,26201],{},[3583,26202],{"alt":71,"src":26203},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26205,26206],{},[3583,26207],{"alt":71,"src":26208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26210,26211],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26213,26214],{},[3583,26215],{"alt":71,"src":26216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26218,26219],{},[3583,26220],{"alt":71,"src":26221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26223,26224],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26226,26227],{},[3583,26228],{"alt":71,"src":26229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26231,26232],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26234,26235],{},[3583,26236],{"alt":71,"src":26237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26239,26240],{},"改进theta要用到策略梯度算法",[19,26242,26243],{},[3583,26244],{"alt":71,"src":26245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26247,26248],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26250,26251],{},[3583,26252],{"alt":71,"src":26253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26255,26256],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26258,26259],{},[3583,26260],{"alt":71,"src":26261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26263,26264],{},[3583,26265],{"alt":71,"src":26266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26268,26269],{},"梯度公式总结：",[19,26271,26272],{},[3583,26273],{"alt":71,"src":26274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26276,26277],{},"两个公式的分别应用场景：",[19,26279,26280],{},"对于离散的动作：",[19,26282,26283],{},[3583,26284],{"alt":71,"src":26285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26287,26288],{},"对于连续的动作：",[19,26290,26291],{},[3583,26292],{"alt":71,"src":26293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26295,26296],{},[3583,26297],{"alt":71,"src":26298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26300,26302],{"id":26301},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26304,26305],{},"使用蒙特卡洛来近似计算策略梯度",[19,26307,26308],{},"蒙特卡洛法的解释如下：",[19,26310,26311],{},[3583,26312],{"alt":71,"src":26313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26315,26316],{},[3583,26317],{"alt":71,"src":26318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26320,26321],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26323,26324],{},[29,26325,26326],{},"方法一：reinforce算法",[19,26328,26329],{},[3583,26330],{"alt":71,"src":26331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26333,26334],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26336,26337],{"start":94},[29,26338,26339],{},"方法二：actor-critic算法",[19,26341,26342],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26344,26345],{},"两个网络的构建：",[19,26347,26348],{},[3583,26349],{"alt":71,"src":26350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26352,26353],{},"actor网路：",[19,26355,26356],{},[3583,26357],{"alt":71,"src":26358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26360,26361],{},"critic网络",[19,26363,26364],{},[3583,26365],{"alt":71,"src":26366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26368,26369],{"start":133},[29,26370,26371],{},"网络的训练",[19,26373,26374],{},"网络描述",[19,26376,26377],{},[3583,26378],{"alt":71,"src":26379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26381,26382],{},[3583,26383],{"alt":71,"src":26384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26386,26387],{},"TD算法更新梯度：",[19,26389,26390],{},[3583,26391],{"alt":71,"src":26392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26394,26395],{},"策略网络更新梯度：",[19,26397,26398],{},[3583,26399],{"alt":71,"src":26400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26402,26403],{},"训练整个流程的具体描述：",[19,26405,26406,26409,26410],{},[3583,26407],{"alt":71,"src":26408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3583,26411],{"alt":71,"src":26412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":71,"searchDepth":94,"depth":94,"links":26414},[26415,26416],{"id":26191,"depth":94,"text":26192},{"id":26301,"depth":94,"text":26302},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26183,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26423,"title":26424,"body":26425,"description":26432,"extension":2202,"meta":26482,"navigation":148,"path":26483,"seo":26484,"stem":26485,"__hash__":26486},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26426,"toc":26478},[26427,26430,26433,26437,26440,26445,26449,26452,26457,26460,26465,26470,26473],[10,26428,26424],{"id":26429},"_5alphago算法",[19,26431,26432],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26434,26436],{"id":26435},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26438,26439],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26441,26442],{},[3583,26443],{"alt":71,"src":26444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26446,26448],{"id":26447},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26450,26451],{},"采用强化学习的方式训练策略网络",[19,26453,26454],{},[3583,26455],{"alt":71,"src":26456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26458,26459],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26461,26462],{},[3583,26463],{"alt":71,"src":26464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26466,26467],{},[3583,26468],{"alt":71,"src":26469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26471,26472],{},"强化学习训练策略网络的总结：",[19,26474,26475],{},[3583,26476],{"alt":71,"src":26477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":71,"searchDepth":94,"depth":94,"links":26479},[26480,26481],{"id":26435,"depth":94,"text":26436},{"id":26447,"depth":94,"text":26448},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26424,"description":26432},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26488,"title":26489,"body":26490,"description":26497,"extension":2202,"meta":26500,"navigation":148,"path":26501,"seo":26502,"stem":26503,"__hash__":26504},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26491,"toc":26498},[26492,26495],[10,26493,26489],{"id":26494},"_6价值网络",[19,26496,26497],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":71,"searchDepth":94,"depth":94,"links":26499},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26489,"description":26497},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26506,"title":26507,"body":26508,"description":26512,"extension":2202,"meta":26513,"navigation":148,"path":26514,"seo":26515,"stem":26516,"__hash__":26517},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26509,"toc":26510},[],{"title":71,"searchDepth":94,"depth":94,"links":26511},[],"记录自己的强化学习笔记。",{"category":25427},"\u002Fwiki\u002F2025-12-04",{"title":26507,"description":26512},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26519,"title":26520,"body":26521,"description":2201,"extension":2202,"meta":26560,"navigation":148,"path":26561,"seo":26562,"stem":26563,"__hash__":26564},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26522,"toc":26558},[26523,26526,26529,26535,26538,26544,26547,26552,26555],[10,26524,26520],{"id":26525},"_1-项目概览与官方资源",[19,26527,26528],{},"官方文档：",[19,26530,26531],{},[2503,26532,26533],{"href":26533,"rel":26534},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25914],[19,26536,26537],{},"官方代码仓库：",[19,26539,26540],{},[2503,26541,26542],{"href":26542,"rel":26543},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25914],[19,26545,26546],{},"复现大体流程：",[19,26548,26549],{},[3583,26550],{"alt":71,"src":26551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26553,26554],{},"本教程的目标是打通这条链路：",[19,26556,26557],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":71,"searchDepth":94,"depth":94,"links":26559},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26520,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26566,"title":26567,"body":26568,"description":2201,"extension":2202,"meta":26684,"navigation":148,"path":26685,"seo":26686,"stem":26687,"__hash__":26688},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26569,"toc":26679},[26570,26573,26577,26580,26587,26591,26594,26603,26613,26617,26647,26650,26676],[10,26571,26567],{"id":26572},"_2-环境准备与设备连接",[14,26574,26576],{"id":26575},"_21-系统与环境","2.1 系统与环境",[19,26578,26579],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26581,26582,26583,26586],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[73,26584,26585],{},"lerobot"," 依赖。",[14,26588,26590],{"id":26589},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26592,26593],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[66,26595,26597],{"className":25871,"code":26596,"language":25873,"meta":71,"style":71},"lerobot-find-out\n",[73,26598,26599],{"__ignoreMap":71},[76,26600,26601],{"class":78,"line":79},[76,26602,26596],{"class":86},[19,26604,26605,26606,2478,26609,26612],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[73,26607,26608],{},"\u002Fdev\u002FttyACM0",[73,26610,26611],{},"\u002Fdev\u002FttyACM1","）。",[14,26614,26616],{"id":26615},"_23-串口授权","2.3 串口授权",[66,26618,26620],{"className":25871,"code":26619,"language":25873,"meta":71,"style":71},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[73,26621,26622,26636],{"__ignoreMap":71},[76,26623,26624,26627,26630,26633],{"class":78,"line":79},[76,26625,26626],{"class":86},"sudo",[76,26628,26629],{"class":126}," chmod",[76,26631,26632],{"class":119}," 666",[76,26634,26635],{"class":126}," \u002Fdev\u002FttyACM0\n",[76,26637,26638,26640,26642,26644],{"class":78,"line":94},[76,26639,26626],{"class":86},[76,26641,26629],{"class":126},[76,26643,26632],{"class":119},[76,26645,26646],{"class":126}," \u002Fdev\u002FttyACM1\n",[19,26648,26649],{},"说明：",[3261,26651,26652,26657,26663,26673],{},[29,26653,26654,26656],{},[73,26655,26626],{},"：以 root 权限执行命令。",[29,26658,26659,26662],{},[73,26660,26661],{},"chmod","：修改设备节点权限。",[29,26664,26665,26668,26669,26672],{},[73,26666,26667],{},"666","：",[73,26670,26671],{},"rw-rw-rw-","，所有用户可读写。",[29,26674,26675],{},"串口号必须替换为你机器上的真实端口。",[2178,26677,26678],{},"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":71,"searchDepth":94,"depth":94,"links":26680},[26681,26682,26683],{"id":26575,"depth":94,"text":26576},{"id":26589,"depth":94,"text":26590},{"id":26615,"depth":94,"text":26616},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26567,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26690,"title":26691,"body":26692,"description":2201,"extension":2202,"meta":26853,"navigation":148,"path":26854,"seo":26855,"stem":26856,"__hash__":26857},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26693,"toc":26849},[26694,26698,26702,26708,26711,26768,26771,26775,26778,26846],[10,26695,26697],{"id":26696},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26699,26701],{"id":26700},"_31-配置电机-id","3.1 配置电机 ID",[19,26703,26704,26705,26707],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[73,26706,669],{},"，需要改成机械臂链路里不冲突的编号。",[19,26709,26710],{},"方式一：用 LeRobot 命令逐步写入。",[66,26712,26714],{"className":25871,"code":26713,"language":25873,"meta":71,"style":71},"# 主臂舵机配置 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",[73,26715,26716,26721,26729,26736,26741,26745,26750,26756,26763],{"__ignoreMap":71},[76,26717,26718],{"class":78,"line":79},[76,26719,26720],{"class":540},"# 主臂舵机配置 ID\n",[76,26722,26723,26726],{"class":78,"line":94},[76,26724,26725],{"class":86},"lerobot-setup-motors",[76,26727,26728],{"class":119}," \\\n",[76,26730,26731,26734],{"class":78,"line":133},[76,26732,26733],{"class":119},"  --teleop.type=so101_leader",[76,26735,26728],{"class":119},[76,26737,26738],{"class":78,"line":145},[76,26739,26740],{"class":119},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[76,26742,26743],{"class":78,"line":152},[76,26744,149],{"emptyLinePlaceholder":148},[76,26746,26747],{"class":78,"line":157},[76,26748,26749],{"class":540},"# 从臂舵机配置 ID\n",[76,26751,26752,26754],{"class":78,"line":246},[76,26753,26725],{"class":86},[76,26755,26728],{"class":119},[76,26757,26758,26761],{"class":78,"line":251},[76,26759,26760],{"class":119},"  --robot.type=so101_follower",[76,26762,26728],{"class":119},[76,26764,26765],{"class":78,"line":257},[76,26766,26767],{"class":119},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26769,26770],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26772,26774],{"id":26773},"_32-机械臂校准","3.2 机械臂校准",[19,26776,26777],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[66,26779,26781],{"className":25871,"code":26780,"language":25873,"meta":71,"style":71},"# 主臂校准\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",[73,26782,26783,26788,26795,26801,26808,26813,26817,26822,26828,26834,26841],{"__ignoreMap":71},[76,26784,26785],{"class":78,"line":79},[76,26786,26787],{"class":540},"# 主臂校准\n",[76,26789,26790,26793],{"class":78,"line":94},[76,26791,26792],{"class":86},"lerobot-calibrate",[76,26794,26728],{"class":119},[76,26796,26797,26799],{"class":78,"line":133},[76,26798,26733],{"class":119},[76,26800,26728],{"class":119},[76,26802,26803,26806],{"class":78,"line":145},[76,26804,26805],{"class":119},"  --teleop.port=\u002Fdev\u002FttyACM0",[76,26807,26728],{"class":119},[76,26809,26810],{"class":78,"line":152},[76,26811,26812],{"class":119},"  --teleop.id=my_awesome_leader_arm\n",[76,26814,26815],{"class":78,"line":157},[76,26816,149],{"emptyLinePlaceholder":148},[76,26818,26819],{"class":78,"line":246},[76,26820,26821],{"class":540},"# 从臂校准\n",[76,26823,26824,26826],{"class":78,"line":251},[76,26825,26792],{"class":86},[76,26827,26728],{"class":119},[76,26829,26830,26832],{"class":78,"line":257},[76,26831,26760],{"class":119},[76,26833,26728],{"class":119},[76,26835,26836,26839],{"class":78,"line":641},[76,26837,26838],{"class":119},"  --robot.port=\u002Fdev\u002FttyACM1",[76,26840,26728],{"class":119},[76,26842,26843],{"class":78,"line":646},[76,26844,26845],{"class":119},"  --robot.id=my_awesome_follower_arm\n",[2178,26847,26848],{},"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":71,"searchDepth":94,"depth":94,"links":26850},[26851,26852],{"id":26700,"depth":94,"text":26701},{"id":26773,"depth":94,"text":26774},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26691,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26859,"title":26860,"body":26861,"description":2201,"extension":2202,"meta":27052,"navigation":148,"path":27053,"seo":27054,"stem":27055,"__hash__":27056},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26862,"toc":27048},[26863,26866,26870,26917,26921,26934,26997,27000,27045],[10,26864,26860],{"id":26865},"_4-遥操与相机接入",[14,26867,26869],{"id":26868},"_41-不带相机遥操","4.1 不带相机遥操",[66,26871,26873],{"className":25871,"code":26872,"language":25873,"meta":71,"style":71},"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",[73,26874,26875,26882,26888,26894,26901,26907,26913],{"__ignoreMap":71},[76,26876,26877,26880],{"class":78,"line":79},[76,26878,26879],{"class":86},"lerobot-teleoperate",[76,26881,26728],{"class":119},[76,26883,26884,26886],{"class":78,"line":94},[76,26885,26760],{"class":119},[76,26887,26728],{"class":119},[76,26889,26890,26892],{"class":78,"line":133},[76,26891,26838],{"class":119},[76,26893,26728],{"class":119},[76,26895,26896,26899],{"class":78,"line":145},[76,26897,26898],{"class":119},"  --robot.id=my_awesome_follower_arm",[76,26900,26728],{"class":119},[76,26902,26903,26905],{"class":78,"line":152},[76,26904,26733],{"class":119},[76,26906,26728],{"class":119},[76,26908,26909,26911],{"class":78,"line":157},[76,26910,26805],{"class":119},[76,26912,26728],{"class":119},[76,26914,26915],{"class":78,"line":246},[76,26916,26812],{"class":119},[14,26918,26920],{"id":26919},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[66,26922,26924],{"className":25871,"code":26923,"language":25873,"meta":71,"style":71},"lerobot-find-cameras opencv\n",[73,26925,26926],{"__ignoreMap":71},[76,26927,26928,26931],{"class":78,"line":79},[76,26929,26930],{"class":86},"lerobot-find-cameras",[76,26932,26933],{"class":126}," opencv\n",[66,26935,26937],{"className":25871,"code":26936,"language":25873,"meta":71,"style":71},"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",[73,26938,26939,26945,26951,26957,26963,26973,26979,26985,26992],{"__ignoreMap":71},[76,26940,26941,26943],{"class":78,"line":79},[76,26942,26879],{"class":86},[76,26944,26728],{"class":119},[76,26946,26947,26949],{"class":78,"line":94},[76,26948,26760],{"class":119},[76,26950,26728],{"class":119},[76,26952,26953,26955],{"class":78,"line":133},[76,26954,26838],{"class":119},[76,26956,26728],{"class":119},[76,26958,26959,26961],{"class":78,"line":145},[76,26960,26898],{"class":119},[76,26962,26728],{"class":119},[76,26964,26965,26968,26971],{"class":78,"line":152},[76,26966,26967],{"class":119},"  --robot.cameras=",[76,26969,26970],{"class":126},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[76,26972,26728],{"class":119},[76,26974,26975,26977],{"class":78,"line":157},[76,26976,26733],{"class":119},[76,26978,26728],{"class":119},[76,26980,26981,26983],{"class":78,"line":246},[76,26982,26805],{"class":119},[76,26984,26728],{"class":119},[76,26986,26987,26990],{"class":78,"line":251},[76,26988,26989],{"class":119},"  --teleop.id=my_awesome_leader_arm",[76,26991,26728],{"class":119},[76,26993,26994],{"class":78,"line":257},[76,26995,26996],{"class":119},"  --display_data=true\n",[19,26998,26999],{},"相机参数说明：",[3261,27001,27002,27008,27014,27023,27033,27039],{},[29,27003,27004,27007],{},[73,27005,27006],{},"front","：相机名称。",[29,27009,27010,27013],{},[73,27011,27012],{},"type: opencv","：相机驱动类型。",[29,27015,27016,27019,27020,26612],{},[73,27017,27018],{},"index_or_path","：设备编号或设备路径（如 ",[73,27021,27022],{},"\u002Fdev\u002Fvideo4",[29,27024,27025,27028,27029,27032],{},[73,27026,27027],{},"width"," \u002F ",[73,27030,27031],{},"height","：图像分辨率。",[29,27034,27035,27038],{},[73,27036,27037],{},"fps","：采样帧率。",[29,27040,27041,27044],{},[73,27042,27043],{},"--display_data=true","：启用实时可视化。",[2178,27046,27047],{},"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":71,"searchDepth":94,"depth":94,"links":27049},[27050,27051],{"id":26868,"depth":94,"text":26869},{"id":26919,"depth":94,"text":26920},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26860,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27058,"title":27059,"body":27060,"description":2201,"extension":2202,"meta":27232,"navigation":148,"path":27233,"seo":27234,"stem":27235,"__hash__":27236},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27061,"toc":27227},[27062,27066,27070,27075,27080,27083,27125,27131,27135,27184,27189,27193,27196,27204,27209,27214,27219,27224],[10,27063,27065],{"id":27064},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27067,27069],{"id":27068},"_51-生成访问令牌","5.1 生成访问令牌",[19,27071,27072],{},[3583,27073],{"alt":71,"src":27074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27076,27077],{},[3583,27078],{"alt":71,"src":27079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27081,27082],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[66,27084,27086],{"className":25871,"code":27085,"language":25873,"meta":71,"style":71},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[73,27087,27088,27101],{"__ignoreMap":71},[76,27089,27090,27093,27096,27098],{"class":78,"line":79},[76,27091,27092],{"class":82},"export",[76,27094,27095],{"class":90}," HF_TOKEN",[76,27097,370],{"class":82},[76,27099,27100],{"class":126},"\"your_huggingface_token\"\n",[76,27102,27103,27106,27109,27112,27115,27117,27120,27122],{"class":78,"line":94},[76,27104,27105],{"class":86},"hf",[76,27107,27108],{"class":126}," auth",[76,27110,27111],{"class":126}," login",[76,27113,27114],{"class":119}," --token",[76,27116,11789],{"class":126},[76,27118,27119],{"class":90},"$HF_TOKEN",[76,27121,307],{"class":126},[76,27123,27124],{"class":119}," --add-to-git-credential\n",[19,27126,27127,27130],{},[73,27128,27129],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27132,27134],{"id":27133},"_52-验证登录","5.2 验证登录",[66,27136,27138],{"className":25871,"code":27137,"language":25873,"meta":71,"style":71},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[73,27139,27140,27171],{"__ignoreMap":71},[76,27141,27142,27145,27147,27150,27152,27154,27157,27160,27163,27166,27169],{"class":78,"line":79},[76,27143,27144],{"class":90},"HF_USER",[76,27146,370],{"class":82},[76,27148,27149],{"class":90},"$(",[76,27151,27105],{"class":86},[76,27153,27108],{"class":126},[76,27155,27156],{"class":126}," whoami",[76,27158,27159],{"class":82}," |",[76,27161,27162],{"class":86}," head",[76,27164,27165],{"class":119}," -n",[76,27167,27168],{"class":119}," 1",[76,27170,130],{"class":90},[76,27172,27173,27176,27178,27181],{"class":78,"line":94},[76,27174,27175],{"class":119},"echo",[76,27177,11789],{"class":126},[76,27179,27180],{"class":90},"$HF_USER",[76,27182,27183],{"class":126},"\"\n",[19,27185,27186],{},[3583,27187],{"alt":71,"src":27188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27190,27192],{"id":27191},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27194,27195],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3261,27197,27198,27201],{},[29,27199,27200],{},"Dataset Repo（用于上传演示数据）",[29,27202,27203],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27205,27206],{},[3583,27207],{"alt":71,"src":27208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27210,27211],{},[3583,27212],{"alt":71,"src":27213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27215,27216],{},[3583,27217],{"alt":71,"src":27218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27220,27221],{},[3583,27222],{"alt":71,"src":27223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2178,27225,27226],{},"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":71,"searchDepth":94,"depth":94,"links":27228},[27229,27230,27231],{"id":27068,"depth":94,"text":27069},{"id":27133,"depth":94,"text":27134},{"id":27191,"depth":94,"text":27192},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27059,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27238,"title":27239,"body":27240,"description":2201,"extension":2202,"meta":27437,"navigation":148,"path":27438,"seo":27439,"stem":27440,"__hash__":27441},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27241,"toc":27432},[27242,27246,27250,27346,27354,27359,27363,27379,27382,27386,27429],[10,27243,27245],{"id":27244},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27247,27249],{"id":27248},"_61-录制示教数据","6.1 录制示教数据",[66,27251,27253],{"className":25871,"code":27252,"language":25873,"meta":71,"style":71},"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",[73,27254,27255,27262,27268,27274,27280,27289,27295,27301,27307,27314,27324,27331,27341],{"__ignoreMap":71},[76,27256,27257,27260],{"class":78,"line":79},[76,27258,27259],{"class":86},"lerobot-record",[76,27261,26728],{"class":119},[76,27263,27264,27266],{"class":78,"line":94},[76,27265,26760],{"class":119},[76,27267,26728],{"class":119},[76,27269,27270,27272],{"class":78,"line":133},[76,27271,26838],{"class":119},[76,27273,26728],{"class":119},[76,27275,27276,27278],{"class":78,"line":145},[76,27277,26898],{"class":119},[76,27279,26728],{"class":119},[76,27281,27282,27284,27287],{"class":78,"line":152},[76,27283,26967],{"class":119},[76,27285,27286],{"class":126},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[76,27288,26728],{"class":119},[76,27290,27291,27293],{"class":78,"line":157},[76,27292,26733],{"class":119},[76,27294,26728],{"class":119},[76,27296,27297,27299],{"class":78,"line":246},[76,27298,26805],{"class":119},[76,27300,26728],{"class":119},[76,27302,27303,27305],{"class":78,"line":251},[76,27304,26989],{"class":119},[76,27306,26728],{"class":119},[76,27308,27309,27312],{"class":78,"line":257},[76,27310,27311],{"class":119},"  --display_data=true",[76,27313,26728],{"class":119},[76,27315,27316,27319,27322],{"class":78,"line":641},[76,27317,27318],{"class":119},"  --dataset.repo_id=",[76,27320,27321],{"class":126},"\"Embodied-AI-6\u002Fso101_test\"",[76,27323,26728],{"class":119},[76,27325,27326,27329],{"class":78,"line":646},[76,27327,27328],{"class":119},"  --dataset.num_episodes=10",[76,27330,26728],{"class":119},[76,27332,27333,27336,27339],{"class":78,"line":659},[76,27334,27335],{"class":119},"  --dataset.single_task=",[76,27337,27338],{"class":126},"\"Grab the green cube\"",[76,27340,26728],{"class":119},[76,27342,27343],{"class":78,"line":1608},[76,27344,27345],{"class":119},"  --resume=true\n",[3261,27347,27348],{},[29,27349,27350,27353],{},[73,27351,27352],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27355,27356],{},[3583,27357],{"alt":71,"src":27358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27360,27362],{"id":27361},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[66,27364,27366],{"className":25871,"code":27365,"language":25873,"meta":71,"style":71},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[73,27367,27368],{"__ignoreMap":71},[76,27369,27370,27373,27376],{"class":78,"line":79},[76,27371,27372],{"class":86},"rm",[76,27374,27375],{"class":119}," -rf",[76,27377,27378],{"class":126}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27380,27381],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27383,27385],{"id":27384},"_63-回放指定-episode","6.3 回放指定 episode",[66,27387,27389],{"className":25871,"code":27388,"language":25873,"meta":71,"style":71},"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",[73,27390,27391,27398,27404,27410,27416,27424],{"__ignoreMap":71},[76,27392,27393,27396],{"class":78,"line":79},[76,27394,27395],{"class":86},"lerobot-replay",[76,27397,26728],{"class":119},[76,27399,27400,27402],{"class":78,"line":94},[76,27401,26760],{"class":119},[76,27403,26728],{"class":119},[76,27405,27406,27408],{"class":78,"line":133},[76,27407,26838],{"class":119},[76,27409,26728],{"class":119},[76,27411,27412,27414],{"class":78,"line":145},[76,27413,26898],{"class":119},[76,27415,26728],{"class":119},[76,27417,27418,27420,27422],{"class":78,"line":152},[76,27419,27318],{"class":119},[76,27421,27321],{"class":126},[76,27423,26728],{"class":119},[76,27425,27426],{"class":78,"line":157},[76,27427,27428],{"class":119},"  --dataset.episode=0\n",[2178,27430,27431],{},"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":71,"searchDepth":94,"depth":94,"links":27433},[27434,27435,27436],{"id":27248,"depth":94,"text":27249},{"id":27361,"depth":94,"text":27362},{"id":27384,"depth":94,"text":27385},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27239,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27443,"title":27444,"body":27445,"description":2201,"extension":2202,"meta":27573,"navigation":148,"path":27574,"seo":27575,"stem":27576,"__hash__":27577},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27446,"toc":27571},[27447,27451,27514,27517,27564,27569],[10,27448,27450],{"id":27449},"_7-act-模型训练","7. ACT 模型训练",[66,27452,27454],{"className":25871,"code":27453,"language":25873,"meta":71,"style":71},"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",[73,27455,27456,27463,27471,27478,27485,27492,27499,27506],{"__ignoreMap":71},[76,27457,27458,27461],{"class":78,"line":79},[76,27459,27460],{"class":86},"lerobot-train",[76,27462,26728],{"class":119},[76,27464,27465,27467,27469],{"class":78,"line":94},[76,27466,27318],{"class":119},[76,27468,27321],{"class":126},[76,27470,26728],{"class":119},[76,27472,27473,27476],{"class":78,"line":133},[76,27474,27475],{"class":119},"  --policy.type=act",[76,27477,26728],{"class":119},[76,27479,27480,27483],{"class":78,"line":145},[76,27481,27482],{"class":119},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[76,27484,26728],{"class":119},[76,27486,27487,27490],{"class":78,"line":152},[76,27488,27489],{"class":119},"  --job_name=act_so101_test",[76,27491,26728],{"class":119},[76,27493,27494,27497],{"class":78,"line":157},[76,27495,27496],{"class":119},"  --policy.device=cuda",[76,27498,26728],{"class":119},[76,27500,27501,27504],{"class":78,"line":246},[76,27502,27503],{"class":119},"  --wandb.enable=false",[76,27505,26728],{"class":119},[76,27507,27508,27511],{"class":78,"line":251},[76,27509,27510],{"class":119},"  --policy.repo_id=",[76,27512,27513],{"class":126},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27515,27516],{},"参数说明：",[3261,27518,27519,27525,27531,27537,27543,27552,27558],{},[29,27520,27521,27524],{},[73,27522,27523],{},"--dataset.repo_id","：训练数据集仓库。",[29,27526,27527,27530],{},[73,27528,27529],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27532,27533,27536],{},[73,27534,27535],{},"--output_dir","：本地训练输出目录。",[29,27538,27539,27542],{},[73,27540,27541],{},"--job_name","：训练任务名称。",[29,27544,27545,27548,27549,26612],{},[73,27546,27547],{},"--policy.device","：训练设备（如 ",[73,27550,27551],{},"cuda",[29,27553,27554,27557],{},[73,27555,27556],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27559,27560,27563],{},[73,27561,27562],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27565,27566],{},[3583,27567],{"alt":71,"src":27568},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2178,27570,27431],{},{"title":71,"searchDepth":94,"depth":94,"links":27572},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27444,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27579,"title":27580,"body":27581,"description":2201,"extension":2202,"meta":27668,"navigation":148,"path":27669,"seo":27670,"stem":27671,"__hash__":27672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27582,"toc":27666},[27583,27586,27589,27656,27664],[10,27584,27580],{"id":27585},"_8-策略部署与自动采集",[19,27587,27588],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[66,27590,27592],{"className":25871,"code":27591,"language":25873,"meta":71,"style":71},"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",[73,27593,27594,27600,27606,27612,27620,27626,27633,27641,27649],{"__ignoreMap":71},[76,27595,27596,27598],{"class":78,"line":79},[76,27597,27259],{"class":86},[76,27599,26728],{"class":119},[76,27601,27602,27604],{"class":78,"line":94},[76,27603,26760],{"class":119},[76,27605,26728],{"class":119},[76,27607,27608,27610],{"class":78,"line":133},[76,27609,26838],{"class":119},[76,27611,26728],{"class":119},[76,27613,27614,27616,27618],{"class":78,"line":145},[76,27615,26967],{"class":119},[76,27617,27286],{"class":126},[76,27619,26728],{"class":119},[76,27621,27622,27624],{"class":78,"line":152},[76,27623,26898],{"class":119},[76,27625,26728],{"class":119},[76,27627,27628,27631],{"class":78,"line":157},[76,27629,27630],{"class":119},"  --display_data=false",[76,27632,26728],{"class":119},[76,27634,27635,27637,27639],{"class":78,"line":246},[76,27636,27318],{"class":119},[76,27638,27321],{"class":126},[76,27640,26728],{"class":119},[76,27642,27643,27645,27647],{"class":78,"line":251},[76,27644,27335],{"class":119},[76,27646,27338],{"class":126},[76,27648,26728],{"class":119},[76,27650,27651,27654],{"class":78,"line":257},[76,27652,27653],{"class":119},"  --policy.path=",[76,27655,27513],{"class":126},[3261,27657,27658],{},[29,27659,27660,27663],{},[73,27661,27662],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2178,27665,27431],{},{"title":71,"searchDepth":94,"depth":94,"links":27667},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27580,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27674,"title":27675,"body":27676,"description":2201,"extension":2202,"meta":27705,"navigation":148,"path":27706,"seo":27707,"stem":27708,"__hash__":27709},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27677,"toc":27703},[27678,27682,27685,27691,27694,27700],[10,27679,27681],{"id":27680},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27683,27684],{},"项目地址：",[19,27686,27687],{},[2503,27688,27689],{"href":27689,"rel":27690},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25914],[19,27692,27693],{},"参考教程：",[19,27695,27696],{},[2503,27697,27698],{"href":27698,"rel":27699},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25914],[19,27701,27702],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":71,"searchDepth":94,"depth":94,"links":27704},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27675,"description":2201},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27711,"title":27712,"body":27713,"description":27717,"extension":2202,"meta":27718,"navigation":148,"path":27719,"seo":27720,"stem":27721,"__hash__":27722},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27714,"toc":27715},[],{"title":71,"searchDepth":94,"depth":94,"links":27716},[],"act复现",{"category":25427},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27712,"description":27717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27724,"title":27725,"body":27726,"description":71,"extension":2202,"meta":28028,"navigation":148,"path":28029,"seo":28030,"stem":28031,"__hash__":28032},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27727,"toc":28020},[27728,27731,27735,27745,27752,27759,27762,27769,27772,27775,27779,27791,27795,27841,27844,27847,27850,27853,27856,27860,27898,27904,27908,27962,27967,27970,27973,27978,27981,27986,27989,27992,27996,27999,28002,28006],[10,27729,27725],{"id":27730},"_1简介",[889,27732,27734],{"id":27733},"_11什么是-docker","1.1什么是 Docker？",[19,27736,27737,27738,27741,27742],{},"Docker 是一个开源的 ",[2416,27739,27740],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2416,27743,27744],{},"一次构建，到处运行。",[19,27746,27747,27748,27751],{},"“ ",[2416,27749,27750],{},"一次构建，到处运行"," ”也就是说：",[26,27753,27754],{},[29,27755,27756],{},[2416,27757,27758],{},"之前：",[19,27760,27761],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27763,27764],{},[29,27765,27766],{},[2416,27767,27768],{},"使用docker后：",[19,27770,27771],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27773,27774],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[889,27776,27778],{"id":27777},"_12它是怎么工作的","1.2.它是怎么工作的？",[3261,27780,27781,27784],{},[29,27782,27783],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27785,27786,27787,27790],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2416,27788,27789],{},"无论在哪运行都一样稳定"," 。",[889,27792,27794],{"id":27793},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2404,27796,27797,27807],{},[2407,27798,27799],{},[2410,27800,27801,27804],{},[2413,27802,27803],{"align":25785},"概念",[2413,27805,27806],{"align":25785},"解释",[2451,27808,27809,27817,27825,27833],{},[2410,27810,27811,27814],{},[2456,27812,27813],{"align":25785},"镜像",[2456,27815,27816],{"align":25785},"Image，运行容器的模板，像是一个应用快照",[2410,27818,27819,27822],{},[2456,27820,27821],{"align":25785},"容器",[2456,27823,27824],{"align":25785},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2410,27826,27827,27830],{},[2456,27828,27829],{"align":25785},"Dockerfile",[2456,27831,27832],{"align":25785},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2410,27834,27835,27838],{},[2456,27836,27837],{"align":25785},"仓库",[2456,27839,27840],{"align":25785},"Registry，存放镜像的地方，比如 Docker Hub",[19,27842,27843],{},"抽象化理解:",[19,27845,27846],{},"Docker镜像≈C++类",[19,27848,27849],{},"Docker容器≈C++类实例(即对象)",[19,27851,27852],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27854,27855],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[889,27857,27859],{"id":27858},"_14类比理解","1.4.类比理解",[2404,27861,27862,27872],{},[2407,27863,27864],{},[2410,27865,27866,27869],{},[2413,27867,27868],{"align":25785},"传统部署",[2413,27870,27871],{"align":25785},"Docker部署",[2451,27873,27874,27882,27890],{},[2410,27875,27876,27879],{},[2456,27877,27878],{"align":25785},"手动安装依赖、调试版本不一致问题",[2456,27880,27881],{"align":25785},"一次打包环境和代码",[2410,27883,27884,27887],{},[2456,27885,27886],{"align":25785},"程序“裸奔”跑在系统上",[2456,27888,27889],{"align":25785},"程序“穿着容器”隔离运行",[2410,27891,27892,27895],{},[2456,27893,27894],{"align":25785},"容易“在我电脑上能跑”",[2456,27896,27897],{"align":25785},"保证“无论在哪都能跑”",[19,27899,27900,27901],{},"就像快递包裹： ",[2416,27902,27903],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[889,27905,27907],{"id":27906},"_15docker-的核心优势","1.5.Docker 的核心优势",[2404,27909,27910,27920],{},[2407,27911,27912],{},[2410,27913,27914,27917],{},[2413,27915,27916],{"align":25785},"优势",[2413,27918,27919],{"align":25785},"说明",[2451,27921,27922,27930,27938,27946,27954],{},[2410,27923,27924,27927],{},[2456,27925,27926],{"align":25785},"轻量级",[2456,27928,27929],{"align":25785},"基于系统内核共享，启动速度快，占资源少",[2410,27931,27932,27935],{},[2456,27933,27934],{"align":25785},"跨平台",[2456,27936,27937],{"align":25785},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2410,27939,27940,27943],{},[2456,27941,27942],{"align":25785},"易于迁移部署",[2456,27944,27945],{"align":25785},"应用和环境一起封装，不怕依赖不一致",[2410,27947,27948,27951],{},[2456,27949,27950],{"align":25785},"易于版本控制",[2456,27952,27953],{"align":25785},"镜像版本可控，支持回滚",[2410,27955,27956,27959],{},[2456,27957,27958],{"align":25785},"生态丰富",[2456,27960,27961],{"align":25785},"Docker Hub 上有成千上万的现成镜像可用",[26,27963,27964],{},[29,27965,27966],{},"在Linux上可以几乎实现无性能损失。",[19,27968,27969],{},"docker里的发行版和本机共用Linux内核。",[19,27971,27972],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27974,27975],{},[29,27976,27977],{},"可以快速部署在绝大多数Linux发行版",[19,27979,27980],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27982,27983],{},[29,27984,27985],{},"配置环境简单",[19,27987,27988],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27990,27991],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27993,27994],{},[29,27995,27958],{},[19,27997,27998],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28000,28001],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[889,28003,28005],{"id":28004},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3261,28007,28008,28011,28014,28017],{},[29,28009,28010],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,28012,28013],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,28015,28016],{},"微服务架构：每个服务一个容器，灵活组合",[29,28018,28019],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":71,"searchDepth":94,"depth":94,"links":28021},[28022,28023,28024,28025,28026,28027],{"id":27733,"depth":133,"text":27734},{"id":27777,"depth":133,"text":27778},{"id":27793,"depth":133,"text":27794},{"id":27858,"depth":133,"text":27859},{"id":27906,"depth":133,"text":27907},{"id":28004,"depth":133,"text":28005},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27725,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28034,"title":28035,"body":28036,"description":71,"extension":2202,"meta":28768,"navigation":148,"path":28769,"seo":28770,"stem":28771,"__hash__":28772},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28037,"toc":28763},[28038,28041,28045,28048,28051,28057,28063,28067,28076,28079,28135,28138,28189,28192,28275,28278,28315,28319,28330,28343,28350,28353,28433,28436,28486,28489,28512,28516,28523,28526,28542,28548,28551,28567,28573,28576,28592,28606,28612,28632,28638,28641,28653,28659,28662,28676,28682,28685,28705,28710,28713,28716,28720,28723,28726,28729,28736,28739,28742,28745,28750,28755,28760],[10,28039,28035],{"id":28040},"_2安装docker",[889,28042,28044],{"id":28043},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28046,28047],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28049,28050],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28052,28053],{},[2503,28054,28055],{"href":28055,"rel":28056},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25914],[19,28058,28059],{},[2503,28060,28061],{"href":28061,"rel":28062},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25914],[24047,28064,28066],{"id":28065},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28068,28069,28070,28075],{},"以下内容根据 ",[2503,28071,28074],{"href":28072,"rel":28073},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25914],"官方文档"," 修改而来。",[19,28077,28078],{},"如果你过去安装过 docker，先删掉：",[66,28080,28082],{"className":25871,"code":28081,"language":25873,"meta":71,"style":71},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[73,28083,28084],{"__ignoreMap":71},[76,28085,28086,28088,28091,28093,28096,28099,28102,28105,28108,28111,28114,28117,28120,28123,28126,28129,28132],{"class":78,"line":79},[76,28087,5112],{"class":82},[76,28089,28090],{"class":90}," pkg ",[76,28092,1475],{"class":82},[76,28094,28095],{"class":126}," docker.io",[76,28097,28098],{"class":126}," docker-doc",[76,28100,28101],{"class":126}," docker-compose",[76,28103,28104],{"class":126}," docker-compose-v2",[76,28106,28107],{"class":126}," podman-docker",[76,28109,28110],{"class":126}," containerd",[76,28112,28113],{"class":126}," runc",[76,28115,28116],{"class":90},"; ",[76,28118,28119],{"class":82},"do",[76,28121,28122],{"class":86}," sudo",[76,28124,28125],{"class":126}," apt-get",[76,28127,28128],{"class":126}," remove",[76,28130,28131],{"class":90}," $pkg; ",[76,28133,28134],{"class":82},"done\n",[19,28136,28137],{},"首先安装依赖和GPG：",[66,28139,28143],{"className":28140,"code":28141,"language":28142,"meta":71,"style":71},"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",[73,28144,28145,28150,28155,28160,28165,28170,28175,28179,28184],{"__ignoreMap":71},[76,28146,28147],{"class":78,"line":79},[76,28148,28149],{},"# Add Docker's official GPG key:\n",[76,28151,28152],{"class":78,"line":94},[76,28153,28154],{},"sudo apt-get update\n",[76,28156,28157],{"class":78,"line":133},[76,28158,28159],{},"sudo apt-get install ca-certificates curl\n",[76,28161,28162],{"class":78,"line":145},[76,28163,28164],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[76,28166,28167],{"class":78,"line":152},[76,28168,28169],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[76,28171,28172],{"class":78,"line":157},[76,28173,28174],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[76,28176,28177],{"class":78,"line":246},[76,28178,149],{"emptyLinePlaceholder":148},[76,28180,28181],{"class":78,"line":251},[76,28182,28183],{},"# 如果上面这行报错就弄下面这行\n",[76,28185,28186],{"class":78,"line":257},[76,28187,28188],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28190,28191],{},"信任 Docker 的 GPG 公钥并添加仓库：",[66,28193,28195],{"className":25871,"code":28194,"language":25873,"meta":71,"style":71},"# 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",[73,28196,28197,28202,28208,28225,28258],{"__ignoreMap":71},[76,28198,28199],{"class":78,"line":79},[76,28200,28201],{"class":540},"# Add the repository to Apt sources:\n",[76,28203,28204,28206],{"class":78,"line":94},[76,28205,27175],{"class":119},[76,28207,26728],{"class":119},[76,28209,28210,28213,28216,28219,28222],{"class":78,"line":133},[76,28211,28212],{"class":126},"  \"deb [arch=$(",[76,28214,28215],{"class":86},"dpkg",[76,28217,28218],{"class":119}," --print-architecture",[76,28220,28221],{"class":126},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[76,28223,28224],{"class":119},"\\\n",[76,28226,28227,28230,28232,28234,28237,28240,28242,28244,28247,28249,28251,28254,28256],{"class":78,"line":145},[76,28228,28229],{"class":126},"  \"",[76,28231,27149],{"class":90},[76,28233,2819],{"class":119},[76,28235,28236],{"class":126}," \u002Fetc\u002Fos-release",[76,28238,28239],{"class":90}," && ",[76,28241,27175],{"class":119},[76,28243,11789],{"class":126},[76,28245,28246],{"class":90},"$VERSION_CODENAME",[76,28248,307],{"class":126},[76,28250,2693],{"class":90},[76,28252,28253],{"class":126},"\" stable\"",[76,28255,27159],{"class":82},[76,28257,26728],{"class":119},[76,28259,28260,28263,28266,28269,28272],{"class":78,"line":152},[76,28261,28262],{"class":86},"  sudo",[76,28264,28265],{"class":126}," tee",[76,28267,28268],{"class":126}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[76,28270,28271],{"class":82}," >",[76,28273,28274],{"class":126}," \u002Fdev\u002Fnull\n",[19,28276,28277],{},"最后安装",[66,28279,28281],{"className":25871,"code":28280,"language":25873,"meta":71,"style":71},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,28282,28283,28292],{"__ignoreMap":71},[76,28284,28285,28287,28289],{"class":78,"line":79},[76,28286,26626],{"class":86},[76,28288,28125],{"class":126},[76,28290,28291],{"class":126}," update\n",[76,28293,28294,28296,28298,28300,28303,28306,28309,28312],{"class":78,"line":94},[76,28295,26626],{"class":86},[76,28297,28125],{"class":126},[76,28299,25883],{"class":126},[76,28301,28302],{"class":126}," docker-ce",[76,28304,28305],{"class":126}," docker-ce-cli",[76,28307,28308],{"class":126}," containerd.io",[76,28310,28311],{"class":126}," docker-buildx-plugin",[76,28313,28314],{"class":126}," docker-compose-plugin\n",[24047,28316,28318],{"id":28317},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28320,28321,28322,28325,28326,28329],{},"查看自己自己包管理工具版本（dnf是 ",[2416,28323,28324],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2416,28327,28328],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[66,28331,28333],{"className":25871,"code":28332,"language":25873,"meta":71,"style":71},"dnf --version\n",[73,28334,28335],{"__ignoreMap":71},[76,28336,28337,28340],{"class":78,"line":79},[76,28338,28339],{"class":86},"dnf",[76,28341,28342],{"class":119}," --version\n",[19,28344,28069,28345,28349],{},[2503,28346,28074],{"href":28347,"rel":28348},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25914]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28351,28352],{},"如果你之前安装过 docker，请先删掉",[66,28354,28356],{"className":25871,"code":28355,"language":25873,"meta":71,"style":71},"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",[73,28357,28358,28372,28379,28386,28393,28400,28407,28414,28421,28428],{"__ignoreMap":71},[76,28359,28360,28362,28365,28367,28370],{"class":78,"line":79},[76,28361,26626],{"class":86},[76,28363,28364],{"class":126}," dnf",[76,28366,28128],{"class":126},[76,28368,28369],{"class":126}," docker",[76,28371,26728],{"class":119},[76,28373,28374,28377],{"class":78,"line":94},[76,28375,28376],{"class":126},"                  docker-client",[76,28378,26728],{"class":119},[76,28380,28381,28384],{"class":78,"line":133},[76,28382,28383],{"class":126},"                  docker-client-latest",[76,28385,26728],{"class":119},[76,28387,28388,28391],{"class":78,"line":145},[76,28389,28390],{"class":126},"                  docker-common",[76,28392,26728],{"class":119},[76,28394,28395,28398],{"class":78,"line":152},[76,28396,28397],{"class":126},"                  docker-latest",[76,28399,26728],{"class":119},[76,28401,28402,28405],{"class":78,"line":157},[76,28403,28404],{"class":126},"                  docker-latest-logrotate",[76,28406,26728],{"class":119},[76,28408,28409,28412],{"class":78,"line":246},[76,28410,28411],{"class":126},"                  docker-logrotate",[76,28413,26728],{"class":119},[76,28415,28416,28419],{"class":78,"line":251},[76,28417,28418],{"class":126},"                  docker-selinux",[76,28420,26728],{"class":119},[76,28422,28423,28426],{"class":78,"line":257},[76,28424,28425],{"class":126},"                  docker-engine-selinux",[76,28427,26728],{"class":119},[76,28429,28430],{"class":78,"line":641},[76,28431,28432],{"class":126},"                  docker-engine\n",[19,28434,28435],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[66,28437,28439],{"className":25871,"code":28438,"language":25873,"meta":71,"style":71},"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",[73,28440,28441,28455,28470],{"__ignoreMap":71},[76,28442,28443,28445,28447,28450,28452],{"class":78,"line":79},[76,28444,26626],{"class":86},[76,28446,28364],{"class":126},[76,28448,28449],{"class":119}," -y",[76,28451,25883],{"class":126},[76,28453,28454],{"class":126}," dnf-plugins-core\n",[76,28456,28457,28459,28461,28464,28467],{"class":78,"line":94},[76,28458,26626],{"class":86},[76,28460,28364],{"class":126},[76,28462,28463],{"class":126}," config-manager",[76,28465,28466],{"class":126}," addrepo",[76,28468,28469],{"class":119}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[76,28471,28472,28474,28477,28480,28483],{"class":78,"line":133},[76,28473,26626],{"class":86},[76,28475,28476],{"class":126}," sed",[76,28478,28479],{"class":119}," -i",[76,28481,28482],{"class":126}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[76,28484,28485],{"class":126}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28487,28488],{},"最后安装：",[66,28490,28492],{"className":25871,"code":28491,"language":25873,"meta":71,"style":71},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,28493,28494],{"__ignoreMap":71},[76,28495,28496,28498,28500,28502,28504,28506,28508,28510],{"class":78,"line":79},[76,28497,26626],{"class":86},[76,28499,28364],{"class":126},[76,28501,25883],{"class":126},[76,28503,28302],{"class":126},[76,28505,28305],{"class":126},[76,28507,28308],{"class":126},[76,28509,28311],{"class":126},[76,28511,28314],{"class":126},[889,28513,28515],{"id":28514},"_22配置环境","2.2.配置环境",[24047,28517,28519,28522],{"id":28518},"_221检查-docker-服务状态",[2416,28520,28521],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28524,28525],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[66,28527,28529],{"className":25871,"code":28528,"language":25873,"meta":71,"style":71},"systemctl status docker\n",[73,28530,28531],{"__ignoreMap":71},[76,28532,28533,28536,28539],{"class":78,"line":79},[76,28534,28535],{"class":86},"systemctl",[76,28537,28538],{"class":126}," status",[76,28540,28541],{"class":126}," docker\n",[24047,28543,28545,28522],{"id":28544},"_222启动-docker-服务",[2416,28546,28547],{},"2.2.2.启动 Docker 服务",[19,28549,28550],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[66,28552,28554],{"className":25871,"code":28553,"language":25873,"meta":71,"style":71},"sudo systemctl start docker\n",[73,28555,28556],{"__ignoreMap":71},[76,28557,28558,28560,28563,28565],{"class":78,"line":79},[76,28559,26626],{"class":86},[76,28561,28562],{"class":126}," systemctl",[76,28564,6266],{"class":126},[76,28566,28541],{"class":126},[24047,28568,28570,28522],{"id":28569},"_223设置-docker-开机自启",[2416,28571,28572],{},"2.2.3.设置 Docker 开机自启",[19,28574,28575],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[66,28577,28579],{"className":25871,"code":28578,"language":25873,"meta":71,"style":71},"sudo systemctl enable docker\n",[73,28580,28581],{"__ignoreMap":71},[76,28582,28583,28585,28587,28590],{"class":78,"line":79},[76,28584,26626],{"class":86},[76,28586,28562],{"class":126},[76,28588,28589],{"class":126}," enable",[76,28591,28541],{"class":126},[24047,28593,28595,15848,28598,15848,28603,28522],{"id":28594},"_224将用户添加到-docker-组",[2416,28596,28597],{},"2.2.4.将用户添加到",[2416,28599,28600],{},[73,28601,28602],{},"docker",[2416,28604,28605],{},"组",[19,28607,28608,28609,28611],{},"使用以下命令将当前用户添加到 ",[73,28610,28602],{}," 组：",[66,28613,28615],{"className":25871,"code":28614,"language":25873,"meta":71,"style":71},"sudo usermod -aG docker $USER\n",[73,28616,28617],{"__ignoreMap":71},[76,28618,28619,28621,28624,28627,28629],{"class":78,"line":79},[76,28620,26626],{"class":86},[76,28622,28623],{"class":126}," usermod",[76,28625,28626],{"class":119}," -aG",[76,28628,28369],{"class":126},[76,28630,28631],{"class":90}," $USER\n",[24047,28633,28635,28522],{"id":28634},"_225退出并重新登录",[2416,28636,28637],{},"2.2.5.退出并重新登录",[19,28639,28640],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[66,28642,28644],{"className":25871,"code":28643,"language":25873,"meta":71,"style":71},"newgrp docker\n",[73,28645,28646],{"__ignoreMap":71},[76,28647,28648,28651],{"class":78,"line":79},[76,28649,28650],{"class":86},"newgrp",[76,28652,28541],{"class":126},[24047,28654,28656,28522],{"id":28655},"_226重新启动-docker-服务如果需要",[2416,28657,28658],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28660,28661],{},"确保 Docker 服务正在运行，可以使用以下命令：",[66,28663,28664],{"className":25871,"code":28553,"language":25873,"meta":71,"style":71},[73,28665,28666],{"__ignoreMap":71},[76,28667,28668,28670,28672,28674],{"class":78,"line":79},[76,28669,26626],{"class":86},[76,28671,28562],{"class":126},[76,28673,6266],{"class":126},[76,28675,28541],{"class":126},[24047,28677,28679,28522],{"id":28678},"_227重启电脑后检查-docker-服务状态",[2416,28680,28681],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28683,28684],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[66,28686,28688],{"className":25871,"code":28687,"language":25873,"meta":71,"style":71},"sudo reboot\nsystemctl status docker\n",[73,28689,28690,28697],{"__ignoreMap":71},[76,28691,28692,28694],{"class":78,"line":79},[76,28693,26626],{"class":86},[76,28695,28696],{"class":126}," reboot\n",[76,28698,28699,28701,28703],{"class":78,"line":94},[76,28700,28535],{"class":86},[76,28702,28538],{"class":126},[76,28704,28541],{"class":126},[19,28706,28707],{},[3583,28708],{"alt":71,"src":28709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28711,28712],{},"第三行显示enabled说明开机自启动成功",[19,28714,28715],{},"按q退出",[889,28717,28719],{"id":28718},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28721,28722],{},"优先使用linux来使用docker是比较好的",[19,28724,28725],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28727,28728],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28730,28731,28732],{},"官方下载安装:",[2503,28733,28734],{"href":28734,"rel":28735},"https:\u002F\u002Fwww.docker.com\u002F",[25914],[19,28737,28738],{},"Windows的Docker显卡直通与USB直通:",[19,28740,28741],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28743,28744],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28746,28747],{},[3583,28748],{"alt":71,"src":28749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28751,28752],{},[3583,28753],{"alt":71,"src":28754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28756,28757],{},[3583,28758],{"alt":71,"src":28759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2178,28761,28762],{},"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":71,"searchDepth":94,"depth":94,"links":28764},[28765,28766,28767],{"id":28043,"depth":133,"text":28044},{"id":28514,"depth":133,"text":28515},{"id":28718,"depth":133,"text":28719},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28035,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28774,"title":28775,"body":28776,"description":28783,"extension":2202,"meta":29476,"navigation":148,"path":29477,"seo":29478,"stem":29479,"__hash__":29480},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28777,"toc":29470},[28778,28781,28784,28788,28793,28798,28801,28829,28834,28843,28846,28851,28855,28862,28867,28873,28877,28880,28884,28889,28981,28986,29004,29009,29030,29035,29051,29055,29060,29089,29094,29140,29145,29189,29197,29214,29219,29235,29240,29254,29257,29260,29263,29266,29295,29298,29303,29307,29310,29313,29319,29322,29325,29328,29390,29397,29402,29405,29423,29427,29430,29447,29450,29453,29467],[10,28779,28775],{"id":28780},"_3docker直通",[19,28782,28783],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[889,28785,28787],{"id":28786},"_31usb直通","3.1.USB直通",[19,28789,28790],{},[3583,28791],{"alt":71,"src":28792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28794,28795],{},[29,28796,28797],{},"方法一(不是很推荐新手)：",[19,28799,28800],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[66,28802,28804],{"className":25871,"code":28803,"language":25873,"meta":71,"style":71},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[73,28805,28806,28814,28819],{"__ignoreMap":71},[76,28807,28808,28811],{"class":78,"line":79},[76,28809,28810],{"class":86},"ls",[76,28812,28813],{"class":126}," \u002Fdev\n",[76,28815,28816],{"class":78,"line":94},[76,28817,28818],{"class":540},"#例如\n",[76,28820,28821,28824,28826],{"class":78,"line":133},[76,28822,28823],{"class":90},"--device",[76,28825,370],{"class":82},[76,28827,28828],{"class":126},"\u002Fdev\u002Ftty_USB0\n",[26,28830,28831],{"start":94},[29,28832,28833],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[66,28835,28837],{"className":25871,"code":28836,"language":25873,"meta":71,"style":71},"--privileged\n",[73,28838,28839],{"__ignoreMap":71},[76,28840,28841],{"class":78,"line":79},[76,28842,28836],{"class":86},[19,28844,28845],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28847,28848],{},[3583,28849],{"alt":71,"src":28850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[889,28852,28854],{"id":28853},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28856,28857,28858,28861],{},"NVIDIA Container Toolkit使用户 ",[2416,28859,28860],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28863,28864],{},[3583,28865],{"alt":71,"src":28866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28868,28869],{},[2503,28870,28871],{"href":28871,"rel":28872},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25914],[24047,28874,28876],{"id":28875},"_321安装","3.2.1.安装",[19,28878,28879],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24959,28881,28883],{"id":28882},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28885,28886],{},[29,28887,28888],{},"配置存储库 并更新",[66,28890,28892],{"className":25871,"code":28891,"language":25873,"meta":71,"style":71},"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",[73,28893,28894,28923,28943,28955,28967,28973],{"__ignoreMap":71},[76,28895,28896,28899,28902,28905,28907,28909,28912,28915,28918,28921],{"class":78,"line":79},[76,28897,28898],{"class":86},"curl",[76,28900,28901],{"class":119}," -fsSL",[76,28903,28904],{"class":126}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[76,28906,27159],{"class":82},[76,28908,28122],{"class":86},[76,28910,28911],{"class":126}," gpg",[76,28913,28914],{"class":119}," --dearmor",[76,28916,28917],{"class":119}," -o",[76,28919,28920],{"class":126}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[76,28922,26728],{"class":119},[76,28924,28925,28928,28930,28933,28936,28939,28941],{"class":78,"line":94},[76,28926,28927],{"class":90},"  && ",[76,28929,28898],{"class":86},[76,28931,28932],{"class":119}," -s",[76,28934,28935],{"class":119}," -L",[76,28937,28938],{"class":126}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[76,28940,27159],{"class":82},[76,28942,26728],{"class":119},[76,28944,28945,28948,28951,28953],{"class":78,"line":133},[76,28946,28947],{"class":86},"    sed",[76,28949,28950],{"class":126}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[76,28952,27159],{"class":82},[76,28954,26728],{"class":119},[76,28956,28957,28960,28962,28965],{"class":78,"line":145},[76,28958,28959],{"class":86},"    sudo",[76,28961,28265],{"class":126},[76,28963,28964],{"class":126}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[76,28966,26728],{"class":119},[76,28968,28969,28971],{"class":78,"line":152},[76,28970,28927],{"class":90},[76,28972,28224],{"class":119},[76,28974,28975,28977,28979],{"class":78,"line":157},[76,28976,28959],{"class":86},[76,28978,28125],{"class":126},[76,28980,28291],{"class":126},[26,28982,28983],{"start":94},[29,28984,28985],{},"安装nvidia-docker2",[66,28987,28989],{"className":25871,"code":28988,"language":25873,"meta":71,"style":71},"sudo apt-get install -y nvidia-docker2\n",[73,28990,28991],{"__ignoreMap":71},[76,28992,28993,28995,28997,28999,29001],{"class":78,"line":79},[76,28994,26626],{"class":86},[76,28996,28125],{"class":126},[76,28998,25883],{"class":126},[76,29000,28449],{"class":119},[76,29002,29003],{"class":126}," nvidia-docker2\n",[26,29005,29006],{"start":133},[29,29007,29008],{},"使用nvidia-ctk命令配置container runtime",[66,29010,29012],{"className":25871,"code":29011,"language":25873,"meta":71,"style":71},"sudo nvidia-ctk runtime configure --runtime=docker\n",[73,29013,29014],{"__ignoreMap":71},[76,29015,29016,29018,29021,29024,29027],{"class":78,"line":79},[76,29017,26626],{"class":86},[76,29019,29020],{"class":126}," nvidia-ctk",[76,29022,29023],{"class":126}," runtime",[76,29025,29026],{"class":126}," configure",[76,29028,29029],{"class":119}," --runtime=docker\n",[26,29031,29032],{"start":145},[29,29033,29034],{},"重启docker服务:",[66,29036,29038],{"className":25871,"code":29037,"language":25873,"meta":71,"style":71},"sudo systemctl restart docker\n",[73,29039,29040],{"__ignoreMap":71},[76,29041,29042,29044,29046,29049],{"class":78,"line":79},[76,29043,26626],{"class":86},[76,29045,28562],{"class":126},[76,29047,29048],{"class":126}," restart",[76,29050,28541],{"class":126},[24959,29052,29054],{"id":29053},"_3212fedora","3.2.1.2.Fedora",[26,29056,29057],{},[29,29058,29059],{},"配置存储库",[66,29061,29063],{"className":25871,"code":29062,"language":25873,"meta":71,"style":71},"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",[73,29064,29065,29080],{"__ignoreMap":71},[76,29066,29067,29069,29071,29073,29076,29078],{"class":78,"line":79},[76,29068,28898],{"class":86},[76,29070,28932],{"class":119},[76,29072,28935],{"class":119},[76,29074,29075],{"class":126}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[76,29077,27159],{"class":82},[76,29079,26728],{"class":119},[76,29081,29082,29084,29086],{"class":78,"line":94},[76,29083,26626],{"class":86},[76,29085,28265],{"class":126},[76,29087,29088],{"class":126}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,29090,29091],{"start":94},[29,29092,29093],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[66,29095,29097],{"className":25871,"code":29096,"language":25873,"meta":71,"style":71},"# 如果是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",[73,29098,29099,29104,29118,29122,29127],{"__ignoreMap":71},[76,29100,29101],{"class":78,"line":79},[76,29102,29103],{"class":540},"# 如果是RHEL或者Rocky（DNF4）\n",[76,29105,29106,29108,29110,29112,29115],{"class":78,"line":94},[76,29107,26626],{"class":86},[76,29109,28364],{"class":126},[76,29111,28463],{"class":126},[76,29113,29114],{"class":119}," --add-repo",[76,29116,29117],{"class":126}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[76,29119,29120],{"class":78,"line":133},[76,29121,149],{"emptyLinePlaceholder":148},[76,29123,29124],{"class":78,"line":145},[76,29125,29126],{"class":540},"# 如果是Feodra41+（DNF5）\n",[76,29128,29129,29131,29133,29135,29137],{"class":78,"line":152},[76,29130,26626],{"class":86},[76,29132,28364],{"class":126},[76,29134,28463],{"class":126},[76,29136,28466],{"class":126},[76,29138,29139],{"class":119}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,29141,29142],{"start":133},[29,29143,29144],{},"安装NVIDIA Container Toolki包",[66,29146,29148],{"className":25871,"code":29147,"language":25873,"meta":71,"style":71},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[73,29149,29150,29155,29168,29172,29177],{"__ignoreMap":71},[76,29151,29152],{"class":78,"line":79},[76,29153,29154],{"class":540},"# 如果是RHEL或者Rocky\n",[76,29156,29157,29159,29161,29163,29165],{"class":78,"line":94},[76,29158,26626],{"class":86},[76,29160,28364],{"class":126},[76,29162,25883],{"class":126},[76,29164,28449],{"class":119},[76,29166,29167],{"class":126}," nvidia-container-toolkit\n",[76,29169,29170],{"class":78,"line":133},[76,29171,149],{"emptyLinePlaceholder":148},[76,29173,29174],{"class":78,"line":145},[76,29175,29176],{"class":540},"# 如果是Fedora\n",[76,29178,29179,29181,29183,29185,29187],{"class":78,"line":152},[76,29180,26626],{"class":86},[76,29182,28364],{"class":126},[76,29184,25883],{"class":126},[76,29186,28449],{"class":119},[76,29188,29167],{"class":126},[26,29190,29191],{"start":145},[29,29192,29193,29194,29196],{},"安装nvidia-docker2 ： 在Fedora上使用",[73,29195,28339],{},"进行安装",[66,29198,29200],{"className":25871,"code":29199,"language":25873,"meta":71,"style":71},"sudo dnf install -y nvidia-docker2\n",[73,29201,29202],{"__ignoreMap":71},[76,29203,29204,29206,29208,29210,29212],{"class":78,"line":79},[76,29205,26626],{"class":86},[76,29207,28364],{"class":126},[76,29209,25883],{"class":126},[76,29211,28449],{"class":119},[76,29213,29003],{"class":126},[26,29215,29216],{"start":152},[29,29217,29218],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[66,29220,29221],{"className":25871,"code":29011,"language":25873,"meta":71,"style":71},[73,29222,29223],{"__ignoreMap":71},[76,29224,29225,29227,29229,29231,29233],{"class":78,"line":79},[76,29226,26626],{"class":86},[76,29228,29020],{"class":126},[76,29230,29023],{"class":126},[76,29232,29026],{"class":126},[76,29234,29029],{"class":119},[26,29236,29237],{"start":157},[29,29238,29239],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[66,29241,29242],{"className":25871,"code":29037,"language":25873,"meta":71,"style":71},[73,29243,29244],{"__ignoreMap":71},[76,29245,29246,29248,29250,29252],{"class":78,"line":79},[76,29247,26626],{"class":86},[76,29249,28562],{"class":126},[76,29251,29048],{"class":126},[76,29253,28541],{"class":126},[19,29255,29256],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29258,29259],{},"方法：",[19,29261,29262],{},"1️⃣nvidia-smi",[19,29264,29265],{},"2️⃣运行nvidia cuda 容器进行测试",[66,29267,29269],{"className":25871,"code":29268,"language":25873,"meta":71,"style":71},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[73,29270,29271],{"__ignoreMap":71},[76,29272,29273,29275,29277,29280,29283,29286,29289,29292],{"class":78,"line":79},[76,29274,26626],{"class":86},[76,29276,28369],{"class":126},[76,29278,29279],{"class":126}," run",[76,29281,29282],{"class":119}," --rm",[76,29284,29285],{"class":119}," --gpus",[76,29287,29288],{"class":126}," all",[76,29290,29291],{"class":126}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[76,29293,29294],{"class":126}," nvidia-smi\n",[19,29296,29297],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29299,29300],{},[3583,29301],{"alt":71,"src":29302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[889,29304,29306],{"id":29305},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29308,29309],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29311,29312],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29314,29315],{},[2503,29316,29317],{"href":29317,"rel":29318},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25914],[19,29320,29321],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29323,29324],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29326,29327],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2404,29329,29330,29346],{},[2407,29331,29332],{},[2410,29333,29334,29337,29340,29343],{},[2413,29335,29336],{"align":25785},"镜像类型",[2413,29338,29339],{"align":25785},"适用场景",[2413,29341,29342],{"align":25785},"示例标签",[2413,29344,29345],{"align":25785},"大小",[2451,29347,29348,29362,29376],{},[2410,29349,29350,29353,29356,29359],{},[2456,29351,29352],{"align":25785},"base",[2456,29354,29355],{"align":25785},"仅需 CUDA 运行时库",[2456,29357,29358],{"align":25785},"12.4.0-base-ubuntu22.04",[2456,29360,29361],{"align":25785},"~240MB",[2410,29363,29364,29367,29370,29373],{},[2456,29365,29366],{"align":25785},"runtime",[2456,29368,29369],{"align":25785},"部署编译后的应用（含数学库）",[2456,29371,29372],{"align":25785},"12.4.0-runtime-ubuntu22.04",[2456,29374,29375],{"align":25785},"~2GB",[2410,29377,29378,29381,29384,29387],{},[2456,29379,29380],{"align":25785},"devel",[2456,29382,29383],{"align":25785},"开发环境（含编译工具）",[2456,29385,29386],{"align":25785},"12.4.0-devel-ubuntu22.04",[2456,29388,29389],{"align":25785},"~3GB",[19,29391,29392,29393,29396],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[73,29394,29395],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29398,29399],{},[3583,29400],{"alt":71,"src":29401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29403,29404],{},"在dockerfile里就可以开头这么写：",[66,29406,29408],{"className":25871,"code":29407,"language":25873,"meta":71,"style":71},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[73,29409,29410,29415],{"__ignoreMap":71},[76,29411,29412],{"class":78,"line":79},[76,29413,29414],{"class":540},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[76,29416,29417,29420],{"class":78,"line":94},[76,29418,29419],{"class":86},"FROM",[76,29421,29422],{"class":126}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[889,29424,29426],{"id":29425},"_34配置以太网","3.4.配置以太网",[19,29428,29429],{},"指定网络模式",[66,29431,29433],{"className":25871,"code":29432,"language":25873,"meta":71,"style":71},"--net=host \\\n",[73,29434,29435],{"__ignoreMap":71},[76,29436,29437,29440,29442,29445],{"class":78,"line":79},[76,29438,29439],{"class":90},"--net",[76,29441,370],{"class":82},[76,29443,29444],{"class":126},"host",[76,29446,26728],{"class":86},[19,29448,29449],{},"启动参数里加上这行即可。具体在下方",[19,29451,29452],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3261,29454,29455,29458,29461,29464],{},[29,29456,29457],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29459,29460],{},"--net=host:容器使用宿主机的网络",[29,29462,29463],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29465,29466],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2178,29468,29469],{},"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":71,"searchDepth":94,"depth":94,"links":29471},[29472,29473,29474,29475],{"id":28786,"depth":133,"text":28787},{"id":28853,"depth":133,"text":28854},{"id":29305,"depth":133,"text":29306},{"id":29425,"depth":133,"text":29426},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28775,"description":28783},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29482,"title":29483,"body":29484,"description":29491,"extension":2202,"meta":29497,"navigation":148,"path":29498,"seo":29499,"stem":29500,"__hash__":29501},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29485,"toc":29495},[29486,29489,29492],[10,29487,29483],{"id":29488},"_4dockerhub换源",[19,29490,29491],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29493,29494],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":71,"searchDepth":94,"depth":94,"links":29496},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29483,"description":29491},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29503,"title":29504,"body":29505,"description":71,"extension":2202,"meta":30516,"navigation":148,"path":30517,"seo":30518,"stem":30519,"__hash__":30520},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29506,"toc":30511},[29507,29510,29514,29520,29524,29527,29867,29870,29873,29876,29881,29886,29889,29892,29895,29898,29917,29920,29931,29937,30119,30129,30145,30408,30410,30434,30449,30458,30508],[10,29508,29504],{"id":29509},"_5docker命令学习",[889,29511,29513],{"id":29512},"_51参考文档","5.1.参考文档",[19,29515,29516],{},[2503,29517,29518],{"href":29518,"rel":29519},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25914],[889,29521,29523],{"id":29522},"_52常用命令","5.2.常用命令",[19,29525,29526],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2404,29528,29529,29542],{},[2407,29530,29531],{},[2410,29532,29533,29536,29539],{},[2413,29534,29535],{"align":25785},"命令",[2413,29537,29538],{"align":25785},"描述",[2413,29540,29541],{"align":25785},"示例",[2451,29543,29544,29555,29566,29577,29588,29599,29610,29621,29631,29642,29653,29664,29674,29685,29696,29707,29717,29727,29737,29747,29758,29769,29780,29791,29802,29813,29823,29834,29845,29856],{},[2410,29545,29546,29549,29552],{},[2456,29547,29548],{"align":25785},"docker run",[2456,29550,29551],{"align":25785},"创建并启动一个新的容器。",[2456,29553,29554],{"align":25785},"docker run -it ubuntu bash",[2410,29556,29557,29560,29563],{},[2456,29558,29559],{"align":25785},"docker build",[2456,29561,29562],{"align":25785},"通过指定的 Dockerfile 创建一个新的镜像。",[2456,29564,29565],{"align":25785},"docker build -t myimage .",[2410,29567,29568,29571,29574],{},[2456,29569,29570],{"align":25785},"docker pull",[2456,29572,29573],{"align":25785},"从 Docker 仓库拉取镜像。",[2456,29575,29576],{"align":25785},"docker pull ubuntu",[2410,29578,29579,29582,29585],{},[2456,29580,29581],{"align":25785},"docker push",[2456,29583,29584],{"align":25785},"将本地镜像推送到 Docker 仓库。",[2456,29586,29587],{"align":25785},"docker push myimage",[2410,29589,29590,29593,29596],{},[2456,29591,29592],{"align":25785},"docker stop",[2456,29594,29595],{"align":25785},"停止一个正在运行的容器。",[2456,29597,29598],{"align":25785},"docker stop container_id",[2410,29600,29601,29604,29607],{},[2456,29602,29603],{"align":25785},"docker start",[2456,29605,29606],{"align":25785},"启动一个已经存在的容器。",[2456,29608,29609],{"align":25785},"docker start container_id",[2410,29611,29612,29615,29618],{},[2456,29613,29614],{"align":25785},"docker restart",[2456,29616,29617],{"align":25785},"重新启动容器。",[2456,29619,29620],{"align":25785},"docker restart container_id",[2410,29622,29623,29626,29629],{},[2456,29624,29625],{"align":25785},"docker ps",[2456,29627,29628],{"align":25785},"列出当前正在运行的容器。",[2456,29630,29625],{"align":25785},[2410,29632,29633,29636,29639],{},[2456,29634,29635],{"align":25785},"docker rm",[2456,29637,29638],{"align":25785},"删除一个或多个停止的容器。",[2456,29640,29641],{"align":25785},"docker rm container_id",[2410,29643,29644,29647,29650],{},[2456,29645,29646],{"align":25785},"docker exec",[2456,29648,29649],{"align":25785},"在一个正在运行的容器中执行命令。",[2456,29651,29652],{"align":25785},"docker exec -it container_id bash",[2410,29654,29655,29658,29661],{},[2456,29656,29657],{"align":25785},"docker logs",[2456,29659,29660],{"align":25785},"查看容器的日志输出。",[2456,29662,29663],{"align":25785},"docker logs container_id",[2410,29665,29666,29669,29672],{},[2456,29667,29668],{"align":25785},"docker images",[2456,29670,29671],{"align":25785},"列出本地所有镜像。",[2456,29673,29668],{"align":25785},[2410,29675,29676,29679,29682],{},[2456,29677,29678],{"align":25785},"docker rmi",[2456,29680,29681],{"align":25785},"删除一个或多个镜像。",[2456,29683,29684],{"align":25785},"docker rmi myimage",[2410,29686,29687,29690,29693],{},[2456,29688,29689],{"align":25785},"docker network",[2456,29691,29692],{"align":25785},"管理 Docker 网络。",[2456,29694,29695],{"align":25785},"docker network ls",[2410,29697,29698,29701,29704],{},[2456,29699,29700],{"align":25785},"docker volume",[2456,29702,29703],{"align":25785},"管理 Docker 数据卷。",[2456,29705,29706],{"align":25785},"docker volume ls",[2410,29708,29709,29712,29715],{},[2456,29710,29711],{"align":25785},"docker-compose up",[2456,29713,29714],{"align":25785},"启动 docker-compose.yml 中定义的所有服务。",[2456,29716,29711],{"align":25785},[2410,29718,29719,29722,29725],{},[2456,29720,29721],{"align":25785},"docker-compose down",[2456,29723,29724],{"align":25785},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2456,29726,29721],{"align":25785},[2410,29728,29729,29732,29735],{},[2456,29730,29731],{"align":25785},"docker info",[2456,29733,29734],{"align":25785},"显示 Docker 系统的详细信息。",[2456,29736,29731],{"align":25785},[2410,29738,29739,29742,29745],{},[2456,29740,29741],{"align":25785},"docker stats",[2456,29743,29744],{"align":25785},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2456,29746,29741],{"align":25785},[2410,29748,29749,29752,29755],{},[2456,29750,29751],{"align":25785},"docker inspect",[2456,29753,29754],{"align":25785},"查看容器或镜像的详细信息（JSON 格式）。",[2456,29756,29757],{"align":25785},"docker inspect container_id",[2410,29759,29760,29763,29766],{},[2456,29761,29762],{"align":25785},"docker save",[2456,29764,29765],{"align":25785},"将一个镜像保存为 tar 文件。",[2456,29767,29768],{"align":25785},"docker save -o myimage.tar myimage",[2410,29770,29771,29774,29777],{},[2456,29772,29773],{"align":25785},"docker load",[2456,29775,29776],{"align":25785},"从 tar 文件中加载镜像。",[2456,29778,29779],{"align":25785},"docker load -i myimage.tar",[2410,29781,29782,29785,29788],{},[2456,29783,29784],{"align":25785},"docker tag",[2456,29786,29787],{"align":25785},"为镜像添加标签（tag）。",[2456,29789,29790],{"align":25785},"docker tag myimage myimage:v1",[2410,29792,29793,29796,29799],{},[2456,29794,29795],{"align":25785},"docker buildx build",[2456,29797,29798],{"align":25785},"使用 Buildx 构建多架构镜像。",[2456,29800,29801],{"align":25785},"docker buildx build -t myimage .",[2410,29803,29804,29807,29810],{},[2456,29805,29806],{"align":25785},"docker buildx create",[2456,29808,29809],{"align":25785},"创建一个新的 Buildx 构建实例。",[2456,29811,29812],{"align":25785},"docker buildx create –use",[2410,29814,29815,29818,29821],{},[2456,29816,29817],{"align":25785},"docker buildx ls",[2456,29819,29820],{"align":25785},"列出所有可用的 Buildx 构建实例。",[2456,29822,29817],{"align":25785},[2410,29824,29825,29828,29831],{},[2456,29826,29827],{"align":25785},"docker buildx use",[2456,29829,29830],{"align":25785},"设置当前的 Buildx 构建实例。",[2456,29832,29833],{"align":25785},"docker buildx use mybuilder",[2410,29835,29836,29839,29842],{},[2456,29837,29838],{"align":25785},"docker buildx bake",[2456,29840,29841],{"align":25785},"使用 Bake 文件批量构建镜像。",[2456,29843,29844],{"align":25785},"docker buildx bake -f bake.hcl",[2410,29846,29847,29850,29853],{},[2456,29848,29849],{"align":25785},"docker buildx build –push",[2456,29851,29852],{"align":25785},"构建镜像并推送到镜像仓库。",[2456,29854,29855],{"align":25785},"docker buildx build –push -t myimage .",[2410,29857,29858,29861,29864],{},[2456,29859,29860],{"align":25785},"docker buildx build –platform",[2456,29862,29863],{"align":25785},"构建镜像并为多个平台生成支持。",[2456,29865,29866],{"align":25785},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29868,29869],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29871,29872],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29874,29875],{},"docker images 可以查看已经下载的镜像",[19,29877,29878],{},[3583,29879],{"alt":71,"src":29880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29882,29883],{},[2416,29884,29885],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29887,29888],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29890,29891],{},"docker container logs 查看容器日志",[19,29893,29894],{},"docker top 查看容器里的进程",[19,29896,29897],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[66,29899,29901],{"className":25871,"code":29900,"language":25873,"meta":71,"style":71},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[73,29902,29903],{"__ignoreMap":71},[76,29904,29905,29908,29911,29914],{"class":78,"line":79},[76,29906,29907],{"class":86},"如：docker",[76,29909,29910],{"class":126}," cp",[76,29912,29913],{"class":126}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[76,29915,29916],{"class":126}," \u002Fmydata\u002Fnginx\n",[19,29918,29919],{},"docker run时在启动容器的时候会有几个常用的选项：",[3261,29921,29922,29925,29928],{},[29,29923,29924],{},"-d选项：表示后台运行",[29,29926,29927],{},"-P选项：随机端口映射",[29,29929,29930],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[889,29932,29934],{"id":29933},"_53run命令的参数非常重要",[2416,29935,29936],{},"5.3.run命令的参数（非常重要）",[2404,29938,29939,29952],{},[2407,29940,29941],{},[2410,29942,29943,29946,29949],{},[2413,29944,29945],{"align":25785},"参数\u002F配置",[2413,29947,29948],{"align":25785},"功能说明",[2413,29950,29951],{"align":25785},"重要性与参考依据",[2451,29953,29954,29965,29976,29987,29998,30009,30020,30031,30042,30053,30064,30075,30086,30097,30108],{},[2410,29955,29956,29959,29962],{},[2456,29957,29958],{"align":25785},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2456,29960,29961],{"align":25785},"指定容器名称，便于后续管理",[2456,29963,29964],{"align":25785},"替代随机生成的容器名。",[2410,29966,29967,29970,29973],{},[2456,29968,29969],{"align":25785},"–gpus all",[2456,29971,29972],{"align":25785},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2456,29974,29975],{"align":25785},"用于CUDA加速等GPU依赖任务。",[2410,29977,29978,29981,29984],{},[2456,29979,29980],{"align":25785},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2456,29982,29983],{"align":25785},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2456,29985,29986],{"align":25785},"确保容器内GPU功能完整67。",[2410,29988,29989,29992,29995],{},[2456,29990,29991],{"align":25785},"-dit",[2456,29993,29994],{"align":25785},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2456,29996,29997],{"align":25785},"允许容器在后台运行并支持交互操作。",[2410,29999,30000,30003,30006],{},[2456,30001,30002],{"align":25785},"–privileged",[2456,30004,30005],{"align":25785},"赋予容器完全主机权限（可访问设备、内核模块等）",[2456,30007,30008],{"align":25785},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2410,30010,30011,30014,30017],{},[2456,30012,30013],{"align":25785},"–net=host",[2456,30015,30016],{"align":25785},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2456,30018,30019],{"align":25785},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2410,30021,30022,30025,30028],{},[2456,30023,30024],{"align":25785},"–group-add audio–group-add video–group-add dialout",[2456,30026,30027],{"align":25785},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2456,30029,30030],{"align":25785},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2410,30032,30033,30036,30039],{},[2456,30034,30035],{"align":25785},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2456,30037,30038],{"align":25785},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2456,30040,30041],{"align":25785},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2410,30043,30044,30047,30050],{},[2456,30045,30046],{"align":25785},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2456,30048,30049],{"align":25785},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2456,30051,30052],{"align":25785},"实现容器内图形显示。",[2410,30054,30055,30058,30061],{},[2456,30056,30057],{"align":25785},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2456,30059,30060],{"align":25785},"挂载X11认证文件（只读）",[2456,30062,30063],{"align":25785},"确保容器有权连接宿主机显示服务。",[2410,30065,30066,30069,30072],{},[2456,30067,30068],{"align":25785},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2456,30070,30071],{"align":25785},"挂载Wayland显示协议相关目录",[2456,30073,30074],{"align":25785},"支持Wayland协议的图形显示。",[2410,30076,30077,30080,30083],{},[2456,30078,30079],{"align":25785},"–ulimit nofile=1024:524288",[2456,30081,30082],{"align":25785},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2456,30084,30085],{"align":25785},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2410,30087,30088,30091,30094],{},[2456,30089,30090],{"align":25785},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2456,30092,30093],{"align":25785},"挂载宿主机用户目录到容器内同名路径",[2456,30095,30096],{"align":25785},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2410,30098,30099,30102,30105],{},[2456,30100,30101],{"align":25785},"-w \u002Fhome\u002Ftungchiahui",[2456,30103,30104],{"align":25785},"设置容器启动后的默认工作目录",[2456,30106,30107],{"align":25785},"直接进入项目路径，方便执行命令2324。",[2410,30109,30110,30113,30116],{},[2456,30111,30112],{"align":25785},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2456,30114,30115],{"align":25785},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2456,30117,30118],{"align":25785},"提供预配置的深度学习与机器人开发环境。",[19,30120,30121,30122,30124,30125,30128],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[73,30123,26626],{},"加不加",[73,30126,30127],{},"sudo -E","都无所谓。",[19,30130,30131,30132,30134,30135,30137,30138,30141,30142,30144],{},"用户已经被加到docker组了，不用",[73,30133,26626],{},"也行跑，其次，",[73,30136,26626],{},"运行的话，你的",[73,30139,30140],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[73,30143,30140],{},"更不可能变了。",[66,30146,30148],{"className":25871,"code":30147,"language":25873,"meta":71,"style":71},"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",[73,30149,30150,30163,30173,30183,30195,30202,30209,30216,30226,30235,30244,30258,30270,30282,30291,30301,30310,30325,30358,30385,30396,30403],{"__ignoreMap":71},[76,30151,30152,30154,30156,30158,30161],{"class":78,"line":79},[76,30153,26626],{"class":86},[76,30155,28369],{"class":126},[76,30157,29279],{"class":126},[76,30159,30160],{"class":119}," --name=ros_opencv_cuda",[76,30162,26728],{"class":119},[76,30164,30165,30168,30171],{"class":78,"line":94},[76,30166,30167],{"class":90},"--gpus ",[76,30169,30170],{"class":126},"all",[76,30172,26728],{"class":119},[76,30174,30175,30178,30181],{"class":78,"line":133},[76,30176,30177],{"class":90},"-e ",[76,30179,30180],{"class":126},"NVIDIA_DRIVER_CAPABILITIES=all",[76,30182,26728],{"class":119},[76,30184,30185,30187,30190,30193],{"class":78,"line":145},[76,30186,30177],{"class":90},[76,30188,30189],{"class":126},"DISPLAY=",[76,30191,30192],{"class":90},"$DISPLAY ",[76,30194,28224],{"class":119},[76,30196,30197,30200],{"class":78,"line":152},[76,30198,30199],{"class":90},"-dit ",[76,30201,28224],{"class":119},[76,30203,30204,30207],{"class":78,"line":157},[76,30205,30206],{"class":90},"--privileged ",[76,30208,28224],{"class":119},[76,30210,30211,30214],{"class":78,"line":246},[76,30212,30213],{"class":90},"--net=host ",[76,30215,28224],{"class":119},[76,30217,30218,30221,30224],{"class":78,"line":251},[76,30219,30220],{"class":90},"--group-add ",[76,30222,30223],{"class":126},"audio",[76,30225,26728],{"class":119},[76,30227,30228,30230,30233],{"class":78,"line":257},[76,30229,30220],{"class":90},[76,30231,30232],{"class":126},"video",[76,30234,26728],{"class":119},[76,30236,30237,30239,30242],{"class":78,"line":641},[76,30238,30220],{"class":90},[76,30240,30241],{"class":126},"dialout",[76,30243,26728],{"class":119},[76,30245,30246,30248,30251,30253,30256],{"class":78,"line":646},[76,30247,30177],{"class":90},[76,30249,30250],{"class":126},"XAUTHORITY=",[76,30252,30140],{"class":90},[76,30254,30255],{"class":126},"\u002F.Xauthority",[76,30257,26728],{"class":119},[76,30259,30260,30262,30265,30268],{"class":78,"line":659},[76,30261,30177],{"class":90},[76,30263,30264],{"class":126},"WAYLAND_DISPLAY=",[76,30266,30267],{"class":90},"$WAYLAND_DISPLAY ",[76,30269,28224],{"class":119},[76,30271,30272,30274,30277,30280],{"class":78,"line":1608},[76,30273,30177],{"class":90},[76,30275,30276],{"class":126},"XDG_RUNTIME_DIR=",[76,30278,30279],{"class":90},"$XDG_RUNTIME_DIR ",[76,30281,28224],{"class":119},[76,30283,30284,30286,30289],{"class":78,"line":1632},[76,30285,30177],{"class":90},[76,30287,30288],{"class":126},"QT_QPA_PLATFORM=xcb",[76,30290,26728],{"class":119},[76,30292,30293,30296,30299],{"class":78,"line":1637},[76,30294,30295],{"class":90},"-v ",[76,30297,30298],{"class":126},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[76,30300,26728],{"class":119},[76,30302,30303,30305,30308],{"class":78,"line":1642},[76,30304,30295],{"class":90},[76,30306,30307],{"class":126},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[76,30309,26728],{"class":119},[76,30311,30312,30315,30318,30320,30323],{"class":78,"line":1652},[76,30313,30314],{"class":90},"-v $HOME",[76,30316,30317],{"class":126},"\u002F.Xauthority:",[76,30319,30140],{"class":90},[76,30321,30322],{"class":126},"\u002F.Xauthority:ro",[76,30324,26728],{"class":119},[76,30326,30327,30329,30332,30334,30337,30340,30342,30345,30347,30349,30351,30353,30356],{"class":78,"line":1660},[76,30328,30295],{"class":90},[76,30330,30331],{"class":126},"\u002Frun\u002Fuser\u002F",[76,30333,27149],{"class":90},[76,30335,30336],{"class":86},"id",[76,30338,30339],{"class":119}," -u",[76,30341,2693],{"class":90},[76,30343,30344],{"class":126},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[76,30346,27149],{"class":90},[76,30348,30336],{"class":86},[76,30350,30339],{"class":119},[76,30352,2693],{"class":90},[76,30354,30355],{"class":126},"\u002Fwayland-0",[76,30357,26728],{"class":119},[76,30359,30360,30362,30364,30366,30368,30370,30372,30375,30377,30379,30381,30383],{"class":78,"line":1683},[76,30361,30295],{"class":90},[76,30363,30331],{"class":126},[76,30365,27149],{"class":90},[76,30367,30336],{"class":86},[76,30369,30339],{"class":119},[76,30371,2693],{"class":90},[76,30373,30374],{"class":126},":\u002Frun\u002Fuser\u002F",[76,30376,27149],{"class":90},[76,30378,30336],{"class":86},[76,30380,30339],{"class":119},[76,30382,15767],{"class":90},[76,30384,28224],{"class":119},[76,30386,30387,30389,30391,30394],{"class":78,"line":1698},[76,30388,30314],{"class":90},[76,30390,3117],{"class":126},[76,30392,30393],{"class":90},"$HOME ",[76,30395,28224],{"class":119},[76,30397,30398,30401],{"class":78,"line":1711},[76,30399,30400],{"class":90},"-w $HOME ",[76,30402,28224],{"class":119},[76,30404,30405],{"class":78,"line":1717},[76,30406,30407],{"class":90},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30409,163],{},[26,30411,30412,30420,30423,30426],{},[29,30413,30414,15848,30416,30419],{},[73,30415,30180],{},[73,30417,30418],{},"--gpus all","没有英伟达显卡请注释。",[29,30421,30422],{},"--name后面请自己为容器起名。",[29,30424,30425],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30427,30428,30429,490],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25602,30430,30431],{},[2416,30432,30433],{},"请不要加",[66,30435,30437],{"className":25871,"code":30436,"language":25873,"meta":71,"style":71},"--ulimit nofile=1024:524288 \\\n",[73,30438,30439],{"__ignoreMap":71},[76,30440,30441,30444,30447],{"class":78,"line":79},[76,30442,30443],{"class":86},"--ulimit",[76,30445,30446],{"class":126}," nofile=1024:524288",[76,30448,26728],{"class":119},[19,30450,30451,30452,30457],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25602,30453,30454],{},[2416,30455,30456],{},"不建议","**.**",[66,30459,30461],{"className":25871,"code":30460,"language":25873,"meta":71,"style":71},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[73,30462,30463,30490,30499],{"__ignoreMap":71},[76,30464,30465,30468,30471,30473,30475,30477,30479,30481,30483,30486,30488],{"class":78,"line":79},[76,30466,30467],{"class":86},"--user",[76,30469,30470],{"class":90}," $(",[76,30472,30336],{"class":86},[76,30474,30339],{"class":119},[76,30476,2693],{"class":90},[76,30478,3117],{"class":126},[76,30480,27149],{"class":90},[76,30482,30336],{"class":86},[76,30484,30485],{"class":119}," -g",[76,30487,15767],{"class":90},[76,30489,28224],{"class":119},[76,30491,30492,30494,30497],{"class":78,"line":94},[76,30493,30295],{"class":90},[76,30495,30496],{"class":126},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[76,30498,26728],{"class":119},[76,30500,30501,30503,30506],{"class":78,"line":133},[76,30502,30295],{"class":90},[76,30504,30505],{"class":126},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[76,30507,26728],{"class":119},[2178,30509,30510],{},"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":71,"searchDepth":94,"depth":94,"links":30512},[30513,30514,30515],{"id":29512,"depth":133,"text":29513},{"id":29522,"depth":133,"text":29523},{"id":29933,"depth":133,"text":29936},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29504,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30522,"title":30523,"body":30524,"description":71,"extension":2202,"meta":32147,"navigation":148,"path":32148,"seo":32149,"stem":32150,"__hash__":32151},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30525,"toc":32142},[30526,30529,30533,30536,30758,30762,30766,30769,30875,30880,30883,30888,30891,30896,30899,30904,30907,30919,30922,30927,30934,30962,30969,31045,31050,31053,31076,31078,31153,31158,31161,31165,31173,31178,31183,31187,31198,31204,31207,31210,31234,31237,31240,31268,31271,31274,31739,31742,31747,31752,31756,31779,31784,31788,31792,31795,31798,31801,31828,31831,31834,31852,31855,31858,31880,31888,31893,31898,31902,31905,31908,31911,31914,31959,31962,31980,31983,31988,31991,32012,32015,32071,32074,32079,32083,32086,32093,32096,32099,32104,32107,32123,32126,32139],[10,30527,30523],{"id":30528},"_6手动创建docker镜像",[889,30530,30532],{"id":30531},"_61dockerfile","6.1.DockerFile",[19,30534,30535],{},"常用命令：",[2404,30537,30538,30549],{},[2407,30539,30540],{},[2410,30541,30542,30545,30547],{},[2413,30543,30544],{"align":25785},"指令",[2413,30546,27919],{"align":25785},[2413,30548,29541],{"align":25785},[2451,30550,30551,30561,30577,30588,30599,30610,30621,30632,30643,30657,30671,30682,30696,30707,30718,30732,30747],{},[2410,30552,30553,30555,30558],{},[2456,30554,29419],{"align":25785},[2456,30556,30557],{"align":25785},"指定基础镜像，是 Dockerfile 的起点",[2456,30559,30560],{"align":25785},"FROM ubuntu:22.04",[2410,30562,30563,30566,30569],{},[2456,30564,30565],{"align":25785},"LABEL",[2456,30567,30568],{"align":25785},"添加元数据（如作者、版本等）",[2456,30570,30571,30572,30576],{"align":25785},"LABEL maintainer=”",[2503,30573,30575],{"href":30574},"mailto:you@example.com","you@example.com","”",[2410,30578,30579,30582,30585],{},[2456,30580,30581],{"align":25785},"ENV",[2456,30583,30584],{"align":25785},"设置环境变量",[2456,30586,30587],{"align":25785},"ENV PORT=8080",[2410,30589,30590,30593,30596],{},[2456,30591,30592],{"align":25785},"ARG",[2456,30594,30595],{"align":25785},"构建参数，只在构建期间可用",[2456,30597,30598],{"align":25785},"ARG VERSION=1.0",[2410,30600,30601,30604,30607],{},[2456,30602,30603],{"align":25785},"RUN",[2456,30605,30606],{"align":25785},"构建镜像时运行命令",[2456,30608,30609],{"align":25785},"RUN apt-get update && apt-get install -y curl",[2410,30611,30612,30615,30618],{},[2456,30613,30614],{"align":25785},"COPY",[2456,30616,30617],{"align":25785},"复制文件到镜像中",[2456,30619,30620],{"align":25785},"COPY . \u002Fapp",[2410,30622,30623,30626,30629],{},[2456,30624,30625],{"align":25785},"ADD",[2456,30627,30628],{"align":25785},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2456,30630,30631],{"align":25785},"ADD archive.tar.gz \u002Fdata\u002F",[2410,30633,30634,30637,30640],{},[2456,30635,30636],{"align":25785},"WORKDIR",[2456,30638,30639],{"align":25785},"设置工作目录",[2456,30641,30642],{"align":25785},"WORKDIR \u002Fopt",[2410,30644,30645,30648,30651],{},[2456,30646,30647],{"align":25785},"CMD",[2456,30649,30650],{"align":25785},"设置容器启动时默认命令（可被 docker run 覆盖）",[2456,30652,30653,30654],{"align":25785},"CMD ",[76,30655,30656],{},"“node”, “index.js”",[2410,30658,30659,30662,30665],{},[2456,30660,30661],{"align":25785},"ENTRYPOINT",[2456,30663,30664],{"align":25785},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2456,30666,30667,30668],{"align":25785},"ENTRYPOINT ",[76,30669,30670],{},"“python3”",[2410,30672,30673,30676,30679],{},[2456,30674,30675],{"align":25785},"EXPOSE",[2456,30677,30678],{"align":25785},"声明镜像内服务监听的端口（不会自动映射）",[2456,30680,30681],{"align":25785},"EXPOSE 80",[2410,30683,30684,30687,30690],{},[2456,30685,30686],{"align":25785},"VOLUME",[2456,30688,30689],{"align":25785},"声明数据卷挂载点",[2456,30691,30692,30693],{"align":25785},"VOLUME ",[76,30694,30695],{},"“\u002Fdata”",[2410,30697,30698,30701,30704],{},[2456,30699,30700],{"align":25785},"USER",[2456,30702,30703],{"align":25785},"设置后续命令执行的用户",[2456,30705,30706],{"align":25785},"USER appuser",[2410,30708,30709,30712,30715],{},[2456,30710,30711],{"align":25785},"ONBUILD",[2456,30713,30714],{"align":25785},"当镜像作为其他镜像基础镜像时触发的构建指令",[2456,30716,30717],{"align":25785},"ONBUILD COPY . \u002Fsrc",[2410,30719,30720,30723,30726],{},[2456,30721,30722],{"align":25785},"SHELL",[2456,30724,30725],{"align":25785},"更改默认 shell，比如将 sh -c 改为 bash -c",[2456,30727,30728,30729],{"align":25785},"SHELL ",[76,30730,30731],{},"“\u002Fbin\u002Fbash”, “-c”",[2410,30733,30734,30737,30740],{},[2456,30735,30736],{"align":25785},"HEALTHCHECK",[2456,30738,30739],{"align":25785},"定义容器运行时的健康检查命令",[2456,30741,30742,30743],{"align":25785},"`HEALTHCHECK CMD curl –fail ",[2503,30744,30745],{"href":30745,"rel":30746},"http:\u002F\u002Flocalhost:8080",[25914],[2410,30748,30749,30752,30755],{},[2456,30750,30751],{"align":25785},"STOPSIGNAL",[2456,30753,30754],{"align":25785},"容器停止时发送的信号",[2456,30756,30757],{"align":25785},"STOPSIGNAL SIGKILL",[889,30759,30761],{"id":30760},"_62自己创建容器","6.2.自己创建容器",[24047,30763,30765],{"id":30764},"_621手动创建","6.2.1.手动创建",[19,30767,30768],{},"在x86电脑上编译x86的：",[66,30770,30772],{"className":25871,"code":30771,"language":25873,"meta":71,"style":71},"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",[73,30773,30774,30790,30794,30807,30811,30824,30828,30841,30845,30858,30862],{"__ignoreMap":71},[76,30775,30776,30778,30781,30784,30787],{"class":78,"line":79},[76,30777,28602],{"class":86},[76,30779,30780],{"class":126}," build",[76,30782,30783],{"class":119}," -t",[76,30785,30786],{"class":126}," ros-melodic-cuda118-cudnn8-bionic:latest",[76,30788,30789],{"class":126}," .\n",[76,30791,30792],{"class":78,"line":94},[76,30793,149],{"emptyLinePlaceholder":148},[76,30795,30796,30798,30800,30802,30805],{"class":78,"line":133},[76,30797,28602],{"class":86},[76,30799,30780],{"class":126},[76,30801,30783],{"class":119},[76,30803,30804],{"class":126}," ros-noetic-focal:latest",[76,30806,30789],{"class":126},[76,30808,30809],{"class":78,"line":145},[76,30810,149],{"emptyLinePlaceholder":148},[76,30812,30813,30815,30817,30819,30822],{"class":78,"line":152},[76,30814,28602],{"class":86},[76,30816,30780],{"class":126},[76,30818,30783],{"class":119},[76,30820,30821],{"class":126}," ros-humble-jammy:latest",[76,30823,30789],{"class":126},[76,30825,30826],{"class":78,"line":157},[76,30827,149],{"emptyLinePlaceholder":148},[76,30829,30830,30832,30834,30836,30839],{"class":78,"line":246},[76,30831,28602],{"class":86},[76,30833,30780],{"class":126},[76,30835,30783],{"class":119},[76,30837,30838],{"class":126}," ros-jazzy-noble:latest",[76,30840,30789],{"class":126},[76,30842,30843],{"class":78,"line":251},[76,30844,149],{"emptyLinePlaceholder":148},[76,30846,30847,30849,30851,30853,30856],{"class":78,"line":257},[76,30848,28602],{"class":86},[76,30850,30780],{"class":126},[76,30852,30783],{"class":119},[76,30854,30855],{"class":126}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[76,30857,30789],{"class":126},[76,30859,30860],{"class":78,"line":641},[76,30861,149],{"emptyLinePlaceholder":148},[76,30863,30864,30866,30868,30870,30873],{"class":78,"line":646},[76,30865,28602],{"class":86},[76,30867,30780],{"class":126},[76,30869,30783],{"class":119},[76,30871,30872],{"class":126}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[76,30874,30789],{"class":126},[19,30876,30877],{},[3583,30878],{"alt":71,"src":30879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30881,30882],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30884,30885],{},[3583,30886],{"alt":71,"src":30887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30889,30890],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30892,30893],{},[29,30894,30895],{},"创建 Docker Hub 账户",[19,30897,30898],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30900,30901],{"start":94},[29,30902,30903],{},"登录 Docker Hub",[19,30905,30906],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[66,30908,30910],{"className":25871,"code":30909,"language":25873,"meta":71,"style":71},"docker login\n",[73,30911,30912],{"__ignoreMap":71},[76,30913,30914,30916],{"class":78,"line":79},[76,30915,28602],{"class":86},[76,30917,30918],{"class":126}," login\n",[19,30920,30921],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30923,30924],{},[29,30925,30926],{},"为你的镜像打标签",[19,30928,30929,30930,30933],{},"Docker Hub 使用 ",[73,30931,30932],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[66,30935,30937],{"className":25871,"code":30936,"language":25873,"meta":71,"style":71},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[73,30938,30939],{"__ignoreMap":71},[76,30940,30941,30943,30946,30948,30951,30954,30957,30959],{"class":78,"line":79},[76,30942,28602],{"class":86},[76,30944,30945],{"class":126}," tag",[76,30947,30838],{"class":126},[76,30949,30950],{"class":82}," \u003C",[76,30952,30953],{"class":126},"你的用户",[76,30955,30956],{"class":90},"名",[76,30958,1829],{"class":82},[76,30960,30961],{"class":126},"\u002Fros-jazzy-noble:latest\n",[19,30963,30964,30965,30968],{},"例如，如果你的 Docker Hub 用户名是 ",[73,30966,30967],{},"tungchiahui","，你应该执行：",[66,30970,30972],{"className":25871,"code":30971,"language":25873,"meta":71,"style":71},"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",[73,30973,30974,30985,30989,31000,31004,31015,31019,31030,31034],{"__ignoreMap":71},[76,30975,30976,30978,30980,30982],{"class":78,"line":79},[76,30977,28602],{"class":86},[76,30979,30945],{"class":126},[76,30981,30804],{"class":126},[76,30983,30984],{"class":126}," tungchiahui\u002Fros-noetic-focal:latest\n",[76,30986,30987],{"class":78,"line":94},[76,30988,149],{"emptyLinePlaceholder":148},[76,30990,30991,30993,30995,30997],{"class":78,"line":133},[76,30992,28602],{"class":86},[76,30994,30945],{"class":126},[76,30996,30821],{"class":126},[76,30998,30999],{"class":126}," tungchiahui\u002Fros-humble-jammy:latest\n",[76,31001,31002],{"class":78,"line":145},[76,31003,149],{"emptyLinePlaceholder":148},[76,31005,31006,31008,31010,31012],{"class":78,"line":152},[76,31007,28602],{"class":86},[76,31009,30945],{"class":126},[76,31011,30838],{"class":126},[76,31013,31014],{"class":126}," tungchiahui\u002Fros-jazzy-noble:latest\n",[76,31016,31017],{"class":78,"line":157},[76,31018,149],{"emptyLinePlaceholder":148},[76,31020,31021,31023,31025,31027],{"class":78,"line":246},[76,31022,28602],{"class":86},[76,31024,30945],{"class":126},[76,31026,30855],{"class":126},[76,31028,31029],{"class":126}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,31031,31032],{"class":78,"line":251},[76,31033,149],{"emptyLinePlaceholder":148},[76,31035,31036,31038,31040,31042],{"class":78,"line":257},[76,31037,28602],{"class":86},[76,31039,30945],{"class":126},[76,31041,30872],{"class":126},[76,31043,31044],{"class":126}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,31046,31047],{"start":94},[29,31048,31049],{},"推送镜像到 Docker Hub",[19,31051,31052],{},"使用以下命令将镜像推送到 Docker Hub：",[66,31054,31056],{"className":25871,"code":31055,"language":25873,"meta":71,"style":71},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[73,31057,31058],{"__ignoreMap":71},[76,31059,31060,31062,31065,31067,31069,31071,31073],{"class":78,"line":79},[76,31061,28602],{"class":86},[76,31063,31064],{"class":126}," push",[76,31066,30950],{"class":82},[76,31068,30953],{"class":126},[76,31070,30956],{"class":90},[76,31072,1829],{"class":82},[76,31074,31075],{"class":126},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31077,16686],{},[66,31079,31081],{"className":25871,"code":31080,"language":25873,"meta":71,"style":71},"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",[73,31082,31083,31091,31095,31103,31107,31115,31119,31128,31132,31140,31144],{"__ignoreMap":71},[76,31084,31085,31087,31089],{"class":78,"line":79},[76,31086,28602],{"class":86},[76,31088,31064],{"class":126},[76,31090,30984],{"class":126},[76,31092,31093],{"class":78,"line":94},[76,31094,149],{"emptyLinePlaceholder":148},[76,31096,31097,31099,31101],{"class":78,"line":133},[76,31098,28602],{"class":86},[76,31100,31064],{"class":126},[76,31102,30999],{"class":126},[76,31104,31105],{"class":78,"line":145},[76,31106,149],{"emptyLinePlaceholder":148},[76,31108,31109,31111,31113],{"class":78,"line":152},[76,31110,28602],{"class":86},[76,31112,31064],{"class":126},[76,31114,31014],{"class":126},[76,31116,31117],{"class":78,"line":157},[76,31118,149],{"emptyLinePlaceholder":148},[76,31120,31121,31123,31125],{"class":78,"line":246},[76,31122,28602],{"class":86},[76,31124,31064],{"class":126},[76,31126,31127],{"class":126}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,31129,31130],{"class":78,"line":251},[76,31131,149],{"emptyLinePlaceholder":148},[76,31133,31134,31136,31138],{"class":78,"line":257},[76,31135,28602],{"class":86},[76,31137,31064],{"class":126},[76,31139,31044],{"class":126},[76,31141,31142],{"class":78,"line":641},[76,31143,149],{"emptyLinePlaceholder":148},[76,31145,31146,31148,31150],{"class":78,"line":646},[76,31147,28602],{"class":86},[76,31149,31064],{"class":126},[76,31151,31152],{"class":126}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,31154,31155],{"start":133},[29,31156,31157],{},"验证推送成功",[19,31159,31160],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31162,31163],{},[2416,31164,5868],{},[3261,31166,31167,31170],{},[29,31168,31169],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,31171,31172],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31174,31175],{},[3583,31176],{"alt":71,"src":31177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31179,31180],{},[3583,31181],{"alt":71,"src":31182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24047,31184,31186],{"id":31185},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31188,31189,31190,31193,31194,31197],{},"如果您想在 ",[2416,31191,31192],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2416,31195,31196],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31199,31200,31201],{},"1. ",[2416,31202,31203],{},"启用 Docker 跨平台构建",[19,31205,31206],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31208,31209],{},"第一步：启用 buildx（只需执行一次）",[66,31211,31213],{"className":25871,"code":31212,"language":25873,"meta":71,"style":71},"docker buildx create --name multiarch_builder --use\n",[73,31214,31215],{"__ignoreMap":71},[76,31216,31217,31219,31222,31225,31228,31231],{"class":78,"line":79},[76,31218,28602],{"class":86},[76,31220,31221],{"class":126}," buildx",[76,31223,31224],{"class":126}," create",[76,31226,31227],{"class":119}," --name",[76,31229,31230],{"class":126}," multiarch_builder",[76,31232,31233],{"class":119}," --use\n",[19,31235,31236],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31238,31239],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[66,31241,31243],{"className":25871,"code":31242,"language":25873,"meta":71,"style":71},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[73,31244,31245],{"__ignoreMap":71},[76,31246,31247,31249,31251,31253,31256,31259,31262,31265],{"class":78,"line":79},[76,31248,28602],{"class":86},[76,31250,29279],{"class":126},[76,31252,29282],{"class":119},[76,31254,31255],{"class":119}," --privileged",[76,31257,31258],{"class":126}," multiarch\u002Fqemu-user-static",[76,31260,31261],{"class":119}," --reset",[76,31263,31264],{"class":119}," -p",[76,31266,31267],{"class":126}," yes\n",[19,31269,31270],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31272,31273],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[66,31275,31277],{"className":25871,"code":31276,"language":25873,"meta":71,"style":71},"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",[73,31278,31279,31321,31325,31330,31340,31350,31359,31365,31369,31373,31383,31391,31400,31406,31410,31414,31424,31432,31441,31447,31451,31455,31465,31473,31482,31488,31492,31496,31506,31514,31523,31529,31533,31537,31547,31555,31564,31570,31574,31578,31588,31596,31605,31611,31615,31619,31629,31637,31646,31652,31656,31660,31670,31678,31687,31693,31697,31701,31712,31720,31729,31735],{"__ignoreMap":71},[76,31280,31281,31283,31285,31287,31290,31293,31295,31297,31300,31302,31304,31306,31308,31311,31314,31316,31319],{"class":78,"line":79},[76,31282,28602],{"class":86},[76,31284,31221],{"class":126},[76,31286,30780],{"class":126},[76,31288,31289],{"class":119}," --platform",[76,31291,31292],{"class":126}," linux\u002Famd64,linux\u002Farm64",[76,31294,30783],{"class":119},[76,31296,30950],{"class":82},[76,31298,31299],{"class":126},"你的镜像",[76,31301,30956],{"class":90},[76,31303,1829],{"class":82},[76,31305,3117],{"class":126},[76,31307,584],{"class":82},[76,31309,31310],{"class":126},"标",[76,31312,31313],{"class":90},"签",[76,31315,1829],{"class":82},[76,31317,31318],{"class":119}," --push",[76,31320,30789],{"class":126},[76,31322,31323],{"class":78,"line":94},[76,31324,149],{"emptyLinePlaceholder":148},[76,31326,31327],{"class":78,"line":133},[76,31328,31329],{"class":540},"# 例子：\n",[76,31331,31332,31334,31336,31338],{"class":78,"line":145},[76,31333,28602],{"class":86},[76,31335,31221],{"class":126},[76,31337,30780],{"class":126},[76,31339,26728],{"class":119},[76,31341,31342,31345,31348],{"class":78,"line":152},[76,31343,31344],{"class":90},"--platform ",[76,31346,31347],{"class":126},"linux\u002Famd64,linux\u002Farm64",[76,31349,26728],{"class":119},[76,31351,31352,31354,31357],{"class":78,"line":157},[76,31353,30783],{"class":119},[76,31355,31356],{"class":126}," tungchiahui\u002Fros:noetic-focal",[76,31358,26728],{"class":119},[76,31360,31361,31363],{"class":78,"line":246},[76,31362,31318],{"class":119},[76,31364,26728],{"class":119},[76,31366,31367],{"class":78,"line":251},[76,31368,30789],{"class":126},[76,31370,31371],{"class":78,"line":257},[76,31372,149],{"emptyLinePlaceholder":148},[76,31374,31375,31377,31379,31381],{"class":78,"line":641},[76,31376,28602],{"class":86},[76,31378,31221],{"class":126},[76,31380,30780],{"class":126},[76,31382,26728],{"class":119},[76,31384,31385,31387,31389],{"class":78,"line":646},[76,31386,31344],{"class":90},[76,31388,31347],{"class":126},[76,31390,26728],{"class":119},[76,31392,31393,31395,31398],{"class":78,"line":659},[76,31394,30783],{"class":119},[76,31396,31397],{"class":126}," tungchiahui\u002Fros:humble-jammy",[76,31399,26728],{"class":119},[76,31401,31402,31404],{"class":78,"line":1608},[76,31403,31318],{"class":119},[76,31405,26728],{"class":119},[76,31407,31408],{"class":78,"line":1632},[76,31409,30789],{"class":126},[76,31411,31412],{"class":78,"line":1637},[76,31413,149],{"emptyLinePlaceholder":148},[76,31415,31416,31418,31420,31422],{"class":78,"line":1642},[76,31417,28602],{"class":86},[76,31419,31221],{"class":126},[76,31421,30780],{"class":126},[76,31423,26728],{"class":119},[76,31425,31426,31428,31430],{"class":78,"line":1652},[76,31427,31344],{"class":90},[76,31429,31347],{"class":126},[76,31431,26728],{"class":119},[76,31433,31434,31436,31439],{"class":78,"line":1660},[76,31435,30783],{"class":119},[76,31437,31438],{"class":126}," tungchiahui\u002Fros:jazzy-noble",[76,31440,26728],{"class":119},[76,31442,31443,31445],{"class":78,"line":1683},[76,31444,31318],{"class":119},[76,31446,26728],{"class":119},[76,31448,31449],{"class":78,"line":1698},[76,31450,30789],{"class":126},[76,31452,31453],{"class":78,"line":1711},[76,31454,149],{"emptyLinePlaceholder":148},[76,31456,31457,31459,31461,31463],{"class":78,"line":1717},[76,31458,28369],{"class":86},[76,31460,31221],{"class":126},[76,31462,30780],{"class":126},[76,31464,26728],{"class":119},[76,31466,31467,31469,31471],{"class":78,"line":1728},[76,31468,31344],{"class":90},[76,31470,31347],{"class":126},[76,31472,26728],{"class":119},[76,31474,31475,31477,31480],{"class":78,"line":1740},[76,31476,30783],{"class":119},[76,31478,31479],{"class":126}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[76,31481,26728],{"class":119},[76,31483,31484,31486],{"class":78,"line":1746},[76,31485,31318],{"class":119},[76,31487,26728],{"class":119},[76,31489,31490],{"class":78,"line":1751},[76,31491,30789],{"class":126},[76,31493,31494],{"class":78,"line":1756},[76,31495,149],{"emptyLinePlaceholder":148},[76,31497,31498,31500,31502,31504],{"class":78,"line":1766},[76,31499,28602],{"class":86},[76,31501,31221],{"class":126},[76,31503,30780],{"class":126},[76,31505,26728],{"class":119},[76,31507,31508,31510,31512],{"class":78,"line":1773},[76,31509,31344],{"class":90},[76,31511,31347],{"class":126},[76,31513,26728],{"class":119},[76,31515,31516,31518,31521],{"class":78,"line":1793},[76,31517,30783],{"class":119},[76,31519,31520],{"class":126}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[76,31522,26728],{"class":119},[76,31524,31525,31527],{"class":78,"line":1806},[76,31526,31318],{"class":119},[76,31528,26728],{"class":119},[76,31530,31531],{"class":78,"line":1817},[76,31532,30789],{"class":126},[76,31534,31535],{"class":78,"line":1822},[76,31536,149],{"emptyLinePlaceholder":148},[76,31538,31539,31541,31543,31545],{"class":78,"line":1835},[76,31540,28369],{"class":86},[76,31542,31221],{"class":126},[76,31544,30780],{"class":126},[76,31546,26728],{"class":119},[76,31548,31549,31551,31553],{"class":78,"line":1847},[76,31550,31344],{"class":90},[76,31552,31347],{"class":126},[76,31554,26728],{"class":119},[76,31556,31557,31559,31562],{"class":78,"line":1852},[76,31558,30783],{"class":119},[76,31560,31561],{"class":126}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[76,31563,26728],{"class":119},[76,31565,31566,31568],{"class":78,"line":1862},[76,31567,31318],{"class":119},[76,31569,26728],{"class":119},[76,31571,31572],{"class":78,"line":1874},[76,31573,30789],{"class":126},[76,31575,31576],{"class":78,"line":1879},[76,31577,149],{"emptyLinePlaceholder":148},[76,31579,31580,31582,31584,31586],{"class":78,"line":1884},[76,31581,28602],{"class":86},[76,31583,31221],{"class":126},[76,31585,30780],{"class":126},[76,31587,26728],{"class":119},[76,31589,31590,31592,31594],{"class":78,"line":1889},[76,31591,31344],{"class":90},[76,31593,31347],{"class":126},[76,31595,26728],{"class":119},[76,31597,31598,31600,31603],{"class":78,"line":1900},[76,31599,30783],{"class":119},[76,31601,31602],{"class":126}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[76,31604,26728],{"class":119},[76,31606,31607,31609],{"class":78,"line":1906},[76,31608,31318],{"class":119},[76,31610,26728],{"class":119},[76,31612,31613],{"class":78,"line":1924},[76,31614,30789],{"class":126},[76,31616,31617],{"class":78,"line":1929},[76,31618,149],{"emptyLinePlaceholder":148},[76,31620,31621,31623,31625,31627],{"class":78,"line":1944},[76,31622,28602],{"class":86},[76,31624,31221],{"class":126},[76,31626,30780],{"class":126},[76,31628,26728],{"class":119},[76,31630,31631,31633,31635],{"class":78,"line":1950},[76,31632,31344],{"class":90},[76,31634,31347],{"class":126},[76,31636,26728],{"class":119},[76,31638,31639,31641,31644],{"class":78,"line":1965},[76,31640,30783],{"class":119},[76,31642,31643],{"class":126}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,31645,26728],{"class":119},[76,31647,31648,31650],{"class":78,"line":1971},[76,31649,31318],{"class":119},[76,31651,26728],{"class":119},[76,31653,31654],{"class":78,"line":1985},[76,31655,30789],{"class":126},[76,31657,31658],{"class":78,"line":1991},[76,31659,149],{"emptyLinePlaceholder":148},[76,31661,31662,31664,31666,31668],{"class":78,"line":2005},[76,31663,28369],{"class":86},[76,31665,31221],{"class":126},[76,31667,30780],{"class":126},[76,31669,26728],{"class":119},[76,31671,31672,31674,31676],{"class":78,"line":2017},[76,31673,31344],{"class":90},[76,31675,31347],{"class":126},[76,31677,26728],{"class":119},[76,31679,31680,31682,31685],{"class":78,"line":2023},[76,31681,30783],{"class":119},[76,31683,31684],{"class":126}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[76,31686,26728],{"class":119},[76,31688,31689,31691],{"class":78,"line":2031},[76,31690,31318],{"class":119},[76,31692,26728],{"class":119},[76,31694,31695],{"class":78,"line":11880},[76,31696,30789],{"class":126},[76,31698,31699],{"class":78,"line":11901},[76,31700,149],{"emptyLinePlaceholder":148},[76,31702,31703,31706,31708,31710],{"class":78,"line":11907},[76,31704,31705],{"class":86},"  docker",[76,31707,31221],{"class":126},[76,31709,30780],{"class":126},[76,31711,26728],{"class":119},[76,31713,31714,31716,31718],{"class":78,"line":11921},[76,31715,31344],{"class":90},[76,31717,31347],{"class":126},[76,31719,26728],{"class":119},[76,31721,31722,31724,31727],{"class":78,"line":11927},[76,31723,30783],{"class":119},[76,31725,31726],{"class":126}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,31728,26728],{"class":119},[76,31730,31731,31733],{"class":78,"line":11954},[76,31732,31318],{"class":119},[76,31734,26728],{"class":119},[76,31736,31737],{"class":78,"line":11963},[76,31738,30789],{"class":126},[19,31740,31741],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31743,31744],{},[3583,31745],{"alt":71,"src":31746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31748,31749],{},[3583,31750],{"alt":71,"src":31751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24047,31753,31755],{"id":31754},"_623清除构建缓存","6.2.3.清除构建缓存",[66,31757,31759],{"className":25871,"code":31758,"language":25873,"meta":71,"style":71},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[73,31760,31761,31766],{"__ignoreMap":71},[76,31762,31763],{"class":78,"line":79},[76,31764,31765],{"class":540},"# 清理BuildKit构建缓存\n",[76,31767,31768,31770,31773,31776],{"class":78,"line":94},[76,31769,28602],{"class":86},[76,31771,31772],{"class":126}," builder",[76,31774,31775],{"class":126}," prune",[76,31777,31778],{"class":119}," -f\n",[19,31780,31781],{},[3583,31782],{"alt":71,"src":31783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[889,31785,31787],{"id":31786},"_63补充","6.3.补充",[24047,31789,31791],{"id":31790},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31793,31794],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31796,31797],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31799,31800],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[66,31802,31804],{"className":25871,"code":31803,"language":25873,"meta":71,"style":71},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[73,31805,31806,31813],{"__ignoreMap":71},[76,31807,31808,31810],{"class":78,"line":79},[76,31809,29419],{"class":86},[76,31811,31812],{"class":126}," nginx\n",[76,31814,31815,31817,31820,31823,31825],{"class":78,"line":94},[76,31816,30603],{"class":86},[76,31818,31819],{"class":126}," echo",[76,31821,31822],{"class":126}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[76,31824,28271],{"class":82},[76,31826,31827],{"class":126}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31829,31830],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31832,31833],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[66,31835,31837],{"className":25871,"code":31836,"language":25873,"meta":71,"style":71},"docker build -t nginx:tuling .\n",[73,31838,31839],{"__ignoreMap":71},[76,31840,31841,31843,31845,31847,31850],{"class":78,"line":79},[76,31842,28602],{"class":86},[76,31844,30780],{"class":126},[76,31846,30783],{"class":119},[76,31848,31849],{"class":126}," nginx:tuling",[76,31851,30789],{"class":126},[19,31853,31854],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31856,31857],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[66,31859,31861],{"className":25871,"code":31860,"language":25873,"meta":71,"style":71},"docker run -d -p 92:80 nginx:tuling\n",[73,31862,31863],{"__ignoreMap":71},[76,31864,31865,31867,31869,31872,31874,31877],{"class":78,"line":79},[76,31866,28602],{"class":86},[76,31868,29279],{"class":126},[76,31870,31871],{"class":119}," -d",[76,31873,31264],{"class":119},[76,31875,31876],{"class":126}," 92:80",[76,31878,31879],{"class":126}," nginx:tuling\n",[19,31881,31882,31883],{},"4、访问 ",[2503,31884,31887],{"href":31885,"rel":31886},"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",[25914],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31889,31890],{},[3583,31891],{"alt":71,"src":31892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31894,31895],{},[3583,31896],{"alt":71,"src":31897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24047,31899,31901],{"id":31900},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31903,31904],{},"只需要知道大体流程即可",[19,31906,31907],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31909,31910],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31912,31913],{},"2、在Dockerfile中添加以下内容",[66,31915,31917],{"className":28140,"code":31916,"language":28142,"meta":71,"style":71},"# 基于哪个镜像\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",[73,31918,31919,31924,31929,31934,31939,31944,31949,31954],{"__ignoreMap":71},[76,31920,31921],{"class":78,"line":79},[76,31922,31923],{},"# 基于哪个镜像\n",[76,31925,31926],{"class":78,"line":94},[76,31927,31928],{},"From java:8\n",[76,31930,31931],{"class":78,"line":133},[76,31932,31933],{},"# 复制文件到容器\n",[76,31935,31936],{"class":78,"line":145},[76,31937,31938],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[76,31940,31941],{"class":78,"line":152},[76,31942,31943],{},"# 声明需要暴露的端口\n",[76,31945,31946],{"class":78,"line":157},[76,31947,31948],{},"EXPOSE 8877\n",[76,31950,31951],{"class":78,"line":246},[76,31952,31953],{},"# 配置容器启动后执行的命令\n",[76,31955,31956],{"class":78,"line":251},[76,31957,31958],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31960,31961],{},"3、使用docker build命令构建镜像",[66,31963,31965],{"className":25871,"code":31964,"language":25873,"meta":71,"style":71},"docker build -t tulingmall-member:0.0.5 .\n",[73,31966,31967],{"__ignoreMap":71},[76,31968,31969,31971,31973,31975,31978],{"class":78,"line":79},[76,31970,28602],{"class":86},[76,31972,30780],{"class":126},[76,31974,30783],{"class":119},[76,31976,31977],{"class":126}," tulingmall-member:0.0.5",[76,31979,30789],{"class":126},[19,31981,31982],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31984,31985],{},[3583,31986],{"alt":71,"src":31987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31989,31990],{},"4、启动镜像，加-d可在后台启动",[66,31992,31994],{"className":25871,"code":31993,"language":25873,"meta":71,"style":71},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[73,31995,31996],{"__ignoreMap":71},[76,31997,31998,32000,32002,32004,32006,32009],{"class":78,"line":79},[76,31999,28602],{"class":86},[76,32001,29279],{"class":126},[76,32003,31871],{"class":119},[76,32005,31264],{"class":119},[76,32007,32008],{"class":126}," 8877:8877",[76,32010,32011],{"class":126}," tulingmall-member:0.0.5\n",[19,32013,32014],{},"加上JVM参数：",[66,32016,32018],{"className":25871,"code":32017,"language":25873,"meta":71,"style":71},"# --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",[73,32019,32020,32025,32040,32050,32059,32066],{"__ignoreMap":71},[76,32021,32022],{"class":78,"line":79},[76,32023,32024],{"class":540},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[76,32026,32027,32029,32031,32034,32036,32038],{"class":78,"line":94},[76,32028,28602],{"class":86},[76,32030,29279],{"class":126},[76,32032,32033],{"class":119},"  -d",[76,32035,31264],{"class":119},[76,32037,32008],{"class":126},[76,32039,26728],{"class":119},[76,32041,32042,32044,32047],{"class":78,"line":133},[76,32043,30177],{"class":90},[76,32045,32046],{"class":126},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[76,32048,32049],{"class":119},"  \\\n",[76,32051,32052,32054,32057],{"class":78,"line":145},[76,32053,30177],{"class":90},[76,32055,32056],{"class":126},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[76,32058,32049],{"class":119},[76,32060,32061,32064],{"class":78,"line":152},[76,32062,32063],{"class":90},"--cap-add=SYS_PTRACE  ",[76,32065,28224],{"class":119},[76,32067,32068],{"class":78,"line":157},[76,32069,32070],{"class":90},"tulingmall-member:0.0.5\n",[19,32072,32073],{},"5、访问会员服务接口",[19,32075,32076],{},[3583,32077],{"alt":71,"src":32078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24047,32080,32082],{"id":32081},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32084,32085],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32087,32088,32089],{},"阿里云docker镜像仓库：",[2503,32090,32091],{"href":32091,"rel":32092},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25914],[19,32094,32095],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32097,32098],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32100,32101],{},[3583,32102],{"alt":71,"src":32103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32105,32106],{},"要把镜像推送到镜像仓库",[66,32108,32110],{"className":25871,"code":32109,"language":25873,"meta":71,"style":71},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,32111,32112],{"__ignoreMap":71},[76,32113,32114,32116,32118,32120],{"class":78,"line":79},[76,32115,28602],{"class":86},[76,32117,30945],{"class":126},[76,32119,31977],{"class":126},[76,32121,32122],{"class":126}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32124,32125],{},"最后将镜像推送到远程仓库",[66,32127,32129],{"className":25871,"code":32128,"language":25873,"meta":71,"style":71},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,32130,32131],{"__ignoreMap":71},[76,32132,32133,32135,32137],{"class":78,"line":79},[76,32134,28602],{"class":86},[76,32136,31064],{"class":126},[76,32138,32122],{"class":126},[2178,32140,32141],{},"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":71,"searchDepth":94,"depth":94,"links":32143},[32144,32145,32146],{"id":30531,"depth":133,"text":30532},{"id":30760,"depth":133,"text":30761},{"id":31786,"depth":133,"text":31787},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30523,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32153,"title":32154,"body":32155,"description":71,"extension":2202,"meta":32298,"navigation":148,"path":32299,"seo":32300,"stem":32301,"__hash__":32302},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32156,"toc":32296},[32157,32160,32165,32170,32173,32178,32183,32186,32191,32196,32199,32204,32207,32210,32213,32216,32219,32222,32242,32264,32267,32270,32290,32293],[10,32158,32154],{"id":32159},"_7vscode远程开发",[26,32161,32162],{},[29,32163,32164],{},"插件1：微软Docker工具",[19,32166,32167],{},[3583,32168],{"alt":71,"src":32169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32171,32172],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32174,32175],{},[3583,32176],{"alt":71,"src":32177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,32179,32180],{"start":94},[29,32181,32182],{},"插件2：微软Docker远程开发工具",[19,32184,32185],{},"下面这是远程开发的插件。",[19,32187,32188],{},[3583,32189],{"alt":71,"src":32190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32192,32193],{},[3583,32194],{"alt":71,"src":32195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32197,32198],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32200,32201],{},[3583,32202],{"alt":71,"src":32203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32205,32206],{},"安装完拓展之后，vscode进行链接：",[19,32208,32209],{},"1.按ctrl+shift+p",[19,32211,32212],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32214,32215],{},"3.选择目前运行的容器",[19,32217,32218],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32220,32221],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[66,32223,32225],{"className":25871,"code":32224,"language":25873,"meta":71,"style":71},"docker run -v 主机目录:容器目录 image-name\n",[73,32226,32227],{"__ignoreMap":71},[76,32228,32229,32231,32233,32236,32239],{"class":78,"line":79},[76,32230,28602],{"class":86},[76,32232,29279],{"class":126},[76,32234,32235],{"class":119}," -v",[76,32237,32238],{"class":126}," 主机目录:容器目录",[76,32240,32241],{"class":126}," image-name\n",[66,32243,32245],{"className":25871,"code":32244,"language":25873,"meta":71,"style":71},"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",[73,32246,32247],{"__ignoreMap":71},[76,32248,32249,32251,32253,32256,32258,32261],{"class":78,"line":79},[76,32250,28602],{"class":86},[76,32252,29279],{"class":126},[76,32254,32255],{"class":119}," -it",[76,32257,32235],{"class":119},[76,32259,32260],{"class":126}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[76,32262,32263],{"class":126}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32265,32266],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32268,32269],{},"查看挂载情况：",[66,32271,32273],{"className":25871,"code":32272,"language":25873,"meta":71,"style":71},"mount | grep -i project\n",[73,32274,32275],{"__ignoreMap":71},[76,32276,32277,32280,32282,32285,32287],{"class":78,"line":79},[76,32278,32279],{"class":86},"mount",[76,32281,27159],{"class":82},[76,32283,32284],{"class":86}," grep",[76,32286,28479],{"class":119},[76,32288,32289],{"class":126}," project\n",[19,32291,32292],{},"也可以通过ls来进行查看",[2178,32294,32295],{},"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":71,"searchDepth":94,"depth":94,"links":32297},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32154,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32304,"title":32305,"body":32306,"description":2201,"extension":2202,"meta":32310,"navigation":148,"path":32312,"seo":32313,"stem":32314,"__hash__":32315},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32307,"toc":32308},[],{"title":71,"searchDepth":94,"depth":94,"links":32309},[],{"category":32311},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32305,"description":2201},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32317,"title":32318,"body":32319,"description":2201,"extension":2202,"meta":32323,"navigation":148,"path":32324,"seo":32325,"stem":32326,"__hash__":32327},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32320,"toc":32321},[],{"title":71,"searchDepth":94,"depth":94,"links":32322},[],{"category":32311},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32318,"description":2201},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32329,"title":32330,"body":32331,"description":2201,"extension":2202,"meta":32620,"navigation":148,"path":32621,"seo":32622,"stem":32623,"__hash__":32624},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32332,"toc":32618},[32333,32336,32344,32359,32364,32415,32418,32424,32607,32612,32615],[10,32334,32330],{"id":32335},"_1验证深度学习环境",[19,32337,32338,32339],{},"关于环境的安装，看",[2503,32340,32343],{"href":32341,"rel":32342},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25914],"Pytorch-->深度学习",[19,32345,32346,32347,32350,32351,32354,32355,32358],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[73,32348,32349],{},"pytorch-cuda=12.4"," 是一个“ ",[2416,32352,32353],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2416,32356,32357],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32360,32361],{},[3583,32362],{"alt":71,"src":32363},"\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",[66,32365,32367],{"className":25871,"code":32366,"language":25873,"meta":71,"style":71},"# 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",[73,32368,32369,32374],{"__ignoreMap":71},[76,32370,32371],{"class":78,"line":79},[76,32372,32373],{"class":540},"# CUDA 12.4\n",[76,32375,32376,32379,32381,32384,32387,32390,32393,32396,32398,32401,32404,32407,32410,32412],{"class":78,"line":94},[76,32377,32378],{"class":86},"conda",[76,32380,25883],{"class":126},[76,32382,32383],{"class":126}," pytorch==",[76,32385,32386],{"class":119},"2.5.1",[76,32388,32389],{"class":126}," torchvision==",[76,32391,32392],{"class":119},"0.20.1",[76,32394,32395],{"class":126}," torchaudio==",[76,32397,32386],{"class":119},[76,32399,32400],{"class":126}," pytorch-cuda=",[76,32402,32403],{"class":119},"12.4",[76,32405,32406],{"class":119}," -c",[76,32408,32409],{"class":126}," pytorch",[76,32411,32406],{"class":119},[76,32413,32414],{"class":126}," nvidia\n",[19,32416,32417],{},"）：",[19,32419,32420],{},[2503,32421,32422],{"href":32422,"rel":32423},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25914],[66,32425,32427],{"className":68,"code":32426,"language":70,"meta":71,"style":71},"# 对深度学习环境进行测试\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",[73,32428,32429,32434,32442,32447,32457,32472,32477,32487,32524,32531,32542,32558,32563,32573,32585,32595],{"__ignoreMap":71},[76,32430,32431],{"class":78,"line":79},[76,32432,32433],{"class":540},"# 对深度学习环境进行测试\n",[76,32435,32436,32439],{"class":78,"line":94},[76,32437,32438],{"class":82},"import",[76,32440,32441],{"class":90}," torch\n",[76,32443,32444],{"class":78,"line":133},[76,32445,32446],{"class":540},"# 查看cuda是否被激活\n",[76,32448,32449,32452,32454],{"class":78,"line":145},[76,32450,32451],{"class":90},"flag",[76,32453,370],{"class":82},[76,32455,32456],{"class":90},"torch.cuda.is_available()\n",[76,32458,32459,32461,32463,32466,32469],{"class":78,"line":152},[76,32460,478],{"class":119},[76,32462,123],{"class":90},[76,32464,32465],{"class":126},"\"cuda:\"",[76,32467,32468],{"class":90},", flag)   ",[76,32470,32471],{"class":540},"#返回true的话说明被激活\n",[76,32473,32474],{"class":78,"line":157},[76,32475,32476],{"class":540},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[76,32478,32479,32482,32484],{"class":78,"line":246},[76,32480,32481],{"class":90},"ngpu",[76,32483,370],{"class":82},[76,32485,32486],{"class":119},"1\n",[76,32488,32489,32492,32494,32497,32500,32502,32505,32508,32511,32513,32515,32517,32519,32522],{"class":78,"line":251},[76,32490,32491],{"class":90},"device",[76,32493,370],{"class":82},[76,32495,32496],{"class":90},"torch.device(",[76,32498,32499],{"class":126},"\"cuda:0\"",[76,32501,3811],{"class":82},[76,32503,32504],{"class":90},"(torch.cuda.is_available() ",[76,32506,32507],{"class":82},"and",[76,32509,32510],{"class":90}," ngpu",[76,32512,1829],{"class":82},[76,32514,1294],{"class":119},[76,32516,15767],{"class":90},[76,32518,1328],{"class":82},[76,32520,32521],{"class":126}," \"cpu\"",[76,32523,130],{"class":90},[76,32525,32526,32528],{"class":78,"line":257},[76,32527,478],{"class":119},[76,32529,32530],{"class":90},"(device)\n",[76,32532,32533,32535,32538,32540],{"class":78,"line":641},[76,32534,478],{"class":119},[76,32536,32537],{"class":90},"(torch.cuda.get_device_name(",[76,32539,1294],{"class":119},[76,32541,656],{"class":90},[76,32543,32544,32546,32549,32551,32553,32555],{"class":78,"line":646},[76,32545,478],{"class":119},[76,32547,32548],{"class":90},"(torch.rand(",[76,32550,2339],{"class":119},[76,32552,2642],{"class":90},[76,32554,2339],{"class":119},[76,32556,32557],{"class":90},").cuda())\n",[76,32559,32560],{"class":78,"line":659},[76,32561,32562],{"class":540},"# 查看cuda和cudnn的版本\n",[76,32564,32565,32568,32570],{"class":78,"line":1608},[76,32566,32567],{"class":90},"cuda_version",[76,32569,370],{"class":82},[76,32571,32572],{"class":90},"torch.version.cuda\n",[76,32574,32575,32577,32579,32582],{"class":78,"line":1632},[76,32576,478],{"class":119},[76,32578,123],{"class":90},[76,32580,32581],{"class":126},"\"cuda version\"",[76,32583,32584],{"class":90},",cuda_version)\n",[76,32586,32587,32590,32592],{"class":78,"line":1637},[76,32588,32589],{"class":90},"cudnn_version",[76,32591,370],{"class":82},[76,32593,32594],{"class":90},"torch.backends.cudnn.version()\n",[76,32596,32597,32599,32601,32604],{"class":78,"line":1642},[76,32598,478],{"class":119},[76,32600,123],{"class":90},[76,32602,32603],{"class":126},"\"cudnn version\"",[76,32605,32606],{"class":90},",cudnn_version)\n",[19,32608,32609],{},[3583,32610],{"alt":71,"src":32611},"\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,32613,32614],{},"cuda:0 指的是一块显卡",[2178,32616,32617],{},"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":71,"searchDepth":94,"depth":94,"links":32619},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32330,"description":2201},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32626,"title":32627,"body":32628,"description":2201,"extension":2202,"meta":52420,"navigation":148,"path":52421,"seo":52422,"stem":52423,"__hash__":52424},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32629,"toc":52414},[32630,32633,32637,32641,32644,32649,32654,32657,32662,32667,32672,32675,32679,32684,32688,32693,32696,32701,32704,32707,32710,32713,32718,32721,32726,32731,32736,32741,32744,32748,32751,32756,33359,33364,33367,33372,33375,33378,33841,33844,33847,33850,33853,35900,35903,35908,35913,36708,36711,36716,37494,37498,39157,39161,39875,39879,39883,39888,39893,39898,39901,39906,39911,39916,39921,39926,39930,39935,41215,41220,41223,41226,41229,41383,41386,41389,42605,42610,43305,43309,43313,43318,43323,43326,43331,43336,43341,43346,43351,43356,43361,43366,43371,43376,43381,43386,43391,43396,43401,43406,43411,43416,43421,43426,43431,43436,43441,43446,43451,43456,43461,43466,43471,43476,43480,43484,43487,44965,44969,46616,46620,47314,47318,47321,47324,47867,47870,47874,47877,49274,49278,49281,49857,51644,51648,51651,52411],[10,32631,32627],{"id":32632},"_2经典神经网络",[889,32634,32636],{"id":32635},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24047,32638,32640],{"id":32639},"_211原理介绍","2.1.1.原理介绍",[19,32642,32643],{},"LeNet-5",[26,32645,32646],{},[29,32647,32648],{},"原理",[19,32650,32651],{},[3583,32652],{"alt":71,"src":32653},"\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,32655,32656],{},"B是batch批次；C是channel通道",[26,32658,32659],{"start":94},[29,32660,32661],{},"网络参数详细",[19,32663,32664],{},[3583,32665],{"alt":71,"src":32666},"\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,32668,32669],{},[3583,32670],{"alt":71,"src":32671},"\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,32673,32674],{},"AlexNet",[26,32676,32677],{},[29,32678,32648],{},[19,32680,32681],{},[3583,32682],{"alt":71,"src":32683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[26,32685,32686],{"start":94},[29,32687,32661],{},[19,32689,32690],{},[3583,32691],{"alt":71,"src":32692},"\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,32694,32695],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32697,32698],{},[3583,32699],{"alt":71,"src":32700},"\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,32702,32703],{},"数据处理中的图像增强操作:",[19,32705,32706],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32708,32709],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32711,32712],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32714,32715],{},[3583,32716],{"alt":71,"src":32717},"\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,32719,32720],{},"提升网络精确度的方法：LRN正则化",[19,32722,32723],{},[3583,32724],{"alt":71,"src":32725},"\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,32727,32728],{},[3583,32729],{"alt":71,"src":32730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[26,32732,32733],{"start":133},[29,32734,32735],{},"AlexNet的总结",[19,32737,32738],{},[3583,32739],{"alt":71,"src":32740},"\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,32742,32743],{},"比LeNet模型要深一丢丢",[24047,32745,32747],{"id":32746},"_212代码实现","2.1.2.代码实现",[19,32749,32750],{},"（1）LeNet",[26,32752,32753],{},[29,32754,32755],{},"模型搭建",[66,32757,32759],{"className":68,"code":32758,"language":70,"meta":71,"style":71},"# 导入库\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",[73,32760,32761,32766,32772,32777,32790,32795,32807,32811,32831,32836,32841,32852,32857,32876,32880,32885,32934,32946,32951,32980,33015,33042,33047,33059,33064,33084,33103,33122,33126,33131,33141,33158,33169,33184,33195,33206,33221,33236,33247,33254,33258,33272,33277,33300,33305,33310,33315,33319,33324,33329,33339],{"__ignoreMap":71},[76,32762,32763],{"class":78,"line":79},[76,32764,32765],{"class":540},"# 导入库\n",[76,32767,32768,32770],{"class":78,"line":94},[76,32769,32438],{"class":82},[76,32771,32441],{"class":90},[76,32773,32774],{"class":78,"line":133},[76,32775,32776],{"class":540},"# 导入神经网络层\n",[76,32778,32779,32782,32785,32787],{"class":78,"line":145},[76,32780,32781],{"class":82},"from",[76,32783,32784],{"class":90}," torch ",[76,32786,32438],{"class":82},[76,32788,32789],{"class":90}," nn\n",[76,32791,32792],{"class":78,"line":152},[76,32793,32794],{"class":540},"# 导入展示神经网络参数的包\n",[76,32796,32797,32799,32802,32804],{"class":78,"line":157},[76,32798,32781],{"class":82},[76,32800,32801],{"class":90}," torchsummary ",[76,32803,32438],{"class":82},[76,32805,32806],{"class":90}," summary\n",[76,32808,32809],{"class":78,"line":246},[76,32810,149],{"emptyLinePlaceholder":148},[76,32812,32813,32815,32818,32820,32823,32825,32828],{"class":78,"line":251},[76,32814,16747],{"class":82},[76,32816,32817],{"class":86}," LeNet",[76,32819,123],{"class":90},[76,32821,32822],{"class":86},"nn",[76,32824,2819],{"class":90},[76,32826,32827],{"class":86},"Module",[76,32829,32830],{"class":90},"):\n",[76,32832,32833],{"class":78,"line":257},[76,32834,32835],{"class":540},"    # 模型初始化:\n",[76,32837,32838],{"class":78,"line":641},[76,32839,32840],{"class":540},"    # 定义一些网络层和激活函数\n",[76,32842,32843,32846,32849],{"class":78,"line":646},[76,32844,32845],{"class":82},"    def",[76,32847,32848],{"class":119}," __init__",[76,32850,32851],{"class":90},"(self):\n",[76,32853,32854],{"class":78,"line":659},[76,32855,32856],{"class":540},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[76,32858,32859,32862,32865,32868,32871,32874],{"class":78,"line":1608},[76,32860,32861],{"class":119},"        super",[76,32863,32864],{"class":90},"(LeNet,",[76,32866,32867],{"class":119},"self",[76,32869,32870],{"class":90},").",[76,32872,32873],{"class":119},"__init__",[76,32875,4072],{"class":90},[76,32877,32878],{"class":78,"line":1632},[76,32879,149],{"emptyLinePlaceholder":148},[76,32881,32882],{"class":78,"line":1637},[76,32883,32884],{"class":540},"        # 定义网络层\n",[76,32886,32887,32890,32893,32895,32898,32901,32903,32905,32907,32910,32912,32914,32916,32919,32921,32923,32925,32928,32930,32932],{"class":78,"line":1642},[76,32888,32889],{"class":119},"        self",[76,32891,32892],{"class":90},".c1",[76,32894,370],{"class":82},[76,32896,32897],{"class":90},"nn.Conv2d(",[76,32899,32900],{"class":7296},"in_channels",[76,32902,370],{"class":82},[76,32904,669],{"class":119},[76,32906,2642],{"class":90},[76,32908,32909],{"class":7296},"out_channels",[76,32911,370],{"class":82},[76,32913,2608],{"class":119},[76,32915,2642],{"class":90},[76,32917,32918],{"class":7296},"kernel_size",[76,32920,370],{"class":82},[76,32922,2583],{"class":119},[76,32924,2642],{"class":90},[76,32926,32927],{"class":7296},"padding",[76,32929,370],{"class":82},[76,32931,2345],{"class":119},[76,32933,130],{"class":90},[76,32935,32936,32938,32941,32943],{"class":78,"line":1652},[76,32937,32889],{"class":119},[76,32939,32940],{"class":90},".sig",[76,32942,370],{"class":82},[76,32944,32945],{"class":90},"nn.Sigmoid()\n",[76,32947,32948],{"class":78,"line":1660},[76,32949,32950],{"class":540},"        # 定义池化\n",[76,32952,32953,32955,32958,32960,32963,32965,32967,32969,32971,32974,32976,32978],{"class":78,"line":1683},[76,32954,32889],{"class":119},[76,32956,32957],{"class":90},".s2",[76,32959,370],{"class":82},[76,32961,32962],{"class":90},"nn.AvgPool2d(",[76,32964,32918],{"class":7296},[76,32966,370],{"class":82},[76,32968,2345],{"class":119},[76,32970,2642],{"class":90},[76,32972,32973],{"class":7296},"stride",[76,32975,370],{"class":82},[76,32977,2345],{"class":119},[76,32979,130],{"class":90},[76,32981,32982,32984,32987,32989,32991,32993,32995,32997,32999,33001,33003,33005,33007,33009,33011,33013],{"class":78,"line":1698},[76,32983,32889],{"class":119},[76,32985,32986],{"class":90},".c3",[76,32988,370],{"class":82},[76,32990,32897],{"class":90},[76,32992,32900],{"class":7296},[76,32994,370],{"class":82},[76,32996,2608],{"class":119},[76,32998,2642],{"class":90},[76,33000,32909],{"class":7296},[76,33002,370],{"class":82},[76,33004,2861],{"class":119},[76,33006,2642],{"class":90},[76,33008,32918],{"class":7296},[76,33010,370],{"class":82},[76,33012,2583],{"class":119},[76,33014,130],{"class":90},[76,33016,33017,33019,33022,33024,33026,33028,33030,33032,33034,33036,33038,33040],{"class":78,"line":1711},[76,33018,32889],{"class":119},[76,33020,33021],{"class":90},".s4",[76,33023,370],{"class":82},[76,33025,32962],{"class":90},[76,33027,32918],{"class":7296},[76,33029,370],{"class":82},[76,33031,2345],{"class":119},[76,33033,2642],{"class":90},[76,33035,32973],{"class":7296},[76,33037,370],{"class":82},[76,33039,2345],{"class":119},[76,33041,130],{"class":90},[76,33043,33044],{"class":78,"line":1717},[76,33045,33046],{"class":540},"        # 定义平展层\n",[76,33048,33049,33051,33054,33056],{"class":78,"line":1728},[76,33050,32889],{"class":119},[76,33052,33053],{"class":90},".flatten",[76,33055,370],{"class":82},[76,33057,33058],{"class":90},"nn.Flatten()\n",[76,33060,33061],{"class":78,"line":1740},[76,33062,33063],{"class":540},"        # 定义全连接层\n",[76,33065,33066,33068,33071,33073,33076,33078,33080,33082],{"class":78,"line":1746},[76,33067,32889],{"class":119},[76,33069,33070],{"class":90},".f5",[76,33072,370],{"class":82},[76,33074,33075],{"class":90},"nn.Linear(",[76,33077,6071],{"class":119},[76,33079,2642],{"class":90},[76,33081,3075],{"class":119},[76,33083,130],{"class":90},[76,33085,33086,33088,33091,33093,33095,33097,33099,33101],{"class":78,"line":1751},[76,33087,32889],{"class":119},[76,33089,33090],{"class":90},".f6",[76,33092,370],{"class":82},[76,33094,33075],{"class":90},[76,33096,3075],{"class":119},[76,33098,2642],{"class":90},[76,33100,2969],{"class":119},[76,33102,130],{"class":90},[76,33104,33105,33107,33110,33112,33114,33116,33118,33120],{"class":78,"line":1756},[76,33106,32889],{"class":119},[76,33108,33109],{"class":90},".f7",[76,33111,370],{"class":82},[76,33113,33075],{"class":90},[76,33115,2969],{"class":119},[76,33117,2642],{"class":90},[76,33119,402],{"class":119},[76,33121,130],{"class":90},[76,33123,33124],{"class":78,"line":1766},[76,33125,149],{"emptyLinePlaceholder":148},[76,33127,33128],{"class":78,"line":1773},[76,33129,33130],{"class":540},"    # 写工具->写前向传播\n",[76,33132,33133,33135,33138],{"class":78,"line":1793},[76,33134,32845],{"class":82},[76,33136,33137],{"class":86}," forward",[76,33139,33140],{"class":90},"(self,x):\n",[76,33142,33143,33146,33148,33150,33153,33155],{"class":78,"line":1806},[76,33144,33145],{"class":90},"        x",[76,33147,370],{"class":82},[76,33149,32867],{"class":119},[76,33151,33152],{"class":90},".sig(",[76,33154,32867],{"class":119},[76,33156,33157],{"class":90},".c1(x))\n",[76,33159,33160,33162,33164,33166],{"class":78,"line":1817},[76,33161,33145],{"class":90},[76,33163,370],{"class":82},[76,33165,32867],{"class":119},[76,33167,33168],{"class":90},".s2(x)\n",[76,33170,33171,33173,33175,33177,33179,33181],{"class":78,"line":1822},[76,33172,33145],{"class":90},[76,33174,370],{"class":82},[76,33176,32867],{"class":119},[76,33178,33152],{"class":90},[76,33180,32867],{"class":119},[76,33182,33183],{"class":90},".c3(x))\n",[76,33185,33186,33188,33190,33192],{"class":78,"line":1835},[76,33187,33145],{"class":90},[76,33189,370],{"class":82},[76,33191,32867],{"class":119},[76,33193,33194],{"class":90},".s4(x)\n",[76,33196,33197,33199,33201,33203],{"class":78,"line":1847},[76,33198,33145],{"class":90},[76,33200,370],{"class":82},[76,33202,32867],{"class":119},[76,33204,33205],{"class":90},".flatten(x)\n",[76,33207,33208,33210,33212,33214,33216,33218],{"class":78,"line":1852},[76,33209,33145],{"class":90},[76,33211,370],{"class":82},[76,33213,32867],{"class":119},[76,33215,33152],{"class":90},[76,33217,32867],{"class":119},[76,33219,33220],{"class":90},".f5(x))\n",[76,33222,33223,33225,33227,33229,33231,33233],{"class":78,"line":1862},[76,33224,33145],{"class":90},[76,33226,370],{"class":82},[76,33228,32867],{"class":119},[76,33230,33152],{"class":90},[76,33232,32867],{"class":119},[76,33234,33235],{"class":90},".f6(x))\n",[76,33237,33238,33240,33242,33244],{"class":78,"line":1874},[76,33239,33145],{"class":90},[76,33241,370],{"class":82},[76,33243,32867],{"class":119},[76,33245,33246],{"class":90},".f7(x)\n",[76,33248,33249,33251],{"class":78,"line":1879},[76,33250,595],{"class":82},[76,33252,33253],{"class":90}," x\n",[76,33255,33256],{"class":78,"line":1884},[76,33257,149],{"emptyLinePlaceholder":148},[76,33259,33260,33262,33265,33267,33270],{"class":78,"line":1889},[76,33261,723],{"class":82},[76,33263,33264],{"class":119}," __name__",[76,33266,1250],{"class":82},[76,33268,33269],{"class":126},"\"__main__\"",[76,33271,590],{"class":90},[76,33273,33274],{"class":78,"line":1900},[76,33275,33276],{"class":540},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[76,33278,33279,33282,33284,33286,33289,33291,33294,33296,33298],{"class":78,"line":1906},[76,33280,33281],{"class":90},"    device",[76,33283,370],{"class":82},[76,33285,32496],{"class":90},[76,33287,33288],{"class":126},"\"cuda\"",[76,33290,3811],{"class":82},[76,33292,33293],{"class":90}," torch.cuda.is_available() ",[76,33295,1328],{"class":82},[76,33297,32521],{"class":126},[76,33299,130],{"class":90},[76,33301,33302],{"class":78,"line":1924},[76,33303,33304],{"class":540},"    # 如果就是想指定用cpu用下方代码:\n",[76,33306,33307],{"class":78,"line":1929},[76,33308,33309],{"class":540},"    # device=\"cpu\"\n",[76,33311,33312],{"class":78,"line":1944},[76,33313,33314],{"class":540},"    # print(device)\n",[76,33316,33317],{"class":78,"line":1950},[76,33318,149],{"emptyLinePlaceholder":148},[76,33320,33321],{"class":78,"line":1965},[76,33322,33323],{"class":540},"    # 实例化模型\n",[76,33325,33326],{"class":78,"line":1971},[76,33327,33328],{"class":540},"    # 将模型放到设备中去运行\n",[76,33330,33331,33334,33336],{"class":78,"line":1985},[76,33332,33333],{"class":90},"    model",[76,33335,370],{"class":82},[76,33337,33338],{"class":90},"LeNet().to(device)\n",[76,33340,33341,33343,33346,33348,33350,33352,33354,33356],{"class":78,"line":1991},[76,33342,120],{"class":119},[76,33344,33345],{"class":90},"(summary(model,(",[76,33347,669],{"class":119},[76,33349,2642],{"class":90},[76,33351,3158],{"class":119},[76,33353,2642],{"class":90},[76,33355,3158],{"class":119},[76,33357,33358],{"class":90},")))\n",[19,33360,33361],{},[3583,33362],{"alt":71,"src":33363},"\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,33365,33366],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33368,33369],{"start":94},[29,33370,33371],{},"训练",[19,33373,33374],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33376,33377],{},"在训练之前可以将数据展示看一下",[66,33379,33381],{"className":68,"code":33380,"language":70,"meta":71,"style":71},"# 建立画图的函数，用于展示数据\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",[73,33382,33383,33388,33393,33405,33417,33430,33435,33447,33452,33464,33469,33481,33485,33489,33510,33522,33527,33548,33559,33563,33568,33586,33597,33602,33613,33618,33629,33633,33638,33653,33666,33670,33675,33688,33701,33714,33719,33723,33728,33748,33765,33785,33798,33811,33821,33836],{"__ignoreMap":71},[76,33384,33385],{"class":78,"line":79},[76,33386,33387],{"class":540},"# 建立画图的函数，用于展示数据\n",[76,33389,33390],{"class":78,"line":94},[76,33391,33392],{"class":540},"# torchvision中包含很多内置的数据集\n",[76,33394,33395,33397,33400,33402],{"class":78,"line":133},[76,33396,32781],{"class":82},[76,33398,33399],{"class":90}," sklearn.externals.array_api_compat.torch ",[76,33401,32438],{"class":82},[76,33403,33404],{"class":90}," squeeze\n",[76,33406,33407,33409,33412,33414],{"class":78,"line":145},[76,33408,32781],{"class":82},[76,33410,33411],{"class":90}," torchvision.datasets ",[76,33413,32438],{"class":82},[76,33415,33416],{"class":90}," FashionMNIST\n",[76,33418,33419,33421,33424,33427],{"class":78,"line":152},[76,33420,32438],{"class":82},[76,33422,33423],{"class":90}," numpy ",[76,33425,33426],{"class":82},"as",[76,33428,33429],{"class":90}," np\n",[76,33431,33432],{"class":78,"line":157},[76,33433,33434],{"class":540},"# 引入处理数据集的包\n",[76,33436,33437,33439,33442,33444],{"class":78,"line":246},[76,33438,32781],{"class":82},[76,33440,33441],{"class":90}," torchvision ",[76,33443,32438],{"class":82},[76,33445,33446],{"class":90}," transforms\n",[76,33448,33449],{"class":78,"line":251},[76,33450,33451],{"class":540},"# 从torch库中引入数据处理的包\n",[76,33453,33454,33456,33459,33461],{"class":78,"line":257},[76,33455,32438],{"class":82},[76,33457,33458],{"class":90}," torch.utils.data ",[76,33460,33426],{"class":82},[76,33462,33463],{"class":90}," Data\n",[76,33465,33466],{"class":78,"line":641},[76,33467,33468],{"class":540},"# 导入画图的库\n",[76,33470,33471,33473,33476,33478],{"class":78,"line":646},[76,33472,32438],{"class":82},[76,33474,33475],{"class":90}," matplotlib.pyplot ",[76,33477,33426],{"class":82},[76,33479,33480],{"class":90}," plt\n",[76,33482,33483],{"class":78,"line":659},[76,33484,149],{"emptyLinePlaceholder":148},[76,33486,33487],{"class":78,"line":1608},[76,33488,149],{"emptyLinePlaceholder":148},[76,33490,33491,33494,33496,33499,33502,33504,33507],{"class":78,"line":1632},[76,33492,33493],{"class":90},"train_data",[76,33495,370],{"class":82},[76,33497,33498],{"class":90},"FashionMNIST(",[76,33500,33501],{"class":7296},"root",[76,33503,370],{"class":82},[76,33505,33506],{"class":126},"'.\u002Fdata'",[76,33508,33509],{"class":90},",\n",[76,33511,33512,33515,33517,33520],{"class":78,"line":1637},[76,33513,33514],{"class":7296},"                        train",[76,33516,370],{"class":82},[76,33518,33519],{"class":119},"True",[76,33521,33509],{"class":90},[76,33523,33524],{"class":78,"line":1642},[76,33525,33526],{"class":540},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[76,33528,33529,33532,33534,33537,33540,33542,33545],{"class":78,"line":1652},[76,33530,33531],{"class":7296},"                        transform",[76,33533,370],{"class":82},[76,33535,33536],{"class":90},"transforms.Compose([transforms.Resize(",[76,33538,33539],{"class":7296},"size",[76,33541,370],{"class":82},[76,33543,33544],{"class":119},"224",[76,33546,33547],{"class":90},"),transforms.ToTensor()]),\n",[76,33549,33550,33553,33555,33557],{"class":78,"line":1660},[76,33551,33552],{"class":7296},"                        download",[76,33554,370],{"class":82},[76,33556,33519],{"class":119},[76,33558,130],{"class":90},[76,33560,33561],{"class":78,"line":1683},[76,33562,149],{"emptyLinePlaceholder":148},[76,33564,33565],{"class":78,"line":1698},[76,33566,33567],{"class":540},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[76,33569,33570,33573,33575,33578,33581,33583],{"class":78,"line":1711},[76,33571,33572],{"class":90},"train_loader",[76,33574,370],{"class":82},[76,33576,33577],{"class":90},"Data.DataLoader(",[76,33579,33580],{"class":7296},"dataset",[76,33582,370],{"class":82},[76,33584,33585],{"class":90},"train_data,\n",[76,33587,33588,33591,33593,33595],{"class":78,"line":1717},[76,33589,33590],{"class":7296},"                             batch_size",[76,33592,370],{"class":82},[76,33594,2469],{"class":119},[76,33596,33509],{"class":90},[76,33598,33599],{"class":78,"line":1728},[76,33600,33601],{"class":540},"                             # 数据是否打乱\n",[76,33603,33604,33607,33609,33611],{"class":78,"line":1740},[76,33605,33606],{"class":7296},"                             shuffle",[76,33608,370],{"class":82},[76,33610,33519],{"class":119},[76,33612,33509],{"class":90},[76,33614,33615],{"class":78,"line":1746},[76,33616,33617],{"class":540},"                             # 规定加载数据的进程\n",[76,33619,33620,33623,33625,33627],{"class":78,"line":1751},[76,33621,33622],{"class":7296},"                             num_workers",[76,33624,370],{"class":82},[76,33626,1294],{"class":119},[76,33628,130],{"class":90},[76,33630,33631],{"class":78,"line":1756},[76,33632,149],{"emptyLinePlaceholder":148},[76,33634,33635],{"class":78,"line":1766},[76,33636,33637],{"class":540},"# 获得一个batch的数据\n",[76,33639,33640,33642,33645,33647,33650],{"class":78,"line":1773},[76,33641,5112],{"class":82},[76,33643,33644],{"class":90}," step,(b_x,b_y) ",[76,33646,1475],{"class":82},[76,33648,33649],{"class":119}," enumerate",[76,33651,33652],{"class":90},"(train_loader):\n",[76,33654,33655,33657,33660,33662,33664],{"class":78,"line":1793},[76,33656,578],{"class":82},[76,33658,33659],{"class":90}," step ",[76,33661,1829],{"class":82},[76,33663,587],{"class":119},[76,33665,590],{"class":90},[76,33667,33668],{"class":78,"line":1806},[76,33669,2020],{"class":82},[76,33671,33672],{"class":78,"line":1817},[76,33673,33674],{"class":540},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[76,33676,33677,33680,33682,33685],{"class":78,"line":1822},[76,33678,33679],{"class":90},"batch_x",[76,33681,370],{"class":82},[76,33683,33684],{"class":90},"b_x.squeeze().numpy()  ",[76,33686,33687],{"class":540},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[76,33689,33690,33693,33695,33698],{"class":78,"line":1835},[76,33691,33692],{"class":90},"batch_y",[76,33694,370],{"class":82},[76,33696,33697],{"class":90},"b_y.numpy()   ",[76,33699,33700],{"class":540},"#将张量转换成功numpy数组\n",[76,33702,33703,33706,33708,33711],{"class":78,"line":1847},[76,33704,33705],{"class":90},"class_label",[76,33707,370],{"class":82},[76,33709,33710],{"class":90},"train_data.classes  ",[76,33712,33713],{"class":540},"#训练集标签\n",[76,33715,33716],{"class":78,"line":1852},[76,33717,33718],{"class":540},"# print(class_label)\n",[76,33720,33721],{"class":78,"line":1862},[76,33722,149],{"emptyLinePlaceholder":148},[76,33724,33725],{"class":78,"line":1874},[76,33726,33727],{"class":540},"# 可视化一个batch的图像\n",[76,33729,33730,33733,33736,33738,33740,33742,33744,33746],{"class":78,"line":1879},[76,33731,33732],{"class":90},"plt.figure(",[76,33734,33735],{"class":7296},"figsize",[76,33737,370],{"class":82},[76,33739,123],{"class":90},[76,33741,2760],{"class":119},[76,33743,2642],{"class":90},[76,33745,2583],{"class":119},[76,33747,656],{"class":90},[76,33749,33750,33752,33755,33757,33760,33762],{"class":78,"line":1884},[76,33751,5112],{"class":82},[76,33753,33754],{"class":90}," ii ",[76,33756,1475],{"class":82},[76,33758,33759],{"class":90}," np.arange(",[76,33761,9436],{"class":119},[76,33763,33764],{"class":90},"(batch_y)):\n",[76,33766,33767,33770,33772,33774,33776,33779,33781,33783],{"class":78,"line":1889},[76,33768,33769],{"class":90},"    plt.subplot(",[76,33771,2557],{"class":119},[76,33773,2642],{"class":90},[76,33775,2861],{"class":119},[76,33777,33778],{"class":90},",ii ",[76,33780,376],{"class":82},[76,33782,27168],{"class":119},[76,33784,130],{"class":90},[76,33786,33787,33790,33793,33795],{"class":78,"line":1900},[76,33788,33789],{"class":90},"    plt.imshow(batch_x[ii,:,:],",[76,33791,33792],{"class":7296},"cmap",[76,33794,370],{"class":82},[76,33796,33797],{"class":90},"plt.cm.gray)\n",[76,33799,33800,33803,33805,33807,33809],{"class":78,"line":1906},[76,33801,33802],{"class":90},"    plt.title(class_label[batch_y[ii]],",[76,33804,33539],{"class":7296},[76,33806,370],{"class":82},[76,33808,402],{"class":119},[76,33810,130],{"class":90},[76,33812,33813,33816,33819],{"class":78,"line":1924},[76,33814,33815],{"class":90},"    plt.axis(",[76,33817,33818],{"class":126},"\"off\"",[76,33820,130],{"class":90},[76,33822,33823,33826,33829,33831,33834],{"class":78,"line":1929},[76,33824,33825],{"class":90},"    plt.subplots_adjust(",[76,33827,33828],{"class":7296},"wspace",[76,33830,370],{"class":82},[76,33832,33833],{"class":119},"0.05",[76,33835,130],{"class":90},[76,33837,33838],{"class":78,"line":1944},[76,33839,33840],{"class":90},"plt.show()\n",[19,33842,33843],{},"用matplotlib进行展示的过程可以后续再补",[19,33845,33846],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33848,33849],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33851,33852],{},"模型训练：",[66,33854,33856],{"className":68,"code":33855,"language":70,"meta":71,"style":71},"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",[73,33857,33858,33865,33872,33876,33888,33894,33905,33915,33925,33935,33945,33950,33962,33972,33976,33980,33985,33994,34007,34018,34035,34046,34085,34101,34113,34124,34129,34140,34156,34167,34178,34189,34196,34200,34205,34210,34214,34219,34229,34250,34254,34258,34263,34268,34273,34293,34297,34302,34312,34316,34321,34330,34335,34340,34345,34355,34359,34363,34368,34373,34383,34388,34398,34403,34412,34417,34426,34431,34440,34444,34449,34459,34463,34467,34472,34487,34514,34528,34532,34537,34542,34551,34556,34565,34570,34579,34584,34593,34598,34607,34612,34621,34626,34639,34644,34654,34659,34669,34675,34681,34687,34693,34704,34710,34730,34736,34747,34753,34759,34765,34771,34777,34783,34789,34809,34815,34831,34837,34851,34857,34872,34878,34887,34893,34902,34908,34914,34923,34929,34940,34946,34965,34971,34982,34988,35008,35024,35030,35044,35050,35056,35067,35073,35079,35089,35095,35106,35112,35122,35127,35133,35182,35229,35234,35240,35259,35265,35285,35291,35297,35307,35312,35318,35334,35379,35385,35391,35397,35408,35414,35420,35426,35444,35458,35467,35476,35485,35494,35500,35506,35514,35519,35525,35536,35542,35562,35568,35574,35580,35597,35603,35609,35615,35621,35627,35654,35678,35684,35690,35696,35707,35718,35724,35741,35764,35787,35793,35798,35807,35817,35823,35828,35834,35847,35853,35864,35875,35894],{"__ignoreMap":71},[76,33859,33860,33862],{"class":78,"line":79},[76,33861,32438],{"class":82},[76,33863,33864],{"class":90}," copy\n",[76,33866,33867,33869],{"class":78,"line":94},[76,33868,32438],{"class":82},[76,33870,33871],{"class":90}," time\n",[76,33873,33874],{"class":78,"line":133},[76,33875,149],{"emptyLinePlaceholder":148},[76,33877,33878,33880,33883,33885],{"class":78,"line":145},[76,33879,32438],{"class":82},[76,33881,33882],{"class":90}," pandas ",[76,33884,33426],{"class":82},[76,33886,33887],{"class":90}," pd\n",[76,33889,33890,33892],{"class":78,"line":152},[76,33891,32438],{"class":82},[76,33893,32441],{"class":90},[76,33895,33896,33898,33900,33902],{"class":78,"line":157},[76,33897,32781],{"class":82},[76,33899,33458],{"class":90},[76,33901,32438],{"class":82},[76,33903,33904],{"class":90}," Dataset\n",[76,33906,33907,33909,33911,33913],{"class":78,"line":246},[76,33908,32781],{"class":82},[76,33910,33411],{"class":90},[76,33912,32438],{"class":82},[76,33914,33416],{"class":90},[76,33916,33917,33919,33921,33923],{"class":78,"line":251},[76,33918,32781],{"class":82},[76,33920,33441],{"class":90},[76,33922,32438],{"class":82},[76,33924,33446],{"class":90},[76,33926,33927,33929,33931,33933],{"class":78,"line":257},[76,33928,32438],{"class":82},[76,33930,33458],{"class":90},[76,33932,33426],{"class":82},[76,33934,33463],{"class":90},[76,33936,33937,33939,33941,33943],{"class":78,"line":641},[76,33938,32438],{"class":82},[76,33940,33475],{"class":90},[76,33942,33426],{"class":82},[76,33944,33480],{"class":90},[76,33946,33947],{"class":78,"line":646},[76,33948,33949],{"class":540},"# 导入模型\n",[76,33951,33952,33954,33957,33959],{"class":78,"line":659},[76,33953,32781],{"class":82},[76,33955,33956],{"class":90}," model ",[76,33958,32438],{"class":82},[76,33960,33961],{"class":90}," LeNet\n",[76,33963,33964,33966,33968,33970],{"class":78,"line":1608},[76,33965,32781],{"class":82},[76,33967,32784],{"class":90},[76,33969,32438],{"class":82},[76,33971,32789],{"class":90},[76,33973,33974],{"class":78,"line":1632},[76,33975,149],{"emptyLinePlaceholder":148},[76,33977,33978],{"class":78,"line":1637},[76,33979,149],{"emptyLinePlaceholder":148},[76,33981,33982],{"class":78,"line":1642},[76,33983,33984],{"class":540},"# 处理训练集与验证集函数--->划分数据集\n",[76,33986,33987,33989,33992],{"class":78,"line":1652},[76,33988,83],{"class":82},[76,33990,33991],{"class":86}," train_val_data_process",[76,33993,91],{"class":90},[76,33995,33996,33999,34001,34003,34005],{"class":78,"line":1660},[76,33997,33998],{"class":90},"    train_data",[76,34000,370],{"class":82},[76,34002,33498],{"class":90},[76,34004,33506],{"class":126},[76,34006,33509],{"class":90},[76,34008,34009,34012,34014,34016],{"class":78,"line":1683},[76,34010,34011],{"class":7296},"                            train",[76,34013,370],{"class":82},[76,34015,33519],{"class":119},[76,34017,33509],{"class":90},[76,34019,34020,34023,34025,34027,34029,34031,34033],{"class":78,"line":1698},[76,34021,34022],{"class":7296},"                            transform",[76,34024,370],{"class":82},[76,34026,33536],{"class":90},[76,34028,33539],{"class":7296},[76,34030,370],{"class":82},[76,34032,3158],{"class":119},[76,34034,33547],{"class":90},[76,34036,34037,34040,34042,34044],{"class":78,"line":1711},[76,34038,34039],{"class":7296},"                            download",[76,34041,370],{"class":82},[76,34043,33519],{"class":119},[76,34045,130],{"class":90},[76,34047,34048,34051,34053,34056,34059,34061,34064,34066,34068,34071,34073,34075,34078,34080,34082],{"class":78,"line":1717},[76,34049,34050],{"class":90},"    train_data,val_data",[76,34052,370],{"class":82},[76,34054,34055],{"class":90},"Data.random_split(train_data,[",[76,34057,34058],{"class":119},"round",[76,34060,123],{"class":90},[76,34062,34063],{"class":119},"0.8",[76,34065,2718],{"class":82},[76,34067,9436],{"class":119},[76,34069,34070],{"class":90},"(train_data)),",[76,34072,34058],{"class":119},[76,34074,123],{"class":90},[76,34076,34077],{"class":119},"0.2",[76,34079,2718],{"class":82},[76,34081,9436],{"class":119},[76,34083,34084],{"class":90},"(train_data))])\n",[76,34086,34087,34090,34092,34095,34097,34099],{"class":78,"line":1728},[76,34088,34089],{"class":90},"    train_dataloader ",[76,34091,370],{"class":82},[76,34093,34094],{"class":90}," Data.DataLoader(",[76,34096,33580],{"class":7296},[76,34098,370],{"class":82},[76,34100,33585],{"class":90},[76,34102,34103,34106,34108,34111],{"class":78,"line":1740},[76,34104,34105],{"class":7296},"                                       batch_size",[76,34107,370],{"class":82},[76,34109,34110],{"class":119},"128",[76,34112,33509],{"class":90},[76,34114,34115,34118,34120,34122],{"class":78,"line":1746},[76,34116,34117],{"class":7296},"                                       shuffle",[76,34119,370],{"class":82},[76,34121,33519],{"class":119},[76,34123,33509],{"class":90},[76,34125,34126],{"class":78,"line":1751},[76,34127,34128],{"class":540},"                                       # 规定8个进程\n",[76,34130,34131,34134,34136,34138],{"class":78,"line":1756},[76,34132,34133],{"class":7296},"                                       num_workers",[76,34135,370],{"class":82},[76,34137,2659],{"class":119},[76,34139,130],{"class":90},[76,34141,34142,34145,34147,34149,34151,34153],{"class":78,"line":1766},[76,34143,34144],{"class":90},"    val_dataloader",[76,34146,370],{"class":82},[76,34148,33577],{"class":90},[76,34150,33580],{"class":7296},[76,34152,370],{"class":82},[76,34154,34155],{"class":90},"val_data,\n",[76,34157,34158,34161,34163,34165],{"class":78,"line":1773},[76,34159,34160],{"class":7296},"                                   batch_size",[76,34162,370],{"class":82},[76,34164,34110],{"class":119},[76,34166,33509],{"class":90},[76,34168,34169,34172,34174,34176],{"class":78,"line":1793},[76,34170,34171],{"class":7296},"                                   shuffle",[76,34173,370],{"class":82},[76,34175,33519],{"class":119},[76,34177,33509],{"class":90},[76,34179,34180,34183,34185,34187],{"class":78,"line":1806},[76,34181,34182],{"class":7296},"                                   num_workers",[76,34184,370],{"class":82},[76,34186,2659],{"class":119},[76,34188,130],{"class":90},[76,34190,34191,34193],{"class":78,"line":1817},[76,34192,441],{"class":82},[76,34194,34195],{"class":90}," train_dataloader,val_dataloader\n",[76,34197,34198],{"class":78,"line":1822},[76,34199,149],{"emptyLinePlaceholder":148},[76,34201,34202],{"class":78,"line":1835},[76,34203,34204],{"class":540},"# 验证是否出错\n",[76,34206,34207],{"class":78,"line":1847},[76,34208,34209],{"class":540},"# train_val_data_process()\n",[76,34211,34212],{"class":78,"line":1852},[76,34213,149],{"emptyLinePlaceholder":148},[76,34215,34216],{"class":78,"line":1862},[76,34217,34218],{"class":540},"# 定义模型训练函数\n",[76,34220,34221,34223,34226],{"class":78,"line":1874},[76,34222,83],{"class":82},[76,34224,34225],{"class":86}," train_model_process",[76,34227,34228],{"class":90},"(model,train_dataloader,val_dataloader,num_epochs):\n",[76,34230,34231,34233,34235,34237,34239,34241,34243,34245,34248],{"class":78,"line":1879},[76,34232,33281],{"class":90},[76,34234,370],{"class":82},[76,34236,32496],{"class":90},[76,34238,33288],{"class":126},[76,34240,3811],{"class":82},[76,34242,33293],{"class":90},[76,34244,1328],{"class":82},[76,34246,34247],{"class":126}," 'cpu'",[76,34249,130],{"class":90},[76,34251,34252],{"class":78,"line":1884},[76,34253,149],{"emptyLinePlaceholder":148},[76,34255,34256],{"class":78,"line":1889},[76,34257,149],{"emptyLinePlaceholder":148},[76,34259,34260],{"class":78,"line":1900},[76,34261,34262],{"class":540},"    # 定义优化器\n",[76,34264,34265],{"class":78,"line":1906},[76,34266,34267],{"class":540},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[76,34269,34270],{"class":78,"line":1924},[76,34271,34272],{"class":540},"    # lr为学习率\n",[76,34274,34275,34278,34280,34283,34286,34288,34291],{"class":78,"line":1929},[76,34276,34277],{"class":90},"    optimizer",[76,34279,370],{"class":82},[76,34281,34282],{"class":90},"torch.optim.Adam(model.parameters(),",[76,34284,34285],{"class":7296},"lr",[76,34287,370],{"class":82},[76,34289,34290],{"class":119},"0.001",[76,34292,130],{"class":90},[76,34294,34295],{"class":78,"line":1944},[76,34296,149],{"emptyLinePlaceholder":148},[76,34298,34299],{"class":78,"line":1950},[76,34300,34301],{"class":540},"    # 定义损失函数使用交叉熵损失函数\n",[76,34303,34304,34307,34309],{"class":78,"line":1965},[76,34305,34306],{"class":90},"    criterion",[76,34308,370],{"class":82},[76,34310,34311],{"class":90},"nn.CrossEntropyLoss()\n",[76,34313,34314],{"class":78,"line":1971},[76,34315,149],{"emptyLinePlaceholder":148},[76,34317,34318],{"class":78,"line":1985},[76,34319,34320],{"class":540},"    # 将模型放到GPU中进行训练\n",[76,34322,34323,34325,34327],{"class":78,"line":1991},[76,34324,33333],{"class":90},[76,34326,370],{"class":82},[76,34328,34329],{"class":90},"model.to(device)\n",[76,34331,34332],{"class":78,"line":2005},[76,34333,34334],{"class":540},"    # 复制当前模型的参数\n",[76,34336,34337],{"class":78,"line":2017},[76,34338,34339],{"class":540},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[76,34341,34342],{"class":78,"line":2023},[76,34343,34344],{"class":540},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[76,34346,34347,34350,34352],{"class":78,"line":2031},[76,34348,34349],{"class":90},"    best_model_wts",[76,34351,370],{"class":82},[76,34353,34354],{"class":90},"copy.deepcopy(model.state_dict())\n",[76,34356,34357],{"class":78,"line":11880},[76,34358,149],{"emptyLinePlaceholder":148},[76,34360,34361],{"class":78,"line":11901},[76,34362,149],{"emptyLinePlaceholder":148},[76,34364,34365],{"class":78,"line":11907},[76,34366,34367],{"class":540},"    # 初始化参数\n",[76,34369,34370],{"class":78,"line":11921},[76,34371,34372],{"class":540},"    # 最高准确度\n",[76,34374,34375,34378,34380],{"class":78,"line":11927},[76,34376,34377],{"class":90},"    best_acc",[76,34379,370],{"class":82},[76,34381,34382],{"class":119},"0.0\n",[76,34384,34385],{"class":78,"line":11954},[76,34386,34387],{"class":540},"    # 训练集损失列表\n",[76,34389,34390,34393,34395],{"class":78,"line":11963},[76,34391,34392],{"class":90},"    train_loss_all",[76,34394,370],{"class":82},[76,34396,34397],{"class":90},"[]\n",[76,34399,34400],{"class":78,"line":11969},[76,34401,34402],{"class":540},"    # 验证集函数列表\n",[76,34404,34405,34408,34410],{"class":78,"line":11977},[76,34406,34407],{"class":90},"    val_loss_all",[76,34409,370],{"class":82},[76,34411,34397],{"class":90},[76,34413,34414],{"class":78,"line":11982},[76,34415,34416],{"class":540},"    # 训练集准确度列表\n",[76,34418,34419,34422,34424],{"class":78,"line":18654},[76,34420,34421],{"class":90},"    train_acc_all",[76,34423,370],{"class":82},[76,34425,34397],{"class":90},[76,34427,34428],{"class":78,"line":18660},[76,34429,34430],{"class":540},"    # 验证集准确度列表\n",[76,34432,34433,34436,34438],{"class":78,"line":18683},[76,34434,34435],{"class":90},"    val_acc_all",[76,34437,370],{"class":82},[76,34439,34397],{"class":90},[76,34441,34442],{"class":78,"line":18689},[76,34443,149],{"emptyLinePlaceholder":148},[76,34445,34446],{"class":78,"line":18712},[76,34447,34448],{"class":540},"    # 保存当前时间--->方便看每轮训练的时间\n",[76,34450,34451,34454,34456],{"class":78,"line":18726},[76,34452,34453],{"class":90},"    since",[76,34455,370],{"class":82},[76,34457,34458],{"class":90},"time.time()\n",[76,34460,34461],{"class":78,"line":18746},[76,34462,149],{"emptyLinePlaceholder":148},[76,34464,34465],{"class":78,"line":18752},[76,34466,149],{"emptyLinePlaceholder":148},[76,34468,34469],{"class":78,"line":18763},[76,34470,34471],{"class":540},"    # 准备工作完成--->开始训练模型\n",[76,34473,34474,34476,34479,34481,34484],{"class":78,"line":18786},[76,34475,1469],{"class":82},[76,34477,34478],{"class":90}," epoch ",[76,34480,1475],{"class":82},[76,34482,34483],{"class":119}," range",[76,34485,34486],{"class":90},"(num_epochs):\n",[76,34488,34489,34491,34493,34496,34499,34501,34503,34505,34508,34510,34512],{"class":78,"line":18808},[76,34490,1701],{"class":119},[76,34492,123],{"class":90},[76,34494,34495],{"class":126},"\"Epoch ",[76,34497,34498],{"class":119},"{}",[76,34500,795],{"class":126},[76,34502,34498],{"class":119},[76,34504,307],{"class":126},[76,34506,34507],{"class":90},".format(epoch,num_epochs",[76,34509,666],{"class":82},[76,34511,669],{"class":119},[76,34513,656],{"class":90},[76,34515,34516,34518,34520,34522,34524,34526],{"class":78,"line":18813},[76,34517,1701],{"class":119},[76,34519,123],{"class":90},[76,34521,1116],{"class":126},[76,34523,2718],{"class":82},[76,34525,402],{"class":119},[76,34527,130],{"class":90},[76,34529,34530],{"class":78,"line":18819},[76,34531,149],{"emptyLinePlaceholder":148},[76,34533,34534],{"class":78,"line":18833},[76,34535,34536],{"class":540},"        # 初始化参数\n",[76,34538,34539],{"class":78,"line":18846},[76,34540,34541],{"class":540},"        # 训练集损失函数\n",[76,34543,34544,34547,34549],{"class":78,"line":18851},[76,34545,34546],{"class":90},"        train_loss",[76,34548,370],{"class":82},[76,34550,34382],{"class":119},[76,34552,34553],{"class":78,"line":18865},[76,34554,34555],{"class":540},"        # 训练集准确度\n",[76,34557,34558,34561,34563],{"class":78,"line":18870},[76,34559,34560],{"class":90},"        train_corrects",[76,34562,370],{"class":82},[76,34564,5172],{"class":119},[76,34566,34567],{"class":78,"line":18876},[76,34568,34569],{"class":540},"        # 验证集损失函数\n",[76,34571,34572,34575,34577],{"class":78,"line":18881},[76,34573,34574],{"class":90},"        val_loss",[76,34576,370],{"class":82},[76,34578,34382],{"class":119},[76,34580,34581],{"class":78,"line":18895},[76,34582,34583],{"class":540},"        # 验证集准确度\n",[76,34585,34586,34589,34591],{"class":78,"line":18900},[76,34587,34588],{"class":90},"        val_corrects",[76,34590,370],{"class":82},[76,34592,5172],{"class":119},[76,34594,34595],{"class":78,"line":18905},[76,34596,34597],{"class":540},"        # 训练集样本数量\n",[76,34599,34600,34603,34605],{"class":78,"line":18919},[76,34601,34602],{"class":90},"        train_num",[76,34604,370],{"class":82},[76,34606,5172],{"class":119},[76,34608,34609],{"class":78,"line":18931},[76,34610,34611],{"class":540},"        # 验证集样本数量\n",[76,34613,34614,34617,34619],{"class":78,"line":18936},[76,34615,34616],{"class":90},"        val_num",[76,34618,370],{"class":82},[76,34620,5172],{"class":119},[76,34622,34623],{"class":78,"line":18949},[76,34624,34625],{"class":540},"        # 将数据放到设备,并开始训练\n",[76,34627,34628,34630,34632,34634,34636],{"class":78,"line":18954},[76,34629,5488],{"class":82},[76,34631,33644],{"class":90},[76,34633,1475],{"class":82},[76,34635,33649],{"class":119},[76,34637,34638],{"class":90},"(train_dataloader):\n",[76,34640,34641],{"class":78,"line":18959},[76,34642,34643],{"class":540},"            # 将特征放入到训练设备\n",[76,34645,34646,34649,34651],{"class":78,"line":18964},[76,34647,34648],{"class":90},"            b_x",[76,34650,370],{"class":82},[76,34652,34653],{"class":90},"b_x.to(device)\n",[76,34655,34656],{"class":78,"line":18977},[76,34657,34658],{"class":540},"            # 将标签放入到训练设备当中\n",[76,34660,34661,34664,34666],{"class":78,"line":18982},[76,34662,34663],{"class":90},"            b_y",[76,34665,370],{"class":82},[76,34667,34668],{"class":90},"b_y.to(device)\n",[76,34670,34672],{"class":78,"line":34671},98,[76,34673,34674],{"class":540},"            # 设置模型为训练模式\n",[76,34676,34678],{"class":78,"line":34677},99,[76,34679,34680],{"class":90},"            model.train()\n",[76,34682,34684],{"class":78,"line":34683},100,[76,34685,34686],{"class":540},"            # 将数据放到模型当中,开始前向传播\n",[76,34688,34690],{"class":78,"line":34689},101,[76,34691,34692],{"class":540},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[76,34694,34696,34699,34701],{"class":78,"line":34695},102,[76,34697,34698],{"class":90},"            output",[76,34700,370],{"class":82},[76,34702,34703],{"class":90},"model(b_x)\n",[76,34705,34707],{"class":78,"line":34706},103,[76,34708,34709],{"class":540},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[76,34711,34713,34716,34718,34721,34724,34726,34728],{"class":78,"line":34712},104,[76,34714,34715],{"class":90},"            pre_lab",[76,34717,370],{"class":82},[76,34719,34720],{"class":90},"torch.argmax(output,",[76,34722,34723],{"class":7296},"dim",[76,34725,370],{"class":82},[76,34727,669],{"class":119},[76,34729,130],{"class":90},[76,34731,34733],{"class":78,"line":34732},105,[76,34734,34735],{"class":540},"            # 计算每一个batch的损失函数\n",[76,34737,34739,34742,34744],{"class":78,"line":34738},106,[76,34740,34741],{"class":90},"            loss",[76,34743,370],{"class":82},[76,34745,34746],{"class":90},"criterion(output,b_y)\n",[76,34748,34750],{"class":78,"line":34749},107,[76,34751,34752],{"class":540},"            # 将梯度初始化为0\n",[76,34754,34756],{"class":78,"line":34755},108,[76,34757,34758],{"class":90},"            optimizer.zero_grad()\n",[76,34760,34762],{"class":78,"line":34761},109,[76,34763,34764],{"class":540},"            # 梯度置为0后再进行反向传播\n",[76,34766,34768],{"class":78,"line":34767},110,[76,34769,34770],{"class":90},"            loss.backward()\n",[76,34772,34774],{"class":78,"line":34773},111,[76,34775,34776],{"class":540},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[76,34778,34780],{"class":78,"line":34779},112,[76,34781,34782],{"class":90},"            optimizer.step()\n",[76,34784,34786],{"class":78,"line":34785},113,[76,34787,34788],{"class":540},"            # loss.item()指的是batch的平均损失\n",[76,34790,34792,34795,34797,34800,34802,34805,34807],{"class":78,"line":34791},114,[76,34793,34794],{"class":90},"            train_loss",[76,34796,1060],{"class":82},[76,34798,34799],{"class":90},"loss.item()",[76,34801,2718],{"class":82},[76,34803,34804],{"class":90},"b_x.size(",[76,34806,1294],{"class":119},[76,34808,130],{"class":90},[76,34810,34812],{"class":78,"line":34811},115,[76,34813,34814],{"class":540},"            # 计算每个批次中正确预测的数量\n",[76,34816,34818,34821,34823,34826,34828],{"class":78,"line":34817},116,[76,34819,34820],{"class":90},"            train_corrects",[76,34822,1060],{"class":82},[76,34824,34825],{"class":90},"torch.sum(pre_lab",[76,34827,1250],{"class":82},[76,34829,34830],{"class":90},"b_y.data)\n",[76,34832,34834],{"class":78,"line":34833},117,[76,34835,34836],{"class":540},"            # 计算目前为止一共处理了多少样本\n",[76,34838,34840,34843,34845,34847,34849],{"class":78,"line":34839},118,[76,34841,34842],{"class":90},"            train_num",[76,34844,1060],{"class":82},[76,34846,34804],{"class":90},[76,34848,1294],{"class":119},[76,34850,130],{"class":90},[76,34852,34854],{"class":78,"line":34853},119,[76,34855,34856],{"class":540},"        # 验证数据\n",[76,34858,34860,34862,34865,34867,34869],{"class":78,"line":34859},120,[76,34861,5488],{"class":82},[76,34863,34864],{"class":90}," step ,(b_x,b_y) ",[76,34866,1475],{"class":82},[76,34868,33649],{"class":119},[76,34870,34871],{"class":90},"(val_dataloader):\n",[76,34873,34875],{"class":78,"line":34874},121,[76,34876,34877],{"class":540},"            # 将特征放到验证设备当中\n",[76,34879,34881,34883,34885],{"class":78,"line":34880},122,[76,34882,34648],{"class":90},[76,34884,370],{"class":82},[76,34886,34653],{"class":90},[76,34888,34890],{"class":78,"line":34889},123,[76,34891,34892],{"class":540},"            # 将标签放到放到训练设备当中\n",[76,34894,34896,34898,34900],{"class":78,"line":34895},124,[76,34897,34663],{"class":90},[76,34899,370],{"class":82},[76,34901,34668],{"class":90},[76,34903,34905],{"class":78,"line":34904},125,[76,34906,34907],{"class":540},"            # 开启验证模式，设置模型为评估模式\n",[76,34909,34911],{"class":78,"line":34910},126,[76,34912,34913],{"class":90},"            model.eval()\n",[76,34915,34917,34920],{"class":78,"line":34916},127,[76,34918,34919],{"class":82},"            with",[76,34921,34922],{"class":90}," torch.no_grad():\n",[76,34924,34926],{"class":78,"line":34925},128,[76,34927,34928],{"class":540},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[76,34930,34932,34935,34937],{"class":78,"line":34931},129,[76,34933,34934],{"class":90},"                output ",[76,34936,370],{"class":82},[76,34938,34939],{"class":90}," model(b_x)\n",[76,34941,34943],{"class":78,"line":34942},130,[76,34944,34945],{"class":540},"                # 查找每一行中最大值对应的下标\n",[76,34947,34949,34952,34954,34957,34959,34961,34963],{"class":78,"line":34948},131,[76,34950,34951],{"class":90},"                pre_lab ",[76,34953,370],{"class":82},[76,34955,34956],{"class":90}," torch.argmax(output, ",[76,34958,34723],{"class":7296},[76,34960,370],{"class":82},[76,34962,669],{"class":119},[76,34964,130],{"class":90},[76,34966,34968],{"class":78,"line":34967},132,[76,34969,34970],{"class":540},"                # 计算验证集上的当前 batch 损失\n",[76,34972,34974,34977,34979],{"class":78,"line":34973},133,[76,34975,34976],{"class":90},"                val_batch_loss ",[76,34978,370],{"class":82},[76,34980,34981],{"class":90}," criterion(output, b_y)\n",[76,34983,34985],{"class":78,"line":34984},134,[76,34986,34987],{"class":540},"                # 对损失函数进行累加（按样本数加权）\n",[76,34989,34991,34994,34996,34999,35001,35004,35006],{"class":78,"line":34990},135,[76,34992,34993],{"class":90},"                val_loss ",[76,34995,1060],{"class":82},[76,34997,34998],{"class":90}," val_batch_loss.item() ",[76,35000,2718],{"class":82},[76,35002,35003],{"class":90}," b_x.size(",[76,35005,1294],{"class":119},[76,35007,130],{"class":90},[76,35009,35011,35014,35016,35019,35021],{"class":78,"line":35010},136,[76,35012,35013],{"class":90},"                val_corrects ",[76,35015,1060],{"class":82},[76,35017,35018],{"class":90}," torch.sum(pre_lab ",[76,35020,1250],{"class":82},[76,35022,35023],{"class":90}," b_y.data)\n",[76,35025,35027],{"class":78,"line":35026},137,[76,35028,35029],{"class":540},"                # 当前用于验证的样本数量\n",[76,35031,35033,35036,35038,35040,35042],{"class":78,"line":35032},138,[76,35034,35035],{"class":90},"            val_num ",[76,35037,1060],{"class":82},[76,35039,35003],{"class":90},[76,35041,1294],{"class":119},[76,35043,130],{"class":90},[76,35045,35047],{"class":78,"line":35046},139,[76,35048,35049],{"class":540},"        # 计算并保存每一次迭代的loss值和准确率\n",[76,35051,35053],{"class":78,"line":35052},140,[76,35054,35055],{"class":540},"        # 计算并保存训练集的loss值\n",[76,35057,35059,35062,35064],{"class":78,"line":35058},141,[76,35060,35061],{"class":90},"        train_loss_all.append(train_loss",[76,35063,795],{"class":82},[76,35065,35066],{"class":90},"train_num)\n",[76,35068,35070],{"class":78,"line":35069},142,[76,35071,35072],{"class":540},"        # 取双精度\n",[76,35074,35076],{"class":78,"line":35075},143,[76,35077,35078],{"class":540},"        # 计算并保存训练集的准确率\n",[76,35080,35082,35085,35087],{"class":78,"line":35081},144,[76,35083,35084],{"class":90},"        train_acc_all.append(train_corrects.double().item()",[76,35086,795],{"class":82},[76,35088,35066],{"class":90},[76,35090,35092],{"class":78,"line":35091},145,[76,35093,35094],{"class":540},"        # 计算并保存验证集的loss值\n",[76,35096,35098,35101,35103],{"class":78,"line":35097},146,[76,35099,35100],{"class":90},"        val_loss_all.append(val_loss",[76,35102,795],{"class":82},[76,35104,35105],{"class":90},"val_num)\n",[76,35107,35109],{"class":78,"line":35108},147,[76,35110,35111],{"class":540},"        # 计算并保存验证集的准确率\n",[76,35113,35115,35118,35120],{"class":78,"line":35114},148,[76,35116,35117],{"class":90},"        val_acc_all.append(val_corrects.double().item()",[76,35119,795],{"class":82},[76,35121,35105],{"class":90},[76,35123,35125],{"class":78,"line":35124},149,[76,35126,149],{"emptyLinePlaceholder":148},[76,35128,35130],{"class":78,"line":35129},150,[76,35131,35132],{"class":540},"        # 打印训练一轮的loss值和准确率\n",[76,35134,35136,35138,35140,35142,35144,35147,35149,35152,35154,35157,35159,35161,35163,35165,35168,35170,35172,35175,35177,35179],{"class":78,"line":35135},151,[76,35137,1701],{"class":119},[76,35139,123],{"class":90},[76,35141,5677],{"class":126},[76,35143,34498],{"class":119},[76,35145,35146],{"class":126},"train loss:",[76,35148,298],{"class":119},[76,35150,35151],{"class":82},":.4f",[76,35153,304],{"class":119},[76,35155,35156],{"class":126}," train acc:",[76,35158,298],{"class":119},[76,35160,35151],{"class":82},[76,35162,304],{"class":119},[76,35164,5677],{"class":126},[76,35166,35167],{"class":90},".format(epoch,train_loss_all[",[76,35169,666],{"class":82},[76,35171,669],{"class":119},[76,35173,35174],{"class":90},"],train_acc_all[",[76,35176,666],{"class":82},[76,35178,669],{"class":119},[76,35180,35181],{"class":90},"]))\n",[76,35183,35185,35187,35189,35191,35193,35196,35198,35200,35202,35205,35207,35209,35211,35213,35216,35218,35220,35223,35225,35227],{"class":78,"line":35184},152,[76,35186,1701],{"class":119},[76,35188,123],{"class":90},[76,35190,5677],{"class":126},[76,35192,34498],{"class":119},[76,35194,35195],{"class":126},"val loss:",[76,35197,298],{"class":119},[76,35199,35151],{"class":82},[76,35201,304],{"class":119},[76,35203,35204],{"class":126}," val acc:",[76,35206,298],{"class":119},[76,35208,35151],{"class":82},[76,35210,304],{"class":119},[76,35212,5677],{"class":126},[76,35214,35215],{"class":90},".format(epoch,val_loss_all[",[76,35217,666],{"class":82},[76,35219,669],{"class":119},[76,35221,35222],{"class":90},"],val_acc_all[",[76,35224,666],{"class":82},[76,35226,669],{"class":119},[76,35228,35181],{"class":90},[76,35230,35232],{"class":78,"line":35231},153,[76,35233,149],{"emptyLinePlaceholder":148},[76,35235,35237],{"class":78,"line":35236},154,[76,35238,35239],{"class":540},"        # 判断准确度--->保存最优模型\n",[76,35241,35243,35245,35248,35250,35252,35254,35256],{"class":78,"line":35242},155,[76,35244,4592],{"class":82},[76,35246,35247],{"class":90}," val_acc_all[",[76,35249,666],{"class":82},[76,35251,669],{"class":119},[76,35253,3196],{"class":90},[76,35255,1829],{"class":82},[76,35257,35258],{"class":90},"best_acc:\n",[76,35260,35262],{"class":78,"line":35261},156,[76,35263,35264],{"class":540},"            # 保存当前模型准确度\n",[76,35266,35268,35271,35273,35275,35278,35280,35282],{"class":78,"line":35267},157,[76,35269,35270],{"class":90},"            best_acc:",[76,35272,2311],{"class":119},[76,35274,370],{"class":82},[76,35276,35277],{"class":90},"val_acc_all[",[76,35279,666],{"class":82},[76,35281,669],{"class":119},[76,35283,35284],{"class":90},"]\n",[76,35286,35288],{"class":78,"line":35287},158,[76,35289,35290],{"class":540},"            # 保存当前的准确度\n",[76,35292,35294],{"class":78,"line":35293},159,[76,35295,35296],{"class":540},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[76,35298,35300,35303,35305],{"class":78,"line":35299},160,[76,35301,35302],{"class":90},"            best_model_wts",[76,35304,370],{"class":82},[76,35306,34354],{"class":90},[76,35308,35310],{"class":78,"line":35309},161,[76,35311,149],{"emptyLinePlaceholder":148},[76,35313,35315],{"class":78,"line":35314},162,[76,35316,35317],{"class":540},"        # 计算耗时\n",[76,35319,35321,35324,35326,35329,35331],{"class":78,"line":35320},163,[76,35322,35323],{"class":90},"        time_use",[76,35325,370],{"class":82},[76,35327,35328],{"class":90},"time.time()",[76,35330,666],{"class":82},[76,35332,35333],{"class":90},"since\n",[76,35335,35337,35339,35341,35344,35346,35349,35351,35353,35355,35357,35359,35362,35365,35368,35370,35373,35375,35377],{"class":78,"line":35336},164,[76,35338,1701],{"class":119},[76,35340,123],{"class":90},[76,35342,35343],{"class":126},"'训练和验证耗费的时间",[76,35345,298],{"class":119},[76,35347,35348],{"class":82},":.0f",[76,35350,304],{"class":119},[76,35352,2805],{"class":126},[76,35354,298],{"class":119},[76,35356,35348],{"class":82},[76,35358,304],{"class":119},[76,35360,35361],{"class":126},"s'",[76,35363,35364],{"class":90},".format(time_use",[76,35366,35367],{"class":82},"\u002F\u002F",[76,35369,3164],{"class":119},[76,35371,35372],{"class":90},",time_use",[76,35374,2592],{"class":82},[76,35376,3164],{"class":119},[76,35378,656],{"class":90},[76,35380,35382],{"class":78,"line":35381},165,[76,35383,35384],{"class":540},"    # 选择最优参数\n",[76,35386,35388],{"class":78,"line":35387},166,[76,35389,35390],{"class":540},"    # 加载最高准确率下的模型参数\n",[76,35392,35394],{"class":78,"line":35393},167,[76,35395,35396],{"class":540},"    # model.load_state_dict(best_model_wts)\n",[76,35398,35400,35403,35406],{"class":78,"line":35399},168,[76,35401,35402],{"class":90},"    torch.save(model.state_dict(best_model_wts), ",[76,35404,35405],{"class":126},"'.\u002Fbest_model.pth'",[76,35407,130],{"class":90},[76,35409,35411],{"class":78,"line":35410},169,[76,35412,35413],{"class":540},"    # 或者写成\n",[76,35415,35417],{"class":78,"line":35416},170,[76,35418,35419],{"class":540},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[76,35421,35423],{"class":78,"line":35422},171,[76,35424,35425],{"class":540},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[76,35427,35429,35432,35434,35437,35440,35442],{"class":78,"line":35428},172,[76,35430,35431],{"class":90},"    train_process",[76,35433,370],{"class":82},[76,35435,35436],{"class":90},"pd.DataFrame(",[76,35438,35439],{"class":7296},"data",[76,35441,370],{"class":82},[76,35443,3666],{"class":90},[76,35445,35447,35450,35452,35455],{"class":78,"line":35446},173,[76,35448,35449],{"class":126},"        \"epoch\"",[76,35451,3117],{"class":90},[76,35453,35454],{"class":119},"range",[76,35456,35457],{"class":90},"(num_epochs),\n",[76,35459,35461,35464],{"class":78,"line":35460},174,[76,35462,35463],{"class":126},"        \"train_loss_all\"",[76,35465,35466],{"class":90},":train_loss_all,\n",[76,35468,35470,35473],{"class":78,"line":35469},175,[76,35471,35472],{"class":126},"        \"val_loss_all\"",[76,35474,35475],{"class":90},":val_loss_all,\n",[76,35477,35479,35482],{"class":78,"line":35478},176,[76,35480,35481],{"class":126},"        \"train_acc_all\"",[76,35483,35484],{"class":90},":train_acc_all,\n",[76,35486,35488,35491],{"class":78,"line":35487},177,[76,35489,35490],{"class":126},"        \"val_acc_all\"",[76,35492,35493],{"class":90},":val_acc_all\n",[76,35495,35497],{"class":78,"line":35496},178,[76,35498,35499],{"class":90},"    })\n",[76,35501,35503],{"class":78,"line":35502},179,[76,35504,35505],{"class":540},"    # 返回训练保存的过程\n",[76,35507,35509,35511],{"class":78,"line":35508},180,[76,35510,441],{"class":82},[76,35512,35513],{"class":90}," train_process\n",[76,35515,35517],{"class":78,"line":35516},181,[76,35518,149],{"emptyLinePlaceholder":148},[76,35520,35522],{"class":78,"line":35521},182,[76,35523,35524],{"class":540},"# 将loss值和精度按照图片的形式展示出来\n",[76,35526,35528,35530,35533],{"class":78,"line":35527},183,[76,35529,83],{"class":82},[76,35531,35532],{"class":86}," matplot_acc_loss",[76,35534,35535],{"class":90},"(train_process):\n",[76,35537,35539],{"class":78,"line":35538},184,[76,35540,35541],{"class":540},"    # 设置图的大小\n",[76,35543,35545,35548,35550,35552,35554,35556,35558,35560],{"class":78,"line":35544},185,[76,35546,35547],{"class":90},"    plt.figure(",[76,35549,33735],{"class":7296},[76,35551,370],{"class":82},[76,35553,123],{"class":90},[76,35555,2760],{"class":119},[76,35557,2642],{"class":90},[76,35559,2557],{"class":119},[76,35561,656],{"class":90},[76,35563,35565],{"class":78,"line":35564},186,[76,35566,35567],{"class":540},"    # 设置图中有几张图\n",[76,35569,35571],{"class":78,"line":35570},187,[76,35572,35573],{"class":540},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[76,35575,35577],{"class":78,"line":35576},188,[76,35578,35579],{"class":540},"    # ①loss图\n",[76,35581,35583,35585,35587,35589,35591,35593,35595],{"class":78,"line":35582},189,[76,35584,33769],{"class":90},[76,35586,669],{"class":119},[76,35588,2642],{"class":90},[76,35590,2345],{"class":119},[76,35592,2642],{"class":90},[76,35594,669],{"class":119},[76,35596,130],{"class":90},[76,35598,35600],{"class":78,"line":35599},190,[76,35601,35602],{"class":540},"    # 补充:\n",[76,35604,35606],{"class":78,"line":35605},191,[76,35607,35608],{"class":540},"    # plt.subplot(nrows, ncols, index)\n",[76,35610,35612],{"class":78,"line":35611},192,[76,35613,35614],{"class":540},"    # nrows：行数\n",[76,35616,35618],{"class":78,"line":35617},193,[76,35619,35620],{"class":540},"    # ncols：列数\n",[76,35622,35624],{"class":78,"line":35623},194,[76,35625,35626],{"class":540},"    # index：目前选中第几个子图（从1开始）\n",[76,35628,35630,35633,35636,35639,35642,35644,35647,35649,35652],{"class":78,"line":35629},195,[76,35631,35632],{"class":90},"    plt.plot(train_process[",[76,35634,35635],{"class":126},"\"epoch\"",[76,35637,35638],{"class":90},"],train_process.train_loss_all,",[76,35640,35641],{"class":126},"'ro-'",[76,35643,2642],{"class":90},[76,35645,35646],{"class":7296},"label",[76,35648,370],{"class":82},[76,35650,35651],{"class":126},"'train loss'",[76,35653,130],{"class":90},[76,35655,35657,35659,35661,35664,35667,35669,35671,35673,35676],{"class":78,"line":35656},196,[76,35658,35632],{"class":90},[76,35660,35635],{"class":126},[76,35662,35663],{"class":90},"],train_process.val_loss_all,",[76,35665,35666],{"class":126},"'bs--'",[76,35668,2642],{"class":90},[76,35670,35646],{"class":7296},[76,35672,370],{"class":82},[76,35674,35675],{"class":126},"'val loss'",[76,35677,130],{"class":90},[76,35679,35681],{"class":78,"line":35680},197,[76,35682,35683],{"class":540},"    # 添加一个图例\n",[76,35685,35687],{"class":78,"line":35686},198,[76,35688,35689],{"class":90},"    plt.legend()\n",[76,35691,35693],{"class":78,"line":35692},199,[76,35694,35695],{"class":540},"    # 给轴添加标签\n",[76,35697,35699,35702,35705],{"class":78,"line":35698},200,[76,35700,35701],{"class":90},"    plt.xlabel(",[76,35703,35704],{"class":126},"'epoch'",[76,35706,130],{"class":90},[76,35708,35710,35713,35716],{"class":78,"line":35709},201,[76,35711,35712],{"class":90},"    plt.ylabel(",[76,35714,35715],{"class":126},"'loss'",[76,35717,130],{"class":90},[76,35719,35721],{"class":78,"line":35720},202,[76,35722,35723],{"class":540},"    # ②准确度图\n",[76,35725,35727,35729,35731,35733,35735,35737,35739],{"class":78,"line":35726},203,[76,35728,33769],{"class":90},[76,35730,669],{"class":119},[76,35732,2642],{"class":90},[76,35734,2345],{"class":119},[76,35736,2642],{"class":90},[76,35738,2345],{"class":119},[76,35740,130],{"class":90},[76,35742,35744,35746,35748,35751,35753,35755,35757,35759,35762],{"class":78,"line":35743},204,[76,35745,35632],{"class":90},[76,35747,35635],{"class":126},[76,35749,35750],{"class":90},"],train_process.train_acc_all,",[76,35752,35641],{"class":126},[76,35754,2642],{"class":90},[76,35756,35646],{"class":7296},[76,35758,370],{"class":82},[76,35760,35761],{"class":126},"'train acc'",[76,35763,130],{"class":90},[76,35765,35767,35769,35771,35774,35776,35778,35780,35782,35785],{"class":78,"line":35766},205,[76,35768,35632],{"class":90},[76,35770,35635],{"class":126},[76,35772,35773],{"class":90},"],train_process.val_acc_all,",[76,35775,35666],{"class":126},[76,35777,2642],{"class":90},[76,35779,35646],{"class":7296},[76,35781,370],{"class":82},[76,35783,35784],{"class":126},"'val acc'",[76,35786,130],{"class":90},[76,35788,35790],{"class":78,"line":35789},206,[76,35791,35792],{"class":540},"    # 添加图例\n",[76,35794,35796],{"class":78,"line":35795},207,[76,35797,35689],{"class":90},[76,35799,35801,35803,35805],{"class":78,"line":35800},208,[76,35802,35701],{"class":90},[76,35804,35635],{"class":126},[76,35806,130],{"class":90},[76,35808,35810,35812,35815],{"class":78,"line":35809},209,[76,35811,35712],{"class":90},[76,35813,35814],{"class":126},"\"acc\"",[76,35816,130],{"class":90},[76,35818,35820],{"class":78,"line":35819},210,[76,35821,35822],{"class":90},"    plt.show()\n",[76,35824,35826],{"class":78,"line":35825},211,[76,35827,149],{"emptyLinePlaceholder":148},[76,35829,35831],{"class":78,"line":35830},212,[76,35832,35833],{"class":540},"# 正式开始训练:\n",[76,35835,35837,35839,35841,35843,35845],{"class":78,"line":35836},213,[76,35838,723],{"class":82},[76,35840,33264],{"class":119},[76,35842,1250],{"class":82},[76,35844,33269],{"class":126},[76,35846,590],{"class":90},[76,35848,35850],{"class":78,"line":35849},214,[76,35851,35852],{"class":540},"    # 将模型实例化\n",[76,35854,35856,35859,35861],{"class":78,"line":35855},215,[76,35857,35858],{"class":90},"    LeNet",[76,35860,370],{"class":82},[76,35862,35863],{"class":90},"LeNet()\n",[76,35865,35867,35870,35872],{"class":78,"line":35866},216,[76,35868,35869],{"class":90},"    train_dataloader,val_dataloader",[76,35871,370],{"class":82},[76,35873,35874],{"class":90},"train_val_data_process()\n",[76,35876,35878,35880,35882,35885,35888,35890,35892],{"class":78,"line":35877},217,[76,35879,35431],{"class":90},[76,35881,370],{"class":82},[76,35883,35884],{"class":90},"train_model_process(LeNet,train_dataloader,val_dataloader,",[76,35886,35887],{"class":7296},"num_epochs",[76,35889,370],{"class":82},[76,35891,408],{"class":119},[76,35893,130],{"class":90},[76,35895,35897],{"class":78,"line":35896},218,[76,35898,35899],{"class":90},"    matplot_acc_loss(train_process)\n",[19,35901,35902],{},"画图的补充点学习：",[19,35904,35905],{},[3583,35906],{"alt":71,"src":35907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[26,35909,35910],{"start":133},[29,35911,35912],{},"测试",[66,35914,35916],{"className":68,"code":35915,"language":70,"meta":71,"style":71},"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",[73,35917,35918,35924,35934,35946,35956,35961,35971,35981,35985,35990,35999,36016,36028,36045,36056,36072,36077,36088,36099,36110,36117,36121,36126,36136,36141,36158,36166,36170,36175,36184,36193,36197,36202,36207,36212,36219,36224,36236,36246,36256,36261,36265,36270,36279,36284,36300,36305,36310,36315,36329,36334,36348,36352,36357,36372,36377,36389,36393,36398,36410,36415,36423,36428,36433,36443,36448,36457,36462,36467,36471,36476,36481,36497,36505,36510,36515,36574,36580,36585,36596,36604,36612,36616,36621,36625,36630,36638,36643,36659,36664,36674,36684],{"__ignoreMap":71},[76,35919,35920,35922],{"class":78,"line":79},[76,35921,32438],{"class":82},[76,35923,32441],{"class":90},[76,35925,35926,35928,35930,35932],{"class":78,"line":94},[76,35927,32438],{"class":82},[76,35929,33458],{"class":90},[76,35931,33426],{"class":82},[76,35933,33463],{"class":90},[76,35935,35936,35938,35941,35943],{"class":78,"line":133},[76,35937,32781],{"class":82},[76,35939,35940],{"class":90}," jupyter_client.consoleapp ",[76,35942,32438],{"class":82},[76,35944,35945],{"class":90}," classes\n",[76,35947,35948,35950,35952,35954],{"class":78,"line":145},[76,35949,32781],{"class":82},[76,35951,33441],{"class":90},[76,35953,32438],{"class":82},[76,35955,33446],{"class":90},[76,35957,35958],{"class":78,"line":152},[76,35959,35960],{"class":540},"# 导入数据集\n",[76,35962,35963,35965,35967,35969],{"class":78,"line":157},[76,35964,32781],{"class":82},[76,35966,33411],{"class":90},[76,35968,32438],{"class":82},[76,35970,33416],{"class":90},[76,35972,35973,35975,35977,35979],{"class":78,"line":246},[76,35974,32781],{"class":82},[76,35976,33956],{"class":90},[76,35978,32438],{"class":82},[76,35980,33961],{"class":90},[76,35982,35983],{"class":78,"line":251},[76,35984,149],{"emptyLinePlaceholder":148},[76,35986,35987],{"class":78,"line":257},[76,35988,35989],{"class":540},"# 测试数据处理\n",[76,35991,35992,35994,35997],{"class":78,"line":641},[76,35993,83],{"class":82},[76,35995,35996],{"class":86}," test_data_process",[76,35998,91],{"class":90},[76,36000,36001,36004,36006,36008,36010,36012,36014],{"class":78,"line":646},[76,36002,36003],{"class":90},"    test_data",[76,36005,370],{"class":82},[76,36007,33498],{"class":90},[76,36009,33501],{"class":7296},[76,36011,370],{"class":82},[76,36013,33506],{"class":126},[76,36015,33509],{"class":90},[76,36017,36018,36021,36023,36026],{"class":78,"line":659},[76,36019,36020],{"class":7296},"                           train",[76,36022,370],{"class":82},[76,36024,36025],{"class":119},"False",[76,36027,33509],{"class":90},[76,36029,36030,36033,36035,36037,36039,36041,36043],{"class":78,"line":1608},[76,36031,36032],{"class":7296},"                           transform",[76,36034,370],{"class":82},[76,36036,33536],{"class":90},[76,36038,33539],{"class":7296},[76,36040,370],{"class":82},[76,36042,3158],{"class":119},[76,36044,33547],{"class":90},[76,36046,36047,36050,36052,36054],{"class":78,"line":1632},[76,36048,36049],{"class":7296},"                           download",[76,36051,370],{"class":82},[76,36053,33519],{"class":119},[76,36055,130],{"class":90},[76,36057,36058,36061,36063,36065,36067,36069],{"class":78,"line":1637},[76,36059,36060],{"class":90},"    test_dataloader",[76,36062,370],{"class":82},[76,36064,33577],{"class":90},[76,36066,33580],{"class":7296},[76,36068,370],{"class":82},[76,36070,36071],{"class":90},"test_data,\n",[76,36073,36074],{"class":78,"line":1642},[76,36075,36076],{"class":540},"                                    # 这里是一张一张进行测试\n",[76,36078,36079,36082,36084,36086],{"class":78,"line":1652},[76,36080,36081],{"class":7296},"                                    batch_size",[76,36083,370],{"class":82},[76,36085,669],{"class":119},[76,36087,33509],{"class":90},[76,36089,36090,36093,36095,36097],{"class":78,"line":1660},[76,36091,36092],{"class":7296},"                                    shuffle",[76,36094,370],{"class":82},[76,36096,33519],{"class":119},[76,36098,33509],{"class":90},[76,36100,36101,36104,36106,36108],{"class":78,"line":1683},[76,36102,36103],{"class":7296},"                                    num_workers",[76,36105,370],{"class":82},[76,36107,1294],{"class":119},[76,36109,130],{"class":90},[76,36111,36112,36114],{"class":78,"line":1698},[76,36113,441],{"class":82},[76,36115,36116],{"class":90}," test_dataloader\n",[76,36118,36119],{"class":78,"line":1711},[76,36120,149],{"emptyLinePlaceholder":148},[76,36122,36123],{"class":78,"line":1717},[76,36124,36125],{"class":540},"# 定义模型测试函数\n",[76,36127,36128,36130,36133],{"class":78,"line":1728},[76,36129,83],{"class":82},[76,36131,36132],{"class":86}," test_model_process",[76,36134,36135],{"class":90},"(model,test_dataloader):\n",[76,36137,36138],{"class":78,"line":1740},[76,36139,36140],{"class":540},"    # 将模型放到设备当中，先进行判断\n",[76,36142,36143,36145,36147,36149,36151,36153,36155],{"class":78,"line":1746},[76,36144,33281],{"class":90},[76,36146,370],{"class":82},[76,36148,33288],{"class":126},[76,36150,3811],{"class":82},[76,36152,33293],{"class":90},[76,36154,1328],{"class":82},[76,36156,36157],{"class":126}," \"cpu\"\n",[76,36159,36160,36162,36164],{"class":78,"line":1751},[76,36161,33333],{"class":90},[76,36163,370],{"class":82},[76,36165,34329],{"class":90},[76,36167,36168],{"class":78,"line":1756},[76,36169,149],{"emptyLinePlaceholder":148},[76,36171,36172],{"class":78,"line":1766},[76,36173,36174],{"class":540},"    # 设置初始化参数\n",[76,36176,36177,36180,36182],{"class":78,"line":1773},[76,36178,36179],{"class":90},"    test_corrects",[76,36181,370],{"class":82},[76,36183,34382],{"class":119},[76,36185,36186,36189,36191],{"class":78,"line":1793},[76,36187,36188],{"class":90},"    test_num",[76,36190,370],{"class":82},[76,36192,5172],{"class":119},[76,36194,36195],{"class":78,"line":1806},[76,36196,149],{"emptyLinePlaceholder":148},[76,36198,36199],{"class":78,"line":1817},[76,36200,36201],{"class":540},"    # 进行模型测试\n",[76,36203,36204],{"class":78,"line":1822},[76,36205,36206],{"class":540},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[76,36208,36209],{"class":78,"line":1835},[76,36210,36211],{"class":540},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[76,36213,36214,36217],{"class":78,"line":1847},[76,36215,36216],{"class":82},"    with",[76,36218,34922],{"class":90},[76,36220,36221],{"class":78,"line":1852},[76,36222,36223],{"class":540},"        # 从数据中进行\n",[76,36225,36226,36228,36231,36233],{"class":78,"line":1862},[76,36227,5488],{"class":82},[76,36229,36230],{"class":90}," test_data_x,test_data_y ",[76,36232,1475],{"class":82},[76,36234,36235],{"class":90}," test_dataloader:\n",[76,36237,36238,36241,36243],{"class":78,"line":1874},[76,36239,36240],{"class":90},"            test_data_x",[76,36242,370],{"class":82},[76,36244,36245],{"class":90},"test_data_x.to(device)\n",[76,36247,36248,36251,36253],{"class":78,"line":1879},[76,36249,36250],{"class":90},"            test_data_y",[76,36252,370],{"class":82},[76,36254,36255],{"class":90},"test_data_y.to(device)\n",[76,36257,36258],{"class":78,"line":1884},[76,36259,36260],{"class":540},"            # 设置为验证模式\n",[76,36262,36263],{"class":78,"line":1889},[76,36264,34913],{"class":90},[76,36266,36267],{"class":78,"line":1900},[76,36268,36269],{"class":540},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[76,36271,36272,36274,36276],{"class":78,"line":1906},[76,36273,34698],{"class":90},[76,36275,370],{"class":82},[76,36277,36278],{"class":90},"model(test_data_x)\n",[76,36280,36281],{"class":78,"line":1924},[76,36282,36283],{"class":540},"            # 查找每一行中最大值对应的下标\n",[76,36285,36286,36288,36290,36292,36294,36296,36298],{"class":78,"line":1929},[76,36287,34715],{"class":90},[76,36289,370],{"class":82},[76,36291,34720],{"class":90},[76,36293,34723],{"class":7296},[76,36295,370],{"class":82},[76,36297,669],{"class":119},[76,36299,130],{"class":90},[76,36301,36302],{"class":78,"line":1944},[76,36303,36304],{"class":540},"            # 计算正确率\n",[76,36306,36307],{"class":78,"line":1950},[76,36308,36309],{"class":540},"            # .data表示是一个不带梯度信息的tensor\n",[76,36311,36312],{"class":78,"line":1965},[76,36313,36314],{"class":540},"            # 如果预测正确，则准确度test_corrects加1\n",[76,36316,36317,36320,36322,36324,36326],{"class":78,"line":1971},[76,36318,36319],{"class":90},"            test_corrects",[76,36321,1060],{"class":82},[76,36323,34825],{"class":90},[76,36325,1250],{"class":82},[76,36327,36328],{"class":90},"test_data_y.data)\n",[76,36330,36331],{"class":78,"line":1985},[76,36332,36333],{"class":540},"            # 将所有的测试样本进行累计\n",[76,36335,36336,36339,36341,36344,36346],{"class":78,"line":1991},[76,36337,36338],{"class":90},"            test_num",[76,36340,1060],{"class":82},[76,36342,36343],{"class":90},"test_data_x.size(",[76,36345,1294],{"class":119},[76,36347,130],{"class":90},[76,36349,36350],{"class":78,"line":2005},[76,36351,149],{"emptyLinePlaceholder":148},[76,36353,36354],{"class":78,"line":2017},[76,36355,36356],{"class":540},"        # 计算准确度\n",[76,36358,36359,36362,36364,36367,36369],{"class":78,"line":2023},[76,36360,36361],{"class":90},"        test_acc",[76,36363,370],{"class":82},[76,36365,36366],{"class":90},"test_corrects.double().item()",[76,36368,795],{"class":82},[76,36370,36371],{"class":90},"test_num\n",[76,36373,36374],{"class":78,"line":2031},[76,36375,36376],{"class":540},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[76,36378,36379,36381,36383,36386],{"class":78,"line":11880},[76,36380,1701],{"class":119},[76,36382,123],{"class":90},[76,36384,36385],{"class":126},"\"测试的准确率：\"",[76,36387,36388],{"class":90},",test_acc)\n",[76,36390,36391],{"class":78,"line":11901},[76,36392,149],{"emptyLinePlaceholder":148},[76,36394,36395],{"class":78,"line":11907},[76,36396,36397],{"class":540},"# 实现模型的测试功能\n",[76,36399,36400,36402,36404,36406,36408],{"class":78,"line":11921},[76,36401,723],{"class":82},[76,36403,33264],{"class":119},[76,36405,1250],{"class":82},[76,36407,33269],{"class":126},[76,36409,590],{"class":90},[76,36411,36412],{"class":78,"line":11927},[76,36413,36414],{"class":540},"    # 加载模型\n",[76,36416,36417,36419,36421],{"class":78,"line":11954},[76,36418,33333],{"class":90},[76,36420,370],{"class":82},[76,36422,35863],{"class":90},[76,36424,36425],{"class":78,"line":11963},[76,36426,36427],{"class":540},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[76,36429,36430],{"class":78,"line":11969},[76,36431,36432],{"class":540},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[76,36434,36435,36438,36441],{"class":78,"line":11977},[76,36436,36437],{"class":90},"    model.load_state_dict(torch.load(",[76,36439,36440],{"class":126},"'best_model.pth'",[76,36442,656],{"class":90},[76,36444,36445],{"class":78,"line":11982},[76,36446,36447],{"class":540},"    # 数据加载\n",[76,36449,36450,36452,36454],{"class":78,"line":18654},[76,36451,36060],{"class":90},[76,36453,370],{"class":82},[76,36455,36456],{"class":90},"test_data_process()\n",[76,36458,36459],{"class":78,"line":18660},[76,36460,36461],{"class":540},"    # 加载模型测试的函数\n",[76,36463,36464],{"class":78,"line":18683},[76,36465,36466],{"class":90},"    test_model_process(model,test_dataloader)\n",[76,36468,36469],{"class":78,"line":18689},[76,36470,149],{"emptyLinePlaceholder":148},[76,36472,36473],{"class":78,"line":18712},[76,36474,36475],{"class":540},"    # 验证集推理实现：\n",[76,36477,36478],{"class":78,"line":18726},[76,36479,36480],{"class":540},"    # 加载数据加载的更详细一些\n",[76,36482,36483,36485,36487,36489,36491,36493,36495],{"class":78,"line":18746},[76,36484,33281],{"class":90},[76,36486,370],{"class":82},[76,36488,33288],{"class":126},[76,36490,3811],{"class":82},[76,36492,33293],{"class":90},[76,36494,1328],{"class":82},[76,36496,36157],{"class":126},[76,36498,36499,36501,36503],{"class":78,"line":18752},[76,36500,33333],{"class":90},[76,36502,370],{"class":82},[76,36504,34329],{"class":90},[76,36506,36507],{"class":78,"line":18763},[76,36508,36509],{"class":540},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[76,36511,36512],{"class":78,"line":18786},[76,36513,36514],{"class":540},"    # 顺序不可改变\n",[76,36516,36517,36520,36522,36524,36527,36529,36532,36534,36537,36539,36542,36544,36547,36549,36552,36554,36557,36559,36562,36564,36567,36569,36572],{"class":78,"line":18808},[76,36518,36519],{"class":90},"    classes",[76,36521,370],{"class":82},[76,36523,3148],{"class":90},[76,36525,36526],{"class":126},"'T-shirt\u002Ftop'",[76,36528,2642],{"class":90},[76,36530,36531],{"class":126},"'Trouser'",[76,36533,2642],{"class":90},[76,36535,36536],{"class":126},"'Pullover'",[76,36538,2642],{"class":90},[76,36540,36541],{"class":126},"'Dress'",[76,36543,2642],{"class":90},[76,36545,36546],{"class":126},"'Coat'",[76,36548,2642],{"class":90},[76,36550,36551],{"class":126},"'Sandal'",[76,36553,2642],{"class":90},[76,36555,36556],{"class":126},"'Shirt'",[76,36558,2642],{"class":90},[76,36560,36561],{"class":126},"'Sneaker'",[76,36563,2642],{"class":90},[76,36565,36566],{"class":126},"'Bag'",[76,36568,2642],{"class":90},[76,36570,36571],{"class":126},"'Ankle boot'",[76,36573,35284],{"class":90},[76,36575,36576,36578],{"class":78,"line":18813},[76,36577,36216],{"class":82},[76,36579,34922],{"class":90},[76,36581,36582],{"class":78,"line":18819},[76,36583,36584],{"class":540},"        # 将数据和标签都放到设备当中\n",[76,36586,36587,36589,36592,36594],{"class":78,"line":18833},[76,36588,5488],{"class":82},[76,36590,36591],{"class":90}," b_x,b_y ",[76,36593,1475],{"class":82},[76,36595,36235],{"class":90},[76,36597,36598,36600,36602],{"class":78,"line":18846},[76,36599,34648],{"class":90},[76,36601,370],{"class":82},[76,36603,34653],{"class":90},[76,36605,36606,36608,36610],{"class":78,"line":18851},[76,36607,34663],{"class":90},[76,36609,370],{"class":82},[76,36611,34668],{"class":90},[76,36613,36614],{"class":78,"line":18865},[76,36615,149],{"emptyLinePlaceholder":148},[76,36617,36618],{"class":78,"line":18870},[76,36619,36620],{"class":540},"            # 设置模型为验证模式\n",[76,36622,36623],{"class":78,"line":18876},[76,36624,34913],{"class":90},[76,36626,36627],{"class":78,"line":18881},[76,36628,36629],{"class":540},"            # 模型推理结果\n",[76,36631,36632,36634,36636],{"class":78,"line":18895},[76,36633,34698],{"class":90},[76,36635,370],{"class":82},[76,36637,34703],{"class":90},[76,36639,36640],{"class":78,"line":18900},[76,36641,36642],{"class":540},"            # 获取最大下标，最大下标就是类别号\n",[76,36644,36645,36647,36649,36651,36653,36655,36657],{"class":78,"line":18905},[76,36646,34715],{"class":90},[76,36648,370],{"class":82},[76,36650,34720],{"class":90},[76,36652,34723],{"class":7296},[76,36654,370],{"class":82},[76,36656,669],{"class":119},[76,36658,130],{"class":90},[76,36660,36661],{"class":78,"line":18919},[76,36662,36663],{"class":540},"            # 取出张量中的数值\n",[76,36665,36666,36669,36671],{"class":78,"line":18931},[76,36667,36668],{"class":90},"            result",[76,36670,370],{"class":82},[76,36672,36673],{"class":90},"pre_lab.item()\n",[76,36675,36676,36679,36681],{"class":78,"line":18936},[76,36677,36678],{"class":90},"            label",[76,36680,370],{"class":82},[76,36682,36683],{"class":90},"b_y.item()\n",[76,36685,36686,36689,36691,36694,36697,36700,36702,36705],{"class":78,"line":18949},[76,36687,36688],{"class":119},"            print",[76,36690,123],{"class":90},[76,36692,36693],{"class":126},"\"预测值：\"",[76,36695,36696],{"class":90},",classes[result],",[76,36698,36699],{"class":126},"\"------\"",[76,36701,2642],{"class":90},[76,36703,36704],{"class":126},"\"真实值：\"",[76,36706,36707],{"class":90},",classes[label])\n",[19,36709,36710],{},"（2）AlexNet",[26,36712,36713],{},[29,36714,36715],{},"神经网络构建",[66,36717,36719],{"className":68,"code":36718,"language":70,"meta":71,"style":71},"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",[73,36720,36721,36727,36737,36747,36759,36763,36780,36788,36803,36815,36857,36884,36927,36953,36997,37040,37083,37110,37114,37124,37129,37157,37176,37195,37199,37204,37212,37227,37237,37251,37261,37276,37291,37306,37317,37321,37326,37336,37351,37356,37370,37385,37397,37402,37413,37418,37424,37429,37441,37461,37466,37475],{"__ignoreMap":71},[76,36722,36723,36725],{"class":78,"line":79},[76,36724,32438],{"class":82},[76,36726,32441],{"class":90},[76,36728,36729,36731,36733,36735],{"class":78,"line":94},[76,36730,32781],{"class":82},[76,36732,32784],{"class":90},[76,36734,32438],{"class":82},[76,36736,32789],{"class":90},[76,36738,36739,36741,36743,36745],{"class":78,"line":133},[76,36740,32781],{"class":82},[76,36742,32801],{"class":90},[76,36744,32438],{"class":82},[76,36746,32806],{"class":90},[76,36748,36749,36751,36754,36756],{"class":78,"line":145},[76,36750,32438],{"class":82},[76,36752,36753],{"class":90}," torch.nn.functional ",[76,36755,33426],{"class":82},[76,36757,36758],{"class":90}," F\n",[76,36760,36761],{"class":78,"line":152},[76,36762,149],{"emptyLinePlaceholder":148},[76,36764,36765,36767,36770,36772,36774,36776,36778],{"class":78,"line":157},[76,36766,16747],{"class":82},[76,36768,36769],{"class":86}," AlexNet",[76,36771,123],{"class":90},[76,36773,32822],{"class":86},[76,36775,2819],{"class":90},[76,36777,32827],{"class":86},[76,36779,32830],{"class":90},[76,36781,36782,36784,36786],{"class":78,"line":246},[76,36783,32845],{"class":82},[76,36785,32848],{"class":119},[76,36787,32851],{"class":90},[76,36789,36790,36792,36795,36797,36799,36801],{"class":78,"line":251},[76,36791,32861],{"class":119},[76,36793,36794],{"class":90},"(AlexNet,",[76,36796,32867],{"class":119},[76,36798,32870],{"class":90},[76,36800,32873],{"class":119},[76,36802,4072],{"class":90},[76,36804,36805,36807,36810,36812],{"class":78,"line":257},[76,36806,32889],{"class":119},[76,36808,36809],{"class":90},".ReLu",[76,36811,370],{"class":82},[76,36813,36814],{"class":90},"nn.ReLU()\n",[76,36816,36817,36819,36821,36823,36825,36827,36829,36831,36833,36835,36837,36839,36841,36843,36845,36847,36849,36851,36853,36855],{"class":78,"line":641},[76,36818,32889],{"class":119},[76,36820,32892],{"class":90},[76,36822,370],{"class":82},[76,36824,32897],{"class":90},[76,36826,32900],{"class":7296},[76,36828,370],{"class":82},[76,36830,669],{"class":119},[76,36832,2642],{"class":90},[76,36834,32909],{"class":7296},[76,36836,370],{"class":82},[76,36838,2475],{"class":119},[76,36840,2642],{"class":90},[76,36842,32918],{"class":7296},[76,36844,370],{"class":82},[76,36846,2735],{"class":119},[76,36848,2642],{"class":90},[76,36850,32973],{"class":7296},[76,36852,370],{"class":82},[76,36854,2557],{"class":119},[76,36856,130],{"class":90},[76,36858,36859,36861,36863,36865,36868,36870,36872,36874,36876,36878,36880,36882],{"class":78,"line":646},[76,36860,32889],{"class":119},[76,36862,32957],{"class":90},[76,36864,370],{"class":82},[76,36866,36867],{"class":90},"nn.MaxPool2d(",[76,36869,32918],{"class":7296},[76,36871,370],{"class":82},[76,36873,2339],{"class":119},[76,36875,2642],{"class":90},[76,36877,32973],{"class":7296},[76,36879,370],{"class":82},[76,36881,2345],{"class":119},[76,36883,130],{"class":90},[76,36885,36886,36888,36890,36892,36894,36896,36898,36900,36902,36904,36906,36909,36911,36913,36915,36917,36919,36921,36923,36925],{"class":78,"line":659},[76,36887,32889],{"class":119},[76,36889,32986],{"class":90},[76,36891,370],{"class":82},[76,36893,32897],{"class":90},[76,36895,32900],{"class":7296},[76,36897,370],{"class":82},[76,36899,2475],{"class":119},[76,36901,2642],{"class":90},[76,36903,32909],{"class":7296},[76,36905,370],{"class":82},[76,36907,36908],{"class":119},"256",[76,36910,2642],{"class":90},[76,36912,32918],{"class":7296},[76,36914,370],{"class":82},[76,36916,2583],{"class":119},[76,36918,2642],{"class":90},[76,36920,32927],{"class":7296},[76,36922,370],{"class":82},[76,36924,2345],{"class":119},[76,36926,130],{"class":90},[76,36928,36929,36931,36933,36935,36937,36939,36941,36943,36945,36947,36949,36951],{"class":78,"line":1608},[76,36930,32889],{"class":119},[76,36932,33021],{"class":90},[76,36934,370],{"class":82},[76,36936,36867],{"class":90},[76,36938,32918],{"class":7296},[76,36940,370],{"class":82},[76,36942,2339],{"class":119},[76,36944,2642],{"class":90},[76,36946,32973],{"class":7296},[76,36948,370],{"class":82},[76,36950,2345],{"class":119},[76,36952,130],{"class":90},[76,36954,36955,36957,36960,36962,36964,36966,36968,36970,36972,36974,36976,36979,36981,36983,36985,36987,36989,36991,36993,36995],{"class":78,"line":1632},[76,36956,32889],{"class":119},[76,36958,36959],{"class":90},".c5",[76,36961,370],{"class":82},[76,36963,32897],{"class":90},[76,36965,32900],{"class":7296},[76,36967,370],{"class":82},[76,36969,36908],{"class":119},[76,36971,2642],{"class":90},[76,36973,32909],{"class":7296},[76,36975,370],{"class":82},[76,36977,36978],{"class":119},"384",[76,36980,2642],{"class":90},[76,36982,32918],{"class":7296},[76,36984,370],{"class":82},[76,36986,2339],{"class":119},[76,36988,2642],{"class":90},[76,36990,32927],{"class":7296},[76,36992,370],{"class":82},[76,36994,669],{"class":119},[76,36996,130],{"class":90},[76,36998,36999,37001,37004,37006,37008,37010,37012,37014,37016,37018,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038],{"class":78,"line":1637},[76,37000,32889],{"class":119},[76,37002,37003],{"class":90},".c6",[76,37005,370],{"class":82},[76,37007,32897],{"class":90},[76,37009,32900],{"class":7296},[76,37011,370],{"class":82},[76,37013,36978],{"class":119},[76,37015,2642],{"class":90},[76,37017,32909],{"class":7296},[76,37019,370],{"class":82},[76,37021,36978],{"class":119},[76,37023,2642],{"class":90},[76,37025,32918],{"class":7296},[76,37027,370],{"class":82},[76,37029,2339],{"class":119},[76,37031,2642],{"class":90},[76,37033,32927],{"class":7296},[76,37035,370],{"class":82},[76,37037,669],{"class":119},[76,37039,130],{"class":90},[76,37041,37042,37044,37047,37049,37051,37053,37055,37057,37059,37061,37063,37065,37067,37069,37071,37073,37075,37077,37079,37081],{"class":78,"line":1642},[76,37043,32889],{"class":119},[76,37045,37046],{"class":90},".c7",[76,37048,370],{"class":82},[76,37050,32897],{"class":90},[76,37052,32900],{"class":7296},[76,37054,370],{"class":82},[76,37056,36978],{"class":119},[76,37058,2642],{"class":90},[76,37060,32909],{"class":7296},[76,37062,370],{"class":82},[76,37064,36908],{"class":119},[76,37066,2642],{"class":90},[76,37068,32918],{"class":7296},[76,37070,370],{"class":82},[76,37072,2339],{"class":119},[76,37074,2642],{"class":90},[76,37076,32927],{"class":7296},[76,37078,370],{"class":82},[76,37080,669],{"class":119},[76,37082,130],{"class":90},[76,37084,37085,37087,37090,37092,37094,37096,37098,37100,37102,37104,37106,37108],{"class":78,"line":1652},[76,37086,32889],{"class":119},[76,37088,37089],{"class":90},".s8",[76,37091,370],{"class":82},[76,37093,36867],{"class":90},[76,37095,32918],{"class":7296},[76,37097,370],{"class":82},[76,37099,2339],{"class":119},[76,37101,2642],{"class":90},[76,37103,32973],{"class":7296},[76,37105,370],{"class":82},[76,37107,2345],{"class":119},[76,37109,130],{"class":90},[76,37111,37112],{"class":78,"line":1660},[76,37113,33046],{"class":540},[76,37115,37116,37118,37120,37122],{"class":78,"line":1683},[76,37117,32889],{"class":119},[76,37119,33053],{"class":90},[76,37121,370],{"class":82},[76,37123,33058],{"class":90},[76,37125,37126],{"class":78,"line":1698},[76,37127,37128],{"class":540},"       # 定义全连接层\n",[76,37130,37131,37133,37136,37138,37140,37142,37144,37146,37148,37150,37152,37155],{"class":78,"line":1711},[76,37132,32889],{"class":119},[76,37134,37135],{"class":90},".f1",[76,37137,370],{"class":82},[76,37139,33075],{"class":90},[76,37141,2608],{"class":119},[76,37143,2718],{"class":82},[76,37145,2608],{"class":119},[76,37147,2718],{"class":82},[76,37149,36908],{"class":119},[76,37151,2642],{"class":90},[76,37153,37154],{"class":119},"4096",[76,37156,130],{"class":90},[76,37158,37159,37161,37164,37166,37168,37170,37172,37174],{"class":78,"line":1717},[76,37160,32889],{"class":119},[76,37162,37163],{"class":90},".f2",[76,37165,370],{"class":82},[76,37167,33075],{"class":90},[76,37169,37154],{"class":119},[76,37171,2642],{"class":90},[76,37173,37154],{"class":119},[76,37175,130],{"class":90},[76,37177,37178,37180,37183,37185,37187,37189,37191,37193],{"class":78,"line":1728},[76,37179,32889],{"class":119},[76,37181,37182],{"class":90},".f3",[76,37184,370],{"class":82},[76,37186,33075],{"class":90},[76,37188,37154],{"class":119},[76,37190,2642],{"class":90},[76,37192,402],{"class":119},[76,37194,130],{"class":90},[76,37196,37197],{"class":78,"line":1740},[76,37198,149],{"emptyLinePlaceholder":148},[76,37200,37201],{"class":78,"line":1746},[76,37202,37203],{"class":540},"    # 定义前向传播\n",[76,37205,37206,37208,37210],{"class":78,"line":1751},[76,37207,32845],{"class":82},[76,37209,33137],{"class":86},[76,37211,33140],{"class":90},[76,37213,37214,37216,37218,37220,37223,37225],{"class":78,"line":1756},[76,37215,33145],{"class":90},[76,37217,370],{"class":82},[76,37219,32867],{"class":119},[76,37221,37222],{"class":90},".ReLu(",[76,37224,32867],{"class":119},[76,37226,33157],{"class":90},[76,37228,37229,37231,37233,37235],{"class":78,"line":1766},[76,37230,33145],{"class":90},[76,37232,370],{"class":82},[76,37234,32867],{"class":119},[76,37236,33168],{"class":90},[76,37238,37239,37241,37243,37245,37247,37249],{"class":78,"line":1773},[76,37240,33145],{"class":90},[76,37242,370],{"class":82},[76,37244,32867],{"class":119},[76,37246,37222],{"class":90},[76,37248,32867],{"class":119},[76,37250,33183],{"class":90},[76,37252,37253,37255,37257,37259],{"class":78,"line":1793},[76,37254,33145],{"class":90},[76,37256,370],{"class":82},[76,37258,32867],{"class":119},[76,37260,33194],{"class":90},[76,37262,37263,37265,37267,37269,37271,37273],{"class":78,"line":1806},[76,37264,33145],{"class":90},[76,37266,370],{"class":82},[76,37268,32867],{"class":119},[76,37270,37222],{"class":90},[76,37272,32867],{"class":119},[76,37274,37275],{"class":90},".c5(x))\n",[76,37277,37278,37280,37282,37284,37286,37288],{"class":78,"line":1817},[76,37279,33145],{"class":90},[76,37281,370],{"class":82},[76,37283,32867],{"class":119},[76,37285,37222],{"class":90},[76,37287,32867],{"class":119},[76,37289,37290],{"class":90},".c6(x))\n",[76,37292,37293,37295,37297,37299,37301,37303],{"class":78,"line":1822},[76,37294,33145],{"class":90},[76,37296,370],{"class":82},[76,37298,32867],{"class":119},[76,37300,37222],{"class":90},[76,37302,32867],{"class":119},[76,37304,37305],{"class":90},".c7(x))\n",[76,37307,37308,37310,37312,37314],{"class":78,"line":1835},[76,37309,33145],{"class":90},[76,37311,370],{"class":82},[76,37313,32867],{"class":119},[76,37315,37316],{"class":90},".s8(x)\n",[76,37318,37319],{"class":78,"line":1847},[76,37320,149],{"emptyLinePlaceholder":148},[76,37322,37323],{"class":78,"line":1852},[76,37324,37325],{"class":540},"        # 展平加线性全连接层\n",[76,37327,37328,37330,37332,37334],{"class":78,"line":1862},[76,37329,33145],{"class":90},[76,37331,370],{"class":82},[76,37333,32867],{"class":119},[76,37335,33205],{"class":90},[76,37337,37338,37340,37342,37344,37346,37348],{"class":78,"line":1874},[76,37339,33145],{"class":90},[76,37341,370],{"class":82},[76,37343,32867],{"class":119},[76,37345,37222],{"class":90},[76,37347,32867],{"class":119},[76,37349,37350],{"class":90},".f1(x))\n",[76,37352,37353],{"class":78,"line":1879},[76,37354,37355],{"class":540},"        # 还需要dropout对神经元随机进行失活\n",[76,37357,37358,37360,37362,37365,37368],{"class":78,"line":1884},[76,37359,33145],{"class":90},[76,37361,370],{"class":82},[76,37363,37364],{"class":90},"F.dropout(x,",[76,37366,37367],{"class":119},"0.5",[76,37369,130],{"class":90},[76,37371,37372,37374,37376,37378,37380,37382],{"class":78,"line":1889},[76,37373,33145],{"class":90},[76,37375,370],{"class":82},[76,37377,32867],{"class":119},[76,37379,37222],{"class":90},[76,37381,32867],{"class":119},[76,37383,37384],{"class":90},".f2(x))\n",[76,37386,37387,37389,37391,37393,37395],{"class":78,"line":1900},[76,37388,33145],{"class":90},[76,37390,370],{"class":82},[76,37392,37364],{"class":90},[76,37394,37367],{"class":119},[76,37396,130],{"class":90},[76,37398,37399],{"class":78,"line":1906},[76,37400,37401],{"class":540},"        # 直接输出\n",[76,37403,37404,37406,37408,37410],{"class":78,"line":1924},[76,37405,33145],{"class":90},[76,37407,370],{"class":82},[76,37409,32867],{"class":119},[76,37411,37412],{"class":90},".f3(x)\n",[76,37414,37415],{"class":78,"line":1929},[76,37416,37417],{"class":540},"        # 前向传播输出\n",[76,37419,37420,37422],{"class":78,"line":1944},[76,37421,595],{"class":82},[76,37423,33253],{"class":90},[76,37425,37426],{"class":78,"line":1950},[76,37427,37428],{"class":540},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[76,37430,37431,37433,37435,37437,37439],{"class":78,"line":1965},[76,37432,723],{"class":82},[76,37434,33264],{"class":119},[76,37436,1250],{"class":82},[76,37438,33269],{"class":126},[76,37440,590],{"class":90},[76,37442,37443,37445,37447,37449,37451,37453,37455,37457,37459],{"class":78,"line":1971},[76,37444,33281],{"class":90},[76,37446,370],{"class":82},[76,37448,32496],{"class":90},[76,37450,33288],{"class":126},[76,37452,3811],{"class":82},[76,37454,33293],{"class":90},[76,37456,1328],{"class":82},[76,37458,32521],{"class":126},[76,37460,130],{"class":90},[76,37462,37463],{"class":78,"line":1985},[76,37464,37465],{"class":540},"    # 模型实例化，然后将实例化的模型放到设备中\n",[76,37467,37468,37470,37472],{"class":78,"line":1991},[76,37469,33333],{"class":90},[76,37471,370],{"class":82},[76,37473,37474],{"class":90},"AlexNet().to(device)\n",[76,37476,37477,37479,37481,37483,37485,37488,37490,37492],{"class":78,"line":2005},[76,37478,120],{"class":119},[76,37480,33345],{"class":90},[76,37482,669],{"class":119},[76,37484,2642],{"class":90},[76,37486,37487],{"class":119},"227",[76,37489,2642],{"class":90},[76,37491,37487],{"class":119},[76,37493,33358],{"class":90},[26,37495,37496],{"start":94},[29,37497,33371],{},[66,37499,37501],{"className":68,"code":37500,"language":70,"meta":71,"style":71},"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",[73,37502,37503,37509,37515,37525,37531,37541,37551,37561,37571,37581,37585,37596,37606,37610,37614,37618,37626,37638,37648,37664,37674,37706,37720,37730,37740,37744,37754,37768,37778,37788,37798,37804,37808,37812,37816,37820,37824,37832,37852,37856,37860,37864,37868,37872,37888,37892,37896,37904,37908,37912,37920,37924,37928,37932,37940,37944,37948,37952,37956,37964,37968,37976,37980,37988,37992,38000,38004,38012,38016,38020,38028,38032,38036,38040,38052,38076,38090,38094,38098,38102,38110,38114,38122,38126,38134,38138,38146,38150,38158,38162,38170,38174,38186,38190,38198,38202,38210,38214,38218,38222,38226,38234,38238,38254,38258,38266,38270,38274,38278,38282,38286,38290,38294,38310,38314,38326,38330,38342,38346,38358,38362,38370,38374,38382,38386,38390,38395,38401,38405,38414,38418,38435,38439,38448,38452,38470,38483,38488,38501,38505,38509,38517,38521,38525,38533,38537,38545,38549,38557,38561,38565,38607,38649,38653,38657,38673,38677,38693,38697,38701,38709,38713,38717,38729,38767,38772,38777,38786,38790,38804,38814,38820,38826,38832,38838,38842,38846,38852,38856,38860,38868,38872,38890,38894,38898,38902,38918,38922,38926,38930,38934,38938,38958,38978,38982,38986,38990,38998,39006,39010,39026,39046,39066,39070,39074,39082,39090,39094,39098,39102,39114,39118,39128,39136,39153],{"__ignoreMap":71},[76,37504,37505,37507],{"class":78,"line":79},[76,37506,32438],{"class":82},[76,37508,33864],{"class":90},[76,37510,37511,37513],{"class":78,"line":94},[76,37512,32438],{"class":82},[76,37514,33871],{"class":90},[76,37516,37517,37519,37521,37523],{"class":78,"line":133},[76,37518,32438],{"class":82},[76,37520,33882],{"class":90},[76,37522,33426],{"class":82},[76,37524,33887],{"class":90},[76,37526,37527,37529],{"class":78,"line":145},[76,37528,32438],{"class":82},[76,37530,32441],{"class":90},[76,37532,37533,37535,37537,37539],{"class":78,"line":152},[76,37534,32781],{"class":82},[76,37536,33458],{"class":90},[76,37538,32438],{"class":82},[76,37540,33904],{"class":90},[76,37542,37543,37545,37547,37549],{"class":78,"line":157},[76,37544,32781],{"class":82},[76,37546,33411],{"class":90},[76,37548,32438],{"class":82},[76,37550,33416],{"class":90},[76,37552,37553,37555,37557,37559],{"class":78,"line":246},[76,37554,32781],{"class":82},[76,37556,33441],{"class":90},[76,37558,32438],{"class":82},[76,37560,33446],{"class":90},[76,37562,37563,37565,37567,37569],{"class":78,"line":251},[76,37564,32438],{"class":82},[76,37566,33458],{"class":90},[76,37568,33426],{"class":82},[76,37570,33463],{"class":90},[76,37572,37573,37575,37577,37579],{"class":78,"line":257},[76,37574,32438],{"class":82},[76,37576,33475],{"class":90},[76,37578,33426],{"class":82},[76,37580,33480],{"class":90},[76,37582,37583],{"class":78,"line":641},[76,37584,33949],{"class":540},[76,37586,37587,37589,37591,37593],{"class":78,"line":646},[76,37588,32781],{"class":82},[76,37590,33956],{"class":90},[76,37592,32438],{"class":82},[76,37594,37595],{"class":90}," AlexNet\n",[76,37597,37598,37600,37602,37604],{"class":78,"line":659},[76,37599,32781],{"class":82},[76,37601,32784],{"class":90},[76,37603,32438],{"class":82},[76,37605,32789],{"class":90},[76,37607,37608],{"class":78,"line":1608},[76,37609,149],{"emptyLinePlaceholder":148},[76,37611,37612],{"class":78,"line":1632},[76,37613,149],{"emptyLinePlaceholder":148},[76,37615,37616],{"class":78,"line":1637},[76,37617,33984],{"class":540},[76,37619,37620,37622,37624],{"class":78,"line":1642},[76,37621,83],{"class":82},[76,37623,33991],{"class":86},[76,37625,91],{"class":90},[76,37627,37628,37630,37632,37634,37636],{"class":78,"line":1652},[76,37629,33998],{"class":90},[76,37631,370],{"class":82},[76,37633,33498],{"class":90},[76,37635,33506],{"class":126},[76,37637,33509],{"class":90},[76,37639,37640,37642,37644,37646],{"class":78,"line":1660},[76,37641,34011],{"class":7296},[76,37643,370],{"class":82},[76,37645,33519],{"class":119},[76,37647,33509],{"class":90},[76,37649,37650,37652,37654,37656,37658,37660,37662],{"class":78,"line":1683},[76,37651,34022],{"class":7296},[76,37653,370],{"class":82},[76,37655,33536],{"class":90},[76,37657,33539],{"class":7296},[76,37659,370],{"class":82},[76,37661,37487],{"class":119},[76,37663,33547],{"class":90},[76,37665,37666,37668,37670,37672],{"class":78,"line":1698},[76,37667,34039],{"class":7296},[76,37669,370],{"class":82},[76,37671,33519],{"class":119},[76,37673,130],{"class":90},[76,37675,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704],{"class":78,"line":1711},[76,37677,34050],{"class":90},[76,37679,370],{"class":82},[76,37681,34055],{"class":90},[76,37683,34058],{"class":119},[76,37685,123],{"class":90},[76,37687,34063],{"class":119},[76,37689,2718],{"class":82},[76,37691,9436],{"class":119},[76,37693,34070],{"class":90},[76,37695,34058],{"class":119},[76,37697,123],{"class":90},[76,37699,34077],{"class":119},[76,37701,2718],{"class":82},[76,37703,9436],{"class":119},[76,37705,34084],{"class":90},[76,37707,37708,37710,37712,37714,37716,37718],{"class":78,"line":1717},[76,37709,34089],{"class":90},[76,37711,370],{"class":82},[76,37713,34094],{"class":90},[76,37715,33580],{"class":7296},[76,37717,370],{"class":82},[76,37719,33585],{"class":90},[76,37721,37722,37724,37726,37728],{"class":78,"line":1728},[76,37723,34105],{"class":7296},[76,37725,370],{"class":82},[76,37727,34110],{"class":119},[76,37729,33509],{"class":90},[76,37731,37732,37734,37736,37738],{"class":78,"line":1740},[76,37733,34117],{"class":7296},[76,37735,370],{"class":82},[76,37737,33519],{"class":119},[76,37739,33509],{"class":90},[76,37741,37742],{"class":78,"line":1746},[76,37743,34128],{"class":540},[76,37745,37746,37748,37750,37752],{"class":78,"line":1751},[76,37747,34133],{"class":7296},[76,37749,370],{"class":82},[76,37751,2659],{"class":119},[76,37753,130],{"class":90},[76,37755,37756,37758,37760,37762,37764,37766],{"class":78,"line":1756},[76,37757,34144],{"class":90},[76,37759,370],{"class":82},[76,37761,33577],{"class":90},[76,37763,33580],{"class":7296},[76,37765,370],{"class":82},[76,37767,34155],{"class":90},[76,37769,37770,37772,37774,37776],{"class":78,"line":1766},[76,37771,34160],{"class":7296},[76,37773,370],{"class":82},[76,37775,34110],{"class":119},[76,37777,33509],{"class":90},[76,37779,37780,37782,37784,37786],{"class":78,"line":1773},[76,37781,34171],{"class":7296},[76,37783,370],{"class":82},[76,37785,33519],{"class":119},[76,37787,33509],{"class":90},[76,37789,37790,37792,37794,37796],{"class":78,"line":1793},[76,37791,34182],{"class":7296},[76,37793,370],{"class":82},[76,37795,2659],{"class":119},[76,37797,130],{"class":90},[76,37799,37800,37802],{"class":78,"line":1806},[76,37801,441],{"class":82},[76,37803,34195],{"class":90},[76,37805,37806],{"class":78,"line":1817},[76,37807,149],{"emptyLinePlaceholder":148},[76,37809,37810],{"class":78,"line":1822},[76,37811,34204],{"class":540},[76,37813,37814],{"class":78,"line":1835},[76,37815,34209],{"class":540},[76,37817,37818],{"class":78,"line":1847},[76,37819,149],{"emptyLinePlaceholder":148},[76,37821,37822],{"class":78,"line":1852},[76,37823,34218],{"class":540},[76,37825,37826,37828,37830],{"class":78,"line":1862},[76,37827,83],{"class":82},[76,37829,34225],{"class":86},[76,37831,34228],{"class":90},[76,37833,37834,37836,37838,37840,37842,37844,37846,37848,37850],{"class":78,"line":1874},[76,37835,33281],{"class":90},[76,37837,370],{"class":82},[76,37839,32496],{"class":90},[76,37841,33288],{"class":126},[76,37843,3811],{"class":82},[76,37845,33293],{"class":90},[76,37847,1328],{"class":82},[76,37849,34247],{"class":126},[76,37851,130],{"class":90},[76,37853,37854],{"class":78,"line":1879},[76,37855,149],{"emptyLinePlaceholder":148},[76,37857,37858],{"class":78,"line":1884},[76,37859,149],{"emptyLinePlaceholder":148},[76,37861,37862],{"class":78,"line":1889},[76,37863,34262],{"class":540},[76,37865,37866],{"class":78,"line":1900},[76,37867,34267],{"class":540},[76,37869,37870],{"class":78,"line":1906},[76,37871,34272],{"class":540},[76,37873,37874,37876,37878,37880,37882,37884,37886],{"class":78,"line":1924},[76,37875,34277],{"class":90},[76,37877,370],{"class":82},[76,37879,34282],{"class":90},[76,37881,34285],{"class":7296},[76,37883,370],{"class":82},[76,37885,34290],{"class":119},[76,37887,130],{"class":90},[76,37889,37890],{"class":78,"line":1929},[76,37891,149],{"emptyLinePlaceholder":148},[76,37893,37894],{"class":78,"line":1944},[76,37895,34301],{"class":540},[76,37897,37898,37900,37902],{"class":78,"line":1950},[76,37899,34306],{"class":90},[76,37901,370],{"class":82},[76,37903,34311],{"class":90},[76,37905,37906],{"class":78,"line":1965},[76,37907,149],{"emptyLinePlaceholder":148},[76,37909,37910],{"class":78,"line":1971},[76,37911,34320],{"class":540},[76,37913,37914,37916,37918],{"class":78,"line":1985},[76,37915,33333],{"class":90},[76,37917,370],{"class":82},[76,37919,34329],{"class":90},[76,37921,37922],{"class":78,"line":1991},[76,37923,34334],{"class":540},[76,37925,37926],{"class":78,"line":2005},[76,37927,34339],{"class":540},[76,37929,37930],{"class":78,"line":2017},[76,37931,34344],{"class":540},[76,37933,37934,37936,37938],{"class":78,"line":2023},[76,37935,34349],{"class":90},[76,37937,370],{"class":82},[76,37939,34354],{"class":90},[76,37941,37942],{"class":78,"line":2031},[76,37943,149],{"emptyLinePlaceholder":148},[76,37945,37946],{"class":78,"line":11880},[76,37947,149],{"emptyLinePlaceholder":148},[76,37949,37950],{"class":78,"line":11901},[76,37951,34367],{"class":540},[76,37953,37954],{"class":78,"line":11907},[76,37955,34372],{"class":540},[76,37957,37958,37960,37962],{"class":78,"line":11921},[76,37959,34377],{"class":90},[76,37961,370],{"class":82},[76,37963,34382],{"class":119},[76,37965,37966],{"class":78,"line":11927},[76,37967,34387],{"class":540},[76,37969,37970,37972,37974],{"class":78,"line":11954},[76,37971,34392],{"class":90},[76,37973,370],{"class":82},[76,37975,34397],{"class":90},[76,37977,37978],{"class":78,"line":11963},[76,37979,34402],{"class":540},[76,37981,37982,37984,37986],{"class":78,"line":11969},[76,37983,34407],{"class":90},[76,37985,370],{"class":82},[76,37987,34397],{"class":90},[76,37989,37990],{"class":78,"line":11977},[76,37991,34416],{"class":540},[76,37993,37994,37996,37998],{"class":78,"line":11982},[76,37995,34421],{"class":90},[76,37997,370],{"class":82},[76,37999,34397],{"class":90},[76,38001,38002],{"class":78,"line":18654},[76,38003,34430],{"class":540},[76,38005,38006,38008,38010],{"class":78,"line":18660},[76,38007,34435],{"class":90},[76,38009,370],{"class":82},[76,38011,34397],{"class":90},[76,38013,38014],{"class":78,"line":18683},[76,38015,149],{"emptyLinePlaceholder":148},[76,38017,38018],{"class":78,"line":18689},[76,38019,34448],{"class":540},[76,38021,38022,38024,38026],{"class":78,"line":18712},[76,38023,34453],{"class":90},[76,38025,370],{"class":82},[76,38027,34458],{"class":90},[76,38029,38030],{"class":78,"line":18726},[76,38031,149],{"emptyLinePlaceholder":148},[76,38033,38034],{"class":78,"line":18746},[76,38035,149],{"emptyLinePlaceholder":148},[76,38037,38038],{"class":78,"line":18752},[76,38039,34471],{"class":540},[76,38041,38042,38044,38046,38048,38050],{"class":78,"line":18763},[76,38043,1469],{"class":82},[76,38045,34478],{"class":90},[76,38047,1475],{"class":82},[76,38049,34483],{"class":119},[76,38051,34486],{"class":90},[76,38053,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074],{"class":78,"line":18786},[76,38055,1701],{"class":119},[76,38057,123],{"class":90},[76,38059,34495],{"class":126},[76,38061,34498],{"class":119},[76,38063,795],{"class":126},[76,38065,34498],{"class":119},[76,38067,307],{"class":126},[76,38069,34507],{"class":90},[76,38071,666],{"class":82},[76,38073,669],{"class":119},[76,38075,656],{"class":90},[76,38077,38078,38080,38082,38084,38086,38088],{"class":78,"line":18808},[76,38079,1701],{"class":119},[76,38081,123],{"class":90},[76,38083,1116],{"class":126},[76,38085,2718],{"class":82},[76,38087,402],{"class":119},[76,38089,130],{"class":90},[76,38091,38092],{"class":78,"line":18813},[76,38093,149],{"emptyLinePlaceholder":148},[76,38095,38096],{"class":78,"line":18819},[76,38097,34536],{"class":540},[76,38099,38100],{"class":78,"line":18833},[76,38101,34541],{"class":540},[76,38103,38104,38106,38108],{"class":78,"line":18846},[76,38105,34546],{"class":90},[76,38107,370],{"class":82},[76,38109,34382],{"class":119},[76,38111,38112],{"class":78,"line":18851},[76,38113,34555],{"class":540},[76,38115,38116,38118,38120],{"class":78,"line":18865},[76,38117,34560],{"class":90},[76,38119,370],{"class":82},[76,38121,5172],{"class":119},[76,38123,38124],{"class":78,"line":18870},[76,38125,34569],{"class":540},[76,38127,38128,38130,38132],{"class":78,"line":18876},[76,38129,34574],{"class":90},[76,38131,370],{"class":82},[76,38133,34382],{"class":119},[76,38135,38136],{"class":78,"line":18881},[76,38137,34583],{"class":540},[76,38139,38140,38142,38144],{"class":78,"line":18895},[76,38141,34588],{"class":90},[76,38143,370],{"class":82},[76,38145,5172],{"class":119},[76,38147,38148],{"class":78,"line":18900},[76,38149,34597],{"class":540},[76,38151,38152,38154,38156],{"class":78,"line":18905},[76,38153,34602],{"class":90},[76,38155,370],{"class":82},[76,38157,5172],{"class":119},[76,38159,38160],{"class":78,"line":18919},[76,38161,34611],{"class":540},[76,38163,38164,38166,38168],{"class":78,"line":18931},[76,38165,34616],{"class":90},[76,38167,370],{"class":82},[76,38169,5172],{"class":119},[76,38171,38172],{"class":78,"line":18936},[76,38173,34625],{"class":540},[76,38175,38176,38178,38180,38182,38184],{"class":78,"line":18949},[76,38177,5488],{"class":82},[76,38179,33644],{"class":90},[76,38181,1475],{"class":82},[76,38183,33649],{"class":119},[76,38185,34638],{"class":90},[76,38187,38188],{"class":78,"line":18954},[76,38189,34643],{"class":540},[76,38191,38192,38194,38196],{"class":78,"line":18959},[76,38193,34648],{"class":90},[76,38195,370],{"class":82},[76,38197,34653],{"class":90},[76,38199,38200],{"class":78,"line":18964},[76,38201,34658],{"class":540},[76,38203,38204,38206,38208],{"class":78,"line":18977},[76,38205,34663],{"class":90},[76,38207,370],{"class":82},[76,38209,34668],{"class":90},[76,38211,38212],{"class":78,"line":18982},[76,38213,34674],{"class":540},[76,38215,38216],{"class":78,"line":34671},[76,38217,34680],{"class":90},[76,38219,38220],{"class":78,"line":34677},[76,38221,34686],{"class":540},[76,38223,38224],{"class":78,"line":34683},[76,38225,34692],{"class":540},[76,38227,38228,38230,38232],{"class":78,"line":34689},[76,38229,34698],{"class":90},[76,38231,370],{"class":82},[76,38233,34703],{"class":90},[76,38235,38236],{"class":78,"line":34695},[76,38237,34709],{"class":540},[76,38239,38240,38242,38244,38246,38248,38250,38252],{"class":78,"line":34706},[76,38241,34715],{"class":90},[76,38243,370],{"class":82},[76,38245,34720],{"class":90},[76,38247,34723],{"class":7296},[76,38249,370],{"class":82},[76,38251,669],{"class":119},[76,38253,130],{"class":90},[76,38255,38256],{"class":78,"line":34712},[76,38257,34735],{"class":540},[76,38259,38260,38262,38264],{"class":78,"line":34732},[76,38261,34741],{"class":90},[76,38263,370],{"class":82},[76,38265,34746],{"class":90},[76,38267,38268],{"class":78,"line":34738},[76,38269,34752],{"class":540},[76,38271,38272],{"class":78,"line":34749},[76,38273,34758],{"class":90},[76,38275,38276],{"class":78,"line":34755},[76,38277,34764],{"class":540},[76,38279,38280],{"class":78,"line":34761},[76,38281,34770],{"class":90},[76,38283,38284],{"class":78,"line":34767},[76,38285,34776],{"class":540},[76,38287,38288],{"class":78,"line":34773},[76,38289,34782],{"class":90},[76,38291,38292],{"class":78,"line":34779},[76,38293,34788],{"class":540},[76,38295,38296,38298,38300,38302,38304,38306,38308],{"class":78,"line":34785},[76,38297,34794],{"class":90},[76,38299,1060],{"class":82},[76,38301,34799],{"class":90},[76,38303,2718],{"class":82},[76,38305,34804],{"class":90},[76,38307,1294],{"class":119},[76,38309,130],{"class":90},[76,38311,38312],{"class":78,"line":34791},[76,38313,34814],{"class":540},[76,38315,38316,38318,38320,38322,38324],{"class":78,"line":34811},[76,38317,34820],{"class":90},[76,38319,1060],{"class":82},[76,38321,34825],{"class":90},[76,38323,1250],{"class":82},[76,38325,34830],{"class":90},[76,38327,38328],{"class":78,"line":34817},[76,38329,34836],{"class":540},[76,38331,38332,38334,38336,38338,38340],{"class":78,"line":34833},[76,38333,34842],{"class":90},[76,38335,1060],{"class":82},[76,38337,34804],{"class":90},[76,38339,1294],{"class":119},[76,38341,130],{"class":90},[76,38343,38344],{"class":78,"line":34839},[76,38345,34856],{"class":540},[76,38347,38348,38350,38352,38354,38356],{"class":78,"line":34853},[76,38349,5488],{"class":82},[76,38351,34864],{"class":90},[76,38353,1475],{"class":82},[76,38355,33649],{"class":119},[76,38357,34871],{"class":90},[76,38359,38360],{"class":78,"line":34859},[76,38361,34877],{"class":540},[76,38363,38364,38366,38368],{"class":78,"line":34874},[76,38365,34648],{"class":90},[76,38367,370],{"class":82},[76,38369,34653],{"class":90},[76,38371,38372],{"class":78,"line":34880},[76,38373,34892],{"class":540},[76,38375,38376,38378,38380],{"class":78,"line":34889},[76,38377,34663],{"class":90},[76,38379,370],{"class":82},[76,38381,34668],{"class":90},[76,38383,38384],{"class":78,"line":34895},[76,38385,34907],{"class":540},[76,38387,38388],{"class":78,"line":34904},[76,38389,34913],{"class":90},[76,38391,38392],{"class":78,"line":34910},[76,38393,38394],{"class":540},"            # 验证时不计算梯度以节省内存\u002F计算\n",[76,38396,38397,38399],{"class":78,"line":34916},[76,38398,34919],{"class":82},[76,38400,34922],{"class":90},[76,38402,38403],{"class":78,"line":34925},[76,38404,34928],{"class":540},[76,38406,38407,38410,38412],{"class":78,"line":34931},[76,38408,38409],{"class":90},"                output",[76,38411,370],{"class":82},[76,38413,34703],{"class":90},[76,38415,38416],{"class":78,"line":34942},[76,38417,34945],{"class":540},[76,38419,38420,38423,38425,38427,38429,38431,38433],{"class":78,"line":34948},[76,38421,38422],{"class":90},"                pre_lab",[76,38424,370],{"class":82},[76,38426,34720],{"class":90},[76,38428,34723],{"class":7296},[76,38430,370],{"class":82},[76,38432,669],{"class":119},[76,38434,130],{"class":90},[76,38436,38437],{"class":78,"line":34967},[76,38438,34970],{"class":540},[76,38440,38441,38444,38446],{"class":78,"line":34973},[76,38442,38443],{"class":90},"                val_batch_loss",[76,38445,370],{"class":82},[76,38447,34746],{"class":90},[76,38449,38450],{"class":78,"line":34984},[76,38451,34987],{"class":540},[76,38453,38454,38457,38459,38462,38464,38466,38468],{"class":78,"line":34990},[76,38455,38456],{"class":90},"                val_loss",[76,38458,1060],{"class":82},[76,38460,38461],{"class":90},"val_batch_loss.item()",[76,38463,2718],{"class":82},[76,38465,34804],{"class":90},[76,38467,1294],{"class":119},[76,38469,130],{"class":90},[76,38471,38472,38475,38477,38479,38481],{"class":78,"line":35010},[76,38473,38474],{"class":90},"                val_corrects",[76,38476,1060],{"class":82},[76,38478,34825],{"class":90},[76,38480,1250],{"class":82},[76,38482,34830],{"class":90},[76,38484,38485],{"class":78,"line":35026},[76,38486,38487],{"class":540},"            # 当前用于验证的样本数量\n",[76,38489,38490,38493,38495,38497,38499],{"class":78,"line":35032},[76,38491,38492],{"class":90},"            val_num",[76,38494,1060],{"class":82},[76,38496,34804],{"class":90},[76,38498,1294],{"class":119},[76,38500,130],{"class":90},[76,38502,38503],{"class":78,"line":35046},[76,38504,35049],{"class":540},[76,38506,38507],{"class":78,"line":35052},[76,38508,35055],{"class":540},[76,38510,38511,38513,38515],{"class":78,"line":35058},[76,38512,35061],{"class":90},[76,38514,795],{"class":82},[76,38516,35066],{"class":90},[76,38518,38519],{"class":78,"line":35069},[76,38520,35072],{"class":540},[76,38522,38523],{"class":78,"line":35075},[76,38524,35078],{"class":540},[76,38526,38527,38529,38531],{"class":78,"line":35081},[76,38528,35084],{"class":90},[76,38530,795],{"class":82},[76,38532,35066],{"class":90},[76,38534,38535],{"class":78,"line":35091},[76,38536,35094],{"class":540},[76,38538,38539,38541,38543],{"class":78,"line":35097},[76,38540,35100],{"class":90},[76,38542,795],{"class":82},[76,38544,35105],{"class":90},[76,38546,38547],{"class":78,"line":35108},[76,38548,35111],{"class":540},[76,38550,38551,38553,38555],{"class":78,"line":35114},[76,38552,35117],{"class":90},[76,38554,795],{"class":82},[76,38556,35105],{"class":90},[76,38558,38559],{"class":78,"line":35124},[76,38560,149],{"emptyLinePlaceholder":148},[76,38562,38563],{"class":78,"line":35129},[76,38564,35132],{"class":540},[76,38566,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605],{"class":78,"line":35135},[76,38568,1701],{"class":119},[76,38570,123],{"class":90},[76,38572,5677],{"class":126},[76,38574,34498],{"class":119},[76,38576,35146],{"class":126},[76,38578,298],{"class":119},[76,38580,35151],{"class":82},[76,38582,304],{"class":119},[76,38584,35156],{"class":126},[76,38586,298],{"class":119},[76,38588,35151],{"class":82},[76,38590,304],{"class":119},[76,38592,5677],{"class":126},[76,38594,35167],{"class":90},[76,38596,666],{"class":82},[76,38598,669],{"class":119},[76,38600,35174],{"class":90},[76,38602,666],{"class":82},[76,38604,669],{"class":119},[76,38606,35181],{"class":90},[76,38608,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647],{"class":78,"line":35184},[76,38610,1701],{"class":119},[76,38612,123],{"class":90},[76,38614,5677],{"class":126},[76,38616,34498],{"class":119},[76,38618,35195],{"class":126},[76,38620,298],{"class":119},[76,38622,35151],{"class":82},[76,38624,304],{"class":119},[76,38626,35204],{"class":126},[76,38628,298],{"class":119},[76,38630,35151],{"class":82},[76,38632,304],{"class":119},[76,38634,5677],{"class":126},[76,38636,35215],{"class":90},[76,38638,666],{"class":82},[76,38640,669],{"class":119},[76,38642,35222],{"class":90},[76,38644,666],{"class":82},[76,38646,669],{"class":119},[76,38648,35181],{"class":90},[76,38650,38651],{"class":78,"line":35231},[76,38652,149],{"emptyLinePlaceholder":148},[76,38654,38655],{"class":78,"line":35236},[76,38656,35239],{"class":540},[76,38658,38659,38661,38663,38665,38667,38669,38671],{"class":78,"line":35242},[76,38660,4592],{"class":82},[76,38662,35247],{"class":90},[76,38664,666],{"class":82},[76,38666,669],{"class":119},[76,38668,3196],{"class":90},[76,38670,1829],{"class":82},[76,38672,35258],{"class":90},[76,38674,38675],{"class":78,"line":35261},[76,38676,35264],{"class":540},[76,38678,38679,38681,38683,38685,38687,38689,38691],{"class":78,"line":35267},[76,38680,35270],{"class":90},[76,38682,2311],{"class":119},[76,38684,370],{"class":82},[76,38686,35277],{"class":90},[76,38688,666],{"class":82},[76,38690,669],{"class":119},[76,38692,35284],{"class":90},[76,38694,38695],{"class":78,"line":35287},[76,38696,35290],{"class":540},[76,38698,38699],{"class":78,"line":35293},[76,38700,35296],{"class":540},[76,38702,38703,38705,38707],{"class":78,"line":35299},[76,38704,35302],{"class":90},[76,38706,370],{"class":82},[76,38708,34354],{"class":90},[76,38710,38711],{"class":78,"line":35309},[76,38712,149],{"emptyLinePlaceholder":148},[76,38714,38715],{"class":78,"line":35314},[76,38716,35317],{"class":540},[76,38718,38719,38721,38723,38725,38727],{"class":78,"line":35320},[76,38720,35323],{"class":90},[76,38722,370],{"class":82},[76,38724,35328],{"class":90},[76,38726,666],{"class":82},[76,38728,35333],{"class":90},[76,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765],{"class":78,"line":35336},[76,38732,1701],{"class":119},[76,38734,123],{"class":90},[76,38736,35343],{"class":126},[76,38738,298],{"class":119},[76,38740,35348],{"class":82},[76,38742,304],{"class":119},[76,38744,2805],{"class":126},[76,38746,298],{"class":119},[76,38748,35348],{"class":82},[76,38750,304],{"class":119},[76,38752,35361],{"class":126},[76,38754,35364],{"class":90},[76,38756,35367],{"class":82},[76,38758,3164],{"class":119},[76,38760,35372],{"class":90},[76,38762,2592],{"class":82},[76,38764,3164],{"class":119},[76,38766,656],{"class":90},[76,38768,38769],{"class":78,"line":35381},[76,38770,38771],{"class":540},"    # 选择最优参数并保存\n",[76,38773,38774],{"class":78,"line":35387},[76,38775,38776],{"class":540},"    # 保存最佳模型权重字典\n",[76,38778,38779,38782,38784],{"class":78,"line":35393},[76,38780,38781],{"class":90},"    torch.save(best_model_wts,",[76,38783,35405],{"class":126},[76,38785,130],{"class":90},[76,38787,38788],{"class":78,"line":35399},[76,38789,35425],{"class":540},[76,38791,38792,38794,38796,38798,38800,38802],{"class":78,"line":35410},[76,38793,35431],{"class":90},[76,38795,370],{"class":82},[76,38797,35436],{"class":90},[76,38799,35439],{"class":7296},[76,38801,370],{"class":82},[76,38803,3666],{"class":90},[76,38805,38806,38808,38810,38812],{"class":78,"line":35416},[76,38807,35449],{"class":126},[76,38809,3117],{"class":90},[76,38811,35454],{"class":119},[76,38813,35457],{"class":90},[76,38815,38816,38818],{"class":78,"line":35422},[76,38817,35463],{"class":126},[76,38819,35466],{"class":90},[76,38821,38822,38824],{"class":78,"line":35428},[76,38823,35472],{"class":126},[76,38825,35475],{"class":90},[76,38827,38828,38830],{"class":78,"line":35446},[76,38829,35481],{"class":126},[76,38831,35484],{"class":90},[76,38833,38834,38836],{"class":78,"line":35460},[76,38835,35490],{"class":126},[76,38837,35493],{"class":90},[76,38839,38840],{"class":78,"line":35469},[76,38841,35499],{"class":90},[76,38843,38844],{"class":78,"line":35478},[76,38845,35505],{"class":540},[76,38847,38848,38850],{"class":78,"line":35487},[76,38849,441],{"class":82},[76,38851,35513],{"class":90},[76,38853,38854],{"class":78,"line":35496},[76,38855,149],{"emptyLinePlaceholder":148},[76,38857,38858],{"class":78,"line":35502},[76,38859,35524],{"class":540},[76,38861,38862,38864,38866],{"class":78,"line":35508},[76,38863,83],{"class":82},[76,38865,35532],{"class":86},[76,38867,35535],{"class":90},[76,38869,38870],{"class":78,"line":35516},[76,38871,35541],{"class":540},[76,38873,38874,38876,38878,38880,38882,38884,38886,38888],{"class":78,"line":35521},[76,38875,35547],{"class":90},[76,38877,33735],{"class":7296},[76,38879,370],{"class":82},[76,38881,123],{"class":90},[76,38883,2760],{"class":119},[76,38885,2642],{"class":90},[76,38887,2557],{"class":119},[76,38889,656],{"class":90},[76,38891,38892],{"class":78,"line":35527},[76,38893,35567],{"class":540},[76,38895,38896],{"class":78,"line":35538},[76,38897,35573],{"class":540},[76,38899,38900],{"class":78,"line":35544},[76,38901,35579],{"class":540},[76,38903,38904,38906,38908,38910,38912,38914,38916],{"class":78,"line":35564},[76,38905,33769],{"class":90},[76,38907,669],{"class":119},[76,38909,2642],{"class":90},[76,38911,2345],{"class":119},[76,38913,2642],{"class":90},[76,38915,669],{"class":119},[76,38917,130],{"class":90},[76,38919,38920],{"class":78,"line":35570},[76,38921,35602],{"class":540},[76,38923,38924],{"class":78,"line":35576},[76,38925,35608],{"class":540},[76,38927,38928],{"class":78,"line":35582},[76,38929,35614],{"class":540},[76,38931,38932],{"class":78,"line":35599},[76,38933,35620],{"class":540},[76,38935,38936],{"class":78,"line":35605},[76,38937,35626],{"class":540},[76,38939,38940,38942,38944,38946,38948,38950,38952,38954,38956],{"class":78,"line":35611},[76,38941,35632],{"class":90},[76,38943,35635],{"class":126},[76,38945,35638],{"class":90},[76,38947,35641],{"class":126},[76,38949,2642],{"class":90},[76,38951,35646],{"class":7296},[76,38953,370],{"class":82},[76,38955,35651],{"class":126},[76,38957,130],{"class":90},[76,38959,38960,38962,38964,38966,38968,38970,38972,38974,38976],{"class":78,"line":35617},[76,38961,35632],{"class":90},[76,38963,35635],{"class":126},[76,38965,35663],{"class":90},[76,38967,35666],{"class":126},[76,38969,2642],{"class":90},[76,38971,35646],{"class":7296},[76,38973,370],{"class":82},[76,38975,35675],{"class":126},[76,38977,130],{"class":90},[76,38979,38980],{"class":78,"line":35623},[76,38981,35683],{"class":540},[76,38983,38984],{"class":78,"line":35629},[76,38985,35689],{"class":90},[76,38987,38988],{"class":78,"line":35656},[76,38989,35695],{"class":540},[76,38991,38992,38994,38996],{"class":78,"line":35680},[76,38993,35701],{"class":90},[76,38995,35704],{"class":126},[76,38997,130],{"class":90},[76,38999,39000,39002,39004],{"class":78,"line":35686},[76,39001,35712],{"class":90},[76,39003,35715],{"class":126},[76,39005,130],{"class":90},[76,39007,39008],{"class":78,"line":35692},[76,39009,35723],{"class":540},[76,39011,39012,39014,39016,39018,39020,39022,39024],{"class":78,"line":35698},[76,39013,33769],{"class":90},[76,39015,669],{"class":119},[76,39017,2642],{"class":90},[76,39019,2345],{"class":119},[76,39021,2642],{"class":90},[76,39023,2345],{"class":119},[76,39025,130],{"class":90},[76,39027,39028,39030,39032,39034,39036,39038,39040,39042,39044],{"class":78,"line":35709},[76,39029,35632],{"class":90},[76,39031,35635],{"class":126},[76,39033,35750],{"class":90},[76,39035,35641],{"class":126},[76,39037,2642],{"class":90},[76,39039,35646],{"class":7296},[76,39041,370],{"class":82},[76,39043,35761],{"class":126},[76,39045,130],{"class":90},[76,39047,39048,39050,39052,39054,39056,39058,39060,39062,39064],{"class":78,"line":35720},[76,39049,35632],{"class":90},[76,39051,35635],{"class":126},[76,39053,35773],{"class":90},[76,39055,35666],{"class":126},[76,39057,2642],{"class":90},[76,39059,35646],{"class":7296},[76,39061,370],{"class":82},[76,39063,35784],{"class":126},[76,39065,130],{"class":90},[76,39067,39068],{"class":78,"line":35726},[76,39069,35792],{"class":540},[76,39071,39072],{"class":78,"line":35743},[76,39073,35689],{"class":90},[76,39075,39076,39078,39080],{"class":78,"line":35766},[76,39077,35701],{"class":90},[76,39079,35635],{"class":126},[76,39081,130],{"class":90},[76,39083,39084,39086,39088],{"class":78,"line":35789},[76,39085,35712],{"class":90},[76,39087,35814],{"class":126},[76,39089,130],{"class":90},[76,39091,39092],{"class":78,"line":35795},[76,39093,35822],{"class":90},[76,39095,39096],{"class":78,"line":35800},[76,39097,149],{"emptyLinePlaceholder":148},[76,39099,39100],{"class":78,"line":35809},[76,39101,35833],{"class":540},[76,39103,39104,39106,39108,39110,39112],{"class":78,"line":35819},[76,39105,723],{"class":82},[76,39107,33264],{"class":119},[76,39109,1250],{"class":82},[76,39111,33269],{"class":126},[76,39113,590],{"class":90},[76,39115,39116],{"class":78,"line":35825},[76,39117,35852],{"class":540},[76,39119,39120,39123,39125],{"class":78,"line":35830},[76,39121,39122],{"class":90},"    AlexNet",[76,39124,370],{"class":82},[76,39126,39127],{"class":90},"AlexNet()\n",[76,39129,39130,39132,39134],{"class":78,"line":35836},[76,39131,35869],{"class":90},[76,39133,370],{"class":82},[76,39135,35874],{"class":90},[76,39137,39138,39140,39142,39145,39147,39149,39151],{"class":78,"line":35849},[76,39139,35431],{"class":90},[76,39141,370],{"class":82},[76,39143,39144],{"class":90},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[76,39146,35887],{"class":7296},[76,39148,370],{"class":82},[76,39150,408],{"class":119},[76,39152,130],{"class":90},[76,39154,39155],{"class":78,"line":35855},[76,39156,35899],{"class":90},[26,39158,39159],{"start":133},[29,39160,35912],{},[66,39162,39164],{"className":68,"code":39163,"language":70,"meta":71,"style":71},"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",[73,39165,39166,39172,39182,39192,39202,39206,39216,39226,39237,39241,39245,39249,39257,39273,39283,39299,39309,39323,39327,39337,39347,39357,39363,39367,39371,39379,39383,39399,39407,39411,39415,39423,39431,39435,39439,39443,39447,39453,39457,39467,39475,39483,39487,39491,39495,39503,39507,39523,39527,39531,39535,39547,39551,39563,39567,39571,39583,39587,39597,39601,39605,39617,39621,39629,39633,39637,39645,39649,39657,39661,39665,39669,39673,39677,39693,39701,39705,39709,39757,39763,39767,39777,39785,39793,39797,39801,39805,39809,39817,39821,39837,39841,39849,39857],{"__ignoreMap":71},[76,39167,39168,39170],{"class":78,"line":79},[76,39169,32438],{"class":82},[76,39171,32441],{"class":90},[76,39173,39174,39176,39178,39180],{"class":78,"line":94},[76,39175,32438],{"class":82},[76,39177,33458],{"class":90},[76,39179,33426],{"class":82},[76,39181,33463],{"class":90},[76,39183,39184,39186,39188,39190],{"class":78,"line":133},[76,39185,32781],{"class":82},[76,39187,35940],{"class":90},[76,39189,32438],{"class":82},[76,39191,35945],{"class":90},[76,39193,39194,39196,39198,39200],{"class":78,"line":145},[76,39195,32781],{"class":82},[76,39197,33441],{"class":90},[76,39199,32438],{"class":82},[76,39201,33446],{"class":90},[76,39203,39204],{"class":78,"line":152},[76,39205,35960],{"class":540},[76,39207,39208,39210,39212,39214],{"class":78,"line":157},[76,39209,32781],{"class":82},[76,39211,33411],{"class":90},[76,39213,32438],{"class":82},[76,39215,33416],{"class":90},[76,39217,39218,39220,39222,39224],{"class":78,"line":246},[76,39219,32781],{"class":82},[76,39221,33956],{"class":90},[76,39223,32438],{"class":82},[76,39225,37595],{"class":90},[76,39227,39228,39230,39233,39235],{"class":78,"line":251},[76,39229,32781],{"class":82},[76,39231,39232],{"class":90}," 练习.AlexNet.model ",[76,39234,32438],{"class":82},[76,39236,37595],{"class":90},[76,39238,39239],{"class":78,"line":257},[76,39240,149],{"emptyLinePlaceholder":148},[76,39242,39243],{"class":78,"line":641},[76,39244,149],{"emptyLinePlaceholder":148},[76,39246,39247],{"class":78,"line":646},[76,39248,35989],{"class":540},[76,39250,39251,39253,39255],{"class":78,"line":659},[76,39252,83],{"class":82},[76,39254,35996],{"class":86},[76,39256,91],{"class":90},[76,39258,39259,39261,39263,39265,39267,39269,39271],{"class":78,"line":1608},[76,39260,36003],{"class":90},[76,39262,370],{"class":82},[76,39264,33498],{"class":90},[76,39266,33501],{"class":7296},[76,39268,370],{"class":82},[76,39270,33506],{"class":126},[76,39272,33509],{"class":90},[76,39274,39275,39277,39279,39281],{"class":78,"line":1632},[76,39276,36020],{"class":7296},[76,39278,370],{"class":82},[76,39280,36025],{"class":119},[76,39282,33509],{"class":90},[76,39284,39285,39287,39289,39291,39293,39295,39297],{"class":78,"line":1637},[76,39286,36032],{"class":7296},[76,39288,370],{"class":82},[76,39290,33536],{"class":90},[76,39292,33539],{"class":7296},[76,39294,370],{"class":82},[76,39296,37487],{"class":119},[76,39298,33547],{"class":90},[76,39300,39301,39303,39305,39307],{"class":78,"line":1642},[76,39302,36049],{"class":7296},[76,39304,370],{"class":82},[76,39306,33519],{"class":119},[76,39308,130],{"class":90},[76,39310,39311,39313,39315,39317,39319,39321],{"class":78,"line":1652},[76,39312,36060],{"class":90},[76,39314,370],{"class":82},[76,39316,33577],{"class":90},[76,39318,33580],{"class":7296},[76,39320,370],{"class":82},[76,39322,36071],{"class":90},[76,39324,39325],{"class":78,"line":1660},[76,39326,36076],{"class":540},[76,39328,39329,39331,39333,39335],{"class":78,"line":1683},[76,39330,36081],{"class":7296},[76,39332,370],{"class":82},[76,39334,669],{"class":119},[76,39336,33509],{"class":90},[76,39338,39339,39341,39343,39345],{"class":78,"line":1698},[76,39340,36092],{"class":7296},[76,39342,370],{"class":82},[76,39344,33519],{"class":119},[76,39346,33509],{"class":90},[76,39348,39349,39351,39353,39355],{"class":78,"line":1711},[76,39350,36103],{"class":7296},[76,39352,370],{"class":82},[76,39354,1294],{"class":119},[76,39356,130],{"class":90},[76,39358,39359,39361],{"class":78,"line":1717},[76,39360,441],{"class":82},[76,39362,36116],{"class":90},[76,39364,39365],{"class":78,"line":1728},[76,39366,149],{"emptyLinePlaceholder":148},[76,39368,39369],{"class":78,"line":1740},[76,39370,36125],{"class":540},[76,39372,39373,39375,39377],{"class":78,"line":1746},[76,39374,83],{"class":82},[76,39376,36132],{"class":86},[76,39378,36135],{"class":90},[76,39380,39381],{"class":78,"line":1751},[76,39382,36140],{"class":540},[76,39384,39385,39387,39389,39391,39393,39395,39397],{"class":78,"line":1756},[76,39386,33281],{"class":90},[76,39388,370],{"class":82},[76,39390,33288],{"class":126},[76,39392,3811],{"class":82},[76,39394,33293],{"class":90},[76,39396,1328],{"class":82},[76,39398,36157],{"class":126},[76,39400,39401,39403,39405],{"class":78,"line":1766},[76,39402,33333],{"class":90},[76,39404,370],{"class":82},[76,39406,34329],{"class":90},[76,39408,39409],{"class":78,"line":1773},[76,39410,149],{"emptyLinePlaceholder":148},[76,39412,39413],{"class":78,"line":1793},[76,39414,36174],{"class":540},[76,39416,39417,39419,39421],{"class":78,"line":1806},[76,39418,36179],{"class":90},[76,39420,370],{"class":82},[76,39422,34382],{"class":119},[76,39424,39425,39427,39429],{"class":78,"line":1817},[76,39426,36188],{"class":90},[76,39428,370],{"class":82},[76,39430,5172],{"class":119},[76,39432,39433],{"class":78,"line":1822},[76,39434,149],{"emptyLinePlaceholder":148},[76,39436,39437],{"class":78,"line":1835},[76,39438,36201],{"class":540},[76,39440,39441],{"class":78,"line":1847},[76,39442,36206],{"class":540},[76,39444,39445],{"class":78,"line":1852},[76,39446,36211],{"class":540},[76,39448,39449,39451],{"class":78,"line":1862},[76,39450,36216],{"class":82},[76,39452,34922],{"class":90},[76,39454,39455],{"class":78,"line":1874},[76,39456,36223],{"class":540},[76,39458,39459,39461,39463,39465],{"class":78,"line":1879},[76,39460,5488],{"class":82},[76,39462,36230],{"class":90},[76,39464,1475],{"class":82},[76,39466,36235],{"class":90},[76,39468,39469,39471,39473],{"class":78,"line":1884},[76,39470,36240],{"class":90},[76,39472,370],{"class":82},[76,39474,36245],{"class":90},[76,39476,39477,39479,39481],{"class":78,"line":1889},[76,39478,36250],{"class":90},[76,39480,370],{"class":82},[76,39482,36255],{"class":90},[76,39484,39485],{"class":78,"line":1900},[76,39486,36260],{"class":540},[76,39488,39489],{"class":78,"line":1906},[76,39490,34913],{"class":90},[76,39492,39493],{"class":78,"line":1924},[76,39494,36269],{"class":540},[76,39496,39497,39499,39501],{"class":78,"line":1929},[76,39498,34698],{"class":90},[76,39500,370],{"class":82},[76,39502,36278],{"class":90},[76,39504,39505],{"class":78,"line":1944},[76,39506,36283],{"class":540},[76,39508,39509,39511,39513,39515,39517,39519,39521],{"class":78,"line":1950},[76,39510,34715],{"class":90},[76,39512,370],{"class":82},[76,39514,34720],{"class":90},[76,39516,34723],{"class":7296},[76,39518,370],{"class":82},[76,39520,669],{"class":119},[76,39522,130],{"class":90},[76,39524,39525],{"class":78,"line":1965},[76,39526,36304],{"class":540},[76,39528,39529],{"class":78,"line":1971},[76,39530,36309],{"class":540},[76,39532,39533],{"class":78,"line":1985},[76,39534,36314],{"class":540},[76,39536,39537,39539,39541,39543,39545],{"class":78,"line":1991},[76,39538,36319],{"class":90},[76,39540,1060],{"class":82},[76,39542,34825],{"class":90},[76,39544,1250],{"class":82},[76,39546,36328],{"class":90},[76,39548,39549],{"class":78,"line":2005},[76,39550,36333],{"class":540},[76,39552,39553,39555,39557,39559,39561],{"class":78,"line":2017},[76,39554,36338],{"class":90},[76,39556,1060],{"class":82},[76,39558,36343],{"class":90},[76,39560,1294],{"class":119},[76,39562,130],{"class":90},[76,39564,39565],{"class":78,"line":2023},[76,39566,149],{"emptyLinePlaceholder":148},[76,39568,39569],{"class":78,"line":2031},[76,39570,36356],{"class":540},[76,39572,39573,39575,39577,39579,39581],{"class":78,"line":11880},[76,39574,36361],{"class":90},[76,39576,370],{"class":82},[76,39578,36366],{"class":90},[76,39580,795],{"class":82},[76,39582,36371],{"class":90},[76,39584,39585],{"class":78,"line":11901},[76,39586,36376],{"class":540},[76,39588,39589,39591,39593,39595],{"class":78,"line":11907},[76,39590,1701],{"class":119},[76,39592,123],{"class":90},[76,39594,36385],{"class":126},[76,39596,36388],{"class":90},[76,39598,39599],{"class":78,"line":11921},[76,39600,149],{"emptyLinePlaceholder":148},[76,39602,39603],{"class":78,"line":11927},[76,39604,36397],{"class":540},[76,39606,39607,39609,39611,39613,39615],{"class":78,"line":11954},[76,39608,723],{"class":82},[76,39610,33264],{"class":119},[76,39612,1250],{"class":82},[76,39614,33269],{"class":126},[76,39616,590],{"class":90},[76,39618,39619],{"class":78,"line":11963},[76,39620,36414],{"class":540},[76,39622,39623,39625,39627],{"class":78,"line":11969},[76,39624,33333],{"class":90},[76,39626,370],{"class":82},[76,39628,39127],{"class":90},[76,39630,39631],{"class":78,"line":11977},[76,39632,36427],{"class":540},[76,39634,39635],{"class":78,"line":11982},[76,39636,36432],{"class":540},[76,39638,39639,39641,39643],{"class":78,"line":18654},[76,39640,36437],{"class":90},[76,39642,36440],{"class":126},[76,39644,656],{"class":90},[76,39646,39647],{"class":78,"line":18660},[76,39648,36447],{"class":540},[76,39650,39651,39653,39655],{"class":78,"line":18683},[76,39652,36060],{"class":90},[76,39654,370],{"class":82},[76,39656,36456],{"class":90},[76,39658,39659],{"class":78,"line":18689},[76,39660,36461],{"class":540},[76,39662,39663],{"class":78,"line":18712},[76,39664,36466],{"class":90},[76,39666,39667],{"class":78,"line":18726},[76,39668,149],{"emptyLinePlaceholder":148},[76,39670,39671],{"class":78,"line":18746},[76,39672,36475],{"class":540},[76,39674,39675],{"class":78,"line":18752},[76,39676,36480],{"class":540},[76,39678,39679,39681,39683,39685,39687,39689,39691],{"class":78,"line":18763},[76,39680,33281],{"class":90},[76,39682,370],{"class":82},[76,39684,33288],{"class":126},[76,39686,3811],{"class":82},[76,39688,33293],{"class":90},[76,39690,1328],{"class":82},[76,39692,36157],{"class":126},[76,39694,39695,39697,39699],{"class":78,"line":18786},[76,39696,33333],{"class":90},[76,39698,370],{"class":82},[76,39700,34329],{"class":90},[76,39702,39703],{"class":78,"line":18808},[76,39704,36509],{"class":540},[76,39706,39707],{"class":78,"line":18813},[76,39708,36514],{"class":540},[76,39710,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755],{"class":78,"line":18819},[76,39712,36519],{"class":90},[76,39714,370],{"class":82},[76,39716,3148],{"class":90},[76,39718,36526],{"class":126},[76,39720,2642],{"class":90},[76,39722,36531],{"class":126},[76,39724,2642],{"class":90},[76,39726,36536],{"class":126},[76,39728,2642],{"class":90},[76,39730,36541],{"class":126},[76,39732,2642],{"class":90},[76,39734,36546],{"class":126},[76,39736,2642],{"class":90},[76,39738,36551],{"class":126},[76,39740,2642],{"class":90},[76,39742,36556],{"class":126},[76,39744,2642],{"class":90},[76,39746,36561],{"class":126},[76,39748,2642],{"class":90},[76,39750,36566],{"class":126},[76,39752,2642],{"class":90},[76,39754,36571],{"class":126},[76,39756,35284],{"class":90},[76,39758,39759,39761],{"class":78,"line":18833},[76,39760,36216],{"class":82},[76,39762,34922],{"class":90},[76,39764,39765],{"class":78,"line":18846},[76,39766,36584],{"class":540},[76,39768,39769,39771,39773,39775],{"class":78,"line":18851},[76,39770,5488],{"class":82},[76,39772,36591],{"class":90},[76,39774,1475],{"class":82},[76,39776,36235],{"class":90},[76,39778,39779,39781,39783],{"class":78,"line":18865},[76,39780,34648],{"class":90},[76,39782,370],{"class":82},[76,39784,34653],{"class":90},[76,39786,39787,39789,39791],{"class":78,"line":18870},[76,39788,34663],{"class":90},[76,39790,370],{"class":82},[76,39792,34668],{"class":90},[76,39794,39795],{"class":78,"line":18876},[76,39796,149],{"emptyLinePlaceholder":148},[76,39798,39799],{"class":78,"line":18881},[76,39800,36620],{"class":540},[76,39802,39803],{"class":78,"line":18895},[76,39804,34913],{"class":90},[76,39806,39807],{"class":78,"line":18900},[76,39808,36629],{"class":540},[76,39810,39811,39813,39815],{"class":78,"line":18905},[76,39812,34698],{"class":90},[76,39814,370],{"class":82},[76,39816,34703],{"class":90},[76,39818,39819],{"class":78,"line":18919},[76,39820,36642],{"class":540},[76,39822,39823,39825,39827,39829,39831,39833,39835],{"class":78,"line":18931},[76,39824,34715],{"class":90},[76,39826,370],{"class":82},[76,39828,34720],{"class":90},[76,39830,34723],{"class":7296},[76,39832,370],{"class":82},[76,39834,669],{"class":119},[76,39836,130],{"class":90},[76,39838,39839],{"class":78,"line":18936},[76,39840,36663],{"class":540},[76,39842,39843,39845,39847],{"class":78,"line":18949},[76,39844,36668],{"class":90},[76,39846,370],{"class":82},[76,39848,36673],{"class":90},[76,39850,39851,39853,39855],{"class":78,"line":18954},[76,39852,36678],{"class":90},[76,39854,370],{"class":82},[76,39856,36683],{"class":90},[76,39858,39859,39861,39863,39865,39867,39869,39871,39873],{"class":78,"line":18959},[76,39860,36688],{"class":119},[76,39862,123],{"class":90},[76,39864,36693],{"class":126},[76,39866,36696],{"class":90},[76,39868,36699],{"class":126},[76,39870,2642],{"class":90},[76,39872,36704],{"class":126},[76,39874,36707],{"class":90},[889,39876,39878],{"id":39877},"_22vgg","2.2.VGG",[24047,39880,39882],{"id":39881},"_221原理","2.2.1.原理",[19,39884,39885],{},[3583,39886],{"alt":71,"src":39887},"\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,39889,39890],{},[3583,39891],{"alt":71,"src":39892},"\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,39894,39895],{},[3583,39896],{"alt":71,"src":39897},"\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,39899,39900],{},"参数详细描述：",[19,39902,39903],{},[3583,39904],{"alt":71,"src":39905},"\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,39907,39908],{},[3583,39909],{"alt":71,"src":39910},"\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,39912,39913],{},[3583,39914],{"alt":71,"src":39915},"\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,39917,39918],{},[3583,39919],{"alt":71,"src":39920},"\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,39922,39923],{},[3583,39924],{"alt":71,"src":39925},"\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",[24047,39927,39929],{"id":39928},"_222代码实现","2.2.2.代码实现",[26,39931,39932],{},[29,39933,39934],{},"网络搭建",[66,39936,39938],{"className":68,"code":39937,"language":70,"meta":71,"style":71},"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",[73,39939,39940,39946,39958,39968,39978,39982,39999,40007,40026,40031,40036,40048,40086,40091,40127,40131,40160,40165,40170,40181,40217,40221,40257,40261,40289,40293,40298,40309,40345,40349,40385,40389,40425,40429,40457,40461,40466,40477,40514,40518,40554,40558,40594,40598,40626,40630,40635,40646,40682,40686,40722,40726,40762,40766,40794,40798,40803,40814,40819,40824,40829,40850,40854,40866,40870,40882,40886,40890,40895,40900,40915,40920,40930,40935,40950,40955,40972,40977,40986,40991,41001,41006,41011,41025,41030,41044,41052,41056,41060,41068,41079,41090,41101,41112,41123,41134,41140,41144,41149,41162,41182,41188,41197],{"__ignoreMap":71},[76,39941,39942,39944],{"class":78,"line":79},[76,39943,32438],{"class":82},[76,39945,32441],{"class":90},[76,39947,39948,39950,39953,39955],{"class":78,"line":94},[76,39949,32781],{"class":82},[76,39951,39952],{"class":90}," sympy.core.sympify ",[76,39954,32438],{"class":82},[76,39956,39957],{"class":90}," kernS\n",[76,39959,39960,39962,39964,39966],{"class":78,"line":133},[76,39961,32781],{"class":82},[76,39963,32784],{"class":90},[76,39965,32438],{"class":82},[76,39967,32789],{"class":90},[76,39969,39970,39972,39974,39976],{"class":78,"line":145},[76,39971,32781],{"class":82},[76,39973,32801],{"class":90},[76,39975,32438],{"class":82},[76,39977,32806],{"class":90},[76,39979,39980],{"class":78,"line":152},[76,39981,149],{"emptyLinePlaceholder":148},[76,39983,39984,39986,39989,39991,39993,39995,39997],{"class":78,"line":157},[76,39985,16747],{"class":82},[76,39987,39988],{"class":86}," VGG16",[76,39990,123],{"class":90},[76,39992,32822],{"class":86},[76,39994,2819],{"class":90},[76,39996,32827],{"class":86},[76,39998,32830],{"class":90},[76,40000,40001,40003,40005],{"class":78,"line":246},[76,40002,32845],{"class":82},[76,40004,32848],{"class":119},[76,40006,32851],{"class":90},[76,40008,40009,40011,40013,40016,40018,40020,40022,40024],{"class":78,"line":251},[76,40010,32861],{"class":119},[76,40012,123],{"class":90},[76,40014,40015],{"class":119},"VGG16",[76,40017,405],{"class":90},[76,40019,32867],{"class":119},[76,40021,32870],{"class":90},[76,40023,32873],{"class":119},[76,40025,4072],{"class":90},[76,40027,40028],{"class":78,"line":257},[76,40029,40030],{"class":540},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[76,40032,40033],{"class":78,"line":641},[76,40034,40035],{"class":540},"        # 这里用的是灰度图\n",[76,40037,40038,40040,40043,40045],{"class":78,"line":646},[76,40039,32889],{"class":119},[76,40041,40042],{"class":90},".block1",[76,40044,370],{"class":82},[76,40046,40047],{"class":90},"nn.Sequential(\n",[76,40049,40050,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083],{"class":78,"line":659},[76,40051,40052],{"class":90},"            nn.Conv2d(",[76,40054,32900],{"class":7296},[76,40056,370],{"class":82},[76,40058,669],{"class":119},[76,40060,2642],{"class":90},[76,40062,32909],{"class":7296},[76,40064,370],{"class":82},[76,40066,2469],{"class":119},[76,40068,2642],{"class":90},[76,40070,32918],{"class":7296},[76,40072,370],{"class":82},[76,40074,2339],{"class":119},[76,40076,2642],{"class":90},[76,40078,32927],{"class":7296},[76,40080,370],{"class":82},[76,40082,669],{"class":119},[76,40084,40085],{"class":90},"),\n",[76,40087,40088],{"class":78,"line":1608},[76,40089,40090],{"class":90},"            nn.ReLU(),\n",[76,40092,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125],{"class":78,"line":1632},[76,40094,40052],{"class":90},[76,40096,32900],{"class":7296},[76,40098,370],{"class":82},[76,40100,2469],{"class":119},[76,40102,2642],{"class":90},[76,40104,32909],{"class":7296},[76,40106,370],{"class":82},[76,40108,2469],{"class":119},[76,40110,2642],{"class":90},[76,40112,32918],{"class":7296},[76,40114,370],{"class":82},[76,40116,2339],{"class":119},[76,40118,2642],{"class":90},[76,40120,32927],{"class":7296},[76,40122,370],{"class":82},[76,40124,669],{"class":119},[76,40126,40085],{"class":90},[76,40128,40129],{"class":78,"line":1637},[76,40130,40090],{"class":90},[76,40132,40133,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158],{"class":78,"line":1642},[76,40134,40135],{"class":90},"            nn.MaxPool2d(",[76,40137,32918],{"class":7296},[76,40139,370],{"class":82},[76,40141,2345],{"class":119},[76,40143,2642],{"class":90},[76,40145,32973],{"class":7296},[76,40147,370],{"class":82},[76,40149,2345],{"class":119},[76,40151,2642],{"class":90},[76,40153,32927],{"class":7296},[76,40155,370],{"class":82},[76,40157,1294],{"class":119},[76,40159,130],{"class":90},[76,40161,40162],{"class":78,"line":1652},[76,40163,40164],{"class":90},"        )\n",[76,40166,40167],{"class":78,"line":1660},[76,40168,40169],{"class":540},"        # 第二层\n",[76,40171,40172,40174,40177,40179],{"class":78,"line":1683},[76,40173,32889],{"class":119},[76,40175,40176],{"class":90},".block2",[76,40178,370],{"class":82},[76,40180,40047],{"class":90},[76,40182,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215],{"class":78,"line":1698},[76,40184,40052],{"class":90},[76,40186,32900],{"class":7296},[76,40188,370],{"class":82},[76,40190,2469],{"class":119},[76,40192,2642],{"class":90},[76,40194,32909],{"class":7296},[76,40196,370],{"class":82},[76,40198,34110],{"class":119},[76,40200,2642],{"class":90},[76,40202,32918],{"class":7296},[76,40204,370],{"class":82},[76,40206,2339],{"class":119},[76,40208,2642],{"class":90},[76,40210,32927],{"class":7296},[76,40212,370],{"class":82},[76,40214,669],{"class":119},[76,40216,40085],{"class":90},[76,40218,40219],{"class":78,"line":1711},[76,40220,40090],{"class":90},[76,40222,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255],{"class":78,"line":1717},[76,40224,40052],{"class":90},[76,40226,32900],{"class":7296},[76,40228,370],{"class":82},[76,40230,34110],{"class":119},[76,40232,2642],{"class":90},[76,40234,32909],{"class":7296},[76,40236,370],{"class":82},[76,40238,34110],{"class":119},[76,40240,2642],{"class":90},[76,40242,32918],{"class":7296},[76,40244,370],{"class":82},[76,40246,2339],{"class":119},[76,40248,2642],{"class":90},[76,40250,32927],{"class":7296},[76,40252,370],{"class":82},[76,40254,669],{"class":119},[76,40256,40085],{"class":90},[76,40258,40259],{"class":78,"line":1728},[76,40260,40090],{"class":90},[76,40262,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287],{"class":78,"line":1740},[76,40264,40135],{"class":90},[76,40266,32918],{"class":7296},[76,40268,370],{"class":82},[76,40270,2345],{"class":119},[76,40272,2642],{"class":90},[76,40274,32973],{"class":7296},[76,40276,370],{"class":82},[76,40278,2345],{"class":119},[76,40280,2642],{"class":90},[76,40282,32927],{"class":7296},[76,40284,370],{"class":82},[76,40286,1294],{"class":119},[76,40288,130],{"class":90},[76,40290,40291],{"class":78,"line":1746},[76,40292,40164],{"class":90},[76,40294,40295],{"class":78,"line":1751},[76,40296,40297],{"class":540},"        # 第三层\n",[76,40299,40300,40302,40305,40307],{"class":78,"line":1756},[76,40301,32889],{"class":119},[76,40303,40304],{"class":90},".block3",[76,40306,370],{"class":82},[76,40308,40047],{"class":90},[76,40310,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343],{"class":78,"line":1766},[76,40312,40052],{"class":90},[76,40314,32900],{"class":7296},[76,40316,370],{"class":82},[76,40318,34110],{"class":119},[76,40320,2642],{"class":90},[76,40322,32909],{"class":7296},[76,40324,370],{"class":82},[76,40326,36908],{"class":119},[76,40328,2642],{"class":90},[76,40330,32918],{"class":7296},[76,40332,370],{"class":82},[76,40334,2339],{"class":119},[76,40336,2642],{"class":90},[76,40338,32927],{"class":7296},[76,40340,370],{"class":82},[76,40342,669],{"class":119},[76,40344,40085],{"class":90},[76,40346,40347],{"class":78,"line":1773},[76,40348,40090],{"class":90},[76,40350,40351,40353,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383],{"class":78,"line":1793},[76,40352,40052],{"class":90},[76,40354,32900],{"class":7296},[76,40356,370],{"class":82},[76,40358,36908],{"class":119},[76,40360,2642],{"class":90},[76,40362,32909],{"class":7296},[76,40364,370],{"class":82},[76,40366,36908],{"class":119},[76,40368,2642],{"class":90},[76,40370,32918],{"class":7296},[76,40372,370],{"class":82},[76,40374,2339],{"class":119},[76,40376,2642],{"class":90},[76,40378,32927],{"class":7296},[76,40380,370],{"class":82},[76,40382,669],{"class":119},[76,40384,40085],{"class":90},[76,40386,40387],{"class":78,"line":1806},[76,40388,40090],{"class":90},[76,40390,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423],{"class":78,"line":1817},[76,40392,40052],{"class":90},[76,40394,32900],{"class":7296},[76,40396,370],{"class":82},[76,40398,36908],{"class":119},[76,40400,2642],{"class":90},[76,40402,32909],{"class":7296},[76,40404,370],{"class":82},[76,40406,36908],{"class":119},[76,40408,2642],{"class":90},[76,40410,32918],{"class":7296},[76,40412,370],{"class":82},[76,40414,2339],{"class":119},[76,40416,2642],{"class":90},[76,40418,32927],{"class":7296},[76,40420,370],{"class":82},[76,40422,669],{"class":119},[76,40424,40085],{"class":90},[76,40426,40427],{"class":78,"line":1822},[76,40428,40090],{"class":90},[76,40430,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455],{"class":78,"line":1835},[76,40432,40135],{"class":90},[76,40434,32918],{"class":7296},[76,40436,370],{"class":82},[76,40438,2345],{"class":119},[76,40440,2642],{"class":90},[76,40442,32973],{"class":7296},[76,40444,370],{"class":82},[76,40446,2345],{"class":119},[76,40448,2642],{"class":90},[76,40450,32927],{"class":7296},[76,40452,370],{"class":82},[76,40454,1294],{"class":119},[76,40456,130],{"class":90},[76,40458,40459],{"class":78,"line":1847},[76,40460,40164],{"class":90},[76,40462,40463],{"class":78,"line":1852},[76,40464,40465],{"class":540},"        # 第四层\n",[76,40467,40468,40470,40473,40475],{"class":78,"line":1862},[76,40469,32889],{"class":119},[76,40471,40472],{"class":90},".block4",[76,40474,370],{"class":82},[76,40476,40047],{"class":90},[76,40478,40479,40481,40483,40485,40487,40489,40491,40493,40496,40498,40500,40502,40504,40506,40508,40510,40512],{"class":78,"line":1874},[76,40480,40052],{"class":90},[76,40482,32900],{"class":7296},[76,40484,370],{"class":82},[76,40486,36908],{"class":119},[76,40488,2642],{"class":90},[76,40490,32909],{"class":7296},[76,40492,370],{"class":82},[76,40494,40495],{"class":119},"512",[76,40497,2642],{"class":90},[76,40499,32918],{"class":7296},[76,40501,370],{"class":82},[76,40503,2339],{"class":119},[76,40505,2642],{"class":90},[76,40507,32927],{"class":7296},[76,40509,370],{"class":82},[76,40511,669],{"class":119},[76,40513,40085],{"class":90},[76,40515,40516],{"class":78,"line":1879},[76,40517,40090],{"class":90},[76,40519,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552],{"class":78,"line":1884},[76,40521,40052],{"class":90},[76,40523,32900],{"class":7296},[76,40525,370],{"class":82},[76,40527,40495],{"class":119},[76,40529,2642],{"class":90},[76,40531,32909],{"class":7296},[76,40533,370],{"class":82},[76,40535,40495],{"class":119},[76,40537,2642],{"class":90},[76,40539,32918],{"class":7296},[76,40541,370],{"class":82},[76,40543,2339],{"class":119},[76,40545,2642],{"class":90},[76,40547,32927],{"class":7296},[76,40549,370],{"class":82},[76,40551,669],{"class":119},[76,40553,40085],{"class":90},[76,40555,40556],{"class":78,"line":1889},[76,40557,40090],{"class":90},[76,40559,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586,40588,40590,40592],{"class":78,"line":1900},[76,40561,40052],{"class":90},[76,40563,32900],{"class":7296},[76,40565,370],{"class":82},[76,40567,40495],{"class":119},[76,40569,2642],{"class":90},[76,40571,32909],{"class":7296},[76,40573,370],{"class":82},[76,40575,40495],{"class":119},[76,40577,2642],{"class":90},[76,40579,32918],{"class":7296},[76,40581,370],{"class":82},[76,40583,2339],{"class":119},[76,40585,2642],{"class":90},[76,40587,32927],{"class":7296},[76,40589,370],{"class":82},[76,40591,669],{"class":119},[76,40593,40085],{"class":90},[76,40595,40596],{"class":78,"line":1906},[76,40597,40090],{"class":90},[76,40599,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624],{"class":78,"line":1924},[76,40601,40135],{"class":90},[76,40603,32918],{"class":7296},[76,40605,370],{"class":82},[76,40607,2345],{"class":119},[76,40609,2642],{"class":90},[76,40611,32973],{"class":7296},[76,40613,370],{"class":82},[76,40615,2345],{"class":119},[76,40617,2642],{"class":90},[76,40619,32927],{"class":7296},[76,40621,370],{"class":82},[76,40623,1294],{"class":119},[76,40625,130],{"class":90},[76,40627,40628],{"class":78,"line":1929},[76,40629,40164],{"class":90},[76,40631,40632],{"class":78,"line":1944},[76,40633,40634],{"class":540},"        # 第五层\n",[76,40636,40637,40639,40642,40644],{"class":78,"line":1950},[76,40638,32889],{"class":119},[76,40640,40641],{"class":90},".block5",[76,40643,370],{"class":82},[76,40645,40047],{"class":90},[76,40647,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668,40670,40672,40674,40676,40678,40680],{"class":78,"line":1965},[76,40649,40052],{"class":90},[76,40651,32900],{"class":7296},[76,40653,370],{"class":82},[76,40655,40495],{"class":119},[76,40657,2642],{"class":90},[76,40659,32909],{"class":7296},[76,40661,370],{"class":82},[76,40663,40495],{"class":119},[76,40665,2642],{"class":90},[76,40667,32918],{"class":7296},[76,40669,370],{"class":82},[76,40671,2339],{"class":119},[76,40673,2642],{"class":90},[76,40675,32927],{"class":7296},[76,40677,370],{"class":82},[76,40679,669],{"class":119},[76,40681,40085],{"class":90},[76,40683,40684],{"class":78,"line":1971},[76,40685,40090],{"class":90},[76,40687,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720],{"class":78,"line":1985},[76,40689,40052],{"class":90},[76,40691,32900],{"class":7296},[76,40693,370],{"class":82},[76,40695,40495],{"class":119},[76,40697,2642],{"class":90},[76,40699,32909],{"class":7296},[76,40701,370],{"class":82},[76,40703,40495],{"class":119},[76,40705,2642],{"class":90},[76,40707,32918],{"class":7296},[76,40709,370],{"class":82},[76,40711,2339],{"class":119},[76,40713,2642],{"class":90},[76,40715,32927],{"class":7296},[76,40717,370],{"class":82},[76,40719,669],{"class":119},[76,40721,40085],{"class":90},[76,40723,40724],{"class":78,"line":1991},[76,40725,40090],{"class":90},[76,40727,40728,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754,40756,40758,40760],{"class":78,"line":2005},[76,40729,40052],{"class":90},[76,40731,32900],{"class":7296},[76,40733,370],{"class":82},[76,40735,40495],{"class":119},[76,40737,2642],{"class":90},[76,40739,32909],{"class":7296},[76,40741,370],{"class":82},[76,40743,40495],{"class":119},[76,40745,2642],{"class":90},[76,40747,32918],{"class":7296},[76,40749,370],{"class":82},[76,40751,2339],{"class":119},[76,40753,2642],{"class":90},[76,40755,32927],{"class":7296},[76,40757,370],{"class":82},[76,40759,669],{"class":119},[76,40761,40085],{"class":90},[76,40763,40764],{"class":78,"line":2017},[76,40765,40090],{"class":90},[76,40767,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792],{"class":78,"line":2023},[76,40769,40135],{"class":90},[76,40771,32918],{"class":7296},[76,40773,370],{"class":82},[76,40775,2345],{"class":119},[76,40777,2642],{"class":90},[76,40779,32973],{"class":7296},[76,40781,370],{"class":82},[76,40783,2345],{"class":119},[76,40785,2642],{"class":90},[76,40787,32927],{"class":7296},[76,40789,370],{"class":82},[76,40791,1294],{"class":119},[76,40793,130],{"class":90},[76,40795,40796],{"class":78,"line":2031},[76,40797,40164],{"class":90},[76,40799,40800],{"class":78,"line":11880},[76,40801,40802],{"class":540},"        # 全连接层\n",[76,40804,40805,40807,40810,40812],{"class":78,"line":11901},[76,40806,32889],{"class":119},[76,40808,40809],{"class":90},".block6",[76,40811,370],{"class":82},[76,40813,40047],{"class":90},[76,40815,40816],{"class":78,"line":11907},[76,40817,40818],{"class":540},"            # 平展操作\n",[76,40820,40821],{"class":78,"line":11921},[76,40822,40823],{"class":540},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[76,40825,40826],{"class":78,"line":11927},[76,40827,40828],{"class":90},"            nn.Flatten(),\n",[76,40830,40831,40834,40836,40838,40840,40842,40844,40846,40848],{"class":78,"line":11954},[76,40832,40833],{"class":90},"            nn.Linear(",[76,40835,2633],{"class":119},[76,40837,2718],{"class":82},[76,40839,2633],{"class":119},[76,40841,2718],{"class":82},[76,40843,40495],{"class":119},[76,40845,2642],{"class":90},[76,40847,36908],{"class":119},[76,40849,40085],{"class":90},[76,40851,40852],{"class":78,"line":11963},[76,40853,40090],{"class":90},[76,40855,40856,40858,40860,40862,40864],{"class":78,"line":11969},[76,40857,40833],{"class":90},[76,40859,36908],{"class":119},[76,40861,2642],{"class":90},[76,40863,34110],{"class":119},[76,40865,40085],{"class":90},[76,40867,40868],{"class":78,"line":11977},[76,40869,40090],{"class":90},[76,40871,40872,40874,40876,40878,40880],{"class":78,"line":11982},[76,40873,40833],{"class":90},[76,40875,34110],{"class":119},[76,40877,2642],{"class":90},[76,40879,402],{"class":119},[76,40881,130],{"class":90},[76,40883,40884],{"class":78,"line":18654},[76,40885,40164],{"class":90},[76,40887,40888],{"class":78,"line":18660},[76,40889,149],{"emptyLinePlaceholder":148},[76,40891,40892],{"class":78,"line":18683},[76,40893,40894],{"class":540},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,40896,40897],{"class":78,"line":18689},[76,40898,40899],{"class":540},"        # 循环遍历模型\n",[76,40901,40902,40904,40907,40909,40912],{"class":78,"line":18712},[76,40903,5488],{"class":82},[76,40905,40906],{"class":90}," m ",[76,40908,1475],{"class":82},[76,40910,40911],{"class":119}," self",[76,40913,40914],{"class":90},".modules():\n",[76,40916,40917],{"class":78,"line":18726},[76,40918,40919],{"class":540},"            # print(m)\n",[76,40921,40922,40924,40927],{"class":78,"line":18746},[76,40923,6724],{"class":82},[76,40925,40926],{"class":119}," isinstance",[76,40928,40929],{"class":90},"(m,nn.Conv2d):\n",[76,40931,40932],{"class":78,"line":18752},[76,40933,40934],{"class":540},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,40936,40937,40940,40943,40945,40948],{"class":78,"line":18763},[76,40938,40939],{"class":90},"                nn.init.kaiming_normal_(m.weight,",[76,40941,40942],{"class":7296},"nonlinearity",[76,40944,370],{"class":82},[76,40946,40947],{"class":126},"'relu'",[76,40949,130],{"class":90},[76,40951,40952],{"class":78,"line":18786},[76,40953,40954],{"class":540},"                # 判断b参数是否存在\n",[76,40956,40957,40960,40963,40965,40968,40970],{"class":78,"line":18808},[76,40958,40959],{"class":82},"                if",[76,40961,40962],{"class":90}," m.bias ",[76,40964,729],{"class":82},[76,40966,40967],{"class":82}," not",[76,40969,732],{"class":119},[76,40971,590],{"class":90},[76,40973,40974],{"class":78,"line":18813},[76,40975,40976],{"class":540},"                    # 如果参数不存在的化初始化b=0\n",[76,40978,40979,40982,40984],{"class":78,"line":18819},[76,40980,40981],{"class":90},"                    nn.init.constant_(m.bias,",[76,40983,1294],{"class":119},[76,40985,130],{"class":90},[76,40987,40988],{"class":78,"line":18833},[76,40989,40990],{"class":540},"            # 全连接层初始化\n",[76,40992,40993,40996,40998],{"class":78,"line":18846},[76,40994,40995],{"class":82},"            elif",[76,40997,40926],{"class":119},[76,40999,41000],{"class":90},"(m,nn.Linear):\n",[76,41002,41003],{"class":78,"line":18851},[76,41004,41005],{"class":540},"                # 这个初始化方法是利用的是正太分布的方式\n",[76,41007,41008],{"class":78,"line":18865},[76,41009,41010],{"class":540},"                # 均值为0，方差为0.01\n",[76,41012,41013,41016,41018,41020,41023],{"class":78,"line":18870},[76,41014,41015],{"class":90},"                nn.init.normal_(m.weight,",[76,41017,1294],{"class":119},[76,41019,2642],{"class":90},[76,41021,41022],{"class":119},"0.01",[76,41024,130],{"class":90},[76,41026,41027],{"class":78,"line":18876},[76,41028,41029],{"class":540},"                # 初始化b参数\n",[76,41031,41032,41034,41036,41038,41040,41042],{"class":78,"line":18881},[76,41033,40959],{"class":82},[76,41035,40962],{"class":90},[76,41037,729],{"class":82},[76,41039,40967],{"class":82},[76,41041,732],{"class":119},[76,41043,590],{"class":90},[76,41045,41046,41048,41050],{"class":78,"line":18895},[76,41047,40981],{"class":90},[76,41049,1294],{"class":119},[76,41051,130],{"class":90},[76,41053,41054],{"class":78,"line":18900},[76,41055,149],{"emptyLinePlaceholder":148},[76,41057,41058],{"class":78,"line":18905},[76,41059,37203],{"class":540},[76,41061,41062,41064,41066],{"class":78,"line":18919},[76,41063,32845],{"class":82},[76,41065,33137],{"class":86},[76,41067,33140],{"class":90},[76,41069,41070,41072,41074,41076],{"class":78,"line":18931},[76,41071,33145],{"class":90},[76,41073,370],{"class":82},[76,41075,32867],{"class":119},[76,41077,41078],{"class":90},".block1(x)\n",[76,41080,41081,41083,41085,41087],{"class":78,"line":18936},[76,41082,33145],{"class":90},[76,41084,370],{"class":82},[76,41086,32867],{"class":119},[76,41088,41089],{"class":90},".block2(x)\n",[76,41091,41092,41094,41096,41098],{"class":78,"line":18949},[76,41093,33145],{"class":90},[76,41095,370],{"class":82},[76,41097,32867],{"class":119},[76,41099,41100],{"class":90},".block3(x)\n",[76,41102,41103,41105,41107,41109],{"class":78,"line":18954},[76,41104,33145],{"class":90},[76,41106,370],{"class":82},[76,41108,32867],{"class":119},[76,41110,41111],{"class":90},".block4(x)\n",[76,41113,41114,41116,41118,41120],{"class":78,"line":18959},[76,41115,33145],{"class":90},[76,41117,370],{"class":82},[76,41119,32867],{"class":119},[76,41121,41122],{"class":90},".block5(x)\n",[76,41124,41125,41127,41129,41131],{"class":78,"line":18964},[76,41126,33145],{"class":90},[76,41128,370],{"class":82},[76,41130,32867],{"class":119},[76,41132,41133],{"class":90},".block6(x)\n",[76,41135,41136,41138],{"class":78,"line":18977},[76,41137,595],{"class":82},[76,41139,33253],{"class":90},[76,41141,41142],{"class":78,"line":18982},[76,41143,149],{"emptyLinePlaceholder":148},[76,41145,41146],{"class":78,"line":34671},[76,41147,41148],{"class":540},"# 验证模型\n",[76,41150,41151,41153,41155,41157,41160],{"class":78,"line":34677},[76,41152,723],{"class":82},[76,41154,33264],{"class":119},[76,41156,1250],{"class":82},[76,41158,41159],{"class":126},"'__main__'",[76,41161,590],{"class":90},[76,41163,41164,41166,41168,41170,41172,41174,41176,41178,41180],{"class":78,"line":34683},[76,41165,33281],{"class":90},[76,41167,370],{"class":82},[76,41169,32496],{"class":90},[76,41171,33288],{"class":126},[76,41173,3811],{"class":82},[76,41175,33293],{"class":90},[76,41177,1328],{"class":82},[76,41179,32521],{"class":126},[76,41181,130],{"class":90},[76,41183,41184,41186],{"class":78,"line":34689},[76,41185,120],{"class":119},[76,41187,32530],{"class":90},[76,41189,41190,41192,41194],{"class":78,"line":34695},[76,41191,33333],{"class":90},[76,41193,370],{"class":82},[76,41195,41196],{"class":90},"VGG16().to(device)\n",[76,41198,41199,41201,41203,41205,41207,41209,41211,41213],{"class":78,"line":34706},[76,41200,120],{"class":119},[76,41202,33345],{"class":90},[76,41204,669],{"class":119},[76,41206,2642],{"class":90},[76,41208,33544],{"class":119},[76,41210,2642],{"class":90},[76,41212,33544],{"class":119},[76,41214,33358],{"class":90},[26,41216,41217],{"start":94},[29,41218,41219],{},"训练代码",[19,41221,41222],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41224,41225],{},"解决方式:",[19,41227,41228],{},"①权重初始化",[66,41230,41232],{"className":68,"code":41231,"language":70,"meta":71,"style":71},"# 权重初始化,保证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",[73,41233,41234,41239,41244,41256,41261,41269,41274,41287,41292,41306,41311,41320,41325,41333,41338,41343,41356,41361,41375],{"__ignoreMap":71},[76,41235,41236],{"class":78,"line":79},[76,41237,41238],{"class":540},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,41240,41241],{"class":78,"line":94},[76,41242,41243],{"class":540},"# 循环遍历模型\n",[76,41245,41246,41248,41250,41252,41254],{"class":78,"line":133},[76,41247,5112],{"class":82},[76,41249,40906],{"class":90},[76,41251,1475],{"class":82},[76,41253,40911],{"class":119},[76,41255,40914],{"class":90},[76,41257,41258],{"class":78,"line":145},[76,41259,41260],{"class":540},"    # print(m)\n",[76,41262,41263,41265,41267],{"class":78,"line":152},[76,41264,578],{"class":82},[76,41266,40926],{"class":119},[76,41268,40929],{"class":90},[76,41270,41271],{"class":78,"line":157},[76,41272,41273],{"class":540},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,41275,41276,41279,41281,41283,41285],{"class":78,"line":246},[76,41277,41278],{"class":90},"        nn.init.kaiming_normal_(m.weight,",[76,41280,40942],{"class":7296},[76,41282,370],{"class":82},[76,41284,40947],{"class":126},[76,41286,130],{"class":90},[76,41288,41289],{"class":78,"line":251},[76,41290,41291],{"class":540},"        # 判断b参数是否存在\n",[76,41293,41294,41296,41298,41300,41302,41304],{"class":78,"line":257},[76,41295,4592],{"class":82},[76,41297,40962],{"class":90},[76,41299,729],{"class":82},[76,41301,40967],{"class":82},[76,41303,732],{"class":119},[76,41305,590],{"class":90},[76,41307,41308],{"class":78,"line":641},[76,41309,41310],{"class":540},"            # 如果参数不存在的化初始化b=0\n",[76,41312,41313,41316,41318],{"class":78,"line":646},[76,41314,41315],{"class":90},"            nn.init.constant_(m.bias,",[76,41317,1294],{"class":119},[76,41319,130],{"class":90},[76,41321,41322],{"class":78,"line":659},[76,41323,41324],{"class":540},"    # 全连接层初始化\n",[76,41326,41327,41329,41331],{"class":78,"line":1608},[76,41328,1953],{"class":82},[76,41330,40926],{"class":119},[76,41332,41000],{"class":90},[76,41334,41335],{"class":78,"line":1632},[76,41336,41337],{"class":540},"        # 这个初始化方法是利用的是正太分布的方式\n",[76,41339,41340],{"class":78,"line":1637},[76,41341,41342],{"class":540},"        # 均值为0，方差为0.01\n",[76,41344,41345,41348,41350,41352,41354],{"class":78,"line":1642},[76,41346,41347],{"class":90},"        nn.init.normal_(m.weight,",[76,41349,1294],{"class":119},[76,41351,2642],{"class":90},[76,41353,41022],{"class":119},[76,41355,130],{"class":90},[76,41357,41358],{"class":78,"line":1652},[76,41359,41360],{"class":540},"        # 初始化b参数\n",[76,41362,41363,41365,41367,41369,41371,41373],{"class":78,"line":1660},[76,41364,4592],{"class":82},[76,41366,40962],{"class":90},[76,41368,729],{"class":82},[76,41370,40967],{"class":82},[76,41372,732],{"class":119},[76,41374,590],{"class":90},[76,41376,41377,41379,41381],{"class":78,"line":1683},[76,41378,41315],{"class":90},[76,41380,1294],{"class":119},[76,41382,130],{"class":90},[19,41384,41385],{},"②尽可能地增加批次",[19,41387,41388],{},"训练完整代码：",[66,41390,41391],{"className":68,"code":39937,"language":70,"meta":71,"style":71},[73,41392,41393,41399,41409,41419,41429,41433,41449,41457,41475,41479,41483,41493,41529,41533,41569,41573,41601,41605,41609,41619,41655,41659,41695,41699,41727,41731,41735,41745,41781,41785,41821,41825,41861,41865,41893,41897,41901,41911,41947,41951,41987,41991,42027,42031,42059,42063,42067,42077,42113,42117,42153,42157,42193,42197,42225,42229,42233,42243,42247,42251,42255,42275,42279,42291,42295,42307,42311,42315,42319,42323,42335,42339,42347,42351,42363,42367,42381,42385,42393,42397,42405,42409,42413,42425,42429,42443,42451,42455,42459,42467,42477,42487,42497,42507,42517,42527,42533,42537,42541,42553,42573,42579,42587],{"__ignoreMap":71},[76,41394,41395,41397],{"class":78,"line":79},[76,41396,32438],{"class":82},[76,41398,32441],{"class":90},[76,41400,41401,41403,41405,41407],{"class":78,"line":94},[76,41402,32781],{"class":82},[76,41404,39952],{"class":90},[76,41406,32438],{"class":82},[76,41408,39957],{"class":90},[76,41410,41411,41413,41415,41417],{"class":78,"line":133},[76,41412,32781],{"class":82},[76,41414,32784],{"class":90},[76,41416,32438],{"class":82},[76,41418,32789],{"class":90},[76,41420,41421,41423,41425,41427],{"class":78,"line":145},[76,41422,32781],{"class":82},[76,41424,32801],{"class":90},[76,41426,32438],{"class":82},[76,41428,32806],{"class":90},[76,41430,41431],{"class":78,"line":152},[76,41432,149],{"emptyLinePlaceholder":148},[76,41434,41435,41437,41439,41441,41443,41445,41447],{"class":78,"line":157},[76,41436,16747],{"class":82},[76,41438,39988],{"class":86},[76,41440,123],{"class":90},[76,41442,32822],{"class":86},[76,41444,2819],{"class":90},[76,41446,32827],{"class":86},[76,41448,32830],{"class":90},[76,41450,41451,41453,41455],{"class":78,"line":246},[76,41452,32845],{"class":82},[76,41454,32848],{"class":119},[76,41456,32851],{"class":90},[76,41458,41459,41461,41463,41465,41467,41469,41471,41473],{"class":78,"line":251},[76,41460,32861],{"class":119},[76,41462,123],{"class":90},[76,41464,40015],{"class":119},[76,41466,405],{"class":90},[76,41468,32867],{"class":119},[76,41470,32870],{"class":90},[76,41472,32873],{"class":119},[76,41474,4072],{"class":90},[76,41476,41477],{"class":78,"line":257},[76,41478,40030],{"class":540},[76,41480,41481],{"class":78,"line":641},[76,41482,40035],{"class":540},[76,41484,41485,41487,41489,41491],{"class":78,"line":646},[76,41486,32889],{"class":119},[76,41488,40042],{"class":90},[76,41490,370],{"class":82},[76,41492,40047],{"class":90},[76,41494,41495,41497,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519,41521,41523,41525,41527],{"class":78,"line":659},[76,41496,40052],{"class":90},[76,41498,32900],{"class":7296},[76,41500,370],{"class":82},[76,41502,669],{"class":119},[76,41504,2642],{"class":90},[76,41506,32909],{"class":7296},[76,41508,370],{"class":82},[76,41510,2469],{"class":119},[76,41512,2642],{"class":90},[76,41514,32918],{"class":7296},[76,41516,370],{"class":82},[76,41518,2339],{"class":119},[76,41520,2642],{"class":90},[76,41522,32927],{"class":7296},[76,41524,370],{"class":82},[76,41526,669],{"class":119},[76,41528,40085],{"class":90},[76,41530,41531],{"class":78,"line":1608},[76,41532,40090],{"class":90},[76,41534,41535,41537,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559,41561,41563,41565,41567],{"class":78,"line":1632},[76,41536,40052],{"class":90},[76,41538,32900],{"class":7296},[76,41540,370],{"class":82},[76,41542,2469],{"class":119},[76,41544,2642],{"class":90},[76,41546,32909],{"class":7296},[76,41548,370],{"class":82},[76,41550,2469],{"class":119},[76,41552,2642],{"class":90},[76,41554,32918],{"class":7296},[76,41556,370],{"class":82},[76,41558,2339],{"class":119},[76,41560,2642],{"class":90},[76,41562,32927],{"class":7296},[76,41564,370],{"class":82},[76,41566,669],{"class":119},[76,41568,40085],{"class":90},[76,41570,41571],{"class":78,"line":1637},[76,41572,40090],{"class":90},[76,41574,41575,41577,41579,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599],{"class":78,"line":1642},[76,41576,40135],{"class":90},[76,41578,32918],{"class":7296},[76,41580,370],{"class":82},[76,41582,2345],{"class":119},[76,41584,2642],{"class":90},[76,41586,32973],{"class":7296},[76,41588,370],{"class":82},[76,41590,2345],{"class":119},[76,41592,2642],{"class":90},[76,41594,32927],{"class":7296},[76,41596,370],{"class":82},[76,41598,1294],{"class":119},[76,41600,130],{"class":90},[76,41602,41603],{"class":78,"line":1652},[76,41604,40164],{"class":90},[76,41606,41607],{"class":78,"line":1660},[76,41608,40169],{"class":540},[76,41610,41611,41613,41615,41617],{"class":78,"line":1683},[76,41612,32889],{"class":119},[76,41614,40176],{"class":90},[76,41616,370],{"class":82},[76,41618,40047],{"class":90},[76,41620,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647,41649,41651,41653],{"class":78,"line":1698},[76,41622,40052],{"class":90},[76,41624,32900],{"class":7296},[76,41626,370],{"class":82},[76,41628,2469],{"class":119},[76,41630,2642],{"class":90},[76,41632,32909],{"class":7296},[76,41634,370],{"class":82},[76,41636,34110],{"class":119},[76,41638,2642],{"class":90},[76,41640,32918],{"class":7296},[76,41642,370],{"class":82},[76,41644,2339],{"class":119},[76,41646,2642],{"class":90},[76,41648,32927],{"class":7296},[76,41650,370],{"class":82},[76,41652,669],{"class":119},[76,41654,40085],{"class":90},[76,41656,41657],{"class":78,"line":1711},[76,41658,40090],{"class":90},[76,41660,41661,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685,41687,41689,41691,41693],{"class":78,"line":1717},[76,41662,40052],{"class":90},[76,41664,32900],{"class":7296},[76,41666,370],{"class":82},[76,41668,34110],{"class":119},[76,41670,2642],{"class":90},[76,41672,32909],{"class":7296},[76,41674,370],{"class":82},[76,41676,34110],{"class":119},[76,41678,2642],{"class":90},[76,41680,32918],{"class":7296},[76,41682,370],{"class":82},[76,41684,2339],{"class":119},[76,41686,2642],{"class":90},[76,41688,32927],{"class":7296},[76,41690,370],{"class":82},[76,41692,669],{"class":119},[76,41694,40085],{"class":90},[76,41696,41697],{"class":78,"line":1728},[76,41698,40090],{"class":90},[76,41700,41701,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725],{"class":78,"line":1740},[76,41702,40135],{"class":90},[76,41704,32918],{"class":7296},[76,41706,370],{"class":82},[76,41708,2345],{"class":119},[76,41710,2642],{"class":90},[76,41712,32973],{"class":7296},[76,41714,370],{"class":82},[76,41716,2345],{"class":119},[76,41718,2642],{"class":90},[76,41720,32927],{"class":7296},[76,41722,370],{"class":82},[76,41724,1294],{"class":119},[76,41726,130],{"class":90},[76,41728,41729],{"class":78,"line":1746},[76,41730,40164],{"class":90},[76,41732,41733],{"class":78,"line":1751},[76,41734,40297],{"class":540},[76,41736,41737,41739,41741,41743],{"class":78,"line":1756},[76,41738,32889],{"class":119},[76,41740,40304],{"class":90},[76,41742,370],{"class":82},[76,41744,40047],{"class":90},[76,41746,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779],{"class":78,"line":1766},[76,41748,40052],{"class":90},[76,41750,32900],{"class":7296},[76,41752,370],{"class":82},[76,41754,34110],{"class":119},[76,41756,2642],{"class":90},[76,41758,32909],{"class":7296},[76,41760,370],{"class":82},[76,41762,36908],{"class":119},[76,41764,2642],{"class":90},[76,41766,32918],{"class":7296},[76,41768,370],{"class":82},[76,41770,2339],{"class":119},[76,41772,2642],{"class":90},[76,41774,32927],{"class":7296},[76,41776,370],{"class":82},[76,41778,669],{"class":119},[76,41780,40085],{"class":90},[76,41782,41783],{"class":78,"line":1773},[76,41784,40090],{"class":90},[76,41786,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819],{"class":78,"line":1793},[76,41788,40052],{"class":90},[76,41790,32900],{"class":7296},[76,41792,370],{"class":82},[76,41794,36908],{"class":119},[76,41796,2642],{"class":90},[76,41798,32909],{"class":7296},[76,41800,370],{"class":82},[76,41802,36908],{"class":119},[76,41804,2642],{"class":90},[76,41806,32918],{"class":7296},[76,41808,370],{"class":82},[76,41810,2339],{"class":119},[76,41812,2642],{"class":90},[76,41814,32927],{"class":7296},[76,41816,370],{"class":82},[76,41818,669],{"class":119},[76,41820,40085],{"class":90},[76,41822,41823],{"class":78,"line":1806},[76,41824,40090],{"class":90},[76,41826,41827,41829,41831,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859],{"class":78,"line":1817},[76,41828,40052],{"class":90},[76,41830,32900],{"class":7296},[76,41832,370],{"class":82},[76,41834,36908],{"class":119},[76,41836,2642],{"class":90},[76,41838,32909],{"class":7296},[76,41840,370],{"class":82},[76,41842,36908],{"class":119},[76,41844,2642],{"class":90},[76,41846,32918],{"class":7296},[76,41848,370],{"class":82},[76,41850,2339],{"class":119},[76,41852,2642],{"class":90},[76,41854,32927],{"class":7296},[76,41856,370],{"class":82},[76,41858,669],{"class":119},[76,41860,40085],{"class":90},[76,41862,41863],{"class":78,"line":1822},[76,41864,40090],{"class":90},[76,41866,41867,41869,41871,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891],{"class":78,"line":1835},[76,41868,40135],{"class":90},[76,41870,32918],{"class":7296},[76,41872,370],{"class":82},[76,41874,2345],{"class":119},[76,41876,2642],{"class":90},[76,41878,32973],{"class":7296},[76,41880,370],{"class":82},[76,41882,2345],{"class":119},[76,41884,2642],{"class":90},[76,41886,32927],{"class":7296},[76,41888,370],{"class":82},[76,41890,1294],{"class":119},[76,41892,130],{"class":90},[76,41894,41895],{"class":78,"line":1847},[76,41896,40164],{"class":90},[76,41898,41899],{"class":78,"line":1852},[76,41900,40465],{"class":540},[76,41902,41903,41905,41907,41909],{"class":78,"line":1862},[76,41904,32889],{"class":119},[76,41906,40472],{"class":90},[76,41908,370],{"class":82},[76,41910,40047],{"class":90},[76,41912,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941,41943,41945],{"class":78,"line":1874},[76,41914,40052],{"class":90},[76,41916,32900],{"class":7296},[76,41918,370],{"class":82},[76,41920,36908],{"class":119},[76,41922,2642],{"class":90},[76,41924,32909],{"class":7296},[76,41926,370],{"class":82},[76,41928,40495],{"class":119},[76,41930,2642],{"class":90},[76,41932,32918],{"class":7296},[76,41934,370],{"class":82},[76,41936,2339],{"class":119},[76,41938,2642],{"class":90},[76,41940,32927],{"class":7296},[76,41942,370],{"class":82},[76,41944,669],{"class":119},[76,41946,40085],{"class":90},[76,41948,41949],{"class":78,"line":1879},[76,41950,40090],{"class":90},[76,41952,41953,41955,41957,41959,41961,41963,41965,41967,41969,41971,41973,41975,41977,41979,41981,41983,41985],{"class":78,"line":1884},[76,41954,40052],{"class":90},[76,41956,32900],{"class":7296},[76,41958,370],{"class":82},[76,41960,40495],{"class":119},[76,41962,2642],{"class":90},[76,41964,32909],{"class":7296},[76,41966,370],{"class":82},[76,41968,40495],{"class":119},[76,41970,2642],{"class":90},[76,41972,32918],{"class":7296},[76,41974,370],{"class":82},[76,41976,2339],{"class":119},[76,41978,2642],{"class":90},[76,41980,32927],{"class":7296},[76,41982,370],{"class":82},[76,41984,669],{"class":119},[76,41986,40085],{"class":90},[76,41988,41989],{"class":78,"line":1889},[76,41990,40090],{"class":90},[76,41992,41993,41995,41997,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025],{"class":78,"line":1900},[76,41994,40052],{"class":90},[76,41996,32900],{"class":7296},[76,41998,370],{"class":82},[76,42000,40495],{"class":119},[76,42002,2642],{"class":90},[76,42004,32909],{"class":7296},[76,42006,370],{"class":82},[76,42008,40495],{"class":119},[76,42010,2642],{"class":90},[76,42012,32918],{"class":7296},[76,42014,370],{"class":82},[76,42016,2339],{"class":119},[76,42018,2642],{"class":90},[76,42020,32927],{"class":7296},[76,42022,370],{"class":82},[76,42024,669],{"class":119},[76,42026,40085],{"class":90},[76,42028,42029],{"class":78,"line":1906},[76,42030,40090],{"class":90},[76,42032,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057],{"class":78,"line":1924},[76,42034,40135],{"class":90},[76,42036,32918],{"class":7296},[76,42038,370],{"class":82},[76,42040,2345],{"class":119},[76,42042,2642],{"class":90},[76,42044,32973],{"class":7296},[76,42046,370],{"class":82},[76,42048,2345],{"class":119},[76,42050,2642],{"class":90},[76,42052,32927],{"class":7296},[76,42054,370],{"class":82},[76,42056,1294],{"class":119},[76,42058,130],{"class":90},[76,42060,42061],{"class":78,"line":1929},[76,42062,40164],{"class":90},[76,42064,42065],{"class":78,"line":1944},[76,42066,40634],{"class":540},[76,42068,42069,42071,42073,42075],{"class":78,"line":1950},[76,42070,32889],{"class":119},[76,42072,40641],{"class":90},[76,42074,370],{"class":82},[76,42076,40047],{"class":90},[76,42078,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111],{"class":78,"line":1965},[76,42080,40052],{"class":90},[76,42082,32900],{"class":7296},[76,42084,370],{"class":82},[76,42086,40495],{"class":119},[76,42088,2642],{"class":90},[76,42090,32909],{"class":7296},[76,42092,370],{"class":82},[76,42094,40495],{"class":119},[76,42096,2642],{"class":90},[76,42098,32918],{"class":7296},[76,42100,370],{"class":82},[76,42102,2339],{"class":119},[76,42104,2642],{"class":90},[76,42106,32927],{"class":7296},[76,42108,370],{"class":82},[76,42110,669],{"class":119},[76,42112,40085],{"class":90},[76,42114,42115],{"class":78,"line":1971},[76,42116,40090],{"class":90},[76,42118,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141,42143,42145,42147,42149,42151],{"class":78,"line":1985},[76,42120,40052],{"class":90},[76,42122,32900],{"class":7296},[76,42124,370],{"class":82},[76,42126,40495],{"class":119},[76,42128,2642],{"class":90},[76,42130,32909],{"class":7296},[76,42132,370],{"class":82},[76,42134,40495],{"class":119},[76,42136,2642],{"class":90},[76,42138,32918],{"class":7296},[76,42140,370],{"class":82},[76,42142,2339],{"class":119},[76,42144,2642],{"class":90},[76,42146,32927],{"class":7296},[76,42148,370],{"class":82},[76,42150,669],{"class":119},[76,42152,40085],{"class":90},[76,42154,42155],{"class":78,"line":1991},[76,42156,40090],{"class":90},[76,42158,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191],{"class":78,"line":2005},[76,42160,40052],{"class":90},[76,42162,32900],{"class":7296},[76,42164,370],{"class":82},[76,42166,40495],{"class":119},[76,42168,2642],{"class":90},[76,42170,32909],{"class":7296},[76,42172,370],{"class":82},[76,42174,40495],{"class":119},[76,42176,2642],{"class":90},[76,42178,32918],{"class":7296},[76,42180,370],{"class":82},[76,42182,2339],{"class":119},[76,42184,2642],{"class":90},[76,42186,32927],{"class":7296},[76,42188,370],{"class":82},[76,42190,669],{"class":119},[76,42192,40085],{"class":90},[76,42194,42195],{"class":78,"line":2017},[76,42196,40090],{"class":90},[76,42198,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221,42223],{"class":78,"line":2023},[76,42200,40135],{"class":90},[76,42202,32918],{"class":7296},[76,42204,370],{"class":82},[76,42206,2345],{"class":119},[76,42208,2642],{"class":90},[76,42210,32973],{"class":7296},[76,42212,370],{"class":82},[76,42214,2345],{"class":119},[76,42216,2642],{"class":90},[76,42218,32927],{"class":7296},[76,42220,370],{"class":82},[76,42222,1294],{"class":119},[76,42224,130],{"class":90},[76,42226,42227],{"class":78,"line":2031},[76,42228,40164],{"class":90},[76,42230,42231],{"class":78,"line":11880},[76,42232,40802],{"class":540},[76,42234,42235,42237,42239,42241],{"class":78,"line":11901},[76,42236,32889],{"class":119},[76,42238,40809],{"class":90},[76,42240,370],{"class":82},[76,42242,40047],{"class":90},[76,42244,42245],{"class":78,"line":11907},[76,42246,40818],{"class":540},[76,42248,42249],{"class":78,"line":11921},[76,42250,40823],{"class":540},[76,42252,42253],{"class":78,"line":11927},[76,42254,40828],{"class":90},[76,42256,42257,42259,42261,42263,42265,42267,42269,42271,42273],{"class":78,"line":11954},[76,42258,40833],{"class":90},[76,42260,2633],{"class":119},[76,42262,2718],{"class":82},[76,42264,2633],{"class":119},[76,42266,2718],{"class":82},[76,42268,40495],{"class":119},[76,42270,2642],{"class":90},[76,42272,36908],{"class":119},[76,42274,40085],{"class":90},[76,42276,42277],{"class":78,"line":11963},[76,42278,40090],{"class":90},[76,42280,42281,42283,42285,42287,42289],{"class":78,"line":11969},[76,42282,40833],{"class":90},[76,42284,36908],{"class":119},[76,42286,2642],{"class":90},[76,42288,34110],{"class":119},[76,42290,40085],{"class":90},[76,42292,42293],{"class":78,"line":11977},[76,42294,40090],{"class":90},[76,42296,42297,42299,42301,42303,42305],{"class":78,"line":11982},[76,42298,40833],{"class":90},[76,42300,34110],{"class":119},[76,42302,2642],{"class":90},[76,42304,402],{"class":119},[76,42306,130],{"class":90},[76,42308,42309],{"class":78,"line":18654},[76,42310,40164],{"class":90},[76,42312,42313],{"class":78,"line":18660},[76,42314,149],{"emptyLinePlaceholder":148},[76,42316,42317],{"class":78,"line":18683},[76,42318,40894],{"class":540},[76,42320,42321],{"class":78,"line":18689},[76,42322,40899],{"class":540},[76,42324,42325,42327,42329,42331,42333],{"class":78,"line":18712},[76,42326,5488],{"class":82},[76,42328,40906],{"class":90},[76,42330,1475],{"class":82},[76,42332,40911],{"class":119},[76,42334,40914],{"class":90},[76,42336,42337],{"class":78,"line":18726},[76,42338,40919],{"class":540},[76,42340,42341,42343,42345],{"class":78,"line":18746},[76,42342,6724],{"class":82},[76,42344,40926],{"class":119},[76,42346,40929],{"class":90},[76,42348,42349],{"class":78,"line":18752},[76,42350,40934],{"class":540},[76,42352,42353,42355,42357,42359,42361],{"class":78,"line":18763},[76,42354,40939],{"class":90},[76,42356,40942],{"class":7296},[76,42358,370],{"class":82},[76,42360,40947],{"class":126},[76,42362,130],{"class":90},[76,42364,42365],{"class":78,"line":18786},[76,42366,40954],{"class":540},[76,42368,42369,42371,42373,42375,42377,42379],{"class":78,"line":18808},[76,42370,40959],{"class":82},[76,42372,40962],{"class":90},[76,42374,729],{"class":82},[76,42376,40967],{"class":82},[76,42378,732],{"class":119},[76,42380,590],{"class":90},[76,42382,42383],{"class":78,"line":18813},[76,42384,40976],{"class":540},[76,42386,42387,42389,42391],{"class":78,"line":18819},[76,42388,40981],{"class":90},[76,42390,1294],{"class":119},[76,42392,130],{"class":90},[76,42394,42395],{"class":78,"line":18833},[76,42396,40990],{"class":540},[76,42398,42399,42401,42403],{"class":78,"line":18846},[76,42400,40995],{"class":82},[76,42402,40926],{"class":119},[76,42404,41000],{"class":90},[76,42406,42407],{"class":78,"line":18851},[76,42408,41005],{"class":540},[76,42410,42411],{"class":78,"line":18865},[76,42412,41010],{"class":540},[76,42414,42415,42417,42419,42421,42423],{"class":78,"line":18870},[76,42416,41015],{"class":90},[76,42418,1294],{"class":119},[76,42420,2642],{"class":90},[76,42422,41022],{"class":119},[76,42424,130],{"class":90},[76,42426,42427],{"class":78,"line":18876},[76,42428,41029],{"class":540},[76,42430,42431,42433,42435,42437,42439,42441],{"class":78,"line":18881},[76,42432,40959],{"class":82},[76,42434,40962],{"class":90},[76,42436,729],{"class":82},[76,42438,40967],{"class":82},[76,42440,732],{"class":119},[76,42442,590],{"class":90},[76,42444,42445,42447,42449],{"class":78,"line":18895},[76,42446,40981],{"class":90},[76,42448,1294],{"class":119},[76,42450,130],{"class":90},[76,42452,42453],{"class":78,"line":18900},[76,42454,149],{"emptyLinePlaceholder":148},[76,42456,42457],{"class":78,"line":18905},[76,42458,37203],{"class":540},[76,42460,42461,42463,42465],{"class":78,"line":18919},[76,42462,32845],{"class":82},[76,42464,33137],{"class":86},[76,42466,33140],{"class":90},[76,42468,42469,42471,42473,42475],{"class":78,"line":18931},[76,42470,33145],{"class":90},[76,42472,370],{"class":82},[76,42474,32867],{"class":119},[76,42476,41078],{"class":90},[76,42478,42479,42481,42483,42485],{"class":78,"line":18936},[76,42480,33145],{"class":90},[76,42482,370],{"class":82},[76,42484,32867],{"class":119},[76,42486,41089],{"class":90},[76,42488,42489,42491,42493,42495],{"class":78,"line":18949},[76,42490,33145],{"class":90},[76,42492,370],{"class":82},[76,42494,32867],{"class":119},[76,42496,41100],{"class":90},[76,42498,42499,42501,42503,42505],{"class":78,"line":18954},[76,42500,33145],{"class":90},[76,42502,370],{"class":82},[76,42504,32867],{"class":119},[76,42506,41111],{"class":90},[76,42508,42509,42511,42513,42515],{"class":78,"line":18959},[76,42510,33145],{"class":90},[76,42512,370],{"class":82},[76,42514,32867],{"class":119},[76,42516,41122],{"class":90},[76,42518,42519,42521,42523,42525],{"class":78,"line":18964},[76,42520,33145],{"class":90},[76,42522,370],{"class":82},[76,42524,32867],{"class":119},[76,42526,41133],{"class":90},[76,42528,42529,42531],{"class":78,"line":18977},[76,42530,595],{"class":82},[76,42532,33253],{"class":90},[76,42534,42535],{"class":78,"line":18982},[76,42536,149],{"emptyLinePlaceholder":148},[76,42538,42539],{"class":78,"line":34671},[76,42540,41148],{"class":540},[76,42542,42543,42545,42547,42549,42551],{"class":78,"line":34677},[76,42544,723],{"class":82},[76,42546,33264],{"class":119},[76,42548,1250],{"class":82},[76,42550,41159],{"class":126},[76,42552,590],{"class":90},[76,42554,42555,42557,42559,42561,42563,42565,42567,42569,42571],{"class":78,"line":34683},[76,42556,33281],{"class":90},[76,42558,370],{"class":82},[76,42560,32496],{"class":90},[76,42562,33288],{"class":126},[76,42564,3811],{"class":82},[76,42566,33293],{"class":90},[76,42568,1328],{"class":82},[76,42570,32521],{"class":126},[76,42572,130],{"class":90},[76,42574,42575,42577],{"class":78,"line":34689},[76,42576,120],{"class":119},[76,42578,32530],{"class":90},[76,42580,42581,42583,42585],{"class":78,"line":34695},[76,42582,33333],{"class":90},[76,42584,370],{"class":82},[76,42586,41196],{"class":90},[76,42588,42589,42591,42593,42595,42597,42599,42601,42603],{"class":78,"line":34706},[76,42590,120],{"class":119},[76,42592,33345],{"class":90},[76,42594,669],{"class":119},[76,42596,2642],{"class":90},[76,42598,33544],{"class":119},[76,42600,2642],{"class":90},[76,42602,33544],{"class":119},[76,42604,33358],{"class":90},[26,42606,42607],{"start":133},[29,42608,42609],{},"测试代码",[66,42611,42613],{"className":68,"code":42612,"language":70,"meta":71,"style":71},"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",[73,42614,42615,42621,42631,42641,42645,42655,42666,42670,42674,42678,42686,42702,42712,42728,42738,42752,42756,42766,42776,42786,42792,42796,42800,42808,42812,42828,42836,42840,42844,42852,42860,42864,42868,42872,42876,42882,42886,42896,42904,42912,42916,42920,42924,42932,42936,42952,42956,42960,42964,42976,42980,42992,42996,43000,43012,43016,43026,43030,43034,43046,43050,43059,43063,43067,43075,43079,43087,43091,43095,43099,43103,43107,43123,43131,43135,43139,43187,43193,43197,43207,43215,43223,43227,43231,43235,43239,43247,43251,43267,43271,43279,43287],{"__ignoreMap":71},[76,42616,42617,42619],{"class":78,"line":79},[76,42618,32438],{"class":82},[76,42620,32441],{"class":90},[76,42622,42623,42625,42627,42629],{"class":78,"line":94},[76,42624,32438],{"class":82},[76,42626,33458],{"class":90},[76,42628,33426],{"class":82},[76,42630,33463],{"class":90},[76,42632,42633,42635,42637,42639],{"class":78,"line":133},[76,42634,32781],{"class":82},[76,42636,33441],{"class":90},[76,42638,32438],{"class":82},[76,42640,33446],{"class":90},[76,42642,42643],{"class":78,"line":145},[76,42644,35960],{"class":540},[76,42646,42647,42649,42651,42653],{"class":78,"line":152},[76,42648,32781],{"class":82},[76,42650,33411],{"class":90},[76,42652,32438],{"class":82},[76,42654,33416],{"class":90},[76,42656,42657,42659,42661,42663],{"class":78,"line":157},[76,42658,32781],{"class":82},[76,42660,33956],{"class":90},[76,42662,32438],{"class":82},[76,42664,42665],{"class":119}," VGG16\n",[76,42667,42668],{"class":78,"line":246},[76,42669,149],{"emptyLinePlaceholder":148},[76,42671,42672],{"class":78,"line":251},[76,42673,149],{"emptyLinePlaceholder":148},[76,42675,42676],{"class":78,"line":257},[76,42677,35989],{"class":540},[76,42679,42680,42682,42684],{"class":78,"line":641},[76,42681,83],{"class":82},[76,42683,35996],{"class":86},[76,42685,91],{"class":90},[76,42687,42688,42690,42692,42694,42696,42698,42700],{"class":78,"line":646},[76,42689,36003],{"class":90},[76,42691,370],{"class":82},[76,42693,33498],{"class":90},[76,42695,33501],{"class":7296},[76,42697,370],{"class":82},[76,42699,33506],{"class":126},[76,42701,33509],{"class":90},[76,42703,42704,42706,42708,42710],{"class":78,"line":659},[76,42705,36020],{"class":7296},[76,42707,370],{"class":82},[76,42709,36025],{"class":119},[76,42711,33509],{"class":90},[76,42713,42714,42716,42718,42720,42722,42724,42726],{"class":78,"line":1608},[76,42715,36032],{"class":7296},[76,42717,370],{"class":82},[76,42719,33536],{"class":90},[76,42721,33539],{"class":7296},[76,42723,370],{"class":82},[76,42725,33544],{"class":119},[76,42727,33547],{"class":90},[76,42729,42730,42732,42734,42736],{"class":78,"line":1632},[76,42731,36049],{"class":7296},[76,42733,370],{"class":82},[76,42735,33519],{"class":119},[76,42737,130],{"class":90},[76,42739,42740,42742,42744,42746,42748,42750],{"class":78,"line":1637},[76,42741,36060],{"class":90},[76,42743,370],{"class":82},[76,42745,33577],{"class":90},[76,42747,33580],{"class":7296},[76,42749,370],{"class":82},[76,42751,36071],{"class":90},[76,42753,42754],{"class":78,"line":1642},[76,42755,36076],{"class":540},[76,42757,42758,42760,42762,42764],{"class":78,"line":1652},[76,42759,36081],{"class":7296},[76,42761,370],{"class":82},[76,42763,669],{"class":119},[76,42765,33509],{"class":90},[76,42767,42768,42770,42772,42774],{"class":78,"line":1660},[76,42769,36092],{"class":7296},[76,42771,370],{"class":82},[76,42773,33519],{"class":119},[76,42775,33509],{"class":90},[76,42777,42778,42780,42782,42784],{"class":78,"line":1683},[76,42779,36103],{"class":7296},[76,42781,370],{"class":82},[76,42783,1294],{"class":119},[76,42785,130],{"class":90},[76,42787,42788,42790],{"class":78,"line":1698},[76,42789,441],{"class":82},[76,42791,36116],{"class":90},[76,42793,42794],{"class":78,"line":1711},[76,42795,149],{"emptyLinePlaceholder":148},[76,42797,42798],{"class":78,"line":1717},[76,42799,36125],{"class":540},[76,42801,42802,42804,42806],{"class":78,"line":1728},[76,42803,83],{"class":82},[76,42805,36132],{"class":86},[76,42807,36135],{"class":90},[76,42809,42810],{"class":78,"line":1740},[76,42811,36140],{"class":540},[76,42813,42814,42816,42818,42820,42822,42824,42826],{"class":78,"line":1746},[76,42815,33281],{"class":90},[76,42817,370],{"class":82},[76,42819,33288],{"class":126},[76,42821,3811],{"class":82},[76,42823,33293],{"class":90},[76,42825,1328],{"class":82},[76,42827,36157],{"class":126},[76,42829,42830,42832,42834],{"class":78,"line":1751},[76,42831,33333],{"class":90},[76,42833,370],{"class":82},[76,42835,34329],{"class":90},[76,42837,42838],{"class":78,"line":1756},[76,42839,149],{"emptyLinePlaceholder":148},[76,42841,42842],{"class":78,"line":1766},[76,42843,36174],{"class":540},[76,42845,42846,42848,42850],{"class":78,"line":1773},[76,42847,36179],{"class":90},[76,42849,370],{"class":82},[76,42851,34382],{"class":119},[76,42853,42854,42856,42858],{"class":78,"line":1793},[76,42855,36188],{"class":90},[76,42857,370],{"class":82},[76,42859,5172],{"class":119},[76,42861,42862],{"class":78,"line":1806},[76,42863,149],{"emptyLinePlaceholder":148},[76,42865,42866],{"class":78,"line":1817},[76,42867,36201],{"class":540},[76,42869,42870],{"class":78,"line":1822},[76,42871,36206],{"class":540},[76,42873,42874],{"class":78,"line":1835},[76,42875,36211],{"class":540},[76,42877,42878,42880],{"class":78,"line":1847},[76,42879,36216],{"class":82},[76,42881,34922],{"class":90},[76,42883,42884],{"class":78,"line":1852},[76,42885,36223],{"class":540},[76,42887,42888,42890,42892,42894],{"class":78,"line":1862},[76,42889,5488],{"class":82},[76,42891,36230],{"class":90},[76,42893,1475],{"class":82},[76,42895,36235],{"class":90},[76,42897,42898,42900,42902],{"class":78,"line":1874},[76,42899,36240],{"class":90},[76,42901,370],{"class":82},[76,42903,36245],{"class":90},[76,42905,42906,42908,42910],{"class":78,"line":1879},[76,42907,36250],{"class":90},[76,42909,370],{"class":82},[76,42911,36255],{"class":90},[76,42913,42914],{"class":78,"line":1884},[76,42915,36260],{"class":540},[76,42917,42918],{"class":78,"line":1889},[76,42919,34913],{"class":90},[76,42921,42922],{"class":78,"line":1900},[76,42923,36269],{"class":540},[76,42925,42926,42928,42930],{"class":78,"line":1906},[76,42927,34698],{"class":90},[76,42929,370],{"class":82},[76,42931,36278],{"class":90},[76,42933,42934],{"class":78,"line":1924},[76,42935,36283],{"class":540},[76,42937,42938,42940,42942,42944,42946,42948,42950],{"class":78,"line":1929},[76,42939,34715],{"class":90},[76,42941,370],{"class":82},[76,42943,34720],{"class":90},[76,42945,34723],{"class":7296},[76,42947,370],{"class":82},[76,42949,669],{"class":119},[76,42951,130],{"class":90},[76,42953,42954],{"class":78,"line":1944},[76,42955,36304],{"class":540},[76,42957,42958],{"class":78,"line":1950},[76,42959,36309],{"class":540},[76,42961,42962],{"class":78,"line":1965},[76,42963,36314],{"class":540},[76,42965,42966,42968,42970,42972,42974],{"class":78,"line":1971},[76,42967,36319],{"class":90},[76,42969,1060],{"class":82},[76,42971,34825],{"class":90},[76,42973,1250],{"class":82},[76,42975,36328],{"class":90},[76,42977,42978],{"class":78,"line":1985},[76,42979,36333],{"class":540},[76,42981,42982,42984,42986,42988,42990],{"class":78,"line":1991},[76,42983,36338],{"class":90},[76,42985,1060],{"class":82},[76,42987,36343],{"class":90},[76,42989,1294],{"class":119},[76,42991,130],{"class":90},[76,42993,42994],{"class":78,"line":2005},[76,42995,149],{"emptyLinePlaceholder":148},[76,42997,42998],{"class":78,"line":2017},[76,42999,36356],{"class":540},[76,43001,43002,43004,43006,43008,43010],{"class":78,"line":2023},[76,43003,36361],{"class":90},[76,43005,370],{"class":82},[76,43007,36366],{"class":90},[76,43009,795],{"class":82},[76,43011,36371],{"class":90},[76,43013,43014],{"class":78,"line":2031},[76,43015,36376],{"class":540},[76,43017,43018,43020,43022,43024],{"class":78,"line":11880},[76,43019,1701],{"class":119},[76,43021,123],{"class":90},[76,43023,36385],{"class":126},[76,43025,36388],{"class":90},[76,43027,43028],{"class":78,"line":11901},[76,43029,149],{"emptyLinePlaceholder":148},[76,43031,43032],{"class":78,"line":11907},[76,43033,36397],{"class":540},[76,43035,43036,43038,43040,43042,43044],{"class":78,"line":11921},[76,43037,723],{"class":82},[76,43039,33264],{"class":119},[76,43041,1250],{"class":82},[76,43043,33269],{"class":126},[76,43045,590],{"class":90},[76,43047,43048],{"class":78,"line":11927},[76,43049,36414],{"class":540},[76,43051,43052,43054,43056],{"class":78,"line":11954},[76,43053,33333],{"class":90},[76,43055,370],{"class":82},[76,43057,43058],{"class":90},"VGG16()\n",[76,43060,43061],{"class":78,"line":11963},[76,43062,36427],{"class":540},[76,43064,43065],{"class":78,"line":11969},[76,43066,36432],{"class":540},[76,43068,43069,43071,43073],{"class":78,"line":11977},[76,43070,36437],{"class":90},[76,43072,36440],{"class":126},[76,43074,656],{"class":90},[76,43076,43077],{"class":78,"line":11982},[76,43078,36447],{"class":540},[76,43080,43081,43083,43085],{"class":78,"line":18654},[76,43082,36060],{"class":90},[76,43084,370],{"class":82},[76,43086,36456],{"class":90},[76,43088,43089],{"class":78,"line":18660},[76,43090,36461],{"class":540},[76,43092,43093],{"class":78,"line":18683},[76,43094,36466],{"class":90},[76,43096,43097],{"class":78,"line":18689},[76,43098,149],{"emptyLinePlaceholder":148},[76,43100,43101],{"class":78,"line":18712},[76,43102,36475],{"class":540},[76,43104,43105],{"class":78,"line":18726},[76,43106,36480],{"class":540},[76,43108,43109,43111,43113,43115,43117,43119,43121],{"class":78,"line":18746},[76,43110,33281],{"class":90},[76,43112,370],{"class":82},[76,43114,33288],{"class":126},[76,43116,3811],{"class":82},[76,43118,33293],{"class":90},[76,43120,1328],{"class":82},[76,43122,36157],{"class":126},[76,43124,43125,43127,43129],{"class":78,"line":18752},[76,43126,33333],{"class":90},[76,43128,370],{"class":82},[76,43130,34329],{"class":90},[76,43132,43133],{"class":78,"line":18763},[76,43134,36509],{"class":540},[76,43136,43137],{"class":78,"line":18786},[76,43138,36514],{"class":540},[76,43140,43141,43143,43145,43147,43149,43151,43153,43155,43157,43159,43161,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185],{"class":78,"line":18808},[76,43142,36519],{"class":90},[76,43144,370],{"class":82},[76,43146,3148],{"class":90},[76,43148,36526],{"class":126},[76,43150,2642],{"class":90},[76,43152,36531],{"class":126},[76,43154,2642],{"class":90},[76,43156,36536],{"class":126},[76,43158,2642],{"class":90},[76,43160,36541],{"class":126},[76,43162,2642],{"class":90},[76,43164,36546],{"class":126},[76,43166,2642],{"class":90},[76,43168,36551],{"class":126},[76,43170,2642],{"class":90},[76,43172,36556],{"class":126},[76,43174,2642],{"class":90},[76,43176,36561],{"class":126},[76,43178,2642],{"class":90},[76,43180,36566],{"class":126},[76,43182,2642],{"class":90},[76,43184,36571],{"class":126},[76,43186,35284],{"class":90},[76,43188,43189,43191],{"class":78,"line":18813},[76,43190,36216],{"class":82},[76,43192,34922],{"class":90},[76,43194,43195],{"class":78,"line":18819},[76,43196,36584],{"class":540},[76,43198,43199,43201,43203,43205],{"class":78,"line":18833},[76,43200,5488],{"class":82},[76,43202,36591],{"class":90},[76,43204,1475],{"class":82},[76,43206,36235],{"class":90},[76,43208,43209,43211,43213],{"class":78,"line":18846},[76,43210,34648],{"class":90},[76,43212,370],{"class":82},[76,43214,34653],{"class":90},[76,43216,43217,43219,43221],{"class":78,"line":18851},[76,43218,34663],{"class":90},[76,43220,370],{"class":82},[76,43222,34668],{"class":90},[76,43224,43225],{"class":78,"line":18865},[76,43226,149],{"emptyLinePlaceholder":148},[76,43228,43229],{"class":78,"line":18870},[76,43230,36620],{"class":540},[76,43232,43233],{"class":78,"line":18876},[76,43234,34913],{"class":90},[76,43236,43237],{"class":78,"line":18881},[76,43238,36629],{"class":540},[76,43240,43241,43243,43245],{"class":78,"line":18895},[76,43242,34698],{"class":90},[76,43244,370],{"class":82},[76,43246,34703],{"class":90},[76,43248,43249],{"class":78,"line":18900},[76,43250,36642],{"class":540},[76,43252,43253,43255,43257,43259,43261,43263,43265],{"class":78,"line":18905},[76,43254,34715],{"class":90},[76,43256,370],{"class":82},[76,43258,34720],{"class":90},[76,43260,34723],{"class":7296},[76,43262,370],{"class":82},[76,43264,669],{"class":119},[76,43266,130],{"class":90},[76,43268,43269],{"class":78,"line":18919},[76,43270,36663],{"class":540},[76,43272,43273,43275,43277],{"class":78,"line":18931},[76,43274,36668],{"class":90},[76,43276,370],{"class":82},[76,43278,36673],{"class":90},[76,43280,43281,43283,43285],{"class":78,"line":18936},[76,43282,36678],{"class":90},[76,43284,370],{"class":82},[76,43286,36683],{"class":90},[76,43288,43289,43291,43293,43295,43297,43299,43301,43303],{"class":78,"line":18949},[76,43290,36688],{"class":119},[76,43292,123],{"class":90},[76,43294,36693],{"class":126},[76,43296,36696],{"class":90},[76,43298,36699],{"class":126},[76,43300,2642],{"class":90},[76,43302,36704],{"class":126},[76,43304,36707],{"class":90},[889,43306,43308],{"id":43307},"_23googlenet","2.3.GoogLeNet",[24047,43310,43312],{"id":43311},"_231原理","2.3.1.原理",[26,43314,43315],{},[29,43316,43317],{},"网络结构",[19,43319,43320],{},[3583,43321],{"alt":71,"src":43322},"\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,43324,43325],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43327,43328],{},[3583,43329],{"alt":71,"src":43330},"\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,43332,43333],{},[3583,43334],{"alt":71,"src":43335},"\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,43337,43338],{},[3583,43339],{"alt":71,"src":43340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[26,43342,43343],{"start":94},[29,43344,43345],{},"1x1卷积的优点",[19,43347,43348],{},[3583,43349],{"alt":71,"src":43350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[26,43352,43353],{"start":133},[29,43354,43355],{},"全局平均池化层优点",[19,43357,43358],{},[3583,43359],{"alt":71,"src":43360},"\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,43362,43363],{},[3583,43364],{"alt":71,"src":43365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[26,43367,43368],{"start":145},[29,43369,43370],{},"参数详细描述",[19,43372,43373],{},[3583,43374],{"alt":71,"src":43375},"\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,43377,43378],{},[3583,43379],{"alt":71,"src":43380},"\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,43382,43383],{},[3583,43384],{"alt":71,"src":43385},"\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,43387,43388],{},[3583,43389],{"alt":71,"src":43390},"\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,43392,43393],{},[3583,43394],{"alt":71,"src":43395},"\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,43397,43398],{},[3583,43399],{"alt":71,"src":43400},"\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,43402,43403],{},[3583,43404],{"alt":71,"src":43405},"\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,43407,43408],{},[3583,43409],{"alt":71,"src":43410},"\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,43412,43413],{},[3583,43414],{"alt":71,"src":43415},"\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,43417,43418],{},[3583,43419],{"alt":71,"src":43420},"\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,43422,43423],{},[3583,43424],{"alt":71,"src":43425},"\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,43427,43428],{},[3583,43429],{"alt":71,"src":43430},"\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,43432,43433],{},[3583,43434],{"alt":71,"src":43435},"\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,43437,43438],{},[3583,43439],{"alt":71,"src":43440},"\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,43442,43443],{},[3583,43444],{"alt":71,"src":43445},"\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,43447,43448],{},[3583,43449],{"alt":71,"src":43450},"\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,43452,43453],{},[3583,43454],{"alt":71,"src":43455},"\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,43457,43458],{},[3583,43459],{"alt":71,"src":43460},"\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,43462,43463],{},[3583,43464],{"alt":71,"src":43465},"\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,43467,43468],{},[3583,43469],{"alt":71,"src":43470},"\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,43472,43473],{},[3583,43474],{"alt":71,"src":43475},"\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",[24047,43477,43479],{"id":43478},"_232代码实现","2.3.2.代码实现",[26,43481,43482],{},[29,43483,32755],{},[19,43485,43486],{},"根据原理一步一步搭建即可",[66,43488,43490],{"className":68,"code":43489,"language":70,"meta":71,"style":71},"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",[73,43491,43492,43498,43508,43518,43522,43539,43548,43563,43573,43578,43611,43616,43653,43700,43705,43741,43788,43793,43798,43833,43865,43869,43877,43893,43917,43942,43963,43968,43983,43987,43991,43996,44013,44018,44027,44042,44053,44097,44101,44129,44133,44144,44172,44176,44213,44217,44245,44249,44260,44296,44328,44356,44360,44371,44405,44437,44469,44502,44536,44564,44568,44579,44612,44644,44658,44662,44675,44679,44684,44696,44704,44726,44731,44736,44741,44746,44751,44756,44770,44778,44787,44800,44815,44824,44828,44836,44847,44858,44869,44880,44891,44897,44901,44906,44918,44938,44947],{"__ignoreMap":71},[76,43493,43494,43496],{"class":78,"line":79},[76,43495,32438],{"class":82},[76,43497,32441],{"class":90},[76,43499,43500,43502,43504,43506],{"class":78,"line":94},[76,43501,32781],{"class":82},[76,43503,32784],{"class":90},[76,43505,32438],{"class":82},[76,43507,32789],{"class":90},[76,43509,43510,43512,43514,43516],{"class":78,"line":133},[76,43511,32781],{"class":82},[76,43513,32801],{"class":90},[76,43515,32438],{"class":82},[76,43517,32806],{"class":90},[76,43519,43520],{"class":78,"line":145},[76,43521,149],{"emptyLinePlaceholder":148},[76,43523,43524,43526,43529,43531,43533,43535,43537],{"class":78,"line":152},[76,43525,16747],{"class":82},[76,43527,43528],{"class":86}," Inception",[76,43530,123],{"class":90},[76,43532,32822],{"class":86},[76,43534,2819],{"class":90},[76,43536,32827],{"class":86},[76,43538,32830],{"class":90},[76,43540,43541,43543,43545],{"class":78,"line":157},[76,43542,32845],{"class":82},[76,43544,32848],{"class":119},[76,43546,43547],{"class":90},"(self,in_channels,c1,c2,c3,c4):\n",[76,43549,43550,43552,43555,43557,43559,43561],{"class":78,"line":246},[76,43551,32861],{"class":119},[76,43553,43554],{"class":90},"(Inception,",[76,43556,32867],{"class":119},[76,43558,32870],{"class":90},[76,43560,32873],{"class":119},[76,43562,4072],{"class":90},[76,43564,43565,43567,43569,43571],{"class":78,"line":251},[76,43566,32889],{"class":119},[76,43568,36809],{"class":90},[76,43570,370],{"class":82},[76,43572,36814],{"class":90},[76,43574,43575],{"class":78,"line":257},[76,43576,43577],{"class":540},"        # 路线1：定义1*1卷积\n",[76,43579,43580,43582,43585,43587,43589,43591,43593,43596,43598,43600,43603,43605,43607,43609],{"class":78,"line":641},[76,43581,32889],{"class":119},[76,43583,43584],{"class":90},".p1_1",[76,43586,370],{"class":82},[76,43588,32897],{"class":90},[76,43590,32900],{"class":7296},[76,43592,370],{"class":82},[76,43594,43595],{"class":90},"in_channels,",[76,43597,32909],{"class":7296},[76,43599,370],{"class":82},[76,43601,43602],{"class":90},"c1,",[76,43604,32918],{"class":7296},[76,43606,370],{"class":82},[76,43608,669],{"class":119},[76,43610,130],{"class":90},[76,43612,43613],{"class":78,"line":646},[76,43614,43615],{"class":540},"        # 路线2：定义1*1卷积和3*3\n",[76,43617,43618,43620,43623,43625,43627,43629,43631,43633,43635,43637,43640,43642,43645,43647,43649,43651],{"class":78,"line":659},[76,43619,32889],{"class":119},[76,43621,43622],{"class":90},".p2_1",[76,43624,370],{"class":82},[76,43626,32897],{"class":90},[76,43628,32900],{"class":7296},[76,43630,370],{"class":82},[76,43632,43595],{"class":90},[76,43634,32909],{"class":7296},[76,43636,370],{"class":82},[76,43638,43639],{"class":90},"c2[",[76,43641,1294],{"class":119},[76,43643,43644],{"class":90},"],",[76,43646,32918],{"class":7296},[76,43648,370],{"class":82},[76,43650,669],{"class":119},[76,43652,130],{"class":90},[76,43654,43655,43657,43660,43662,43664,43666,43668,43670,43672,43674,43676,43678,43680,43682,43684,43686,43688,43690,43692,43694,43696,43698],{"class":78,"line":1608},[76,43656,32889],{"class":119},[76,43658,43659],{"class":90},".p2_2",[76,43661,370],{"class":82},[76,43663,32897],{"class":90},[76,43665,32900],{"class":7296},[76,43667,370],{"class":82},[76,43669,43639],{"class":90},[76,43671,1294],{"class":119},[76,43673,43644],{"class":90},[76,43675,32909],{"class":7296},[76,43677,370],{"class":82},[76,43679,43639],{"class":90},[76,43681,669],{"class":119},[76,43683,43644],{"class":90},[76,43685,32918],{"class":7296},[76,43687,370],{"class":82},[76,43689,2339],{"class":119},[76,43691,2642],{"class":90},[76,43693,32927],{"class":7296},[76,43695,370],{"class":82},[76,43697,669],{"class":119},[76,43699,130],{"class":90},[76,43701,43702],{"class":78,"line":1632},[76,43703,43704],{"class":540},"        # 路线3：定义1*1卷积和5*5\n",[76,43706,43707,43709,43712,43714,43716,43718,43720,43722,43724,43726,43729,43731,43733,43735,43737,43739],{"class":78,"line":1637},[76,43708,32889],{"class":119},[76,43710,43711],{"class":90},".p3_1",[76,43713,370],{"class":82},[76,43715,32897],{"class":90},[76,43717,32900],{"class":7296},[76,43719,370],{"class":82},[76,43721,43595],{"class":90},[76,43723,32909],{"class":7296},[76,43725,370],{"class":82},[76,43727,43728],{"class":90},"c3[",[76,43730,1294],{"class":119},[76,43732,43644],{"class":90},[76,43734,32918],{"class":7296},[76,43736,370],{"class":82},[76,43738,669],{"class":119},[76,43740,130],{"class":90},[76,43742,43743,43745,43748,43750,43752,43754,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782,43784,43786],{"class":78,"line":1642},[76,43744,32889],{"class":119},[76,43746,43747],{"class":90},".p3_2",[76,43749,370],{"class":82},[76,43751,32897],{"class":90},[76,43753,32900],{"class":7296},[76,43755,370],{"class":82},[76,43757,43728],{"class":90},[76,43759,1294],{"class":119},[76,43761,43644],{"class":90},[76,43763,32909],{"class":7296},[76,43765,370],{"class":82},[76,43767,43728],{"class":90},[76,43769,669],{"class":119},[76,43771,43644],{"class":90},[76,43773,32918],{"class":7296},[76,43775,370],{"class":82},[76,43777,2583],{"class":119},[76,43779,2642],{"class":90},[76,43781,32927],{"class":7296},[76,43783,370],{"class":82},[76,43785,2345],{"class":119},[76,43787,130],{"class":90},[76,43789,43790],{"class":78,"line":1652},[76,43791,43792],{"class":540},"        # 路线4：定义3*3最大池化和1*1卷积\n",[76,43794,43795],{"class":78,"line":1660},[76,43796,43797],{"class":540},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[76,43799,43800,43802,43805,43807,43809,43811,43813,43815,43817,43819,43821,43823,43825,43827,43829,43831],{"class":78,"line":1683},[76,43801,32889],{"class":119},[76,43803,43804],{"class":90},".p4_1",[76,43806,370],{"class":82},[76,43808,36867],{"class":90},[76,43810,32918],{"class":7296},[76,43812,370],{"class":82},[76,43814,2339],{"class":119},[76,43816,2642],{"class":90},[76,43818,32973],{"class":7296},[76,43820,370],{"class":82},[76,43822,669],{"class":119},[76,43824,2642],{"class":90},[76,43826,32927],{"class":7296},[76,43828,370],{"class":82},[76,43830,669],{"class":119},[76,43832,130],{"class":90},[76,43834,43835,43837,43840,43842,43844,43846,43848,43850,43852,43854,43857,43859,43861,43863],{"class":78,"line":1698},[76,43836,32889],{"class":119},[76,43838,43839],{"class":90},".p4_2",[76,43841,370],{"class":82},[76,43843,32897],{"class":90},[76,43845,32900],{"class":7296},[76,43847,370],{"class":82},[76,43849,43595],{"class":90},[76,43851,32909],{"class":7296},[76,43853,370],{"class":82},[76,43855,43856],{"class":90},"c4,",[76,43858,32918],{"class":7296},[76,43860,370],{"class":82},[76,43862,669],{"class":119},[76,43864,130],{"class":90},[76,43866,43867],{"class":78,"line":1711},[76,43868,149],{"emptyLinePlaceholder":148},[76,43870,43871,43873,43875],{"class":78,"line":1717},[76,43872,32845],{"class":82},[76,43874,33137],{"class":86},[76,43876,33140],{"class":90},[76,43878,43879,43882,43884,43886,43888,43890],{"class":78,"line":1728},[76,43880,43881],{"class":90},"        p1",[76,43883,370],{"class":82},[76,43885,32867],{"class":119},[76,43887,37222],{"class":90},[76,43889,32867],{"class":119},[76,43891,43892],{"class":90},".p1_1(x))\n",[76,43894,43895,43897,43899,43901,43903,43905,43908,43910,43912,43914],{"class":78,"line":1740},[76,43896,9163],{"class":90},[76,43898,370],{"class":82},[76,43900,32867],{"class":119},[76,43902,37222],{"class":90},[76,43904,32867],{"class":119},[76,43906,43907],{"class":90},".p2_2(",[76,43909,32867],{"class":119},[76,43911,37222],{"class":90},[76,43913,32867],{"class":119},[76,43915,43916],{"class":90},".p2_1(x))))\n",[76,43918,43919,43922,43924,43926,43928,43930,43933,43935,43937,43939],{"class":78,"line":1746},[76,43920,43921],{"class":90},"        p3",[76,43923,370],{"class":82},[76,43925,32867],{"class":119},[76,43927,37222],{"class":90},[76,43929,32867],{"class":119},[76,43931,43932],{"class":90},".p3_2(",[76,43934,32867],{"class":119},[76,43936,37222],{"class":90},[76,43938,32867],{"class":119},[76,43940,43941],{"class":90},".p3_1(x))))\n",[76,43943,43944,43947,43949,43951,43953,43955,43958,43960],{"class":78,"line":1751},[76,43945,43946],{"class":90},"        p4",[76,43948,370],{"class":82},[76,43950,32867],{"class":119},[76,43952,37222],{"class":90},[76,43954,32867],{"class":119},[76,43956,43957],{"class":90},".p4_2(",[76,43959,32867],{"class":119},[76,43961,43962],{"class":90},".p4_1(x)))\n",[76,43964,43965],{"class":78,"line":1756},[76,43966,43967],{"class":540},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[76,43969,43970,43972,43975,43977,43979,43981],{"class":78,"line":1766},[76,43971,595],{"class":82},[76,43973,43974],{"class":90}," torch.cat((p1,p2,p3,p4),",[76,43976,34723],{"class":7296},[76,43978,370],{"class":82},[76,43980,669],{"class":119},[76,43982,130],{"class":90},[76,43984,43985],{"class":78,"line":1773},[76,43986,149],{"emptyLinePlaceholder":148},[76,43988,43989],{"class":78,"line":1793},[76,43990,149],{"emptyLinePlaceholder":148},[76,43992,43993],{"class":78,"line":1806},[76,43994,43995],{"class":540},"# 搭建GoogLeNet网络\n",[76,43997,43998,44000,44003,44005,44007,44009,44011],{"class":78,"line":1817},[76,43999,16747],{"class":82},[76,44001,44002],{"class":86}," GoogLeNet",[76,44004,123],{"class":90},[76,44006,32822],{"class":86},[76,44008,2819],{"class":90},[76,44010,32827],{"class":86},[76,44012,32830],{"class":90},[76,44014,44015],{"class":78,"line":1822},[76,44016,44017],{"class":540},"    # 必须把Inception导入到里边\n",[76,44019,44020,44022,44024],{"class":78,"line":1835},[76,44021,32845],{"class":82},[76,44023,32848],{"class":119},[76,44025,44026],{"class":90},"(self,Inception):\n",[76,44028,44029,44031,44034,44036,44038,44040],{"class":78,"line":1847},[76,44030,32861],{"class":119},[76,44032,44033],{"class":90},"(GoogLeNet,",[76,44035,32867],{"class":119},[76,44037,32870],{"class":90},[76,44039,32873],{"class":119},[76,44041,4072],{"class":90},[76,44043,44044,44046,44049,44051],{"class":78,"line":1852},[76,44045,32889],{"class":119},[76,44047,44048],{"class":90},".b1",[76,44050,370],{"class":82},[76,44052,40047],{"class":90},[76,44054,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095],{"class":78,"line":1862},[76,44056,40052],{"class":90},[76,44058,32900],{"class":7296},[76,44060,370],{"class":82},[76,44062,669],{"class":119},[76,44064,2642],{"class":90},[76,44066,32909],{"class":7296},[76,44068,370],{"class":82},[76,44070,2469],{"class":119},[76,44072,2642],{"class":90},[76,44074,32918],{"class":7296},[76,44076,370],{"class":82},[76,44078,2633],{"class":119},[76,44080,2642],{"class":90},[76,44082,32973],{"class":7296},[76,44084,370],{"class":82},[76,44086,2345],{"class":119},[76,44088,2642],{"class":90},[76,44090,32927],{"class":7296},[76,44092,370],{"class":82},[76,44094,2339],{"class":119},[76,44096,40085],{"class":90},[76,44098,44099],{"class":78,"line":1874},[76,44100,40090],{"class":90},[76,44102,44103,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127],{"class":78,"line":1879},[76,44104,40135],{"class":90},[76,44106,32918],{"class":7296},[76,44108,370],{"class":82},[76,44110,2339],{"class":119},[76,44112,2642],{"class":90},[76,44114,32973],{"class":7296},[76,44116,370],{"class":82},[76,44118,2345],{"class":119},[76,44120,2642],{"class":90},[76,44122,32927],{"class":7296},[76,44124,370],{"class":82},[76,44126,669],{"class":119},[76,44128,130],{"class":90},[76,44130,44131],{"class":78,"line":1884},[76,44132,40164],{"class":90},[76,44134,44135,44137,44140,44142],{"class":78,"line":1889},[76,44136,32889],{"class":119},[76,44138,44139],{"class":90},".b2",[76,44141,370],{"class":82},[76,44143,40047],{"class":90},[76,44145,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170],{"class":78,"line":1900},[76,44147,40052],{"class":90},[76,44149,32900],{"class":7296},[76,44151,370],{"class":82},[76,44153,2469],{"class":119},[76,44155,2642],{"class":90},[76,44157,32909],{"class":7296},[76,44159,370],{"class":82},[76,44161,2469],{"class":119},[76,44163,2642],{"class":90},[76,44165,32918],{"class":7296},[76,44167,370],{"class":82},[76,44169,669],{"class":119},[76,44171,40085],{"class":90},[76,44173,44174],{"class":78,"line":1906},[76,44175,40090],{"class":90},[76,44177,44178,44180,44182,44184,44186,44188,44190,44192,44195,44197,44199,44201,44203,44205,44207,44209,44211],{"class":78,"line":1924},[76,44179,40052],{"class":90},[76,44181,32900],{"class":7296},[76,44183,370],{"class":82},[76,44185,2469],{"class":119},[76,44187,2642],{"class":90},[76,44189,32909],{"class":7296},[76,44191,370],{"class":82},[76,44193,44194],{"class":119},"192",[76,44196,2642],{"class":90},[76,44198,32918],{"class":7296},[76,44200,370],{"class":82},[76,44202,2339],{"class":119},[76,44204,2642],{"class":90},[76,44206,32927],{"class":7296},[76,44208,370],{"class":82},[76,44210,669],{"class":119},[76,44212,40085],{"class":90},[76,44214,44215],{"class":78,"line":1929},[76,44216,40090],{"class":90},[76,44218,44219,44221,44223,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243],{"class":78,"line":1944},[76,44220,40135],{"class":90},[76,44222,32918],{"class":7296},[76,44224,370],{"class":82},[76,44226,2339],{"class":119},[76,44228,2642],{"class":90},[76,44230,32973],{"class":7296},[76,44232,370],{"class":82},[76,44234,2345],{"class":119},[76,44236,2642],{"class":90},[76,44238,32927],{"class":7296},[76,44240,370],{"class":82},[76,44242,669],{"class":119},[76,44244,130],{"class":90},[76,44246,44247],{"class":78,"line":1950},[76,44248,40164],{"class":90},[76,44250,44251,44253,44256,44258],{"class":78,"line":1965},[76,44252,32889],{"class":119},[76,44254,44255],{"class":90},".b3",[76,44257,370],{"class":82},[76,44259,40047],{"class":90},[76,44261,44262,44265,44267,44269,44271,44274,44276,44278,44280,44283,44285,44287,44289,44292,44294],{"class":78,"line":1971},[76,44263,44264],{"class":90},"            Inception(",[76,44266,44194],{"class":119},[76,44268,2642],{"class":90},[76,44270,2469],{"class":119},[76,44272,44273],{"class":90},",(",[76,44275,2475],{"class":119},[76,44277,2642],{"class":90},[76,44279,34110],{"class":119},[76,44281,44282],{"class":90},"),(",[76,44284,2861],{"class":119},[76,44286,2642],{"class":90},[76,44288,2463],{"class":119},[76,44290,44291],{"class":90},"),",[76,44293,2463],{"class":119},[76,44295,40085],{"class":90},[76,44297,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322,44324,44326],{"class":78,"line":1985},[76,44299,44264],{"class":90},[76,44301,36908],{"class":119},[76,44303,2642],{"class":90},[76,44305,34110],{"class":119},[76,44307,44273],{"class":90},[76,44309,34110],{"class":119},[76,44311,2642],{"class":90},[76,44313,44194],{"class":119},[76,44315,44282],{"class":90},[76,44317,2463],{"class":119},[76,44319,2642],{"class":90},[76,44321,2475],{"class":119},[76,44323,44291],{"class":90},[76,44325,2469],{"class":119},[76,44327,40085],{"class":90},[76,44329,44330,44332,44334,44336,44338,44340,44342,44344,44346,44348,44350,44352,44354],{"class":78,"line":1991},[76,44331,40135],{"class":90},[76,44333,32918],{"class":7296},[76,44335,370],{"class":82},[76,44337,2339],{"class":119},[76,44339,2642],{"class":90},[76,44341,32973],{"class":7296},[76,44343,370],{"class":82},[76,44345,2345],{"class":119},[76,44347,2642],{"class":90},[76,44349,32927],{"class":7296},[76,44351,370],{"class":82},[76,44353,669],{"class":119},[76,44355,130],{"class":90},[76,44357,44358],{"class":78,"line":2005},[76,44359,40164],{"class":90},[76,44361,44362,44364,44367,44369],{"class":78,"line":2017},[76,44363,32889],{"class":119},[76,44365,44366],{"class":90},".b4",[76,44368,370],{"class":82},[76,44370,40047],{"class":90},[76,44372,44373,44375,44378,44380,44382,44384,44386,44388,44391,44393,44395,44397,44399,44401,44403],{"class":78,"line":2023},[76,44374,44264],{"class":90},[76,44376,44377],{"class":119},"480",[76,44379,2642],{"class":90},[76,44381,44194],{"class":119},[76,44383,44273],{"class":90},[76,44385,2475],{"class":119},[76,44387,2642],{"class":90},[76,44389,44390],{"class":119},"208",[76,44392,44282],{"class":90},[76,44394,2861],{"class":119},[76,44396,2642],{"class":90},[76,44398,2867],{"class":119},[76,44400,44291],{"class":90},[76,44402,2469],{"class":119},[76,44404,40085],{"class":90},[76,44406,44407,44409,44411,44413,44415,44417,44419,44421,44423,44425,44427,44429,44431,44433,44435],{"class":78,"line":2031},[76,44408,44264],{"class":90},[76,44410,40495],{"class":119},[76,44412,2642],{"class":90},[76,44414,23097],{"class":119},[76,44416,44273],{"class":90},[76,44418,2878],{"class":119},[76,44420,2642],{"class":90},[76,44422,33544],{"class":119},[76,44424,44282],{"class":90},[76,44426,3058],{"class":119},[76,44428,2642],{"class":90},[76,44430,2469],{"class":119},[76,44432,44291],{"class":90},[76,44434,2469],{"class":119},[76,44436,40085],{"class":90},[76,44438,44439,44441,44443,44445,44447,44449,44451,44453,44455,44457,44459,44461,44463,44465,44467],{"class":78,"line":11880},[76,44440,44264],{"class":90},[76,44442,40495],{"class":119},[76,44444,2642],{"class":90},[76,44446,34110],{"class":119},[76,44448,44273],{"class":90},[76,44450,34110],{"class":119},[76,44452,2642],{"class":90},[76,44454,36908],{"class":119},[76,44456,44282],{"class":90},[76,44458,3058],{"class":119},[76,44460,2642],{"class":90},[76,44462,2469],{"class":119},[76,44464,44291],{"class":90},[76,44466,2469],{"class":119},[76,44468,40085],{"class":90},[76,44470,44471,44473,44475,44477,44479,44481,44483,44485,44488,44490,44492,44494,44496,44498,44500],{"class":78,"line":11901},[76,44472,44264],{"class":90},[76,44474,40495],{"class":119},[76,44476,2642],{"class":90},[76,44478,2878],{"class":119},[76,44480,44273],{"class":90},[76,44482,34110],{"class":119},[76,44484,2642],{"class":90},[76,44486,44487],{"class":119},"288",[76,44489,44282],{"class":90},[76,44491,2463],{"class":119},[76,44493,2642],{"class":90},[76,44495,2469],{"class":119},[76,44497,44291],{"class":90},[76,44499,2469],{"class":119},[76,44501,40085],{"class":90},[76,44503,44504,44506,44509,44511,44513,44515,44517,44519,44522,44524,44526,44528,44530,44532,44534],{"class":78,"line":11907},[76,44505,44264],{"class":90},[76,44507,44508],{"class":119},"528",[76,44510,2642],{"class":90},[76,44512,36908],{"class":119},[76,44514,44273],{"class":90},[76,44516,23097],{"class":119},[76,44518,2642],{"class":90},[76,44520,44521],{"class":119},"320",[76,44523,44282],{"class":90},[76,44525,2463],{"class":119},[76,44527,2642],{"class":90},[76,44529,34110],{"class":119},[76,44531,44291],{"class":90},[76,44533,34110],{"class":119},[76,44535,40085],{"class":90},[76,44537,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558,44560,44562],{"class":78,"line":11921},[76,44539,40135],{"class":90},[76,44541,32918],{"class":7296},[76,44543,370],{"class":82},[76,44545,2339],{"class":119},[76,44547,2642],{"class":90},[76,44549,32973],{"class":7296},[76,44551,370],{"class":82},[76,44553,2345],{"class":119},[76,44555,2642],{"class":90},[76,44557,32927],{"class":7296},[76,44559,370],{"class":82},[76,44561,669],{"class":119},[76,44563,130],{"class":90},[76,44565,44566],{"class":78,"line":11927},[76,44567,40164],{"class":90},[76,44569,44570,44572,44575,44577],{"class":78,"line":11954},[76,44571,32889],{"class":119},[76,44573,44574],{"class":90},".b5",[76,44576,370],{"class":82},[76,44578,40047],{"class":90},[76,44580,44581,44583,44586,44588,44590,44592,44594,44596,44598,44600,44602,44604,44606,44608,44610],{"class":78,"line":11963},[76,44582,44264],{"class":90},[76,44584,44585],{"class":119},"832",[76,44587,2642],{"class":90},[76,44589,36908],{"class":119},[76,44591,44273],{"class":90},[76,44593,23097],{"class":119},[76,44595,2642],{"class":90},[76,44597,44521],{"class":119},[76,44599,44282],{"class":90},[76,44601,2463],{"class":119},[76,44603,2642],{"class":90},[76,44605,34110],{"class":119},[76,44607,44291],{"class":90},[76,44609,34110],{"class":119},[76,44611,40085],{"class":90},[76,44613,44614,44616,44618,44620,44622,44624,44626,44628,44630,44632,44634,44636,44638,44640,44642],{"class":78,"line":11969},[76,44615,44264],{"class":90},[76,44617,44585],{"class":119},[76,44619,2642],{"class":90},[76,44621,36978],{"class":119},[76,44623,44273],{"class":90},[76,44625,44194],{"class":119},[76,44627,2642],{"class":90},[76,44629,36978],{"class":119},[76,44631,44282],{"class":90},[76,44633,2867],{"class":119},[76,44635,2642],{"class":90},[76,44637,34110],{"class":119},[76,44639,44291],{"class":90},[76,44641,34110],{"class":119},[76,44643,40085],{"class":90},[76,44645,44646,44649,44651,44653,44655],{"class":78,"line":11977},[76,44647,44648],{"class":90},"            nn.AdaptiveAvgPool2d((",[76,44650,669],{"class":119},[76,44652,2642],{"class":90},[76,44654,669],{"class":119},[76,44656,44657],{"class":90},")),\n",[76,44659,44660],{"class":78,"line":11982},[76,44661,40828],{"class":90},[76,44663,44664,44666,44669,44671,44673],{"class":78,"line":18654},[76,44665,40833],{"class":90},[76,44667,44668],{"class":119},"1024",[76,44670,2642],{"class":90},[76,44672,402],{"class":119},[76,44674,130],{"class":90},[76,44676,44677],{"class":78,"line":18660},[76,44678,40164],{"class":90},[76,44680,44681],{"class":78,"line":18683},[76,44682,44683],{"class":540},"        # 对模型参数初始化\n",[76,44685,44686,44688,44690,44692,44694],{"class":78,"line":18689},[76,44687,5488],{"class":82},[76,44689,40906],{"class":90},[76,44691,1475],{"class":82},[76,44693,40911],{"class":119},[76,44695,40914],{"class":90},[76,44697,44698,44700,44702],{"class":78,"line":18712},[76,44699,6724],{"class":82},[76,44701,40926],{"class":119},[76,44703,40929],{"class":90},[76,44705,44706,44708,44711,44713,44716,44718,44720,44722,44724],{"class":78,"line":18726},[76,44707,40939],{"class":90},[76,44709,44710],{"class":7296},"mode",[76,44712,370],{"class":82},[76,44714,44715],{"class":126},"'fan_out'",[76,44717,2642],{"class":90},[76,44719,40942],{"class":7296},[76,44721,370],{"class":82},[76,44723,40947],{"class":126},[76,44725,130],{"class":90},[76,44727,44728],{"class":78,"line":18746},[76,44729,44730],{"class":540},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[76,44732,44733],{"class":78,"line":18752},[76,44734,44735],{"class":540},"                # ② mode = 'fan_out'决定使用的fan值：\n",[76,44737,44738],{"class":78,"line":18763},[76,44739,44740],{"class":540},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[76,44742,44743],{"class":78,"line":18786},[76,44744,44745],{"class":540},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[76,44747,44748],{"class":78,"line":18808},[76,44749,44750],{"class":540},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[76,44752,44753],{"class":78,"line":18813},[76,44754,44755],{"class":540},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[76,44757,44758,44760,44762,44764,44766,44768],{"class":78,"line":18819},[76,44759,40959],{"class":82},[76,44761,40962],{"class":90},[76,44763,729],{"class":82},[76,44765,40967],{"class":82},[76,44767,732],{"class":119},[76,44769,590],{"class":90},[76,44771,44772,44774,44776],{"class":78,"line":18833},[76,44773,40981],{"class":90},[76,44775,1294],{"class":119},[76,44777,130],{"class":90},[76,44779,44780,44783,44785],{"class":78,"line":18846},[76,44781,44782],{"class":82},"                elif",[76,44784,40926],{"class":119},[76,44786,41000],{"class":90},[76,44788,44789,44792,44794,44796,44798],{"class":78,"line":18851},[76,44790,44791],{"class":90},"                    nn.init.normal_(m.weight,",[76,44793,1294],{"class":119},[76,44795,2642],{"class":90},[76,44797,41022],{"class":119},[76,44799,130],{"class":90},[76,44801,44802,44805,44807,44809,44811,44813],{"class":78,"line":18865},[76,44803,44804],{"class":82},"                    if",[76,44806,40962],{"class":90},[76,44808,729],{"class":82},[76,44810,40967],{"class":82},[76,44812,732],{"class":119},[76,44814,590],{"class":90},[76,44816,44817,44820,44822],{"class":78,"line":18870},[76,44818,44819],{"class":90},"                        nn.init.constant_(m.bias,",[76,44821,1294],{"class":119},[76,44823,130],{"class":90},[76,44825,44826],{"class":78,"line":18876},[76,44827,37203],{"class":540},[76,44829,44830,44832,44834],{"class":78,"line":18881},[76,44831,32845],{"class":82},[76,44833,33137],{"class":86},[76,44835,33140],{"class":90},[76,44837,44838,44840,44842,44844],{"class":78,"line":18895},[76,44839,33145],{"class":90},[76,44841,370],{"class":82},[76,44843,32867],{"class":119},[76,44845,44846],{"class":90},".b1(x)\n",[76,44848,44849,44851,44853,44855],{"class":78,"line":18900},[76,44850,33145],{"class":90},[76,44852,370],{"class":82},[76,44854,32867],{"class":119},[76,44856,44857],{"class":90},".b2(x)\n",[76,44859,44860,44862,44864,44866],{"class":78,"line":18905},[76,44861,33145],{"class":90},[76,44863,370],{"class":82},[76,44865,32867],{"class":119},[76,44867,44868],{"class":90},".b3(x)\n",[76,44870,44871,44873,44875,44877],{"class":78,"line":18919},[76,44872,33145],{"class":90},[76,44874,370],{"class":82},[76,44876,32867],{"class":119},[76,44878,44879],{"class":90},".b4(x)\n",[76,44881,44882,44884,44886,44888],{"class":78,"line":18931},[76,44883,33145],{"class":90},[76,44885,370],{"class":82},[76,44887,32867],{"class":119},[76,44889,44890],{"class":90},".b5(x)\n",[76,44892,44893,44895],{"class":78,"line":18936},[76,44894,595],{"class":82},[76,44896,33253],{"class":90},[76,44898,44899],{"class":78,"line":18949},[76,44900,149],{"emptyLinePlaceholder":148},[76,44902,44903],{"class":78,"line":18954},[76,44904,44905],{"class":540},"# 模型展示\n",[76,44907,44908,44910,44912,44914,44916],{"class":78,"line":18959},[76,44909,723],{"class":82},[76,44911,33264],{"class":119},[76,44913,1250],{"class":82},[76,44915,33269],{"class":126},[76,44917,590],{"class":90},[76,44919,44920,44922,44924,44926,44928,44930,44932,44934,44936],{"class":78,"line":18964},[76,44921,33281],{"class":90},[76,44923,370],{"class":82},[76,44925,32496],{"class":90},[76,44927,33288],{"class":126},[76,44929,3811],{"class":82},[76,44931,33293],{"class":90},[76,44933,1328],{"class":82},[76,44935,32521],{"class":126},[76,44937,130],{"class":90},[76,44939,44940,44942,44944],{"class":78,"line":18977},[76,44941,33333],{"class":90},[76,44943,370],{"class":82},[76,44945,44946],{"class":90},"GoogLeNet(Inception).to(device)\n",[76,44948,44949,44951,44953,44955,44957,44959,44961,44963],{"class":78,"line":18982},[76,44950,120],{"class":119},[76,44952,33345],{"class":90},[76,44954,669],{"class":119},[76,44956,2642],{"class":90},[76,44958,33544],{"class":119},[76,44960,2642],{"class":90},[76,44962,33544],{"class":119},[76,44964,33358],{"class":90},[26,44966,44967],{"start":94},[29,44968,41219],{},[66,44970,44972],{"className":68,"code":44971,"language":70,"meta":71,"style":71},"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",[73,44973,44974,44980,44986,44996,45002,45012,45022,45032,45042,45052,45056,45067,45077,45081,45085,45089,45097,45109,45119,45135,45145,45177,45191,45201,45211,45215,45225,45239,45249,45259,45269,45275,45279,45283,45287,45291,45295,45303,45323,45327,45331,45335,45339,45343,45359,45363,45367,45375,45379,45383,45391,45395,45399,45403,45411,45415,45419,45423,45427,45435,45439,45447,45451,45459,45463,45471,45475,45483,45487,45491,45499,45503,45507,45511,45523,45547,45561,45565,45569,45573,45581,45585,45593,45597,45605,45609,45617,45621,45629,45633,45641,45645,45657,45661,45669,45673,45681,45685,45689,45693,45697,45705,45709,45725,45729,45737,45741,45745,45749,45753,45757,45761,45765,45781,45785,45797,45801,45813,45817,45829,45833,45841,45845,45853,45857,45861,45865,45871,45875,45883,45887,45903,45907,45915,45919,45935,45947,45951,45963,45967,45971,45979,45983,45987,45995,45999,46007,46011,46019,46023,46027,46069,46111,46115,46119,46135,46139,46155,46159,46163,46171,46175,46179,46191,46229,46233,46237,46245,46249,46263,46273,46279,46285,46291,46297,46301,46305,46311,46315,46319,46327,46331,46349,46353,46357,46361,46377,46381,46385,46389,46393,46397,46417,46437,46441,46445,46449,46457,46465,46469,46485,46505,46525,46529,46533,46541,46549,46553,46557,46561,46573,46577,46587,46595,46612],{"__ignoreMap":71},[76,44975,44976,44978],{"class":78,"line":79},[76,44977,32438],{"class":82},[76,44979,33864],{"class":90},[76,44981,44982,44984],{"class":78,"line":94},[76,44983,32438],{"class":82},[76,44985,33871],{"class":90},[76,44987,44988,44990,44992,44994],{"class":78,"line":133},[76,44989,32438],{"class":82},[76,44991,33882],{"class":90},[76,44993,33426],{"class":82},[76,44995,33887],{"class":90},[76,44997,44998,45000],{"class":78,"line":145},[76,44999,32438],{"class":82},[76,45001,32441],{"class":90},[76,45003,45004,45006,45008,45010],{"class":78,"line":152},[76,45005,32781],{"class":82},[76,45007,33458],{"class":90},[76,45009,32438],{"class":82},[76,45011,33904],{"class":90},[76,45013,45014,45016,45018,45020],{"class":78,"line":157},[76,45015,32781],{"class":82},[76,45017,33411],{"class":90},[76,45019,32438],{"class":82},[76,45021,33416],{"class":90},[76,45023,45024,45026,45028,45030],{"class":78,"line":246},[76,45025,32781],{"class":82},[76,45027,33441],{"class":90},[76,45029,32438],{"class":82},[76,45031,33446],{"class":90},[76,45033,45034,45036,45038,45040],{"class":78,"line":251},[76,45035,32438],{"class":82},[76,45037,33458],{"class":90},[76,45039,33426],{"class":82},[76,45041,33463],{"class":90},[76,45043,45044,45046,45048,45050],{"class":78,"line":257},[76,45045,32438],{"class":82},[76,45047,33475],{"class":90},[76,45049,33426],{"class":82},[76,45051,33480],{"class":90},[76,45053,45054],{"class":78,"line":641},[76,45055,33949],{"class":540},[76,45057,45058,45060,45062,45064],{"class":78,"line":646},[76,45059,32781],{"class":82},[76,45061,33956],{"class":90},[76,45063,32438],{"class":82},[76,45065,45066],{"class":90}," GoogLeNet, Inception\n",[76,45068,45069,45071,45073,45075],{"class":78,"line":659},[76,45070,32781],{"class":82},[76,45072,32784],{"class":90},[76,45074,32438],{"class":82},[76,45076,32789],{"class":90},[76,45078,45079],{"class":78,"line":1608},[76,45080,149],{"emptyLinePlaceholder":148},[76,45082,45083],{"class":78,"line":1632},[76,45084,149],{"emptyLinePlaceholder":148},[76,45086,45087],{"class":78,"line":1637},[76,45088,33984],{"class":540},[76,45090,45091,45093,45095],{"class":78,"line":1642},[76,45092,83],{"class":82},[76,45094,33991],{"class":86},[76,45096,91],{"class":90},[76,45098,45099,45101,45103,45105,45107],{"class":78,"line":1652},[76,45100,33998],{"class":90},[76,45102,370],{"class":82},[76,45104,33498],{"class":90},[76,45106,33506],{"class":126},[76,45108,33509],{"class":90},[76,45110,45111,45113,45115,45117],{"class":78,"line":1660},[76,45112,34011],{"class":7296},[76,45114,370],{"class":82},[76,45116,33519],{"class":119},[76,45118,33509],{"class":90},[76,45120,45121,45123,45125,45127,45129,45131,45133],{"class":78,"line":1683},[76,45122,34022],{"class":7296},[76,45124,370],{"class":82},[76,45126,33536],{"class":90},[76,45128,33539],{"class":7296},[76,45130,370],{"class":82},[76,45132,37487],{"class":119},[76,45134,33547],{"class":90},[76,45136,45137,45139,45141,45143],{"class":78,"line":1698},[76,45138,34039],{"class":7296},[76,45140,370],{"class":82},[76,45142,33519],{"class":119},[76,45144,130],{"class":90},[76,45146,45147,45149,45151,45153,45155,45157,45159,45161,45163,45165,45167,45169,45171,45173,45175],{"class":78,"line":1711},[76,45148,34050],{"class":90},[76,45150,370],{"class":82},[76,45152,34055],{"class":90},[76,45154,34058],{"class":119},[76,45156,123],{"class":90},[76,45158,34063],{"class":119},[76,45160,2718],{"class":82},[76,45162,9436],{"class":119},[76,45164,34070],{"class":90},[76,45166,34058],{"class":119},[76,45168,123],{"class":90},[76,45170,34077],{"class":119},[76,45172,2718],{"class":82},[76,45174,9436],{"class":119},[76,45176,34084],{"class":90},[76,45178,45179,45181,45183,45185,45187,45189],{"class":78,"line":1717},[76,45180,34089],{"class":90},[76,45182,370],{"class":82},[76,45184,34094],{"class":90},[76,45186,33580],{"class":7296},[76,45188,370],{"class":82},[76,45190,33585],{"class":90},[76,45192,45193,45195,45197,45199],{"class":78,"line":1728},[76,45194,34105],{"class":7296},[76,45196,370],{"class":82},[76,45198,2463],{"class":119},[76,45200,33509],{"class":90},[76,45202,45203,45205,45207,45209],{"class":78,"line":1740},[76,45204,34117],{"class":7296},[76,45206,370],{"class":82},[76,45208,33519],{"class":119},[76,45210,33509],{"class":90},[76,45212,45213],{"class":78,"line":1746},[76,45214,34128],{"class":540},[76,45216,45217,45219,45221,45223],{"class":78,"line":1751},[76,45218,34133],{"class":7296},[76,45220,370],{"class":82},[76,45222,2659],{"class":119},[76,45224,130],{"class":90},[76,45226,45227,45229,45231,45233,45235,45237],{"class":78,"line":1756},[76,45228,34144],{"class":90},[76,45230,370],{"class":82},[76,45232,33577],{"class":90},[76,45234,33580],{"class":7296},[76,45236,370],{"class":82},[76,45238,34155],{"class":90},[76,45240,45241,45243,45245,45247],{"class":78,"line":1766},[76,45242,34160],{"class":7296},[76,45244,370],{"class":82},[76,45246,2463],{"class":119},[76,45248,33509],{"class":90},[76,45250,45251,45253,45255,45257],{"class":78,"line":1773},[76,45252,34171],{"class":7296},[76,45254,370],{"class":82},[76,45256,33519],{"class":119},[76,45258,33509],{"class":90},[76,45260,45261,45263,45265,45267],{"class":78,"line":1793},[76,45262,34182],{"class":7296},[76,45264,370],{"class":82},[76,45266,2659],{"class":119},[76,45268,130],{"class":90},[76,45270,45271,45273],{"class":78,"line":1806},[76,45272,441],{"class":82},[76,45274,34195],{"class":90},[76,45276,45277],{"class":78,"line":1817},[76,45278,149],{"emptyLinePlaceholder":148},[76,45280,45281],{"class":78,"line":1822},[76,45282,34204],{"class":540},[76,45284,45285],{"class":78,"line":1835},[76,45286,34209],{"class":540},[76,45288,45289],{"class":78,"line":1847},[76,45290,149],{"emptyLinePlaceholder":148},[76,45292,45293],{"class":78,"line":1852},[76,45294,34218],{"class":540},[76,45296,45297,45299,45301],{"class":78,"line":1862},[76,45298,83],{"class":82},[76,45300,34225],{"class":86},[76,45302,34228],{"class":90},[76,45304,45305,45307,45309,45311,45313,45315,45317,45319,45321],{"class":78,"line":1874},[76,45306,33281],{"class":90},[76,45308,370],{"class":82},[76,45310,32496],{"class":90},[76,45312,33288],{"class":126},[76,45314,3811],{"class":82},[76,45316,33293],{"class":90},[76,45318,1328],{"class":82},[76,45320,34247],{"class":126},[76,45322,130],{"class":90},[76,45324,45325],{"class":78,"line":1879},[76,45326,149],{"emptyLinePlaceholder":148},[76,45328,45329],{"class":78,"line":1884},[76,45330,149],{"emptyLinePlaceholder":148},[76,45332,45333],{"class":78,"line":1889},[76,45334,34262],{"class":540},[76,45336,45337],{"class":78,"line":1900},[76,45338,34267],{"class":540},[76,45340,45341],{"class":78,"line":1906},[76,45342,34272],{"class":540},[76,45344,45345,45347,45349,45351,45353,45355,45357],{"class":78,"line":1924},[76,45346,34277],{"class":90},[76,45348,370],{"class":82},[76,45350,34282],{"class":90},[76,45352,34285],{"class":7296},[76,45354,370],{"class":82},[76,45356,34290],{"class":119},[76,45358,130],{"class":90},[76,45360,45361],{"class":78,"line":1929},[76,45362,149],{"emptyLinePlaceholder":148},[76,45364,45365],{"class":78,"line":1944},[76,45366,34301],{"class":540},[76,45368,45369,45371,45373],{"class":78,"line":1950},[76,45370,34306],{"class":90},[76,45372,370],{"class":82},[76,45374,34311],{"class":90},[76,45376,45377],{"class":78,"line":1965},[76,45378,149],{"emptyLinePlaceholder":148},[76,45380,45381],{"class":78,"line":1971},[76,45382,34320],{"class":540},[76,45384,45385,45387,45389],{"class":78,"line":1985},[76,45386,33333],{"class":90},[76,45388,370],{"class":82},[76,45390,34329],{"class":90},[76,45392,45393],{"class":78,"line":1991},[76,45394,34334],{"class":540},[76,45396,45397],{"class":78,"line":2005},[76,45398,34339],{"class":540},[76,45400,45401],{"class":78,"line":2017},[76,45402,34344],{"class":540},[76,45404,45405,45407,45409],{"class":78,"line":2023},[76,45406,34349],{"class":90},[76,45408,370],{"class":82},[76,45410,34354],{"class":90},[76,45412,45413],{"class":78,"line":2031},[76,45414,149],{"emptyLinePlaceholder":148},[76,45416,45417],{"class":78,"line":11880},[76,45418,149],{"emptyLinePlaceholder":148},[76,45420,45421],{"class":78,"line":11901},[76,45422,34367],{"class":540},[76,45424,45425],{"class":78,"line":11907},[76,45426,34372],{"class":540},[76,45428,45429,45431,45433],{"class":78,"line":11921},[76,45430,34377],{"class":90},[76,45432,370],{"class":82},[76,45434,34382],{"class":119},[76,45436,45437],{"class":78,"line":11927},[76,45438,34387],{"class":540},[76,45440,45441,45443,45445],{"class":78,"line":11954},[76,45442,34392],{"class":90},[76,45444,370],{"class":82},[76,45446,34397],{"class":90},[76,45448,45449],{"class":78,"line":11963},[76,45450,34402],{"class":540},[76,45452,45453,45455,45457],{"class":78,"line":11969},[76,45454,34407],{"class":90},[76,45456,370],{"class":82},[76,45458,34397],{"class":90},[76,45460,45461],{"class":78,"line":11977},[76,45462,34416],{"class":540},[76,45464,45465,45467,45469],{"class":78,"line":11982},[76,45466,34421],{"class":90},[76,45468,370],{"class":82},[76,45470,34397],{"class":90},[76,45472,45473],{"class":78,"line":18654},[76,45474,34430],{"class":540},[76,45476,45477,45479,45481],{"class":78,"line":18660},[76,45478,34435],{"class":90},[76,45480,370],{"class":82},[76,45482,34397],{"class":90},[76,45484,45485],{"class":78,"line":18683},[76,45486,149],{"emptyLinePlaceholder":148},[76,45488,45489],{"class":78,"line":18689},[76,45490,34448],{"class":540},[76,45492,45493,45495,45497],{"class":78,"line":18712},[76,45494,34453],{"class":90},[76,45496,370],{"class":82},[76,45498,34458],{"class":90},[76,45500,45501],{"class":78,"line":18726},[76,45502,149],{"emptyLinePlaceholder":148},[76,45504,45505],{"class":78,"line":18746},[76,45506,149],{"emptyLinePlaceholder":148},[76,45508,45509],{"class":78,"line":18752},[76,45510,34471],{"class":540},[76,45512,45513,45515,45517,45519,45521],{"class":78,"line":18763},[76,45514,1469],{"class":82},[76,45516,34478],{"class":90},[76,45518,1475],{"class":82},[76,45520,34483],{"class":119},[76,45522,34486],{"class":90},[76,45524,45525,45527,45529,45531,45533,45535,45537,45539,45541,45543,45545],{"class":78,"line":18786},[76,45526,1701],{"class":119},[76,45528,123],{"class":90},[76,45530,34495],{"class":126},[76,45532,34498],{"class":119},[76,45534,795],{"class":126},[76,45536,34498],{"class":119},[76,45538,307],{"class":126},[76,45540,34507],{"class":90},[76,45542,666],{"class":82},[76,45544,669],{"class":119},[76,45546,656],{"class":90},[76,45548,45549,45551,45553,45555,45557,45559],{"class":78,"line":18808},[76,45550,1701],{"class":119},[76,45552,123],{"class":90},[76,45554,1116],{"class":126},[76,45556,2718],{"class":82},[76,45558,402],{"class":119},[76,45560,130],{"class":90},[76,45562,45563],{"class":78,"line":18813},[76,45564,149],{"emptyLinePlaceholder":148},[76,45566,45567],{"class":78,"line":18819},[76,45568,34536],{"class":540},[76,45570,45571],{"class":78,"line":18833},[76,45572,34541],{"class":540},[76,45574,45575,45577,45579],{"class":78,"line":18846},[76,45576,34546],{"class":90},[76,45578,370],{"class":82},[76,45580,34382],{"class":119},[76,45582,45583],{"class":78,"line":18851},[76,45584,34555],{"class":540},[76,45586,45587,45589,45591],{"class":78,"line":18865},[76,45588,34560],{"class":90},[76,45590,370],{"class":82},[76,45592,5172],{"class":119},[76,45594,45595],{"class":78,"line":18870},[76,45596,34569],{"class":540},[76,45598,45599,45601,45603],{"class":78,"line":18876},[76,45600,34574],{"class":90},[76,45602,370],{"class":82},[76,45604,34382],{"class":119},[76,45606,45607],{"class":78,"line":18881},[76,45608,34583],{"class":540},[76,45610,45611,45613,45615],{"class":78,"line":18895},[76,45612,34588],{"class":90},[76,45614,370],{"class":82},[76,45616,5172],{"class":119},[76,45618,45619],{"class":78,"line":18900},[76,45620,34597],{"class":540},[76,45622,45623,45625,45627],{"class":78,"line":18905},[76,45624,34602],{"class":90},[76,45626,370],{"class":82},[76,45628,5172],{"class":119},[76,45630,45631],{"class":78,"line":18919},[76,45632,34611],{"class":540},[76,45634,45635,45637,45639],{"class":78,"line":18931},[76,45636,34616],{"class":90},[76,45638,370],{"class":82},[76,45640,5172],{"class":119},[76,45642,45643],{"class":78,"line":18936},[76,45644,34625],{"class":540},[76,45646,45647,45649,45651,45653,45655],{"class":78,"line":18949},[76,45648,5488],{"class":82},[76,45650,33644],{"class":90},[76,45652,1475],{"class":82},[76,45654,33649],{"class":119},[76,45656,34638],{"class":90},[76,45658,45659],{"class":78,"line":18954},[76,45660,34643],{"class":540},[76,45662,45663,45665,45667],{"class":78,"line":18959},[76,45664,34648],{"class":90},[76,45666,370],{"class":82},[76,45668,34653],{"class":90},[76,45670,45671],{"class":78,"line":18964},[76,45672,34658],{"class":540},[76,45674,45675,45677,45679],{"class":78,"line":18977},[76,45676,34663],{"class":90},[76,45678,370],{"class":82},[76,45680,34668],{"class":90},[76,45682,45683],{"class":78,"line":18982},[76,45684,34674],{"class":540},[76,45686,45687],{"class":78,"line":34671},[76,45688,34680],{"class":90},[76,45690,45691],{"class":78,"line":34677},[76,45692,34686],{"class":540},[76,45694,45695],{"class":78,"line":34683},[76,45696,34692],{"class":540},[76,45698,45699,45701,45703],{"class":78,"line":34689},[76,45700,34698],{"class":90},[76,45702,370],{"class":82},[76,45704,34703],{"class":90},[76,45706,45707],{"class":78,"line":34695},[76,45708,34709],{"class":540},[76,45710,45711,45713,45715,45717,45719,45721,45723],{"class":78,"line":34706},[76,45712,34715],{"class":90},[76,45714,370],{"class":82},[76,45716,34720],{"class":90},[76,45718,34723],{"class":7296},[76,45720,370],{"class":82},[76,45722,669],{"class":119},[76,45724,130],{"class":90},[76,45726,45727],{"class":78,"line":34712},[76,45728,34735],{"class":540},[76,45730,45731,45733,45735],{"class":78,"line":34732},[76,45732,34741],{"class":90},[76,45734,370],{"class":82},[76,45736,34746],{"class":90},[76,45738,45739],{"class":78,"line":34738},[76,45740,34752],{"class":540},[76,45742,45743],{"class":78,"line":34749},[76,45744,34758],{"class":90},[76,45746,45747],{"class":78,"line":34755},[76,45748,34764],{"class":540},[76,45750,45751],{"class":78,"line":34761},[76,45752,34770],{"class":90},[76,45754,45755],{"class":78,"line":34767},[76,45756,34776],{"class":540},[76,45758,45759],{"class":78,"line":34773},[76,45760,34782],{"class":90},[76,45762,45763],{"class":78,"line":34779},[76,45764,34788],{"class":540},[76,45766,45767,45769,45771,45773,45775,45777,45779],{"class":78,"line":34785},[76,45768,34794],{"class":90},[76,45770,1060],{"class":82},[76,45772,34799],{"class":90},[76,45774,2718],{"class":82},[76,45776,34804],{"class":90},[76,45778,1294],{"class":119},[76,45780,130],{"class":90},[76,45782,45783],{"class":78,"line":34791},[76,45784,34814],{"class":540},[76,45786,45787,45789,45791,45793,45795],{"class":78,"line":34811},[76,45788,34820],{"class":90},[76,45790,1060],{"class":82},[76,45792,34825],{"class":90},[76,45794,1250],{"class":82},[76,45796,34830],{"class":90},[76,45798,45799],{"class":78,"line":34817},[76,45800,34836],{"class":540},[76,45802,45803,45805,45807,45809,45811],{"class":78,"line":34833},[76,45804,34842],{"class":90},[76,45806,1060],{"class":82},[76,45808,34804],{"class":90},[76,45810,1294],{"class":119},[76,45812,130],{"class":90},[76,45814,45815],{"class":78,"line":34839},[76,45816,34856],{"class":540},[76,45818,45819,45821,45823,45825,45827],{"class":78,"line":34853},[76,45820,5488],{"class":82},[76,45822,34864],{"class":90},[76,45824,1475],{"class":82},[76,45826,33649],{"class":119},[76,45828,34871],{"class":90},[76,45830,45831],{"class":78,"line":34859},[76,45832,34877],{"class":540},[76,45834,45835,45837,45839],{"class":78,"line":34874},[76,45836,34648],{"class":90},[76,45838,370],{"class":82},[76,45840,34653],{"class":90},[76,45842,45843],{"class":78,"line":34880},[76,45844,34892],{"class":540},[76,45846,45847,45849,45851],{"class":78,"line":34889},[76,45848,34663],{"class":90},[76,45850,370],{"class":82},[76,45852,34668],{"class":90},[76,45854,45855],{"class":78,"line":34895},[76,45856,34907],{"class":540},[76,45858,45859],{"class":78,"line":34904},[76,45860,34913],{"class":90},[76,45862,45863],{"class":78,"line":34910},[76,45864,38394],{"class":540},[76,45866,45867,45869],{"class":78,"line":34916},[76,45868,34919],{"class":82},[76,45870,34922],{"class":90},[76,45872,45873],{"class":78,"line":34925},[76,45874,34928],{"class":540},[76,45876,45877,45879,45881],{"class":78,"line":34931},[76,45878,38409],{"class":90},[76,45880,370],{"class":82},[76,45882,34703],{"class":90},[76,45884,45885],{"class":78,"line":34942},[76,45886,34945],{"class":540},[76,45888,45889,45891,45893,45895,45897,45899,45901],{"class":78,"line":34948},[76,45890,38422],{"class":90},[76,45892,370],{"class":82},[76,45894,34720],{"class":90},[76,45896,34723],{"class":7296},[76,45898,370],{"class":82},[76,45900,669],{"class":119},[76,45902,130],{"class":90},[76,45904,45905],{"class":78,"line":34967},[76,45906,34970],{"class":540},[76,45908,45909,45911,45913],{"class":78,"line":34973},[76,45910,38443],{"class":90},[76,45912,370],{"class":82},[76,45914,34746],{"class":90},[76,45916,45917],{"class":78,"line":34984},[76,45918,34987],{"class":540},[76,45920,45921,45923,45925,45927,45929,45931,45933],{"class":78,"line":34990},[76,45922,38456],{"class":90},[76,45924,1060],{"class":82},[76,45926,38461],{"class":90},[76,45928,2718],{"class":82},[76,45930,34804],{"class":90},[76,45932,1294],{"class":119},[76,45934,130],{"class":90},[76,45936,45937,45939,45941,45943,45945],{"class":78,"line":35010},[76,45938,38474],{"class":90},[76,45940,1060],{"class":82},[76,45942,34825],{"class":90},[76,45944,1250],{"class":82},[76,45946,34830],{"class":90},[76,45948,45949],{"class":78,"line":35026},[76,45950,38487],{"class":540},[76,45952,45953,45955,45957,45959,45961],{"class":78,"line":35032},[76,45954,38492],{"class":90},[76,45956,1060],{"class":82},[76,45958,34804],{"class":90},[76,45960,1294],{"class":119},[76,45962,130],{"class":90},[76,45964,45965],{"class":78,"line":35046},[76,45966,35049],{"class":540},[76,45968,45969],{"class":78,"line":35052},[76,45970,35055],{"class":540},[76,45972,45973,45975,45977],{"class":78,"line":35058},[76,45974,35061],{"class":90},[76,45976,795],{"class":82},[76,45978,35066],{"class":90},[76,45980,45981],{"class":78,"line":35069},[76,45982,35072],{"class":540},[76,45984,45985],{"class":78,"line":35075},[76,45986,35078],{"class":540},[76,45988,45989,45991,45993],{"class":78,"line":35081},[76,45990,35084],{"class":90},[76,45992,795],{"class":82},[76,45994,35066],{"class":90},[76,45996,45997],{"class":78,"line":35091},[76,45998,35094],{"class":540},[76,46000,46001,46003,46005],{"class":78,"line":35097},[76,46002,35100],{"class":90},[76,46004,795],{"class":82},[76,46006,35105],{"class":90},[76,46008,46009],{"class":78,"line":35108},[76,46010,35111],{"class":540},[76,46012,46013,46015,46017],{"class":78,"line":35114},[76,46014,35117],{"class":90},[76,46016,795],{"class":82},[76,46018,35105],{"class":90},[76,46020,46021],{"class":78,"line":35124},[76,46022,149],{"emptyLinePlaceholder":148},[76,46024,46025],{"class":78,"line":35129},[76,46026,35132],{"class":540},[76,46028,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067],{"class":78,"line":35135},[76,46030,1701],{"class":119},[76,46032,123],{"class":90},[76,46034,5677],{"class":126},[76,46036,34498],{"class":119},[76,46038,35146],{"class":126},[76,46040,298],{"class":119},[76,46042,35151],{"class":82},[76,46044,304],{"class":119},[76,46046,35156],{"class":126},[76,46048,298],{"class":119},[76,46050,35151],{"class":82},[76,46052,304],{"class":119},[76,46054,5677],{"class":126},[76,46056,35167],{"class":90},[76,46058,666],{"class":82},[76,46060,669],{"class":119},[76,46062,35174],{"class":90},[76,46064,666],{"class":82},[76,46066,669],{"class":119},[76,46068,35181],{"class":90},[76,46070,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109],{"class":78,"line":35184},[76,46072,1701],{"class":119},[76,46074,123],{"class":90},[76,46076,5677],{"class":126},[76,46078,34498],{"class":119},[76,46080,35195],{"class":126},[76,46082,298],{"class":119},[76,46084,35151],{"class":82},[76,46086,304],{"class":119},[76,46088,35204],{"class":126},[76,46090,298],{"class":119},[76,46092,35151],{"class":82},[76,46094,304],{"class":119},[76,46096,5677],{"class":126},[76,46098,35215],{"class":90},[76,46100,666],{"class":82},[76,46102,669],{"class":119},[76,46104,35222],{"class":90},[76,46106,666],{"class":82},[76,46108,669],{"class":119},[76,46110,35181],{"class":90},[76,46112,46113],{"class":78,"line":35231},[76,46114,149],{"emptyLinePlaceholder":148},[76,46116,46117],{"class":78,"line":35236},[76,46118,35239],{"class":540},[76,46120,46121,46123,46125,46127,46129,46131,46133],{"class":78,"line":35242},[76,46122,4592],{"class":82},[76,46124,35247],{"class":90},[76,46126,666],{"class":82},[76,46128,669],{"class":119},[76,46130,3196],{"class":90},[76,46132,1829],{"class":82},[76,46134,35258],{"class":90},[76,46136,46137],{"class":78,"line":35261},[76,46138,35264],{"class":540},[76,46140,46141,46143,46145,46147,46149,46151,46153],{"class":78,"line":35267},[76,46142,35270],{"class":90},[76,46144,2311],{"class":119},[76,46146,370],{"class":82},[76,46148,35277],{"class":90},[76,46150,666],{"class":82},[76,46152,669],{"class":119},[76,46154,35284],{"class":90},[76,46156,46157],{"class":78,"line":35287},[76,46158,35290],{"class":540},[76,46160,46161],{"class":78,"line":35293},[76,46162,35296],{"class":540},[76,46164,46165,46167,46169],{"class":78,"line":35299},[76,46166,35302],{"class":90},[76,46168,370],{"class":82},[76,46170,34354],{"class":90},[76,46172,46173],{"class":78,"line":35309},[76,46174,149],{"emptyLinePlaceholder":148},[76,46176,46177],{"class":78,"line":35314},[76,46178,35317],{"class":540},[76,46180,46181,46183,46185,46187,46189],{"class":78,"line":35320},[76,46182,35323],{"class":90},[76,46184,370],{"class":82},[76,46186,35328],{"class":90},[76,46188,666],{"class":82},[76,46190,35333],{"class":90},[76,46192,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227],{"class":78,"line":35336},[76,46194,1701],{"class":119},[76,46196,123],{"class":90},[76,46198,35343],{"class":126},[76,46200,298],{"class":119},[76,46202,35348],{"class":82},[76,46204,304],{"class":119},[76,46206,2805],{"class":126},[76,46208,298],{"class":119},[76,46210,35348],{"class":82},[76,46212,304],{"class":119},[76,46214,35361],{"class":126},[76,46216,35364],{"class":90},[76,46218,35367],{"class":82},[76,46220,3164],{"class":119},[76,46222,35372],{"class":90},[76,46224,2592],{"class":82},[76,46226,3164],{"class":119},[76,46228,656],{"class":90},[76,46230,46231],{"class":78,"line":35381},[76,46232,38771],{"class":540},[76,46234,46235],{"class":78,"line":35387},[76,46236,38776],{"class":540},[76,46238,46239,46241,46243],{"class":78,"line":35393},[76,46240,38781],{"class":90},[76,46242,35405],{"class":126},[76,46244,130],{"class":90},[76,46246,46247],{"class":78,"line":35399},[76,46248,35425],{"class":540},[76,46250,46251,46253,46255,46257,46259,46261],{"class":78,"line":35410},[76,46252,35431],{"class":90},[76,46254,370],{"class":82},[76,46256,35436],{"class":90},[76,46258,35439],{"class":7296},[76,46260,370],{"class":82},[76,46262,3666],{"class":90},[76,46264,46265,46267,46269,46271],{"class":78,"line":35416},[76,46266,35449],{"class":126},[76,46268,3117],{"class":90},[76,46270,35454],{"class":119},[76,46272,35457],{"class":90},[76,46274,46275,46277],{"class":78,"line":35422},[76,46276,35463],{"class":126},[76,46278,35466],{"class":90},[76,46280,46281,46283],{"class":78,"line":35428},[76,46282,35472],{"class":126},[76,46284,35475],{"class":90},[76,46286,46287,46289],{"class":78,"line":35446},[76,46288,35481],{"class":126},[76,46290,35484],{"class":90},[76,46292,46293,46295],{"class":78,"line":35460},[76,46294,35490],{"class":126},[76,46296,35493],{"class":90},[76,46298,46299],{"class":78,"line":35469},[76,46300,35499],{"class":90},[76,46302,46303],{"class":78,"line":35478},[76,46304,35505],{"class":540},[76,46306,46307,46309],{"class":78,"line":35487},[76,46308,441],{"class":82},[76,46310,35513],{"class":90},[76,46312,46313],{"class":78,"line":35496},[76,46314,149],{"emptyLinePlaceholder":148},[76,46316,46317],{"class":78,"line":35502},[76,46318,35524],{"class":540},[76,46320,46321,46323,46325],{"class":78,"line":35508},[76,46322,83],{"class":82},[76,46324,35532],{"class":86},[76,46326,35535],{"class":90},[76,46328,46329],{"class":78,"line":35516},[76,46330,35541],{"class":540},[76,46332,46333,46335,46337,46339,46341,46343,46345,46347],{"class":78,"line":35521},[76,46334,35547],{"class":90},[76,46336,33735],{"class":7296},[76,46338,370],{"class":82},[76,46340,123],{"class":90},[76,46342,2760],{"class":119},[76,46344,2642],{"class":90},[76,46346,2557],{"class":119},[76,46348,656],{"class":90},[76,46350,46351],{"class":78,"line":35527},[76,46352,35567],{"class":540},[76,46354,46355],{"class":78,"line":35538},[76,46356,35573],{"class":540},[76,46358,46359],{"class":78,"line":35544},[76,46360,35579],{"class":540},[76,46362,46363,46365,46367,46369,46371,46373,46375],{"class":78,"line":35564},[76,46364,33769],{"class":90},[76,46366,669],{"class":119},[76,46368,2642],{"class":90},[76,46370,2345],{"class":119},[76,46372,2642],{"class":90},[76,46374,669],{"class":119},[76,46376,130],{"class":90},[76,46378,46379],{"class":78,"line":35570},[76,46380,35602],{"class":540},[76,46382,46383],{"class":78,"line":35576},[76,46384,35608],{"class":540},[76,46386,46387],{"class":78,"line":35582},[76,46388,35614],{"class":540},[76,46390,46391],{"class":78,"line":35599},[76,46392,35620],{"class":540},[76,46394,46395],{"class":78,"line":35605},[76,46396,35626],{"class":540},[76,46398,46399,46401,46403,46405,46407,46409,46411,46413,46415],{"class":78,"line":35611},[76,46400,35632],{"class":90},[76,46402,35635],{"class":126},[76,46404,35638],{"class":90},[76,46406,35641],{"class":126},[76,46408,2642],{"class":90},[76,46410,35646],{"class":7296},[76,46412,370],{"class":82},[76,46414,35651],{"class":126},[76,46416,130],{"class":90},[76,46418,46419,46421,46423,46425,46427,46429,46431,46433,46435],{"class":78,"line":35617},[76,46420,35632],{"class":90},[76,46422,35635],{"class":126},[76,46424,35663],{"class":90},[76,46426,35666],{"class":126},[76,46428,2642],{"class":90},[76,46430,35646],{"class":7296},[76,46432,370],{"class":82},[76,46434,35675],{"class":126},[76,46436,130],{"class":90},[76,46438,46439],{"class":78,"line":35623},[76,46440,35683],{"class":540},[76,46442,46443],{"class":78,"line":35629},[76,46444,35689],{"class":90},[76,46446,46447],{"class":78,"line":35656},[76,46448,35695],{"class":540},[76,46450,46451,46453,46455],{"class":78,"line":35680},[76,46452,35701],{"class":90},[76,46454,35704],{"class":126},[76,46456,130],{"class":90},[76,46458,46459,46461,46463],{"class":78,"line":35686},[76,46460,35712],{"class":90},[76,46462,35715],{"class":126},[76,46464,130],{"class":90},[76,46466,46467],{"class":78,"line":35692},[76,46468,35723],{"class":540},[76,46470,46471,46473,46475,46477,46479,46481,46483],{"class":78,"line":35698},[76,46472,33769],{"class":90},[76,46474,669],{"class":119},[76,46476,2642],{"class":90},[76,46478,2345],{"class":119},[76,46480,2642],{"class":90},[76,46482,2345],{"class":119},[76,46484,130],{"class":90},[76,46486,46487,46489,46491,46493,46495,46497,46499,46501,46503],{"class":78,"line":35709},[76,46488,35632],{"class":90},[76,46490,35635],{"class":126},[76,46492,35750],{"class":90},[76,46494,35641],{"class":126},[76,46496,2642],{"class":90},[76,46498,35646],{"class":7296},[76,46500,370],{"class":82},[76,46502,35761],{"class":126},[76,46504,130],{"class":90},[76,46506,46507,46509,46511,46513,46515,46517,46519,46521,46523],{"class":78,"line":35720},[76,46508,35632],{"class":90},[76,46510,35635],{"class":126},[76,46512,35773],{"class":90},[76,46514,35666],{"class":126},[76,46516,2642],{"class":90},[76,46518,35646],{"class":7296},[76,46520,370],{"class":82},[76,46522,35784],{"class":126},[76,46524,130],{"class":90},[76,46526,46527],{"class":78,"line":35726},[76,46528,35792],{"class":540},[76,46530,46531],{"class":78,"line":35743},[76,46532,35689],{"class":90},[76,46534,46535,46537,46539],{"class":78,"line":35766},[76,46536,35701],{"class":90},[76,46538,35635],{"class":126},[76,46540,130],{"class":90},[76,46542,46543,46545,46547],{"class":78,"line":35789},[76,46544,35712],{"class":90},[76,46546,35814],{"class":126},[76,46548,130],{"class":90},[76,46550,46551],{"class":78,"line":35795},[76,46552,35822],{"class":90},[76,46554,46555],{"class":78,"line":35800},[76,46556,149],{"emptyLinePlaceholder":148},[76,46558,46559],{"class":78,"line":35809},[76,46560,35833],{"class":540},[76,46562,46563,46565,46567,46569,46571],{"class":78,"line":35819},[76,46564,723],{"class":82},[76,46566,33264],{"class":119},[76,46568,1250],{"class":82},[76,46570,33269],{"class":126},[76,46572,590],{"class":90},[76,46574,46575],{"class":78,"line":35825},[76,46576,35852],{"class":540},[76,46578,46579,46582,46584],{"class":78,"line":35830},[76,46580,46581],{"class":90},"    GoogLeNet",[76,46583,370],{"class":82},[76,46585,46586],{"class":90},"GoogLeNet(Inception)\n",[76,46588,46589,46591,46593],{"class":78,"line":35836},[76,46590,35869],{"class":90},[76,46592,370],{"class":82},[76,46594,35874],{"class":90},[76,46596,46597,46599,46601,46604,46606,46608,46610],{"class":78,"line":35849},[76,46598,35431],{"class":90},[76,46600,370],{"class":82},[76,46602,46603],{"class":90},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[76,46605,35887],{"class":7296},[76,46607,370],{"class":82},[76,46609,3206],{"class":119},[76,46611,130],{"class":90},[76,46613,46614],{"class":78,"line":35855},[76,46615,35899],{"class":90},[26,46617,46618],{"start":133},[29,46619,42609],{},[66,46621,46623],{"className":68,"code":46622,"language":70,"meta":71,"style":71},"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",[73,46624,46625,46631,46641,46651,46655,46665,46676,46680,46684,46688,46696,46712,46722,46738,46748,46762,46766,46776,46786,46796,46802,46806,46810,46818,46822,46838,46846,46850,46854,46862,46870,46874,46878,46882,46886,46892,46896,46906,46914,46922,46926,46930,46934,46942,46946,46962,46966,46970,46974,46986,46990,47002,47006,47010,47022,47026,47036,47040,47044,47056,47060,47068,47072,47076,47084,47088,47096,47100,47104,47108,47112,47116,47132,47140,47144,47148,47196,47202,47206,47216,47224,47232,47236,47240,47244,47248,47256,47260,47276,47280,47288,47296],{"__ignoreMap":71},[76,46626,46627,46629],{"class":78,"line":79},[76,46628,32438],{"class":82},[76,46630,32441],{"class":90},[76,46632,46633,46635,46637,46639],{"class":78,"line":94},[76,46634,32438],{"class":82},[76,46636,33458],{"class":90},[76,46638,33426],{"class":82},[76,46640,33463],{"class":90},[76,46642,46643,46645,46647,46649],{"class":78,"line":133},[76,46644,32781],{"class":82},[76,46646,33441],{"class":90},[76,46648,32438],{"class":82},[76,46650,33446],{"class":90},[76,46652,46653],{"class":78,"line":145},[76,46654,35960],{"class":540},[76,46656,46657,46659,46661,46663],{"class":78,"line":152},[76,46658,32781],{"class":82},[76,46660,33411],{"class":90},[76,46662,32438],{"class":82},[76,46664,33416],{"class":90},[76,46666,46667,46669,46671,46673],{"class":78,"line":157},[76,46668,32781],{"class":82},[76,46670,33956],{"class":90},[76,46672,32438],{"class":82},[76,46674,46675],{"class":90}," GoogLeNet,Inception\n",[76,46677,46678],{"class":78,"line":246},[76,46679,149],{"emptyLinePlaceholder":148},[76,46681,46682],{"class":78,"line":251},[76,46683,149],{"emptyLinePlaceholder":148},[76,46685,46686],{"class":78,"line":257},[76,46687,35989],{"class":540},[76,46689,46690,46692,46694],{"class":78,"line":641},[76,46691,83],{"class":82},[76,46693,35996],{"class":86},[76,46695,91],{"class":90},[76,46697,46698,46700,46702,46704,46706,46708,46710],{"class":78,"line":646},[76,46699,36003],{"class":90},[76,46701,370],{"class":82},[76,46703,33498],{"class":90},[76,46705,33501],{"class":7296},[76,46707,370],{"class":82},[76,46709,33506],{"class":126},[76,46711,33509],{"class":90},[76,46713,46714,46716,46718,46720],{"class":78,"line":659},[76,46715,36020],{"class":7296},[76,46717,370],{"class":82},[76,46719,36025],{"class":119},[76,46721,33509],{"class":90},[76,46723,46724,46726,46728,46730,46732,46734,46736],{"class":78,"line":1608},[76,46725,36032],{"class":7296},[76,46727,370],{"class":82},[76,46729,33536],{"class":90},[76,46731,33539],{"class":7296},[76,46733,370],{"class":82},[76,46735,37487],{"class":119},[76,46737,33547],{"class":90},[76,46739,46740,46742,46744,46746],{"class":78,"line":1632},[76,46741,36049],{"class":7296},[76,46743,370],{"class":82},[76,46745,33519],{"class":119},[76,46747,130],{"class":90},[76,46749,46750,46752,46754,46756,46758,46760],{"class":78,"line":1637},[76,46751,36060],{"class":90},[76,46753,370],{"class":82},[76,46755,33577],{"class":90},[76,46757,33580],{"class":7296},[76,46759,370],{"class":82},[76,46761,36071],{"class":90},[76,46763,46764],{"class":78,"line":1642},[76,46765,36076],{"class":540},[76,46767,46768,46770,46772,46774],{"class":78,"line":1652},[76,46769,36081],{"class":7296},[76,46771,370],{"class":82},[76,46773,669],{"class":119},[76,46775,33509],{"class":90},[76,46777,46778,46780,46782,46784],{"class":78,"line":1660},[76,46779,36092],{"class":7296},[76,46781,370],{"class":82},[76,46783,33519],{"class":119},[76,46785,33509],{"class":90},[76,46787,46788,46790,46792,46794],{"class":78,"line":1683},[76,46789,36103],{"class":7296},[76,46791,370],{"class":82},[76,46793,1294],{"class":119},[76,46795,130],{"class":90},[76,46797,46798,46800],{"class":78,"line":1698},[76,46799,441],{"class":82},[76,46801,36116],{"class":90},[76,46803,46804],{"class":78,"line":1711},[76,46805,149],{"emptyLinePlaceholder":148},[76,46807,46808],{"class":78,"line":1717},[76,46809,36125],{"class":540},[76,46811,46812,46814,46816],{"class":78,"line":1728},[76,46813,83],{"class":82},[76,46815,36132],{"class":86},[76,46817,36135],{"class":90},[76,46819,46820],{"class":78,"line":1740},[76,46821,36140],{"class":540},[76,46823,46824,46826,46828,46830,46832,46834,46836],{"class":78,"line":1746},[76,46825,33281],{"class":90},[76,46827,370],{"class":82},[76,46829,33288],{"class":126},[76,46831,3811],{"class":82},[76,46833,33293],{"class":90},[76,46835,1328],{"class":82},[76,46837,36157],{"class":126},[76,46839,46840,46842,46844],{"class":78,"line":1751},[76,46841,33333],{"class":90},[76,46843,370],{"class":82},[76,46845,34329],{"class":90},[76,46847,46848],{"class":78,"line":1756},[76,46849,149],{"emptyLinePlaceholder":148},[76,46851,46852],{"class":78,"line":1766},[76,46853,36174],{"class":540},[76,46855,46856,46858,46860],{"class":78,"line":1773},[76,46857,36179],{"class":90},[76,46859,370],{"class":82},[76,46861,34382],{"class":119},[76,46863,46864,46866,46868],{"class":78,"line":1793},[76,46865,36188],{"class":90},[76,46867,370],{"class":82},[76,46869,5172],{"class":119},[76,46871,46872],{"class":78,"line":1806},[76,46873,149],{"emptyLinePlaceholder":148},[76,46875,46876],{"class":78,"line":1817},[76,46877,36201],{"class":540},[76,46879,46880],{"class":78,"line":1822},[76,46881,36206],{"class":540},[76,46883,46884],{"class":78,"line":1835},[76,46885,36211],{"class":540},[76,46887,46888,46890],{"class":78,"line":1847},[76,46889,36216],{"class":82},[76,46891,34922],{"class":90},[76,46893,46894],{"class":78,"line":1852},[76,46895,36223],{"class":540},[76,46897,46898,46900,46902,46904],{"class":78,"line":1862},[76,46899,5488],{"class":82},[76,46901,36230],{"class":90},[76,46903,1475],{"class":82},[76,46905,36235],{"class":90},[76,46907,46908,46910,46912],{"class":78,"line":1874},[76,46909,36240],{"class":90},[76,46911,370],{"class":82},[76,46913,36245],{"class":90},[76,46915,46916,46918,46920],{"class":78,"line":1879},[76,46917,36250],{"class":90},[76,46919,370],{"class":82},[76,46921,36255],{"class":90},[76,46923,46924],{"class":78,"line":1884},[76,46925,36260],{"class":540},[76,46927,46928],{"class":78,"line":1889},[76,46929,34913],{"class":90},[76,46931,46932],{"class":78,"line":1900},[76,46933,36269],{"class":540},[76,46935,46936,46938,46940],{"class":78,"line":1906},[76,46937,34698],{"class":90},[76,46939,370],{"class":82},[76,46941,36278],{"class":90},[76,46943,46944],{"class":78,"line":1924},[76,46945,36283],{"class":540},[76,46947,46948,46950,46952,46954,46956,46958,46960],{"class":78,"line":1929},[76,46949,34715],{"class":90},[76,46951,370],{"class":82},[76,46953,34720],{"class":90},[76,46955,34723],{"class":7296},[76,46957,370],{"class":82},[76,46959,669],{"class":119},[76,46961,130],{"class":90},[76,46963,46964],{"class":78,"line":1944},[76,46965,36304],{"class":540},[76,46967,46968],{"class":78,"line":1950},[76,46969,36309],{"class":540},[76,46971,46972],{"class":78,"line":1965},[76,46973,36314],{"class":540},[76,46975,46976,46978,46980,46982,46984],{"class":78,"line":1971},[76,46977,36319],{"class":90},[76,46979,1060],{"class":82},[76,46981,34825],{"class":90},[76,46983,1250],{"class":82},[76,46985,36328],{"class":90},[76,46987,46988],{"class":78,"line":1985},[76,46989,36333],{"class":540},[76,46991,46992,46994,46996,46998,47000],{"class":78,"line":1991},[76,46993,36338],{"class":90},[76,46995,1060],{"class":82},[76,46997,36343],{"class":90},[76,46999,1294],{"class":119},[76,47001,130],{"class":90},[76,47003,47004],{"class":78,"line":2005},[76,47005,149],{"emptyLinePlaceholder":148},[76,47007,47008],{"class":78,"line":2017},[76,47009,36356],{"class":540},[76,47011,47012,47014,47016,47018,47020],{"class":78,"line":2023},[76,47013,36361],{"class":90},[76,47015,370],{"class":82},[76,47017,36366],{"class":90},[76,47019,795],{"class":82},[76,47021,36371],{"class":90},[76,47023,47024],{"class":78,"line":2031},[76,47025,36376],{"class":540},[76,47027,47028,47030,47032,47034],{"class":78,"line":11880},[76,47029,1701],{"class":119},[76,47031,123],{"class":90},[76,47033,36385],{"class":126},[76,47035,36388],{"class":90},[76,47037,47038],{"class":78,"line":11901},[76,47039,149],{"emptyLinePlaceholder":148},[76,47041,47042],{"class":78,"line":11907},[76,47043,36397],{"class":540},[76,47045,47046,47048,47050,47052,47054],{"class":78,"line":11921},[76,47047,723],{"class":82},[76,47049,33264],{"class":119},[76,47051,1250],{"class":82},[76,47053,33269],{"class":126},[76,47055,590],{"class":90},[76,47057,47058],{"class":78,"line":11927},[76,47059,36414],{"class":540},[76,47061,47062,47064,47066],{"class":78,"line":11954},[76,47063,33333],{"class":90},[76,47065,370],{"class":82},[76,47067,46586],{"class":90},[76,47069,47070],{"class":78,"line":11963},[76,47071,36427],{"class":540},[76,47073,47074],{"class":78,"line":11969},[76,47075,36432],{"class":540},[76,47077,47078,47080,47082],{"class":78,"line":11977},[76,47079,36437],{"class":90},[76,47081,36440],{"class":126},[76,47083,656],{"class":90},[76,47085,47086],{"class":78,"line":11982},[76,47087,36447],{"class":540},[76,47089,47090,47092,47094],{"class":78,"line":18654},[76,47091,36060],{"class":90},[76,47093,370],{"class":82},[76,47095,36456],{"class":90},[76,47097,47098],{"class":78,"line":18660},[76,47099,36461],{"class":540},[76,47101,47102],{"class":78,"line":18683},[76,47103,36466],{"class":90},[76,47105,47106],{"class":78,"line":18689},[76,47107,149],{"emptyLinePlaceholder":148},[76,47109,47110],{"class":78,"line":18712},[76,47111,36475],{"class":540},[76,47113,47114],{"class":78,"line":18726},[76,47115,36480],{"class":540},[76,47117,47118,47120,47122,47124,47126,47128,47130],{"class":78,"line":18746},[76,47119,33281],{"class":90},[76,47121,370],{"class":82},[76,47123,33288],{"class":126},[76,47125,3811],{"class":82},[76,47127,33293],{"class":90},[76,47129,1328],{"class":82},[76,47131,36157],{"class":126},[76,47133,47134,47136,47138],{"class":78,"line":18752},[76,47135,33333],{"class":90},[76,47137,370],{"class":82},[76,47139,34329],{"class":90},[76,47141,47142],{"class":78,"line":18763},[76,47143,36509],{"class":540},[76,47145,47146],{"class":78,"line":18786},[76,47147,36514],{"class":540},[76,47149,47150,47152,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188,47190,47192,47194],{"class":78,"line":18808},[76,47151,36519],{"class":90},[76,47153,370],{"class":82},[76,47155,3148],{"class":90},[76,47157,36526],{"class":126},[76,47159,2642],{"class":90},[76,47161,36531],{"class":126},[76,47163,2642],{"class":90},[76,47165,36536],{"class":126},[76,47167,2642],{"class":90},[76,47169,36541],{"class":126},[76,47171,2642],{"class":90},[76,47173,36546],{"class":126},[76,47175,2642],{"class":90},[76,47177,36551],{"class":126},[76,47179,2642],{"class":90},[76,47181,36556],{"class":126},[76,47183,2642],{"class":90},[76,47185,36561],{"class":126},[76,47187,2642],{"class":90},[76,47189,36566],{"class":126},[76,47191,2642],{"class":90},[76,47193,36571],{"class":126},[76,47195,35284],{"class":90},[76,47197,47198,47200],{"class":78,"line":18813},[76,47199,36216],{"class":82},[76,47201,34922],{"class":90},[76,47203,47204],{"class":78,"line":18819},[76,47205,36584],{"class":540},[76,47207,47208,47210,47212,47214],{"class":78,"line":18833},[76,47209,5488],{"class":82},[76,47211,36591],{"class":90},[76,47213,1475],{"class":82},[76,47215,36235],{"class":90},[76,47217,47218,47220,47222],{"class":78,"line":18846},[76,47219,34648],{"class":90},[76,47221,370],{"class":82},[76,47223,34653],{"class":90},[76,47225,47226,47228,47230],{"class":78,"line":18851},[76,47227,34663],{"class":90},[76,47229,370],{"class":82},[76,47231,34668],{"class":90},[76,47233,47234],{"class":78,"line":18865},[76,47235,149],{"emptyLinePlaceholder":148},[76,47237,47238],{"class":78,"line":18870},[76,47239,36620],{"class":540},[76,47241,47242],{"class":78,"line":18876},[76,47243,34913],{"class":90},[76,47245,47246],{"class":78,"line":18881},[76,47247,36629],{"class":540},[76,47249,47250,47252,47254],{"class":78,"line":18895},[76,47251,34698],{"class":90},[76,47253,370],{"class":82},[76,47255,34703],{"class":90},[76,47257,47258],{"class":78,"line":18900},[76,47259,36642],{"class":540},[76,47261,47262,47264,47266,47268,47270,47272,47274],{"class":78,"line":18905},[76,47263,34715],{"class":90},[76,47265,370],{"class":82},[76,47267,34720],{"class":90},[76,47269,34723],{"class":7296},[76,47271,370],{"class":82},[76,47273,669],{"class":119},[76,47275,130],{"class":90},[76,47277,47278],{"class":78,"line":18919},[76,47279,36663],{"class":540},[76,47281,47282,47284,47286],{"class":78,"line":18931},[76,47283,36668],{"class":90},[76,47285,370],{"class":82},[76,47287,36673],{"class":90},[76,47289,47290,47292,47294],{"class":78,"line":18936},[76,47291,36678],{"class":90},[76,47293,370],{"class":82},[76,47295,36683],{"class":90},[76,47297,47298,47300,47302,47304,47306,47308,47310,47312],{"class":78,"line":18949},[76,47299,36688],{"class":119},[76,47301,123],{"class":90},[76,47303,36693],{"class":126},[76,47305,36696],{"class":90},[76,47307,36699],{"class":126},[76,47309,2642],{"class":90},[76,47311,36704],{"class":126},[76,47313,36707],{"class":90},[889,47315,47317],{"id":47316},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47319,47320],{},"猫狗分类任务",[19,47322,47323],{},"划分数据集和验证集",[66,47325,47327],{"className":68,"code":47326,"language":70,"meta":71,"style":71},"# 创建脚本，用于划分数据集和验证集\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",[73,47328,47329,47334,47341,47346,47357,47364,47368,47378,47392,47401,47405,47410,47420,47440,47444,47449,47459,47470,47483,47487,47492,47501,47511,47522,47526,47531,47541,47545,47550,47555,47560,47565,47570,47574,47584,47611,47624,47635,47662,47667,47672,47686,47691,47703,47718,47733,47741,47745,47750,47756,47768,47781,47786,47791,47796,47846,47852,47856],{"__ignoreMap":71},[76,47330,47331],{"class":78,"line":79},[76,47332,47333],{"class":540},"# 创建脚本，用于划分数据集和验证集\n",[76,47335,47336,47338],{"class":78,"line":94},[76,47337,32438],{"class":82},[76,47339,47340],{"class":90}," os\n",[76,47342,47343],{"class":78,"line":133},[76,47344,47345],{"class":540},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[76,47347,47348,47350,47353,47355],{"class":78,"line":145},[76,47349,32781],{"class":82},[76,47351,47352],{"class":90}," shutil ",[76,47354,32438],{"class":82},[76,47356,33864],{"class":90},[76,47358,47359,47361],{"class":78,"line":152},[76,47360,32438],{"class":82},[76,47362,47363],{"class":90}," random\n",[76,47365,47366],{"class":78,"line":157},[76,47367,149],{"emptyLinePlaceholder":148},[76,47369,47370,47372,47375],{"class":78,"line":246},[76,47371,83],{"class":82},[76,47373,47374],{"class":86}," mkfile",[76,47376,47377],{"class":90},"(file):\n",[76,47379,47380,47382,47384,47387,47390],{"class":78,"line":251},[76,47381,578],{"class":82},[76,47383,40967],{"class":82},[76,47385,47386],{"class":90}," os.path.exists(",[76,47388,47389],{"class":7296},"file",[76,47391,32830],{"class":90},[76,47393,47394,47397,47399],{"class":78,"line":257},[76,47395,47396],{"class":90},"        os.makedirs(",[76,47398,47389],{"class":7296},[76,47400,130],{"class":90},[76,47402,47403],{"class":78,"line":641},[76,47404,149],{"emptyLinePlaceholder":148},[76,47406,47407],{"class":78,"line":646},[76,47408,47409],{"class":540},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[76,47411,47412,47415,47417],{"class":78,"line":659},[76,47413,47414],{"class":90},"file_path",[76,47416,370],{"class":82},[76,47418,47419],{"class":126},"'data_cat_dog'\n",[76,47421,47422,47425,47427,47430,47432,47435,47437],{"class":78,"line":1608},[76,47423,47424],{"class":90},"flower_class",[76,47426,370],{"class":82},[76,47428,47429],{"class":90},"[cla ",[76,47431,5112],{"class":82},[76,47433,47434],{"class":90}," cla ",[76,47436,1475],{"class":82},[76,47438,47439],{"class":90}," os.listdir(file_path)]\n",[76,47441,47442],{"class":78,"line":1632},[76,47443,149],{"emptyLinePlaceholder":148},[76,47445,47446],{"class":78,"line":1637},[76,47447,47448],{"class":540},"# 创建训练集train文件夹\n",[76,47450,47451,47454,47457],{"class":78,"line":1642},[76,47452,47453],{"class":90},"mkfile(",[76,47455,47456],{"class":126},"'data\u002Ftrain'",[76,47458,130],{"class":90},[76,47460,47461,47463,47465,47467],{"class":78,"line":1652},[76,47462,5112],{"class":82},[76,47464,47434],{"class":90},[76,47466,1475],{"class":82},[76,47468,47469],{"class":90}," flower_class:\n",[76,47471,47472,47475,47478,47480],{"class":78,"line":1660},[76,47473,47474],{"class":90},"    mkfile(",[76,47476,47477],{"class":126},"'data\u002Ftrain\u002F'",[76,47479,376],{"class":82},[76,47481,47482],{"class":90},"cla)\n",[76,47484,47485],{"class":78,"line":1683},[76,47486,149],{"emptyLinePlaceholder":148},[76,47488,47489],{"class":78,"line":1698},[76,47490,47491],{"class":540},"# 创建验证集val文件夹\n",[76,47493,47494,47496,47499],{"class":78,"line":1711},[76,47495,47453],{"class":90},[76,47497,47498],{"class":126},"'data\u002Ftest'",[76,47500,130],{"class":90},[76,47502,47503,47505,47507,47509],{"class":78,"line":1717},[76,47504,5112],{"class":82},[76,47506,47434],{"class":90},[76,47508,1475],{"class":82},[76,47510,47469],{"class":90},[76,47512,47513,47515,47518,47520],{"class":78,"line":1728},[76,47514,47474],{"class":90},[76,47516,47517],{"class":126},"'data\u002Ftest\u002F'",[76,47519,376],{"class":82},[76,47521,47482],{"class":90},[76,47523,47524],{"class":78,"line":1740},[76,47525,149],{"emptyLinePlaceholder":148},[76,47527,47528],{"class":78,"line":1746},[76,47529,47530],{"class":540},"# 划分比例，训练集：测试集=9：1\n",[76,47532,47533,47536,47538],{"class":78,"line":1751},[76,47534,47535],{"class":90},"split_rate",[76,47537,370],{"class":82},[76,47539,47540],{"class":119},"0.1\n",[76,47542,47543],{"class":78,"line":1756},[76,47544,149],{"emptyLinePlaceholder":148},[76,47546,47547],{"class":78,"line":1766},[76,47548,47549],{"class":540},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[76,47551,47552],{"class":78,"line":1773},[76,47553,47554],{"class":540},"# cla_path：当前类别的原始图片路径\n",[76,47556,47557],{"class":78,"line":1793},[76,47558,47559],{"class":540},"# images：当前类别下所有图片的文件名列表\n",[76,47561,47562],{"class":78,"line":1806},[76,47563,47564],{"class":540},"# num：该类别图片总数\n",[76,47566,47567],{"class":78,"line":1817},[76,47568,47569],{"class":540},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[76,47571,47572],{"class":78,"line":1822},[76,47573,149],{"emptyLinePlaceholder":148},[76,47575,47576,47578,47580,47582],{"class":78,"line":1835},[76,47577,5112],{"class":82},[76,47579,47434],{"class":90},[76,47581,1475],{"class":82},[76,47583,47469],{"class":90},[76,47585,47586,47589,47591,47594,47596,47599,47602,47604,47606,47608],{"class":78,"line":1847},[76,47587,47588],{"class":90},"    cla_path ",[76,47590,370],{"class":82},[76,47592,47593],{"class":90}," file_path ",[76,47595,376],{"class":82},[76,47597,47598],{"class":126}," '\u002F'",[76,47600,47601],{"class":82}," +",[76,47603,47434],{"class":90},[76,47605,376],{"class":82},[76,47607,47598],{"class":126},[76,47609,47610],{"class":540},"  # 某一类别的子目录\n",[76,47612,47613,47616,47618,47621],{"class":78,"line":1852},[76,47614,47615],{"class":90},"    images ",[76,47617,370],{"class":82},[76,47619,47620],{"class":90}," os.listdir(cla_path)  ",[76,47622,47623],{"class":540},"# iamges 列表存储了该目录下所有图像的名称\n",[76,47625,47626,47628,47630,47632],{"class":78,"line":1862},[76,47627,914],{"class":90},[76,47629,370],{"class":82},[76,47631,9409],{"class":119},[76,47633,47634],{"class":90},"(images)\n",[76,47636,47637,47640,47642,47645,47647,47649,47651,47654,47656,47659],{"class":78,"line":1874},[76,47638,47639],{"class":90},"    eval_index ",[76,47641,370],{"class":82},[76,47643,47644],{"class":90}," random.sample(images, ",[76,47646,2755],{"class":7296},[76,47648,370],{"class":82},[76,47650,1360],{"class":119},[76,47652,47653],{"class":90},"(num ",[76,47655,2718],{"class":82},[76,47657,47658],{"class":90}," split_rate))  ",[76,47660,47661],{"class":540},"# 从images列表中随机抽取 k 个图像名称\n",[76,47663,47664],{"class":78,"line":1879},[76,47665,47666],{"class":540},"    # 遍历该类别下的所有图片\n",[76,47668,47669],{"class":78,"line":1884},[76,47670,47671],{"class":540},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[76,47673,47674,47676,47679,47681,47683],{"class":78,"line":1889},[76,47675,1469],{"class":82},[76,47677,47678],{"class":90}," index, image ",[76,47680,1475],{"class":82},[76,47682,33649],{"class":119},[76,47684,47685],{"class":90},"(images):\n",[76,47687,47688],{"class":78,"line":1900},[76,47689,47690],{"class":540},"        # eval_index 中保存验证集val的图像名称\n",[76,47692,47693,47695,47698,47700],{"class":78,"line":1906},[76,47694,4592],{"class":82},[76,47696,47697],{"class":90}," image ",[76,47699,1475],{"class":82},[76,47701,47702],{"class":90}," eval_index:\n",[76,47704,47705,47708,47710,47713,47715],{"class":78,"line":1924},[76,47706,47707],{"class":90},"            image_path ",[76,47709,370],{"class":82},[76,47711,47712],{"class":90}," cla_path ",[76,47714,376],{"class":82},[76,47716,47717],{"class":90}," image\n",[76,47719,47720,47723,47725,47728,47730],{"class":78,"line":1929},[76,47721,47722],{"class":90},"            new_path ",[76,47724,370],{"class":82},[76,47726,47727],{"class":126}," 'data\u002Ftest\u002F'",[76,47729,47601],{"class":82},[76,47731,47732],{"class":90}," cla\n",[76,47734,47735,47738],{"class":78,"line":1944},[76,47736,47737],{"class":90},"            copy(image_path, new_path)  ",[76,47739,47740],{"class":540},"# 将选中的图像复制到新路径\n",[76,47742,47743],{"class":78,"line":1950},[76,47744,149],{"emptyLinePlaceholder":148},[76,47746,47747],{"class":78,"line":1965},[76,47748,47749],{"class":540},"        # 其余的图像保存在训练集train中\n",[76,47751,47752,47754],{"class":78,"line":1971},[76,47753,4629],{"class":82},[76,47755,590],{"class":90},[76,47757,47758,47760,47762,47764,47766],{"class":78,"line":1985},[76,47759,47707],{"class":90},[76,47761,370],{"class":82},[76,47763,47712],{"class":90},[76,47765,376],{"class":82},[76,47767,47717],{"class":90},[76,47769,47770,47772,47774,47777,47779],{"class":78,"line":1991},[76,47771,47722],{"class":90},[76,47773,370],{"class":82},[76,47775,47776],{"class":126}," 'data\u002Ftrain\u002F'",[76,47778,47601],{"class":82},[76,47780,47732],{"class":90},[76,47782,47783],{"class":78,"line":2005},[76,47784,47785],{"class":90},"            copy(image_path, new_path)\n",[76,47787,47788],{"class":78,"line":2017},[76,47789,47790],{"class":540},"            # 打印进度条信息\n",[76,47792,47793],{"class":78,"line":2023},[76,47794,47795],{"class":540},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[76,47797,47798,47800,47802,47804,47807,47809,47811,47814,47816,47818,47820,47823,47826,47828,47830,47833,47836,47838,47840,47843],{"class":78,"line":2031},[76,47799,1701],{"class":119},[76,47801,123],{"class":90},[76,47803,307],{"class":126},[76,47805,47806],{"class":119},"\\r",[76,47808,3148],{"class":126},[76,47810,34498],{"class":119},[76,47812,47813],{"class":126},"] processing [",[76,47815,34498],{"class":119},[76,47817,795],{"class":126},[76,47819,34498],{"class":119},[76,47821,47822],{"class":126},"]\"",[76,47824,47825],{"class":90},".format(cla, index ",[76,47827,376],{"class":82},[76,47829,27168],{"class":119},[76,47831,47832],{"class":90},", num), ",[76,47834,47835],{"class":7296},"end",[76,47837,370],{"class":82},[76,47839,9730],{"class":126},[76,47841,47842],{"class":90},")  ",[76,47844,47845],{"class":540},"# processing bar\n",[76,47847,47848,47850],{"class":78,"line":11880},[76,47849,120],{"class":119},[76,47851,4072],{"class":90},[76,47853,47854],{"class":78,"line":11901},[76,47855,149],{"emptyLinePlaceholder":148},[76,47857,47858,47860,47862,47865],{"class":78,"line":11907},[76,47859,478],{"class":119},[76,47861,123],{"class":90},[76,47863,47864],{"class":126},"\"processing done!\"",[76,47866,130],{"class":90},[19,47868,47869],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24047,47871,47873],{"id":47872},"_242模型代码","2.4.2.模型代码",[19,47875,47876],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[66,47878,47880],{"className":68,"code":47879,"language":70,"meta":71,"style":71},"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",[73,47881,47882,47888,47898,47908,47912,47928,47936,47950,47960,47964,47994,47998,48032,48078,48082,48116,48162,48166,48170,48204,48234,48238,48246,48260,48282,48304,48322,48326,48340,48344,48348,48364,48368,48376,48390,48400,48444,48448,48476,48480,48490,48518,48522,48558,48562,48590,48594,48604,48636,48668,48696,48700,48710,48742,48774,48806,48838,48870,48898,48902,48912,48944,48976,48988,48992,49004,49008,49012,49024,49032,49052,49056,49060,49064,49068,49072,49076,49090,49098,49106,49118,49132,49140,49144,49152,49162,49172,49182,49192,49202,49208,49212,49216,49228,49248,49256],{"__ignoreMap":71},[76,47883,47884,47886],{"class":78,"line":79},[76,47885,32438],{"class":82},[76,47887,32441],{"class":90},[76,47889,47890,47892,47894,47896],{"class":78,"line":94},[76,47891,32781],{"class":82},[76,47893,32784],{"class":90},[76,47895,32438],{"class":82},[76,47897,32789],{"class":90},[76,47899,47900,47902,47904,47906],{"class":78,"line":133},[76,47901,32781],{"class":82},[76,47903,32801],{"class":90},[76,47905,32438],{"class":82},[76,47907,32806],{"class":90},[76,47909,47910],{"class":78,"line":145},[76,47911,149],{"emptyLinePlaceholder":148},[76,47913,47914,47916,47918,47920,47922,47924,47926],{"class":78,"line":152},[76,47915,16747],{"class":82},[76,47917,43528],{"class":86},[76,47919,123],{"class":90},[76,47921,32822],{"class":86},[76,47923,2819],{"class":90},[76,47925,32827],{"class":86},[76,47927,32830],{"class":90},[76,47929,47930,47932,47934],{"class":78,"line":157},[76,47931,32845],{"class":82},[76,47933,32848],{"class":119},[76,47935,43547],{"class":90},[76,47937,47938,47940,47942,47944,47946,47948],{"class":78,"line":246},[76,47939,32861],{"class":119},[76,47941,43554],{"class":90},[76,47943,32867],{"class":119},[76,47945,32870],{"class":90},[76,47947,32873],{"class":119},[76,47949,4072],{"class":90},[76,47951,47952,47954,47956,47958],{"class":78,"line":251},[76,47953,32889],{"class":119},[76,47955,36809],{"class":90},[76,47957,370],{"class":82},[76,47959,36814],{"class":90},[76,47961,47962],{"class":78,"line":257},[76,47963,43577],{"class":540},[76,47965,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984,47986,47988,47990,47992],{"class":78,"line":641},[76,47967,32889],{"class":119},[76,47969,43584],{"class":90},[76,47971,370],{"class":82},[76,47973,32897],{"class":90},[76,47975,32900],{"class":7296},[76,47977,370],{"class":82},[76,47979,43595],{"class":90},[76,47981,32909],{"class":7296},[76,47983,370],{"class":82},[76,47985,43602],{"class":90},[76,47987,32918],{"class":7296},[76,47989,370],{"class":82},[76,47991,669],{"class":119},[76,47993,130],{"class":90},[76,47995,47996],{"class":78,"line":646},[76,47997,43615],{"class":540},[76,47999,48000,48002,48004,48006,48008,48010,48012,48014,48016,48018,48020,48022,48024,48026,48028,48030],{"class":78,"line":659},[76,48001,32889],{"class":119},[76,48003,43622],{"class":90},[76,48005,370],{"class":82},[76,48007,32897],{"class":90},[76,48009,32900],{"class":7296},[76,48011,370],{"class":82},[76,48013,43595],{"class":90},[76,48015,32909],{"class":7296},[76,48017,370],{"class":82},[76,48019,43639],{"class":90},[76,48021,1294],{"class":119},[76,48023,43644],{"class":90},[76,48025,32918],{"class":7296},[76,48027,370],{"class":82},[76,48029,669],{"class":119},[76,48031,130],{"class":90},[76,48033,48034,48036,48038,48040,48042,48044,48046,48048,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076],{"class":78,"line":1608},[76,48035,32889],{"class":119},[76,48037,43659],{"class":90},[76,48039,370],{"class":82},[76,48041,32897],{"class":90},[76,48043,32900],{"class":7296},[76,48045,370],{"class":82},[76,48047,43639],{"class":90},[76,48049,1294],{"class":119},[76,48051,43644],{"class":90},[76,48053,32909],{"class":7296},[76,48055,370],{"class":82},[76,48057,43639],{"class":90},[76,48059,669],{"class":119},[76,48061,43644],{"class":90},[76,48063,32918],{"class":7296},[76,48065,370],{"class":82},[76,48067,2339],{"class":119},[76,48069,2642],{"class":90},[76,48071,32927],{"class":7296},[76,48073,370],{"class":82},[76,48075,669],{"class":119},[76,48077,130],{"class":90},[76,48079,48080],{"class":78,"line":1632},[76,48081,43704],{"class":540},[76,48083,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":78,"line":1637},[76,48085,32889],{"class":119},[76,48087,43711],{"class":90},[76,48089,370],{"class":82},[76,48091,32897],{"class":90},[76,48093,32900],{"class":7296},[76,48095,370],{"class":82},[76,48097,43595],{"class":90},[76,48099,32909],{"class":7296},[76,48101,370],{"class":82},[76,48103,43728],{"class":90},[76,48105,1294],{"class":119},[76,48107,43644],{"class":90},[76,48109,32918],{"class":7296},[76,48111,370],{"class":82},[76,48113,669],{"class":119},[76,48115,130],{"class":90},[76,48117,48118,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160],{"class":78,"line":1642},[76,48119,32889],{"class":119},[76,48121,43747],{"class":90},[76,48123,370],{"class":82},[76,48125,32897],{"class":90},[76,48127,32900],{"class":7296},[76,48129,370],{"class":82},[76,48131,43728],{"class":90},[76,48133,1294],{"class":119},[76,48135,43644],{"class":90},[76,48137,32909],{"class":7296},[76,48139,370],{"class":82},[76,48141,43728],{"class":90},[76,48143,669],{"class":119},[76,48145,43644],{"class":90},[76,48147,32918],{"class":7296},[76,48149,370],{"class":82},[76,48151,2583],{"class":119},[76,48153,2642],{"class":90},[76,48155,32927],{"class":7296},[76,48157,370],{"class":82},[76,48159,2345],{"class":119},[76,48161,130],{"class":90},[76,48163,48164],{"class":78,"line":1652},[76,48165,43792],{"class":540},[76,48167,48168],{"class":78,"line":1660},[76,48169,43797],{"class":540},[76,48171,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192,48194,48196,48198,48200,48202],{"class":78,"line":1683},[76,48173,32889],{"class":119},[76,48175,43804],{"class":90},[76,48177,370],{"class":82},[76,48179,36867],{"class":90},[76,48181,32918],{"class":7296},[76,48183,370],{"class":82},[76,48185,2339],{"class":119},[76,48187,2642],{"class":90},[76,48189,32973],{"class":7296},[76,48191,370],{"class":82},[76,48193,669],{"class":119},[76,48195,2642],{"class":90},[76,48197,32927],{"class":7296},[76,48199,370],{"class":82},[76,48201,669],{"class":119},[76,48203,130],{"class":90},[76,48205,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232],{"class":78,"line":1698},[76,48207,32889],{"class":119},[76,48209,43839],{"class":90},[76,48211,370],{"class":82},[76,48213,32897],{"class":90},[76,48215,32900],{"class":7296},[76,48217,370],{"class":82},[76,48219,43595],{"class":90},[76,48221,32909],{"class":7296},[76,48223,370],{"class":82},[76,48225,43856],{"class":90},[76,48227,32918],{"class":7296},[76,48229,370],{"class":82},[76,48231,669],{"class":119},[76,48233,130],{"class":90},[76,48235,48236],{"class":78,"line":1711},[76,48237,149],{"emptyLinePlaceholder":148},[76,48239,48240,48242,48244],{"class":78,"line":1717},[76,48241,32845],{"class":82},[76,48243,33137],{"class":86},[76,48245,33140],{"class":90},[76,48247,48248,48250,48252,48254,48256,48258],{"class":78,"line":1728},[76,48249,43881],{"class":90},[76,48251,370],{"class":82},[76,48253,32867],{"class":119},[76,48255,37222],{"class":90},[76,48257,32867],{"class":119},[76,48259,43892],{"class":90},[76,48261,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280],{"class":78,"line":1740},[76,48263,9163],{"class":90},[76,48265,370],{"class":82},[76,48267,32867],{"class":119},[76,48269,37222],{"class":90},[76,48271,32867],{"class":119},[76,48273,43907],{"class":90},[76,48275,32867],{"class":119},[76,48277,37222],{"class":90},[76,48279,32867],{"class":119},[76,48281,43916],{"class":90},[76,48283,48284,48286,48288,48290,48292,48294,48296,48298,48300,48302],{"class":78,"line":1746},[76,48285,43921],{"class":90},[76,48287,370],{"class":82},[76,48289,32867],{"class":119},[76,48291,37222],{"class":90},[76,48293,32867],{"class":119},[76,48295,43932],{"class":90},[76,48297,32867],{"class":119},[76,48299,37222],{"class":90},[76,48301,32867],{"class":119},[76,48303,43941],{"class":90},[76,48305,48306,48308,48310,48312,48314,48316,48318,48320],{"class":78,"line":1751},[76,48307,43946],{"class":90},[76,48309,370],{"class":82},[76,48311,32867],{"class":119},[76,48313,37222],{"class":90},[76,48315,32867],{"class":119},[76,48317,43957],{"class":90},[76,48319,32867],{"class":119},[76,48321,43962],{"class":90},[76,48323,48324],{"class":78,"line":1756},[76,48325,43967],{"class":540},[76,48327,48328,48330,48332,48334,48336,48338],{"class":78,"line":1766},[76,48329,595],{"class":82},[76,48331,43974],{"class":90},[76,48333,34723],{"class":7296},[76,48335,370],{"class":82},[76,48337,669],{"class":119},[76,48339,130],{"class":90},[76,48341,48342],{"class":78,"line":1773},[76,48343,149],{"emptyLinePlaceholder":148},[76,48345,48346],{"class":78,"line":1793},[76,48347,43995],{"class":540},[76,48349,48350,48352,48354,48356,48358,48360,48362],{"class":78,"line":1806},[76,48351,16747],{"class":82},[76,48353,44002],{"class":86},[76,48355,123],{"class":90},[76,48357,32822],{"class":86},[76,48359,2819],{"class":90},[76,48361,32827],{"class":86},[76,48363,32830],{"class":90},[76,48365,48366],{"class":78,"line":1817},[76,48367,44017],{"class":540},[76,48369,48370,48372,48374],{"class":78,"line":1822},[76,48371,32845],{"class":82},[76,48373,32848],{"class":119},[76,48375,44026],{"class":90},[76,48377,48378,48380,48382,48384,48386,48388],{"class":78,"line":1835},[76,48379,32861],{"class":119},[76,48381,44033],{"class":90},[76,48383,32867],{"class":119},[76,48385,32870],{"class":90},[76,48387,32873],{"class":119},[76,48389,4072],{"class":90},[76,48391,48392,48394,48396,48398],{"class":78,"line":1847},[76,48393,32889],{"class":119},[76,48395,44048],{"class":90},[76,48397,370],{"class":82},[76,48399,40047],{"class":90},[76,48401,48402,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428,48430,48432,48434,48436,48438,48440,48442],{"class":78,"line":1852},[76,48403,40052],{"class":90},[76,48405,32900],{"class":7296},[76,48407,370],{"class":82},[76,48409,2339],{"class":119},[76,48411,2642],{"class":90},[76,48413,32909],{"class":7296},[76,48415,370],{"class":82},[76,48417,2469],{"class":119},[76,48419,2642],{"class":90},[76,48421,32918],{"class":7296},[76,48423,370],{"class":82},[76,48425,2633],{"class":119},[76,48427,2642],{"class":90},[76,48429,32973],{"class":7296},[76,48431,370],{"class":82},[76,48433,2345],{"class":119},[76,48435,2642],{"class":90},[76,48437,32927],{"class":7296},[76,48439,370],{"class":82},[76,48441,2339],{"class":119},[76,48443,40085],{"class":90},[76,48445,48446],{"class":78,"line":1862},[76,48447,40090],{"class":90},[76,48449,48450,48452,48454,48456,48458,48460,48462,48464,48466,48468,48470,48472,48474],{"class":78,"line":1874},[76,48451,40135],{"class":90},[76,48453,32918],{"class":7296},[76,48455,370],{"class":82},[76,48457,2339],{"class":119},[76,48459,2642],{"class":90},[76,48461,32973],{"class":7296},[76,48463,370],{"class":82},[76,48465,2345],{"class":119},[76,48467,2642],{"class":90},[76,48469,32927],{"class":7296},[76,48471,370],{"class":82},[76,48473,669],{"class":119},[76,48475,130],{"class":90},[76,48477,48478],{"class":78,"line":1879},[76,48479,40164],{"class":90},[76,48481,48482,48484,48486,48488],{"class":78,"line":1884},[76,48483,32889],{"class":119},[76,48485,44139],{"class":90},[76,48487,370],{"class":82},[76,48489,40047],{"class":90},[76,48491,48492,48494,48496,48498,48500,48502,48504,48506,48508,48510,48512,48514,48516],{"class":78,"line":1889},[76,48493,40052],{"class":90},[76,48495,32900],{"class":7296},[76,48497,370],{"class":82},[76,48499,2469],{"class":119},[76,48501,2642],{"class":90},[76,48503,32909],{"class":7296},[76,48505,370],{"class":82},[76,48507,2469],{"class":119},[76,48509,2642],{"class":90},[76,48511,32918],{"class":7296},[76,48513,370],{"class":82},[76,48515,669],{"class":119},[76,48517,40085],{"class":90},[76,48519,48520],{"class":78,"line":1900},[76,48521,40090],{"class":90},[76,48523,48524,48526,48528,48530,48532,48534,48536,48538,48540,48542,48544,48546,48548,48550,48552,48554,48556],{"class":78,"line":1906},[76,48525,40052],{"class":90},[76,48527,32900],{"class":7296},[76,48529,370],{"class":82},[76,48531,2469],{"class":119},[76,48533,2642],{"class":90},[76,48535,32909],{"class":7296},[76,48537,370],{"class":82},[76,48539,44194],{"class":119},[76,48541,2642],{"class":90},[76,48543,32918],{"class":7296},[76,48545,370],{"class":82},[76,48547,2339],{"class":119},[76,48549,2642],{"class":90},[76,48551,32927],{"class":7296},[76,48553,370],{"class":82},[76,48555,669],{"class":119},[76,48557,40085],{"class":90},[76,48559,48560],{"class":78,"line":1924},[76,48561,40090],{"class":90},[76,48563,48564,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588],{"class":78,"line":1929},[76,48565,40135],{"class":90},[76,48567,32918],{"class":7296},[76,48569,370],{"class":82},[76,48571,2339],{"class":119},[76,48573,2642],{"class":90},[76,48575,32973],{"class":7296},[76,48577,370],{"class":82},[76,48579,2345],{"class":119},[76,48581,2642],{"class":90},[76,48583,32927],{"class":7296},[76,48585,370],{"class":82},[76,48587,669],{"class":119},[76,48589,130],{"class":90},[76,48591,48592],{"class":78,"line":1944},[76,48593,40164],{"class":90},[76,48595,48596,48598,48600,48602],{"class":78,"line":1950},[76,48597,32889],{"class":119},[76,48599,44255],{"class":90},[76,48601,370],{"class":82},[76,48603,40047],{"class":90},[76,48605,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634],{"class":78,"line":1965},[76,48607,44264],{"class":90},[76,48609,44194],{"class":119},[76,48611,2642],{"class":90},[76,48613,2469],{"class":119},[76,48615,44273],{"class":90},[76,48617,2475],{"class":119},[76,48619,2642],{"class":90},[76,48621,34110],{"class":119},[76,48623,44282],{"class":90},[76,48625,2861],{"class":119},[76,48627,2642],{"class":90},[76,48629,2463],{"class":119},[76,48631,44291],{"class":90},[76,48633,2463],{"class":119},[76,48635,40085],{"class":90},[76,48637,48638,48640,48642,48644,48646,48648,48650,48652,48654,48656,48658,48660,48662,48664,48666],{"class":78,"line":1971},[76,48639,44264],{"class":90},[76,48641,36908],{"class":119},[76,48643,2642],{"class":90},[76,48645,34110],{"class":119},[76,48647,44273],{"class":90},[76,48649,34110],{"class":119},[76,48651,2642],{"class":90},[76,48653,44194],{"class":119},[76,48655,44282],{"class":90},[76,48657,2463],{"class":119},[76,48659,2642],{"class":90},[76,48661,2475],{"class":119},[76,48663,44291],{"class":90},[76,48665,2469],{"class":119},[76,48667,40085],{"class":90},[76,48669,48670,48672,48674,48676,48678,48680,48682,48684,48686,48688,48690,48692,48694],{"class":78,"line":1985},[76,48671,40135],{"class":90},[76,48673,32918],{"class":7296},[76,48675,370],{"class":82},[76,48677,2339],{"class":119},[76,48679,2642],{"class":90},[76,48681,32973],{"class":7296},[76,48683,370],{"class":82},[76,48685,2345],{"class":119},[76,48687,2642],{"class":90},[76,48689,32927],{"class":7296},[76,48691,370],{"class":82},[76,48693,669],{"class":119},[76,48695,130],{"class":90},[76,48697,48698],{"class":78,"line":1991},[76,48699,40164],{"class":90},[76,48701,48702,48704,48706,48708],{"class":78,"line":2005},[76,48703,32889],{"class":119},[76,48705,44366],{"class":90},[76,48707,370],{"class":82},[76,48709,40047],{"class":90},[76,48711,48712,48714,48716,48718,48720,48722,48724,48726,48728,48730,48732,48734,48736,48738,48740],{"class":78,"line":2017},[76,48713,44264],{"class":90},[76,48715,44377],{"class":119},[76,48717,2642],{"class":90},[76,48719,44194],{"class":119},[76,48721,44273],{"class":90},[76,48723,2475],{"class":119},[76,48725,2642],{"class":90},[76,48727,44390],{"class":119},[76,48729,44282],{"class":90},[76,48731,2861],{"class":119},[76,48733,2642],{"class":90},[76,48735,2867],{"class":119},[76,48737,44291],{"class":90},[76,48739,2469],{"class":119},[76,48741,40085],{"class":90},[76,48743,48744,48746,48748,48750,48752,48754,48756,48758,48760,48762,48764,48766,48768,48770,48772],{"class":78,"line":2023},[76,48745,44264],{"class":90},[76,48747,40495],{"class":119},[76,48749,2642],{"class":90},[76,48751,23097],{"class":119},[76,48753,44273],{"class":90},[76,48755,2878],{"class":119},[76,48757,2642],{"class":90},[76,48759,33544],{"class":119},[76,48761,44282],{"class":90},[76,48763,3058],{"class":119},[76,48765,2642],{"class":90},[76,48767,2469],{"class":119},[76,48769,44291],{"class":90},[76,48771,2469],{"class":119},[76,48773,40085],{"class":90},[76,48775,48776,48778,48780,48782,48784,48786,48788,48790,48792,48794,48796,48798,48800,48802,48804],{"class":78,"line":2031},[76,48777,44264],{"class":90},[76,48779,40495],{"class":119},[76,48781,2642],{"class":90},[76,48783,34110],{"class":119},[76,48785,44273],{"class":90},[76,48787,34110],{"class":119},[76,48789,2642],{"class":90},[76,48791,36908],{"class":119},[76,48793,44282],{"class":90},[76,48795,3058],{"class":119},[76,48797,2642],{"class":90},[76,48799,2469],{"class":119},[76,48801,44291],{"class":90},[76,48803,2469],{"class":119},[76,48805,40085],{"class":90},[76,48807,48808,48810,48812,48814,48816,48818,48820,48822,48824,48826,48828,48830,48832,48834,48836],{"class":78,"line":11880},[76,48809,44264],{"class":90},[76,48811,40495],{"class":119},[76,48813,2642],{"class":90},[76,48815,2878],{"class":119},[76,48817,44273],{"class":90},[76,48819,34110],{"class":119},[76,48821,2642],{"class":90},[76,48823,44487],{"class":119},[76,48825,44282],{"class":90},[76,48827,2463],{"class":119},[76,48829,2642],{"class":90},[76,48831,2469],{"class":119},[76,48833,44291],{"class":90},[76,48835,2469],{"class":119},[76,48837,40085],{"class":90},[76,48839,48840,48842,48844,48846,48848,48850,48852,48854,48856,48858,48860,48862,48864,48866,48868],{"class":78,"line":11901},[76,48841,44264],{"class":90},[76,48843,44508],{"class":119},[76,48845,2642],{"class":90},[76,48847,36908],{"class":119},[76,48849,44273],{"class":90},[76,48851,23097],{"class":119},[76,48853,2642],{"class":90},[76,48855,44521],{"class":119},[76,48857,44282],{"class":90},[76,48859,2463],{"class":119},[76,48861,2642],{"class":90},[76,48863,34110],{"class":119},[76,48865,44291],{"class":90},[76,48867,34110],{"class":119},[76,48869,40085],{"class":90},[76,48871,48872,48874,48876,48878,48880,48882,48884,48886,48888,48890,48892,48894,48896],{"class":78,"line":11907},[76,48873,40135],{"class":90},[76,48875,32918],{"class":7296},[76,48877,370],{"class":82},[76,48879,2339],{"class":119},[76,48881,2642],{"class":90},[76,48883,32973],{"class":7296},[76,48885,370],{"class":82},[76,48887,2345],{"class":119},[76,48889,2642],{"class":90},[76,48891,32927],{"class":7296},[76,48893,370],{"class":82},[76,48895,669],{"class":119},[76,48897,130],{"class":90},[76,48899,48900],{"class":78,"line":11921},[76,48901,40164],{"class":90},[76,48903,48904,48906,48908,48910],{"class":78,"line":11927},[76,48905,32889],{"class":119},[76,48907,44574],{"class":90},[76,48909,370],{"class":82},[76,48911,40047],{"class":90},[76,48913,48914,48916,48918,48920,48922,48924,48926,48928,48930,48932,48934,48936,48938,48940,48942],{"class":78,"line":11954},[76,48915,44264],{"class":90},[76,48917,44585],{"class":119},[76,48919,2642],{"class":90},[76,48921,36908],{"class":119},[76,48923,44273],{"class":90},[76,48925,23097],{"class":119},[76,48927,2642],{"class":90},[76,48929,44521],{"class":119},[76,48931,44282],{"class":90},[76,48933,2463],{"class":119},[76,48935,2642],{"class":90},[76,48937,34110],{"class":119},[76,48939,44291],{"class":90},[76,48941,34110],{"class":119},[76,48943,40085],{"class":90},[76,48945,48946,48948,48950,48952,48954,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974],{"class":78,"line":11963},[76,48947,44264],{"class":90},[76,48949,44585],{"class":119},[76,48951,2642],{"class":90},[76,48953,36978],{"class":119},[76,48955,44273],{"class":90},[76,48957,44194],{"class":119},[76,48959,2642],{"class":90},[76,48961,36978],{"class":119},[76,48963,44282],{"class":90},[76,48965,2867],{"class":119},[76,48967,2642],{"class":90},[76,48969,34110],{"class":119},[76,48971,44291],{"class":90},[76,48973,34110],{"class":119},[76,48975,40085],{"class":90},[76,48977,48978,48980,48982,48984,48986],{"class":78,"line":11969},[76,48979,44648],{"class":90},[76,48981,669],{"class":119},[76,48983,2642],{"class":90},[76,48985,669],{"class":119},[76,48987,44657],{"class":90},[76,48989,48990],{"class":78,"line":11977},[76,48991,40828],{"class":90},[76,48993,48994,48996,48998,49000,49002],{"class":78,"line":11982},[76,48995,40833],{"class":90},[76,48997,44668],{"class":119},[76,48999,2642],{"class":90},[76,49001,2345],{"class":119},[76,49003,130],{"class":90},[76,49005,49006],{"class":78,"line":18654},[76,49007,40164],{"class":90},[76,49009,49010],{"class":78,"line":18660},[76,49011,44683],{"class":540},[76,49013,49014,49016,49018,49020,49022],{"class":78,"line":18683},[76,49015,5488],{"class":82},[76,49017,40906],{"class":90},[76,49019,1475],{"class":82},[76,49021,40911],{"class":119},[76,49023,40914],{"class":90},[76,49025,49026,49028,49030],{"class":78,"line":18689},[76,49027,6724],{"class":82},[76,49029,40926],{"class":119},[76,49031,40929],{"class":90},[76,49033,49034,49036,49038,49040,49042,49044,49046,49048,49050],{"class":78,"line":18712},[76,49035,40939],{"class":90},[76,49037,44710],{"class":7296},[76,49039,370],{"class":82},[76,49041,44715],{"class":126},[76,49043,2642],{"class":90},[76,49045,40942],{"class":7296},[76,49047,370],{"class":82},[76,49049,40947],{"class":126},[76,49051,130],{"class":90},[76,49053,49054],{"class":78,"line":18726},[76,49055,44730],{"class":540},[76,49057,49058],{"class":78,"line":18746},[76,49059,44735],{"class":540},[76,49061,49062],{"class":78,"line":18752},[76,49063,44740],{"class":540},[76,49065,49066],{"class":78,"line":18763},[76,49067,44745],{"class":540},[76,49069,49070],{"class":78,"line":18786},[76,49071,44750],{"class":540},[76,49073,49074],{"class":78,"line":18808},[76,49075,44755],{"class":540},[76,49077,49078,49080,49082,49084,49086,49088],{"class":78,"line":18813},[76,49079,40959],{"class":82},[76,49081,40962],{"class":90},[76,49083,729],{"class":82},[76,49085,40967],{"class":82},[76,49087,732],{"class":119},[76,49089,590],{"class":90},[76,49091,49092,49094,49096],{"class":78,"line":18819},[76,49093,40981],{"class":90},[76,49095,1294],{"class":119},[76,49097,130],{"class":90},[76,49099,49100,49102,49104],{"class":78,"line":18833},[76,49101,44782],{"class":82},[76,49103,40926],{"class":119},[76,49105,41000],{"class":90},[76,49107,49108,49110,49112,49114,49116],{"class":78,"line":18846},[76,49109,44791],{"class":90},[76,49111,1294],{"class":119},[76,49113,2642],{"class":90},[76,49115,41022],{"class":119},[76,49117,130],{"class":90},[76,49119,49120,49122,49124,49126,49128,49130],{"class":78,"line":18851},[76,49121,44804],{"class":82},[76,49123,40962],{"class":90},[76,49125,729],{"class":82},[76,49127,40967],{"class":82},[76,49129,732],{"class":119},[76,49131,590],{"class":90},[76,49133,49134,49136,49138],{"class":78,"line":18865},[76,49135,44819],{"class":90},[76,49137,1294],{"class":119},[76,49139,130],{"class":90},[76,49141,49142],{"class":78,"line":18870},[76,49143,37203],{"class":540},[76,49145,49146,49148,49150],{"class":78,"line":18876},[76,49147,32845],{"class":82},[76,49149,33137],{"class":86},[76,49151,33140],{"class":90},[76,49153,49154,49156,49158,49160],{"class":78,"line":18881},[76,49155,33145],{"class":90},[76,49157,370],{"class":82},[76,49159,32867],{"class":119},[76,49161,44846],{"class":90},[76,49163,49164,49166,49168,49170],{"class":78,"line":18895},[76,49165,33145],{"class":90},[76,49167,370],{"class":82},[76,49169,32867],{"class":119},[76,49171,44857],{"class":90},[76,49173,49174,49176,49178,49180],{"class":78,"line":18900},[76,49175,33145],{"class":90},[76,49177,370],{"class":82},[76,49179,32867],{"class":119},[76,49181,44868],{"class":90},[76,49183,49184,49186,49188,49190],{"class":78,"line":18905},[76,49185,33145],{"class":90},[76,49187,370],{"class":82},[76,49189,32867],{"class":119},[76,49191,44879],{"class":90},[76,49193,49194,49196,49198,49200],{"class":78,"line":18919},[76,49195,33145],{"class":90},[76,49197,370],{"class":82},[76,49199,32867],{"class":119},[76,49201,44890],{"class":90},[76,49203,49204,49206],{"class":78,"line":18931},[76,49205,595],{"class":82},[76,49207,33253],{"class":90},[76,49209,49210],{"class":78,"line":18936},[76,49211,149],{"emptyLinePlaceholder":148},[76,49213,49214],{"class":78,"line":18949},[76,49215,44905],{"class":540},[76,49217,49218,49220,49222,49224,49226],{"class":78,"line":18954},[76,49219,723],{"class":82},[76,49221,33264],{"class":119},[76,49223,1250],{"class":82},[76,49225,33269],{"class":126},[76,49227,590],{"class":90},[76,49229,49230,49232,49234,49236,49238,49240,49242,49244,49246],{"class":78,"line":18959},[76,49231,33281],{"class":90},[76,49233,370],{"class":82},[76,49235,32496],{"class":90},[76,49237,33288],{"class":126},[76,49239,3811],{"class":82},[76,49241,33293],{"class":90},[76,49243,1328],{"class":82},[76,49245,32521],{"class":126},[76,49247,130],{"class":90},[76,49249,49250,49252,49254],{"class":78,"line":18964},[76,49251,33333],{"class":90},[76,49253,370],{"class":82},[76,49255,44946],{"class":90},[76,49257,49258,49260,49262,49264,49266,49268,49270,49272],{"class":78,"line":18977},[76,49259,120],{"class":119},[76,49261,33345],{"class":90},[76,49263,669],{"class":119},[76,49265,2642],{"class":90},[76,49267,33544],{"class":119},[76,49269,2642],{"class":90},[76,49271,33544],{"class":119},[76,49273,33358],{"class":90},[24047,49275,49277],{"id":49276},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49279,49280],{},"计算图片的均值与方差，用于训练中归一化处理操作",[66,49282,49284],{"className":68,"code":49283,"language":70,"meta":71,"style":71},"# 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",[73,49285,49286,49291,49304,49309,49315,49320,49330,49334,49339,49349,49353,49358,49367,49384,49388,49393,49405,49417,49448,49457,49467,49477,49481,49486,49501,49505,49510,49515,49520,49530,49535,49560,49564,49569,49584,49588,49601,49605,49610,49615,49620,49625,49630,49640,49650,49673,49681,49689,49697,49701,49713,49717,49722,49726,49730,49737,49756,49780,49787,49801,49806,49811,49815,49829,49833,49845],{"__ignoreMap":71},[76,49287,49288],{"class":78,"line":79},[76,49289,49290],{"class":540},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[76,49292,49293,49295,49298,49301],{"class":78,"line":94},[76,49294,32781],{"class":82},[76,49296,49297],{"class":119}," PIL",[76,49299,49300],{"class":82}," import",[76,49302,49303],{"class":90}," Image\n",[76,49305,49306],{"class":78,"line":133},[76,49307,49308],{"class":540},"# os 用来处理文件夹和文件路径\n",[76,49310,49311,49313],{"class":78,"line":145},[76,49312,32438],{"class":82},[76,49314,47340],{"class":90},[76,49316,49317],{"class":78,"line":152},[76,49318,49319],{"class":540},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[76,49321,49322,49324,49326,49328],{"class":78,"line":157},[76,49323,32438],{"class":82},[76,49325,33423],{"class":90},[76,49327,33426],{"class":82},[76,49329,33429],{"class":90},[76,49331,49332],{"class":78,"line":246},[76,49333,149],{"emptyLinePlaceholder":148},[76,49335,49336],{"class":78,"line":251},[76,49337,49338],{"class":540},"# 文件夹路径，包含所有图片文件\n",[76,49340,49341,49344,49346],{"class":78,"line":257},[76,49342,49343],{"class":90},"folder_path ",[76,49345,370],{"class":82},[76,49347,49348],{"class":126}," 'data_cat_dog'\n",[76,49350,49351],{"class":78,"line":641},[76,49352,149],{"emptyLinePlaceholder":148},[76,49354,49355],{"class":78,"line":646},[76,49356,49357],{"class":540},"# 初始化累积变量\n",[76,49359,49360,49363,49365],{"class":78,"line":659},[76,49361,49362],{"class":90},"total_pixels ",[76,49364,370],{"class":82},[76,49366,1027],{"class":119},[76,49368,49369,49372,49374,49377,49379,49381],{"class":78,"line":1608},[76,49370,49371],{"class":90},"sum_normalized_pixel_values ",[76,49373,370],{"class":82},[76,49375,49376],{"class":90}," np.zeros(",[76,49378,2339],{"class":119},[76,49380,47842],{"class":90},[76,49382,49383],{"class":540},"# 如果是RGB图像，需要三个通道的均值和方差\n",[76,49385,49386],{"class":78,"line":1632},[76,49387,149],{"emptyLinePlaceholder":148},[76,49389,49390],{"class":78,"line":1637},[76,49391,49392],{"class":540},"# 遍历文件夹中的图片文件\n",[76,49394,49395,49397,49400,49402],{"class":78,"line":1642},[76,49396,5112],{"class":82},[76,49398,49399],{"class":90}," root, dirs, files ",[76,49401,1475],{"class":82},[76,49403,49404],{"class":90}," os.walk(folder_path):\n",[76,49406,49407,49409,49412,49414],{"class":78,"line":1652},[76,49408,1469],{"class":82},[76,49410,49411],{"class":90}," filename ",[76,49413,1475],{"class":82},[76,49415,49416],{"class":90}," files:\n",[76,49418,49419,49421,49424,49427,49429,49432,49434,49437,49439,49442,49445],{"class":78,"line":1660},[76,49420,4592],{"class":82},[76,49422,49423],{"class":90}," filename.endswith((",[76,49425,49426],{"class":126},"'.jpg'",[76,49428,405],{"class":90},[76,49430,49431],{"class":126},"'.jpeg'",[76,49433,405],{"class":90},[76,49435,49436],{"class":126},"'.png'",[76,49438,405],{"class":90},[76,49440,49441],{"class":126},"'.bmp'",[76,49443,49444],{"class":90},")):  ",[76,49446,49447],{"class":540},"# 可根据实际情况添加其他格式\n",[76,49449,49450,49452,49454],{"class":78,"line":1683},[76,49451,47707],{"class":90},[76,49453,370],{"class":82},[76,49455,49456],{"class":90}," os.path.join(root, filename)\n",[76,49458,49459,49462,49464],{"class":78,"line":1698},[76,49460,49461],{"class":90},"            image ",[76,49463,370],{"class":82},[76,49465,49466],{"class":90}," Image.open(image_path)\n",[76,49468,49469,49472,49474],{"class":78,"line":1711},[76,49470,49471],{"class":90},"            image_array ",[76,49473,370],{"class":82},[76,49475,49476],{"class":90}," np.array(image)\n",[76,49478,49479],{"class":78,"line":1717},[76,49480,149],{"emptyLinePlaceholder":148},[76,49482,49483],{"class":78,"line":1728},[76,49484,49485],{"class":540},"            # 归一化像素值到0-1之间\n",[76,49487,49488,49491,49493,49496,49498],{"class":78,"line":1740},[76,49489,49490],{"class":90},"            normalized_image_array ",[76,49492,370],{"class":82},[76,49494,49495],{"class":90}," image_array ",[76,49497,795],{"class":82},[76,49499,49500],{"class":119}," 255.0\n",[76,49502,49503],{"class":78,"line":1746},[76,49504,149],{"emptyLinePlaceholder":148},[76,49506,49507],{"class":78,"line":1751},[76,49508,49509],{"class":540},"            # print(image_path)\n",[76,49511,49512],{"class":78,"line":1756},[76,49513,49514],{"class":540},"            # print(normalized_image_array.shape)\n",[76,49516,49517],{"class":78,"line":1766},[76,49518,49519],{"class":540},"            # 累积归一化后的像素值和像素数量\n",[76,49521,49522,49525,49527],{"class":78,"line":1773},[76,49523,49524],{"class":90},"            total_pixels ",[76,49526,1060],{"class":82},[76,49528,49529],{"class":90}," normalized_image_array.size\n",[76,49531,49532],{"class":78,"line":1793},[76,49533,49534],{"class":540},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[76,49536,49537,49540,49542,49545,49548,49550,49552,49554,49556,49558],{"class":78,"line":1806},[76,49538,49539],{"class":90},"            sum_normalized_pixel_values ",[76,49541,1060],{"class":82},[76,49543,49544],{"class":90}," np.sum(normalized_image_array, ",[76,49546,49547],{"class":7296},"axis",[76,49549,370],{"class":82},[76,49551,123],{"class":90},[76,49553,1294],{"class":119},[76,49555,405],{"class":90},[76,49557,669],{"class":119},[76,49559,656],{"class":90},[76,49561,49562],{"class":78,"line":1817},[76,49563,149],{"emptyLinePlaceholder":148},[76,49565,49566],{"class":78,"line":1822},[76,49567,49568],{"class":540},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[76,49570,49571,49574,49576,49579,49581],{"class":78,"line":1835},[76,49572,49573],{"class":90},"mean ",[76,49575,370],{"class":82},[76,49577,49578],{"class":90}," sum_normalized_pixel_values ",[76,49580,795],{"class":82},[76,49582,49583],{"class":90}," total_pixels\n",[76,49585,49586],{"class":78,"line":1847},[76,49587,149],{"emptyLinePlaceholder":148},[76,49589,49590,49593,49595,49597,49599],{"class":78,"line":1852},[76,49591,49592],{"class":90},"sum_squared_diff ",[76,49594,370],{"class":82},[76,49596,49376],{"class":90},[76,49598,2339],{"class":119},[76,49600,130],{"class":90},[76,49602,49603],{"class":78,"line":1862},[76,49604,149],{"emptyLinePlaceholder":148},[76,49606,49607],{"class":78,"line":1874},[76,49608,49609],{"class":540},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[76,49611,49612],{"class":78,"line":1879},[76,49613,49614],{"class":540},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[76,49616,49617],{"class":78,"line":1884},[76,49618,49619],{"class":540},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[76,49621,49622],{"class":78,"line":1889},[76,49623,49624],{"class":540},"# Image.open(image_path)：打开图片\n",[76,49626,49627],{"class":78,"line":1900},[76,49628,49629],{"class":540},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[76,49631,49632,49634,49636,49638],{"class":78,"line":1906},[76,49633,5112],{"class":82},[76,49635,49399],{"class":90},[76,49637,1475],{"class":82},[76,49639,49404],{"class":90},[76,49641,49642,49644,49646,49648],{"class":78,"line":1924},[76,49643,1469],{"class":82},[76,49645,49411],{"class":90},[76,49647,1475],{"class":82},[76,49649,49416],{"class":90},[76,49651,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670],{"class":78,"line":1929},[76,49653,4592],{"class":82},[76,49655,49423],{"class":90},[76,49657,49426],{"class":126},[76,49659,405],{"class":90},[76,49661,49431],{"class":126},[76,49663,405],{"class":90},[76,49665,49436],{"class":126},[76,49667,405],{"class":90},[76,49669,49441],{"class":126},[76,49671,49672],{"class":90},")):\n",[76,49674,49675,49677,49679],{"class":78,"line":1944},[76,49676,47707],{"class":90},[76,49678,370],{"class":82},[76,49680,49456],{"class":90},[76,49682,49683,49685,49687],{"class":78,"line":1950},[76,49684,49461],{"class":90},[76,49686,370],{"class":82},[76,49688,49466],{"class":90},[76,49690,49691,49693,49695],{"class":78,"line":1965},[76,49692,49471],{"class":90},[76,49694,370],{"class":82},[76,49696,49476],{"class":90},[76,49698,49699],{"class":78,"line":1971},[76,49700,49485],{"class":540},[76,49702,49703,49705,49707,49709,49711],{"class":78,"line":1985},[76,49704,49490],{"class":90},[76,49706,370],{"class":82},[76,49708,49495],{"class":90},[76,49710,795],{"class":82},[76,49712,49500],{"class":119},[76,49714,49715],{"class":78,"line":1991},[76,49716,49514],{"class":540},[76,49718,49719],{"class":78,"line":2005},[76,49720,49721],{"class":540},"            # print(mean.shape)\n",[76,49723,49724],{"class":78,"line":2017},[76,49725,49509],{"class":540},[76,49727,49728],{"class":78,"line":2023},[76,49729,149],{"emptyLinePlaceholder":148},[76,49731,49732,49735],{"class":78,"line":2031},[76,49733,49734],{"class":82},"            try",[76,49736,590],{"class":90},[76,49738,49739,49742,49744,49747,49749,49752,49754],{"class":78,"line":11880},[76,49740,49741],{"class":90},"                diff ",[76,49743,370],{"class":82},[76,49745,49746],{"class":90}," (normalized_image_array ",[76,49748,666],{"class":82},[76,49750,49751],{"class":90}," mean) ",[76,49753,801],{"class":82},[76,49755,804],{"class":119},[76,49757,49758,49761,49763,49766,49768,49770,49772,49774,49776,49778],{"class":78,"line":11901},[76,49759,49760],{"class":90},"                sum_squared_diff ",[76,49762,1060],{"class":82},[76,49764,49765],{"class":90}," np.sum(diff, ",[76,49767,49547],{"class":7296},[76,49769,370],{"class":82},[76,49771,123],{"class":90},[76,49773,1294],{"class":119},[76,49775,405],{"class":90},[76,49777,669],{"class":119},[76,49779,656],{"class":90},[76,49781,49782,49785],{"class":78,"line":11907},[76,49783,49784],{"class":82},"            except",[76,49786,590],{"class":90},[76,49788,49789,49792,49794,49796,49799],{"class":78,"line":11921},[76,49790,49791],{"class":119},"                print",[76,49793,123],{"class":90},[76,49795,292],{"class":82},[76,49797,49798],{"class":126},"\"捕获到自定义异常\"",[76,49800,130],{"class":90},[76,49802,49803],{"class":78,"line":11927},[76,49804,49805],{"class":540},"            # diff = (normalized_image_array - mean) ** 2\n",[76,49807,49808],{"class":78,"line":11954},[76,49809,49810],{"class":540},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[76,49812,49813],{"class":78,"line":11963},[76,49814,149],{"emptyLinePlaceholder":148},[76,49816,49817,49820,49822,49825,49827],{"class":78,"line":11969},[76,49818,49819],{"class":90},"variance ",[76,49821,370],{"class":82},[76,49823,49824],{"class":90}," sum_squared_diff ",[76,49826,795],{"class":82},[76,49828,49583],{"class":90},[76,49830,49831],{"class":78,"line":11977},[76,49832,149],{"emptyLinePlaceholder":148},[76,49834,49835,49837,49839,49842],{"class":78,"line":11982},[76,49836,478],{"class":119},[76,49838,123],{"class":90},[76,49840,49841],{"class":126},"\"Mean:\"",[76,49843,49844],{"class":90},", mean)\n",[76,49846,49847,49849,49851,49854],{"class":78,"line":18654},[76,49848,478],{"class":119},[76,49850,123],{"class":90},[76,49852,49853],{"class":126},"\"Variance:\"",[76,49855,49856],{"class":90},", variance)\n",[66,49858,49860],{"className":68,"code":49859,"language":70,"meta":71,"style":71},"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",[73,49861,49862,49868,49874,49884,49890,49900,49914,49924,49934,49944,49948,49958,49968,49972,49976,49984,49989,49994,50013,50017,50022,50027,50032,50037,50078,50083,50093,50098,50111,50116,50121,50126,50131,50136,50140,50145,50150,50172,50176,50208,50222,50232,50242,50246,50256,50270,50280,50290,50300,50306,50310,50314,50318,50322,50326,50334,50354,50358,50362,50366,50370,50386,50390,50394,50402,50406,50410,50418,50422,50426,50430,50438,50442,50446,50450,50458,50462,50470,50474,50482,50486,50494,50498,50506,50510,50514,50522,50526,50530,50542,50566,50580,50584,50588,50592,50600,50604,50612,50616,50624,50628,50636,50640,50648,50652,50660,50664,50676,50680,50688,50692,50700,50704,50708,50712,50716,50724,50728,50744,50748,50756,50760,50764,50768,50772,50776,50780,50784,50800,50804,50816,50820,50832,50836,50848,50852,50860,50864,50872,50876,50880,50884,50890,50894,50902,50906,50922,50926,50934,50938,50954,50966,50970,50982,50986,50990,50998,51002,51006,51014,51018,51026,51030,51038,51042,51046,51088,51130,51134,51138,51154,51158,51174,51178,51182,51190,51194,51198,51210,51248,51252,51256,51264,51268,51282,51292,51298,51304,51310,51316,51320,51324,51330,51334,51338,51346,51350,51368,51372,51376,51380,51396,51400,51404,51408,51412,51416,51436,51456,51460,51464,51468,51476,51484,51488,51504,51524,51544,51548,51553,51562,51571,51576,51581,51586,51599,51604,51613,51622,51639],{"__ignoreMap":71},[76,49863,49864,49866],{"class":78,"line":79},[76,49865,32438],{"class":82},[76,49867,33864],{"class":90},[76,49869,49870,49872],{"class":78,"line":94},[76,49871,32438],{"class":82},[76,49873,33871],{"class":90},[76,49875,49876,49878,49880,49882],{"class":78,"line":133},[76,49877,32438],{"class":82},[76,49879,33882],{"class":90},[76,49881,33426],{"class":82},[76,49883,33887],{"class":90},[76,49885,49886,49888],{"class":78,"line":145},[76,49887,32438],{"class":82},[76,49889,32441],{"class":90},[76,49891,49892,49894,49896,49898],{"class":78,"line":152},[76,49893,32781],{"class":82},[76,49895,33458],{"class":90},[76,49897,32438],{"class":82},[76,49899,33904],{"class":90},[76,49901,49902,49904,49906,49908,49911],{"class":78,"line":157},[76,49903,32781],{"class":82},[76,49905,33411],{"class":90},[76,49907,32438],{"class":82},[76,49909,49910],{"class":90}," ImageFolder ",[76,49912,49913],{"class":540},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[76,49915,49916,49918,49920,49922],{"class":78,"line":246},[76,49917,32781],{"class":82},[76,49919,33441],{"class":90},[76,49921,32438],{"class":82},[76,49923,33446],{"class":90},[76,49925,49926,49928,49930,49932],{"class":78,"line":251},[76,49927,32438],{"class":82},[76,49929,33458],{"class":90},[76,49931,33426],{"class":82},[76,49933,33463],{"class":90},[76,49935,49936,49938,49940,49942],{"class":78,"line":257},[76,49937,32438],{"class":82},[76,49939,33475],{"class":90},[76,49941,33426],{"class":82},[76,49943,33480],{"class":90},[76,49945,49946],{"class":78,"line":641},[76,49947,33949],{"class":540},[76,49949,49950,49952,49954,49956],{"class":78,"line":646},[76,49951,32781],{"class":82},[76,49953,33956],{"class":90},[76,49955,32438],{"class":82},[76,49957,45066],{"class":90},[76,49959,49960,49962,49964,49966],{"class":78,"line":659},[76,49961,32781],{"class":82},[76,49963,32784],{"class":90},[76,49965,32438],{"class":82},[76,49967,32789],{"class":90},[76,49969,49970],{"class":78,"line":1608},[76,49971,149],{"emptyLinePlaceholder":148},[76,49973,49974],{"class":78,"line":1632},[76,49975,33984],{"class":540},[76,49977,49978,49980,49982],{"class":78,"line":1637},[76,49979,83],{"class":82},[76,49981,33991],{"class":86},[76,49983,91],{"class":90},[76,49985,49986],{"class":78,"line":1642},[76,49987,49988],{"class":540},"    # 导入自己的数据集，并进行数据处理\n",[76,49990,49991],{"class":78,"line":1652},[76,49992,49993],{"class":540},"    # 定义数据集的路径\n",[76,49995,49996,49999,50001,50003,50005,50007,50011],{"class":78,"line":1660},[76,49997,49998],{"class":119},"    ROOT_PATH",[76,50000,370],{"class":82},[76,50002,2929],{"class":82},[76,50004,307],{"class":126},[76,50006,2819],{"class":119},[76,50008,50010],{"class":50009},"sA_wV","\u002Fdata\u002Ftrain",[76,50012,27183],{"class":126},[76,50014,50015],{"class":78,"line":1683},[76,50016,149],{"emptyLinePlaceholder":148},[76,50018,50019],{"class":78,"line":1698},[76,50020,50021],{"class":540},"    # 定义归一化方法\n",[76,50023,50024],{"class":78,"line":1711},[76,50025,50026],{"class":540},"    # 这里需要先计算一下数据集的均值和方差\n",[76,50028,50029],{"class":78,"line":1717},[76,50030,50031],{"class":540},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[76,50033,50034],{"class":78,"line":1728},[76,50035,50036],{"class":540},"    # 第一个参数是均值，第二个参数是方差\n",[76,50038,50039,50042,50044,50047,50050,50052,50055,50057,50060,50063,50066,50068,50071,50073,50076],{"class":78,"line":1740},[76,50040,50041],{"class":90},"    normalize",[76,50043,370],{"class":82},[76,50045,50046],{"class":90},"transforms.Normalize([",[76,50048,50049],{"class":119},"0.162",[76,50051,2642],{"class":90},[76,50053,50054],{"class":119},"0.151",[76,50056,2642],{"class":90},[76,50058,50059],{"class":119},"0.138",[76,50061,50062],{"class":90},"],[",[76,50064,50065],{"class":119},"0.058",[76,50067,2642],{"class":90},[76,50069,50070],{"class":119},"0.052",[76,50072,2642],{"class":90},[76,50074,50075],{"class":119},"0.048",[76,50077,6739],{"class":90},[76,50079,50080],{"class":78,"line":1746},[76,50081,50082],{"class":540},"    # 定义数据集处理方法变量\n",[76,50084,50085,50088,50090],{"class":78,"line":1751},[76,50086,50087],{"class":90},"    train_transform",[76,50089,370],{"class":82},[76,50091,50092],{"class":90},"transforms.Compose([\n",[76,50094,50095],{"class":78,"line":1756},[76,50096,50097],{"class":540},"        # 调整图像大小为224*224\n",[76,50099,50100,50103,50105,50107,50109],{"class":78,"line":1766},[76,50101,50102],{"class":90},"        transforms.Resize((",[76,50104,33544],{"class":119},[76,50106,2642],{"class":90},[76,50108,33544],{"class":119},[76,50110,44657],{"class":90},[76,50112,50113],{"class":78,"line":1773},[76,50114,50115],{"class":540},"        # 将图像转换为张量\n",[76,50117,50118],{"class":78,"line":1793},[76,50119,50120],{"class":90},"        transforms.ToTensor(),\n",[76,50122,50123],{"class":78,"line":1806},[76,50124,50125],{"class":90},"        normalize])\n",[76,50127,50128],{"class":78,"line":1817},[76,50129,50130],{"class":540},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[76,50132,50133],{"class":78,"line":1822},[76,50134,50135],{"class":540},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[76,50137,50138],{"class":78,"line":1835},[76,50139,149],{"emptyLinePlaceholder":148},[76,50141,50142],{"class":78,"line":1847},[76,50143,50144],{"class":540},"    # 加载数据集\n",[76,50146,50147],{"class":78,"line":1852},[76,50148,50149],{"class":540},"    # 传入数据集路径与处理方法\n",[76,50151,50152,50154,50156,50159,50162,50164,50167,50169],{"class":78,"line":1862},[76,50153,33998],{"class":90},[76,50155,370],{"class":82},[76,50157,50158],{"class":90},"ImageFolder(",[76,50160,50161],{"class":119},"ROOT_PATH",[76,50163,2642],{"class":90},[76,50165,50166],{"class":7296},"transform",[76,50168,370],{"class":82},[76,50170,50171],{"class":90},"train_transform)\n",[76,50173,50174],{"class":78,"line":1874},[76,50175,149],{"emptyLinePlaceholder":148},[76,50177,50178,50180,50182,50184,50186,50188,50190,50192,50194,50196,50198,50200,50202,50204,50206],{"class":78,"line":1879},[76,50179,34050],{"class":90},[76,50181,370],{"class":82},[76,50183,34055],{"class":90},[76,50185,34058],{"class":119},[76,50187,123],{"class":90},[76,50189,34063],{"class":119},[76,50191,2718],{"class":82},[76,50193,9436],{"class":119},[76,50195,34070],{"class":90},[76,50197,34058],{"class":119},[76,50199,123],{"class":90},[76,50201,34077],{"class":119},[76,50203,2718],{"class":82},[76,50205,9436],{"class":119},[76,50207,34084],{"class":90},[76,50209,50210,50212,50214,50216,50218,50220],{"class":78,"line":1884},[76,50211,34089],{"class":90},[76,50213,370],{"class":82},[76,50215,34094],{"class":90},[76,50217,33580],{"class":7296},[76,50219,370],{"class":82},[76,50221,33585],{"class":90},[76,50223,50224,50226,50228,50230],{"class":78,"line":1889},[76,50225,34105],{"class":7296},[76,50227,370],{"class":82},[76,50229,2463],{"class":119},[76,50231,33509],{"class":90},[76,50233,50234,50236,50238,50240],{"class":78,"line":1900},[76,50235,34117],{"class":7296},[76,50237,370],{"class":82},[76,50239,33519],{"class":119},[76,50241,33509],{"class":90},[76,50243,50244],{"class":78,"line":1906},[76,50245,34128],{"class":540},[76,50247,50248,50250,50252,50254],{"class":78,"line":1924},[76,50249,34133],{"class":7296},[76,50251,370],{"class":82},[76,50253,2659],{"class":119},[76,50255,130],{"class":90},[76,50257,50258,50260,50262,50264,50266,50268],{"class":78,"line":1929},[76,50259,34144],{"class":90},[76,50261,370],{"class":82},[76,50263,33577],{"class":90},[76,50265,33580],{"class":7296},[76,50267,370],{"class":82},[76,50269,34155],{"class":90},[76,50271,50272,50274,50276,50278],{"class":78,"line":1944},[76,50273,34160],{"class":7296},[76,50275,370],{"class":82},[76,50277,2463],{"class":119},[76,50279,33509],{"class":90},[76,50281,50282,50284,50286,50288],{"class":78,"line":1950},[76,50283,34171],{"class":7296},[76,50285,370],{"class":82},[76,50287,33519],{"class":119},[76,50289,33509],{"class":90},[76,50291,50292,50294,50296,50298],{"class":78,"line":1965},[76,50293,34182],{"class":7296},[76,50295,370],{"class":82},[76,50297,2659],{"class":119},[76,50299,130],{"class":90},[76,50301,50302,50304],{"class":78,"line":1971},[76,50303,441],{"class":82},[76,50305,34195],{"class":90},[76,50307,50308],{"class":78,"line":1985},[76,50309,149],{"emptyLinePlaceholder":148},[76,50311,50312],{"class":78,"line":1991},[76,50313,34204],{"class":540},[76,50315,50316],{"class":78,"line":2005},[76,50317,34209],{"class":540},[76,50319,50320],{"class":78,"line":2017},[76,50321,149],{"emptyLinePlaceholder":148},[76,50323,50324],{"class":78,"line":2023},[76,50325,34218],{"class":540},[76,50327,50328,50330,50332],{"class":78,"line":2031},[76,50329,83],{"class":82},[76,50331,34225],{"class":86},[76,50333,34228],{"class":90},[76,50335,50336,50338,50340,50342,50344,50346,50348,50350,50352],{"class":78,"line":11880},[76,50337,33281],{"class":90},[76,50339,370],{"class":82},[76,50341,32496],{"class":90},[76,50343,33288],{"class":126},[76,50345,3811],{"class":82},[76,50347,33293],{"class":90},[76,50349,1328],{"class":82},[76,50351,34247],{"class":126},[76,50353,130],{"class":90},[76,50355,50356],{"class":78,"line":11901},[76,50357,149],{"emptyLinePlaceholder":148},[76,50359,50360],{"class":78,"line":11907},[76,50361,34262],{"class":540},[76,50363,50364],{"class":78,"line":11921},[76,50365,34267],{"class":540},[76,50367,50368],{"class":78,"line":11927},[76,50369,34272],{"class":540},[76,50371,50372,50374,50376,50378,50380,50382,50384],{"class":78,"line":11954},[76,50373,34277],{"class":90},[76,50375,370],{"class":82},[76,50377,34282],{"class":90},[76,50379,34285],{"class":7296},[76,50381,370],{"class":82},[76,50383,34290],{"class":119},[76,50385,130],{"class":90},[76,50387,50388],{"class":78,"line":11963},[76,50389,149],{"emptyLinePlaceholder":148},[76,50391,50392],{"class":78,"line":11969},[76,50393,34301],{"class":540},[76,50395,50396,50398,50400],{"class":78,"line":11977},[76,50397,34306],{"class":90},[76,50399,370],{"class":82},[76,50401,34311],{"class":90},[76,50403,50404],{"class":78,"line":11982},[76,50405,149],{"emptyLinePlaceholder":148},[76,50407,50408],{"class":78,"line":18654},[76,50409,34320],{"class":540},[76,50411,50412,50414,50416],{"class":78,"line":18660},[76,50413,33333],{"class":90},[76,50415,370],{"class":82},[76,50417,34329],{"class":90},[76,50419,50420],{"class":78,"line":18683},[76,50421,34334],{"class":540},[76,50423,50424],{"class":78,"line":18689},[76,50425,34339],{"class":540},[76,50427,50428],{"class":78,"line":18712},[76,50429,34344],{"class":540},[76,50431,50432,50434,50436],{"class":78,"line":18726},[76,50433,34349],{"class":90},[76,50435,370],{"class":82},[76,50437,34354],{"class":90},[76,50439,50440],{"class":78,"line":18746},[76,50441,149],{"emptyLinePlaceholder":148},[76,50443,50444],{"class":78,"line":18752},[76,50445,34367],{"class":540},[76,50447,50448],{"class":78,"line":18763},[76,50449,34372],{"class":540},[76,50451,50452,50454,50456],{"class":78,"line":18786},[76,50453,34377],{"class":90},[76,50455,370],{"class":82},[76,50457,34382],{"class":119},[76,50459,50460],{"class":78,"line":18808},[76,50461,34387],{"class":540},[76,50463,50464,50466,50468],{"class":78,"line":18813},[76,50465,34392],{"class":90},[76,50467,370],{"class":82},[76,50469,34397],{"class":90},[76,50471,50472],{"class":78,"line":18819},[76,50473,34402],{"class":540},[76,50475,50476,50478,50480],{"class":78,"line":18833},[76,50477,34407],{"class":90},[76,50479,370],{"class":82},[76,50481,34397],{"class":90},[76,50483,50484],{"class":78,"line":18846},[76,50485,34416],{"class":540},[76,50487,50488,50490,50492],{"class":78,"line":18851},[76,50489,34421],{"class":90},[76,50491,370],{"class":82},[76,50493,34397],{"class":90},[76,50495,50496],{"class":78,"line":18865},[76,50497,34430],{"class":540},[76,50499,50500,50502,50504],{"class":78,"line":18870},[76,50501,34435],{"class":90},[76,50503,370],{"class":82},[76,50505,34397],{"class":90},[76,50507,50508],{"class":78,"line":18876},[76,50509,149],{"emptyLinePlaceholder":148},[76,50511,50512],{"class":78,"line":18881},[76,50513,34448],{"class":540},[76,50515,50516,50518,50520],{"class":78,"line":18895},[76,50517,34453],{"class":90},[76,50519,370],{"class":82},[76,50521,34458],{"class":90},[76,50523,50524],{"class":78,"line":18900},[76,50525,149],{"emptyLinePlaceholder":148},[76,50527,50528],{"class":78,"line":18905},[76,50529,34471],{"class":540},[76,50531,50532,50534,50536,50538,50540],{"class":78,"line":18919},[76,50533,1469],{"class":82},[76,50535,34478],{"class":90},[76,50537,1475],{"class":82},[76,50539,34483],{"class":119},[76,50541,34486],{"class":90},[76,50543,50544,50546,50548,50550,50552,50554,50556,50558,50560,50562,50564],{"class":78,"line":18931},[76,50545,1701],{"class":119},[76,50547,123],{"class":90},[76,50549,34495],{"class":126},[76,50551,34498],{"class":119},[76,50553,795],{"class":126},[76,50555,34498],{"class":119},[76,50557,307],{"class":126},[76,50559,34507],{"class":90},[76,50561,666],{"class":82},[76,50563,669],{"class":119},[76,50565,656],{"class":90},[76,50567,50568,50570,50572,50574,50576,50578],{"class":78,"line":18936},[76,50569,1701],{"class":119},[76,50571,123],{"class":90},[76,50573,1116],{"class":126},[76,50575,2718],{"class":82},[76,50577,402],{"class":119},[76,50579,130],{"class":90},[76,50581,50582],{"class":78,"line":18949},[76,50583,149],{"emptyLinePlaceholder":148},[76,50585,50586],{"class":78,"line":18954},[76,50587,34536],{"class":540},[76,50589,50590],{"class":78,"line":18959},[76,50591,34541],{"class":540},[76,50593,50594,50596,50598],{"class":78,"line":18964},[76,50595,34546],{"class":90},[76,50597,370],{"class":82},[76,50599,34382],{"class":119},[76,50601,50602],{"class":78,"line":18977},[76,50603,34555],{"class":540},[76,50605,50606,50608,50610],{"class":78,"line":18982},[76,50607,34560],{"class":90},[76,50609,370],{"class":82},[76,50611,5172],{"class":119},[76,50613,50614],{"class":78,"line":34671},[76,50615,34569],{"class":540},[76,50617,50618,50620,50622],{"class":78,"line":34677},[76,50619,34574],{"class":90},[76,50621,370],{"class":82},[76,50623,34382],{"class":119},[76,50625,50626],{"class":78,"line":34683},[76,50627,34583],{"class":540},[76,50629,50630,50632,50634],{"class":78,"line":34689},[76,50631,34588],{"class":90},[76,50633,370],{"class":82},[76,50635,5172],{"class":119},[76,50637,50638],{"class":78,"line":34695},[76,50639,34597],{"class":540},[76,50641,50642,50644,50646],{"class":78,"line":34706},[76,50643,34602],{"class":90},[76,50645,370],{"class":82},[76,50647,5172],{"class":119},[76,50649,50650],{"class":78,"line":34712},[76,50651,34611],{"class":540},[76,50653,50654,50656,50658],{"class":78,"line":34732},[76,50655,34616],{"class":90},[76,50657,370],{"class":82},[76,50659,5172],{"class":119},[76,50661,50662],{"class":78,"line":34738},[76,50663,34625],{"class":540},[76,50665,50666,50668,50670,50672,50674],{"class":78,"line":34749},[76,50667,5488],{"class":82},[76,50669,33644],{"class":90},[76,50671,1475],{"class":82},[76,50673,33649],{"class":119},[76,50675,34638],{"class":90},[76,50677,50678],{"class":78,"line":34755},[76,50679,34643],{"class":540},[76,50681,50682,50684,50686],{"class":78,"line":34761},[76,50683,34648],{"class":90},[76,50685,370],{"class":82},[76,50687,34653],{"class":90},[76,50689,50690],{"class":78,"line":34767},[76,50691,34658],{"class":540},[76,50693,50694,50696,50698],{"class":78,"line":34773},[76,50695,34663],{"class":90},[76,50697,370],{"class":82},[76,50699,34668],{"class":90},[76,50701,50702],{"class":78,"line":34779},[76,50703,34674],{"class":540},[76,50705,50706],{"class":78,"line":34785},[76,50707,34680],{"class":90},[76,50709,50710],{"class":78,"line":34791},[76,50711,34686],{"class":540},[76,50713,50714],{"class":78,"line":34811},[76,50715,34692],{"class":540},[76,50717,50718,50720,50722],{"class":78,"line":34817},[76,50719,34698],{"class":90},[76,50721,370],{"class":82},[76,50723,34703],{"class":90},[76,50725,50726],{"class":78,"line":34833},[76,50727,34709],{"class":540},[76,50729,50730,50732,50734,50736,50738,50740,50742],{"class":78,"line":34839},[76,50731,34715],{"class":90},[76,50733,370],{"class":82},[76,50735,34720],{"class":90},[76,50737,34723],{"class":7296},[76,50739,370],{"class":82},[76,50741,669],{"class":119},[76,50743,130],{"class":90},[76,50745,50746],{"class":78,"line":34853},[76,50747,34735],{"class":540},[76,50749,50750,50752,50754],{"class":78,"line":34859},[76,50751,34741],{"class":90},[76,50753,370],{"class":82},[76,50755,34746],{"class":90},[76,50757,50758],{"class":78,"line":34874},[76,50759,34752],{"class":540},[76,50761,50762],{"class":78,"line":34880},[76,50763,34758],{"class":90},[76,50765,50766],{"class":78,"line":34889},[76,50767,34764],{"class":540},[76,50769,50770],{"class":78,"line":34895},[76,50771,34770],{"class":90},[76,50773,50774],{"class":78,"line":34904},[76,50775,34776],{"class":540},[76,50777,50778],{"class":78,"line":34910},[76,50779,34782],{"class":90},[76,50781,50782],{"class":78,"line":34916},[76,50783,34788],{"class":540},[76,50785,50786,50788,50790,50792,50794,50796,50798],{"class":78,"line":34925},[76,50787,34794],{"class":90},[76,50789,1060],{"class":82},[76,50791,34799],{"class":90},[76,50793,2718],{"class":82},[76,50795,34804],{"class":90},[76,50797,1294],{"class":119},[76,50799,130],{"class":90},[76,50801,50802],{"class":78,"line":34931},[76,50803,34814],{"class":540},[76,50805,50806,50808,50810,50812,50814],{"class":78,"line":34942},[76,50807,34820],{"class":90},[76,50809,1060],{"class":82},[76,50811,34825],{"class":90},[76,50813,1250],{"class":82},[76,50815,34830],{"class":90},[76,50817,50818],{"class":78,"line":34948},[76,50819,34836],{"class":540},[76,50821,50822,50824,50826,50828,50830],{"class":78,"line":34967},[76,50823,34842],{"class":90},[76,50825,1060],{"class":82},[76,50827,34804],{"class":90},[76,50829,1294],{"class":119},[76,50831,130],{"class":90},[76,50833,50834],{"class":78,"line":34973},[76,50835,34856],{"class":540},[76,50837,50838,50840,50842,50844,50846],{"class":78,"line":34984},[76,50839,5488],{"class":82},[76,50841,34864],{"class":90},[76,50843,1475],{"class":82},[76,50845,33649],{"class":119},[76,50847,34871],{"class":90},[76,50849,50850],{"class":78,"line":34990},[76,50851,34877],{"class":540},[76,50853,50854,50856,50858],{"class":78,"line":35010},[76,50855,34648],{"class":90},[76,50857,370],{"class":82},[76,50859,34653],{"class":90},[76,50861,50862],{"class":78,"line":35026},[76,50863,34892],{"class":540},[76,50865,50866,50868,50870],{"class":78,"line":35032},[76,50867,34663],{"class":90},[76,50869,370],{"class":82},[76,50871,34668],{"class":90},[76,50873,50874],{"class":78,"line":35046},[76,50875,34907],{"class":540},[76,50877,50878],{"class":78,"line":35052},[76,50879,34913],{"class":90},[76,50881,50882],{"class":78,"line":35058},[76,50883,38394],{"class":540},[76,50885,50886,50888],{"class":78,"line":35069},[76,50887,34919],{"class":82},[76,50889,34922],{"class":90},[76,50891,50892],{"class":78,"line":35075},[76,50893,34928],{"class":540},[76,50895,50896,50898,50900],{"class":78,"line":35081},[76,50897,38409],{"class":90},[76,50899,370],{"class":82},[76,50901,34703],{"class":90},[76,50903,50904],{"class":78,"line":35091},[76,50905,34945],{"class":540},[76,50907,50908,50910,50912,50914,50916,50918,50920],{"class":78,"line":35097},[76,50909,38422],{"class":90},[76,50911,370],{"class":82},[76,50913,34720],{"class":90},[76,50915,34723],{"class":7296},[76,50917,370],{"class":82},[76,50919,669],{"class":119},[76,50921,130],{"class":90},[76,50923,50924],{"class":78,"line":35108},[76,50925,34970],{"class":540},[76,50927,50928,50930,50932],{"class":78,"line":35114},[76,50929,38443],{"class":90},[76,50931,370],{"class":82},[76,50933,34746],{"class":90},[76,50935,50936],{"class":78,"line":35124},[76,50937,34987],{"class":540},[76,50939,50940,50942,50944,50946,50948,50950,50952],{"class":78,"line":35129},[76,50941,38456],{"class":90},[76,50943,1060],{"class":82},[76,50945,38461],{"class":90},[76,50947,2718],{"class":82},[76,50949,34804],{"class":90},[76,50951,1294],{"class":119},[76,50953,130],{"class":90},[76,50955,50956,50958,50960,50962,50964],{"class":78,"line":35135},[76,50957,38474],{"class":90},[76,50959,1060],{"class":82},[76,50961,34825],{"class":90},[76,50963,1250],{"class":82},[76,50965,34830],{"class":90},[76,50967,50968],{"class":78,"line":35184},[76,50969,38487],{"class":540},[76,50971,50972,50974,50976,50978,50980],{"class":78,"line":35231},[76,50973,38492],{"class":90},[76,50975,1060],{"class":82},[76,50977,34804],{"class":90},[76,50979,1294],{"class":119},[76,50981,130],{"class":90},[76,50983,50984],{"class":78,"line":35236},[76,50985,35049],{"class":540},[76,50987,50988],{"class":78,"line":35242},[76,50989,35055],{"class":540},[76,50991,50992,50994,50996],{"class":78,"line":35261},[76,50993,35061],{"class":90},[76,50995,795],{"class":82},[76,50997,35066],{"class":90},[76,50999,51000],{"class":78,"line":35267},[76,51001,35072],{"class":540},[76,51003,51004],{"class":78,"line":35287},[76,51005,35078],{"class":540},[76,51007,51008,51010,51012],{"class":78,"line":35293},[76,51009,35084],{"class":90},[76,51011,795],{"class":82},[76,51013,35066],{"class":90},[76,51015,51016],{"class":78,"line":35299},[76,51017,35094],{"class":540},[76,51019,51020,51022,51024],{"class":78,"line":35309},[76,51021,35100],{"class":90},[76,51023,795],{"class":82},[76,51025,35105],{"class":90},[76,51027,51028],{"class":78,"line":35314},[76,51029,35111],{"class":540},[76,51031,51032,51034,51036],{"class":78,"line":35320},[76,51033,35117],{"class":90},[76,51035,795],{"class":82},[76,51037,35105],{"class":90},[76,51039,51040],{"class":78,"line":35336},[76,51041,149],{"emptyLinePlaceholder":148},[76,51043,51044],{"class":78,"line":35381},[76,51045,35132],{"class":540},[76,51047,51048,51050,51052,51054,51056,51058,51060,51062,51064,51066,51068,51070,51072,51074,51076,51078,51080,51082,51084,51086],{"class":78,"line":35387},[76,51049,1701],{"class":119},[76,51051,123],{"class":90},[76,51053,5677],{"class":126},[76,51055,34498],{"class":119},[76,51057,35146],{"class":126},[76,51059,298],{"class":119},[76,51061,35151],{"class":82},[76,51063,304],{"class":119},[76,51065,35156],{"class":126},[76,51067,298],{"class":119},[76,51069,35151],{"class":82},[76,51071,304],{"class":119},[76,51073,5677],{"class":126},[76,51075,35167],{"class":90},[76,51077,666],{"class":82},[76,51079,669],{"class":119},[76,51081,35174],{"class":90},[76,51083,666],{"class":82},[76,51085,669],{"class":119},[76,51087,35181],{"class":90},[76,51089,51090,51092,51094,51096,51098,51100,51102,51104,51106,51108,51110,51112,51114,51116,51118,51120,51122,51124,51126,51128],{"class":78,"line":35393},[76,51091,1701],{"class":119},[76,51093,123],{"class":90},[76,51095,5677],{"class":126},[76,51097,34498],{"class":119},[76,51099,35195],{"class":126},[76,51101,298],{"class":119},[76,51103,35151],{"class":82},[76,51105,304],{"class":119},[76,51107,35204],{"class":126},[76,51109,298],{"class":119},[76,51111,35151],{"class":82},[76,51113,304],{"class":119},[76,51115,5677],{"class":126},[76,51117,35215],{"class":90},[76,51119,666],{"class":82},[76,51121,669],{"class":119},[76,51123,35222],{"class":90},[76,51125,666],{"class":82},[76,51127,669],{"class":119},[76,51129,35181],{"class":90},[76,51131,51132],{"class":78,"line":35399},[76,51133,149],{"emptyLinePlaceholder":148},[76,51135,51136],{"class":78,"line":35410},[76,51137,35239],{"class":540},[76,51139,51140,51142,51144,51146,51148,51150,51152],{"class":78,"line":35416},[76,51141,4592],{"class":82},[76,51143,35247],{"class":90},[76,51145,666],{"class":82},[76,51147,669],{"class":119},[76,51149,3196],{"class":90},[76,51151,1829],{"class":82},[76,51153,35258],{"class":90},[76,51155,51156],{"class":78,"line":35422},[76,51157,35264],{"class":540},[76,51159,51160,51162,51164,51166,51168,51170,51172],{"class":78,"line":35428},[76,51161,35270],{"class":90},[76,51163,2311],{"class":119},[76,51165,370],{"class":82},[76,51167,35277],{"class":90},[76,51169,666],{"class":82},[76,51171,669],{"class":119},[76,51173,35284],{"class":90},[76,51175,51176],{"class":78,"line":35446},[76,51177,35290],{"class":540},[76,51179,51180],{"class":78,"line":35460},[76,51181,35296],{"class":540},[76,51183,51184,51186,51188],{"class":78,"line":35469},[76,51185,35302],{"class":90},[76,51187,370],{"class":82},[76,51189,34354],{"class":90},[76,51191,51192],{"class":78,"line":35478},[76,51193,149],{"emptyLinePlaceholder":148},[76,51195,51196],{"class":78,"line":35487},[76,51197,35317],{"class":540},[76,51199,51200,51202,51204,51206,51208],{"class":78,"line":35496},[76,51201,35323],{"class":90},[76,51203,370],{"class":82},[76,51205,35328],{"class":90},[76,51207,666],{"class":82},[76,51209,35333],{"class":90},[76,51211,51212,51214,51216,51218,51220,51222,51224,51226,51228,51230,51232,51234,51236,51238,51240,51242,51244,51246],{"class":78,"line":35502},[76,51213,1701],{"class":119},[76,51215,123],{"class":90},[76,51217,35343],{"class":126},[76,51219,298],{"class":119},[76,51221,35348],{"class":82},[76,51223,304],{"class":119},[76,51225,2805],{"class":126},[76,51227,298],{"class":119},[76,51229,35348],{"class":82},[76,51231,304],{"class":119},[76,51233,35361],{"class":126},[76,51235,35364],{"class":90},[76,51237,35367],{"class":82},[76,51239,3164],{"class":119},[76,51241,35372],{"class":90},[76,51243,2592],{"class":82},[76,51245,3164],{"class":119},[76,51247,656],{"class":90},[76,51249,51250],{"class":78,"line":35508},[76,51251,38771],{"class":540},[76,51253,51254],{"class":78,"line":35516},[76,51255,38776],{"class":540},[76,51257,51258,51260,51262],{"class":78,"line":35521},[76,51259,38781],{"class":90},[76,51261,35405],{"class":126},[76,51263,130],{"class":90},[76,51265,51266],{"class":78,"line":35527},[76,51267,35425],{"class":540},[76,51269,51270,51272,51274,51276,51278,51280],{"class":78,"line":35538},[76,51271,35431],{"class":90},[76,51273,370],{"class":82},[76,51275,35436],{"class":90},[76,51277,35439],{"class":7296},[76,51279,370],{"class":82},[76,51281,3666],{"class":90},[76,51283,51284,51286,51288,51290],{"class":78,"line":35544},[76,51285,35449],{"class":126},[76,51287,3117],{"class":90},[76,51289,35454],{"class":119},[76,51291,35457],{"class":90},[76,51293,51294,51296],{"class":78,"line":35564},[76,51295,35463],{"class":126},[76,51297,35466],{"class":90},[76,51299,51300,51302],{"class":78,"line":35570},[76,51301,35472],{"class":126},[76,51303,35475],{"class":90},[76,51305,51306,51308],{"class":78,"line":35576},[76,51307,35481],{"class":126},[76,51309,35484],{"class":90},[76,51311,51312,51314],{"class":78,"line":35582},[76,51313,35490],{"class":126},[76,51315,35493],{"class":90},[76,51317,51318],{"class":78,"line":35599},[76,51319,35499],{"class":90},[76,51321,51322],{"class":78,"line":35605},[76,51323,35505],{"class":540},[76,51325,51326,51328],{"class":78,"line":35611},[76,51327,441],{"class":82},[76,51329,35513],{"class":90},[76,51331,51332],{"class":78,"line":35617},[76,51333,149],{"emptyLinePlaceholder":148},[76,51335,51336],{"class":78,"line":35623},[76,51337,35524],{"class":540},[76,51339,51340,51342,51344],{"class":78,"line":35629},[76,51341,83],{"class":82},[76,51343,35532],{"class":86},[76,51345,35535],{"class":90},[76,51347,51348],{"class":78,"line":35656},[76,51349,35541],{"class":540},[76,51351,51352,51354,51356,51358,51360,51362,51364,51366],{"class":78,"line":35680},[76,51353,35547],{"class":90},[76,51355,33735],{"class":7296},[76,51357,370],{"class":82},[76,51359,123],{"class":90},[76,51361,2760],{"class":119},[76,51363,2642],{"class":90},[76,51365,2557],{"class":119},[76,51367,656],{"class":90},[76,51369,51370],{"class":78,"line":35686},[76,51371,35567],{"class":540},[76,51373,51374],{"class":78,"line":35692},[76,51375,35573],{"class":540},[76,51377,51378],{"class":78,"line":35698},[76,51379,35579],{"class":540},[76,51381,51382,51384,51386,51388,51390,51392,51394],{"class":78,"line":35709},[76,51383,33769],{"class":90},[76,51385,669],{"class":119},[76,51387,2642],{"class":90},[76,51389,2345],{"class":119},[76,51391,2642],{"class":90},[76,51393,669],{"class":119},[76,51395,130],{"class":90},[76,51397,51398],{"class":78,"line":35720},[76,51399,35602],{"class":540},[76,51401,51402],{"class":78,"line":35726},[76,51403,35608],{"class":540},[76,51405,51406],{"class":78,"line":35743},[76,51407,35614],{"class":540},[76,51409,51410],{"class":78,"line":35766},[76,51411,35620],{"class":540},[76,51413,51414],{"class":78,"line":35789},[76,51415,35626],{"class":540},[76,51417,51418,51420,51422,51424,51426,51428,51430,51432,51434],{"class":78,"line":35795},[76,51419,35632],{"class":90},[76,51421,35635],{"class":126},[76,51423,35638],{"class":90},[76,51425,35641],{"class":126},[76,51427,2642],{"class":90},[76,51429,35646],{"class":7296},[76,51431,370],{"class":82},[76,51433,35651],{"class":126},[76,51435,130],{"class":90},[76,51437,51438,51440,51442,51444,51446,51448,51450,51452,51454],{"class":78,"line":35800},[76,51439,35632],{"class":90},[76,51441,35635],{"class":126},[76,51443,35663],{"class":90},[76,51445,35666],{"class":126},[76,51447,2642],{"class":90},[76,51449,35646],{"class":7296},[76,51451,370],{"class":82},[76,51453,35675],{"class":126},[76,51455,130],{"class":90},[76,51457,51458],{"class":78,"line":35809},[76,51459,35683],{"class":540},[76,51461,51462],{"class":78,"line":35819},[76,51463,35689],{"class":90},[76,51465,51466],{"class":78,"line":35825},[76,51467,35695],{"class":540},[76,51469,51470,51472,51474],{"class":78,"line":35830},[76,51471,35701],{"class":90},[76,51473,35704],{"class":126},[76,51475,130],{"class":90},[76,51477,51478,51480,51482],{"class":78,"line":35836},[76,51479,35712],{"class":90},[76,51481,35715],{"class":126},[76,51483,130],{"class":90},[76,51485,51486],{"class":78,"line":35849},[76,51487,35723],{"class":540},[76,51489,51490,51492,51494,51496,51498,51500,51502],{"class":78,"line":35855},[76,51491,33769],{"class":90},[76,51493,669],{"class":119},[76,51495,2642],{"class":90},[76,51497,2345],{"class":119},[76,51499,2642],{"class":90},[76,51501,2345],{"class":119},[76,51503,130],{"class":90},[76,51505,51506,51508,51510,51512,51514,51516,51518,51520,51522],{"class":78,"line":35866},[76,51507,35632],{"class":90},[76,51509,35635],{"class":126},[76,51511,35750],{"class":90},[76,51513,35641],{"class":126},[76,51515,2642],{"class":90},[76,51517,35646],{"class":7296},[76,51519,370],{"class":82},[76,51521,35761],{"class":126},[76,51523,130],{"class":90},[76,51525,51526,51528,51530,51532,51534,51536,51538,51540,51542],{"class":78,"line":35877},[76,51527,35632],{"class":90},[76,51529,35635],{"class":126},[76,51531,35773],{"class":90},[76,51533,35666],{"class":126},[76,51535,2642],{"class":90},[76,51537,35646],{"class":7296},[76,51539,370],{"class":82},[76,51541,35784],{"class":126},[76,51543,130],{"class":90},[76,51545,51546],{"class":78,"line":35896},[76,51547,35792],{"class":540},[76,51549,51551],{"class":78,"line":51550},219,[76,51552,35689],{"class":90},[76,51554,51556,51558,51560],{"class":78,"line":51555},220,[76,51557,35701],{"class":90},[76,51559,35635],{"class":126},[76,51561,130],{"class":90},[76,51563,51565,51567,51569],{"class":78,"line":51564},221,[76,51566,35712],{"class":90},[76,51568,35814],{"class":126},[76,51570,130],{"class":90},[76,51572,51574],{"class":78,"line":51573},222,[76,51575,35822],{"class":90},[76,51577,51579],{"class":78,"line":51578},223,[76,51580,149],{"emptyLinePlaceholder":148},[76,51582,51584],{"class":78,"line":51583},224,[76,51585,35833],{"class":540},[76,51587,51589,51591,51593,51595,51597],{"class":78,"line":51588},225,[76,51590,723],{"class":82},[76,51592,33264],{"class":119},[76,51594,1250],{"class":82},[76,51596,33269],{"class":126},[76,51598,590],{"class":90},[76,51600,51602],{"class":78,"line":51601},226,[76,51603,35852],{"class":540},[76,51605,51607,51609,51611],{"class":78,"line":51606},227,[76,51608,46581],{"class":90},[76,51610,370],{"class":82},[76,51612,46586],{"class":90},[76,51614,51616,51618,51620],{"class":78,"line":51615},228,[76,51617,35869],{"class":90},[76,51619,370],{"class":82},[76,51621,35874],{"class":90},[76,51623,51625,51627,51629,51631,51633,51635,51637],{"class":78,"line":51624},229,[76,51626,35431],{"class":90},[76,51628,370],{"class":82},[76,51630,46603],{"class":90},[76,51632,35887],{"class":7296},[76,51634,370],{"class":82},[76,51636,3164],{"class":119},[76,51638,130],{"class":90},[76,51640,51642],{"class":78,"line":51641},230,[76,51643,35899],{"class":90},[24047,51645,51647],{"id":51646},"_242测试代码","2.4.2.测试代码",[19,51649,51650],{},"使用测试集进行测试与推理",[66,51652,51654],{"className":68,"code":51653,"language":70,"meta":71,"style":71},"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",[73,51655,51656,51662,51672,51682,51693,51703,51707,51711,51719,51724,51728,51745,51749,51753,51757,51761,51765,51797,51801,51809,51813,51825,51829,51833,51837,51841,51845,51849,51853,51857,51875,51889,51893,51903,51913,51923,51929,51933,51937,51945,51949,51965,51973,51977,51981,51989,51997,52001,52005,52009,52013,52019,52023,52033,52041,52049,52053,52057,52061,52069,52073,52089,52093,52097,52101,52113,52117,52129,52133,52137,52149,52153,52163,52167,52171,52183,52187,52195,52199,52203,52211,52215,52223,52227,52231,52235,52239,52243,52259,52267,52271,52275,52293,52299,52303,52313,52321,52329,52333,52337,52341,52345,52353,52357,52373,52377,52385,52393],{"__ignoreMap":71},[76,51657,51658,51660],{"class":78,"line":79},[76,51659,32438],{"class":82},[76,51661,32441],{"class":90},[76,51663,51664,51666,51668,51670],{"class":78,"line":94},[76,51665,32438],{"class":82},[76,51667,33458],{"class":90},[76,51669,33426],{"class":82},[76,51671,33463],{"class":90},[76,51673,51674,51676,51678,51680],{"class":78,"line":133},[76,51675,32781],{"class":82},[76,51677,33441],{"class":90},[76,51679,32438],{"class":82},[76,51681,33446],{"class":90},[76,51683,51684,51686,51688,51690],{"class":78,"line":145},[76,51685,32781],{"class":82},[76,51687,33411],{"class":90},[76,51689,32438],{"class":82},[76,51691,51692],{"class":90}," ImageFolder\n",[76,51694,51695,51697,51699,51701],{"class":78,"line":152},[76,51696,32781],{"class":82},[76,51698,33956],{"class":90},[76,51700,32438],{"class":82},[76,51702,46675],{"class":90},[76,51704,51705],{"class":78,"line":157},[76,51706,149],{"emptyLinePlaceholder":148},[76,51708,51709],{"class":78,"line":246},[76,51710,35989],{"class":540},[76,51712,51713,51715,51717],{"class":78,"line":251},[76,51714,83],{"class":82},[76,51716,35996],{"class":86},[76,51718,91],{"class":90},[76,51720,51721],{"class":78,"line":257},[76,51722,51723],{"class":540},"   # 导入自己的数据集，并进行数据处理\n",[76,51725,51726],{"class":78,"line":641},[76,51727,49993],{"class":540},[76,51729,51730,51732,51734,51736,51738,51740,51743],{"class":78,"line":646},[76,51731,49998],{"class":119},[76,51733,370],{"class":82},[76,51735,2929],{"class":82},[76,51737,307],{"class":126},[76,51739,2819],{"class":119},[76,51741,51742],{"class":50009},"\u002Fdata\u002Ftest",[76,51744,27183],{"class":126},[76,51746,51747],{"class":78,"line":659},[76,51748,149],{"emptyLinePlaceholder":148},[76,51750,51751],{"class":78,"line":1608},[76,51752,50021],{"class":540},[76,51754,51755],{"class":78,"line":1632},[76,51756,50026],{"class":540},[76,51758,51759],{"class":78,"line":1637},[76,51760,50031],{"class":540},[76,51762,51763],{"class":78,"line":1642},[76,51764,50036],{"class":540},[76,51766,51767,51769,51771,51773,51775,51777,51779,51781,51783,51785,51787,51789,51791,51793,51795],{"class":78,"line":1652},[76,51768,50041],{"class":90},[76,51770,370],{"class":82},[76,51772,50046],{"class":90},[76,51774,50049],{"class":119},[76,51776,2642],{"class":90},[76,51778,50054],{"class":119},[76,51780,2642],{"class":90},[76,51782,50059],{"class":119},[76,51784,50062],{"class":90},[76,51786,50065],{"class":119},[76,51788,2642],{"class":90},[76,51790,50070],{"class":119},[76,51792,2642],{"class":90},[76,51794,50075],{"class":119},[76,51796,6739],{"class":90},[76,51798,51799],{"class":78,"line":1660},[76,51800,50082],{"class":540},[76,51802,51803,51805,51807],{"class":78,"line":1683},[76,51804,50087],{"class":90},[76,51806,370],{"class":82},[76,51808,50092],{"class":90},[76,51810,51811],{"class":78,"line":1698},[76,51812,50097],{"class":540},[76,51814,51815,51817,51819,51821,51823],{"class":78,"line":1711},[76,51816,50102],{"class":90},[76,51818,33544],{"class":119},[76,51820,2642],{"class":90},[76,51822,33544],{"class":119},[76,51824,44657],{"class":90},[76,51826,51827],{"class":78,"line":1717},[76,51828,50115],{"class":540},[76,51830,51831],{"class":78,"line":1728},[76,51832,50120],{"class":90},[76,51834,51835],{"class":78,"line":1740},[76,51836,50125],{"class":90},[76,51838,51839],{"class":78,"line":1746},[76,51840,50130],{"class":540},[76,51842,51843],{"class":78,"line":1751},[76,51844,50135],{"class":540},[76,51846,51847],{"class":78,"line":1756},[76,51848,149],{"emptyLinePlaceholder":148},[76,51850,51851],{"class":78,"line":1766},[76,51852,50144],{"class":540},[76,51854,51855],{"class":78,"line":1773},[76,51856,50149],{"class":540},[76,51858,51859,51861,51863,51865,51867,51869,51871,51873],{"class":78,"line":1793},[76,51860,36003],{"class":90},[76,51862,370],{"class":82},[76,51864,50158],{"class":90},[76,51866,50161],{"class":119},[76,51868,2642],{"class":90},[76,51870,50166],{"class":7296},[76,51872,370],{"class":82},[76,51874,50171],{"class":90},[76,51876,51877,51879,51881,51883,51885,51887],{"class":78,"line":1806},[76,51878,36060],{"class":90},[76,51880,370],{"class":82},[76,51882,33577],{"class":90},[76,51884,33580],{"class":7296},[76,51886,370],{"class":82},[76,51888,36071],{"class":90},[76,51890,51891],{"class":78,"line":1817},[76,51892,36076],{"class":540},[76,51894,51895,51897,51899,51901],{"class":78,"line":1822},[76,51896,36081],{"class":7296},[76,51898,370],{"class":82},[76,51900,669],{"class":119},[76,51902,33509],{"class":90},[76,51904,51905,51907,51909,51911],{"class":78,"line":1835},[76,51906,36092],{"class":7296},[76,51908,370],{"class":82},[76,51910,33519],{"class":119},[76,51912,33509],{"class":90},[76,51914,51915,51917,51919,51921],{"class":78,"line":1847},[76,51916,36103],{"class":7296},[76,51918,370],{"class":82},[76,51920,1294],{"class":119},[76,51922,130],{"class":90},[76,51924,51925,51927],{"class":78,"line":1852},[76,51926,441],{"class":82},[76,51928,36116],{"class":90},[76,51930,51931],{"class":78,"line":1862},[76,51932,149],{"emptyLinePlaceholder":148},[76,51934,51935],{"class":78,"line":1874},[76,51936,36125],{"class":540},[76,51938,51939,51941,51943],{"class":78,"line":1879},[76,51940,83],{"class":82},[76,51942,36132],{"class":86},[76,51944,36135],{"class":90},[76,51946,51947],{"class":78,"line":1884},[76,51948,36140],{"class":540},[76,51950,51951,51953,51955,51957,51959,51961,51963],{"class":78,"line":1889},[76,51952,33281],{"class":90},[76,51954,370],{"class":82},[76,51956,33288],{"class":126},[76,51958,3811],{"class":82},[76,51960,33293],{"class":90},[76,51962,1328],{"class":82},[76,51964,36157],{"class":126},[76,51966,51967,51969,51971],{"class":78,"line":1900},[76,51968,33333],{"class":90},[76,51970,370],{"class":82},[76,51972,34329],{"class":90},[76,51974,51975],{"class":78,"line":1906},[76,51976,149],{"emptyLinePlaceholder":148},[76,51978,51979],{"class":78,"line":1924},[76,51980,36174],{"class":540},[76,51982,51983,51985,51987],{"class":78,"line":1929},[76,51984,36179],{"class":90},[76,51986,370],{"class":82},[76,51988,34382],{"class":119},[76,51990,51991,51993,51995],{"class":78,"line":1944},[76,51992,36188],{"class":90},[76,51994,370],{"class":82},[76,51996,5172],{"class":119},[76,51998,51999],{"class":78,"line":1950},[76,52000,149],{"emptyLinePlaceholder":148},[76,52002,52003],{"class":78,"line":1965},[76,52004,36201],{"class":540},[76,52006,52007],{"class":78,"line":1971},[76,52008,36206],{"class":540},[76,52010,52011],{"class":78,"line":1985},[76,52012,36211],{"class":540},[76,52014,52015,52017],{"class":78,"line":1991},[76,52016,36216],{"class":82},[76,52018,34922],{"class":90},[76,52020,52021],{"class":78,"line":2005},[76,52022,36223],{"class":540},[76,52024,52025,52027,52029,52031],{"class":78,"line":2017},[76,52026,5488],{"class":82},[76,52028,36230],{"class":90},[76,52030,1475],{"class":82},[76,52032,36235],{"class":90},[76,52034,52035,52037,52039],{"class":78,"line":2023},[76,52036,36240],{"class":90},[76,52038,370],{"class":82},[76,52040,36245],{"class":90},[76,52042,52043,52045,52047],{"class":78,"line":2031},[76,52044,36250],{"class":90},[76,52046,370],{"class":82},[76,52048,36255],{"class":90},[76,52050,52051],{"class":78,"line":11880},[76,52052,36260],{"class":540},[76,52054,52055],{"class":78,"line":11901},[76,52056,34913],{"class":90},[76,52058,52059],{"class":78,"line":11907},[76,52060,36269],{"class":540},[76,52062,52063,52065,52067],{"class":78,"line":11921},[76,52064,34698],{"class":90},[76,52066,370],{"class":82},[76,52068,36278],{"class":90},[76,52070,52071],{"class":78,"line":11927},[76,52072,36283],{"class":540},[76,52074,52075,52077,52079,52081,52083,52085,52087],{"class":78,"line":11954},[76,52076,34715],{"class":90},[76,52078,370],{"class":82},[76,52080,34720],{"class":90},[76,52082,34723],{"class":7296},[76,52084,370],{"class":82},[76,52086,669],{"class":119},[76,52088,130],{"class":90},[76,52090,52091],{"class":78,"line":11963},[76,52092,36304],{"class":540},[76,52094,52095],{"class":78,"line":11969},[76,52096,36309],{"class":540},[76,52098,52099],{"class":78,"line":11977},[76,52100,36314],{"class":540},[76,52102,52103,52105,52107,52109,52111],{"class":78,"line":11982},[76,52104,36319],{"class":90},[76,52106,1060],{"class":82},[76,52108,34825],{"class":90},[76,52110,1250],{"class":82},[76,52112,36328],{"class":90},[76,52114,52115],{"class":78,"line":18654},[76,52116,36333],{"class":540},[76,52118,52119,52121,52123,52125,52127],{"class":78,"line":18660},[76,52120,36338],{"class":90},[76,52122,1060],{"class":82},[76,52124,36343],{"class":90},[76,52126,1294],{"class":119},[76,52128,130],{"class":90},[76,52130,52131],{"class":78,"line":18683},[76,52132,149],{"emptyLinePlaceholder":148},[76,52134,52135],{"class":78,"line":18689},[76,52136,36356],{"class":540},[76,52138,52139,52141,52143,52145,52147],{"class":78,"line":18712},[76,52140,36361],{"class":90},[76,52142,370],{"class":82},[76,52144,36366],{"class":90},[76,52146,795],{"class":82},[76,52148,36371],{"class":90},[76,52150,52151],{"class":78,"line":18726},[76,52152,36376],{"class":540},[76,52154,52155,52157,52159,52161],{"class":78,"line":18746},[76,52156,1701],{"class":119},[76,52158,123],{"class":90},[76,52160,36385],{"class":126},[76,52162,36388],{"class":90},[76,52164,52165],{"class":78,"line":18752},[76,52166,149],{"emptyLinePlaceholder":148},[76,52168,52169],{"class":78,"line":18763},[76,52170,36397],{"class":540},[76,52172,52173,52175,52177,52179,52181],{"class":78,"line":18786},[76,52174,723],{"class":82},[76,52176,33264],{"class":119},[76,52178,1250],{"class":82},[76,52180,33269],{"class":126},[76,52182,590],{"class":90},[76,52184,52185],{"class":78,"line":18808},[76,52186,36414],{"class":540},[76,52188,52189,52191,52193],{"class":78,"line":18813},[76,52190,33333],{"class":90},[76,52192,370],{"class":82},[76,52194,46586],{"class":90},[76,52196,52197],{"class":78,"line":18819},[76,52198,36427],{"class":540},[76,52200,52201],{"class":78,"line":18833},[76,52202,36432],{"class":540},[76,52204,52205,52207,52209],{"class":78,"line":18846},[76,52206,36437],{"class":90},[76,52208,36440],{"class":126},[76,52210,656],{"class":90},[76,52212,52213],{"class":78,"line":18851},[76,52214,36447],{"class":540},[76,52216,52217,52219,52221],{"class":78,"line":18865},[76,52218,36060],{"class":90},[76,52220,370],{"class":82},[76,52222,36456],{"class":90},[76,52224,52225],{"class":78,"line":18870},[76,52226,36461],{"class":540},[76,52228,52229],{"class":78,"line":18876},[76,52230,36466],{"class":90},[76,52232,52233],{"class":78,"line":18881},[76,52234,149],{"emptyLinePlaceholder":148},[76,52236,52237],{"class":78,"line":18895},[76,52238,36475],{"class":540},[76,52240,52241],{"class":78,"line":18900},[76,52242,36480],{"class":540},[76,52244,52245,52247,52249,52251,52253,52255,52257],{"class":78,"line":18905},[76,52246,33281],{"class":90},[76,52248,370],{"class":82},[76,52250,33288],{"class":126},[76,52252,3811],{"class":82},[76,52254,33293],{"class":90},[76,52256,1328],{"class":82},[76,52258,36157],{"class":126},[76,52260,52261,52263,52265],{"class":78,"line":18919},[76,52262,33333],{"class":90},[76,52264,370],{"class":82},[76,52266,34329],{"class":90},[76,52268,52269],{"class":78,"line":18931},[76,52270,36509],{"class":540},[76,52272,52273],{"class":78,"line":18936},[76,52274,36514],{"class":540},[76,52276,52277,52279,52281,52283,52286,52288,52291],{"class":78,"line":18949},[76,52278,36519],{"class":90},[76,52280,370],{"class":82},[76,52282,3148],{"class":90},[76,52284,52285],{"class":126},"'猫'",[76,52287,2642],{"class":90},[76,52289,52290],{"class":126},"'狗'",[76,52292,35284],{"class":90},[76,52294,52295,52297],{"class":78,"line":18954},[76,52296,36216],{"class":82},[76,52298,34922],{"class":90},[76,52300,52301],{"class":78,"line":18959},[76,52302,36584],{"class":540},[76,52304,52305,52307,52309,52311],{"class":78,"line":18964},[76,52306,5488],{"class":82},[76,52308,36591],{"class":90},[76,52310,1475],{"class":82},[76,52312,36235],{"class":90},[76,52314,52315,52317,52319],{"class":78,"line":18977},[76,52316,34648],{"class":90},[76,52318,370],{"class":82},[76,52320,34653],{"class":90},[76,52322,52323,52325,52327],{"class":78,"line":18982},[76,52324,34663],{"class":90},[76,52326,370],{"class":82},[76,52328,34668],{"class":90},[76,52330,52331],{"class":78,"line":34671},[76,52332,149],{"emptyLinePlaceholder":148},[76,52334,52335],{"class":78,"line":34677},[76,52336,36620],{"class":540},[76,52338,52339],{"class":78,"line":34683},[76,52340,34913],{"class":90},[76,52342,52343],{"class":78,"line":34689},[76,52344,36629],{"class":540},[76,52346,52347,52349,52351],{"class":78,"line":34695},[76,52348,34698],{"class":90},[76,52350,370],{"class":82},[76,52352,34703],{"class":90},[76,52354,52355],{"class":78,"line":34706},[76,52356,36642],{"class":540},[76,52358,52359,52361,52363,52365,52367,52369,52371],{"class":78,"line":34712},[76,52360,34715],{"class":90},[76,52362,370],{"class":82},[76,52364,34720],{"class":90},[76,52366,34723],{"class":7296},[76,52368,370],{"class":82},[76,52370,669],{"class":119},[76,52372,130],{"class":90},[76,52374,52375],{"class":78,"line":34732},[76,52376,36663],{"class":540},[76,52378,52379,52381,52383],{"class":78,"line":34738},[76,52380,36668],{"class":90},[76,52382,370],{"class":82},[76,52384,36673],{"class":90},[76,52386,52387,52389,52391],{"class":78,"line":34749},[76,52388,36678],{"class":90},[76,52390,370],{"class":82},[76,52392,36683],{"class":90},[76,52394,52395,52397,52399,52401,52403,52405,52407,52409],{"class":78,"line":34755},[76,52396,36688],{"class":119},[76,52398,123],{"class":90},[76,52400,36693],{"class":126},[76,52402,36696],{"class":90},[76,52404,36699],{"class":126},[76,52406,2642],{"class":90},[76,52408,36704],{"class":126},[76,52410,36707],{"class":90},[2178,52412,52413],{},"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":71,"searchDepth":94,"depth":94,"links":52415},[52416,52417,52418,52419],{"id":32635,"depth":133,"text":32636},{"id":39877,"depth":133,"text":39878},{"id":43307,"depth":133,"text":43308},{"id":47316,"depth":133,"text":47317},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32627,"description":2201},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52426,"title":52427,"body":52428,"description":2201,"extension":2202,"meta":52435,"navigation":148,"path":52436,"seo":52437,"stem":52438,"__hash__":52439},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52429,"toc":52433},[52430],[10,52431,52427],{"id":52432},"_3yolo模型学习",{"title":71,"searchDepth":94,"depth":94,"links":52434},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52427,"description":2201},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52441,"title":52442,"body":52443,"description":52450,"extension":2202,"meta":52451,"navigation":148,"path":52453,"seo":52454,"stem":52455,"__hash__":52456},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52444,"toc":52448},[52445],[19,52446,52447],{},"yolo模型还未补充",{"title":71,"searchDepth":94,"depth":94,"links":52449},[],"深度学习学习",{"category":52452},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52442,"description":52450},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52458,"title":52459,"body":52460,"description":2201,"extension":2202,"meta":52485,"navigation":148,"path":52486,"seo":52487,"stem":52488,"__hash__":52489},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52461,"toc":52483},[52462,52465,52468,52473,52480],[10,52463,52459],{"id":52464},"_1工具",[19,52466,52467],{},"提示错误插件：有问题会提前报错",[19,52469,52470],{},[3583,52471],{"alt":71,"src":52472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52474,52475],{},[2503,52476,52479],{"href":52477,"rel":52478},"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",[25914],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52481,52482],{},"alt键加上下箭头可以实现语句的移动",{"title":71,"searchDepth":94,"depth":94,"links":52484},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52459,"description":2201},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52491,"title":52492,"body":52493,"description":2201,"extension":2202,"meta":55357,"navigation":148,"path":55358,"seo":55359,"stem":55360,"__hash__":55361},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52494,"toc":55308},[52495,52498,52502,52506,52511,52514,52519,52523,52530,52535,52542,52547,52554,52559,52563,52568,52571,52575,52580,52584,52589,52592,52595,52598,52601,52604,52607,52610,52613,52618,52623,52628,52632,52635,52638,52642,52647,52650,52658,52663,52680,52688,52693,52698,52703,52708,52713,52716,52721,52726,52730,52739,52744,52749,52753,52758,52761,52765,52770,52778,52783,52788,52791,52796,52801,52806,52809,52812,52815,52820,52825,52828,52833,52836,52841,52844,52847,52850,52855,52858,52861,52876,52881,52886,52891,52894,52897,52900,52914,52917,52922,52927,52930,52933,52936,52939,52942,52945,52948,52952,52956,52961,52965,52968,52973,52978,52981,52986,52989,52993,52998,53001,53004,53007,53010,53013,53016,53019,53022,53025,53029,53034,53039,53044,53047,53050,53054,53059,53062,53066,53069,53072,53077,53080,53083,53087,53091,53094,53099,53104,53107,53136,53141,53146,53151,53156,53160,53165,53169,53174,53177,53181,53185,53190,53194,53199,53204,53208,53213,53216,53218,53221,53226,53230,53235,53239,53243,53248,53253,53258,53263,53267,53272,53277,53282,53285,53288,53293,53296,53301,53306,53311,53316,53320,54127,54131,54474,54479,54482,54485,54488,54491,54494,54497,54500,54503,54505,54508,54510,54513,54517,54522,54525,54528,54531,54535,54540,54545,54565,54568,54572,54577,54582,54599,54603,54632,54636,54658,54660,54699,54707,54713,54717,54720,54723,54728,54733,54736,54739,54742,54747,54752,54755,54758,54761,54764,54767,54770,54773,54776,54779,54782,54785,54787,54790,54793,54796,54799,54802,54805,54808,54811,54815,54820,54823,54828,54831,54834,54837,54840,54843,54846,54849,54851,54854,54857,54860,54863,54866,54869,54873,54876,54885,54888,54893,54896,54901,54904,54907,54910,54913,54916,54919,54922,54926,54930,54933,54936,54941,54946,54951,54955,54960,54965,54968,54971,54974,54977,54980,54985,54988,54993,54995,55000,55003,55007,55012,55015,55018,55023,55027,55030,55035,55038,55041,55070,55075,55078,55081,55084,55087,55090,55094,55097,55183,55187,55190,55195,55200,55207,55210,55213,55216,55219,55222,55227,55232,55235,55238,55241,55244,55247,55250,55253,55256,55259,55261,55264,55268,55273,55278,55283,55286,55291,55296,55299,55302,55305],[10,52496,52492],{"id":52497},"_2基础语法",[14,52499,52501],{"id":52500},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[889,52503,52505],{"id":52504},"_211-js组成","2.1.1 js组成",[26,52507,52508],{},[29,52509,52510],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52512,52513],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52515,52516],{"start":94},[29,52517,52518],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[889,52520,52522],{"id":52521},"_212-js书写位置","2.1.2 js书写位置",[26,52524,52525],{},[29,52526,52527],{},[2416,52528,52529],{},"内部 JavaScript",[19,52531,52532],{},[3583,52533],{"alt":71,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52536,52537],{"start":94},[29,52538,52539],{},[2416,52540,52541],{},"外部 JavaScript",[19,52543,52544],{},[3583,52545],{"alt":71,"src":52546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52548,52549],{"start":133},[29,52550,52551],{},[2416,52552,52553],{},"内联 JavaScript",[19,52555,52556],{},[3583,52557],{"alt":71,"src":52558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[889,52560,52562],{"id":52561},"_213-javascript注释","2.1.3 JavaScript注释",[19,52564,52565],{},[3583,52566],{"alt":71,"src":52567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52569,52570],{},"alt+shift+a一定要记住！",[889,52572,52574],{"id":52573},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52576,52577],{},[3583,52578],{"alt":71,"src":52579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[889,52581,52583],{"id":52582},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52585,52586],{},[29,52587,52588],{},"输出语法：",[19,52590,52591],{},"①document.write('要出的内容')",[19,52593,52594],{},"向body内输出内容；",[19,52596,52597],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52599,52600],{},"②alert('要出的内容')",[19,52602,52603],{},"页面弹出警告对话框",[19,52605,52606],{},"③console.log('控制台打印')",[19,52608,52609],{},"控制台输出语法，程序员调试使用",[19,52611,52612],{},"输入log就行，自动生成：",[19,52614,52615],{},[3583,52616],{"alt":71,"src":52617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52619,52620],{"start":94},[29,52621,52622],{},"输入语法：",[19,52624,52625],{},[3583,52626],{"alt":71,"src":52627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[889,52629,52631],{"id":52630},"_2116-字面量","21.1.6 字面量",[19,52633,52634],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52636,52637],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52639,52641],{"id":52640},"_22-变量","2.2 变量",[26,52643,52644],{},[29,52645,52646],{},"变量声明",[19,52648,52649],{},"let 变量名",[3261,52651,52652,52655],{},[29,52653,52654],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52656,52657],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52659,52660],{"start":94},[29,52661,52662],{},"变量赋值",[66,52664,52668],{"className":52665,"code":52666,"language":52667,"meta":71,"style":71},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[73,52669,52670,52675],{"__ignoreMap":71},[76,52671,52672],{"class":78,"line":79},[76,52673,52674],{"class":90},"let age\n",[76,52676,52677],{"class":78,"line":94},[76,52678,52679],{"class":90},"age=18\n",[26,52681,52682,52685],{"start":133},[29,52683,52684],{},"连这些（变量的初始化）：let age=18",[29,52686,52687],{},"更新变量",[19,52689,52690],{},[3583,52691],{"alt":71,"src":52692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52694,52695],{"start":152},[29,52696,52697],{},"声明多个变量",[19,52699,52700],{},[3583,52701],{"alt":71,"src":52702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52704,52705],{"start":157},[29,52706,52707],{},"变量命名规则与规范",[19,52709,52710],{},[3583,52711],{"alt":71,"src":52712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52714,52715],{},"遵守小驼峰！",[26,52717,52718],{"start":246},[29,52719,52720],{},"变量拓展-let和var的区别",[19,52722,52723],{},[3583,52724],{"alt":71,"src":52725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52727,52729],{"id":52728},"_23-数组","2.3 数组",[66,52731,52733],{"className":52665,"code":52732,"language":52667,"meta":71,"style":71},"let arr = []\n",[73,52734,52735],{"__ignoreMap":71},[76,52736,52737],{"class":78,"line":79},[76,52738,52732],{"class":90},[19,52740,52741],{},[3583,52742],{"alt":71,"src":52743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52745,52746],{},[3583,52747],{"alt":71,"src":52748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52750,52752],{"id":52751},"_24-常量","2.4 常量",[19,52754,52755],{},[3583,52756],{"alt":71,"src":52757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52759,52760],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52762,52764],{"id":52763},"_25-数据类型","2.5 数据类型",[19,52766,52767],{},[3583,52768],{"alt":71,"src":52769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52771,52772,52775],{},[29,52773,52774],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52776,52777],{},"算数运算符：",[19,52779,52780],{},[3583,52781],{"alt":71,"src":52782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52784,52785],{"start":133},[29,52786,52787],{},"数字类型（Number）",[19,52789,52790],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52792,52793],{},[3583,52794],{"alt":71,"src":52795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52797,52798],{"start":145},[29,52799,52800],{},"字符串类型（string）",[19,52802,52803],{},[3583,52804],{"alt":71,"src":52805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52807,52808],{},"反引号也是可以使用的",[19,52810,52811],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52813,52814],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52816,52817],{"start":152},[29,52818,52819],{},"模板字符串",[19,52821,52822],{},[3583,52823],{"alt":71,"src":52824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52826,52827],{},"类似于python的字符串格式化",[26,52829,52830],{"start":157},[29,52831,52832],{},"布尔类型",[19,52834,52835],{},"true 和 false",[26,52837,52838],{"start":246},[29,52839,52840],{},"未定义类型（underfined）",[19,52842,52843],{},"表示没有赋值",[19,52845,52846],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52848,52849],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52851,52852],{"start":251},[29,52853,52854],{},"null（空类型）",[19,52856,52857],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52859,52860],{},"赋值了，但是内容为空",[66,52862,52864],{"className":52665,"code":52863,"language":52667,"meta":71,"style":71},"typeof null\n输出的是'object'，是一个对象数据类型\n",[73,52865,52866,52871],{"__ignoreMap":71},[76,52867,52868],{"class":78,"line":79},[76,52869,52870],{"class":90},"typeof null\n",[76,52872,52873],{"class":78,"line":94},[76,52874,52875],{"class":90},"输出的是'object'，是一个对象数据类型\n",[26,52877,52878],{"start":257},[29,52879,52880],{},"控制台检测数据类型",[19,52882,52883],{},[3583,52884],{"alt":71,"src":52885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52887,52888],{"start":641},[29,52889,52890],{},"类型转换",[19,52892,52893],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52895,52896],{},"转换方式：隐式转换和显示转换",[19,52898,52899],{},"①隐式转换",[3261,52901,52902,52905,52908,52911],{},[29,52903,52904],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52906,52907],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52909,52910],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52912,52913],{},"任何数据和字符串相加结果都是字符串",[19,52915,52916],{},"②显示转换",[19,52918,52919],{},[3583,52920],{"alt":71,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52923,52924],{},[3583,52925],{"alt":71,"src":52926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52928,52929],{},"在输入的时候要用好隐式转换，简单写起来",[19,52931,52932],{},"let num = +prompt(’请输入数字：‘)",[19,52934,52935],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52937,52938],{},"console.log(parseInt('12.333px'))",[19,52940,52941],{},"输出为：12",[19,52943,52944],{},"console.log(parseInt('a'a'a12.333px'))",[19,52946,52947],{},"输出：NaN",[14,52949,52951],{"id":52950},"_26-运算符","2.6 运算符",[889,52953,52955],{"id":52954},"_261-赋值运算符","2.6.1 赋值运算符",[19,52957,52958],{},[3583,52959],{"alt":71,"src":52960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[889,52962,52964],{"id":52963},"_262-一元运算符","2.6.2 一元运算符",[19,52966,52967],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52969,52970],{},[3583,52971],{"alt":71,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52974,52975],{},[3583,52976],{"alt":71,"src":52977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52979,52980],{},"两者的区别：",[19,52982,52983],{},[3583,52984],{"alt":71,"src":52985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52987,52988],{},"前置先自加；后置后加，代码执行完之后再加",[889,52990,52992],{"id":52991},"_263-比较运算符","2.6.3 比较运算符",[19,52994,52995],{},[3583,52996],{"alt":71,"src":52997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52999,53000],{},"比较运算符也有隐式转换",[19,53002,53003],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53005,53006],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53008,53009],{},"要使用三等，开发的时候",[19,53011,53012],{},"NaN不等于任何人，包括它自己",[19,53014,53015],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53017,53018],{},"7\u002F10=0.7",[19,53020,53021],{},"最后：0.5+0.2=0.7",[19,53023,53024],{},"字符串比较，比较的是字符对应的ASCII码",[889,53026,53028],{"id":53027},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53030,53031],{},[3583,53032],{"alt":71,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53035,53036],{},[3583,53037],{"alt":71,"src":53038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53040,53041],{},[3583,53042],{"alt":71,"src":53043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53045,53046],{},"上述题目选D",[19,53048,53049],{},"与真2假1；或真1假2",[889,53051,53053],{"id":53052},"_265-运算符优先级","2.6.5 运算符优先级",[19,53055,53056],{},[3583,53057],{"alt":71,"src":53058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53060,53061],{},"先算逻辑与，后算逻辑或",[14,53063,53065],{"id":53064},"_27-语句","2.7 语句",[19,53067,53068],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53070,53071],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53073,53074],{},[3583,53075],{"alt":71,"src":53076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53078,53079],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53081,53082],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[889,53084,53086],{"id":53085},"_271-分支语句","2.7.1 分支语句",[24047,53088,53090],{"id":53089},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53092,53093],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,53095,53096],{},[29,53097,53098],{},"单分支语句",[19,53100,53101],{},[3583,53102],{"alt":71,"src":53103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53105,53106],{},"除了0，所有数字都为真",[66,53108,53110],{"className":52665,"code":53109,"language":52667,"meta":71,"style":71},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[73,53111,53112,53117,53122,53127,53131],{"__ignoreMap":71},[76,53113,53114],{"class":78,"line":79},[76,53115,53116],{"class":90},"if（0) {\n",[76,53118,53119],{"class":78,"line":94},[76,53120,53121],{"class":90},"    let a=1\n",[76,53123,53124],{"class":78,"line":133},[76,53125,53126],{"class":90},"    alert(typeof a)\n",[76,53128,53129],{"class":78,"line":145},[76,53130,3685],{"class":90},[76,53132,53133],{"class":78,"line":152},[76,53134,53135],{"class":90},"不输出，括号为假\n",[26,53137,53138],{"start":94},[29,53139,53140],{},"双分支语句",[19,53142,53143],{},[3583,53144],{"alt":71,"src":53145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,53147,53148],{"start":133},[29,53149,53150],{},"多分支语句",[19,53152,53153],{},[3583,53154],{"alt":71,"src":53155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24047,53157,53159],{"id":53158},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53161,53162],{},[3583,53163],{"alt":71,"src":53164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24047,53166,53168],{"id":53167},"_2713-switch语句","2.7.1.3 switch语句",[19,53170,53171],{},[3583,53172],{"alt":71,"src":53173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53175,53176],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[889,53178,53180],{"id":53179},"_272-循环语句","2.7.2 循环语句",[24047,53182,53184],{"id":53183},"_2721-断点演示","2.7.2.1 断点演示",[19,53186,53187],{},[3583,53188],{"alt":71,"src":53189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24047,53191,53193],{"id":53192},"_2722-while循环","2.7.2.2 while循环",[19,53195,53196],{},[3583,53197],{"alt":71,"src":53198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53200,53201],{},[3583,53202],{"alt":71,"src":53203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24047,53205,53207],{"id":53206},"_2723-for循环","2.7.2.3 for循环",[19,53209,53210],{},[3583,53211],{"alt":71,"src":53212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53214,53215],{},"for(;;) {",[19,53217,304],{},[19,53219,53220],{},"表示无限循环",[19,53222,53223],{},[3583,53224],{"alt":71,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24047,53227,53229],{"id":53228},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53231,53232],{},[3583,53233],{"alt":71,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53236,53238],{"id":53237},"_28-数组","2.8 数组",[889,53240,53242],{"id":53241},"_281-基础认识","2.8.1 基础认识",[19,53244,53245],{},[3583,53246],{"alt":71,"src":53247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53249,53250],{},[3583,53251],{"alt":71,"src":53252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53254,53255],{},[3583,53256],{"alt":71,"src":53257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53259,53260],{},[3583,53261],{"alt":71,"src":53262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[889,53264,53266],{"id":53265},"_282-操作数组","2.8.2 操作数组",[19,53268,53269],{},[3583,53270],{"alt":71,"src":53271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53273,53274],{},[29,53275,53276],{},"添加元素",[19,53278,53279],{},[3583,53280],{"alt":71,"src":53281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53283,53284],{},"console.log(arr.push('green'))",[19,53286,53287],{},"输出结果：为新数组的长度",[19,53289,53290],{},[3583,53291],{"alt":71,"src":53292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53294,53295],{},"push用的非常多，一定要记住",[26,53297,53298],{},[29,53299,53300],{},"删除元素",[19,53302,53303],{},[3583,53304],{"alt":71,"src":53305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53307,53308],{},[3583,53309],{"alt":71,"src":53310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53312,53313],{},[3583,53314],{"alt":71,"src":53315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[889,53317,53319],{"id":53318},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[66,53321,53323],{"className":52665,"code":53322,"language":52667,"meta":71,"style":71},"\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",[73,53324,53325,53340,53356,53360,53369,53387,53411,53433,53447,53455,53462,53474,53485,53489,53493,53500,53512,53527,53540,53559,53576,53591,53603,53615,53627,53631,53635,53646,53656,53668,53680,53692,53703,53707,53711,53723,53727,53741,53745,53749,53760,53774,53786,53800,53804,53813,53822,53826,53835,53839,53848,53853,53858,53871,53899,53904,53909,53934,53939,53943,53948,53953,53968,53972,53977,54007,54019,54035,54051,54065,54070,54077,54081,54086,54099,54107,54115,54119],{"__ignoreMap":71},[76,53326,53327,53330,53334,53337],{"class":78,"line":79},[76,53328,53329],{"class":90},"\u003C!",[76,53331,53333],{"class":53332},"s9eBZ","DOCTYPE",[76,53335,53336],{"class":86}," html",[76,53338,53339],{"class":90},">\n",[76,53341,53342,53344,53346,53349,53351,53354],{"class":78,"line":94},[76,53343,584],{"class":90},[76,53345,52667],{"class":53332},[76,53347,53348],{"class":86}," lang",[76,53350,370],{"class":90},[76,53352,53353],{"class":126},"\"en\"",[76,53355,53339],{"class":90},[76,53357,53358],{"class":78,"line":133},[76,53359,149],{"emptyLinePlaceholder":148},[76,53361,53362,53364,53367],{"class":78,"line":145},[76,53363,584],{"class":90},[76,53365,53366],{"class":53332},"head",[76,53368,53339],{"class":90},[76,53370,53371,53374,53377,53380,53382,53385],{"class":78,"line":152},[76,53372,53373],{"class":90},"    \u003C",[76,53375,53376],{"class":53332},"meta",[76,53378,53379],{"class":86}," charset",[76,53381,370],{"class":90},[76,53383,53384],{"class":126},"\"UTF-8\"",[76,53386,53339],{"class":90},[76,53388,53389,53391,53393,53396,53398,53401,53404,53406,53409],{"class":78,"line":157},[76,53390,53373],{"class":90},[76,53392,53376],{"class":53332},[76,53394,53395],{"class":86}," http-equiv",[76,53397,370],{"class":90},[76,53399,53400],{"class":126},"\"X-UA-Compatible\"",[76,53402,53403],{"class":86}," content",[76,53405,370],{"class":90},[76,53407,53408],{"class":126},"\"IE=edge\"",[76,53410,53339],{"class":90},[76,53412,53413,53415,53417,53419,53421,53424,53426,53428,53431],{"class":78,"line":246},[76,53414,53373],{"class":90},[76,53416,53376],{"class":53332},[76,53418,16972],{"class":86},[76,53420,370],{"class":90},[76,53422,53423],{"class":126},"\"viewport\"",[76,53425,53403],{"class":86},[76,53427,370],{"class":90},[76,53429,53430],{"class":126},"\"width=device-width, initial-scale=1.0\"",[76,53432,53339],{"class":90},[76,53434,53435,53437,53440,53443,53445],{"class":78,"line":251},[76,53436,53373],{"class":90},[76,53438,53439],{"class":53332},"title",[76,53441,53442],{"class":90},">Document\u003C\u002F",[76,53444,53439],{"class":53332},[76,53446,53339],{"class":90},[76,53448,53449,53451,53453],{"class":78,"line":257},[76,53450,53373],{"class":90},[76,53452,2178],{"class":53332},[76,53454,53339],{"class":90},[76,53456,53457,53460],{"class":78,"line":641},[76,53458,53459],{"class":53332},"        *",[76,53461,17623],{"class":90},[76,53463,53464,53467,53470,53472],{"class":78,"line":646},[76,53465,53466],{"class":119},"            margin",[76,53468,53469],{"class":90},": ",[76,53471,1294],{"class":119},[76,53473,3415],{"class":90},[76,53475,53476,53479,53481,53483],{"class":78,"line":659},[76,53477,53478],{"class":119},"            padding",[76,53480,53469],{"class":90},[76,53482,1294],{"class":119},[76,53484,3415],{"class":90},[76,53486,53487],{"class":78,"line":1608},[76,53488,4624],{"class":90},[76,53490,53491],{"class":78,"line":1632},[76,53492,149],{"emptyLinePlaceholder":148},[76,53494,53495,53498],{"class":78,"line":1637},[76,53496,53497],{"class":86},"        .box",[76,53499,17623],{"class":90},[76,53501,53502,53505,53507,53510],{"class":78,"line":1642},[76,53503,53504],{"class":119},"            display",[76,53506,53469],{"class":90},[76,53508,53509],{"class":119},"flex",[76,53511,3415],{"class":90},[76,53513,53514,53517,53519,53522,53525],{"class":78,"line":1652},[76,53515,53516],{"class":119},"            width",[76,53518,53469],{"class":90},[76,53520,53521],{"class":119},"700",[76,53523,53524],{"class":82},"px",[76,53526,3415],{"class":90},[76,53528,53529,53532,53534,53536,53538],{"class":78,"line":1660},[76,53530,53531],{"class":119},"            height",[76,53533,53469],{"class":90},[76,53535,6057],{"class":119},[76,53537,53524],{"class":82},[76,53539,3415],{"class":90},[76,53541,53542,53545,53547,53549,53551,53554,53557],{"class":78,"line":1683},[76,53543,53544],{"class":119},"            border-left",[76,53546,53469],{"class":90},[76,53548,669],{"class":119},[76,53550,53524],{"class":82},[76,53552,53553],{"class":119}," solid",[76,53555,53556],{"class":119}," pink",[76,53558,3415],{"class":90},[76,53560,53561,53564,53566,53568,53570,53572,53574],{"class":78,"line":1698},[76,53562,53563],{"class":119},"            border-bottom",[76,53565,53469],{"class":90},[76,53567,669],{"class":119},[76,53569,53524],{"class":82},[76,53571,53553],{"class":119},[76,53573,53556],{"class":119},[76,53575,3415],{"class":90},[76,53577,53578,53580,53582,53584,53586,53589],{"class":78,"line":1711},[76,53579,53466],{"class":119},[76,53581,53469],{"class":90},[76,53583,2915],{"class":119},[76,53585,53524],{"class":82},[76,53587,53588],{"class":119}," auto",[76,53590,3415],{"class":90},[76,53592,53593,53596,53598,53601],{"class":78,"line":1717},[76,53594,53595],{"class":119},"            justify-content",[76,53597,53469],{"class":90},[76,53599,53600],{"class":119},"space-around",[76,53602,3415],{"class":90},[76,53604,53605,53608,53610,53613],{"class":78,"line":1728},[76,53606,53607],{"class":119},"            align-items",[76,53609,53469],{"class":90},[76,53611,53612],{"class":119},"flex-end",[76,53614,3415],{"class":90},[76,53616,53617,53620,53622,53625],{"class":78,"line":1740},[76,53618,53619],{"class":119},"            text-align",[76,53621,53469],{"class":90},[76,53623,53624],{"class":119},"center",[76,53626,3415],{"class":90},[76,53628,53629],{"class":78,"line":1746},[76,53630,4624],{"class":90},[76,53632,53633],{"class":78,"line":1751},[76,53634,149],{"emptyLinePlaceholder":148},[76,53636,53637,53639,53641,53644],{"class":78,"line":1756},[76,53638,53497],{"class":86},[76,53640,1829],{"class":82},[76,53642,53643],{"class":53332},"div",[76,53645,17623],{"class":90},[76,53647,53648,53650,53652,53654],{"class":78,"line":1766},[76,53649,53504],{"class":119},[76,53651,53469],{"class":90},[76,53653,53509],{"class":119},[76,53655,3415],{"class":90},[76,53657,53658,53660,53662,53664,53666],{"class":78,"line":1773},[76,53659,53516],{"class":119},[76,53661,53469],{"class":90},[76,53663,2915],{"class":119},[76,53665,53524],{"class":82},[76,53667,3415],{"class":90},[76,53669,53670,53673,53675,53678],{"class":78,"line":1793},[76,53671,53672],{"class":119},"            background-color",[76,53674,53469],{"class":90},[76,53676,53677],{"class":119},"pink",[76,53679,3415],{"class":90},[76,53681,53682,53685,53687,53690],{"class":78,"line":1806},[76,53683,53684],{"class":119},"            flex-direction",[76,53686,53469],{"class":90},[76,53688,53689],{"class":119},"column",[76,53691,3415],{"class":90},[76,53693,53694,53696,53698,53701],{"class":78,"line":1817},[76,53695,53595],{"class":119},[76,53697,53469],{"class":90},[76,53699,53700],{"class":119},"space-between",[76,53702,3415],{"class":90},[76,53704,53705],{"class":78,"line":1822},[76,53706,4624],{"class":90},[76,53708,53709],{"class":78,"line":1835},[76,53710,149],{"emptyLinePlaceholder":148},[76,53712,53713,53715,53718,53721],{"class":78,"line":1847},[76,53714,53497],{"class":86},[76,53716,53717],{"class":53332}," div",[76,53719,53720],{"class":53332}," span",[76,53722,17623],{"class":90},[76,53724,53725],{"class":78,"line":1852},[76,53726,149],{"emptyLinePlaceholder":148},[76,53728,53729,53732,53734,53737,53739],{"class":78,"line":1862},[76,53730,53731],{"class":119},"            margin-top",[76,53733,53469],{"class":90},[76,53735,53736],{"class":119},"-20",[76,53738,53524],{"class":82},[76,53740,3415],{"class":90},[76,53742,53743],{"class":78,"line":1874},[76,53744,4624],{"class":90},[76,53746,53747],{"class":78,"line":1879},[76,53748,149],{"emptyLinePlaceholder":148},[76,53750,53751,53753,53755,53758],{"class":78,"line":1884},[76,53752,53497],{"class":86},[76,53754,53717],{"class":53332},[76,53756,53757],{"class":53332}," h4",[76,53759,17623],{"class":90},[76,53761,53762,53765,53767,53770,53772],{"class":78,"line":1889},[76,53763,53764],{"class":119},"            margin-bottom",[76,53766,53469],{"class":90},[76,53768,53769],{"class":119},"-35",[76,53771,53524],{"class":82},[76,53773,3415],{"class":90},[76,53775,53776,53778,53780,53782,53784],{"class":78,"line":1900},[76,53777,53516],{"class":119},[76,53779,53469],{"class":90},[76,53781,2620],{"class":119},[76,53783,53524],{"class":82},[76,53785,3415],{"class":90},[76,53787,53788,53791,53793,53796,53798],{"class":78,"line":1906},[76,53789,53790],{"class":119},"            margin-left",[76,53792,53469],{"class":90},[76,53794,53795],{"class":119},"-10",[76,53797,53524],{"class":82},[76,53799,3415],{"class":90},[76,53801,53802],{"class":78,"line":1924},[76,53803,4624],{"class":90},[76,53805,53806,53809,53811],{"class":78,"line":1929},[76,53807,53808],{"class":90},"    \u003C\u002F",[76,53810,2178],{"class":53332},[76,53812,53339],{"class":90},[76,53814,53815,53818,53820],{"class":78,"line":1944},[76,53816,53817],{"class":90},"\u003C\u002F",[76,53819,53366],{"class":53332},[76,53821,53339],{"class":90},[76,53823,53824],{"class":78,"line":1950},[76,53825,149],{"emptyLinePlaceholder":148},[76,53827,53828,53830,53833],{"class":78,"line":1965},[76,53829,584],{"class":90},[76,53831,53832],{"class":53332},"body",[76,53834,53339],{"class":90},[76,53836,53837],{"class":78,"line":1971},[76,53838,149],{"emptyLinePlaceholder":148},[76,53840,53841,53843,53846],{"class":78,"line":1985},[76,53842,53373],{"class":90},[76,53844,53845],{"class":53332},"script",[76,53847,53339],{"class":90},[76,53849,53850],{"class":78,"line":1991},[76,53851,53852],{"class":540},"        \u002F\u002F 1. 四次弹框效果\n",[76,53854,53855],{"class":78,"line":2005},[76,53856,53857],{"class":540},"        \u002F\u002F 声明一个新的数组\n",[76,53859,53860,53863,53866,53868],{"class":78,"line":2017},[76,53861,53862],{"class":82},"        let",[76,53864,53865],{"class":90}," arr ",[76,53867,370],{"class":82},[76,53869,53870],{"class":90}," []\n",[76,53872,53873,53875,53877,53880,53882,53884,53886,53888,53890,53893,53895,53897],{"class":78,"line":2023},[76,53874,5488],{"class":82},[76,53876,3770],{"class":90},[76,53878,53879],{"class":82},"let",[76,53881,11505],{"class":90},[76,53883,370],{"class":82},[76,53885,27168],{"class":119},[76,53887,11512],{"class":90},[76,53889,1691],{"class":82},[76,53891,53892],{"class":119}," 4",[76,53894,5299],{"class":90},[76,53896,4388],{"class":82},[76,53898,14495],{"class":90},[76,53900,53901],{"class":78,"line":2031},[76,53902,53903],{"class":540},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[76,53905,53906],{"class":78,"line":11880},[76,53907,53908],{"class":540},"            \u002F\u002F arr.push(num)\n",[76,53910,53911,53914,53917,53919,53922,53924,53927,53929,53932],{"class":78,"line":11901},[76,53912,53913],{"class":90},"            arr.",[76,53915,53916],{"class":86},"push",[76,53918,123],{"class":90},[76,53920,53921],{"class":86},"prompt",[76,53923,123],{"class":90},[76,53925,53926],{"class":126},"`请输入第${",[76,53928,2705],{"class":90},[76,53930,53931],{"class":126},"}季度的数据:`",[76,53933,656],{"class":90},[76,53935,53936],{"class":78,"line":11907},[76,53937,53938],{"class":540},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[76,53940,53941],{"class":78,"line":11921},[76,53942,4624],{"class":90},[76,53944,53945],{"class":78,"line":11927},[76,53946,53947],{"class":540},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[76,53949,53950],{"class":78,"line":11954},[76,53951,53952],{"class":540},"        \u002F\u002F 盒子开头\n",[76,53954,53955,53958,53961,53963,53966],{"class":78,"line":11963},[76,53956,53957],{"class":90},"        document.",[76,53959,53960],{"class":86},"write",[76,53962,123],{"class":90},[76,53964,53965],{"class":126},"` \u003Cdiv class=\"box\">`",[76,53967,130],{"class":90},[76,53969,53970],{"class":78,"line":11969},[76,53971,149],{"emptyLinePlaceholder":148},[76,53973,53974],{"class":78,"line":11977},[76,53975,53976],{"class":540},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[76,53978,53979,53981,53983,53985,53987,53989,53991,53993,53995,53998,54001,54003,54005],{"class":78,"line":11982},[76,53980,5488],{"class":82},[76,53982,3770],{"class":90},[76,53984,53879],{"class":82},[76,53986,11505],{"class":90},[76,53988,370],{"class":82},[76,53990,587],{"class":119},[76,53992,11512],{"class":90},[76,53994,584],{"class":82},[76,53996,53997],{"class":90}," arr.",[76,53999,54000],{"class":119},"length",[76,54002,5299],{"class":90},[76,54004,4388],{"class":82},[76,54006,14495],{"class":90},[76,54008,54009,54012,54014,54016],{"class":78,"line":18654},[76,54010,54011],{"class":90},"            document.",[76,54013,53960],{"class":86},[76,54015,123],{"class":90},[76,54017,54018],{"class":126},"`\n",[76,54020,54021,54024,54026,54028,54030,54032],{"class":78,"line":18660},[76,54022,54023],{"class":126},"              \u003Cdiv style=\"height: ${",[76,54025,5964],{"class":90},[76,54027,3148],{"class":126},[76,54029,2705],{"class":90},[76,54031,3196],{"class":126},[76,54033,54034],{"class":126},"}px;\">\n",[76,54036,54037,54040,54042,54044,54046,54048],{"class":78,"line":18683},[76,54038,54039],{"class":126},"                \u003Cspan>${",[76,54041,5964],{"class":90},[76,54043,3148],{"class":126},[76,54045,2705],{"class":90},[76,54047,3196],{"class":126},[76,54049,54050],{"class":126},"}\u003C\u002Fspan>\n",[76,54052,54053,54056,54058,54060,54062],{"class":78,"line":18689},[76,54054,54055],{"class":126},"                \u003Ch4>第${",[76,54057,2705],{"class":90},[76,54059,47601],{"class":82},[76,54061,27168],{"class":119},[76,54063,54064],{"class":126},"}季度\u003C\u002Fh4>\n",[76,54066,54067],{"class":78,"line":18712},[76,54068,54069],{"class":126},"              \u003C\u002Fdiv>          \n",[76,54071,54072,54075],{"class":78,"line":18726},[76,54073,54074],{"class":126},"            `",[76,54076,130],{"class":90},[76,54078,54079],{"class":78,"line":18746},[76,54080,4624],{"class":90},[76,54082,54083],{"class":78,"line":18752},[76,54084,54085],{"class":540},"        \u002F\u002F 盒子结尾\n",[76,54087,54088,54090,54092,54094,54097],{"class":78,"line":18763},[76,54089,53957],{"class":90},[76,54091,53960],{"class":86},[76,54093,123],{"class":90},[76,54095,54096],{"class":126},"` \u003C\u002Fdiv>`",[76,54098,130],{"class":90},[76,54100,54101,54103,54105],{"class":78,"line":18786},[76,54102,53808],{"class":90},[76,54104,53845],{"class":53332},[76,54106,53339],{"class":90},[76,54108,54109,54111,54113],{"class":78,"line":18808},[76,54110,53817],{"class":90},[76,54112,53832],{"class":53332},[76,54114,53339],{"class":90},[76,54116,54117],{"class":78,"line":18813},[76,54118,149],{"emptyLinePlaceholder":148},[76,54120,54121,54123,54125],{"class":78,"line":18819},[76,54122,53817],{"class":90},[76,54124,52667],{"class":53332},[76,54126,53339],{"class":90},[889,54128,54130],{"id":54129},"_284-冒泡排序","2.8.4 冒泡排序",[66,54132,54134],{"className":52665,"code":54133,"language":52667,"meta":71,"style":71},"\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",[73,54135,54136,54146,54160,54164,54172,54187,54207,54219,54227,54231,54239,54247,54279,54312,54349,54354,54373,54378,54391,54406,54422,54426,54431,54435,54445,54454,54462,54466],{"__ignoreMap":71},[76,54137,54138,54140,54142,54144],{"class":78,"line":79},[76,54139,53329],{"class":90},[76,54141,53333],{"class":53332},[76,54143,53336],{"class":86},[76,54145,53339],{"class":90},[76,54147,54148,54150,54152,54154,54156,54158],{"class":78,"line":94},[76,54149,584],{"class":90},[76,54151,52667],{"class":53332},[76,54153,53348],{"class":86},[76,54155,370],{"class":90},[76,54157,53353],{"class":126},[76,54159,53339],{"class":90},[76,54161,54162],{"class":78,"line":133},[76,54163,149],{"emptyLinePlaceholder":148},[76,54165,54166,54168,54170],{"class":78,"line":145},[76,54167,584],{"class":90},[76,54169,53366],{"class":53332},[76,54171,53339],{"class":90},[76,54173,54174,54177,54179,54181,54183,54185],{"class":78,"line":152},[76,54175,54176],{"class":90},"  \u003C",[76,54178,53376],{"class":53332},[76,54180,53379],{"class":86},[76,54182,370],{"class":90},[76,54184,53384],{"class":126},[76,54186,53339],{"class":90},[76,54188,54189,54191,54193,54195,54197,54199,54201,54203,54205],{"class":78,"line":157},[76,54190,54176],{"class":90},[76,54192,53376],{"class":53332},[76,54194,16972],{"class":86},[76,54196,370],{"class":90},[76,54198,53423],{"class":126},[76,54200,53403],{"class":86},[76,54202,370],{"class":90},[76,54204,53430],{"class":126},[76,54206,53339],{"class":90},[76,54208,54209,54211,54213,54215,54217],{"class":78,"line":246},[76,54210,54176],{"class":90},[76,54212,53439],{"class":53332},[76,54214,53442],{"class":90},[76,54216,53439],{"class":53332},[76,54218,53339],{"class":90},[76,54220,54221,54223,54225],{"class":78,"line":251},[76,54222,53817],{"class":90},[76,54224,53366],{"class":53332},[76,54226,53339],{"class":90},[76,54228,54229],{"class":78,"line":257},[76,54230,149],{"emptyLinePlaceholder":148},[76,54232,54233,54235,54237],{"class":78,"line":641},[76,54234,584],{"class":90},[76,54236,53832],{"class":53332},[76,54238,53339],{"class":90},[76,54240,54241,54243,54245],{"class":78,"line":646},[76,54242,54176],{"class":90},[76,54244,53845],{"class":53332},[76,54246,53339],{"class":90},[76,54248,54249,54252,54254,54256,54259,54261,54263,54265,54267,54269,54271,54273,54275,54277],{"class":78,"line":659},[76,54250,54251],{"class":82},"    let",[76,54253,53865],{"class":90},[76,54255,370],{"class":82},[76,54257,54258],{"class":90}," [",[76,54260,2583],{"class":119},[76,54262,405],{"class":90},[76,54264,2557],{"class":119},[76,54266,405],{"class":90},[76,54268,2339],{"class":119},[76,54270,405],{"class":90},[76,54272,2345],{"class":119},[76,54274,405],{"class":90},[76,54276,669],{"class":119},[76,54278,35284],{"class":90},[76,54280,54281,54283,54285,54287,54289,54291,54293,54295,54297,54299,54301,54304,54306,54308,54310],{"class":78,"line":1608},[76,54282,1469],{"class":82},[76,54284,3770],{"class":90},[76,54286,53879],{"class":82},[76,54288,11505],{"class":90},[76,54290,370],{"class":82},[76,54292,587],{"class":119},[76,54294,11512],{"class":90},[76,54296,584],{"class":82},[76,54298,53997],{"class":90},[76,54300,54000],{"class":119},[76,54302,54303],{"class":82}," -",[76,54305,27168],{"class":119},[76,54307,5299],{"class":90},[76,54309,4388],{"class":82},[76,54311,14495],{"class":90},[76,54313,54314,54317,54319,54321,54323,54325,54327,54329,54331,54333,54335,54337,54339,54341,54343,54345,54347],{"class":78,"line":1632},[76,54315,54316],{"class":82},"      for",[76,54318,3770],{"class":90},[76,54320,53879],{"class":82},[76,54322,11566],{"class":90},[76,54324,370],{"class":82},[76,54326,587],{"class":119},[76,54328,11573],{"class":90},[76,54330,584],{"class":82},[76,54332,53997],{"class":90},[76,54334,54000],{"class":119},[76,54336,54303],{"class":82},[76,54338,11505],{"class":90},[76,54340,666],{"class":82},[76,54342,27168],{"class":119},[76,54344,11580],{"class":90},[76,54346,4388],{"class":82},[76,54348,14495],{"class":90},[76,54350,54351],{"class":78,"line":1637},[76,54352,54353],{"class":540},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[76,54355,54356,54358,54361,54363,54366,54368,54370],{"class":78,"line":1642},[76,54357,4592],{"class":82},[76,54359,54360],{"class":90}," (arr[j] ",[76,54362,1829],{"class":82},[76,54364,54365],{"class":90}," arr[j ",[76,54367,376],{"class":82},[76,54369,27168],{"class":119},[76,54371,54372],{"class":90},"]) {\n",[76,54374,54375],{"class":78,"line":1652},[76,54376,54377],{"class":540},"          \u002F\u002F 交换两个变量\n",[76,54379,54380,54383,54386,54388],{"class":78,"line":1660},[76,54381,54382],{"class":82},"          let",[76,54384,54385],{"class":90}," tmp ",[76,54387,370],{"class":82},[76,54389,54390],{"class":90}," arr[j]\n",[76,54392,54393,54396,54398,54400,54402,54404],{"class":78,"line":1683},[76,54394,54395],{"class":90},"          arr[j] ",[76,54397,370],{"class":82},[76,54399,54365],{"class":90},[76,54401,376],{"class":82},[76,54403,27168],{"class":119},[76,54405,35284],{"class":90},[76,54407,54408,54411,54413,54415,54417,54419],{"class":78,"line":1698},[76,54409,54410],{"class":90},"          arr[j ",[76,54412,376],{"class":82},[76,54414,27168],{"class":119},[76,54416,6525],{"class":90},[76,54418,370],{"class":82},[76,54420,54421],{"class":90}," tmp\n",[76,54423,54424],{"class":78,"line":1711},[76,54425,4624],{"class":90},[76,54427,54428],{"class":78,"line":1717},[76,54429,54430],{"class":90},"      }\n",[76,54432,54433],{"class":78,"line":1728},[76,54434,4283],{"class":90},[76,54436,54437,54440,54442],{"class":78,"line":1740},[76,54438,54439],{"class":90},"    document.",[76,54441,53960],{"class":86},[76,54443,54444],{"class":90},"(arr)\n",[76,54446,54447,54450,54452],{"class":78,"line":1746},[76,54448,54449],{"class":90},"  \u003C\u002F",[76,54451,53845],{"class":53332},[76,54453,53339],{"class":90},[76,54455,54456,54458,54460],{"class":78,"line":1751},[76,54457,53817],{"class":90},[76,54459,53832],{"class":53332},[76,54461,53339],{"class":90},[76,54463,54464],{"class":78,"line":1756},[76,54465,149],{"emptyLinePlaceholder":148},[76,54467,54468,54470,54472],{"class":78,"line":1766},[76,54469,53817],{"class":90},[76,54471,52667],{"class":53332},[76,54473,53339],{"class":90},[19,54475,54476],{},[3583,54477],{"alt":71,"src":54478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54480,54481],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54483,54484],{},"let arr = [4, 2, 5, 1, 3]",[19,54486,54487],{},"\u002F\u002F 1.升序排列写法",[19,54489,54490],{},"arr.sort(function (a, b) {",[19,54492,54493],{},"return a - b",[19,54495,54496],{},"})",[19,54498,54499],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54501,54502],{},"\u002F\u002F 降序排列写法",[19,54504,54490],{},[19,54506,54507],{},"return b - a",[19,54509,54496],{},[19,54511,54512],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54514,54516],{"id":54515},"_29-函数","2.9 函数",[19,54518,54519],{},[3583,54520],{"alt":71,"src":54521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54523,54524],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54526,54527],{},"函数的声明用function",[19,54529,54530],{},"函数里边可以嵌套函数",[889,54532,54534],{"id":54533},"_291-函数传参","2.9.1 函数传参",[19,54536,54537],{},[3583,54538],{"alt":71,"src":54539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54541,54542],{},[3583,54543],{"alt":71,"src":54544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3261,54546,54547,54550,54553,54556,54559,54562],{},[29,54548,54549],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54551,54552],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54554,54555],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54557,54558],{},"开发中尽量保持形参和实参个数一致",[29,54560,54561],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54563,54564],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54566,54567],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[889,54569,54571],{"id":54570},"_292-函数的返回值","2.9.2 函数的返回值",[19,54573,54574],{},[3583,54575],{"alt":71,"src":54576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54578,54579],{},[3583,54580],{"alt":71,"src":54581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3261,54583,54584,54587,54590,54593,54596],{},[29,54585,54586],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54588,54589],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54591,54592],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54594,54595],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54597,54598],{},"断点调试:进入函数内部看执行过程F11",[889,54600,54602],{"id":54601},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[66,54604,54606],{"className":52665,"code":54605,"language":52667,"meta":71,"style":71},"    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",[73,54607,54608,54613,54618,54622,54627],{"__ignoreMap":71},[76,54609,54610],{"class":78,"line":79},[76,54611,54612],{"class":90},"    function fn(a, b) {\n",[76,54614,54615],{"class":78,"line":94},[76,54616,54617],{"class":90},"      console.log(a + b);\n",[76,54619,54620],{"class":78,"line":133},[76,54621,4283],{"class":90},[76,54623,54624],{"class":78,"line":145},[76,54625,54626],{"class":90},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[76,54628,54629],{"class":78,"line":152},[76,54630,54631],{"class":90},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[889,54633,54635],{"id":54634},"_294-作用域","2.9.4 作用域",[3261,54637,54638,54644,54649,54652,54655],{},[29,54639,54640,54641],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2416,54642,54643],{},"作用域",[29,54645,54646],{},[2416,54647,54648],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54650,54651],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54653,54654],{},"函数内部可以直接所使用全局变量",[29,54656,54657],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54659,16686],{},[66,54661,54663],{"className":52665,"code":54662,"language":52667,"meta":71,"style":71},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[73,54664,54665,54670,54675,54679,54684,54689,54694],{"__ignoreMap":71},[76,54666,54667],{"class":78,"line":79},[76,54668,54669],{"class":90},"    function fun() {\n",[76,54671,54672],{"class":78,"line":94},[76,54673,54674],{"class":90},"      num = 10\n",[76,54676,54677],{"class":78,"line":133},[76,54678,4283],{"class":90},[76,54680,54681],{"class":78,"line":145},[76,54682,54683],{"class":90},"    fun()\n",[76,54685,54686],{"class":78,"line":152},[76,54687,54688],{"class":90},"    console.log(num)\n",[76,54690,54691],{"class":78,"line":157},[76,54692,54693],{"class":90},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[76,54695,54696],{"class":78,"line":246},[76,54697,54698],{"class":90},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3261,54700,54701,54704],{},[29,54702,54703],{},"函数内部的形参可以看做是局部变量",[29,54705,54706],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54708,54709,54710],{},"变量访问原则： ",[2416,54711,54712],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[889,54714,54716],{"id":54715},"_295-匿名函数","2.9.5 匿名函数",[19,54718,54719],{},"函数可以分为具名函数和匿名函数",[19,54721,54722],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54724,54725],{},[29,54726,54727],{},"函数表达式",[19,54729,54730],{},[3583,54731],{"alt":71,"src":54732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54734,54735],{},"里边也可以写参数",[19,54737,54738],{},"具名函数调用位置可以随意调整；",[19,54740,54741],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54743,54744],{"start":94},[29,54745,54746],{},"立即执行函数",[19,54748,54749],{},[3583,54750],{"alt":71,"src":54751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54753,54754],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54756,54757],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54759,54760],{},"(function () {})();",[19,54762,54763],{},"不要落下最后的;",[19,54765,54766],{},"立即执行函数必须要加;",[19,54768,54769],{},"分号写前写后都没问题",[19,54771,54772],{},"写前：",[19,54774,54775],{},"(function() {})()",[19,54777,54778],{},";(function () {})();",[19,54780,54781],{},"写后:",[19,54783,54784],{},"(function() {})();",[19,54786,54760],{},[19,54788,54789],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54791,54792],{},"还有一种写法：",[19,54794,54795],{},"(function(){}());",[19,54797,54798],{},"或者:",[19,54800,54801],{},"!function(){}();",[19,54803,54804],{},"立即执行函数有时候也是可以加名字的：",[19,54806,54807],{},"(function flexible(window,document) {}(window,document));",[19,54809,54810],{},"省一些调用方法",[889,54812,54814],{"id":54813},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54816,54817],{},[3583,54818],{"alt":71,"src":54819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54821,54822],{},"这样就不用非得给x,y初始化了",[19,54824,54825],{},[3583,54826],{"alt":71,"src":54827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54829,54830],{},"代码执行时先看左边",[19,54832,54833],{},"例如：console.log(false && 3+5)",[19,54835,54836],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54838,54839],{},"&&都是真时，就返回最后一个真值",[19,54841,54842],{},"console.log(11 && 22)",[19,54844,54845],{},"输出22",[19,54847,54848],{},"逻辑与：遇真则真",[19,54850,16686],{},[19,54852,54853],{},"let age=1",[19,54855,54856],{},"console.log(11 || age++)",[19,54858,54859],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54861,54862],{},"console.log(11 || 22)",[19,54864,54865],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54867,54868],{},"||如果都是假的话，就取最后一个假的值了",[889,54870,54872],{"id":54871},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54874,54875],{},"显示转换：",[19,54877,54878,54881,54882],{},[2416,54879,54880],{},"记忆","： ",[2416,54883,54884],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54886,54887],{},"空字符串为假，其他字符串全为真",[19,54889,54890],{},[3583,54891],{"alt":71,"src":54892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54894,54895],{},"隐式转换：",[19,54897,54898],{},[3583,54899],{"alt":71,"src":54900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54902,54903],{},"隐式转换:",[19,54905,54906],{},"null+3=3",[19,54908,54909],{},"undefined+3=NaN",[19,54911,54912],{},"null==undefined 输出true,他两个都当0看",[19,54914,54915],{},"null===undefined 输出false",[19,54917,54918],{},"undefined做任何操作都是NaN",[19,54920,54921],{},"NaN不等于NaN，NaN表示计算错误",[14,54923,54925],{"id":54924},"_210-对象","2.10 对象",[889,54927,54929],{"id":54928},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54931,54932],{},"对象也是一种数据类型，里边的数据是无序的",[19,54934,54935],{},"对象由属性和方法组成",[19,54937,54938],{},[3583,54939],{"alt":71,"src":54940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54942,54943],{},[3583,54944],{"alt":71,"src":54945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54947,54948],{},[3583,54949],{"alt":71,"src":54950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[889,54952,54954],{"id":54953},"_2102-对象属性","2.10.2 对象属性",[19,54956,54957],{},[3583,54958],{"alt":71,"src":54959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54961,54962],{},[29,54963,54964],{},"查询对象",[19,54966,54967],{},"对象名.属性 goods.uname",[19,54969,54970],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54972,54973],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54975,54976],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54978,54979],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54981,54982],{"start":94},[29,54983,54984],{},"重新赋值",[19,54986,54987],{},"对象名.属性=新值",[26,54989,54990],{"start":133},[29,54991,54992],{},"增加新数据",[19,54994,54987],{},[26,54996,54997],{"start":145},[29,54998,54999],{},"删除对象中的属性",[19,55001,55002],{},"delete 对象名.属性",[889,55004,55006],{"id":55005},"_2103-对象方法","2.10.3 对象方法",[19,55008,55009],{},[3583,55010],{"alt":71,"src":55011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55013,55014],{},"后边跟的是匿名函数",[19,55016,55017],{},"对象外面的叫函数；对象内部的叫方法",[19,55019,55020],{},[3583,55021],{"alt":71,"src":55022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[889,55024,55026],{"id":55025},"_2104-遍历对象","2.10.4 遍历对象",[19,55028,55029],{},"理解为加括号的python字典遍历",[19,55031,55032],{},[3583,55033],{"alt":71,"src":55034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55036,55037],{},"k是字符串类型",[19,55039,55040],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[66,55042,55044],{"className":52665,"code":55043,"language":52667,"meta":71,"style":71},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[73,55045,55046,55051,55056,55061,55066],{"__ignoreMap":71},[76,55047,55048],{"class":78,"line":79},[76,55049,55050],{"class":90},"   let arr = [1, 2, 3]\n",[76,55052,55053],{"class":78,"line":94},[76,55054,55055],{"class":90},"    for (let k in arr) {\n",[76,55057,55058],{"class":78,"line":133},[76,55059,55060],{"class":90},"      console.log(k)\n",[76,55062,55063],{"class":78,"line":145},[76,55064,55065],{"class":90},"      console.log(arr[k])\n",[76,55067,55068],{"class":78,"line":152},[76,55069,4283],{"class":90},[19,55071,55072],{},[3583,55073],{"alt":71,"src":55074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55076,55077],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55079,55080],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55082,55083],{},"for in 得到的k是属性名",[53845,55085,55086],{},"\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,55088,55089],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[889,55091,55093],{"id":55092},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55095,55096],{},"数组中放对象信息",[66,55098,55102],{"className":55099,"code":55100,"language":55101,"meta":71,"style":71},"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",[73,55103,55104,55112,55117,55122,55127,55132,55137,55142,55147,55152,55157,55162,55167,55171,55175],{"__ignoreMap":71},[76,55105,55106,55108,55110],{"class":78,"line":79},[76,55107,584],{"class":90},[76,55109,53845],{"class":53332},[76,55111,53339],{"class":90},[76,55113,55114],{"class":78,"line":94},[76,55115,55116],{"class":90},"    let students = [\n",[76,55118,55119],{"class":78,"line":133},[76,55120,55121],{"class":90},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[76,55123,55124],{"class":78,"line":145},[76,55125,55126],{"class":90},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[76,55128,55129],{"class":78,"line":152},[76,55130,55131],{"class":90},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[76,55133,55134],{"class":78,"line":157},[76,55135,55136],{"class":90},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[76,55138,55139],{"class":78,"line":246},[76,55140,55141],{"class":90},"    ]\n",[76,55143,55144],{"class":78,"line":251},[76,55145,55146],{"class":90},"    for (let i = 0; i \u003C students.length; i++) {\n",[76,55148,55149],{"class":78,"line":257},[76,55150,55151],{"class":90},"      for (let k in students[i]) {\n",[76,55153,55154],{"class":78,"line":641},[76,55155,55156],{"class":90},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[76,55158,55159],{"class":78,"line":646},[76,55160,55161],{"class":90},"        \u002F\u002F输出每个人的名字：\n",[76,55163,55164],{"class":78,"line":659},[76,55165,55166],{"class":90},"        \u002F\u002Fconsole.log(students[i].name)\n",[76,55168,55169],{"class":78,"line":1608},[76,55170,54430],{"class":90},[76,55172,55173],{"class":78,"line":1632},[76,55174,4283],{"class":90},[76,55176,55177,55179,55181],{"class":78,"line":1637},[76,55178,54449],{"class":90},[76,55180,53845],{"class":53332},[76,55182,53339],{"class":90},[889,55184,55186],{"id":55185},"_2106-内置对象","2.10.6 内置对象",[19,55188,55189],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,55191,55192],{},[29,55193,55194],{},"数学对象Math",[19,55196,55197],{},[3583,55198],{"alt":71,"src":55199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55201,55202],{},[2503,55203,55206],{"href":55204,"rel":55205},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25914],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55208,55209],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55211,55212],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55214,55215],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55217,55218],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55220,55221],{},"null属于对象数据类型",[26,55223,55224],{"start":94},[29,55225,55226],{},"生成任意范围随机数",[19,55228,55229],{},[3583,55230],{"alt":71,"src":55231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55233,55234],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55236,55237],{},"乘以几就取不到几",[19,55239,55240],{},"取数组中的随机元素：",[19,55242,55243],{},"let arr = ['red', 'green', 'blue']",[19,55245,55246],{},"let random = Math.floor(Math.random() * arr.length)",[19,55248,55249],{},"console.log(arr[random])",[19,55251,55252],{},"这个函数得到的是全闭区间",[19,55254,55255],{},"function getRandom(N, M) {",[19,55257,55258],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55260,304],{},[19,55262,55263],{},"console.log(getRandom(4, 8))",[889,55265,55267],{"id":55266},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55269,55270],{},[3583,55271],{"alt":71,"src":55272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55274,55275],{},[3583,55276],{"alt":71,"src":55277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55279,55280],{},[3583,55281],{"alt":71,"src":55282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55284,55285],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55287,55288],{},[3583,55289],{"alt":71,"src":55290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55292,55293],{},[3583,55294],{"alt":71,"src":55295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55297,55298],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55300,55301],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55303,55304],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2178,55306,55307],{},"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":71,"searchDepth":94,"depth":94,"links":55309},[55310,55318,55319,55320,55321,55322,55329,55333,55339,55348],{"id":52500,"depth":94,"text":52501,"children":55311},[55312,55313,55314,55315,55316,55317],{"id":52504,"depth":133,"text":52505},{"id":52521,"depth":133,"text":52522},{"id":52561,"depth":133,"text":52562},{"id":52573,"depth":133,"text":52574},{"id":52582,"depth":133,"text":52583},{"id":52630,"depth":133,"text":52631},{"id":52640,"depth":94,"text":52641},{"id":52728,"depth":94,"text":52729},{"id":52751,"depth":94,"text":52752},{"id":52763,"depth":94,"text":52764},{"id":52950,"depth":94,"text":52951,"children":55323},[55324,55325,55326,55327,55328],{"id":52954,"depth":133,"text":52955},{"id":52963,"depth":133,"text":52964},{"id":52991,"depth":133,"text":52992},{"id":53027,"depth":133,"text":53028},{"id":53052,"depth":133,"text":53053},{"id":53064,"depth":94,"text":53065,"children":55330},[55331,55332],{"id":53085,"depth":133,"text":53086},{"id":53179,"depth":133,"text":53180},{"id":53237,"depth":94,"text":53238,"children":55334},[55335,55336,55337,55338],{"id":53241,"depth":133,"text":53242},{"id":53265,"depth":133,"text":53266},{"id":53318,"depth":133,"text":53319},{"id":54129,"depth":133,"text":54130},{"id":54515,"depth":94,"text":54516,"children":55340},[55341,55342,55343,55344,55345,55346,55347],{"id":54533,"depth":133,"text":54534},{"id":54570,"depth":133,"text":54571},{"id":54601,"depth":133,"text":54602},{"id":54634,"depth":133,"text":54635},{"id":54715,"depth":133,"text":54716},{"id":54813,"depth":133,"text":54814},{"id":54871,"depth":133,"text":54872},{"id":54924,"depth":94,"text":54925,"children":55349},[55350,55351,55352,55353,55354,55355,55356],{"id":54928,"depth":133,"text":54929},{"id":54953,"depth":133,"text":54954},{"id":55005,"depth":133,"text":55006},{"id":55025,"depth":133,"text":55026},{"id":55092,"depth":133,"text":55093},{"id":55185,"depth":133,"text":55186},{"id":55266,"depth":133,"text":55267},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52492,"description":2201},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55363,"title":55364,"body":55365,"description":2201,"extension":2202,"meta":78699,"navigation":148,"path":78700,"seo":78701,"stem":78702,"__hash__":78703},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55366,"toc":78639},[55367,55370,55373,55376,55381,55384,55387,55390,55394,55398,55404,55409,55417,55424,55427,55431,55436,55441,55446,55449,55452,55463,55466,55470,55473,55476,55481,55486,55491,55494,55497,55589,55592,55597,55600,55605,55608,55611,55616,55619,55624,55628,55631,55645,55649,55654,55657,55660,55664,55669,55672,55676,55680,55685,55689,55694,55697,55700,55703,55706,55709,55712,55717,55722,55750,55753,55756,55759,55764,55767,55770,55773,55776,55780,55809,55813,55818,55823,55826,55829,55832,55837,55951,55956,55961,56122,56127,56130,56134,56139,56144,56147,56150,56153,56156,56159,56162,56165,56168,56171,56174,56177,56180,56183,56186,56188,56191,56194,56197,56202,56206,56603,56606,56612,56616,56621,57902,57907,57910,57913,57916,57921,59117,59121,59127,59132,59135,59140,59145,59149,59153,59158,59161,59166,59169,59172,59176,60084,60087,60091,60312,60315,60318,60321,60546,60549,60773,60776,60780,60785,60788,60791,61019,61022,61055,61058,61062,61067,61071,61074,61077,61080,61083,61086,61089,61092,61097,62377,62381,62384,63476,63480,63483,63486,63489,63492,63496,63499,63502,63504,63512,64993,64997,65000,65003,65006,65215,65218,65222,65226,65231,65236,65239,65242,65247,65251,65256,65259,65368,65372,65377,65382,65385,65388,65392,65397,65402,65407,65410,65413,65424,65427,65432,65437,65440,65443,65516,65520,65525,65528,65530,65541,65545,65550,66876,66879,66882,66885,66887,66890,66893,66896,66899,66902,66905,66908,66911,66914,66917,66920,66923,66925,66927,66930,66934,68028,68031,68034,68050,68064,68067,68072,68078,68083,68087,68091,68096,68100,68105,68547,68552,68555,68559,68564,68567,68570,68574,68579,68583,68588,68593,68597,68602,68607,68610,68615,68620,68624,68629,68634,68738,68741,68745,68750,69116,69119,69122,69125,69128,69131,69134,69137,69140,70436,70440,70445,70450,70453,70456,70459,70462,70464,70469,70474,70477,70481,70486,70491,70496,70499,70502,70505,70508,70511,70516,70519,70523,70528,70533,70537,70542,70545,70550,70553,70556,70559,70562,70565,70570,70573,70576,70579,70582,70586,70591,70594,70598,70603,70606,70609,70613,70642,70645,70649,70653,70658,70662,70667,70670,70673,70676,70679,70682,70685,70688,70691,70694,70697,70700,70703,70706,70709,70713,70718,70723,70726,70730,70734,70739,70742,70746,70749,70752,70757,70762,70767,70772,70777,70780,70783,70788,70793,70797,70802,70805,70810,70813,70816,70819,70822,70827,70830,70839,70843,70848,70851,70854,70858,70861,70866,70870,70873,70879,70885,70889,70915,70918,72478,72481,72977,72980,72985,72990,72995,72999,73004,73009,73014,73018,73023,73026,73029,73032,73035,73039,73042,73047,73050,73055,73059,73064,73067,73072,73077,73082,73085,73088,73093,73098,73101,73104,73108,73111,73116,73119,73124,73127,73132,73137,73142,73145,73150,73215,73218,73229,73233,73238,73410,73414,73419,73422,73425,73428,73432,73443,73447,73450,73455,73460,73463,73466,73469,73472,73475,73477,73480,73483,73486,73491,73494,73499,73502,73506,73509,73512,73526,73530,73533,73588,73593,73596,73599,73604,73607,73611,73616,73746,73750,73755,73760,73841,73846,73850,73853,73858,73863,73869,73872,73875,73878,73882,73887,73890,73901,73905,73922,76969,76973,76976,76979,76982,77003,77007,77010,77018,77021,77026,77029,77032,77037,77042,77046,77067,77071,77076,77079,77082,77085,77088,77092,77097,77100,77104,77109,77112,77117,77120,77125,77128,77133,78336,78340,78345,78348,78353,78636],[10,55368,55364],{"id":55369},"_3web-apis",[19,55371,55372],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55374,55375],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55377,55378],{},[3583,55379],{"alt":71,"src":55380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55382,55383],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55385,55386],{},"建议数组和对象使用 const 来声明",[19,55388,55389],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55391,55393],{"id":55392},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[889,55395,55397],{"id":55396},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55399,55400,55403],{},[73,55401,55402],{},"document"," = HTML 文件解析后的对象化表示；",[19,55405,55406,55408],{},[73,55407,55402],{}," ≠ HTML 文件本身",[19,55410,55411,55416],{},[2416,55412,55413],{},[73,55414,55415],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55418,55419,55423],{},[2416,55420,55421],{},[73,55422,55402],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55425,55426],{},"document实际上为window.document的简写",[889,55428,55430],{"id":55429},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55432,55433],{},[3583,55434],{"alt":71,"src":55435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55437,55438],{},[3583,55439],{"alt":71,"src":55440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55442,55443],{},[3583,55444],{"alt":71,"src":55445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55447,55448],{},"console.dir()",[19,55450,55451],{},"dir用来打印对象",[3261,55453,55454,55457,55460],{},[29,55455,55456],{},"任何一个标签，都是一个对象",[29,55458,55459],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55461,55462],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55464,55465],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[889,55467,55469],{"id":55468},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55471,55472],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55474,55475],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55477,55478],{},[2416,55479,55480],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55482,55483],{},[29,55484,55485],{},"利用CSS选择器来获取标签元素",[19,55487,55488],{},[3583,55489],{"alt":71,"src":55490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55492,55493],{},"里边的选择器必须必须加引号！！！",[19,55495,55496],{},"只选择第一个元素",[66,55498,55500],{"className":55099,"code":55499,"language":55101,"meta":71,"style":71},"\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",[73,55501,55502,55510,55531,55550,55558,55563,55568,55573,55581],{"__ignoreMap":71},[76,55503,55504,55506,55508],{"class":78,"line":79},[76,55505,584],{"class":90},[76,55507,53832],{"class":53332},[76,55509,53339],{"class":90},[76,55511,55512,55514,55516,55519,55521,55524,55527,55529],{"class":78,"line":94},[76,55513,54176],{"class":90},[76,55515,53643],{"class":53332},[76,55517,55518],{"class":86}," class",[76,55520,370],{"class":90},[76,55522,55523],{"class":126},"\"box\"",[76,55525,55526],{"class":90},">123\u003C\u002F",[76,55528,53643],{"class":53332},[76,55530,53339],{"class":90},[76,55532,55533,55535,55537,55539,55541,55543,55546,55548],{"class":78,"line":133},[76,55534,54176],{"class":90},[76,55536,53643],{"class":53332},[76,55538,55518],{"class":86},[76,55540,370],{"class":90},[76,55542,55523],{"class":126},[76,55544,55545],{"class":90},">456\u003C\u002F",[76,55547,53643],{"class":53332},[76,55549,53339],{"class":90},[76,55551,55552,55554,55556],{"class":78,"line":145},[76,55553,54176],{"class":90},[76,55555,53845],{"class":53332},[76,55557,53339],{"class":90},[76,55559,55560],{"class":78,"line":152},[76,55561,55562],{"class":90},"    \u002F\u002F 1.获取匹配的第一个元素\n",[76,55564,55565],{"class":78,"line":157},[76,55566,55567],{"class":90},"    const box = document.querySelector('div')\n",[76,55569,55570],{"class":78,"line":246},[76,55571,55572],{"class":90},"    console.dir(box)\n",[76,55574,55575,55577,55579],{"class":78,"line":251},[76,55576,54449],{"class":90},[76,55578,53845],{"class":53332},[76,55580,53339],{"class":90},[76,55582,55583,55585,55587],{"class":78,"line":257},[76,55584,53817],{"class":90},[76,55586,53832],{"class":53332},[76,55588,53339],{"class":90},[19,55590,55591],{},"只选123，不选456",[19,55593,55594],{},[3583,55595],{"alt":71,"src":55596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55598,55599],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55601,55602],{},[3583,55603],{"alt":71,"src":55604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55606,55607],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55609,55610],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55612,55613],{"start":94},[29,55614,55615],{},"其他方法来获取标签元素",[19,55617,55618],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55620,55621],{},[3583,55622],{"alt":71,"src":55623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[889,55625,55627],{"id":55626},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55629,55630],{},"设置修改DOM元素内容有两种方式：",[3261,55632,55633,55636,55639,55642],{},[29,55634,55635],{},"元素.innerText=''",[29,55637,55638],{},"元素.innerHTML=''",[29,55640,55641],{},"不写字符串输出数字也是可以的",[29,55643,55644],{},"元素.innerHtml=1",[24047,55646,55648],{"id":55647},"_3131-innertext","3.1.3.1 innerText",[19,55650,55651],{},[3583,55652],{"alt":71,"src":55653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55655,55656],{},"思路：实现了修改盒子中的内容！",[19,55658,55659],{},"它只显示纯文本，不解析标签",[24047,55661,55663],{"id":55662},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55665,55666],{},[3583,55667],{"alt":71,"src":55668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55670,55671],{},"相比于innerText，他的强大之处在于可以解析标签",[889,55673,55675],{"id":55674},"_314-操作元素属性","3.1.4 操作元素属性",[24047,55677,55679],{"id":55678},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55681,55682],{},[3583,55683],{"alt":71,"src":55684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24047,55686,55688],{"id":55687},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55690,55691],{},[3583,55692],{"alt":71,"src":55693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55695,55696],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55698,55699],{},"div.style.backgroundColor = 'hotpink'",[19,55701,55702],{},"如果按照css的写法，-表示减，就会出错",[19,55704,55705],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55707,55708],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55710,55711],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55713,55714],{},[3583,55715],{"alt":71,"src":55716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55718,55719],{},[3583,55720],{"alt":71,"src":55721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55723,55724,55727,55730,55733,55736,55739],{},[29,55725,55726],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55728,55729],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55731,55732],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55734,55735],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55737,55738],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55740,55741,55742,55747],{},"解析标签的时候就变为了",[53643,55743],{"className":55744},[55745,55746],"nav","box",[55748,55749],"br",{},[19,55751,55752],{},"例子：",[53643,55754],{"className":55755},[55745],[53845,55757,55758],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55760,55761],{},[3583,55762],{"alt":71,"src":55763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55765,55766],{},"追加和删除类名用classList",[19,55768,55769],{},"常用于类似于开关的操作",[19,55771,55772],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55774,55775],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24047,55777,55779],{"id":55778},"_3143-牢记点","3.1.4.3 牢记点",[26,55781,55782,55785,55788,55791,55794,55797,55800,55803,55806],{},[29,55783,55784],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55786,55787],{},"使用style属性操作css时不要忘记引号",[29,55789,55790],{},"使用className或者classList时也不要忘记引号",[29,55792,55793],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55795,55796],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55798,55799],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55801,55802],{},"若： let arr=['1','2',3] arr[0]=1",[29,55804,55805],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55807,55808],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[889,55810,55812],{"id":55811},"_315-操作表单元素","3.1.5 操作表单元素",[26,55814,55815],{},[29,55816,55817],{},"天生的属性",[19,55819,55820],{},[3583,55821],{"alt":71,"src":55822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55824,55825],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55827,55828],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55830,55831],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55833,55834],{},[3583,55835],{"alt":71,"src":55836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[66,55838,55840],{"className":52665,"code":55839,"language":52667,"meta":71,"style":71},"在复选框中如果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",[73,55841,55842,55847,55878,55883,55888,55893,55898,55902,55907,55912,55929,55941,55946],{"__ignoreMap":71},[76,55843,55844],{"class":78,"line":79},[76,55845,55846],{"class":90},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[76,55848,55849,55851,55853,55856,55858,55861,55863,55865,55867,55869,55871,55873,55876],{"class":78,"line":94},[76,55850,584],{"class":90},[76,55852,1673],{"class":53332},[76,55854,55855],{"class":86}," type",[76,55857,370],{"class":90},[76,55859,55860],{"class":126},"\"checkbox\"",[76,55862,16972],{"class":86},[76,55864,370],{"class":90},[76,55866,9730],{"class":126},[76,55868,17011],{"class":86},[76,55870,370],{"class":90},[76,55872,9730],{"class":126},[76,55874,55875],{"class":86}," checked",[76,55877,53339],{"class":90},[76,55879,55880],{"class":78,"line":133},[76,55881,55882],{"class":90},"不选的话：\n",[76,55884,55885],{"class":78,"line":145},[76,55886,55887],{"class":90},"const input = document.querySelector('input')\n",[76,55889,55890],{"class":78,"line":152},[76,55891,55892],{"class":90},"input.checked=false\n",[76,55894,55895],{"class":78,"line":157},[76,55896,55897],{"class":90},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[76,55899,55900],{"class":78,"line":246},[76,55901,149],{"emptyLinePlaceholder":148},[76,55903,55904],{"class":78,"line":251},[76,55905,55906],{"class":90},"禁用按钮：\n",[76,55908,55909],{"class":78,"line":257},[76,55910,55911],{"class":90},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[76,55913,55914,55916,55919,55922,55925,55927],{"class":78,"line":641},[76,55915,584],{"class":90},[76,55917,55918],{"class":53332},"button",[76,55920,55921],{"class":86}," disabled",[76,55923,55924],{"class":90},">点击\u003C\u002F",[76,55926,55918],{"class":53332},[76,55928,53339],{"class":90},[76,55930,55931,55933,55935,55937,55939],{"class":78,"line":646},[76,55932,584],{"class":90},[76,55934,55918],{"class":53332},[76,55936,55924],{"class":90},[76,55938,55918],{"class":53332},[76,55940,53339],{"class":90},[76,55942,55943],{"class":78,"line":659},[76,55944,55945],{"class":90},"const bt = document.querySelector('button')\n",[76,55947,55948],{"class":78,"line":1608},[76,55949,55950],{"class":90},"bt.disabled = false\n",[26,55952,55953],{"start":94},[29,55954,55955],{},"自定义属性",[19,55957,55958],{},[3583,55959],{"alt":71,"src":55960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[66,55962,55964],{"className":55099,"code":55963,"language":55101,"meta":71,"style":71},"\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",[73,55965,55966,55974,56002,56021,56040,56059,56078,56086,56091,56096,56101,56106,56114],{"__ignoreMap":71},[76,55967,55968,55970,55972],{"class":78,"line":79},[76,55969,584],{"class":90},[76,55971,53832],{"class":53332},[76,55973,53339],{"class":90},[76,55975,55976,55978,55980,55983,55985,55987,55990,55992,55995,55998,56000],{"class":78,"line":94},[76,55977,54176],{"class":90},[76,55979,53643],{"class":53332},[76,55981,55982],{"class":86}," data-id",[76,55984,370],{"class":90},[76,55986,5763],{"class":126},[76,55988,55989],{"class":86}," data-spm",[76,55991,370],{"class":90},[76,55993,55994],{"class":126},"\"我不知道\"",[76,55996,55997],{"class":90},">1\u003C\u002F",[76,55999,53643],{"class":53332},[76,56001,53339],{"class":90},[76,56003,56004,56006,56008,56010,56012,56014,56017,56019],{"class":78,"line":133},[76,56005,54176],{"class":90},[76,56007,53643],{"class":53332},[76,56009,55982],{"class":86},[76,56011,370],{"class":90},[76,56013,5786],{"class":126},[76,56015,56016],{"class":90},">2\u003C\u002F",[76,56018,53643],{"class":53332},[76,56020,53339],{"class":90},[76,56022,56023,56025,56027,56029,56031,56033,56036,56038],{"class":78,"line":145},[76,56024,54176],{"class":90},[76,56026,53643],{"class":53332},[76,56028,55982],{"class":86},[76,56030,370],{"class":90},[76,56032,5799],{"class":126},[76,56034,56035],{"class":90},">3\u003C\u002F",[76,56037,53643],{"class":53332},[76,56039,53339],{"class":90},[76,56041,56042,56044,56046,56048,56050,56052,56055,56057],{"class":78,"line":152},[76,56043,54176],{"class":90},[76,56045,53643],{"class":53332},[76,56047,55982],{"class":86},[76,56049,370],{"class":90},[76,56051,5812],{"class":126},[76,56053,56054],{"class":90},">4\u003C\u002F",[76,56056,53643],{"class":53332},[76,56058,53339],{"class":90},[76,56060,56061,56063,56065,56067,56069,56071,56074,56076],{"class":78,"line":157},[76,56062,54176],{"class":90},[76,56064,53643],{"class":53332},[76,56066,55982],{"class":86},[76,56068,370],{"class":90},[76,56070,5832],{"class":126},[76,56072,56073],{"class":90},">5\u003C\u002F",[76,56075,53643],{"class":53332},[76,56077,53339],{"class":90},[76,56079,56080,56082,56084],{"class":78,"line":246},[76,56081,54176],{"class":90},[76,56083,53845],{"class":53332},[76,56085,53339],{"class":90},[76,56087,56088],{"class":78,"line":251},[76,56089,56090],{"class":90},"    const one = document.querySelector('div')\n",[76,56092,56093],{"class":78,"line":257},[76,56094,56095],{"class":90},"    console.log(one.dataset)\n",[76,56097,56098],{"class":78,"line":641},[76,56099,56100],{"class":90},"    console.log(one.dataset.id)\n",[76,56102,56103],{"class":78,"line":646},[76,56104,56105],{"class":90},"    console.log(one.dataset.spm)\n",[76,56107,56108,56110,56112],{"class":78,"line":659},[76,56109,54449],{"class":90},[76,56111,53845],{"class":53332},[76,56113,53339],{"class":90},[76,56115,56116,56118,56120],{"class":78,"line":1608},[76,56117,53817],{"class":90},[76,56119,53832],{"class":53332},[76,56121,53339],{"class":90},[19,56123,56124],{},[3583,56125],{"alt":71,"src":56126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56128,56129],{},"document.querySelector选择的是第一个对象（元素）",[889,56131,56133],{"id":56132},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56135,56136],{},[3583,56137],{"alt":71,"src":56138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56140,56141],{},[3583,56142],{"alt":71,"src":56143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56145,56146],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53845,56148,56149],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56151,56152],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53845,56154,56155],{},"\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,56157,56158],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56160,56161],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56163,56164],{},"单位为毫秒！！！",[19,56166,56167],{},"可以搭配匿名函数来用！！！",[19,56169,56170],{},"setInterval(function () {",[19,56172,56173],{},"alert('两秒执行一次')",[19,56175,56176],{},"}, 2000)",[19,56178,56179],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56181,56182],{},"function fn() {",[19,56184,56185],{},"document.write(1)",[19,56187,304],{},[19,56189,56190],{},"setInterval(fn, 1000)",[19,56192,56193],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56195,56196],{},"setInterval('fn()', 1000)",[19,56198,56199],{},[3583,56200],{"alt":71,"src":56201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24047,56203,56205],{"id":56204},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[66,56207,56209],{"className":52665,"code":56208,"language":52667,"meta":71,"style":71},"\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",[73,56210,56211,56221,56235,56239,56247,56261,56281,56293,56301,56305,56313,56350,56355,56360,56365,56373,56381,56403,56411,56416,56438,56443,56448,56459,56464,56484,56492,56507,56522,56533,56538,56548,56558,56562,56571,56575,56583,56591,56595],{"__ignoreMap":71},[76,56212,56213,56215,56217,56219],{"class":78,"line":79},[76,56214,53329],{"class":90},[76,56216,53333],{"class":53332},[76,56218,53336],{"class":86},[76,56220,53339],{"class":90},[76,56222,56223,56225,56227,56229,56231,56233],{"class":78,"line":94},[76,56224,584],{"class":90},[76,56226,52667],{"class":53332},[76,56228,53348],{"class":86},[76,56230,370],{"class":90},[76,56232,53353],{"class":126},[76,56234,53339],{"class":90},[76,56236,56237],{"class":78,"line":133},[76,56238,149],{"emptyLinePlaceholder":148},[76,56240,56241,56243,56245],{"class":78,"line":145},[76,56242,584],{"class":90},[76,56244,53366],{"class":53332},[76,56246,53339],{"class":90},[76,56248,56249,56251,56253,56255,56257,56259],{"class":78,"line":152},[76,56250,54176],{"class":90},[76,56252,53376],{"class":53332},[76,56254,53379],{"class":86},[76,56256,370],{"class":90},[76,56258,53384],{"class":126},[76,56260,53339],{"class":90},[76,56262,56263,56265,56267,56269,56271,56273,56275,56277,56279],{"class":78,"line":157},[76,56264,54176],{"class":90},[76,56266,53376],{"class":53332},[76,56268,16972],{"class":86},[76,56270,370],{"class":90},[76,56272,53423],{"class":126},[76,56274,53403],{"class":86},[76,56276,370],{"class":90},[76,56278,53430],{"class":126},[76,56280,53339],{"class":90},[76,56282,56283,56285,56287,56289,56291],{"class":78,"line":246},[76,56284,54176],{"class":90},[76,56286,53439],{"class":53332},[76,56288,53442],{"class":90},[76,56290,53439],{"class":53332},[76,56292,53339],{"class":90},[76,56294,56295,56297,56299],{"class":78,"line":251},[76,56296,53817],{"class":90},[76,56298,53366],{"class":53332},[76,56300,53339],{"class":90},[76,56302,56303],{"class":78,"line":257},[76,56304,149],{"emptyLinePlaceholder":148},[76,56306,56307,56309,56311],{"class":78,"line":641},[76,56308,584],{"class":90},[76,56310,53832],{"class":53332},[76,56312,53339],{"class":90},[76,56314,56315,56317,56320,56322,56324,56326,56328,56330,56332,56335,56337,56340,56343,56345,56348],{"class":78,"line":646},[76,56316,54176],{"class":90},[76,56318,56319],{"class":53332},"textarea",[76,56321,16972],{"class":86},[76,56323,370],{"class":90},[76,56325,9730],{"class":126},[76,56327,17011],{"class":86},[76,56329,370],{"class":90},[76,56331,9730],{"class":126},[76,56333,56334],{"class":86}," cols",[76,56336,370],{"class":90},[76,56338,56339],{"class":126},"\"30\"",[76,56341,56342],{"class":86}," rows",[76,56344,370],{"class":90},[76,56346,56347],{"class":126},"\"10\"",[76,56349,53339],{"class":90},[76,56351,56352],{"class":78,"line":659},[76,56353,56354],{"class":90},"        用户注册协议\n",[76,56356,56357],{"class":78,"line":1608},[76,56358,56359],{"class":90},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[76,56361,56362],{"class":78,"line":1632},[76,56363,56364],{"class":90},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[76,56366,56367,56369,56371],{"class":78,"line":1637},[76,56368,53808],{"class":90},[76,56370,56319],{"class":53332},[76,56372,53339],{"class":90},[76,56374,56375,56377,56379],{"class":78,"line":1642},[76,56376,54176],{"class":90},[76,56378,55748],{"class":53332},[76,56380,53339],{"class":90},[76,56382,56383,56385,56387,56389,56391,56394,56396,56399,56401],{"class":78,"line":1652},[76,56384,54176],{"class":90},[76,56386,55918],{"class":53332},[76,56388,55518],{"class":86},[76,56390,370],{"class":90},[76,56392,56393],{"class":126},"\"btn\"",[76,56395,55921],{"class":86},[76,56397,56398],{"class":90},">我已经阅读用户协议(5)\u003C\u002F",[76,56400,55918],{"class":53332},[76,56402,53339],{"class":90},[76,56404,56405,56407,56409],{"class":78,"line":1660},[76,56406,54176],{"class":90},[76,56408,53845],{"class":53332},[76,56410,53339],{"class":90},[76,56412,56413],{"class":78,"line":1683},[76,56414,56415],{"class":540},"    \u002F\u002F 1. 获取元素\n",[76,56417,56418,56420,56423,56425,56428,56431,56433,56436],{"class":78,"line":1698},[76,56419,13275],{"class":82},[76,56421,56422],{"class":119}," btn",[76,56424,15617],{"class":82},[76,56426,56427],{"class":90}," document.",[76,56429,56430],{"class":86},"querySelector",[76,56432,123],{"class":90},[76,56434,56435],{"class":126},"'.btn'",[76,56437,130],{"class":90},[76,56439,56440],{"class":78,"line":1711},[76,56441,56442],{"class":540},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[76,56444,56445],{"class":78,"line":1717},[76,56446,56447],{"class":540},"    \u002F\u002F 2. 倒计时\n",[76,56449,56450,56452,56454,56456],{"class":78,"line":1728},[76,56451,54251],{"class":82},[76,56453,11505],{"class":90},[76,56455,370],{"class":82},[76,56457,56458],{"class":119}," 5\n",[76,56460,56461],{"class":78,"line":1740},[76,56462,56463],{"class":540},"    \u002F\u002F 2.1 开启定时器\n",[76,56465,56466,56468,56471,56473,56476,56478,56481],{"class":78,"line":1746},[76,56467,54251],{"class":82},[76,56469,56470],{"class":90}," n ",[76,56472,370],{"class":82},[76,56474,56475],{"class":86}," setInterval",[76,56477,123],{"class":90},[76,56479,56480],{"class":82},"function",[76,56482,56483],{"class":90}," () {\n",[76,56485,56486,56489],{"class":78,"line":1751},[76,56487,56488],{"class":90},"      i",[76,56490,56491],{"class":82},"--\n",[76,56493,56494,56497,56499,56502,56504],{"class":78,"line":1756},[76,56495,56496],{"class":90},"      btn.innerHTML ",[76,56498,370],{"class":82},[76,56500,56501],{"class":126}," `我已经阅读用户协议(${",[76,56503,2705],{"class":90},[76,56505,56506],{"class":126},"})`\n",[76,56508,56509,56512,56515,56518,56520],{"class":78,"line":1766},[76,56510,56511],{"class":82},"      if",[76,56513,56514],{"class":90}," (i ",[76,56516,56517],{"class":82},"===",[76,56519,587],{"class":119},[76,56521,14495],{"class":90},[76,56523,56524,56527,56530],{"class":78,"line":1773},[76,56525,56526],{"class":86},"        clearInterval",[76,56528,56529],{"class":90},"(n)  ",[76,56531,56532],{"class":540},"\u002F\u002F 关闭定时器\n",[76,56534,56535],{"class":78,"line":1793},[76,56536,56537],{"class":540},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[76,56539,56540,56543,56545],{"class":78,"line":1806},[76,56541,56542],{"class":90},"        btn.disabled ",[76,56544,370],{"class":82},[76,56546,56547],{"class":119}," false\n",[76,56549,56550,56553,56555],{"class":78,"line":1817},[76,56551,56552],{"class":90},"        btn.innerHTML ",[76,56554,370],{"class":82},[76,56556,56557],{"class":126}," '同意'\n",[76,56559,56560],{"class":78,"line":1822},[76,56561,54430],{"class":90},[76,56563,56564,56567,56569],{"class":78,"line":1835},[76,56565,56566],{"class":90},"    }, ",[76,56568,8489],{"class":119},[76,56570,130],{"class":90},[76,56572,56573],{"class":78,"line":1847},[76,56574,149],{"emptyLinePlaceholder":148},[76,56576,56577,56579,56581],{"class":78,"line":1852},[76,56578,54449],{"class":90},[76,56580,53845],{"class":53332},[76,56582,53339],{"class":90},[76,56584,56585,56587,56589],{"class":78,"line":1862},[76,56586,53817],{"class":90},[76,56588,53832],{"class":53332},[76,56590,53339],{"class":90},[76,56592,56593],{"class":78,"line":1874},[76,56594,149],{"emptyLinePlaceholder":148},[76,56596,56597,56599,56601],{"class":78,"line":1879},[76,56598,53817],{"class":90},[76,56600,52667],{"class":53332},[76,56602,53339],{"class":90},[19,56604,56605],{},"不要一直想着用死循环,避免死循环",[19,56607,56608,56611],{},[73,56609,56610],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24047,56613,56615],{"id":56614},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56617,56618],{},[29,56619,56620],{},"法1",[66,56622,56624],{"className":52665,"code":56623,"language":52667,"meta":71,"style":71},"\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",[73,56625,56626,56636,56650,56654,56662,56676,56696,56708,56716,56722,56733,56744,56748,56752,56759,56771,56775,56779,56786,56798,56812,56825,56839,56843,56847,56854,56865,56876,56887,56899,56911,56923,56927,56931,56939,56949,56962,56974,56987,56991,56995,57002,57012,57024,57036,57047,57058,57068,57080,57092,57096,57100,57109,57121,57133,57161,57174,57178,57182,57189,57200,57204,57212,57220,57224,57232,57246,57261,57285,57293,57308,57321,57329,57350,57362,57374,57386,57398,57410,57422,57434,57443,57451,57459,57467,57479,57502,57521,57540,57559,57578,57597,57616,57636,57640,57660,57679,57699,57720,57730,57747,57757,57767,57777,57782,57787,57792,57797,57822,57835,57839,57862,57866,57874,57882,57890,57894],{"__ignoreMap":71},[76,56627,56628,56630,56632,56634],{"class":78,"line":79},[76,56629,53329],{"class":90},[76,56631,53333],{"class":53332},[76,56633,53336],{"class":86},[76,56635,53339],{"class":90},[76,56637,56638,56640,56642,56644,56646,56648],{"class":78,"line":94},[76,56639,584],{"class":90},[76,56641,52667],{"class":53332},[76,56643,53348],{"class":86},[76,56645,370],{"class":90},[76,56647,53353],{"class":126},[76,56649,53339],{"class":90},[76,56651,56652],{"class":78,"line":133},[76,56653,149],{"emptyLinePlaceholder":148},[76,56655,56656,56658,56660],{"class":78,"line":145},[76,56657,584],{"class":90},[76,56659,53366],{"class":53332},[76,56661,53339],{"class":90},[76,56663,56664,56666,56668,56670,56672,56674],{"class":78,"line":152},[76,56665,54176],{"class":90},[76,56667,53376],{"class":53332},[76,56669,53379],{"class":86},[76,56671,370],{"class":90},[76,56673,53384],{"class":126},[76,56675,53339],{"class":90},[76,56677,56678,56680,56682,56684,56686,56688,56690,56692,56694],{"class":78,"line":157},[76,56679,54176],{"class":90},[76,56681,53376],{"class":53332},[76,56683,16972],{"class":86},[76,56685,370],{"class":90},[76,56687,53423],{"class":126},[76,56689,53403],{"class":86},[76,56691,370],{"class":90},[76,56693,53430],{"class":126},[76,56695,53339],{"class":90},[76,56697,56698,56700,56702,56704,56706],{"class":78,"line":246},[76,56699,54176],{"class":90},[76,56701,53439],{"class":53332},[76,56703,53442],{"class":90},[76,56705,53439],{"class":53332},[76,56707,53339],{"class":90},[76,56709,56710,56712,56714],{"class":78,"line":251},[76,56711,54176],{"class":90},[76,56713,2178],{"class":53332},[76,56715,53339],{"class":90},[76,56717,56718,56720],{"class":78,"line":257},[76,56719,8482],{"class":53332},[76,56721,17623],{"class":90},[76,56723,56724,56727,56729,56731],{"class":78,"line":641},[76,56725,56726],{"class":119},"      padding",[76,56728,53469],{"class":90},[76,56730,1294],{"class":119},[76,56732,3415],{"class":90},[76,56734,56735,56738,56740,56742],{"class":78,"line":646},[76,56736,56737],{"class":119},"      margin",[76,56739,53469],{"class":90},[76,56741,1294],{"class":119},[76,56743,3415],{"class":90},[76,56745,56746],{"class":78,"line":659},[76,56747,4283],{"class":90},[76,56749,56750],{"class":78,"line":1608},[76,56751,149],{"emptyLinePlaceholder":148},[76,56753,56754,56757],{"class":78,"line":1632},[76,56755,56756],{"class":53332},"    li",[76,56758,17623],{"class":90},[76,56760,56761,56764,56766,56769],{"class":78,"line":1637},[76,56762,56763],{"class":119},"      list-style",[76,56765,53469],{"class":90},[76,56767,56768],{"class":119},"none",[76,56770,3415],{"class":90},[76,56772,56773],{"class":78,"line":1642},[76,56774,4283],{"class":90},[76,56776,56777],{"class":78,"line":1652},[76,56778,149],{"emptyLinePlaceholder":148},[76,56780,56781,56784],{"class":78,"line":1660},[76,56782,56783],{"class":86},"    .box",[76,56785,17623],{"class":90},[76,56787,56788,56791,56793,56796],{"class":78,"line":1683},[76,56789,56790],{"class":119},"      position",[76,56792,53469],{"class":90},[76,56794,56795],{"class":119},"relative",[76,56797,3415],{"class":90},[76,56799,56800,56803,56805,56808,56810],{"class":78,"line":1698},[76,56801,56802],{"class":119},"      width",[76,56804,53469],{"class":90},[76,56806,56807],{"class":119},"976",[76,56809,53524],{"class":82},[76,56811,3415],{"class":90},[76,56813,56814,56817,56819,56821,56823],{"class":78,"line":1711},[76,56815,56816],{"class":119},"      height",[76,56818,53469],{"class":90},[76,56820,3659],{"class":119},[76,56822,53524],{"class":82},[76,56824,3415],{"class":90},[76,56826,56827,56829,56831,56833,56835,56837],{"class":78,"line":1717},[76,56828,56737],{"class":119},[76,56830,53469],{"class":90},[76,56832,2575],{"class":119},[76,56834,53524],{"class":82},[76,56836,53588],{"class":119},[76,56838,3415],{"class":90},[76,56840,56841],{"class":78,"line":1728},[76,56842,4283],{"class":90},[76,56844,56845],{"class":78,"line":1740},[76,56846,149],{"emptyLinePlaceholder":148},[76,56848,56849,56852],{"class":78,"line":1746},[76,56850,56851],{"class":86},"    .slider-footer",[76,56853,17623],{"class":90},[76,56855,56856,56858,56860,56863],{"class":78,"line":1751},[76,56857,56790],{"class":119},[76,56859,53469],{"class":90},[76,56861,56862],{"class":119},"absolute",[76,56864,3415],{"class":90},[76,56866,56867,56870,56872,56874],{"class":78,"line":1756},[76,56868,56869],{"class":119},"      left",[76,56871,53469],{"class":90},[76,56873,1294],{"class":119},[76,56875,3415],{"class":90},[76,56877,56878,56881,56883,56885],{"class":78,"line":1766},[76,56879,56880],{"class":119},"      bottom",[76,56882,53469],{"class":90},[76,56884,1294],{"class":119},[76,56886,3415],{"class":90},[76,56888,56889,56891,56893,56895,56897],{"class":78,"line":1773},[76,56890,56802],{"class":119},[76,56892,53469],{"class":90},[76,56894,2575],{"class":119},[76,56896,2592],{"class":82},[76,56898,3415],{"class":90},[76,56900,56901,56903,56905,56907,56909],{"class":78,"line":1793},[76,56902,56816],{"class":119},[76,56904,53469],{"class":90},[76,56906,2836],{"class":119},[76,56908,2592],{"class":82},[76,56910,3415],{"class":90},[76,56912,56913,56916,56918,56921],{"class":78,"line":1806},[76,56914,56915],{"class":119},"      background-color",[76,56917,53469],{"class":90},[76,56919,56920],{"class":119},"skyblue",[76,56922,3415],{"class":90},[76,56924,56925],{"class":78,"line":1817},[76,56926,4283],{"class":90},[76,56928,56929],{"class":78,"line":1822},[76,56930,149],{"emptyLinePlaceholder":148},[76,56932,56933,56935,56937],{"class":78,"line":1835},[76,56934,56851],{"class":86},[76,56936,8903],{"class":53332},[76,56938,17623],{"class":90},[76,56940,56941,56943,56945,56947],{"class":78,"line":1847},[76,56942,56790],{"class":119},[76,56944,53469],{"class":90},[76,56946,56862],{"class":119},[76,56948,3415],{"class":90},[76,56950,56951,56954,56956,56958,56960],{"class":78,"line":1852},[76,56952,56953],{"class":119},"      font-size",[76,56955,53469],{"class":90},[76,56957,3158],{"class":119},[76,56959,53524],{"class":82},[76,56961,3415],{"class":90},[76,56963,56964,56966,56968,56970,56972],{"class":78,"line":1862},[76,56965,56869],{"class":119},[76,56967,53469],{"class":90},[76,56969,408],{"class":119},[76,56971,53524],{"class":82},[76,56973,3415],{"class":90},[76,56975,56976,56979,56981,56983,56985],{"class":78,"line":1874},[76,56977,56978],{"class":119},"      top",[76,56980,53469],{"class":90},[76,56982,2583],{"class":119},[76,56984,53524],{"class":82},[76,56986,3415],{"class":90},[76,56988,56989],{"class":78,"line":1879},[76,56990,4283],{"class":90},[76,56992,56993],{"class":78,"line":1884},[76,56994,149],{"emptyLinePlaceholder":148},[76,56996,56997,57000],{"class":78,"line":1889},[76,56998,56999],{"class":53332},"    ul",[76,57001,17623],{"class":90},[76,57003,57004,57006,57008,57010],{"class":78,"line":1900},[76,57005,56790],{"class":119},[76,57007,53469],{"class":90},[76,57009,56862],{"class":119},[76,57011,3415],{"class":90},[76,57013,57014,57016,57018,57020,57022],{"class":78,"line":1906},[76,57015,56978],{"class":119},[76,57017,53469],{"class":90},[76,57019,3039],{"class":119},[76,57021,53524],{"class":82},[76,57023,3415],{"class":90},[76,57025,57026,57028,57030,57032,57034],{"class":78,"line":1924},[76,57027,56869],{"class":119},[76,57029,53469],{"class":90},[76,57031,408],{"class":119},[76,57033,53524],{"class":82},[76,57035,3415],{"class":90},[76,57037,57038,57041,57043,57045],{"class":78,"line":1929},[76,57039,57040],{"class":119},"      display",[76,57042,53469],{"class":90},[76,57044,53509],{"class":119},[76,57046,3415],{"class":90},[76,57048,57049,57052,57054,57056],{"class":78,"line":1944},[76,57050,57051],{"class":119},"      justify-content",[76,57053,53469],{"class":90},[76,57055,53700],{"class":119},[76,57057,3415],{"class":90},[76,57059,57060,57062,57064,57066],{"class":78,"line":1950},[76,57061,56790],{"class":119},[76,57063,53469],{"class":90},[76,57065,56862],{"class":119},[76,57067,3415],{"class":90},[76,57069,57070,57072,57074,57076,57078],{"class":78,"line":1965},[76,57071,56802],{"class":119},[76,57073,53469],{"class":90},[76,57075,6076],{"class":119},[76,57077,53524],{"class":82},[76,57079,3415],{"class":90},[76,57081,57082,57084,57086,57088,57090],{"class":78,"line":1971},[76,57083,56816],{"class":119},[76,57085,53469],{"class":90},[76,57087,408],{"class":119},[76,57089,53524],{"class":82},[76,57091,3415],{"class":90},[76,57093,57094],{"class":78,"line":1985},[76,57095,4283],{"class":90},[76,57097,57098],{"class":78,"line":1991},[76,57099,149],{"emptyLinePlaceholder":148},[76,57101,57102,57104,57107],{"class":78,"line":2005},[76,57103,56999],{"class":53332},[76,57105,57106],{"class":53332}," li",[76,57108,17623],{"class":90},[76,57110,57111,57113,57115,57117,57119],{"class":78,"line":2017},[76,57112,56802],{"class":119},[76,57114,53469],{"class":90},[76,57116,408],{"class":119},[76,57118,53524],{"class":82},[76,57120,3415],{"class":90},[76,57122,57123,57125,57127,57129,57131],{"class":78,"line":2023},[76,57124,56816],{"class":119},[76,57126,53469],{"class":90},[76,57128,408],{"class":119},[76,57130,53524],{"class":82},[76,57132,3415],{"class":90},[76,57134,57135,57137,57139,57142,57144,57146,57148,57150,57152,57154,57156,57159],{"class":78,"line":2031},[76,57136,56915],{"class":119},[76,57138,53469],{"class":90},[76,57140,57141],{"class":119},"rgba",[76,57143,123],{"class":90},[76,57145,1294],{"class":119},[76,57147,405],{"class":90},[76,57149,1294],{"class":119},[76,57151,405],{"class":90},[76,57153,1294],{"class":119},[76,57155,405],{"class":90},[76,57157,57158],{"class":119},".4",[76,57160,4807],{"class":90},[76,57162,57163,57166,57168,57170,57172],{"class":78,"line":11880},[76,57164,57165],{"class":119},"      border-radius",[76,57167,53469],{"class":90},[76,57169,402],{"class":119},[76,57171,53524],{"class":82},[76,57173,3415],{"class":90},[76,57175,57176],{"class":78,"line":11901},[76,57177,4283],{"class":90},[76,57179,57180],{"class":78,"line":11907},[76,57181,149],{"emptyLinePlaceholder":148},[76,57183,57184,57187],{"class":78,"line":11921},[76,57185,57186],{"class":86},"    .activate",[76,57188,17623],{"class":90},[76,57190,57191,57193,57195,57198],{"class":78,"line":11927},[76,57192,56915],{"class":119},[76,57194,53469],{"class":90},[76,57196,57197],{"class":119},"#f7f7f7",[76,57199,3415],{"class":90},[76,57201,57202],{"class":78,"line":11954},[76,57203,4283],{"class":90},[76,57205,57206,57208,57210],{"class":78,"line":11963},[76,57207,54449],{"class":90},[76,57209,2178],{"class":53332},[76,57211,53339],{"class":90},[76,57213,57214,57216,57218],{"class":78,"line":11969},[76,57215,53817],{"class":90},[76,57217,53366],{"class":53332},[76,57219,53339],{"class":90},[76,57221,57222],{"class":78,"line":11977},[76,57223,149],{"emptyLinePlaceholder":148},[76,57225,57226,57228,57230],{"class":78,"line":11982},[76,57227,584],{"class":90},[76,57229,53832],{"class":53332},[76,57231,53339],{"class":90},[76,57233,57234,57236,57238,57240,57242,57244],{"class":78,"line":18654},[76,57235,54176],{"class":90},[76,57237,53643],{"class":53332},[76,57239,55518],{"class":86},[76,57241,370],{"class":90},[76,57243,55523],{"class":126},[76,57245,53339],{"class":90},[76,57247,57248,57250,57252,57254,57256,57259],{"class":78,"line":18660},[76,57249,53373],{"class":90},[76,57251,53643],{"class":53332},[76,57253,55518],{"class":86},[76,57255,370],{"class":90},[76,57257,57258],{"class":126},"\"slider-wrapper\"",[76,57260,53339],{"class":90},[76,57262,57263,57266,57268,57271,57273,57276,57279,57281,57283],{"class":78,"line":18683},[76,57264,57265],{"class":90},"      \u003C",[76,57267,3583],{"class":53332},[76,57269,57270],{"class":86}," src",[76,57272,370],{"class":90},[76,57274,57275],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,57277,57278],{"class":86}," alt",[76,57280,370],{"class":90},[76,57282,9730],{"class":126},[76,57284,53339],{"class":90},[76,57286,57287,57289,57291],{"class":78,"line":18689},[76,57288,53808],{"class":90},[76,57290,53643],{"class":53332},[76,57292,53339],{"class":90},[76,57294,57295,57297,57299,57301,57303,57306],{"class":78,"line":18712},[76,57296,53373],{"class":90},[76,57298,53643],{"class":53332},[76,57300,55518],{"class":86},[76,57302,370],{"class":90},[76,57304,57305],{"class":126},"\"slider-footer\"",[76,57307,53339],{"class":90},[76,57309,57310,57312,57314,57317,57319],{"class":78,"line":18726},[76,57311,57265],{"class":90},[76,57313,19],{"class":53332},[76,57315,57316],{"class":90},">对人类来说会不会太超前了?\u003C\u002F",[76,57318,19],{"class":53332},[76,57320,53339],{"class":90},[76,57322,57323,57325,57327],{"class":78,"line":18746},[76,57324,57265],{"class":90},[76,57326,3261],{"class":53332},[76,57328,53339],{"class":90},[76,57330,57331,57334,57336,57338,57340,57343,57346,57348],{"class":78,"line":18752},[76,57332,57333],{"class":90},"        \u003C",[76,57335,29],{"class":53332},[76,57337,55518],{"class":86},[76,57339,370],{"class":90},[76,57341,57342],{"class":126},"\"activate\"",[76,57344,57345],{"class":90},">\u003C\u002F",[76,57347,29],{"class":53332},[76,57349,53339],{"class":90},[76,57351,57352,57354,57356,57358,57360],{"class":78,"line":18763},[76,57353,57333],{"class":90},[76,57355,29],{"class":53332},[76,57357,57345],{"class":90},[76,57359,29],{"class":53332},[76,57361,53339],{"class":90},[76,57363,57364,57366,57368,57370,57372],{"class":78,"line":18786},[76,57365,57333],{"class":90},[76,57367,29],{"class":53332},[76,57369,57345],{"class":90},[76,57371,29],{"class":53332},[76,57373,53339],{"class":90},[76,57375,57376,57378,57380,57382,57384],{"class":78,"line":18808},[76,57377,57333],{"class":90},[76,57379,29],{"class":53332},[76,57381,57345],{"class":90},[76,57383,29],{"class":53332},[76,57385,53339],{"class":90},[76,57387,57388,57390,57392,57394,57396],{"class":78,"line":18813},[76,57389,57333],{"class":90},[76,57391,29],{"class":53332},[76,57393,57345],{"class":90},[76,57395,29],{"class":53332},[76,57397,53339],{"class":90},[76,57399,57400,57402,57404,57406,57408],{"class":78,"line":18819},[76,57401,57333],{"class":90},[76,57403,29],{"class":53332},[76,57405,57345],{"class":90},[76,57407,29],{"class":53332},[76,57409,53339],{"class":90},[76,57411,57412,57414,57416,57418,57420],{"class":78,"line":18833},[76,57413,57333],{"class":90},[76,57415,29],{"class":53332},[76,57417,57345],{"class":90},[76,57419,29],{"class":53332},[76,57421,53339],{"class":90},[76,57423,57424,57426,57428,57430,57432],{"class":78,"line":18846},[76,57425,57333],{"class":90},[76,57427,29],{"class":53332},[76,57429,57345],{"class":90},[76,57431,29],{"class":53332},[76,57433,53339],{"class":90},[76,57435,57436,57439,57441],{"class":78,"line":18851},[76,57437,57438],{"class":90},"      \u003C\u002F",[76,57440,3261],{"class":53332},[76,57442,53339],{"class":90},[76,57444,57445,57447,57449],{"class":78,"line":18865},[76,57446,53808],{"class":90},[76,57448,53643],{"class":53332},[76,57450,53339],{"class":90},[76,57452,57453,57455,57457],{"class":78,"line":18870},[76,57454,54449],{"class":90},[76,57456,53643],{"class":53332},[76,57458,53339],{"class":90},[76,57460,57461,57463,57465],{"class":78,"line":18876},[76,57462,54176],{"class":90},[76,57464,53845],{"class":53332},[76,57466,53339],{"class":90},[76,57468,57469,57471,57474,57476],{"class":78,"line":18881},[76,57470,13275],{"class":82},[76,57472,57473],{"class":119}," arrImage",[76,57475,15617],{"class":82},[76,57477,57478],{"class":90}," [\n",[76,57480,57481,57484,57487,57490,57493,57496,57499],{"class":78,"line":18895},[76,57482,57483],{"class":90},"      { url: ",[76,57485,57486],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[76,57488,57489],{"class":90},", title: ",[76,57491,57492],{"class":126},"'对人类来说会不会太超前了?'",[76,57494,57495],{"class":90},", color: ",[76,57497,57498],{"class":126},"'rgba(100,67,68)'",[76,57500,57501],{"class":90}," },\n",[76,57503,57504,57506,57509,57511,57514,57516,57519],{"class":78,"line":18900},[76,57505,57483],{"class":90},[76,57507,57508],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[76,57510,57489],{"class":90},[76,57512,57513],{"class":126},"'开启剑与雪的黑暗传说!'",[76,57515,57495],{"class":90},[76,57517,57518],{"class":126},"'rgba(43,35,26)'",[76,57520,57501],{"class":90},[76,57522,57523,57525,57528,57530,57533,57535,57538],{"class":78,"line":18905},[76,57524,57483],{"class":90},[76,57526,57527],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[76,57529,57489],{"class":90},[76,57531,57532],{"class":126},"'真正的jo厨出现了!'",[76,57534,57495],{"class":90},[76,57536,57537],{"class":126},"'rgba(36,31,33)'",[76,57539,57501],{"class":90},[76,57541,57542,57544,57547,57549,57552,57554,57557],{"class":78,"line":18919},[76,57543,57483],{"class":90},[76,57545,57546],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[76,57548,57489],{"class":90},[76,57550,57551],{"class":126},"'李玉刚:让世界通过b站看到东方大国文化'",[76,57553,57495],{"class":90},[76,57555,57556],{"class":126},"'rgba(139,98,66)'",[76,57558,57501],{"class":90},[76,57560,57561,57563,57566,57568,57571,57573,57576],{"class":78,"line":18931},[76,57562,57483],{"class":90},[76,57564,57565],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[76,57567,57489],{"class":90},[76,57569,57570],{"class":126},"'快来分享你的寒假日常吧'",[76,57572,57495],{"class":90},[76,57574,57575],{"class":126},"'rgba(67,90,92)'",[76,57577,57501],{"class":90},[76,57579,57580,57582,57585,57587,57590,57592,57595],{"class":78,"line":18936},[76,57581,57483],{"class":90},[76,57583,57584],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[76,57586,57489],{"class":90},[76,57588,57589],{"class":126},"'哔哩哔哩小年YEAR'",[76,57591,57495],{"class":90},[76,57593,57594],{"class":126},"'rgba(166,131,143)'",[76,57596,57501],{"class":90},[76,57598,57599,57601,57604,57606,57609,57611,57614],{"class":78,"line":18949},[76,57600,57483],{"class":90},[76,57602,57603],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[76,57605,57489],{"class":90},[76,57607,57608],{"class":126},"'一站式解决你的电脑配置问题'",[76,57610,57495],{"class":90},[76,57612,57613],{"class":126},"'rgba(53,29,25)'",[76,57615,57501],{"class":90},[76,57617,57618,57620,57623,57625,57628,57630,57633],{"class":78,"line":18954},[76,57619,57483],{"class":90},[76,57621,57622],{"class":126},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[76,57624,57489],{"class":90},[76,57626,57627],{"class":126},"'谁不想和小猫咪贴贴呢?'",[76,57629,57495],{"class":90},[76,57631,57632],{"class":126},"'rgba(99,72,114)'",[76,57634,57635],{"class":90}," }\n",[76,57637,57638],{"class":78,"line":18959},[76,57639,55141],{"class":90},[76,57641,57642,57644,57647,57649,57651,57653,57655,57658],{"class":78,"line":18964},[76,57643,13275],{"class":82},[76,57645,57646],{"class":119}," img",[76,57648,15617],{"class":82},[76,57650,56427],{"class":90},[76,57652,56430],{"class":86},[76,57654,123],{"class":90},[76,57656,57657],{"class":126},"'.slider-wrapper img'",[76,57659,130],{"class":90},[76,57661,57662,57664,57666,57668,57670,57672,57674,57677],{"class":78,"line":18977},[76,57663,13275],{"class":82},[76,57665,8903],{"class":119},[76,57667,15617],{"class":82},[76,57669,56427],{"class":90},[76,57671,56430],{"class":86},[76,57673,123],{"class":90},[76,57675,57676],{"class":126},"'.slider-footer p'",[76,57678,130],{"class":90},[76,57680,57681,57683,57686,57688,57690,57692,57694,57697],{"class":78,"line":18982},[76,57682,13275],{"class":82},[76,57684,57685],{"class":119}," color",[76,57687,15617],{"class":82},[76,57689,56427],{"class":90},[76,57691,56430],{"class":86},[76,57693,123],{"class":90},[76,57695,57696],{"class":126},"'.slider-footer'",[76,57698,130],{"class":90},[76,57700,57701,57703,57706,57708,57710,57713,57715,57718],{"class":78,"line":34671},[76,57702,13275],{"class":82},[76,57704,57705],{"class":119}," lis",[76,57707,15617],{"class":82},[76,57709,56427],{"class":90},[76,57711,57712],{"class":86},"querySelectorAll",[76,57714,123],{"class":90},[76,57716,57717],{"class":126},"'.slider-footer ul li'",[76,57719,130],{"class":90},[76,57721,57722,57724,57726,57728],{"class":78,"line":34677},[76,57723,54251],{"class":82},[76,57725,11505],{"class":90},[76,57727,370],{"class":82},[76,57729,1063],{"class":119},[76,57731,57732,57734,57737,57739,57741,57743,57745],{"class":78,"line":34683},[76,57733,54251],{"class":82},[76,57735,57736],{"class":90}," timer ",[76,57738,370],{"class":82},[76,57740,56475],{"class":86},[76,57742,123],{"class":90},[76,57744,56480],{"class":82},[76,57746,56483],{"class":90},[76,57748,57749,57752,57754],{"class":78,"line":34689},[76,57750,57751],{"class":90},"      img.src ",[76,57753,370],{"class":82},[76,57755,57756],{"class":90}," arrImage[i].url\n",[76,57758,57759,57762,57764],{"class":78,"line":34695},[76,57760,57761],{"class":90},"      p.innerHTML ",[76,57763,370],{"class":82},[76,57765,57766],{"class":90}," arrImage[i].title\n",[76,57768,57769,57772,57774],{"class":78,"line":34706},[76,57770,57771],{"class":90},"      color.style.backgroundColor ",[76,57773,370],{"class":82},[76,57775,57776],{"class":90}," arrImage[i].color\n",[76,57778,57779],{"class":78,"line":34712},[76,57780,57781],{"class":540},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[76,57783,57784],{"class":78,"line":34732},[76,57785,57786],{"class":540},"      \u002F\u002F li.classList.add('activate')\n",[76,57788,57789],{"class":78,"line":34738},[76,57790,57791],{"class":540},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[76,57793,57794],{"class":78,"line":34749},[76,57795,57796],{"class":540},"      \u002F\u002F lis[i].classList.remove('activate')\n",[76,57798,57799,57802,57804,57806,57809,57812,57815,57817,57820],{"class":78,"line":34755},[76,57800,57801],{"class":90},"      document.",[76,57803,56430],{"class":86},[76,57805,123],{"class":90},[76,57807,57808],{"class":126},"'.activate'",[76,57810,57811],{"class":90},")?.classList.",[76,57813,57814],{"class":86},"toggle",[76,57816,123],{"class":90},[76,57818,57819],{"class":126},"'activate'",[76,57821,130],{"class":90},[76,57823,57824,57827,57829,57831,57833],{"class":78,"line":34761},[76,57825,57826],{"class":90},"      lis[i].classList.",[76,57828,7414],{"class":86},[76,57830,123],{"class":90},[76,57832,57819],{"class":126},[76,57834,130],{"class":90},[76,57836,57837],{"class":78,"line":34767},[76,57838,149],{"emptyLinePlaceholder":148},[76,57840,57841,57844,57846,57848,57850,57852,57854,57856,57859],{"class":78,"line":34773},[76,57842,57843],{"class":90},"      i ",[76,57845,370],{"class":82},[76,57847,56514],{"class":90},[76,57849,376],{"class":82},[76,57851,27168],{"class":119},[76,57853,15767],{"class":90},[76,57855,2592],{"class":82},[76,57857,57858],{"class":90}," arrImage.",[76,57860,57861],{"class":119},"length\n",[76,57863,57864],{"class":78,"line":34779},[76,57865,149],{"emptyLinePlaceholder":148},[76,57867,57868,57870,57872],{"class":78,"line":34785},[76,57869,56566],{"class":90},[76,57871,8489],{"class":119},[76,57873,130],{"class":90},[76,57875,57876,57878,57880],{"class":78,"line":34791},[76,57877,54449],{"class":90},[76,57879,53845],{"class":53332},[76,57881,53339],{"class":90},[76,57883,57884,57886,57888],{"class":78,"line":34811},[76,57885,53817],{"class":90},[76,57887,53832],{"class":53332},[76,57889,53339],{"class":90},[76,57891,57892],{"class":78,"line":34817},[76,57893,149],{"emptyLinePlaceholder":148},[76,57895,57896,57898,57900],{"class":78,"line":34833},[76,57897,53817],{"class":90},[76,57899,52667],{"class":53332},[76,57901,53339],{"class":90},[19,57903,57904],{},[3583,57905],{"alt":71,"src":57906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57908,57909],{},"?.就是短路保护,确保输出正常进行",[19,57911,57912],{},"不要忘记取余%,有时候可以用",[19,57914,57915],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57917,57918],{"start":94},[29,57919,57920],{},"法2",[66,57922,57924],{"className":52665,"code":57923,"language":52667,"meta":71,"style":71},"\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",[73,57925,57926,57936,57950,57954,57962,57976,57996,58008,58016,58022,58032,58042,58046,58050,58056,58066,58070,58074,58080,58090,58102,58114,58128,58132,58136,58142,58152,58162,58172,58184,58196,58206,58210,58214,58222,58232,58244,58256,58268,58272,58276,58282,58292,58304,58316,58326,58336,58346,58358,58370,58374,58378,58386,58398,58410,58436,58448,58452,58456,58462,58472,58476,58484,58492,58496,58504,58518,58532,58552,58560,58574,58586,58594,58612,58624,58636,58648,58660,58672,58684,58696,58704,58712,58720,58728,58739,58755,58771,58787,58803,58819,58835,58851,58867,58871,58876,58894,58912,58922,58927,58932,58943,58949,58964,58973,58977,58982,58991,58996,59005,59010,59015,59020,59043,59073,59077,59085,59089,59097,59105,59109],{"__ignoreMap":71},[76,57927,57928,57930,57932,57934],{"class":78,"line":79},[76,57929,53329],{"class":90},[76,57931,53333],{"class":53332},[76,57933,53336],{"class":86},[76,57935,53339],{"class":90},[76,57937,57938,57940,57942,57944,57946,57948],{"class":78,"line":94},[76,57939,584],{"class":90},[76,57941,52667],{"class":53332},[76,57943,53348],{"class":86},[76,57945,370],{"class":90},[76,57947,53353],{"class":126},[76,57949,53339],{"class":90},[76,57951,57952],{"class":78,"line":133},[76,57953,149],{"emptyLinePlaceholder":148},[76,57955,57956,57958,57960],{"class":78,"line":145},[76,57957,584],{"class":90},[76,57959,53366],{"class":53332},[76,57961,53339],{"class":90},[76,57963,57964,57966,57968,57970,57972,57974],{"class":78,"line":152},[76,57965,54176],{"class":90},[76,57967,53376],{"class":53332},[76,57969,53379],{"class":86},[76,57971,370],{"class":90},[76,57973,53384],{"class":126},[76,57975,53339],{"class":90},[76,57977,57978,57980,57982,57984,57986,57988,57990,57992,57994],{"class":78,"line":157},[76,57979,54176],{"class":90},[76,57981,53376],{"class":53332},[76,57983,16972],{"class":86},[76,57985,370],{"class":90},[76,57987,53423],{"class":126},[76,57989,53403],{"class":86},[76,57991,370],{"class":90},[76,57993,53430],{"class":126},[76,57995,53339],{"class":90},[76,57997,57998,58000,58002,58004,58006],{"class":78,"line":246},[76,57999,54176],{"class":90},[76,58001,53439],{"class":53332},[76,58003,53442],{"class":90},[76,58005,53439],{"class":53332},[76,58007,53339],{"class":90},[76,58009,58010,58012,58014],{"class":78,"line":251},[76,58011,54176],{"class":90},[76,58013,2178],{"class":53332},[76,58015,53339],{"class":90},[76,58017,58018,58020],{"class":78,"line":257},[76,58019,8482],{"class":53332},[76,58021,17623],{"class":90},[76,58023,58024,58026,58028,58030],{"class":78,"line":641},[76,58025,56726],{"class":119},[76,58027,53469],{"class":90},[76,58029,1294],{"class":119},[76,58031,3415],{"class":90},[76,58033,58034,58036,58038,58040],{"class":78,"line":646},[76,58035,56737],{"class":119},[76,58037,53469],{"class":90},[76,58039,1294],{"class":119},[76,58041,3415],{"class":90},[76,58043,58044],{"class":78,"line":659},[76,58045,4283],{"class":90},[76,58047,58048],{"class":78,"line":1608},[76,58049,149],{"emptyLinePlaceholder":148},[76,58051,58052,58054],{"class":78,"line":1632},[76,58053,56756],{"class":53332},[76,58055,17623],{"class":90},[76,58057,58058,58060,58062,58064],{"class":78,"line":1637},[76,58059,56763],{"class":119},[76,58061,53469],{"class":90},[76,58063,56768],{"class":119},[76,58065,3415],{"class":90},[76,58067,58068],{"class":78,"line":1642},[76,58069,4283],{"class":90},[76,58071,58072],{"class":78,"line":1652},[76,58073,149],{"emptyLinePlaceholder":148},[76,58075,58076,58078],{"class":78,"line":1660},[76,58077,56783],{"class":86},[76,58079,17623],{"class":90},[76,58081,58082,58084,58086,58088],{"class":78,"line":1683},[76,58083,56790],{"class":119},[76,58085,53469],{"class":90},[76,58087,56795],{"class":119},[76,58089,3415],{"class":90},[76,58091,58092,58094,58096,58098,58100],{"class":78,"line":1698},[76,58093,56802],{"class":119},[76,58095,53469],{"class":90},[76,58097,56807],{"class":119},[76,58099,53524],{"class":82},[76,58101,3415],{"class":90},[76,58103,58104,58106,58108,58110,58112],{"class":78,"line":1711},[76,58105,56816],{"class":119},[76,58107,53469],{"class":90},[76,58109,3659],{"class":119},[76,58111,53524],{"class":82},[76,58113,3415],{"class":90},[76,58115,58116,58118,58120,58122,58124,58126],{"class":78,"line":1717},[76,58117,56737],{"class":119},[76,58119,53469],{"class":90},[76,58121,2575],{"class":119},[76,58123,53524],{"class":82},[76,58125,53588],{"class":119},[76,58127,3415],{"class":90},[76,58129,58130],{"class":78,"line":1728},[76,58131,4283],{"class":90},[76,58133,58134],{"class":78,"line":1740},[76,58135,149],{"emptyLinePlaceholder":148},[76,58137,58138,58140],{"class":78,"line":1746},[76,58139,56851],{"class":86},[76,58141,17623],{"class":90},[76,58143,58144,58146,58148,58150],{"class":78,"line":1751},[76,58145,56790],{"class":119},[76,58147,53469],{"class":90},[76,58149,56862],{"class":119},[76,58151,3415],{"class":90},[76,58153,58154,58156,58158,58160],{"class":78,"line":1756},[76,58155,56869],{"class":119},[76,58157,53469],{"class":90},[76,58159,1294],{"class":119},[76,58161,3415],{"class":90},[76,58163,58164,58166,58168,58170],{"class":78,"line":1766},[76,58165,56880],{"class":119},[76,58167,53469],{"class":90},[76,58169,1294],{"class":119},[76,58171,3415],{"class":90},[76,58173,58174,58176,58178,58180,58182],{"class":78,"line":1773},[76,58175,56802],{"class":119},[76,58177,53469],{"class":90},[76,58179,2575],{"class":119},[76,58181,2592],{"class":82},[76,58183,3415],{"class":90},[76,58185,58186,58188,58190,58192,58194],{"class":78,"line":1793},[76,58187,56816],{"class":119},[76,58189,53469],{"class":90},[76,58191,2836],{"class":119},[76,58193,2592],{"class":82},[76,58195,3415],{"class":90},[76,58197,58198,58200,58202,58204],{"class":78,"line":1806},[76,58199,56915],{"class":119},[76,58201,53469],{"class":90},[76,58203,56920],{"class":119},[76,58205,3415],{"class":90},[76,58207,58208],{"class":78,"line":1817},[76,58209,4283],{"class":90},[76,58211,58212],{"class":78,"line":1822},[76,58213,149],{"emptyLinePlaceholder":148},[76,58215,58216,58218,58220],{"class":78,"line":1835},[76,58217,56851],{"class":86},[76,58219,8903],{"class":53332},[76,58221,17623],{"class":90},[76,58223,58224,58226,58228,58230],{"class":78,"line":1847},[76,58225,56790],{"class":119},[76,58227,53469],{"class":90},[76,58229,56862],{"class":119},[76,58231,3415],{"class":90},[76,58233,58234,58236,58238,58240,58242],{"class":78,"line":1852},[76,58235,56953],{"class":119},[76,58237,53469],{"class":90},[76,58239,3158],{"class":119},[76,58241,53524],{"class":82},[76,58243,3415],{"class":90},[76,58245,58246,58248,58250,58252,58254],{"class":78,"line":1862},[76,58247,56869],{"class":119},[76,58249,53469],{"class":90},[76,58251,408],{"class":119},[76,58253,53524],{"class":82},[76,58255,3415],{"class":90},[76,58257,58258,58260,58262,58264,58266],{"class":78,"line":1874},[76,58259,56978],{"class":119},[76,58261,53469],{"class":90},[76,58263,2583],{"class":119},[76,58265,53524],{"class":82},[76,58267,3415],{"class":90},[76,58269,58270],{"class":78,"line":1879},[76,58271,4283],{"class":90},[76,58273,58274],{"class":78,"line":1884},[76,58275,149],{"emptyLinePlaceholder":148},[76,58277,58278,58280],{"class":78,"line":1889},[76,58279,56999],{"class":53332},[76,58281,17623],{"class":90},[76,58283,58284,58286,58288,58290],{"class":78,"line":1900},[76,58285,56790],{"class":119},[76,58287,53469],{"class":90},[76,58289,56862],{"class":119},[76,58291,3415],{"class":90},[76,58293,58294,58296,58298,58300,58302],{"class":78,"line":1906},[76,58295,56978],{"class":119},[76,58297,53469],{"class":90},[76,58299,3039],{"class":119},[76,58301,53524],{"class":82},[76,58303,3415],{"class":90},[76,58305,58306,58308,58310,58312,58314],{"class":78,"line":1924},[76,58307,56869],{"class":119},[76,58309,53469],{"class":90},[76,58311,408],{"class":119},[76,58313,53524],{"class":82},[76,58315,3415],{"class":90},[76,58317,58318,58320,58322,58324],{"class":78,"line":1929},[76,58319,57040],{"class":119},[76,58321,53469],{"class":90},[76,58323,53509],{"class":119},[76,58325,3415],{"class":90},[76,58327,58328,58330,58332,58334],{"class":78,"line":1944},[76,58329,57051],{"class":119},[76,58331,53469],{"class":90},[76,58333,53700],{"class":119},[76,58335,3415],{"class":90},[76,58337,58338,58340,58342,58344],{"class":78,"line":1950},[76,58339,56790],{"class":119},[76,58341,53469],{"class":90},[76,58343,56862],{"class":119},[76,58345,3415],{"class":90},[76,58347,58348,58350,58352,58354,58356],{"class":78,"line":1965},[76,58349,56802],{"class":119},[76,58351,53469],{"class":90},[76,58353,6076],{"class":119},[76,58355,53524],{"class":82},[76,58357,3415],{"class":90},[76,58359,58360,58362,58364,58366,58368],{"class":78,"line":1971},[76,58361,56816],{"class":119},[76,58363,53469],{"class":90},[76,58365,408],{"class":119},[76,58367,53524],{"class":82},[76,58369,3415],{"class":90},[76,58371,58372],{"class":78,"line":1985},[76,58373,4283],{"class":90},[76,58375,58376],{"class":78,"line":1991},[76,58377,149],{"emptyLinePlaceholder":148},[76,58379,58380,58382,58384],{"class":78,"line":2005},[76,58381,56999],{"class":53332},[76,58383,57106],{"class":53332},[76,58385,17623],{"class":90},[76,58387,58388,58390,58392,58394,58396],{"class":78,"line":2017},[76,58389,56802],{"class":119},[76,58391,53469],{"class":90},[76,58393,408],{"class":119},[76,58395,53524],{"class":82},[76,58397,3415],{"class":90},[76,58399,58400,58402,58404,58406,58408],{"class":78,"line":2023},[76,58401,56816],{"class":119},[76,58403,53469],{"class":90},[76,58405,408],{"class":119},[76,58407,53524],{"class":82},[76,58409,3415],{"class":90},[76,58411,58412,58414,58416,58418,58420,58422,58424,58426,58428,58430,58432,58434],{"class":78,"line":2031},[76,58413,56915],{"class":119},[76,58415,53469],{"class":90},[76,58417,57141],{"class":119},[76,58419,123],{"class":90},[76,58421,1294],{"class":119},[76,58423,405],{"class":90},[76,58425,1294],{"class":119},[76,58427,405],{"class":90},[76,58429,1294],{"class":119},[76,58431,405],{"class":90},[76,58433,57158],{"class":119},[76,58435,4807],{"class":90},[76,58437,58438,58440,58442,58444,58446],{"class":78,"line":11880},[76,58439,57165],{"class":119},[76,58441,53469],{"class":90},[76,58443,402],{"class":119},[76,58445,53524],{"class":82},[76,58447,3415],{"class":90},[76,58449,58450],{"class":78,"line":11901},[76,58451,4283],{"class":90},[76,58453,58454],{"class":78,"line":11907},[76,58455,149],{"emptyLinePlaceholder":148},[76,58457,58458,58460],{"class":78,"line":11921},[76,58459,57186],{"class":86},[76,58461,17623],{"class":90},[76,58463,58464,58466,58468,58470],{"class":78,"line":11927},[76,58465,56915],{"class":119},[76,58467,53469],{"class":90},[76,58469,57197],{"class":119},[76,58471,3415],{"class":90},[76,58473,58474],{"class":78,"line":11954},[76,58475,4283],{"class":90},[76,58477,58478,58480,58482],{"class":78,"line":11963},[76,58479,54449],{"class":90},[76,58481,2178],{"class":53332},[76,58483,53339],{"class":90},[76,58485,58486,58488,58490],{"class":78,"line":11969},[76,58487,53817],{"class":90},[76,58489,53366],{"class":53332},[76,58491,53339],{"class":90},[76,58493,58494],{"class":78,"line":11977},[76,58495,149],{"emptyLinePlaceholder":148},[76,58497,58498,58500,58502],{"class":78,"line":11982},[76,58499,584],{"class":90},[76,58501,53832],{"class":53332},[76,58503,53339],{"class":90},[76,58505,58506,58508,58510,58512,58514,58516],{"class":78,"line":18654},[76,58507,54176],{"class":90},[76,58509,53643],{"class":53332},[76,58511,55518],{"class":86},[76,58513,370],{"class":90},[76,58515,55523],{"class":126},[76,58517,53339],{"class":90},[76,58519,58520,58522,58524,58526,58528,58530],{"class":78,"line":18660},[76,58521,53373],{"class":90},[76,58523,53643],{"class":53332},[76,58525,55518],{"class":86},[76,58527,370],{"class":90},[76,58529,57258],{"class":126},[76,58531,53339],{"class":90},[76,58533,58534,58536,58538,58540,58542,58544,58546,58548,58550],{"class":78,"line":18683},[76,58535,57265],{"class":90},[76,58537,3583],{"class":53332},[76,58539,57270],{"class":86},[76,58541,370],{"class":90},[76,58543,57275],{"class":126},[76,58545,57278],{"class":86},[76,58547,370],{"class":90},[76,58549,9730],{"class":126},[76,58551,53339],{"class":90},[76,58553,58554,58556,58558],{"class":78,"line":18689},[76,58555,53808],{"class":90},[76,58557,53643],{"class":53332},[76,58559,53339],{"class":90},[76,58561,58562,58564,58566,58568,58570,58572],{"class":78,"line":18712},[76,58563,53373],{"class":90},[76,58565,53643],{"class":53332},[76,58567,55518],{"class":86},[76,58569,370],{"class":90},[76,58571,57305],{"class":126},[76,58573,53339],{"class":90},[76,58575,58576,58578,58580,58582,58584],{"class":78,"line":18726},[76,58577,57265],{"class":90},[76,58579,19],{"class":53332},[76,58581,57316],{"class":90},[76,58583,19],{"class":53332},[76,58585,53339],{"class":90},[76,58587,58588,58590,58592],{"class":78,"line":18746},[76,58589,57265],{"class":90},[76,58591,3261],{"class":53332},[76,58593,53339],{"class":90},[76,58595,58596,58598,58600,58602,58604,58606,58608,58610],{"class":78,"line":18752},[76,58597,57333],{"class":90},[76,58599,29],{"class":53332},[76,58601,55518],{"class":86},[76,58603,370],{"class":90},[76,58605,57342],{"class":126},[76,58607,57345],{"class":90},[76,58609,29],{"class":53332},[76,58611,53339],{"class":90},[76,58613,58614,58616,58618,58620,58622],{"class":78,"line":18763},[76,58615,57333],{"class":90},[76,58617,29],{"class":53332},[76,58619,57345],{"class":90},[76,58621,29],{"class":53332},[76,58623,53339],{"class":90},[76,58625,58626,58628,58630,58632,58634],{"class":78,"line":18786},[76,58627,57333],{"class":90},[76,58629,29],{"class":53332},[76,58631,57345],{"class":90},[76,58633,29],{"class":53332},[76,58635,53339],{"class":90},[76,58637,58638,58640,58642,58644,58646],{"class":78,"line":18808},[76,58639,57333],{"class":90},[76,58641,29],{"class":53332},[76,58643,57345],{"class":90},[76,58645,29],{"class":53332},[76,58647,53339],{"class":90},[76,58649,58650,58652,58654,58656,58658],{"class":78,"line":18813},[76,58651,57333],{"class":90},[76,58653,29],{"class":53332},[76,58655,57345],{"class":90},[76,58657,29],{"class":53332},[76,58659,53339],{"class":90},[76,58661,58662,58664,58666,58668,58670],{"class":78,"line":18819},[76,58663,57333],{"class":90},[76,58665,29],{"class":53332},[76,58667,57345],{"class":90},[76,58669,29],{"class":53332},[76,58671,53339],{"class":90},[76,58673,58674,58676,58678,58680,58682],{"class":78,"line":18833},[76,58675,57333],{"class":90},[76,58677,29],{"class":53332},[76,58679,57345],{"class":90},[76,58681,29],{"class":53332},[76,58683,53339],{"class":90},[76,58685,58686,58688,58690,58692,58694],{"class":78,"line":18846},[76,58687,57333],{"class":90},[76,58689,29],{"class":53332},[76,58691,57345],{"class":90},[76,58693,29],{"class":53332},[76,58695,53339],{"class":90},[76,58697,58698,58700,58702],{"class":78,"line":18851},[76,58699,57438],{"class":90},[76,58701,3261],{"class":53332},[76,58703,53339],{"class":90},[76,58705,58706,58708,58710],{"class":78,"line":18865},[76,58707,53808],{"class":90},[76,58709,53643],{"class":53332},[76,58711,53339],{"class":90},[76,58713,58714,58716,58718],{"class":78,"line":18870},[76,58715,54449],{"class":90},[76,58717,53643],{"class":53332},[76,58719,53339],{"class":90},[76,58721,58722,58724,58726],{"class":78,"line":18876},[76,58723,54176],{"class":90},[76,58725,53845],{"class":53332},[76,58727,53339],{"class":90},[76,58729,58730,58732,58735,58737],{"class":78,"line":18881},[76,58731,13275],{"class":82},[76,58733,58734],{"class":119}," sliderData",[76,58736,15617],{"class":82},[76,58738,57478],{"class":90},[76,58740,58741,58743,58745,58747,58749,58751,58753],{"class":78,"line":18895},[76,58742,57483],{"class":90},[76,58744,57486],{"class":126},[76,58746,57489],{"class":90},[76,58748,57492],{"class":126},[76,58750,57495],{"class":90},[76,58752,57498],{"class":126},[76,58754,57501],{"class":90},[76,58756,58757,58759,58761,58763,58765,58767,58769],{"class":78,"line":18900},[76,58758,57483],{"class":90},[76,58760,57508],{"class":126},[76,58762,57489],{"class":90},[76,58764,57513],{"class":126},[76,58766,57495],{"class":90},[76,58768,57518],{"class":126},[76,58770,57501],{"class":90},[76,58772,58773,58775,58777,58779,58781,58783,58785],{"class":78,"line":18905},[76,58774,57483],{"class":90},[76,58776,57527],{"class":126},[76,58778,57489],{"class":90},[76,58780,57532],{"class":126},[76,58782,57495],{"class":90},[76,58784,57537],{"class":126},[76,58786,57501],{"class":90},[76,58788,58789,58791,58793,58795,58797,58799,58801],{"class":78,"line":18919},[76,58790,57483],{"class":90},[76,58792,57546],{"class":126},[76,58794,57489],{"class":90},[76,58796,57551],{"class":126},[76,58798,57495],{"class":90},[76,58800,57556],{"class":126},[76,58802,57501],{"class":90},[76,58804,58805,58807,58809,58811,58813,58815,58817],{"class":78,"line":18931},[76,58806,57483],{"class":90},[76,58808,57565],{"class":126},[76,58810,57489],{"class":90},[76,58812,57570],{"class":126},[76,58814,57495],{"class":90},[76,58816,57575],{"class":126},[76,58818,57501],{"class":90},[76,58820,58821,58823,58825,58827,58829,58831,58833],{"class":78,"line":18936},[76,58822,57483],{"class":90},[76,58824,57584],{"class":126},[76,58826,57489],{"class":90},[76,58828,57589],{"class":126},[76,58830,57495],{"class":90},[76,58832,57594],{"class":126},[76,58834,57501],{"class":90},[76,58836,58837,58839,58841,58843,58845,58847,58849],{"class":78,"line":18949},[76,58838,57483],{"class":90},[76,58840,57603],{"class":126},[76,58842,57489],{"class":90},[76,58844,57608],{"class":126},[76,58846,57495],{"class":90},[76,58848,57613],{"class":126},[76,58850,57501],{"class":90},[76,58852,58853,58855,58857,58859,58861,58863,58865],{"class":78,"line":18954},[76,58854,57483],{"class":90},[76,58856,57622],{"class":126},[76,58858,57489],{"class":90},[76,58860,57627],{"class":126},[76,58862,57495],{"class":90},[76,58864,57632],{"class":126},[76,58866,57635],{"class":90},[76,58868,58869],{"class":78,"line":18959},[76,58870,55141],{"class":90},[76,58872,58873],{"class":78,"line":18964},[76,58874,58875],{"class":540},"    \u002F\u002F 1.获取元素\n",[76,58877,58878,58880,58882,58884,58886,58888,58890,58892],{"class":78,"line":18977},[76,58879,13275],{"class":82},[76,58881,57646],{"class":119},[76,58883,15617],{"class":82},[76,58885,56427],{"class":90},[76,58887,56430],{"class":86},[76,58889,123],{"class":90},[76,58891,57657],{"class":126},[76,58893,130],{"class":90},[76,58895,58896,58898,58900,58902,58904,58906,58908,58910],{"class":78,"line":18982},[76,58897,13275],{"class":82},[76,58899,8903],{"class":119},[76,58901,15617],{"class":82},[76,58903,56427],{"class":90},[76,58905,56430],{"class":86},[76,58907,123],{"class":90},[76,58909,57676],{"class":126},[76,58911,130],{"class":90},[76,58913,58914,58916,58918,58920],{"class":78,"line":34671},[76,58915,54251],{"class":82},[76,58917,11505],{"class":90},[76,58919,370],{"class":82},[76,58921,1027],{"class":119},[76,58923,58924],{"class":78,"line":34677},[76,58925,58926],{"class":540},"    \u002F\u002F 2.开启定时器\n",[76,58928,58929],{"class":78,"line":34683},[76,58930,58931],{"class":540},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[76,58933,58934,58937,58939,58941],{"class":78,"line":34689},[76,58935,58936],{"class":86},"    setInterval",[76,58938,123],{"class":90},[76,58940,56480],{"class":82},[76,58942,56483],{"class":90},[76,58944,58945,58947],{"class":78,"line":34695},[76,58946,56488],{"class":90},[76,58948,4790],{"class":82},[76,58950,58951,58953,58955,58957,58960,58962],{"class":78,"line":34706},[76,58952,56511],{"class":82},[76,58954,56514],{"class":90},[76,58956,611],{"class":82},[76,58958,58959],{"class":90}," sliderData.",[76,58961,54000],{"class":119},[76,58963,14495],{"class":90},[76,58965,58966,58969,58971],{"class":78,"line":34712},[76,58967,58968],{"class":90},"        i ",[76,58970,370],{"class":82},[76,58972,1027],{"class":119},[76,58974,58975],{"class":78,"line":34732},[76,58976,54430],{"class":90},[76,58978,58979],{"class":78,"line":34738},[76,58980,58981],{"class":540},"      \u002F\u002F 更换图片路径\n",[76,58983,58984,58986,58988],{"class":78,"line":34749},[76,58985,57751],{"class":90},[76,58987,370],{"class":82},[76,58989,58990],{"class":90}," sliderData[i].url\n",[76,58992,58993],{"class":78,"line":34755},[76,58994,58995],{"class":540},"      \u002F\u002F 把文字写到p里面\n",[76,58997,58998,59000,59002],{"class":78,"line":34761},[76,58999,57761],{"class":90},[76,59001,370],{"class":82},[76,59003,59004],{"class":90}," sliderData[i].title\n",[76,59006,59007],{"class":78,"line":34767},[76,59008,59009],{"class":540},"      \u002F\u002F 小圆点\n",[76,59011,59012],{"class":78,"line":34773},[76,59013,59014],{"class":540},"      \u002F\u002F 先删除以前的active\n",[76,59016,59017],{"class":78,"line":34779},[76,59018,59019],{"class":540},"      \u002F\u002F 只让当前li添加active\n",[76,59021,59022,59024,59026,59028,59031,59034,59037,59039,59041],{"class":78,"line":34785},[76,59023,57801],{"class":90},[76,59025,56430],{"class":86},[76,59027,123],{"class":90},[76,59029,59030],{"class":126},"'.slider-footer .activate'",[76,59032,59033],{"class":90},").classList.",[76,59035,59036],{"class":86},"remove",[76,59038,123],{"class":90},[76,59040,57819],{"class":126},[76,59042,130],{"class":90},[76,59044,59045,59047,59049,59051,59054,59056,59058,59060,59063,59065,59067,59069,59071],{"class":78,"line":34791},[76,59046,57801],{"class":90},[76,59048,56430],{"class":86},[76,59050,123],{"class":90},[76,59052,59053],{"class":126},"`.slider-footer ul li:nth-child(${",[76,59055,2705],{"class":90},[76,59057,47601],{"class":82},[76,59059,27168],{"class":119},[76,59061,59062],{"class":126},"})`",[76,59064,59033],{"class":90},[76,59066,7414],{"class":86},[76,59068,123],{"class":90},[76,59070,57819],{"class":126},[76,59072,130],{"class":90},[76,59074,59075],{"class":78,"line":34811},[76,59076,149],{"emptyLinePlaceholder":148},[76,59078,59079,59081,59083],{"class":78,"line":34817},[76,59080,56566],{"class":90},[76,59082,8489],{"class":119},[76,59084,130],{"class":90},[76,59086,59087],{"class":78,"line":34833},[76,59088,149],{"emptyLinePlaceholder":148},[76,59090,59091,59093,59095],{"class":78,"line":34839},[76,59092,54449],{"class":90},[76,59094,53845],{"class":53332},[76,59096,53339],{"class":90},[76,59098,59099,59101,59103],{"class":78,"line":34853},[76,59100,53817],{"class":90},[76,59102,53832],{"class":53332},[76,59104,53339],{"class":90},[76,59106,59107],{"class":78,"line":34859},[76,59108,149],{"emptyLinePlaceholder":148},[76,59110,59111,59113,59115],{"class":78,"line":34874},[76,59112,53817],{"class":90},[76,59114,52667],{"class":53332},[76,59116,53339],{"class":90},[889,59118,59120],{"id":59119},"_317-重要知识点","3.1.7 重要知识点",[19,59122,59123,59124],{},"浏览器在渲染文本时， ",[2416,59125,59126],{},"没有空格或换行符就没有“断行点”",[19,59128,59129],{},[3583,59130],{"alt":71,"src":59131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59133,59134],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59136,59137],{},[3583,59138],{"alt":71,"src":59139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59141,59142],{},[3583,59143],{"alt":71,"src":59144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59146,59148],{"id":59147},"_32-dom事件基础","3.2 DOM事件基础",[889,59150,59152],{"id":59151},"_321-事件监听","3.2.1 事件监听",[19,59154,59155],{},[3583,59156],{"alt":71,"src":59157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59159,59160],{},"事件监听有响应的发生",[19,59162,59163],{},[3583,59164],{"alt":71,"src":59165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59167,59168],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59170,59171],{},"对于有名函数,要执行的函数名后边不要加()",[889,59173,59175],{"id":59174},"_322-随机点名案例","3.2.2 随机点名案例",[66,59177,59179],{"className":52665,"code":59178,"language":52667,"meta":71,"style":71},"\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",[73,59180,59181,59191,59205,59209,59217,59231,59251,59263,59271,59277,59287,59297,59301,59305,59312,59323,59327,59331,59337,59349,59363,59373,59385,59398,59402,59406,59413,59417,59430,59442,59454,59458,59462,59466,59473,59483,59487,59491,59500,59512,59524,59539,59543,59551,59559,59563,59571,59584,59598,59611,59631,59639,59654,59674,59694,59702,59706,59714,59719,59755,59775,59780,59799,59804,59815,59820,59831,59836,59855,59870,59875,59901,59911,59920,59925,59941,59946,59951,59956,59971,59975,59979,59984,60003,60020,60028,60033,60048,60052,60056,60064,60072,60076],{"__ignoreMap":71},[76,59182,59183,59185,59187,59189],{"class":78,"line":79},[76,59184,53329],{"class":90},[76,59186,53333],{"class":53332},[76,59188,53336],{"class":86},[76,59190,53339],{"class":90},[76,59192,59193,59195,59197,59199,59201,59203],{"class":78,"line":94},[76,59194,584],{"class":90},[76,59196,52667],{"class":53332},[76,59198,53348],{"class":86},[76,59200,370],{"class":90},[76,59202,53353],{"class":126},[76,59204,53339],{"class":90},[76,59206,59207],{"class":78,"line":133},[76,59208,149],{"emptyLinePlaceholder":148},[76,59210,59211,59213,59215],{"class":78,"line":145},[76,59212,584],{"class":90},[76,59214,53366],{"class":53332},[76,59216,53339],{"class":90},[76,59218,59219,59221,59223,59225,59227,59229],{"class":78,"line":152},[76,59220,54176],{"class":90},[76,59222,53376],{"class":53332},[76,59224,53379],{"class":86},[76,59226,370],{"class":90},[76,59228,53384],{"class":126},[76,59230,53339],{"class":90},[76,59232,59233,59235,59237,59239,59241,59243,59245,59247,59249],{"class":78,"line":157},[76,59234,54176],{"class":90},[76,59236,53376],{"class":53332},[76,59238,16972],{"class":86},[76,59240,370],{"class":90},[76,59242,53423],{"class":126},[76,59244,53403],{"class":86},[76,59246,370],{"class":90},[76,59248,53430],{"class":126},[76,59250,53339],{"class":90},[76,59252,59253,59255,59257,59259,59261],{"class":78,"line":246},[76,59254,54176],{"class":90},[76,59256,53439],{"class":53332},[76,59258,53442],{"class":90},[76,59260,53439],{"class":53332},[76,59262,53339],{"class":90},[76,59264,59265,59267,59269],{"class":78,"line":251},[76,59266,54176],{"class":90},[76,59268,2178],{"class":53332},[76,59270,53339],{"class":90},[76,59272,59273,59275],{"class":78,"line":257},[76,59274,8482],{"class":53332},[76,59276,17623],{"class":90},[76,59278,59279,59281,59283,59285],{"class":78,"line":641},[76,59280,56737],{"class":119},[76,59282,53469],{"class":90},[76,59284,1294],{"class":119},[76,59286,3415],{"class":90},[76,59288,59289,59291,59293,59295],{"class":78,"line":646},[76,59290,56726],{"class":119},[76,59292,53469],{"class":90},[76,59294,1294],{"class":119},[76,59296,3415],{"class":90},[76,59298,59299],{"class":78,"line":659},[76,59300,4283],{"class":90},[76,59302,59303],{"class":78,"line":1608},[76,59304,149],{"emptyLinePlaceholder":148},[76,59306,59307,59310],{"class":78,"line":1632},[76,59308,59309],{"class":53332},"    h2",[76,59311,17623],{"class":90},[76,59313,59314,59317,59319,59321],{"class":78,"line":1637},[76,59315,59316],{"class":119},"      text-align",[76,59318,53469],{"class":90},[76,59320,53624],{"class":119},[76,59322,3415],{"class":90},[76,59324,59325],{"class":78,"line":1642},[76,59326,4283],{"class":90},[76,59328,59329],{"class":78,"line":1652},[76,59330,149],{"emptyLinePlaceholder":148},[76,59332,59333,59335],{"class":78,"line":1660},[76,59334,56783],{"class":86},[76,59336,17623],{"class":90},[76,59338,59339,59341,59343,59345,59347],{"class":78,"line":1683},[76,59340,56802],{"class":119},[76,59342,53469],{"class":90},[76,59344,3659],{"class":119},[76,59346,53524],{"class":82},[76,59348,3415],{"class":90},[76,59350,59351,59353,59355,59357,59359,59361],{"class":78,"line":1698},[76,59352,56737],{"class":119},[76,59354,53469],{"class":90},[76,59356,2915],{"class":119},[76,59358,53524],{"class":82},[76,59360,53588],{"class":119},[76,59362,3415],{"class":90},[76,59364,59365,59367,59369,59371],{"class":78,"line":1711},[76,59366,57040],{"class":119},[76,59368,53469],{"class":90},[76,59370,53509],{"class":119},[76,59372,3415],{"class":90},[76,59374,59375,59377,59379,59381,59383],{"class":78,"line":1717},[76,59376,56953],{"class":119},[76,59378,53469],{"class":90},[76,59380,3083],{"class":119},[76,59382,53524],{"class":82},[76,59384,3415],{"class":90},[76,59386,59387,59390,59392,59394,59396],{"class":78,"line":1728},[76,59388,59389],{"class":119},"      line-height",[76,59391,53469],{"class":90},[76,59393,2665],{"class":119},[76,59395,53524],{"class":82},[76,59397,3415],{"class":90},[76,59399,59400],{"class":78,"line":1740},[76,59401,4283],{"class":90},[76,59403,59404],{"class":78,"line":1746},[76,59405,149],{"emptyLinePlaceholder":148},[76,59407,59408,59411],{"class":78,"line":1751},[76,59409,59410],{"class":86},"    .qs",[76,59412,17623],{"class":90},[76,59414,59415],{"class":78,"line":1756},[76,59416,149],{"emptyLinePlaceholder":148},[76,59418,59419,59421,59423,59426,59428],{"class":78,"line":1766},[76,59420,56802],{"class":119},[76,59422,53469],{"class":90},[76,59424,59425],{"class":119},"450",[76,59427,53524],{"class":82},[76,59429,3415],{"class":90},[76,59431,59432,59434,59436,59438,59440],{"class":78,"line":1773},[76,59433,56816],{"class":119},[76,59435,53469],{"class":90},[76,59437,2665],{"class":119},[76,59439,53524],{"class":82},[76,59441,3415],{"class":90},[76,59443,59444,59447,59449,59452],{"class":78,"line":1793},[76,59445,59446],{"class":119},"      color",[76,59448,53469],{"class":90},[76,59450,59451],{"class":119},"red",[76,59453,3415],{"class":90},[76,59455,59456],{"class":78,"line":1806},[76,59457,149],{"emptyLinePlaceholder":148},[76,59459,59460],{"class":78,"line":1817},[76,59461,4283],{"class":90},[76,59463,59464],{"class":78,"line":1822},[76,59465,149],{"emptyLinePlaceholder":148},[76,59467,59468,59471],{"class":78,"line":1835},[76,59469,59470],{"class":86},"    .btns",[76,59472,17623],{"class":90},[76,59474,59475,59477,59479,59481],{"class":78,"line":1847},[76,59476,59316],{"class":119},[76,59478,53469],{"class":90},[76,59480,53624],{"class":119},[76,59482,3415],{"class":90},[76,59484,59485],{"class":78,"line":1852},[76,59486,4283],{"class":90},[76,59488,59489],{"class":78,"line":1862},[76,59490,149],{"emptyLinePlaceholder":148},[76,59492,59493,59495,59498],{"class":78,"line":1874},[76,59494,59470],{"class":86},[76,59496,59497],{"class":53332}," button",[76,59499,17623],{"class":90},[76,59501,59502,59504,59506,59508,59510],{"class":78,"line":1879},[76,59503,56802],{"class":119},[76,59505,53469],{"class":90},[76,59507,3075],{"class":119},[76,59509,53524],{"class":82},[76,59511,3415],{"class":90},[76,59513,59514,59516,59518,59520,59522],{"class":78,"line":1884},[76,59515,56816],{"class":119},[76,59517,53469],{"class":90},[76,59519,2537],{"class":119},[76,59521,53524],{"class":82},[76,59523,3415],{"class":90},[76,59525,59526,59528,59530,59532,59535,59537],{"class":78,"line":1889},[76,59527,56737],{"class":119},[76,59529,53469],{"class":90},[76,59531,1294],{"class":119},[76,59533,59534],{"class":119}," 50",[76,59536,53524],{"class":82},[76,59538,3415],{"class":90},[76,59540,59541],{"class":78,"line":1900},[76,59542,4283],{"class":90},[76,59544,59545,59547,59549],{"class":78,"line":1906},[76,59546,54449],{"class":90},[76,59548,2178],{"class":53332},[76,59550,53339],{"class":90},[76,59552,59553,59555,59557],{"class":78,"line":1924},[76,59554,53817],{"class":90},[76,59556,53366],{"class":53332},[76,59558,53339],{"class":90},[76,59560,59561],{"class":78,"line":1929},[76,59562,149],{"emptyLinePlaceholder":148},[76,59564,59565,59567,59569],{"class":78,"line":1944},[76,59566,584],{"class":90},[76,59568,53832],{"class":53332},[76,59570,53339],{"class":90},[76,59572,59573,59575,59577,59580,59582],{"class":78,"line":1950},[76,59574,54176],{"class":90},[76,59576,14],{"class":53332},[76,59578,59579],{"class":90},">随机点名\u003C\u002F",[76,59581,14],{"class":53332},[76,59583,53339],{"class":90},[76,59585,59586,59588,59590,59592,59594,59596],{"class":78,"line":1965},[76,59587,54176],{"class":90},[76,59589,53643],{"class":53332},[76,59591,55518],{"class":86},[76,59593,370],{"class":90},[76,59595,55523],{"class":126},[76,59597,53339],{"class":90},[76,59599,59600,59602,59604,59607,59609],{"class":78,"line":1971},[76,59601,53373],{"class":90},[76,59603,76],{"class":53332},[76,59605,59606],{"class":90},">名字是：\u003C\u002F",[76,59608,76],{"class":53332},[76,59610,53339],{"class":90},[76,59612,59613,59615,59617,59619,59621,59624,59627,59629],{"class":78,"line":1985},[76,59614,53373],{"class":90},[76,59616,53643],{"class":53332},[76,59618,55518],{"class":86},[76,59620,370],{"class":90},[76,59622,59623],{"class":126},"\"qs\"",[76,59625,59626],{"class":90},">这里显示姓名\u003C\u002F",[76,59628,53643],{"class":53332},[76,59630,53339],{"class":90},[76,59632,59633,59635,59637],{"class":78,"line":1991},[76,59634,54449],{"class":90},[76,59636,53643],{"class":53332},[76,59638,53339],{"class":90},[76,59640,59641,59643,59645,59647,59649,59652],{"class":78,"line":2005},[76,59642,54176],{"class":90},[76,59644,53643],{"class":53332},[76,59646,55518],{"class":86},[76,59648,370],{"class":90},[76,59650,59651],{"class":126},"\"btns\"",[76,59653,53339],{"class":90},[76,59655,59656,59658,59660,59662,59664,59667,59670,59672],{"class":78,"line":2017},[76,59657,53373],{"class":90},[76,59659,55918],{"class":53332},[76,59661,55518],{"class":86},[76,59663,370],{"class":90},[76,59665,59666],{"class":126},"\"start\"",[76,59668,59669],{"class":90},">开始\u003C\u002F",[76,59671,55918],{"class":53332},[76,59673,53339],{"class":90},[76,59675,59676,59678,59680,59682,59684,59687,59690,59692],{"class":78,"line":2023},[76,59677,53373],{"class":90},[76,59679,55918],{"class":53332},[76,59681,55518],{"class":86},[76,59683,370],{"class":90},[76,59685,59686],{"class":126},"\"end\"",[76,59688,59689],{"class":90},">结束\u003C\u002F",[76,59691,55918],{"class":53332},[76,59693,53339],{"class":90},[76,59695,59696,59698,59700],{"class":78,"line":2031},[76,59697,54449],{"class":90},[76,59699,53643],{"class":53332},[76,59701,53339],{"class":90},[76,59703,59704],{"class":78,"line":11880},[76,59705,149],{"emptyLinePlaceholder":148},[76,59707,59708,59710,59712],{"class":78,"line":11901},[76,59709,54176],{"class":90},[76,59711,53845],{"class":53332},[76,59713,53339],{"class":90},[76,59715,59716],{"class":78,"line":11907},[76,59717,59718],{"class":540},"    \u002F\u002F 数据数组\n",[76,59720,59721,59723,59726,59728,59730,59733,59735,59738,59740,59743,59745,59748,59750,59753],{"class":78,"line":11921},[76,59722,13275],{"class":82},[76,59724,59725],{"class":119}," arr",[76,59727,15617],{"class":82},[76,59729,54258],{"class":90},[76,59731,59732],{"class":126},"'马超'",[76,59734,405],{"class":90},[76,59736,59737],{"class":126},"'黄忠'",[76,59739,405],{"class":90},[76,59741,59742],{"class":126},"'赵云'",[76,59744,405],{"class":90},[76,59746,59747],{"class":126},"'关羽'",[76,59749,405],{"class":90},[76,59751,59752],{"class":126},"'张飞'",[76,59754,35284],{"class":90},[76,59756,59757,59759,59762,59764,59766,59768,59770,59773],{"class":78,"line":11927},[76,59758,13275],{"class":82},[76,59760,59761],{"class":119}," qs",[76,59763,15617],{"class":82},[76,59765,56427],{"class":90},[76,59767,56430],{"class":86},[76,59769,123],{"class":90},[76,59771,59772],{"class":126},"'.qs'",[76,59774,130],{"class":90},[76,59776,59777],{"class":78,"line":11954},[76,59778,59779],{"class":540},"    \u002F\u002F 1.业务1.开始按钮模块\n",[76,59781,59782,59784,59786,59788,59790,59792,59794,59797],{"class":78,"line":11963},[76,59783,13275],{"class":82},[76,59785,6266],{"class":119},[76,59787,15617],{"class":82},[76,59789,56427],{"class":90},[76,59791,56430],{"class":86},[76,59793,123],{"class":90},[76,59795,59796],{"class":126},"'.start'",[76,59798,130],{"class":90},[76,59800,59801],{"class":78,"line":11969},[76,59802,59803],{"class":540},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[76,59805,59806,59808,59811,59813],{"class":78,"line":11977},[76,59807,54251],{"class":82},[76,59809,59810],{"class":90}," timerId ",[76,59812,370],{"class":82},[76,59814,1027],{"class":119},[76,59816,59817],{"class":78,"line":11982},[76,59818,59819],{"class":540},"    \u002F\u002F 随机号要全局变量\n",[76,59821,59822,59824,59827,59829],{"class":78,"line":18654},[76,59823,54251],{"class":82},[76,59825,59826],{"class":90}," random ",[76,59828,370],{"class":82},[76,59830,1027],{"class":119},[76,59832,59833],{"class":78,"line":18660},[76,59834,59835],{"class":540},"    \u002F\u002F 1.1 添加点击事件\n",[76,59837,59838,59841,59844,59846,59849,59851,59853],{"class":78,"line":18683},[76,59839,59840],{"class":90},"    start.",[76,59842,59843],{"class":86},"addEventListener",[76,59845,123],{"class":90},[76,59847,59848],{"class":126},"'click'",[76,59850,405],{"class":90},[76,59852,56480],{"class":82},[76,59854,56483],{"class":90},[76,59856,59857,59860,59862,59864,59866,59868],{"class":78,"line":18689},[76,59858,59859],{"class":90},"      timerId ",[76,59861,370],{"class":82},[76,59863,56475],{"class":86},[76,59865,123],{"class":90},[76,59867,56480],{"class":82},[76,59869,56483],{"class":90},[76,59871,59872],{"class":78,"line":18712},[76,59873,59874],{"class":540},"        \u002F\u002F 随机数\n",[76,59876,59877,59880,59882,59885,59888,59891,59893,59895,59897,59899],{"class":78,"line":18726},[76,59878,59879],{"class":90},"        random ",[76,59881,370],{"class":82},[76,59883,59884],{"class":86}," parseInt",[76,59886,59887],{"class":90},"(Math.",[76,59889,59890],{"class":86},"random",[76,59892,15103],{"class":90},[76,59894,2718],{"class":82},[76,59896,53997],{"class":90},[76,59898,54000],{"class":119},[76,59900,130],{"class":90},[76,59902,59903,59906,59908],{"class":78,"line":18746},[76,59904,59905],{"class":90},"        qs.innerHTML ",[76,59907,370],{"class":82},[76,59909,59910],{"class":90}," arr[random]\n",[76,59912,59913,59916,59918],{"class":78,"line":18752},[76,59914,59915],{"class":90},"      }, ",[76,59917,2537],{"class":119},[76,59919,130],{"class":90},[76,59921,59922],{"class":78,"line":18763},[76,59923,59924],{"class":540},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[76,59926,59927,59929,59932,59934,59937,59939],{"class":78,"line":18786},[76,59928,56511],{"class":82},[76,59930,59931],{"class":90}," (arr.",[76,59933,54000],{"class":119},[76,59935,59936],{"class":82}," ===",[76,59938,27168],{"class":119},[76,59940,14495],{"class":90},[76,59942,59943],{"class":78,"line":18808},[76,59944,59945],{"class":540},"        \u002F\u002F start.disabled = true\n",[76,59947,59948],{"class":78,"line":18813},[76,59949,59950],{"class":540},"        \u002F\u002F end.disabled = true\n",[76,59952,59953],{"class":78,"line":18819},[76,59954,59955],{"class":540},"        \u002F\u002F 可以合起来写\n",[76,59957,59958,59961,59963,59966,59968],{"class":78,"line":18833},[76,59959,59960],{"class":90},"        start.disabled ",[76,59962,370],{"class":82},[76,59964,59965],{"class":90}," end.disabled ",[76,59967,370],{"class":82},[76,59969,59970],{"class":119}," true\n",[76,59972,59973],{"class":78,"line":18846},[76,59974,54430],{"class":90},[76,59976,59977],{"class":78,"line":18851},[76,59978,35499],{"class":90},[76,59980,59981],{"class":78,"line":18865},[76,59982,59983],{"class":540},"    \u002F\u002F 1.2 关闭按钮模块\n",[76,59985,59986,59988,59990,59992,59994,59996,59998,60001],{"class":78,"line":18870},[76,59987,13275],{"class":82},[76,59989,6282],{"class":119},[76,59991,15617],{"class":82},[76,59993,56427],{"class":90},[76,59995,56430],{"class":86},[76,59997,123],{"class":90},[76,59999,60000],{"class":126},"'.end'",[76,60002,130],{"class":90},[76,60004,60005,60008,60010,60012,60014,60016,60018],{"class":78,"line":18876},[76,60006,60007],{"class":90},"    end.",[76,60009,59843],{"class":86},[76,60011,123],{"class":90},[76,60013,59848],{"class":126},[76,60015,405],{"class":90},[76,60017,56480],{"class":82},[76,60019,56483],{"class":90},[76,60021,60022,60025],{"class":78,"line":18881},[76,60023,60024],{"class":86},"      clearInterval",[76,60026,60027],{"class":90},"(timerId)\n",[76,60029,60030],{"class":78,"line":18895},[76,60031,60032],{"class":540},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[76,60034,60035,60038,60041,60044,60046],{"class":78,"line":18900},[76,60036,60037],{"class":90},"      arr.",[76,60039,60040],{"class":86},"splice",[76,60042,60043],{"class":90},"(random, ",[76,60045,669],{"class":119},[76,60047,130],{"class":90},[76,60049,60050],{"class":78,"line":18905},[76,60051,35499],{"class":90},[76,60053,60054],{"class":78,"line":18919},[76,60055,149],{"emptyLinePlaceholder":148},[76,60057,60058,60060,60062],{"class":78,"line":18931},[76,60059,54449],{"class":90},[76,60061,53845],{"class":53332},[76,60063,53339],{"class":90},[76,60065,60066,60068,60070],{"class":78,"line":18936},[76,60067,53817],{"class":90},[76,60069,53832],{"class":53332},[76,60071,53339],{"class":90},[76,60073,60074],{"class":78,"line":18949},[76,60075,149],{"emptyLinePlaceholder":148},[76,60077,60078,60080,60082],{"class":78,"line":18954},[76,60079,53817],{"class":90},[76,60081,52667],{"class":53332},[76,60083,53339],{"class":90},[19,60085,60086],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[889,60088,60090],{"id":60089},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[66,60092,60094],{"className":52665,"code":60093,"language":52667,"meta":71,"style":71},"\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",[73,60095,60096,60106,60120,60124,60132,60146,60166,60178,60186,60190,60198,60210,60218,60237,60254,60270,60280,60284,60292,60300,60304],{"__ignoreMap":71},[76,60097,60098,60100,60102,60104],{"class":78,"line":79},[76,60099,53329],{"class":90},[76,60101,53333],{"class":53332},[76,60103,53336],{"class":86},[76,60105,53339],{"class":90},[76,60107,60108,60110,60112,60114,60116,60118],{"class":78,"line":94},[76,60109,584],{"class":90},[76,60111,52667],{"class":53332},[76,60113,53348],{"class":86},[76,60115,370],{"class":90},[76,60117,53353],{"class":126},[76,60119,53339],{"class":90},[76,60121,60122],{"class":78,"line":133},[76,60123,149],{"emptyLinePlaceholder":148},[76,60125,60126,60128,60130],{"class":78,"line":145},[76,60127,584],{"class":90},[76,60129,53366],{"class":53332},[76,60131,53339],{"class":90},[76,60133,60134,60136,60138,60140,60142,60144],{"class":78,"line":152},[76,60135,54176],{"class":90},[76,60137,53376],{"class":53332},[76,60139,53379],{"class":86},[76,60141,370],{"class":90},[76,60143,53384],{"class":126},[76,60145,53339],{"class":90},[76,60147,60148,60150,60152,60154,60156,60158,60160,60162,60164],{"class":78,"line":157},[76,60149,54176],{"class":90},[76,60151,53376],{"class":53332},[76,60153,16972],{"class":86},[76,60155,370],{"class":90},[76,60157,53423],{"class":126},[76,60159,53403],{"class":86},[76,60161,370],{"class":90},[76,60163,53430],{"class":126},[76,60165,53339],{"class":90},[76,60167,60168,60170,60172,60174,60176],{"class":78,"line":246},[76,60169,54176],{"class":90},[76,60171,53439],{"class":53332},[76,60173,53442],{"class":90},[76,60175,53439],{"class":53332},[76,60177,53339],{"class":90},[76,60179,60180,60182,60184],{"class":78,"line":251},[76,60181,53817],{"class":90},[76,60183,53366],{"class":53332},[76,60185,53339],{"class":90},[76,60187,60188],{"class":78,"line":257},[76,60189,149],{"emptyLinePlaceholder":148},[76,60191,60192,60194,60196],{"class":78,"line":641},[76,60193,584],{"class":90},[76,60195,53832],{"class":53332},[76,60197,53339],{"class":90},[76,60199,60200,60202,60204,60206,60208],{"class":78,"line":646},[76,60201,54176],{"class":90},[76,60203,55918],{"class":53332},[76,60205,55924],{"class":90},[76,60207,55918],{"class":53332},[76,60209,53339],{"class":90},[76,60211,60212,60214,60216],{"class":78,"line":659},[76,60213,54176],{"class":90},[76,60215,53845],{"class":53332},[76,60217,53339],{"class":90},[76,60219,60220,60222,60224,60226,60228,60230,60232,60235],{"class":78,"line":1608},[76,60221,13275],{"class":82},[76,60223,56422],{"class":119},[76,60225,15617],{"class":82},[76,60227,56427],{"class":90},[76,60229,56430],{"class":86},[76,60231,123],{"class":90},[76,60233,60234],{"class":126},"'button'",[76,60236,130],{"class":90},[76,60238,60239,60242,60244,60246,60248,60250,60252],{"class":78,"line":1632},[76,60240,60241],{"class":90},"    btn.",[76,60243,59843],{"class":86},[76,60245,123],{"class":90},[76,60247,59848],{"class":126},[76,60249,405],{"class":90},[76,60251,56480],{"class":82},[76,60253,56483],{"class":90},[76,60255,60256,60259,60261,60263,60266,60268],{"class":78,"line":1637},[76,60257,60258],{"class":82},"      const",[76,60260,4336],{"class":119},[76,60262,15617],{"class":82},[76,60264,60265],{"class":90}," Math.",[76,60267,59890],{"class":86},[76,60269,4072],{"class":90},[76,60271,60272,60275,60278],{"class":78,"line":1642},[76,60273,60274],{"class":90},"      console.",[76,60276,60277],{"class":86},"log",[76,60279,926],{"class":90},[76,60281,60282],{"class":78,"line":1652},[76,60283,35499],{"class":90},[76,60285,60286,60288,60290],{"class":78,"line":1660},[76,60287,54449],{"class":90},[76,60289,53845],{"class":53332},[76,60291,53339],{"class":90},[76,60293,60294,60296,60298],{"class":78,"line":1683},[76,60295,53817],{"class":90},[76,60297,53832],{"class":53332},[76,60299,53339],{"class":90},[76,60301,60302],{"class":78,"line":1698},[76,60303,149],{"emptyLinePlaceholder":148},[76,60305,60306,60308,60310],{"class":78,"line":1711},[76,60307,53817],{"class":90},[76,60309,52667],{"class":53332},[76,60311,53339],{"class":90},[19,60313,60314],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60316,60317],{},"常量不可以重新赋值",[19,60319,60320],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[66,60322,60324],{"className":52665,"code":60323,"language":52667,"meta":71,"style":71},"\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",[73,60325,60326,60336,60350,60354,60362,60376,60396,60408,60416,60420,60428,60440,60448,60458,60476,60492,60506,60514,60518,60526,60534,60538],{"__ignoreMap":71},[76,60327,60328,60330,60332,60334],{"class":78,"line":79},[76,60329,53329],{"class":90},[76,60331,53333],{"class":53332},[76,60333,53336],{"class":86},[76,60335,53339],{"class":90},[76,60337,60338,60340,60342,60344,60346,60348],{"class":78,"line":94},[76,60339,584],{"class":90},[76,60341,52667],{"class":53332},[76,60343,53348],{"class":86},[76,60345,370],{"class":90},[76,60347,53353],{"class":126},[76,60349,53339],{"class":90},[76,60351,60352],{"class":78,"line":133},[76,60353,149],{"emptyLinePlaceholder":148},[76,60355,60356,60358,60360],{"class":78,"line":145},[76,60357,584],{"class":90},[76,60359,53366],{"class":53332},[76,60361,53339],{"class":90},[76,60363,60364,60366,60368,60370,60372,60374],{"class":78,"line":152},[76,60365,54176],{"class":90},[76,60367,53376],{"class":53332},[76,60369,53379],{"class":86},[76,60371,370],{"class":90},[76,60373,53384],{"class":126},[76,60375,53339],{"class":90},[76,60377,60378,60380,60382,60384,60386,60388,60390,60392,60394],{"class":78,"line":157},[76,60379,54176],{"class":90},[76,60381,53376],{"class":53332},[76,60383,16972],{"class":86},[76,60385,370],{"class":90},[76,60387,53423],{"class":126},[76,60389,53403],{"class":86},[76,60391,370],{"class":90},[76,60393,53430],{"class":126},[76,60395,53339],{"class":90},[76,60397,60398,60400,60402,60404,60406],{"class":78,"line":246},[76,60399,54176],{"class":90},[76,60401,53439],{"class":53332},[76,60403,53442],{"class":90},[76,60405,53439],{"class":53332},[76,60407,53339],{"class":90},[76,60409,60410,60412,60414],{"class":78,"line":251},[76,60411,53817],{"class":90},[76,60413,53366],{"class":53332},[76,60415,53339],{"class":90},[76,60417,60418],{"class":78,"line":257},[76,60419,149],{"emptyLinePlaceholder":148},[76,60421,60422,60424,60426],{"class":78,"line":641},[76,60423,584],{"class":90},[76,60425,53832],{"class":53332},[76,60427,53339],{"class":90},[76,60429,60430,60432,60434,60436,60438],{"class":78,"line":646},[76,60431,54176],{"class":90},[76,60433,55918],{"class":53332},[76,60435,55924],{"class":90},[76,60437,55918],{"class":53332},[76,60439,53339],{"class":90},[76,60441,60442,60444,60446],{"class":78,"line":659},[76,60443,54176],{"class":90},[76,60445,53845],{"class":53332},[76,60447,53339],{"class":90},[76,60449,60450,60452,60454,60456],{"class":78,"line":1608},[76,60451,13275],{"class":82},[76,60453,4336],{"class":119},[76,60455,15617],{"class":82},[76,60457,919],{"class":119},[76,60459,60460,60462,60464,60466,60468,60470,60472,60474],{"class":78,"line":1632},[76,60461,13275],{"class":82},[76,60463,56422],{"class":119},[76,60465,15617],{"class":82},[76,60467,56427],{"class":90},[76,60469,56430],{"class":86},[76,60471,123],{"class":90},[76,60473,60234],{"class":126},[76,60475,130],{"class":90},[76,60477,60478,60480,60482,60484,60486,60488,60490],{"class":78,"line":1637},[76,60479,60241],{"class":90},[76,60481,59843],{"class":86},[76,60483,123],{"class":90},[76,60485,59848],{"class":126},[76,60487,405],{"class":90},[76,60489,56480],{"class":82},[76,60491,56483],{"class":90},[76,60493,60494,60496,60498,60500,60502,60504],{"class":78,"line":1642},[76,60495,60258],{"class":82},[76,60497,4336],{"class":119},[76,60499,15617],{"class":82},[76,60501,60265],{"class":90},[76,60503,59890],{"class":86},[76,60505,4072],{"class":90},[76,60507,60508,60510,60512],{"class":78,"line":1652},[76,60509,60274],{"class":90},[76,60511,60277],{"class":86},[76,60513,926],{"class":90},[76,60515,60516],{"class":78,"line":1660},[76,60517,35499],{"class":90},[76,60519,60520,60522,60524],{"class":78,"line":1683},[76,60521,54449],{"class":90},[76,60523,53845],{"class":53332},[76,60525,53339],{"class":90},[76,60527,60528,60530,60532],{"class":78,"line":1698},[76,60529,53817],{"class":90},[76,60531,53832],{"class":53332},[76,60533,53339],{"class":90},[76,60535,60536],{"class":78,"line":1711},[76,60537,149],{"emptyLinePlaceholder":148},[76,60539,60540,60542,60544],{"class":78,"line":1717},[76,60541,53817],{"class":90},[76,60543,52667],{"class":53332},[76,60545,53339],{"class":90},[19,60547,60548],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[66,60550,60552],{"className":52665,"code":60551,"language":52667,"meta":71,"style":71},"\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",[73,60553,60554,60564,60578,60582,60590,60604,60624,60636,60644,60648,60656,60668,60676,60686,60704,60720,60733,60741,60745,60753,60761,60765],{"__ignoreMap":71},[76,60555,60556,60558,60560,60562],{"class":78,"line":79},[76,60557,53329],{"class":90},[76,60559,53333],{"class":53332},[76,60561,53336],{"class":86},[76,60563,53339],{"class":90},[76,60565,60566,60568,60570,60572,60574,60576],{"class":78,"line":94},[76,60567,584],{"class":90},[76,60569,52667],{"class":53332},[76,60571,53348],{"class":86},[76,60573,370],{"class":90},[76,60575,53353],{"class":126},[76,60577,53339],{"class":90},[76,60579,60580],{"class":78,"line":133},[76,60581,149],{"emptyLinePlaceholder":148},[76,60583,60584,60586,60588],{"class":78,"line":145},[76,60585,584],{"class":90},[76,60587,53366],{"class":53332},[76,60589,53339],{"class":90},[76,60591,60592,60594,60596,60598,60600,60602],{"class":78,"line":152},[76,60593,54176],{"class":90},[76,60595,53376],{"class":53332},[76,60597,53379],{"class":86},[76,60599,370],{"class":90},[76,60601,53384],{"class":126},[76,60603,53339],{"class":90},[76,60605,60606,60608,60610,60612,60614,60616,60618,60620,60622],{"class":78,"line":157},[76,60607,54176],{"class":90},[76,60609,53376],{"class":53332},[76,60611,16972],{"class":86},[76,60613,370],{"class":90},[76,60615,53423],{"class":126},[76,60617,53403],{"class":86},[76,60619,370],{"class":90},[76,60621,53430],{"class":126},[76,60623,53339],{"class":90},[76,60625,60626,60628,60630,60632,60634],{"class":78,"line":246},[76,60627,54176],{"class":90},[76,60629,53439],{"class":53332},[76,60631,53442],{"class":90},[76,60633,53439],{"class":53332},[76,60635,53339],{"class":90},[76,60637,60638,60640,60642],{"class":78,"line":251},[76,60639,53817],{"class":90},[76,60641,53366],{"class":53332},[76,60643,53339],{"class":90},[76,60645,60646],{"class":78,"line":257},[76,60647,149],{"emptyLinePlaceholder":148},[76,60649,60650,60652,60654],{"class":78,"line":641},[76,60651,584],{"class":90},[76,60653,53832],{"class":53332},[76,60655,53339],{"class":90},[76,60657,60658,60660,60662,60664,60666],{"class":78,"line":646},[76,60659,54176],{"class":90},[76,60661,55918],{"class":53332},[76,60663,55924],{"class":90},[76,60665,55918],{"class":53332},[76,60667,53339],{"class":90},[76,60669,60670,60672,60674],{"class":78,"line":659},[76,60671,54176],{"class":90},[76,60673,53845],{"class":53332},[76,60675,53339],{"class":90},[76,60677,60678,60680,60682,60684],{"class":78,"line":1608},[76,60679,13275],{"class":82},[76,60681,4336],{"class":119},[76,60683,15617],{"class":82},[76,60685,919],{"class":119},[76,60687,60688,60690,60692,60694,60696,60698,60700,60702],{"class":78,"line":1632},[76,60689,13275],{"class":82},[76,60691,56422],{"class":119},[76,60693,15617],{"class":82},[76,60695,56427],{"class":90},[76,60697,56430],{"class":86},[76,60699,123],{"class":90},[76,60701,60234],{"class":126},[76,60703,130],{"class":90},[76,60705,60706,60708,60710,60712,60714,60716,60718],{"class":78,"line":1637},[76,60707,60241],{"class":90},[76,60709,59843],{"class":86},[76,60711,123],{"class":90},[76,60713,59848],{"class":126},[76,60715,405],{"class":90},[76,60717,56480],{"class":82},[76,60719,56483],{"class":90},[76,60721,60722,60725,60727,60729,60731],{"class":78,"line":1642},[76,60723,60724],{"class":90},"      num ",[76,60726,370],{"class":82},[76,60728,60265],{"class":90},[76,60730,59890],{"class":86},[76,60732,4072],{"class":90},[76,60734,60735,60737,60739],{"class":78,"line":1652},[76,60736,60274],{"class":90},[76,60738,60277],{"class":86},[76,60740,926],{"class":90},[76,60742,60743],{"class":78,"line":1660},[76,60744,35499],{"class":90},[76,60746,60747,60749,60751],{"class":78,"line":1683},[76,60748,54449],{"class":90},[76,60750,53845],{"class":53332},[76,60752,53339],{"class":90},[76,60754,60755,60757,60759],{"class":78,"line":1698},[76,60756,53817],{"class":90},[76,60758,53832],{"class":53332},[76,60760,53339],{"class":90},[76,60762,60763],{"class":78,"line":1711},[76,60764,149],{"emptyLinePlaceholder":148},[76,60766,60767,60769,60771],{"class":78,"line":1717},[76,60768,53817],{"class":90},[76,60770,52667],{"class":53332},[76,60772,53339],{"class":90},[19,60774,60775],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[889,60777,60779],{"id":60778},"_324-事件监听版本","3.2.4 事件监听版本",[19,60781,60782],{},[3583,60783],{"alt":71,"src":60784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60786,60787],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60789,60790],{},"这种方式会覆盖前边的事件监听:",[66,60792,60794],{"className":52665,"code":60793,"language":52667,"meta":71,"style":71},"\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",[73,60795,60796,60806,60820,60824,60832,60846,60866,60878,60886,60890,60898,60910,60918,60936,60950,60961,60965,60977,60987,60991,60999,61007,61011],{"__ignoreMap":71},[76,60797,60798,60800,60802,60804],{"class":78,"line":79},[76,60799,53329],{"class":90},[76,60801,53333],{"class":53332},[76,60803,53336],{"class":86},[76,60805,53339],{"class":90},[76,60807,60808,60810,60812,60814,60816,60818],{"class":78,"line":94},[76,60809,584],{"class":90},[76,60811,52667],{"class":53332},[76,60813,53348],{"class":86},[76,60815,370],{"class":90},[76,60817,53353],{"class":126},[76,60819,53339],{"class":90},[76,60821,60822],{"class":78,"line":133},[76,60823,149],{"emptyLinePlaceholder":148},[76,60825,60826,60828,60830],{"class":78,"line":145},[76,60827,584],{"class":90},[76,60829,53366],{"class":53332},[76,60831,53339],{"class":90},[76,60833,60834,60836,60838,60840,60842,60844],{"class":78,"line":152},[76,60835,54176],{"class":90},[76,60837,53376],{"class":53332},[76,60839,53379],{"class":86},[76,60841,370],{"class":90},[76,60843,53384],{"class":126},[76,60845,53339],{"class":90},[76,60847,60848,60850,60852,60854,60856,60858,60860,60862,60864],{"class":78,"line":157},[76,60849,54176],{"class":90},[76,60851,53376],{"class":53332},[76,60853,16972],{"class":86},[76,60855,370],{"class":90},[76,60857,53423],{"class":126},[76,60859,53403],{"class":86},[76,60861,370],{"class":90},[76,60863,53430],{"class":126},[76,60865,53339],{"class":90},[76,60867,60868,60870,60872,60874,60876],{"class":78,"line":246},[76,60869,54176],{"class":90},[76,60871,53439],{"class":53332},[76,60873,53442],{"class":90},[76,60875,53439],{"class":53332},[76,60877,53339],{"class":90},[76,60879,60880,60882,60884],{"class":78,"line":251},[76,60881,53817],{"class":90},[76,60883,53366],{"class":53332},[76,60885,53339],{"class":90},[76,60887,60888],{"class":78,"line":257},[76,60889,149],{"emptyLinePlaceholder":148},[76,60891,60892,60894,60896],{"class":78,"line":641},[76,60893,584],{"class":90},[76,60895,53832],{"class":53332},[76,60897,53339],{"class":90},[76,60899,60900,60902,60904,60906,60908],{"class":78,"line":646},[76,60901,54176],{"class":90},[76,60903,55918],{"class":53332},[76,60905,55924],{"class":90},[76,60907,55918],{"class":53332},[76,60909,53339],{"class":90},[76,60911,60912,60914,60916],{"class":78,"line":659},[76,60913,54176],{"class":90},[76,60915,53845],{"class":53332},[76,60917,53339],{"class":90},[76,60919,60920,60922,60924,60926,60928,60930,60932,60934],{"class":78,"line":1608},[76,60921,13275],{"class":82},[76,60923,56422],{"class":119},[76,60925,15617],{"class":82},[76,60927,56427],{"class":90},[76,60929,56430],{"class":86},[76,60931,123],{"class":90},[76,60933,60234],{"class":126},[76,60935,130],{"class":90},[76,60937,60938,60940,60943,60945,60948],{"class":78,"line":1632},[76,60939,60241],{"class":90},[76,60941,60942],{"class":86},"onclick",[76,60944,15617],{"class":82},[76,60946,60947],{"class":82}," function",[76,60949,56483],{"class":90},[76,60951,60952,60955,60957,60959],{"class":78,"line":1637},[76,60953,60954],{"class":86},"      alert",[76,60956,123],{"class":90},[76,60958,2735],{"class":119},[76,60960,130],{"class":90},[76,60962,60963],{"class":78,"line":1642},[76,60964,4283],{"class":90},[76,60966,60967,60969,60971,60973,60975],{"class":78,"line":1652},[76,60968,60241],{"class":90},[76,60970,60942],{"class":86},[76,60972,15617],{"class":82},[76,60974,60947],{"class":82},[76,60976,56483],{"class":90},[76,60978,60979,60981,60983,60985],{"class":78,"line":1660},[76,60980,60954],{"class":86},[76,60982,123],{"class":90},[76,60984,3008],{"class":119},[76,60986,130],{"class":90},[76,60988,60989],{"class":78,"line":1683},[76,60990,4283],{"class":90},[76,60992,60993,60995,60997],{"class":78,"line":1698},[76,60994,54449],{"class":90},[76,60996,53845],{"class":53332},[76,60998,53339],{"class":90},[76,61000,61001,61003,61005],{"class":78,"line":1711},[76,61002,53817],{"class":90},[76,61004,53832],{"class":53332},[76,61006,53339],{"class":90},[76,61008,61009],{"class":78,"line":1717},[76,61010,149],{"emptyLinePlaceholder":148},[76,61012,61013,61015,61017],{"class":78,"line":1728},[76,61014,53817],{"class":90},[76,61016,52667],{"class":53332},[76,61018,53339],{"class":90},[19,61020,61021],{},"只要点击就输出结果为22,前边11被覆盖了",[66,61023,61025],{"className":52665,"code":61024,"language":52667,"meta":71,"style":71},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[73,61026,61027,61032,61037,61041,61046,61051],{"__ignoreMap":71},[76,61028,61029],{"class":78,"line":79},[76,61030,61031],{"class":90},"  btn.addEventListener('click', function () {\n",[76,61033,61034],{"class":78,"line":94},[76,61035,61036],{"class":90},"      alert(11)\n",[76,61038,61039],{"class":78,"line":133},[76,61040,35499],{"class":90},[76,61042,61043],{"class":78,"line":145},[76,61044,61045],{"class":90},"    btn.addEventListener('click', function () {\n",[76,61047,61048],{"class":78,"line":152},[76,61049,61050],{"class":90},"      alert(22)\n",[76,61052,61053],{"class":78,"line":157},[76,61054,35499],{"class":90},[19,61056,61057],{},"点击第一次输出11,第二次点击为22",[889,61059,61061],{"id":61060},"_325-事件类型","3.2.5 事件类型",[19,61063,61064],{},[3583,61065],{"alt":71,"src":61066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24047,61068,61070],{"id":61069},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61072,61073],{},"补充知识:",[19,61075,61076],{},"轮播图自动播放模块,可以使用",[19,61078,61079],{},"let timerId = setInterval(function () {",[19,61081,61082],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61084,61085],{},"用js方法模拟进行点击事件,click必须加()",[19,61087,61088],{},"next.click()",[19,61090,61091],{},"}, 1000)",[19,61093,61094],{},[3583,61095],{"alt":71,"src":61096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[66,61098,61100],{"className":55099,"code":61099,"language":55101,"meta":71,"style":71},"\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",[73,61101,61102,61106,61116,61130,61134,61142,61157,61177,61197,61210,61218,61223,61228,61232,61236,61241,61246,61251,61256,61260,61264,61269,61274,61279,61283,61287,61292,61296,61301,61306,61310,61314,61319,61324,61329,61334,61339,61343,61347,61352,61357,61362,61367,61372,61376,61380,61385,61390,61395,61400,61405,61410,61415,61420,61425,61430,61434,61438,61443,61448,61452,61456,61461,61466,61470,61475,61480,61484,61488,61493,61497,61502,61507,61511,61516,61520,61524,61529,61534,61539,61544,61549,61554,61559,61563,61567,61571,61576,61581,61586,61591,61595,61603,61611,61615,61623,61638,61652,61673,61681,61695,61708,61723,61742,61754,61766,61778,61790,61802,61814,61826,61834,61849,61873,61897,61905,61913,61921,61929,61934,61939,61944,61949,61954,61959,61964,61969,61974,61979,61983,61988,61993,61998,62003,62008,62013,62018,62023,62028,62032,62037,62042,62047,62052,62057,62062,62067,62072,62077,62082,62087,62092,62096,62100,62105,62110,62115,62119,62124,62129,62134,62139,62144,62148,62153,62157,62161,62165,62169,62173,62177,62182,62187,62192,62197,62202,62207,62212,62217,62222,62226,62230,62235,62240,62245,62250,62255,62259,62264,62269,62274,62279,62284,62289,62293,62297,62302,62306,62311,62315,62320,62325,62330,62335,62340,62345,62349,62357,62365,62369],{"__ignoreMap":71},[76,61103,61104],{"class":78,"line":79},[76,61105,149],{"emptyLinePlaceholder":148},[76,61107,61108,61110,61112,61114],{"class":78,"line":94},[76,61109,53329],{"class":90},[76,61111,53333],{"class":82},[76,61113,53336],{"class":119},[76,61115,53339],{"class":90},[76,61117,61118,61120,61122,61124,61126,61128],{"class":78,"line":133},[76,61119,584],{"class":90},[76,61121,52667],{"class":53332},[76,61123,53348],{"class":86},[76,61125,370],{"class":90},[76,61127,53353],{"class":126},[76,61129,53339],{"class":90},[76,61131,61132],{"class":78,"line":145},[76,61133,149],{"emptyLinePlaceholder":148},[76,61135,61136,61138,61140],{"class":78,"line":152},[76,61137,584],{"class":90},[76,61139,53366],{"class":53332},[76,61141,53339],{"class":90},[76,61143,61144,61146,61148,61150,61152,61154],{"class":78,"line":157},[76,61145,54176],{"class":90},[76,61147,53376],{"class":53332},[76,61149,53379],{"class":86},[76,61151,370],{"class":90},[76,61153,53384],{"class":126},[76,61155,61156],{"class":90}," \u002F>\n",[76,61158,61159,61161,61163,61165,61167,61169,61171,61173,61175],{"class":78,"line":246},[76,61160,54176],{"class":90},[76,61162,53376],{"class":53332},[76,61164,53395],{"class":86},[76,61166,370],{"class":90},[76,61168,53400],{"class":126},[76,61170,53403],{"class":86},[76,61172,370],{"class":90},[76,61174,53408],{"class":126},[76,61176,61156],{"class":90},[76,61178,61179,61181,61183,61185,61187,61189,61191,61193,61195],{"class":78,"line":251},[76,61180,54176],{"class":90},[76,61182,53376],{"class":53332},[76,61184,16972],{"class":86},[76,61186,370],{"class":90},[76,61188,53423],{"class":126},[76,61190,53403],{"class":86},[76,61192,370],{"class":90},[76,61194,53430],{"class":126},[76,61196,61156],{"class":90},[76,61198,61199,61201,61203,61206,61208],{"class":78,"line":257},[76,61200,54176],{"class":90},[76,61202,53439],{"class":53332},[76,61204,61205],{"class":90},">轮播图点击切换\u003C\u002F",[76,61207,53439],{"class":53332},[76,61209,53339],{"class":90},[76,61211,61212,61214,61216],{"class":78,"line":641},[76,61213,54176],{"class":90},[76,61215,2178],{"class":53332},[76,61217,53339],{"class":90},[76,61219,61220],{"class":78,"line":646},[76,61221,61222],{"class":90},"    * {\n",[76,61224,61225],{"class":78,"line":659},[76,61226,61227],{"class":90},"      box-sizing: border-box;\n",[76,61229,61230],{"class":78,"line":1608},[76,61231,4283],{"class":90},[76,61233,61234],{"class":78,"line":1632},[76,61235,149],{"emptyLinePlaceholder":148},[76,61237,61238],{"class":78,"line":1637},[76,61239,61240],{"class":90},"    .slider {\n",[76,61242,61243],{"class":78,"line":1642},[76,61244,61245],{"class":90},"      width: 560px;\n",[76,61247,61248],{"class":78,"line":1652},[76,61249,61250],{"class":90},"      height: 400px;\n",[76,61252,61253],{"class":78,"line":1660},[76,61254,61255],{"class":90},"      overflow: hidden;\n",[76,61257,61258],{"class":78,"line":1683},[76,61259,4283],{"class":90},[76,61261,61262],{"class":78,"line":1698},[76,61263,149],{"emptyLinePlaceholder":148},[76,61265,61266],{"class":78,"line":1711},[76,61267,61268],{"class":90},"    .slider-wrapper {\n",[76,61270,61271],{"class":78,"line":1717},[76,61272,61273],{"class":90},"      width: 100%;\n",[76,61275,61276],{"class":78,"line":1728},[76,61277,61278],{"class":90},"      height: 320px;\n",[76,61280,61281],{"class":78,"line":1740},[76,61282,4283],{"class":90},[76,61284,61285],{"class":78,"line":1746},[76,61286,149],{"emptyLinePlaceholder":148},[76,61288,61289],{"class":78,"line":1751},[76,61290,61291],{"class":90},"    .slider-wrapper img {\n",[76,61293,61294],{"class":78,"line":1756},[76,61295,61273],{"class":90},[76,61297,61298],{"class":78,"line":1766},[76,61299,61300],{"class":90},"      height: 100%;\n",[76,61302,61303],{"class":78,"line":1773},[76,61304,61305],{"class":90},"      display: block;\n",[76,61307,61308],{"class":78,"line":1793},[76,61309,4283],{"class":90},[76,61311,61312],{"class":78,"line":1806},[76,61313,149],{"emptyLinePlaceholder":148},[76,61315,61316],{"class":78,"line":1817},[76,61317,61318],{"class":90},"    .slider-footer {\n",[76,61320,61321],{"class":78,"line":1822},[76,61322,61323],{"class":90},"      height: 80px;\n",[76,61325,61326],{"class":78,"line":1835},[76,61327,61328],{"class":90},"      background-color: rgb(100, 67, 68);\n",[76,61330,61331],{"class":78,"line":1847},[76,61332,61333],{"class":90},"      padding: 12px 12px 0 12px;\n",[76,61335,61336],{"class":78,"line":1852},[76,61337,61338],{"class":90},"      position: relative;\n",[76,61340,61341],{"class":78,"line":1862},[76,61342,4283],{"class":90},[76,61344,61345],{"class":78,"line":1874},[76,61346,149],{"emptyLinePlaceholder":148},[76,61348,61349],{"class":78,"line":1879},[76,61350,61351],{"class":90},"    .slider-footer .toggle {\n",[76,61353,61354],{"class":78,"line":1884},[76,61355,61356],{"class":90},"      position: absolute;\n",[76,61358,61359],{"class":78,"line":1889},[76,61360,61361],{"class":90},"      right: 0;\n",[76,61363,61364],{"class":78,"line":1900},[76,61365,61366],{"class":90},"      top: 12px;\n",[76,61368,61369],{"class":78,"line":1906},[76,61370,61371],{"class":90},"      display: flex;\n",[76,61373,61374],{"class":78,"line":1924},[76,61375,4283],{"class":90},[76,61377,61378],{"class":78,"line":1929},[76,61379,149],{"emptyLinePlaceholder":148},[76,61381,61382],{"class":78,"line":1944},[76,61383,61384],{"class":90},"    .slider-footer .toggle button {\n",[76,61386,61387],{"class":78,"line":1950},[76,61388,61389],{"class":90},"      margin-right: 12px;\n",[76,61391,61392],{"class":78,"line":1965},[76,61393,61394],{"class":90},"      width: 28px;\n",[76,61396,61397],{"class":78,"line":1971},[76,61398,61399],{"class":90},"      height: 28px;\n",[76,61401,61402],{"class":78,"line":1985},[76,61403,61404],{"class":90},"      appearance: none;\n",[76,61406,61407],{"class":78,"line":1991},[76,61408,61409],{"class":90},"      border: none;\n",[76,61411,61412],{"class":78,"line":2005},[76,61413,61414],{"class":90},"      background: rgba(255, 255, 255, 0.1);\n",[76,61416,61417],{"class":78,"line":2017},[76,61418,61419],{"class":90},"      color: #fff;\n",[76,61421,61422],{"class":78,"line":2023},[76,61423,61424],{"class":90},"      border-radius: 4px;\n",[76,61426,61427],{"class":78,"line":2031},[76,61428,61429],{"class":90},"      cursor: pointer;\n",[76,61431,61432],{"class":78,"line":11880},[76,61433,4283],{"class":90},[76,61435,61436],{"class":78,"line":11901},[76,61437,149],{"emptyLinePlaceholder":148},[76,61439,61440],{"class":78,"line":11907},[76,61441,61442],{"class":90},"    .slider-footer .toggle button:hover {\n",[76,61444,61445],{"class":78,"line":11921},[76,61446,61447],{"class":90},"      background: rgba(255, 255, 255, 0.2);\n",[76,61449,61450],{"class":78,"line":11927},[76,61451,4283],{"class":90},[76,61453,61454],{"class":78,"line":11954},[76,61455,149],{"emptyLinePlaceholder":148},[76,61457,61458],{"class":78,"line":11963},[76,61459,61460],{"class":90},"    .slider-footer p {\n",[76,61462,61463],{"class":78,"line":11969},[76,61464,61465],{"class":90},"      margin: 0;\n",[76,61467,61468],{"class":78,"line":11977},[76,61469,61419],{"class":90},[76,61471,61472],{"class":78,"line":11982},[76,61473,61474],{"class":90},"      font-size: 18px;\n",[76,61476,61477],{"class":78,"line":18654},[76,61478,61479],{"class":90},"      margin-bottom: 10px;\n",[76,61481,61482],{"class":78,"line":18660},[76,61483,4283],{"class":90},[76,61485,61486],{"class":78,"line":18683},[76,61487,149],{"emptyLinePlaceholder":148},[76,61489,61490],{"class":78,"line":18689},[76,61491,61492],{"class":90},"    .slider-indicator {\n",[76,61494,61495],{"class":78,"line":18712},[76,61496,61465],{"class":90},[76,61498,61499],{"class":78,"line":18726},[76,61500,61501],{"class":90},"      padding: 0;\n",[76,61503,61504],{"class":78,"line":18746},[76,61505,61506],{"class":90},"      list-style: none;\n",[76,61508,61509],{"class":78,"line":18752},[76,61510,61371],{"class":90},[76,61512,61513],{"class":78,"line":18763},[76,61514,61515],{"class":90},"      align-items: center;\n",[76,61517,61518],{"class":78,"line":18786},[76,61519,4283],{"class":90},[76,61521,61522],{"class":78,"line":18808},[76,61523,149],{"emptyLinePlaceholder":148},[76,61525,61526],{"class":78,"line":18813},[76,61527,61528],{"class":90},"    .slider-indicator li {\n",[76,61530,61531],{"class":78,"line":18819},[76,61532,61533],{"class":90},"      width: 8px;\n",[76,61535,61536],{"class":78,"line":18833},[76,61537,61538],{"class":90},"      height: 8px;\n",[76,61540,61541],{"class":78,"line":18846},[76,61542,61543],{"class":90},"      margin: 4px;\n",[76,61545,61546],{"class":78,"line":18851},[76,61547,61548],{"class":90},"      border-radius: 50%;\n",[76,61550,61551],{"class":78,"line":18865},[76,61552,61553],{"class":90},"      background: #fff;\n",[76,61555,61556],{"class":78,"line":18870},[76,61557,61558],{"class":90},"      opacity: 0.4;\n",[76,61560,61561],{"class":78,"line":18876},[76,61562,61429],{"class":90},[76,61564,61565],{"class":78,"line":18881},[76,61566,4283],{"class":90},[76,61568,61569],{"class":78,"line":18895},[76,61570,149],{"emptyLinePlaceholder":148},[76,61572,61573],{"class":78,"line":18900},[76,61574,61575],{"class":90},"    .slider-indicator li.active {\n",[76,61577,61578],{"class":78,"line":18905},[76,61579,61580],{"class":90},"      width: 12px;\n",[76,61582,61583],{"class":78,"line":18919},[76,61584,61585],{"class":90},"      height: 12px;\n",[76,61587,61588],{"class":78,"line":18931},[76,61589,61590],{"class":90},"      opacity: 1;\n",[76,61592,61593],{"class":78,"line":18936},[76,61594,4283],{"class":90},[76,61596,61597,61599,61601],{"class":78,"line":18949},[76,61598,54449],{"class":90},[76,61600,2178],{"class":53332},[76,61602,53339],{"class":90},[76,61604,61605,61607,61609],{"class":78,"line":18954},[76,61606,53817],{"class":90},[76,61608,53366],{"class":53332},[76,61610,53339],{"class":90},[76,61612,61613],{"class":78,"line":18959},[76,61614,149],{"emptyLinePlaceholder":148},[76,61616,61617,61619,61621],{"class":78,"line":18964},[76,61618,584],{"class":90},[76,61620,53832],{"class":53332},[76,61622,53339],{"class":90},[76,61624,61625,61627,61629,61631,61633,61636],{"class":78,"line":18977},[76,61626,54176],{"class":90},[76,61628,53643],{"class":53332},[76,61630,55518],{"class":86},[76,61632,370],{"class":90},[76,61634,61635],{"class":126},"\"slider\"",[76,61637,53339],{"class":90},[76,61639,61640,61642,61644,61646,61648,61650],{"class":78,"line":18982},[76,61641,53373],{"class":90},[76,61643,53643],{"class":53332},[76,61645,55518],{"class":86},[76,61647,370],{"class":90},[76,61649,57258],{"class":126},[76,61651,53339],{"class":90},[76,61653,61654,61656,61658,61660,61662,61665,61667,61669,61671],{"class":78,"line":34671},[76,61655,57265],{"class":90},[76,61657,3583],{"class":53332},[76,61659,57270],{"class":86},[76,61661,370],{"class":90},[76,61663,61664],{"class":126},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,61666,57278],{"class":86},[76,61668,370],{"class":90},[76,61670,9730],{"class":126},[76,61672,61156],{"class":90},[76,61674,61675,61677,61679],{"class":78,"line":34677},[76,61676,53808],{"class":90},[76,61678,53643],{"class":53332},[76,61680,53339],{"class":90},[76,61682,61683,61685,61687,61689,61691,61693],{"class":78,"line":34683},[76,61684,53373],{"class":90},[76,61686,53643],{"class":53332},[76,61688,55518],{"class":86},[76,61690,370],{"class":90},[76,61692,57305],{"class":126},[76,61694,53339],{"class":90},[76,61696,61697,61699,61701,61704,61706],{"class":78,"line":34689},[76,61698,57265],{"class":90},[76,61700,19],{"class":53332},[76,61702,61703],{"class":90},">对人类来说会不会太超前了？\u003C\u002F",[76,61705,19],{"class":53332},[76,61707,53339],{"class":90},[76,61709,61710,61712,61714,61716,61718,61721],{"class":78,"line":34695},[76,61711,57265],{"class":90},[76,61713,3261],{"class":53332},[76,61715,55518],{"class":86},[76,61717,370],{"class":90},[76,61719,61720],{"class":126},"\"slider-indicator\"",[76,61722,53339],{"class":90},[76,61724,61725,61727,61729,61731,61733,61736,61738,61740],{"class":78,"line":34706},[76,61726,57333],{"class":90},[76,61728,29],{"class":53332},[76,61730,55518],{"class":86},[76,61732,370],{"class":90},[76,61734,61735],{"class":126},"\"active\"",[76,61737,57345],{"class":90},[76,61739,29],{"class":53332},[76,61741,53339],{"class":90},[76,61743,61744,61746,61748,61750,61752],{"class":78,"line":34712},[76,61745,57333],{"class":90},[76,61747,29],{"class":53332},[76,61749,57345],{"class":90},[76,61751,29],{"class":53332},[76,61753,53339],{"class":90},[76,61755,61756,61758,61760,61762,61764],{"class":78,"line":34732},[76,61757,57333],{"class":90},[76,61759,29],{"class":53332},[76,61761,57345],{"class":90},[76,61763,29],{"class":53332},[76,61765,53339],{"class":90},[76,61767,61768,61770,61772,61774,61776],{"class":78,"line":34738},[76,61769,57333],{"class":90},[76,61771,29],{"class":53332},[76,61773,57345],{"class":90},[76,61775,29],{"class":53332},[76,61777,53339],{"class":90},[76,61779,61780,61782,61784,61786,61788],{"class":78,"line":34749},[76,61781,57333],{"class":90},[76,61783,29],{"class":53332},[76,61785,57345],{"class":90},[76,61787,29],{"class":53332},[76,61789,53339],{"class":90},[76,61791,61792,61794,61796,61798,61800],{"class":78,"line":34755},[76,61793,57333],{"class":90},[76,61795,29],{"class":53332},[76,61797,57345],{"class":90},[76,61799,29],{"class":53332},[76,61801,53339],{"class":90},[76,61803,61804,61806,61808,61810,61812],{"class":78,"line":34761},[76,61805,57333],{"class":90},[76,61807,29],{"class":53332},[76,61809,57345],{"class":90},[76,61811,29],{"class":53332},[76,61813,53339],{"class":90},[76,61815,61816,61818,61820,61822,61824],{"class":78,"line":34767},[76,61817,57333],{"class":90},[76,61819,29],{"class":53332},[76,61821,57345],{"class":90},[76,61823,29],{"class":53332},[76,61825,53339],{"class":90},[76,61827,61828,61830,61832],{"class":78,"line":34773},[76,61829,57438],{"class":90},[76,61831,3261],{"class":53332},[76,61833,53339],{"class":90},[76,61835,61836,61838,61840,61842,61844,61847],{"class":78,"line":34779},[76,61837,57265],{"class":90},[76,61839,53643],{"class":53332},[76,61841,55518],{"class":86},[76,61843,370],{"class":90},[76,61845,61846],{"class":126},"\"toggle\"",[76,61848,53339],{"class":90},[76,61850,61851,61853,61855,61857,61859,61862,61864,61867,61869,61871],{"class":78,"line":34785},[76,61852,57333],{"class":90},[76,61854,55918],{"class":53332},[76,61856,55518],{"class":86},[76,61858,370],{"class":90},[76,61860,61861],{"class":126},"\"prev\"",[76,61863,1829],{"class":90},[76,61865,61866],{"class":119},"&lt;",[76,61868,53817],{"class":90},[76,61870,55918],{"class":53332},[76,61872,53339],{"class":90},[76,61874,61875,61877,61879,61881,61883,61886,61888,61891,61893,61895],{"class":78,"line":34791},[76,61876,57333],{"class":90},[76,61878,55918],{"class":53332},[76,61880,55518],{"class":86},[76,61882,370],{"class":90},[76,61884,61885],{"class":126},"\"next\"",[76,61887,1829],{"class":90},[76,61889,61890],{"class":119},"&gt;",[76,61892,53817],{"class":90},[76,61894,55918],{"class":53332},[76,61896,53339],{"class":90},[76,61898,61899,61901,61903],{"class":78,"line":34811},[76,61900,57438],{"class":90},[76,61902,53643],{"class":53332},[76,61904,53339],{"class":90},[76,61906,61907,61909,61911],{"class":78,"line":34817},[76,61908,53808],{"class":90},[76,61910,53643],{"class":53332},[76,61912,53339],{"class":90},[76,61914,61915,61917,61919],{"class":78,"line":34833},[76,61916,54449],{"class":90},[76,61918,53643],{"class":53332},[76,61920,53339],{"class":90},[76,61922,61923,61925,61927],{"class":78,"line":34839},[76,61924,54176],{"class":90},[76,61926,53845],{"class":53332},[76,61928,53339],{"class":90},[76,61930,61931],{"class":78,"line":34853},[76,61932,61933],{"class":90},"    \u002F\u002F 1. 初始数据\n",[76,61935,61936],{"class":78,"line":34859},[76,61937,61938],{"class":90},"    const data = [\n",[76,61940,61941],{"class":78,"line":34874},[76,61942,61943],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[76,61945,61946],{"class":78,"line":34880},[76,61947,61948],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[76,61950,61951],{"class":78,"line":34889},[76,61952,61953],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[76,61955,61956],{"class":78,"line":34895},[76,61957,61958],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[76,61960,61961],{"class":78,"line":34904},[76,61962,61963],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[76,61965,61966],{"class":78,"line":34910},[76,61967,61968],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[76,61970,61971],{"class":78,"line":34916},[76,61972,61973],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[76,61975,61976],{"class":78,"line":34925},[76,61977,61978],{"class":90},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[76,61980,61981],{"class":78,"line":34931},[76,61982,55141],{"class":90},[76,61984,61985],{"class":78,"line":34942},[76,61986,61987],{"class":90},"    \u002F\u002F 获取元素\n",[76,61989,61990],{"class":78,"line":34948},[76,61991,61992],{"class":90},"    const img = document.querySelector('.slider-wrapper img')\n",[76,61994,61995],{"class":78,"line":34967},[76,61996,61997],{"class":90},"    const p = document.querySelector('.slider-footer p')\n",[76,61999,62000],{"class":78,"line":34973},[76,62001,62002],{"class":90},"    const footer = document.querySelector('.slider-footer')\n",[76,62004,62005],{"class":78,"line":34984},[76,62006,62007],{"class":90},"    \u002F\u002F 1. 右按钮业务\n",[76,62009,62010],{"class":78,"line":34990},[76,62011,62012],{"class":90},"    \u002F\u002F 1.1 获取右侧按钮 \n",[76,62014,62015],{"class":78,"line":35010},[76,62016,62017],{"class":90},"    const next = document.querySelector('.next')\n",[76,62019,62020],{"class":78,"line":35026},[76,62021,62022],{"class":90},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[76,62024,62025],{"class":78,"line":35032},[76,62026,62027],{"class":90},"    \u002F\u002F 1.2 注册点击事件\n",[76,62029,62030],{"class":78,"line":35046},[76,62031,149],{"emptyLinePlaceholder":148},[76,62033,62034],{"class":78,"line":35052},[76,62035,62036],{"class":90},"    next.addEventListener('click', function () {\n",[76,62038,62039],{"class":78,"line":35058},[76,62040,62041],{"class":90},"      \u002F\u002F console.log(11)\n",[76,62043,62044],{"class":78,"line":35069},[76,62045,62046],{"class":90},"      i++\n",[76,62048,62049],{"class":78,"line":35075},[76,62050,62051],{"class":90},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[76,62053,62054],{"class":78,"line":35081},[76,62055,62056],{"class":90},"      \u002F\u002F if (i >= 8) {\n",[76,62058,62059],{"class":78,"line":35091},[76,62060,62061],{"class":90},"      \u002F\u002F   i = 0\n",[76,62063,62064],{"class":78,"line":35097},[76,62065,62066],{"class":90},"      \u002F\u002F }\n",[76,62068,62069],{"class":78,"line":35108},[76,62070,62071],{"class":90},"      i = i >= data.length ? 0 : i\n",[76,62073,62074],{"class":78,"line":35114},[76,62075,62076],{"class":90},"      \u002F\u002F 1.3 得到对应的对象\n",[76,62078,62079],{"class":78,"line":35124},[76,62080,62081],{"class":90},"      \u002F\u002F console.log(data[i])\n",[76,62083,62084],{"class":78,"line":35129},[76,62085,62086],{"class":90},"      \u002F\u002F 调用函数\n",[76,62088,62089],{"class":78,"line":35135},[76,62090,62091],{"class":90},"      toggle()\n",[76,62093,62094],{"class":78,"line":35184},[76,62095,35499],{"class":90},[76,62097,62098],{"class":78,"line":35231},[76,62099,149],{"emptyLinePlaceholder":148},[76,62101,62102],{"class":78,"line":35236},[76,62103,62104],{"class":90},"    \u002F\u002F 2. 左侧按钮业务\n",[76,62106,62107],{"class":78,"line":35242},[76,62108,62109],{"class":90},"    \u002F\u002F 2.1 获取左侧按钮 \n",[76,62111,62112],{"class":78,"line":35261},[76,62113,62114],{"class":90},"    const prev = document.querySelector('.prev')\n",[76,62116,62117],{"class":78,"line":35267},[76,62118,62027],{"class":90},[76,62120,62121],{"class":78,"line":35287},[76,62122,62123],{"class":90},"    prev.addEventListener('click', function () {\n",[76,62125,62126],{"class":78,"line":35293},[76,62127,62128],{"class":90},"      i--\n",[76,62130,62131],{"class":78,"line":35299},[76,62132,62133],{"class":90},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[76,62135,62136],{"class":78,"line":35309},[76,62137,62138],{"class":90},"      \u002F\u002F if (i \u003C 0) {\n",[76,62140,62141],{"class":78,"line":35314},[76,62142,62143],{"class":90},"      \u002F\u002F   i = 7\n",[76,62145,62146],{"class":78,"line":35320},[76,62147,62066],{"class":90},[76,62149,62150],{"class":78,"line":35336},[76,62151,62152],{"class":90},"      i = i \u003C 0 ? data.length - 1 : i\n",[76,62154,62155],{"class":78,"line":35381},[76,62156,62076],{"class":90},[76,62158,62159],{"class":78,"line":35387},[76,62160,62081],{"class":90},[76,62162,62163],{"class":78,"line":35393},[76,62164,62086],{"class":90},[76,62166,62167],{"class":78,"line":35399},[76,62168,62091],{"class":90},[76,62170,62171],{"class":78,"line":35410},[76,62172,35499],{"class":90},[76,62174,62175],{"class":78,"line":35416},[76,62176,149],{"emptyLinePlaceholder":148},[76,62178,62179],{"class":78,"line":35422},[76,62180,62181],{"class":90},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[76,62183,62184],{"class":78,"line":35428},[76,62185,62186],{"class":90},"    function toggle() {\n",[76,62188,62189],{"class":78,"line":35446},[76,62190,62191],{"class":90},"      \u002F\u002F 1.4 渲染对应的数据\n",[76,62193,62194],{"class":78,"line":35460},[76,62195,62196],{"class":90},"      img.src = data[i].url\n",[76,62198,62199],{"class":78,"line":35469},[76,62200,62201],{"class":90},"      p.innerHTML = data[i].title\n",[76,62203,62204],{"class":78,"line":35478},[76,62205,62206],{"class":90},"      footer.style.backgroundColor = data[i].color\n",[76,62208,62209],{"class":78,"line":35487},[76,62210,62211],{"class":90},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[76,62213,62214],{"class":78,"line":35496},[76,62215,62216],{"class":90},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[76,62218,62219],{"class":78,"line":35502},[76,62220,62221],{"class":90},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[76,62223,62224],{"class":78,"line":35508},[76,62225,4283],{"class":90},[76,62227,62228],{"class":78,"line":35516},[76,62229,149],{"emptyLinePlaceholder":148},[76,62231,62232],{"class":78,"line":35521},[76,62233,62234],{"class":90},"    \u002F\u002F 3. 自动播放模块\n",[76,62236,62237],{"class":78,"line":35527},[76,62238,62239],{"class":90},"    let timerId = setInterval(function () {\n",[76,62241,62242],{"class":78,"line":35538},[76,62243,62244],{"class":90},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,62246,62247],{"class":78,"line":35544},[76,62248,62249],{"class":90},"      next.click()\n",[76,62251,62252],{"class":78,"line":35564},[76,62253,62254],{"class":90},"    }, 1000)\n",[76,62256,62257],{"class":78,"line":35570},[76,62258,149],{"emptyLinePlaceholder":148},[76,62260,62261],{"class":78,"line":35576},[76,62262,62263],{"class":90},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[76,62265,62266],{"class":78,"line":35582},[76,62267,62268],{"class":90},"    const slider = document.querySelector('.slider')\n",[76,62270,62271],{"class":78,"line":35599},[76,62272,62273],{"class":90},"    \u002F\u002F 注册事件\n",[76,62275,62276],{"class":78,"line":35605},[76,62277,62278],{"class":90},"    slider.addEventListener('mouseenter', function () {\n",[76,62280,62281],{"class":78,"line":35611},[76,62282,62283],{"class":90},"      \u002F\u002F 停止定时器\n",[76,62285,62286],{"class":78,"line":35617},[76,62287,62288],{"class":90},"      clearInterval(timerId)\n",[76,62290,62291],{"class":78,"line":35623},[76,62292,35499],{"class":90},[76,62294,62295],{"class":78,"line":35629},[76,62296,149],{"emptyLinePlaceholder":148},[76,62298,62299],{"class":78,"line":35656},[76,62300,62301],{"class":90},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[76,62303,62304],{"class":78,"line":35680},[76,62305,62273],{"class":90},[76,62307,62308],{"class":78,"line":35686},[76,62309,62310],{"class":90},"    slider.addEventListener('mouseleave', function () {\n",[76,62312,62313],{"class":78,"line":35692},[76,62314,62283],{"class":90},[76,62316,62317],{"class":78,"line":35698},[76,62318,62319],{"class":90},"      if (timerId) clearInterval(timerId)\n",[76,62321,62322],{"class":78,"line":35709},[76,62323,62324],{"class":90},"      \u002F\u002F 开启定时器\n",[76,62326,62327],{"class":78,"line":35720},[76,62328,62329],{"class":90},"      timerId = setInterval(function () {\n",[76,62331,62332],{"class":78,"line":35726},[76,62333,62334],{"class":90},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,62336,62337],{"class":78,"line":35743},[76,62338,62339],{"class":90},"        next.click()\n",[76,62341,62342],{"class":78,"line":35766},[76,62343,62344],{"class":90},"      }, 1000)\n",[76,62346,62347],{"class":78,"line":35789},[76,62348,35499],{"class":90},[76,62350,62351,62353,62355],{"class":78,"line":35795},[76,62352,54449],{"class":90},[76,62354,53845],{"class":53332},[76,62356,53339],{"class":90},[76,62358,62359,62361,62363],{"class":78,"line":35800},[76,62360,53817],{"class":90},[76,62362,53832],{"class":53332},[76,62364,53339],{"class":90},[76,62366,62367],{"class":78,"line":35809},[76,62368,149],{"emptyLinePlaceholder":148},[76,62370,62371,62373,62375],{"class":78,"line":35819},[76,62372,53817],{"class":90},[76,62374,52667],{"class":53332},[76,62376,53339],{"class":90},[24047,62378,62380],{"id":62379},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62382,62383],{},"小米搜索框案例：",[66,62385,62387],{"className":52665,"code":62386,"language":52667,"meta":71,"style":71},"\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",[73,62388,62389,62399,62413,62417,62425,62439,62459,62479,62491,62499,62505,62515,62525,62537,62541,62545,62552,62556,62567,62571,62575,62582,62593,62606,62620,62624,62628,62636,62648,62660,62674,62687,62700,62718,62729,62733,62737,62746,62763,62767,62771,62778,62788,62798,62809,62822,62834,62850,62861,62873,62877,62881,62889,62900,62917,62929,62941,62952,62956,62960,62971,62982,62986,62994,62998,63006,63010,63018,63033,63056,63071,63102,63129,63156,63183,63210,63237,63264,63273,63281,63289,63294,63314,63334,63339,63344,63362,63367,63377,63382,63396,63401,63406,63423,63432,63444,63448,63456,63464,63468],{"__ignoreMap":71},[76,62390,62391,62393,62395,62397],{"class":78,"line":79},[76,62392,53329],{"class":90},[76,62394,53333],{"class":53332},[76,62396,53336],{"class":86},[76,62398,53339],{"class":90},[76,62400,62401,62403,62405,62407,62409,62411],{"class":78,"line":94},[76,62402,584],{"class":90},[76,62404,52667],{"class":53332},[76,62406,53348],{"class":86},[76,62408,370],{"class":90},[76,62410,53353],{"class":126},[76,62412,53339],{"class":90},[76,62414,62415],{"class":78,"line":133},[76,62416,149],{"emptyLinePlaceholder":148},[76,62418,62419,62421,62423],{"class":78,"line":145},[76,62420,584],{"class":90},[76,62422,53366],{"class":53332},[76,62424,53339],{"class":90},[76,62426,62427,62429,62431,62433,62435,62437],{"class":78,"line":152},[76,62428,53373],{"class":90},[76,62430,53376],{"class":53332},[76,62432,53379],{"class":86},[76,62434,370],{"class":90},[76,62436,53384],{"class":126},[76,62438,53339],{"class":90},[76,62440,62441,62443,62445,62447,62449,62451,62453,62455,62457],{"class":78,"line":157},[76,62442,53373],{"class":90},[76,62444,53376],{"class":53332},[76,62446,53395],{"class":86},[76,62448,370],{"class":90},[76,62450,53400],{"class":126},[76,62452,53403],{"class":86},[76,62454,370],{"class":90},[76,62456,53408],{"class":126},[76,62458,53339],{"class":90},[76,62460,62461,62463,62465,62467,62469,62471,62473,62475,62477],{"class":78,"line":246},[76,62462,53373],{"class":90},[76,62464,53376],{"class":53332},[76,62466,16972],{"class":86},[76,62468,370],{"class":90},[76,62470,53423],{"class":126},[76,62472,53403],{"class":86},[76,62474,370],{"class":90},[76,62476,53430],{"class":126},[76,62478,53339],{"class":90},[76,62480,62481,62483,62485,62487,62489],{"class":78,"line":251},[76,62482,53373],{"class":90},[76,62484,53439],{"class":53332},[76,62486,53442],{"class":90},[76,62488,53439],{"class":53332},[76,62490,53339],{"class":90},[76,62492,62493,62495,62497],{"class":78,"line":257},[76,62494,53373],{"class":90},[76,62496,2178],{"class":53332},[76,62498,53339],{"class":90},[76,62500,62501,62503],{"class":78,"line":641},[76,62502,53459],{"class":53332},[76,62504,17623],{"class":90},[76,62506,62507,62509,62511,62513],{"class":78,"line":646},[76,62508,53466],{"class":119},[76,62510,53469],{"class":90},[76,62512,1294],{"class":119},[76,62514,3415],{"class":90},[76,62516,62517,62519,62521,62523],{"class":78,"line":659},[76,62518,53478],{"class":119},[76,62520,53469],{"class":90},[76,62522,1294],{"class":119},[76,62524,3415],{"class":90},[76,62526,62527,62530,62532,62535],{"class":78,"line":1608},[76,62528,62529],{"class":119},"            box-sizing",[76,62531,53469],{"class":90},[76,62533,62534],{"class":119},"border-box",[76,62536,3415],{"class":90},[76,62538,62539],{"class":78,"line":1632},[76,62540,4624],{"class":90},[76,62542,62543],{"class":78,"line":1637},[76,62544,149],{"emptyLinePlaceholder":148},[76,62546,62547,62550],{"class":78,"line":1642},[76,62548,62549],{"class":53332},"        ul",[76,62551,17623],{"class":90},[76,62553,62554],{"class":78,"line":1652},[76,62555,149],{"emptyLinePlaceholder":148},[76,62557,62558,62561,62563,62565],{"class":78,"line":1660},[76,62559,62560],{"class":119},"            list-style",[76,62562,53469],{"class":90},[76,62564,56768],{"class":119},[76,62566,3415],{"class":90},[76,62568,62569],{"class":78,"line":1683},[76,62570,4624],{"class":90},[76,62572,62573],{"class":78,"line":1698},[76,62574,149],{"emptyLinePlaceholder":148},[76,62576,62577,62580],{"class":78,"line":1711},[76,62578,62579],{"class":86},"        .mi",[76,62581,17623],{"class":90},[76,62583,62584,62587,62589,62591],{"class":78,"line":1717},[76,62585,62586],{"class":119},"            position",[76,62588,53469],{"class":90},[76,62590,56795],{"class":119},[76,62592,3415],{"class":90},[76,62594,62595,62597,62599,62602,62604],{"class":78,"line":1728},[76,62596,53516],{"class":119},[76,62598,53469],{"class":90},[76,62600,62601],{"class":119},"223",[76,62603,53524],{"class":82},[76,62605,3415],{"class":90},[76,62607,62608,62610,62612,62614,62616,62618],{"class":78,"line":1740},[76,62609,53466],{"class":119},[76,62611,53469],{"class":90},[76,62613,2575],{"class":119},[76,62615,53524],{"class":82},[76,62617,53588],{"class":119},[76,62619,3415],{"class":90},[76,62621,62622],{"class":78,"line":1746},[76,62623,4624],{"class":90},[76,62625,62626],{"class":78,"line":1751},[76,62627,149],{"emptyLinePlaceholder":148},[76,62629,62630,62632,62634],{"class":78,"line":1756},[76,62631,62579],{"class":86},[76,62633,1914],{"class":53332},[76,62635,17623],{"class":90},[76,62637,62638,62640,62642,62644,62646],{"class":78,"line":1766},[76,62639,53516],{"class":119},[76,62641,53469],{"class":90},[76,62643,62601],{"class":119},[76,62645,53524],{"class":82},[76,62647,3415],{"class":90},[76,62649,62650,62652,62654,62656,62658],{"class":78,"line":1773},[76,62651,53531],{"class":119},[76,62653,53469],{"class":90},[76,62655,2867],{"class":119},[76,62657,53524],{"class":82},[76,62659,3415],{"class":90},[76,62661,62662,62664,62666,62668,62670,62672],{"class":78,"line":1793},[76,62663,53478],{"class":119},[76,62665,53469],{"class":90},[76,62667,1294],{"class":119},[76,62669,4134],{"class":119},[76,62671,53524],{"class":82},[76,62673,3415],{"class":90},[76,62675,62676,62679,62681,62683,62685],{"class":78,"line":1806},[76,62677,62678],{"class":119},"            font-size",[76,62680,53469],{"class":90},[76,62682,2810],{"class":119},[76,62684,53524],{"class":82},[76,62686,3415],{"class":90},[76,62688,62689,62692,62694,62696,62698],{"class":78,"line":1817},[76,62690,62691],{"class":119},"            line-height",[76,62693,53469],{"class":90},[76,62695,2867],{"class":119},[76,62697,53524],{"class":82},[76,62699,3415],{"class":90},[76,62701,62702,62705,62707,62709,62711,62713,62716],{"class":78,"line":1822},[76,62703,62704],{"class":119},"            border",[76,62706,53469],{"class":90},[76,62708,669],{"class":119},[76,62710,53524],{"class":82},[76,62712,53553],{"class":119},[76,62714,62715],{"class":119}," #e0e0e0",[76,62717,3415],{"class":90},[76,62719,62720,62723,62725,62727],{"class":78,"line":1835},[76,62721,62722],{"class":119},"            outline",[76,62724,53469],{"class":90},[76,62726,56768],{"class":119},[76,62728,3415],{"class":90},[76,62730,62731],{"class":78,"line":1847},[76,62732,4624],{"class":90},[76,62734,62735],{"class":78,"line":1852},[76,62736,149],{"emptyLinePlaceholder":148},[76,62738,62739,62741,62744],{"class":78,"line":1862},[76,62740,62579],{"class":86},[76,62742,62743],{"class":86}," .search",[76,62745,17623],{"class":90},[76,62747,62748,62750,62752,62754,62756,62758,62761],{"class":78,"line":1874},[76,62749,62704],{"class":119},[76,62751,53469],{"class":90},[76,62753,669],{"class":119},[76,62755,53524],{"class":82},[76,62757,53553],{"class":119},[76,62759,62760],{"class":119}," #ff6700",[76,62762,3415],{"class":90},[76,62764,62765],{"class":78,"line":1879},[76,62766,4624],{"class":90},[76,62768,62769],{"class":78,"line":1884},[76,62770,149],{"emptyLinePlaceholder":148},[76,62772,62773,62776],{"class":78,"line":1889},[76,62774,62775],{"class":86},"        .result-list",[76,62777,17623],{"class":90},[76,62779,62780,62782,62784,62786],{"class":78,"line":1900},[76,62781,53504],{"class":119},[76,62783,53469],{"class":90},[76,62785,56768],{"class":119},[76,62787,3415],{"class":90},[76,62789,62790,62792,62794,62796],{"class":78,"line":1906},[76,62791,62586],{"class":119},[76,62793,53469],{"class":90},[76,62795,56862],{"class":119},[76,62797,3415],{"class":90},[76,62799,62800,62803,62805,62807],{"class":78,"line":1924},[76,62801,62802],{"class":119},"            left",[76,62804,53469],{"class":90},[76,62806,1294],{"class":119},[76,62808,3415],{"class":90},[76,62810,62811,62814,62816,62818,62820],{"class":78,"line":1929},[76,62812,62813],{"class":119},"            top",[76,62815,53469],{"class":90},[76,62817,2867],{"class":119},[76,62819,53524],{"class":82},[76,62821,3415],{"class":90},[76,62823,62824,62826,62828,62830,62832],{"class":78,"line":1944},[76,62825,53516],{"class":119},[76,62827,53469],{"class":90},[76,62829,62601],{"class":119},[76,62831,53524],{"class":82},[76,62833,3415],{"class":90},[76,62835,62836,62838,62840,62842,62844,62846,62848],{"class":78,"line":1950},[76,62837,62704],{"class":119},[76,62839,53469],{"class":90},[76,62841,669],{"class":119},[76,62843,53524],{"class":82},[76,62845,53553],{"class":119},[76,62847,62760],{"class":119},[76,62849,3415],{"class":90},[76,62851,62852,62855,62857,62859],{"class":78,"line":1965},[76,62853,62854],{"class":119},"            border-top",[76,62856,53469],{"class":90},[76,62858,1294],{"class":119},[76,62860,3415],{"class":90},[76,62862,62863,62866,62868,62871],{"class":78,"line":1971},[76,62864,62865],{"class":119},"            background",[76,62867,53469],{"class":90},[76,62869,62870],{"class":119},"#fff",[76,62872,3415],{"class":90},[76,62874,62875],{"class":78,"line":1985},[76,62876,4624],{"class":90},[76,62878,62879],{"class":78,"line":1991},[76,62880,149],{"emptyLinePlaceholder":148},[76,62882,62883,62885,62887],{"class":78,"line":2005},[76,62884,62775],{"class":86},[76,62886,3519],{"class":53332},[76,62888,17623],{"class":90},[76,62890,62891,62893,62895,62898],{"class":78,"line":2017},[76,62892,53504],{"class":119},[76,62894,53469],{"class":90},[76,62896,62897],{"class":119},"block",[76,62899,3415],{"class":90},[76,62901,62902,62904,62906,62908,62910,62913,62915],{"class":78,"line":2023},[76,62903,53478],{"class":119},[76,62905,53469],{"class":90},[76,62907,2608],{"class":119},[76,62909,53524],{"class":82},[76,62911,62912],{"class":119}," 15",[76,62914,53524],{"class":82},[76,62916,3415],{"class":90},[76,62918,62919,62921,62923,62925,62927],{"class":78,"line":2031},[76,62920,62678],{"class":119},[76,62922,53469],{"class":90},[76,62924,2760],{"class":119},[76,62926,53524],{"class":82},[76,62928,3415],{"class":90},[76,62930,62931,62934,62936,62939],{"class":78,"line":11880},[76,62932,62933],{"class":119},"            color",[76,62935,53469],{"class":90},[76,62937,62938],{"class":119},"#424242",[76,62940,3415],{"class":90},[76,62942,62943,62946,62948,62950],{"class":78,"line":11901},[76,62944,62945],{"class":119},"            text-decoration",[76,62947,53469],{"class":90},[76,62949,56768],{"class":119},[76,62951,3415],{"class":90},[76,62953,62954],{"class":78,"line":11907},[76,62955,4624],{"class":90},[76,62957,62958],{"class":78,"line":11921},[76,62959,149],{"emptyLinePlaceholder":148},[76,62961,62962,62964,62966,62969],{"class":78,"line":11927},[76,62963,62775],{"class":86},[76,62965,3519],{"class":53332},[76,62967,62968],{"class":86},":hover",[76,62970,17623],{"class":90},[76,62972,62973,62975,62977,62980],{"class":78,"line":11954},[76,62974,53672],{"class":119},[76,62976,53469],{"class":90},[76,62978,62979],{"class":119},"#eee",[76,62981,3415],{"class":90},[76,62983,62984],{"class":78,"line":11963},[76,62985,4624],{"class":90},[76,62987,62988,62990,62992],{"class":78,"line":11969},[76,62989,53808],{"class":90},[76,62991,2178],{"class":53332},[76,62993,53339],{"class":90},[76,62995,62996],{"class":78,"line":11977},[76,62997,149],{"emptyLinePlaceholder":148},[76,62999,63000,63002,63004],{"class":78,"line":11982},[76,63001,53817],{"class":90},[76,63003,53366],{"class":53332},[76,63005,53339],{"class":90},[76,63007,63008],{"class":78,"line":18654},[76,63009,149],{"emptyLinePlaceholder":148},[76,63011,63012,63014,63016],{"class":78,"line":18660},[76,63013,584],{"class":90},[76,63015,53832],{"class":53332},[76,63017,53339],{"class":90},[76,63019,63020,63022,63024,63026,63028,63031],{"class":78,"line":18683},[76,63021,53373],{"class":90},[76,63023,53643],{"class":53332},[76,63025,55518],{"class":86},[76,63027,370],{"class":90},[76,63029,63030],{"class":126},"\"mi\"",[76,63032,53339],{"class":90},[76,63034,63035,63037,63039,63041,63043,63046,63049,63051,63054],{"class":78,"line":18689},[76,63036,57333],{"class":90},[76,63038,1673],{"class":53332},[76,63040,55855],{"class":86},[76,63042,370],{"class":90},[76,63044,63045],{"class":126},"\"search\"",[76,63047,63048],{"class":86}," placeholder",[76,63050,370],{"class":90},[76,63052,63053],{"class":126},"\"小米笔记本\"",[76,63055,53339],{"class":90},[76,63057,63058,63060,63062,63064,63066,63069],{"class":78,"line":18712},[76,63059,57333],{"class":90},[76,63061,3261],{"class":53332},[76,63063,55518],{"class":86},[76,63065,370],{"class":90},[76,63067,63068],{"class":126},"\"result-list\"",[76,63070,53339],{"class":90},[76,63072,63073,63076,63078,63081,63083,63086,63088,63091,63094,63096,63098,63100],{"class":78,"line":18726},[76,63074,63075],{"class":90},"            \u003C",[76,63077,29],{"class":53332},[76,63079,63080],{"class":90},">\u003C",[76,63082,2503],{"class":53332},[76,63084,63085],{"class":86}," href",[76,63087,370],{"class":90},[76,63089,63090],{"class":126},"\"#\"",[76,63092,63093],{"class":90},">全部商品\u003C\u002F",[76,63095,2503],{"class":53332},[76,63097,57345],{"class":90},[76,63099,29],{"class":53332},[76,63101,53339],{"class":90},[76,63103,63104,63106,63108,63110,63112,63114,63116,63118,63121,63123,63125,63127],{"class":78,"line":18746},[76,63105,63075],{"class":90},[76,63107,29],{"class":53332},[76,63109,63080],{"class":90},[76,63111,2503],{"class":53332},[76,63113,63085],{"class":86},[76,63115,370],{"class":90},[76,63117,63090],{"class":126},[76,63119,63120],{"class":90},">小米11\u003C\u002F",[76,63122,2503],{"class":53332},[76,63124,57345],{"class":90},[76,63126,29],{"class":53332},[76,63128,53339],{"class":90},[76,63130,63131,63133,63135,63137,63139,63141,63143,63145,63148,63150,63152,63154],{"class":78,"line":18752},[76,63132,63075],{"class":90},[76,63134,29],{"class":53332},[76,63136,63080],{"class":90},[76,63138,2503],{"class":53332},[76,63140,63085],{"class":86},[76,63142,370],{"class":90},[76,63144,63090],{"class":126},[76,63146,63147],{"class":90},">小米10S\u003C\u002F",[76,63149,2503],{"class":53332},[76,63151,57345],{"class":90},[76,63153,29],{"class":53332},[76,63155,53339],{"class":90},[76,63157,63158,63160,63162,63164,63166,63168,63170,63172,63175,63177,63179,63181],{"class":78,"line":18763},[76,63159,63075],{"class":90},[76,63161,29],{"class":53332},[76,63163,63080],{"class":90},[76,63165,2503],{"class":53332},[76,63167,63085],{"class":86},[76,63169,370],{"class":90},[76,63171,63090],{"class":126},[76,63173,63174],{"class":90},">小米笔记本\u003C\u002F",[76,63176,2503],{"class":53332},[76,63178,57345],{"class":90},[76,63180,29],{"class":53332},[76,63182,53339],{"class":90},[76,63184,63185,63187,63189,63191,63193,63195,63197,63199,63202,63204,63206,63208],{"class":78,"line":18786},[76,63186,63075],{"class":90},[76,63188,29],{"class":53332},[76,63190,63080],{"class":90},[76,63192,2503],{"class":53332},[76,63194,63085],{"class":86},[76,63196,370],{"class":90},[76,63198,63090],{"class":126},[76,63200,63201],{"class":90},">小米手机\u003C\u002F",[76,63203,2503],{"class":53332},[76,63205,57345],{"class":90},[76,63207,29],{"class":53332},[76,63209,53339],{"class":90},[76,63211,63212,63214,63216,63218,63220,63222,63224,63226,63229,63231,63233,63235],{"class":78,"line":18808},[76,63213,63075],{"class":90},[76,63215,29],{"class":53332},[76,63217,63080],{"class":90},[76,63219,2503],{"class":53332},[76,63221,63085],{"class":86},[76,63223,370],{"class":90},[76,63225,63090],{"class":126},[76,63227,63228],{"class":90},">黑鲨4\u003C\u002F",[76,63230,2503],{"class":53332},[76,63232,57345],{"class":90},[76,63234,29],{"class":53332},[76,63236,53339],{"class":90},[76,63238,63239,63241,63243,63245,63247,63249,63251,63253,63256,63258,63260,63262],{"class":78,"line":18813},[76,63240,63075],{"class":90},[76,63242,29],{"class":53332},[76,63244,63080],{"class":90},[76,63246,2503],{"class":53332},[76,63248,63085],{"class":86},[76,63250,370],{"class":90},[76,63252,63090],{"class":126},[76,63254,63255],{"class":90},">空调\u003C\u002F",[76,63257,2503],{"class":53332},[76,63259,57345],{"class":90},[76,63261,29],{"class":53332},[76,63263,53339],{"class":90},[76,63265,63266,63269,63271],{"class":78,"line":18819},[76,63267,63268],{"class":90},"        \u003C\u002F",[76,63270,3261],{"class":53332},[76,63272,53339],{"class":90},[76,63274,63275,63277,63279],{"class":78,"line":18833},[76,63276,53808],{"class":90},[76,63278,53643],{"class":53332},[76,63280,53339],{"class":90},[76,63282,63283,63285,63287],{"class":78,"line":18846},[76,63284,53373],{"class":90},[76,63286,53845],{"class":53332},[76,63288,53339],{"class":90},[76,63290,63291],{"class":78,"line":18851},[76,63292,63293],{"class":540},"        \u002F\u002F 1. 获取元素\n",[76,63295,63296,63299,63301,63303,63305,63307,63309,63312],{"class":78,"line":18865},[76,63297,63298],{"class":82},"        const",[76,63300,1914],{"class":119},[76,63302,15617],{"class":82},[76,63304,56427],{"class":90},[76,63306,56430],{"class":86},[76,63308,123],{"class":90},[76,63310,63311],{"class":126},"'[type=search]'",[76,63313,130],{"class":90},[76,63315,63316,63318,63321,63323,63325,63327,63329,63332],{"class":78,"line":18870},[76,63317,63298],{"class":82},[76,63319,63320],{"class":119}," ul",[76,63322,15617],{"class":82},[76,63324,56427],{"class":90},[76,63326,56430],{"class":86},[76,63328,123],{"class":90},[76,63330,63331],{"class":126},"'.result-list'",[76,63333,130],{"class":90},[76,63335,63336],{"class":78,"line":18876},[76,63337,63338],{"class":540},"        \u002F\u002F console.log(input)\n",[76,63340,63341],{"class":78,"line":18881},[76,63342,63343],{"class":540},"        \u002F\u002F 2. 监听事件 获得焦点\n",[76,63345,63346,63349,63351,63353,63356,63358,63360],{"class":78,"line":18895},[76,63347,63348],{"class":90},"        input.",[76,63350,59843],{"class":86},[76,63352,123],{"class":90},[76,63354,63355],{"class":126},"'focus'",[76,63357,405],{"class":90},[76,63359,56480],{"class":82},[76,63361,56483],{"class":90},[76,63363,63364],{"class":78,"line":18900},[76,63365,63366],{"class":540},"            \u002F\u002F ul显示\n",[76,63368,63369,63372,63374],{"class":78,"line":18905},[76,63370,63371],{"class":90},"            ul.style.display ",[76,63373,370],{"class":82},[76,63375,63376],{"class":126}," 'block'\n",[76,63378,63379],{"class":78,"line":18919},[76,63380,63381],{"class":540},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[76,63383,63384,63387,63389,63391,63394],{"class":78,"line":18931},[76,63385,63386],{"class":90},"            input.classList.",[76,63388,7414],{"class":86},[76,63390,123],{"class":90},[76,63392,63393],{"class":126},"'search'",[76,63395,130],{"class":90},[76,63397,63398],{"class":78,"line":18936},[76,63399,63400],{"class":90},"        })\n",[76,63402,63403],{"class":78,"line":18949},[76,63404,63405],{"class":540},"        \u002F\u002F 3. 监听事件 失去焦点\n",[76,63407,63408,63410,63412,63414,63417,63419,63421],{"class":78,"line":18954},[76,63409,63348],{"class":90},[76,63411,59843],{"class":86},[76,63413,123],{"class":90},[76,63415,63416],{"class":126},"'blur'",[76,63418,405],{"class":90},[76,63420,56480],{"class":82},[76,63422,56483],{"class":90},[76,63424,63425,63427,63429],{"class":78,"line":18959},[76,63426,63371],{"class":90},[76,63428,370],{"class":82},[76,63430,63431],{"class":126}," 'none'\n",[76,63433,63434,63436,63438,63440,63442],{"class":78,"line":18964},[76,63435,63386],{"class":90},[76,63437,59036],{"class":86},[76,63439,123],{"class":90},[76,63441,63393],{"class":126},[76,63443,130],{"class":90},[76,63445,63446],{"class":78,"line":18977},[76,63447,63400],{"class":90},[76,63449,63450,63452,63454],{"class":78,"line":18982},[76,63451,53808],{"class":90},[76,63453,53845],{"class":53332},[76,63455,53339],{"class":90},[76,63457,63458,63460,63462],{"class":78,"line":34671},[76,63459,53817],{"class":90},[76,63461,53832],{"class":53332},[76,63463,53339],{"class":90},[76,63465,63466],{"class":78,"line":34677},[76,63467,149],{"emptyLinePlaceholder":148},[76,63469,63470,63472,63474],{"class":78,"line":34683},[76,63471,53817],{"class":90},[76,63473,52667],{"class":53332},[76,63475,53339],{"class":90},[24047,63477,63479],{"id":63478},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63481,63482],{},"评论字数统计案例",[19,63484,63485],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63487,63488],{},"牢记focus伪类选择器",[53376,63490],{"charSet":63491},"UTF-8",[53376,63493],{"name":63494,"content":63495},"viewport","width=device-width, initial-scale=1.0",[53439,63497,63498],{},"Document",[2178,63500,63501],{},"\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",[1673,63503],{"type":7268},[3261,63505,63506,63509],{},[29,63507,63508],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63510,63511],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[66,63513,63515],{"className":52665,"code":63514,"language":52667,"meta":71,"style":71},"\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",[73,63516,63517,63527,63541,63545,63553,63567,63587,63607,63620,63628,63635,63648,63662,63672,63682,63686,63690,63697,63709,63721,63733,63745,63774,63787,63791,63795,63804,63815,63827,63838,63849,63861,63872,63884,63900,63912,63916,63920,63931,63942,63952,63964,63968,63972,63980,63991,64001,64012,64024,64037,64049,64061,64065,64069,64078,64090,64101,64114,64125,64139,64143,64147,64154,64166,64178,64188,64192,64196,64205,64217,64227,64231,64235,64246,64256,64275,64288,64292,64296,64306,64316,64320,64324,64335,64346,64358,64370,64374,64378,64389,64400,64414,64418,64422,64433,64443,64455,64459,64467,64475,64479,64487,64502,64521,64561,64574,64582,64596,64616,64624,64639,64662,64680,64695,64715,64735,64755,64763,64771,64779,64787,64807,64827,64832,64849,64858,64862,64867,64883,64891,64895,64900,64917,64922,64947,64951,64955,64960,64965,64973,64981,64985],{"__ignoreMap":71},[76,63518,63519,63521,63523,63525],{"class":78,"line":79},[76,63520,53329],{"class":90},[76,63522,53333],{"class":53332},[76,63524,53336],{"class":86},[76,63526,53339],{"class":90},[76,63528,63529,63531,63533,63535,63537,63539],{"class":78,"line":94},[76,63530,584],{"class":90},[76,63532,52667],{"class":53332},[76,63534,53348],{"class":86},[76,63536,370],{"class":90},[76,63538,53353],{"class":126},[76,63540,53339],{"class":90},[76,63542,63543],{"class":78,"line":133},[76,63544,149],{"emptyLinePlaceholder":148},[76,63546,63547,63549,63551],{"class":78,"line":145},[76,63548,584],{"class":90},[76,63550,53366],{"class":53332},[76,63552,53339],{"class":90},[76,63554,63555,63557,63559,63561,63563,63565],{"class":78,"line":152},[76,63556,54176],{"class":90},[76,63558,53376],{"class":53332},[76,63560,53379],{"class":86},[76,63562,370],{"class":90},[76,63564,53384],{"class":126},[76,63566,53339],{"class":90},[76,63568,63569,63571,63573,63575,63577,63579,63581,63583,63585],{"class":78,"line":157},[76,63570,54176],{"class":90},[76,63572,53376],{"class":53332},[76,63574,53395],{"class":86},[76,63576,370],{"class":90},[76,63578,53400],{"class":126},[76,63580,53403],{"class":86},[76,63582,370],{"class":90},[76,63584,53408],{"class":126},[76,63586,53339],{"class":90},[76,63588,63589,63591,63593,63595,63597,63599,63601,63603,63605],{"class":78,"line":246},[76,63590,54176],{"class":90},[76,63592,53376],{"class":53332},[76,63594,16972],{"class":86},[76,63596,370],{"class":90},[76,63598,53423],{"class":126},[76,63600,53403],{"class":86},[76,63602,370],{"class":90},[76,63604,53430],{"class":126},[76,63606,53339],{"class":90},[76,63608,63609,63611,63613,63616,63618],{"class":78,"line":251},[76,63610,54176],{"class":90},[76,63612,53439],{"class":53332},[76,63614,63615],{"class":90},">评论回车发布\u003C\u002F",[76,63617,53439],{"class":53332},[76,63619,53339],{"class":90},[76,63621,63622,63624,63626],{"class":78,"line":257},[76,63623,54176],{"class":90},[76,63625,2178],{"class":53332},[76,63627,53339],{"class":90},[76,63629,63630,63633],{"class":78,"line":641},[76,63631,63632],{"class":86},"    .wrapper",[76,63634,17623],{"class":90},[76,63636,63637,63640,63642,63644,63646],{"class":78,"line":646},[76,63638,63639],{"class":119},"      min-width",[76,63641,53469],{"class":90},[76,63643,6071],{"class":119},[76,63645,53524],{"class":82},[76,63647,3415],{"class":90},[76,63649,63650,63653,63655,63658,63660],{"class":78,"line":659},[76,63651,63652],{"class":119},"      max-width",[76,63654,53469],{"class":90},[76,63656,63657],{"class":119},"800",[76,63659,53524],{"class":82},[76,63661,3415],{"class":90},[76,63663,63664,63666,63668,63670],{"class":78,"line":1608},[76,63665,57040],{"class":119},[76,63667,53469],{"class":90},[76,63669,53509],{"class":119},[76,63671,3415],{"class":90},[76,63673,63674,63676,63678,63680],{"class":78,"line":1632},[76,63675,57051],{"class":119},[76,63677,53469],{"class":90},[76,63679,53612],{"class":119},[76,63681,3415],{"class":90},[76,63683,63684],{"class":78,"line":1637},[76,63685,4283],{"class":90},[76,63687,63688],{"class":78,"line":1642},[76,63689,149],{"emptyLinePlaceholder":148},[76,63691,63692,63695],{"class":78,"line":1652},[76,63693,63694],{"class":86},"    .avatar",[76,63696,17623],{"class":90},[76,63698,63699,63701,63703,63705,63707],{"class":78,"line":1660},[76,63700,56802],{"class":119},[76,63702,53469],{"class":90},[76,63704,2867],{"class":119},[76,63706,53524],{"class":82},[76,63708,3415],{"class":90},[76,63710,63711,63713,63715,63717,63719],{"class":78,"line":1683},[76,63712,56816],{"class":119},[76,63714,53469],{"class":90},[76,63716,2867],{"class":119},[76,63718,53524],{"class":82},[76,63720,3415],{"class":90},[76,63722,63723,63725,63727,63729,63731],{"class":78,"line":1698},[76,63724,57165],{"class":119},[76,63726,53469],{"class":90},[76,63728,2915],{"class":119},[76,63730,2592],{"class":82},[76,63732,3415],{"class":90},[76,63734,63735,63738,63740,63743],{"class":78,"line":1711},[76,63736,63737],{"class":119},"      overflow",[76,63739,53469],{"class":90},[76,63741,63742],{"class":119},"hidden",[76,63744,3415],{"class":90},[76,63746,63747,63750,63752,63755,63757,63760,63762,63765,63767,63769,63772],{"class":78,"line":1717},[76,63748,63749],{"class":119},"      background",[76,63751,53469],{"class":90},[76,63753,63754],{"class":119},"url",[76,63756,123],{"class":90},[76,63758,63759],{"class":7296},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[76,63761,15767],{"class":90},[76,63763,63764],{"class":119},"no-repeat",[76,63766,19193],{"class":119},[76,63768,27028],{"class":90},[76,63770,63771],{"class":119},"cover",[76,63773,3415],{"class":90},[76,63775,63776,63779,63781,63783,63785],{"class":78,"line":1728},[76,63777,63778],{"class":119},"      margin-right",[76,63780,53469],{"class":90},[76,63782,408],{"class":119},[76,63784,53524],{"class":82},[76,63786,3415],{"class":90},[76,63788,63789],{"class":78,"line":1740},[76,63790,4283],{"class":90},[76,63792,63793],{"class":78,"line":1746},[76,63794,149],{"emptyLinePlaceholder":148},[76,63796,63797,63799,63802],{"class":78,"line":1751},[76,63798,63632],{"class":86},[76,63800,63801],{"class":53332}," textarea",[76,63803,17623],{"class":90},[76,63805,63806,63809,63811,63813],{"class":78,"line":1756},[76,63807,63808],{"class":119},"      outline",[76,63810,53469],{"class":90},[76,63812,56768],{"class":119},[76,63814,3415],{"class":90},[76,63816,63817,63820,63822,63825],{"class":78,"line":1766},[76,63818,63819],{"class":119},"      border-color",[76,63821,53469],{"class":90},[76,63823,63824],{"class":119},"transparent",[76,63826,3415],{"class":90},[76,63828,63829,63832,63834,63836],{"class":78,"line":1773},[76,63830,63831],{"class":119},"      resize",[76,63833,53469],{"class":90},[76,63835,56768],{"class":119},[76,63837,3415],{"class":90},[76,63839,63840,63842,63844,63847],{"class":78,"line":1793},[76,63841,63749],{"class":119},[76,63843,53469],{"class":90},[76,63845,63846],{"class":119},"#f5f5f5",[76,63848,3415],{"class":90},[76,63850,63851,63853,63855,63857,63859],{"class":78,"line":1806},[76,63852,57165],{"class":119},[76,63854,53469],{"class":90},[76,63856,2557],{"class":119},[76,63858,53524],{"class":82},[76,63860,3415],{"class":90},[76,63862,63863,63866,63868,63870],{"class":78,"line":1817},[76,63864,63865],{"class":119},"      flex",[76,63867,53469],{"class":90},[76,63869,669],{"class":119},[76,63871,3415],{"class":90},[76,63873,63874,63876,63878,63880,63882],{"class":78,"line":1822},[76,63875,56726],{"class":119},[76,63877,53469],{"class":90},[76,63879,402],{"class":119},[76,63881,53524],{"class":82},[76,63883,3415],{"class":90},[76,63885,63886,63889,63891,63893,63896,63898],{"class":78,"line":1835},[76,63887,63888],{"class":119},"      transition",[76,63890,53469],{"class":90},[76,63892,30170],{"class":119},[76,63894,63895],{"class":119}," 0.5",[76,63897,2954],{"class":82},[76,63899,3415],{"class":90},[76,63901,63902,63904,63906,63908,63910],{"class":78,"line":1847},[76,63903,56816],{"class":119},[76,63905,53469],{"class":90},[76,63907,3206],{"class":119},[76,63909,53524],{"class":82},[76,63911,3415],{"class":90},[76,63913,63914],{"class":78,"line":1852},[76,63915,4283],{"class":90},[76,63917,63918],{"class":78,"line":1862},[76,63919,149],{"emptyLinePlaceholder":148},[76,63921,63922,63924,63926,63929],{"class":78,"line":1874},[76,63923,63632],{"class":86},[76,63925,63801],{"class":53332},[76,63927,63928],{"class":86},":focus",[76,63930,17623],{"class":90},[76,63932,63933,63935,63937,63940],{"class":78,"line":1879},[76,63934,63819],{"class":119},[76,63936,53469],{"class":90},[76,63938,63939],{"class":119},"#e4e4e4",[76,63941,3415],{"class":90},[76,63943,63944,63946,63948,63950],{"class":78,"line":1884},[76,63945,63749],{"class":119},[76,63947,53469],{"class":90},[76,63949,62870],{"class":119},[76,63951,3415],{"class":90},[76,63953,63954,63956,63958,63960,63962],{"class":78,"line":1889},[76,63955,56816],{"class":119},[76,63957,53469],{"class":90},[76,63959,2915],{"class":119},[76,63961,53524],{"class":82},[76,63963,3415],{"class":90},[76,63965,63966],{"class":78,"line":1900},[76,63967,4283],{"class":90},[76,63969,63970],{"class":78,"line":1906},[76,63971,149],{"emptyLinePlaceholder":148},[76,63973,63974,63976,63978],{"class":78,"line":1924},[76,63975,63632],{"class":86},[76,63977,59497],{"class":53332},[76,63979,17623],{"class":90},[76,63981,63982,63984,63986,63989],{"class":78,"line":1929},[76,63983,63749],{"class":119},[76,63985,53469],{"class":90},[76,63987,63988],{"class":119},"#00aeec",[76,63990,3415],{"class":90},[76,63992,63993,63995,63997,63999],{"class":78,"line":1944},[76,63994,59446],{"class":119},[76,63996,53469],{"class":90},[76,63998,62870],{"class":119},[76,64000,3415],{"class":90},[76,64002,64003,64006,64008,64010],{"class":78,"line":1950},[76,64004,64005],{"class":119},"      border",[76,64007,53469],{"class":90},[76,64009,56768],{"class":119},[76,64011,3415],{"class":90},[76,64013,64014,64016,64018,64020,64022],{"class":78,"line":1965},[76,64015,57165],{"class":119},[76,64017,53469],{"class":90},[76,64019,2557],{"class":119},[76,64021,53524],{"class":82},[76,64023,3415],{"class":90},[76,64025,64026,64029,64031,64033,64035],{"class":78,"line":1971},[76,64027,64028],{"class":119},"      margin-left",[76,64030,53469],{"class":90},[76,64032,402],{"class":119},[76,64034,53524],{"class":82},[76,64036,3415],{"class":90},[76,64038,64039,64041,64043,64045,64047],{"class":78,"line":1985},[76,64040,56802],{"class":119},[76,64042,53469],{"class":90},[76,64044,2620],{"class":119},[76,64046,53524],{"class":82},[76,64048,3415],{"class":90},[76,64050,64051,64054,64056,64059],{"class":78,"line":1991},[76,64052,64053],{"class":119},"      cursor",[76,64055,53469],{"class":90},[76,64057,64058],{"class":119},"pointer",[76,64060,3415],{"class":90},[76,64062,64063],{"class":78,"line":2005},[76,64064,4283],{"class":90},[76,64066,64067],{"class":78,"line":2017},[76,64068,149],{"emptyLinePlaceholder":148},[76,64070,64071,64073,64076],{"class":78,"line":2023},[76,64072,63632],{"class":86},[76,64074,64075],{"class":86}," .total",[76,64077,17623],{"class":90},[76,64079,64080,64082,64084,64086,64088],{"class":78,"line":2031},[76,64081,63778],{"class":119},[76,64083,53469],{"class":90},[76,64085,2872],{"class":119},[76,64087,53524],{"class":82},[76,64089,3415],{"class":90},[76,64091,64092,64094,64096,64099],{"class":78,"line":11880},[76,64093,59446],{"class":119},[76,64095,53469],{"class":90},[76,64097,64098],{"class":119},"#999",[76,64100,3415],{"class":90},[76,64102,64103,64106,64108,64110,64112],{"class":78,"line":11901},[76,64104,64105],{"class":119},"      margin-top",[76,64107,53469],{"class":90},[76,64109,2583],{"class":119},[76,64111,53524],{"class":82},[76,64113,3415],{"class":90},[76,64115,64116,64119,64121,64123],{"class":78,"line":11907},[76,64117,64118],{"class":119},"      opacity",[76,64120,53469],{"class":90},[76,64122,1294],{"class":119},[76,64124,3415],{"class":90},[76,64126,64127,64129,64131,64133,64135,64137],{"class":78,"line":11921},[76,64128,63888],{"class":119},[76,64130,53469],{"class":90},[76,64132,30170],{"class":119},[76,64134,63895],{"class":119},[76,64136,2954],{"class":82},[76,64138,3415],{"class":90},[76,64140,64141],{"class":78,"line":11927},[76,64142,4283],{"class":90},[76,64144,64145],{"class":78,"line":11954},[76,64146,149],{"emptyLinePlaceholder":148},[76,64148,64149,64152],{"class":78,"line":11963},[76,64150,64151],{"class":86},"    .list",[76,64153,17623],{"class":90},[76,64155,64156,64158,64160,64162,64164],{"class":78,"line":11969},[76,64157,63639],{"class":119},[76,64159,53469],{"class":90},[76,64161,6071],{"class":119},[76,64163,53524],{"class":82},[76,64165,3415],{"class":90},[76,64167,64168,64170,64172,64174,64176],{"class":78,"line":11977},[76,64169,63652],{"class":119},[76,64171,53469],{"class":90},[76,64173,63657],{"class":119},[76,64175,53524],{"class":82},[76,64177,3415],{"class":90},[76,64179,64180,64182,64184,64186],{"class":78,"line":11982},[76,64181,57040],{"class":119},[76,64183,53469],{"class":90},[76,64185,53509],{"class":119},[76,64187,3415],{"class":90},[76,64189,64190],{"class":78,"line":18654},[76,64191,4283],{"class":90},[76,64193,64194],{"class":78,"line":18660},[76,64195,149],{"emptyLinePlaceholder":148},[76,64197,64198,64200,64203],{"class":78,"line":18683},[76,64199,64151],{"class":86},[76,64201,64202],{"class":86}," .item",[76,64204,17623],{"class":90},[76,64206,64207,64209,64211,64213,64215],{"class":78,"line":18689},[76,64208,56802],{"class":119},[76,64210,53469],{"class":90},[76,64212,2575],{"class":119},[76,64214,2592],{"class":82},[76,64216,3415],{"class":90},[76,64218,64219,64221,64223,64225],{"class":78,"line":18712},[76,64220,57040],{"class":119},[76,64222,53469],{"class":90},[76,64224,53509],{"class":119},[76,64226,3415],{"class":90},[76,64228,64229],{"class":78,"line":18726},[76,64230,4283],{"class":90},[76,64232,64233],{"class":78,"line":18746},[76,64234,149],{"emptyLinePlaceholder":148},[76,64236,64237,64239,64241,64244],{"class":78,"line":18752},[76,64238,64151],{"class":86},[76,64240,64202],{"class":86},[76,64242,64243],{"class":86}," .info",[76,64245,17623],{"class":90},[76,64247,64248,64250,64252,64254],{"class":78,"line":18763},[76,64249,63865],{"class":119},[76,64251,53469],{"class":90},[76,64253,669],{"class":119},[76,64255,3415],{"class":90},[76,64257,64258,64261,64263,64265,64267,64270,64273],{"class":78,"line":18786},[76,64259,64260],{"class":119},"      border-bottom",[76,64262,53469],{"class":90},[76,64264,669],{"class":119},[76,64266,53524],{"class":82},[76,64268,64269],{"class":119}," dashed",[76,64271,64272],{"class":119}," #e4e4e4",[76,64274,3415],{"class":90},[76,64276,64277,64280,64282,64284,64286],{"class":78,"line":18808},[76,64278,64279],{"class":119},"      padding-bottom",[76,64281,53469],{"class":90},[76,64283,402],{"class":119},[76,64285,53524],{"class":82},[76,64287,3415],{"class":90},[76,64289,64290],{"class":78,"line":18813},[76,64291,4283],{"class":90},[76,64293,64294],{"class":78,"line":18819},[76,64295,149],{"emptyLinePlaceholder":148},[76,64297,64298,64300,64302,64304],{"class":78,"line":18833},[76,64299,64151],{"class":86},[76,64301,64202],{"class":86},[76,64303,8903],{"class":53332},[76,64305,17623],{"class":90},[76,64307,64308,64310,64312,64314],{"class":78,"line":18846},[76,64309,56737],{"class":119},[76,64311,53469],{"class":90},[76,64313,1294],{"class":119},[76,64315,3415],{"class":90},[76,64317,64318],{"class":78,"line":18851},[76,64319,4283],{"class":90},[76,64321,64322],{"class":78,"line":18865},[76,64323,149],{"emptyLinePlaceholder":148},[76,64325,64326,64328,64330,64333],{"class":78,"line":18870},[76,64327,64151],{"class":86},[76,64329,64202],{"class":86},[76,64331,64332],{"class":86}," .name",[76,64334,17623],{"class":90},[76,64336,64337,64339,64341,64344],{"class":78,"line":18876},[76,64338,59446],{"class":119},[76,64340,53469],{"class":90},[76,64342,64343],{"class":119},"#FB7299",[76,64345,3415],{"class":90},[76,64347,64348,64350,64352,64354,64356],{"class":78,"line":18881},[76,64349,56953],{"class":119},[76,64351,53469],{"class":90},[76,64353,2810],{"class":119},[76,64355,53524],{"class":82},[76,64357,3415],{"class":90},[76,64359,64360,64363,64365,64368],{"class":78,"line":18895},[76,64361,64362],{"class":119},"      font-weight",[76,64364,53469],{"class":90},[76,64366,64367],{"class":119},"bold",[76,64369,3415],{"class":90},[76,64371,64372],{"class":78,"line":18900},[76,64373,4283],{"class":90},[76,64375,64376],{"class":78,"line":18905},[76,64377,149],{"emptyLinePlaceholder":148},[76,64379,64380,64382,64384,64387],{"class":78,"line":18919},[76,64381,64151],{"class":86},[76,64383,64202],{"class":86},[76,64385,64386],{"class":86}," .text",[76,64388,17623],{"class":90},[76,64390,64391,64393,64395,64398],{"class":78,"line":18931},[76,64392,59446],{"class":119},[76,64394,53469],{"class":90},[76,64396,64397],{"class":119},"#333",[76,64399,3415],{"class":90},[76,64401,64402,64404,64406,64408,64410,64412],{"class":78,"line":18936},[76,64403,56726],{"class":119},[76,64405,53469],{"class":90},[76,64407,402],{"class":119},[76,64409,53524],{"class":82},[76,64411,587],{"class":119},[76,64413,3415],{"class":90},[76,64415,64416],{"class":78,"line":18949},[76,64417,4283],{"class":90},[76,64419,64420],{"class":78,"line":18954},[76,64421,149],{"emptyLinePlaceholder":148},[76,64423,64424,64426,64428,64431],{"class":78,"line":18959},[76,64425,64151],{"class":86},[76,64427,64202],{"class":86},[76,64429,64430],{"class":86}," .time",[76,64432,17623],{"class":90},[76,64434,64435,64437,64439,64441],{"class":78,"line":18964},[76,64436,59446],{"class":119},[76,64438,53469],{"class":90},[76,64440,64098],{"class":119},[76,64442,3415],{"class":90},[76,64444,64445,64447,64449,64451,64453],{"class":78,"line":18977},[76,64446,56953],{"class":119},[76,64448,53469],{"class":90},[76,64450,2760],{"class":119},[76,64452,53524],{"class":82},[76,64454,3415],{"class":90},[76,64456,64457],{"class":78,"line":18982},[76,64458,4283],{"class":90},[76,64460,64461,64463,64465],{"class":78,"line":34671},[76,64462,54449],{"class":90},[76,64464,2178],{"class":53332},[76,64466,53339],{"class":90},[76,64468,64469,64471,64473],{"class":78,"line":34677},[76,64470,53817],{"class":90},[76,64472,53366],{"class":53332},[76,64474,53339],{"class":90},[76,64476,64477],{"class":78,"line":34683},[76,64478,149],{"emptyLinePlaceholder":148},[76,64480,64481,64483,64485],{"class":78,"line":34689},[76,64482,584],{"class":90},[76,64484,53832],{"class":53332},[76,64486,53339],{"class":90},[76,64488,64489,64491,64493,64495,64497,64500],{"class":78,"line":34695},[76,64490,54176],{"class":90},[76,64492,53643],{"class":53332},[76,64494,55518],{"class":86},[76,64496,370],{"class":90},[76,64498,64499],{"class":126},"\"wrapper\"",[76,64501,53339],{"class":90},[76,64503,64504,64506,64508,64510,64512,64515,64517,64519],{"class":78,"line":34706},[76,64505,53373],{"class":90},[76,64507,2705],{"class":53332},[76,64509,55518],{"class":86},[76,64511,370],{"class":90},[76,64513,64514],{"class":126},"\"avatar\"",[76,64516,57345],{"class":90},[76,64518,2705],{"class":53332},[76,64520,53339],{"class":90},[76,64522,64523,64525,64527,64529,64531,64534,64536,64538,64541,64543,64545,64547,64550,64552,64555,64557,64559],{"class":78,"line":34712},[76,64524,53373],{"class":90},[76,64526,56319],{"class":53332},[76,64528,17011],{"class":86},[76,64530,370],{"class":90},[76,64532,64533],{"class":126},"\"tx\"",[76,64535,63048],{"class":86},[76,64537,370],{"class":90},[76,64539,64540],{"class":126},"\"发一条友善的评论\"",[76,64542,56342],{"class":86},[76,64544,370],{"class":90},[76,64546,5786],{"class":126},[76,64548,64549],{"class":86}," maxlength",[76,64551,370],{"class":90},[76,64553,64554],{"class":126},"\"200\"",[76,64556,57345],{"class":90},[76,64558,56319],{"class":53332},[76,64560,53339],{"class":90},[76,64562,64563,64565,64567,64570,64572],{"class":78,"line":34732},[76,64564,53373],{"class":90},[76,64566,55918],{"class":53332},[76,64568,64569],{"class":90},">发布\u003C\u002F",[76,64571,55918],{"class":53332},[76,64573,53339],{"class":90},[76,64575,64576,64578,64580],{"class":78,"line":34738},[76,64577,54449],{"class":90},[76,64579,53643],{"class":53332},[76,64581,53339],{"class":90},[76,64583,64584,64586,64588,64590,64592,64594],{"class":78,"line":34749},[76,64585,54176],{"class":90},[76,64587,53643],{"class":53332},[76,64589,55518],{"class":86},[76,64591,370],{"class":90},[76,64593,64499],{"class":126},[76,64595,53339],{"class":90},[76,64597,64598,64600,64602,64604,64606,64609,64612,64614],{"class":78,"line":34755},[76,64599,53373],{"class":90},[76,64601,76],{"class":53332},[76,64603,55518],{"class":86},[76,64605,370],{"class":90},[76,64607,64608],{"class":126},"\"total\"",[76,64610,64611],{"class":90},">0\u002F200字\u003C\u002F",[76,64613,76],{"class":53332},[76,64615,53339],{"class":90},[76,64617,64618,64620,64622],{"class":78,"line":34761},[76,64619,54449],{"class":90},[76,64621,53643],{"class":53332},[76,64623,53339],{"class":90},[76,64625,64626,64628,64630,64632,64634,64637],{"class":78,"line":34767},[76,64627,54176],{"class":90},[76,64629,53643],{"class":53332},[76,64631,55518],{"class":86},[76,64633,370],{"class":90},[76,64635,64636],{"class":126},"\"list\"",[76,64638,53339],{"class":90},[76,64640,64641,64643,64645,64647,64649,64652,64655,64657,64660],{"class":78,"line":34773},[76,64642,53373],{"class":90},[76,64644,53643],{"class":53332},[76,64646,55518],{"class":86},[76,64648,370],{"class":90},[76,64650,64651],{"class":126},"\"item\"",[76,64653,64654],{"class":86}," style",[76,64656,370],{"class":90},[76,64658,64659],{"class":126},"\"display: none;\"",[76,64661,53339],{"class":90},[76,64663,64664,64666,64668,64670,64672,64674,64676,64678],{"class":78,"line":34779},[76,64665,57265],{"class":90},[76,64667,2705],{"class":53332},[76,64669,55518],{"class":86},[76,64671,370],{"class":90},[76,64673,64514],{"class":126},[76,64675,57345],{"class":90},[76,64677,2705],{"class":53332},[76,64679,53339],{"class":90},[76,64681,64682,64684,64686,64688,64690,64693],{"class":78,"line":34785},[76,64683,57265],{"class":90},[76,64685,53643],{"class":53332},[76,64687,55518],{"class":86},[76,64689,370],{"class":90},[76,64691,64692],{"class":126},"\"info\"",[76,64694,53339],{"class":90},[76,64696,64697,64699,64701,64703,64705,64708,64711,64713],{"class":78,"line":34791},[76,64698,57333],{"class":90},[76,64700,19],{"class":53332},[76,64702,55518],{"class":86},[76,64704,370],{"class":90},[76,64706,64707],{"class":126},"\"name\"",[76,64709,64710],{"class":90},">清风徐来\u003C\u002F",[76,64712,19],{"class":53332},[76,64714,53339],{"class":90},[76,64716,64717,64719,64721,64723,64725,64728,64731,64733],{"class":78,"line":34811},[76,64718,57333],{"class":90},[76,64720,19],{"class":53332},[76,64722,55518],{"class":86},[76,64724,370],{"class":90},[76,64726,64727],{"class":126},"\"text\"",[76,64729,64730],{"class":90},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[76,64732,19],{"class":53332},[76,64734,53339],{"class":90},[76,64736,64737,64739,64741,64743,64745,64748,64751,64753],{"class":78,"line":34817},[76,64738,57333],{"class":90},[76,64740,19],{"class":53332},[76,64742,55518],{"class":86},[76,64744,370],{"class":90},[76,64746,64747],{"class":126},"\"time\"",[76,64749,64750],{"class":90},">2022-10-10 20:29:21\u003C\u002F",[76,64752,19],{"class":53332},[76,64754,53339],{"class":90},[76,64756,64757,64759,64761],{"class":78,"line":34833},[76,64758,57438],{"class":90},[76,64760,53643],{"class":53332},[76,64762,53339],{"class":90},[76,64764,64765,64767,64769],{"class":78,"line":34839},[76,64766,53808],{"class":90},[76,64768,53643],{"class":53332},[76,64770,53339],{"class":90},[76,64772,64773,64775,64777],{"class":78,"line":34853},[76,64774,54449],{"class":90},[76,64776,53643],{"class":53332},[76,64778,53339],{"class":90},[76,64780,64781,64783,64785],{"class":78,"line":34859},[76,64782,54176],{"class":90},[76,64784,53845],{"class":53332},[76,64786,53339],{"class":90},[76,64788,64789,64791,64794,64796,64798,64800,64802,64805],{"class":78,"line":34874},[76,64790,13275],{"class":82},[76,64792,64793],{"class":119}," tx",[76,64795,15617],{"class":82},[76,64797,56427],{"class":90},[76,64799,56430],{"class":86},[76,64801,123],{"class":90},[76,64803,64804],{"class":126},"'#tx'",[76,64806,130],{"class":90},[76,64808,64809,64811,64814,64816,64818,64820,64822,64825],{"class":78,"line":34880},[76,64810,13275],{"class":82},[76,64812,64813],{"class":119}," total",[76,64815,15617],{"class":82},[76,64817,56427],{"class":90},[76,64819,56430],{"class":86},[76,64821,123],{"class":90},[76,64823,64824],{"class":126},"'.total'",[76,64826,130],{"class":90},[76,64828,64829],{"class":78,"line":34889},[76,64830,64831],{"class":540},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[76,64833,64834,64837,64839,64841,64843,64845,64847],{"class":78,"line":34895},[76,64835,64836],{"class":90},"    tx.",[76,64838,59843],{"class":86},[76,64840,123],{"class":90},[76,64842,63355],{"class":126},[76,64844,405],{"class":90},[76,64846,56480],{"class":82},[76,64848,56483],{"class":90},[76,64850,64851,64854,64856],{"class":78,"line":34904},[76,64852,64853],{"class":90},"      total.style.opacity ",[76,64855,370],{"class":82},[76,64857,1063],{"class":119},[76,64859,64860],{"class":78,"line":34910},[76,64861,35499],{"class":90},[76,64863,64864],{"class":78,"line":34916},[76,64865,64866],{"class":540},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[76,64868,64869,64871,64873,64875,64877,64879,64881],{"class":78,"line":34925},[76,64870,64836],{"class":90},[76,64872,59843],{"class":86},[76,64874,123],{"class":90},[76,64876,63416],{"class":126},[76,64878,405],{"class":90},[76,64880,56480],{"class":82},[76,64882,56483],{"class":90},[76,64884,64885,64887,64889],{"class":78,"line":34931},[76,64886,64853],{"class":90},[76,64888,370],{"class":82},[76,64890,1027],{"class":119},[76,64892,64893],{"class":78,"line":34942},[76,64894,35499],{"class":90},[76,64896,64897],{"class":78,"line":34948},[76,64898,64899],{"class":540},"    \u002F\u002F 3. 检测用户输入\n",[76,64901,64902,64904,64906,64908,64911,64913,64915],{"class":78,"line":34967},[76,64903,64836],{"class":90},[76,64905,59843],{"class":86},[76,64907,123],{"class":90},[76,64909,64910],{"class":126},"'input'",[76,64912,405],{"class":90},[76,64914,56480],{"class":82},[76,64916,56483],{"class":90},[76,64918,64919],{"class":78,"line":34973},[76,64920,64921],{"class":540},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[76,64923,64924,64927,64929,64932,64935,64937,64940,64942,64944],{"class":78,"line":34984},[76,64925,64926],{"class":90},"      total.innerHTML ",[76,64928,370],{"class":82},[76,64930,64931],{"class":126}," `${",[76,64933,64934],{"class":90},"tx",[76,64936,2819],{"class":126},[76,64938,64939],{"class":90},"value",[76,64941,2819],{"class":126},[76,64943,54000],{"class":119},[76,64945,64946],{"class":126},"}\u002F200字`\n",[76,64948,64949],{"class":78,"line":34990},[76,64950,35499],{"class":90},[76,64952,64953],{"class":78,"line":35010},[76,64954,149],{"emptyLinePlaceholder":148},[76,64956,64957],{"class":78,"line":35026},[76,64958,64959],{"class":540},"    \u002F\u002F const str = 'andy'\n",[76,64961,64962],{"class":78,"line":35032},[76,64963,64964],{"class":540},"    \u002F\u002F console.log(str.length)\n",[76,64966,64967,64969,64971],{"class":78,"line":35046},[76,64968,54449],{"class":90},[76,64970,53845],{"class":53332},[76,64972,53339],{"class":90},[76,64974,64975,64977,64979],{"class":78,"line":35052},[76,64976,53817],{"class":90},[76,64978,53832],{"class":53332},[76,64980,53339],{"class":90},[76,64982,64983],{"class":78,"line":35058},[76,64984,149],{"emptyLinePlaceholder":148},[76,64986,64987,64989,64991],{"class":78,"line":35069},[76,64988,53817],{"class":90},[76,64990,52667],{"class":53332},[76,64992,53339],{"class":90},[24047,64994,64996],{"id":64995},"_3254-change事件","3.2.5.4 change事件",[19,64998,64999],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65001,65002],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65004,65005],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[66,65007,65009],{"className":52665,"code":65008,"language":52667,"meta":71,"style":71},"\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",[73,65010,65011,65021,65035,65039,65047,65061,65081,65093,65101,65105,65113,65127,65135,65153,65171,65183,65187,65195,65203,65207],{"__ignoreMap":71},[76,65012,65013,65015,65017,65019],{"class":78,"line":79},[76,65014,53329],{"class":90},[76,65016,53333],{"class":53332},[76,65018,53336],{"class":86},[76,65020,53339],{"class":90},[76,65022,65023,65025,65027,65029,65031,65033],{"class":78,"line":94},[76,65024,584],{"class":90},[76,65026,52667],{"class":53332},[76,65028,53348],{"class":86},[76,65030,370],{"class":90},[76,65032,53353],{"class":126},[76,65034,53339],{"class":90},[76,65036,65037],{"class":78,"line":133},[76,65038,149],{"emptyLinePlaceholder":148},[76,65040,65041,65043,65045],{"class":78,"line":145},[76,65042,584],{"class":90},[76,65044,53366],{"class":53332},[76,65046,53339],{"class":90},[76,65048,65049,65051,65053,65055,65057,65059],{"class":78,"line":152},[76,65050,54176],{"class":90},[76,65052,53376],{"class":53332},[76,65054,53379],{"class":86},[76,65056,370],{"class":90},[76,65058,53384],{"class":126},[76,65060,53339],{"class":90},[76,65062,65063,65065,65067,65069,65071,65073,65075,65077,65079],{"class":78,"line":157},[76,65064,54176],{"class":90},[76,65066,53376],{"class":53332},[76,65068,16972],{"class":86},[76,65070,370],{"class":90},[76,65072,53423],{"class":126},[76,65074,53403],{"class":86},[76,65076,370],{"class":90},[76,65078,53430],{"class":126},[76,65080,53339],{"class":90},[76,65082,65083,65085,65087,65089,65091],{"class":78,"line":246},[76,65084,54176],{"class":90},[76,65086,53439],{"class":53332},[76,65088,53442],{"class":90},[76,65090,53439],{"class":53332},[76,65092,53339],{"class":90},[76,65094,65095,65097,65099],{"class":78,"line":251},[76,65096,53817],{"class":90},[76,65098,53366],{"class":53332},[76,65100,53339],{"class":90},[76,65102,65103],{"class":78,"line":257},[76,65104,149],{"emptyLinePlaceholder":148},[76,65106,65107,65109,65111],{"class":78,"line":641},[76,65108,584],{"class":90},[76,65110,53832],{"class":53332},[76,65112,53339],{"class":90},[76,65114,65115,65117,65119,65121,65123,65125],{"class":78,"line":646},[76,65116,54176],{"class":90},[76,65118,1673],{"class":53332},[76,65120,55855],{"class":86},[76,65122,370],{"class":90},[76,65124,64727],{"class":126},[76,65126,53339],{"class":90},[76,65128,65129,65131,65133],{"class":78,"line":659},[76,65130,54176],{"class":90},[76,65132,53845],{"class":53332},[76,65134,53339],{"class":90},[76,65136,65137,65139,65141,65143,65145,65147,65149,65151],{"class":78,"line":1608},[76,65138,13275],{"class":82},[76,65140,1914],{"class":119},[76,65142,15617],{"class":82},[76,65144,56427],{"class":90},[76,65146,56430],{"class":86},[76,65148,123],{"class":90},[76,65150,64910],{"class":126},[76,65152,130],{"class":90},[76,65154,65155,65158,65160,65162,65165,65167,65169],{"class":78,"line":1632},[76,65156,65157],{"class":90},"    input.",[76,65159,59843],{"class":86},[76,65161,123],{"class":90},[76,65163,65164],{"class":126},"'change'",[76,65166,405],{"class":90},[76,65168,56480],{"class":82},[76,65170,56483],{"class":90},[76,65172,65173,65175,65177,65179,65181],{"class":78,"line":1637},[76,65174,60274],{"class":90},[76,65176,60277],{"class":86},[76,65178,123],{"class":90},[76,65180,2853],{"class":119},[76,65182,130],{"class":90},[76,65184,65185],{"class":78,"line":1642},[76,65186,35499],{"class":90},[76,65188,65189,65191,65193],{"class":78,"line":1652},[76,65190,54449],{"class":90},[76,65192,53845],{"class":53332},[76,65194,53339],{"class":90},[76,65196,65197,65199,65201],{"class":78,"line":1660},[76,65198,53817],{"class":90},[76,65200,53832],{"class":53332},[76,65202,53339],{"class":90},[76,65204,65205],{"class":78,"line":1683},[76,65206,149],{"emptyLinePlaceholder":148},[76,65208,65209,65211,65213],{"class":78,"line":1698},[76,65210,53817],{"class":90},[76,65212,52667],{"class":53332},[76,65214,53339],{"class":90},[19,65216,65217],{},"总结：内容发生改变才回去触发",[889,65219,65221],{"id":65220},"_326-事件对象","3.2.6 事件对象",[24047,65223,65225],{"id":65224},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65227,65228],{},[3583,65229],{"alt":71,"src":65230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65232,65233],{},[3583,65234],{"alt":71,"src":65235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65237,65238],{},"点击一次，就输出了事件对象，它是个对象",[19,65240,65241],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65243,65244],{},[3583,65245],{"alt":71,"src":65246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24047,65248,65250],{"id":65249},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65252,65253],{},[3583,65254],{"alt":71,"src":65255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65257,65258],{},"实现按特殊字符才是实现打印输出效果：",[66,65260,65262],{"className":55099,"code":65261,"language":55101,"meta":71,"style":71},"\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",[73,65263,65264,65272,65277,65291,65299,65304,65309,65314,65319,65324,65329,65334,65339,65344,65348,65352,65360],{"__ignoreMap":71},[76,65265,65266,65268,65270],{"class":78,"line":79},[76,65267,584],{"class":90},[76,65269,53832],{"class":53332},[76,65271,53339],{"class":90},[76,65273,65274],{"class":78,"line":94},[76,65275,65276],{"class":540},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[76,65278,65279,65281,65283,65285,65287,65289],{"class":78,"line":133},[76,65280,54176],{"class":90},[76,65282,1673],{"class":53332},[76,65284,55855],{"class":86},[76,65286,370],{"class":90},[76,65288,64727],{"class":126},[76,65290,53339],{"class":90},[76,65292,65293,65295,65297],{"class":78,"line":145},[76,65294,54176],{"class":90},[76,65296,53845],{"class":53332},[76,65298,53339],{"class":90},[76,65300,65301],{"class":78,"line":152},[76,65302,65303],{"class":90},"    \u002F\u002F const btn = document.querySelector('button')\n",[76,65305,65306],{"class":78,"line":157},[76,65307,65308],{"class":90},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[76,65310,65311],{"class":78,"line":246},[76,65312,65313],{"class":90},"    \u002F\u002F   console.log(e);\n",[76,65315,65316],{"class":78,"line":251},[76,65317,65318],{"class":90},"    \u002F\u002F })\n",[76,65320,65321],{"class":78,"line":257},[76,65322,65323],{"class":90},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[76,65325,65326],{"class":78,"line":641},[76,65327,65328],{"class":90},"    const input = document.querySelector('input')\n",[76,65330,65331],{"class":78,"line":646},[76,65332,65333],{"class":90},"    input.addEventListener('keyup', function (e) {\n",[76,65335,65336],{"class":78,"line":659},[76,65337,65338],{"class":90},"      if (e.key === 'Enter') {\n",[76,65340,65341],{"class":78,"line":1608},[76,65342,65343],{"class":90},"        console.log('我按下了回车键')\n",[76,65345,65346],{"class":78,"line":1632},[76,65347,54430],{"class":90},[76,65349,65350],{"class":78,"line":1637},[76,65351,35499],{"class":90},[76,65353,65354,65356,65358],{"class":78,"line":1642},[76,65355,54449],{"class":90},[76,65357,53845],{"class":53332},[76,65359,53339],{"class":90},[76,65361,65362,65364,65366],{"class":78,"line":1652},[76,65363,53817],{"class":90},[76,65365,53832],{"class":53332},[76,65367,53339],{"class":90},[24047,65369,65371],{"id":65370},"_3263-trim方法","3.2.6.3 trim方法",[19,65373,65374],{},[3583,65375],{"alt":71,"src":65376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65378,65379],{},[3583,65380],{"alt":71,"src":65381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65383,65384],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65386,65387],{},"str.trim()",[889,65389,65391],{"id":65390},"_327-环境对象","3.2.7 环境对象",[19,65393,65394],{},[3583,65395],{"alt":71,"src":65396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65398,65399],{},[3583,65400],{"alt":71,"src":65401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65403,65404],{},[3583,65405],{"alt":71,"src":65406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65408,65409],{},"实际函数调用是window.fn()",[19,65411,65412],{},"普通函数里面this指向的是window",[3261,65414,65415,65418,65421],{},[29,65416,65417],{},"在普通函数下，this指向的是window",[29,65419,65420],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65422,65423],{},"箭头函数没有this",[19,65425,65426],{},"粗略记法就是：谁调用，this就指向谁",[19,65428,65429],{},[3583,65430],{"alt":71,"src":65431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65433,65434],{},[3583,65435],{"alt":71,"src":65436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65438,65439],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65441,65442],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[66,65444,65446],{"className":55099,"code":65445,"language":55101,"meta":71,"style":71},"\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",[73,65447,65448,65456,65468,65476,65481,65486,65491,65496,65500,65508],{"__ignoreMap":71},[76,65449,65450,65452,65454],{"class":78,"line":79},[76,65451,584],{"class":90},[76,65453,53832],{"class":53332},[76,65455,53339],{"class":90},[76,65457,65458,65460,65462,65464,65466],{"class":78,"line":94},[76,65459,54176],{"class":90},[76,65461,55918],{"class":53332},[76,65463,55924],{"class":90},[76,65465,55918],{"class":53332},[76,65467,53339],{"class":90},[76,65469,65470,65472,65474],{"class":78,"line":133},[76,65471,54176],{"class":90},[76,65473,53845],{"class":53332},[76,65475,53339],{"class":90},[76,65477,65478],{"class":78,"line":145},[76,65479,65480],{"class":90},"    const button = document.querySelector('button')\n",[76,65482,65483],{"class":78,"line":152},[76,65484,65485],{"class":90},"    button.addEventListener('click', function () {\n",[76,65487,65488],{"class":78,"line":157},[76,65489,65490],{"class":90},"      \u002F\u002F console.log(this);\n",[76,65492,65493],{"class":78,"line":246},[76,65494,65495],{"class":90},"      this.style.color = 'pink'\n",[76,65497,65498],{"class":78,"line":251},[76,65499,35499],{"class":90},[76,65501,65502,65504,65506],{"class":78,"line":257},[76,65503,54449],{"class":90},[76,65505,53845],{"class":53332},[76,65507,53339],{"class":90},[76,65509,65510,65512,65514],{"class":78,"line":641},[76,65511,53817],{"class":90},[76,65513,53832],{"class":53332},[76,65515,53339],{"class":90},[889,65517,65519],{"id":65518},"_328-回调函数","3.2.8 回调函数",[19,65521,65522],{},[3583,65523],{"alt":71,"src":65524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65526,65527],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65529,13386],{},[3261,65531,65532,65535,65538],{},[29,65533,65534],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65536,65537],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65539,65540],{},"使用匿名函数做为回调函数比较常见",[889,65542,65544],{"id":65543},"_329-tab栏切换","3.2.9 tab栏切换",[19,65546,65547],{},[3583,65548],{"alt":71,"src":65549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[66,65551,65553],{"className":52665,"code":65552,"language":52667,"meta":71,"style":71},"\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",[73,65554,65555,65565,65579,65583,65591,65605,65625,65645,65658,65666,65672,65682,65692,65696,65700,65707,65720,65733,65745,65761,65765,65769,65776,65788,65800,65812,65822,65832,65836,65840,65849,65861,65872,65884,65888,65892,65900,65910,65920,65930,65934,65938,65948,65962,65974,65978,65982,65994,66005,66022,66032,66036,66040,66055,66066,66076,66080,66084,66091,66106,66110,66114,66122,66132,66136,66140,66149,66159,66163,66171,66179,66183,66191,66206,66221,66234,66242,66276,66303,66330,66357,66384,66392,66400,66415,66452,66487,66522,66557,66592,66600,66608,66616,66621,66626,66646,66651,66680,66685,66690,66708,66713,66718,66723,66745,66750,66766,66770,66775,66780,66801,66806,66835,66839,66844,66848,66856,66864,66868],{"__ignoreMap":71},[76,65556,65557,65559,65561,65563],{"class":78,"line":79},[76,65558,53329],{"class":90},[76,65560,53333],{"class":53332},[76,65562,53336],{"class":86},[76,65564,53339],{"class":90},[76,65566,65567,65569,65571,65573,65575,65577],{"class":78,"line":94},[76,65568,584],{"class":90},[76,65570,52667],{"class":53332},[76,65572,53348],{"class":86},[76,65574,370],{"class":90},[76,65576,53353],{"class":126},[76,65578,53339],{"class":90},[76,65580,65581],{"class":78,"line":133},[76,65582,149],{"emptyLinePlaceholder":148},[76,65584,65585,65587,65589],{"class":78,"line":145},[76,65586,584],{"class":90},[76,65588,53366],{"class":53332},[76,65590,53339],{"class":90},[76,65592,65593,65595,65597,65599,65601,65603],{"class":78,"line":152},[76,65594,54176],{"class":90},[76,65596,53376],{"class":53332},[76,65598,53379],{"class":86},[76,65600,370],{"class":90},[76,65602,53384],{"class":126},[76,65604,61156],{"class":90},[76,65606,65607,65609,65611,65613,65615,65617,65619,65621,65623],{"class":78,"line":157},[76,65608,54176],{"class":90},[76,65610,53376],{"class":53332},[76,65612,53395],{"class":86},[76,65614,370],{"class":90},[76,65616,53400],{"class":126},[76,65618,53403],{"class":86},[76,65620,370],{"class":90},[76,65622,53408],{"class":126},[76,65624,61156],{"class":90},[76,65626,65627,65629,65631,65633,65635,65637,65639,65641,65643],{"class":78,"line":246},[76,65628,54176],{"class":90},[76,65630,53376],{"class":53332},[76,65632,16972],{"class":86},[76,65634,370],{"class":90},[76,65636,53423],{"class":126},[76,65638,53403],{"class":86},[76,65640,370],{"class":90},[76,65642,53430],{"class":126},[76,65644,61156],{"class":90},[76,65646,65647,65649,65651,65654,65656],{"class":78,"line":251},[76,65648,54176],{"class":90},[76,65650,53439],{"class":53332},[76,65652,65653],{"class":90},">tab栏切换\u003C\u002F",[76,65655,53439],{"class":53332},[76,65657,53339],{"class":90},[76,65659,65660,65662,65664],{"class":78,"line":257},[76,65661,54176],{"class":90},[76,65663,2178],{"class":53332},[76,65665,53339],{"class":90},[76,65667,65668,65670],{"class":78,"line":641},[76,65669,8482],{"class":53332},[76,65671,17623],{"class":90},[76,65673,65674,65676,65678,65680],{"class":78,"line":646},[76,65675,56737],{"class":119},[76,65677,53469],{"class":90},[76,65679,1294],{"class":119},[76,65681,3415],{"class":90},[76,65683,65684,65686,65688,65690],{"class":78,"line":659},[76,65685,56726],{"class":119},[76,65687,53469],{"class":90},[76,65689,1294],{"class":119},[76,65691,3415],{"class":90},[76,65693,65694],{"class":78,"line":1608},[76,65695,4283],{"class":90},[76,65697,65698],{"class":78,"line":1632},[76,65699,149],{"emptyLinePlaceholder":148},[76,65701,65702,65705],{"class":78,"line":1637},[76,65703,65704],{"class":86},"    .tab",[76,65706,17623],{"class":90},[76,65708,65709,65711,65713,65716,65718],{"class":78,"line":1642},[76,65710,56802],{"class":119},[76,65712,53469],{"class":90},[76,65714,65715],{"class":119},"590",[76,65717,53524],{"class":82},[76,65719,3415],{"class":90},[76,65721,65722,65724,65726,65729,65731],{"class":78,"line":1652},[76,65723,56816],{"class":119},[76,65725,53469],{"class":90},[76,65727,65728],{"class":119},"340",[76,65730,53524],{"class":82},[76,65732,3415],{"class":90},[76,65734,65735,65737,65739,65741,65743],{"class":78,"line":1660},[76,65736,56737],{"class":119},[76,65738,53469],{"class":90},[76,65740,408],{"class":119},[76,65742,53524],{"class":82},[76,65744,3415],{"class":90},[76,65746,65747,65749,65751,65753,65755,65757,65759],{"class":78,"line":1683},[76,65748,64005],{"class":119},[76,65750,53469],{"class":90},[76,65752,669],{"class":119},[76,65754,53524],{"class":82},[76,65756,53553],{"class":119},[76,65758,64272],{"class":119},[76,65760,3415],{"class":90},[76,65762,65763],{"class":78,"line":1698},[76,65764,4283],{"class":90},[76,65766,65767],{"class":78,"line":1711},[76,65768,149],{"emptyLinePlaceholder":148},[76,65770,65771,65774],{"class":78,"line":1717},[76,65772,65773],{"class":86},"    .tab-nav",[76,65775,17623],{"class":90},[76,65777,65778,65780,65782,65784,65786],{"class":78,"line":1728},[76,65779,56802],{"class":119},[76,65781,53469],{"class":90},[76,65783,2575],{"class":119},[76,65785,2592],{"class":82},[76,65787,3415],{"class":90},[76,65789,65790,65792,65794,65796,65798],{"class":78,"line":1740},[76,65791,56816],{"class":119},[76,65793,53469],{"class":90},[76,65795,3164],{"class":119},[76,65797,53524],{"class":82},[76,65799,3415],{"class":90},[76,65801,65802,65804,65806,65808,65810],{"class":78,"line":1746},[76,65803,59389],{"class":119},[76,65805,53469],{"class":90},[76,65807,3164],{"class":119},[76,65809,53524],{"class":82},[76,65811,3415],{"class":90},[76,65813,65814,65816,65818,65820],{"class":78,"line":1751},[76,65815,57040],{"class":119},[76,65817,53469],{"class":90},[76,65819,53509],{"class":119},[76,65821,3415],{"class":90},[76,65823,65824,65826,65828,65830],{"class":78,"line":1756},[76,65825,57051],{"class":119},[76,65827,53469],{"class":90},[76,65829,53700],{"class":119},[76,65831,3415],{"class":90},[76,65833,65834],{"class":78,"line":1766},[76,65835,4283],{"class":90},[76,65837,65838],{"class":78,"line":1773},[76,65839,149],{"emptyLinePlaceholder":148},[76,65841,65842,65844,65847],{"class":78,"line":1793},[76,65843,65773],{"class":86},[76,65845,65846],{"class":53332}," h3",[76,65848,17623],{"class":90},[76,65850,65851,65853,65855,65857,65859],{"class":78,"line":1806},[76,65852,56953],{"class":119},[76,65854,53469],{"class":90},[76,65856,3058],{"class":119},[76,65858,53524],{"class":82},[76,65860,3415],{"class":90},[76,65862,65863,65865,65867,65870],{"class":78,"line":1817},[76,65864,64362],{"class":119},[76,65866,53469],{"class":90},[76,65868,65869],{"class":119},"normal",[76,65871,3415],{"class":90},[76,65873,65874,65876,65878,65880,65882],{"class":78,"line":1822},[76,65875,64028],{"class":119},[76,65877,53469],{"class":90},[76,65879,408],{"class":119},[76,65881,53524],{"class":82},[76,65883,3415],{"class":90},[76,65885,65886],{"class":78,"line":1835},[76,65887,4283],{"class":90},[76,65889,65890],{"class":78,"line":1847},[76,65891,149],{"emptyLinePlaceholder":148},[76,65893,65894,65896,65898],{"class":78,"line":1852},[76,65895,65773],{"class":86},[76,65897,63320],{"class":53332},[76,65899,17623],{"class":90},[76,65901,65902,65904,65906,65908],{"class":78,"line":1862},[76,65903,56763],{"class":119},[76,65905,53469],{"class":90},[76,65907,56768],{"class":119},[76,65909,3415],{"class":90},[76,65911,65912,65914,65916,65918],{"class":78,"line":1874},[76,65913,57040],{"class":119},[76,65915,53469],{"class":90},[76,65917,53509],{"class":119},[76,65919,3415],{"class":90},[76,65921,65922,65924,65926,65928],{"class":78,"line":1879},[76,65923,57051],{"class":119},[76,65925,53469],{"class":90},[76,65927,53612],{"class":119},[76,65929,3415],{"class":90},[76,65931,65932],{"class":78,"line":1884},[76,65933,4283],{"class":90},[76,65935,65936],{"class":78,"line":1889},[76,65937,149],{"emptyLinePlaceholder":148},[76,65939,65940,65942,65944,65946],{"class":78,"line":1900},[76,65941,65773],{"class":86},[76,65943,63320],{"class":53332},[76,65945,57106],{"class":53332},[76,65947,17623],{"class":90},[76,65949,65950,65952,65954,65956,65958,65960],{"class":78,"line":1906},[76,65951,56737],{"class":119},[76,65953,53469],{"class":90},[76,65955,1294],{"class":119},[76,65957,11018],{"class":119},[76,65959,53524],{"class":82},[76,65961,3415],{"class":90},[76,65963,65964,65966,65968,65970,65972],{"class":78,"line":1924},[76,65965,56953],{"class":119},[76,65967,53469],{"class":90},[76,65969,2810],{"class":119},[76,65971,53524],{"class":82},[76,65973,3415],{"class":90},[76,65975,65976],{"class":78,"line":1929},[76,65977,4283],{"class":90},[76,65979,65980],{"class":78,"line":1944},[76,65981,149],{"emptyLinePlaceholder":148},[76,65983,65984,65986,65988,65990,65992],{"class":78,"line":1950},[76,65985,65773],{"class":86},[76,65987,63320],{"class":53332},[76,65989,57106],{"class":53332},[76,65991,3519],{"class":53332},[76,65993,17623],{"class":90},[76,65995,65996,65999,66001,66003],{"class":78,"line":1965},[76,65997,65998],{"class":119},"      text-decoration",[76,66000,53469],{"class":90},[76,66002,56768],{"class":119},[76,66004,3415],{"class":90},[76,66006,66007,66009,66011,66013,66015,66017,66020],{"class":78,"line":1971},[76,66008,64260],{"class":119},[76,66010,53469],{"class":90},[76,66012,2345],{"class":119},[76,66014,53524],{"class":82},[76,66016,53553],{"class":119},[76,66018,66019],{"class":119}," transparent",[76,66021,3415],{"class":90},[76,66023,66024,66026,66028,66030],{"class":78,"line":1985},[76,66025,59446],{"class":119},[76,66027,53469],{"class":90},[76,66029,64397],{"class":119},[76,66031,3415],{"class":90},[76,66033,66034],{"class":78,"line":1991},[76,66035,4283],{"class":90},[76,66037,66038],{"class":78,"line":2005},[76,66039,149],{"emptyLinePlaceholder":148},[76,66041,66042,66044,66046,66048,66050,66053],{"class":78,"line":2017},[76,66043,65773],{"class":86},[76,66045,63320],{"class":53332},[76,66047,57106],{"class":53332},[76,66049,3519],{"class":53332},[76,66051,66052],{"class":86},".active",[76,66054,17623],{"class":90},[76,66056,66057,66059,66061,66064],{"class":78,"line":2023},[76,66058,63819],{"class":119},[76,66060,53469],{"class":90},[76,66062,66063],{"class":119},"#e1251b",[76,66065,3415],{"class":90},[76,66067,66068,66070,66072,66074],{"class":78,"line":2031},[76,66069,59446],{"class":119},[76,66071,53469],{"class":90},[76,66073,66063],{"class":119},[76,66075,3415],{"class":90},[76,66077,66078],{"class":78,"line":11880},[76,66079,4283],{"class":90},[76,66081,66082],{"class":78,"line":11901},[76,66083,149],{"emptyLinePlaceholder":148},[76,66085,66086,66089],{"class":78,"line":11907},[76,66087,66088],{"class":86},"    .tab-content",[76,66090,17623],{"class":90},[76,66092,66093,66095,66097,66099,66102,66104],{"class":78,"line":11921},[76,66094,56726],{"class":119},[76,66096,53469],{"class":90},[76,66098,1294],{"class":119},[76,66100,66101],{"class":119}," 16",[76,66103,53524],{"class":82},[76,66105,3415],{"class":90},[76,66107,66108],{"class":78,"line":11927},[76,66109,4283],{"class":90},[76,66111,66112],{"class":78,"line":11954},[76,66113,149],{"emptyLinePlaceholder":148},[76,66115,66116,66118,66120],{"class":78,"line":11963},[76,66117,66088],{"class":86},[76,66119,64202],{"class":86},[76,66121,17623],{"class":90},[76,66123,66124,66126,66128,66130],{"class":78,"line":11969},[76,66125,57040],{"class":119},[76,66127,53469],{"class":90},[76,66129,56768],{"class":119},[76,66131,3415],{"class":90},[76,66133,66134],{"class":78,"line":11977},[76,66135,4283],{"class":90},[76,66137,66138],{"class":78,"line":11982},[76,66139,149],{"emptyLinePlaceholder":148},[76,66141,66142,66144,66147],{"class":78,"line":18654},[76,66143,66088],{"class":86},[76,66145,66146],{"class":86}," .item.active",[76,66148,17623],{"class":90},[76,66150,66151,66153,66155,66157],{"class":78,"line":18660},[76,66152,57040],{"class":119},[76,66154,53469],{"class":90},[76,66156,62897],{"class":119},[76,66158,3415],{"class":90},[76,66160,66161],{"class":78,"line":18683},[76,66162,4283],{"class":90},[76,66164,66165,66167,66169],{"class":78,"line":18689},[76,66166,54449],{"class":90},[76,66168,2178],{"class":53332},[76,66170,53339],{"class":90},[76,66172,66173,66175,66177],{"class":78,"line":18712},[76,66174,53817],{"class":90},[76,66176,53366],{"class":53332},[76,66178,53339],{"class":90},[76,66180,66181],{"class":78,"line":18726},[76,66182,149],{"emptyLinePlaceholder":148},[76,66184,66185,66187,66189],{"class":78,"line":18746},[76,66186,584],{"class":90},[76,66188,53832],{"class":53332},[76,66190,53339],{"class":90},[76,66192,66193,66195,66197,66199,66201,66204],{"class":78,"line":18752},[76,66194,54176],{"class":90},[76,66196,53643],{"class":53332},[76,66198,55518],{"class":86},[76,66200,370],{"class":90},[76,66202,66203],{"class":126},"\"tab\"",[76,66205,53339],{"class":90},[76,66207,66208,66210,66212,66214,66216,66219],{"class":78,"line":18763},[76,66209,53373],{"class":90},[76,66211,53643],{"class":53332},[76,66213,55518],{"class":86},[76,66215,370],{"class":90},[76,66217,66218],{"class":126},"\"tab-nav\"",[76,66220,53339],{"class":90},[76,66222,66223,66225,66227,66230,66232],{"class":78,"line":18786},[76,66224,57265],{"class":90},[76,66226,889],{"class":53332},[76,66228,66229],{"class":90},">每日特价\u003C\u002F",[76,66231,889],{"class":53332},[76,66233,53339],{"class":90},[76,66235,66236,66238,66240],{"class":78,"line":18808},[76,66237,57265],{"class":90},[76,66239,3261],{"class":53332},[76,66241,53339],{"class":90},[76,66243,66244,66246,66248,66250,66252,66254,66256,66258,66260,66262,66265,66268,66270,66272,66274],{"class":78,"line":18813},[76,66245,57333],{"class":90},[76,66247,29],{"class":53332},[76,66249,63080],{"class":90},[76,66251,2503],{"class":53332},[76,66253,55518],{"class":86},[76,66255,370],{"class":90},[76,66257,61735],{"class":126},[76,66259,63085],{"class":86},[76,66261,370],{"class":90},[76,66263,66264],{"class":126},"\"javascript:;\"",[76,66266,66267],{"class":90},">精选\u003C\u002F",[76,66269,2503],{"class":53332},[76,66271,57345],{"class":90},[76,66273,29],{"class":53332},[76,66275,53339],{"class":90},[76,66277,66278,66280,66282,66284,66286,66288,66290,66292,66295,66297,66299,66301],{"class":78,"line":18819},[76,66279,57333],{"class":90},[76,66281,29],{"class":53332},[76,66283,63080],{"class":90},[76,66285,2503],{"class":53332},[76,66287,63085],{"class":86},[76,66289,370],{"class":90},[76,66291,66264],{"class":126},[76,66293,66294],{"class":90},">美食\u003C\u002F",[76,66296,2503],{"class":53332},[76,66298,57345],{"class":90},[76,66300,29],{"class":53332},[76,66302,53339],{"class":90},[76,66304,66305,66307,66309,66311,66313,66315,66317,66319,66322,66324,66326,66328],{"class":78,"line":18833},[76,66306,57333],{"class":90},[76,66308,29],{"class":53332},[76,66310,63080],{"class":90},[76,66312,2503],{"class":53332},[76,66314,63085],{"class":86},[76,66316,370],{"class":90},[76,66318,66264],{"class":126},[76,66320,66321],{"class":90},">百货\u003C\u002F",[76,66323,2503],{"class":53332},[76,66325,57345],{"class":90},[76,66327,29],{"class":53332},[76,66329,53339],{"class":90},[76,66331,66332,66334,66336,66338,66340,66342,66344,66346,66349,66351,66353,66355],{"class":78,"line":18846},[76,66333,57333],{"class":90},[76,66335,29],{"class":53332},[76,66337,63080],{"class":90},[76,66339,2503],{"class":53332},[76,66341,63085],{"class":86},[76,66343,370],{"class":90},[76,66345,66264],{"class":126},[76,66347,66348],{"class":90},">个护\u003C\u002F",[76,66350,2503],{"class":53332},[76,66352,57345],{"class":90},[76,66354,29],{"class":53332},[76,66356,53339],{"class":90},[76,66358,66359,66361,66363,66365,66367,66369,66371,66373,66376,66378,66380,66382],{"class":78,"line":18851},[76,66360,57333],{"class":90},[76,66362,29],{"class":53332},[76,66364,63080],{"class":90},[76,66366,2503],{"class":53332},[76,66368,63085],{"class":86},[76,66370,370],{"class":90},[76,66372,66264],{"class":126},[76,66374,66375],{"class":90},">预告\u003C\u002F",[76,66377,2503],{"class":53332},[76,66379,57345],{"class":90},[76,66381,29],{"class":53332},[76,66383,53339],{"class":90},[76,66385,66386,66388,66390],{"class":78,"line":18865},[76,66387,57438],{"class":90},[76,66389,3261],{"class":53332},[76,66391,53339],{"class":90},[76,66393,66394,66396,66398],{"class":78,"line":18870},[76,66395,53808],{"class":90},[76,66397,53643],{"class":53332},[76,66399,53339],{"class":90},[76,66401,66402,66404,66406,66408,66410,66413],{"class":78,"line":18876},[76,66403,53373],{"class":90},[76,66405,53643],{"class":53332},[76,66407,55518],{"class":86},[76,66409,370],{"class":90},[76,66411,66412],{"class":126},"\"tab-content\"",[76,66414,53339],{"class":90},[76,66416,66417,66419,66421,66423,66425,66428,66430,66432,66434,66436,66439,66441,66443,66445,66448,66450],{"class":78,"line":18881},[76,66418,57265],{"class":90},[76,66420,53643],{"class":53332},[76,66422,55518],{"class":86},[76,66424,370],{"class":90},[76,66426,66427],{"class":126},"\"item active\"",[76,66429,63080],{"class":90},[76,66431,3583],{"class":53332},[76,66433,57270],{"class":86},[76,66435,370],{"class":90},[76,66437,66438],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[76,66440,57278],{"class":86},[76,66442,370],{"class":90},[76,66444,9730],{"class":126},[76,66446,66447],{"class":90}," \u002F>\u003C\u002F",[76,66449,53643],{"class":53332},[76,66451,53339],{"class":90},[76,66453,66454,66456,66458,66460,66462,66464,66466,66468,66470,66472,66475,66477,66479,66481,66483,66485],{"class":78,"line":18895},[76,66455,57265],{"class":90},[76,66457,53643],{"class":53332},[76,66459,55518],{"class":86},[76,66461,370],{"class":90},[76,66463,64651],{"class":126},[76,66465,63080],{"class":90},[76,66467,3583],{"class":53332},[76,66469,57270],{"class":86},[76,66471,370],{"class":90},[76,66473,66474],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[76,66476,57278],{"class":86},[76,66478,370],{"class":90},[76,66480,9730],{"class":126},[76,66482,66447],{"class":90},[76,66484,53643],{"class":53332},[76,66486,53339],{"class":90},[76,66488,66489,66491,66493,66495,66497,66499,66501,66503,66505,66507,66510,66512,66514,66516,66518,66520],{"class":78,"line":18900},[76,66490,57265],{"class":90},[76,66492,53643],{"class":53332},[76,66494,55518],{"class":86},[76,66496,370],{"class":90},[76,66498,64651],{"class":126},[76,66500,63080],{"class":90},[76,66502,3583],{"class":53332},[76,66504,57270],{"class":86},[76,66506,370],{"class":90},[76,66508,66509],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[76,66511,57278],{"class":86},[76,66513,370],{"class":90},[76,66515,9730],{"class":126},[76,66517,66447],{"class":90},[76,66519,53643],{"class":53332},[76,66521,53339],{"class":90},[76,66523,66524,66526,66528,66530,66532,66534,66536,66538,66540,66542,66545,66547,66549,66551,66553,66555],{"class":78,"line":18905},[76,66525,57265],{"class":90},[76,66527,53643],{"class":53332},[76,66529,55518],{"class":86},[76,66531,370],{"class":90},[76,66533,64651],{"class":126},[76,66535,63080],{"class":90},[76,66537,3583],{"class":53332},[76,66539,57270],{"class":86},[76,66541,370],{"class":90},[76,66543,66544],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[76,66546,57278],{"class":86},[76,66548,370],{"class":90},[76,66550,9730],{"class":126},[76,66552,66447],{"class":90},[76,66554,53643],{"class":53332},[76,66556,53339],{"class":90},[76,66558,66559,66561,66563,66565,66567,66569,66571,66573,66575,66577,66580,66582,66584,66586,66588,66590],{"class":78,"line":18919},[76,66560,57265],{"class":90},[76,66562,53643],{"class":53332},[76,66564,55518],{"class":86},[76,66566,370],{"class":90},[76,66568,64651],{"class":126},[76,66570,63080],{"class":90},[76,66572,3583],{"class":53332},[76,66574,57270],{"class":86},[76,66576,370],{"class":90},[76,66578,66579],{"class":126},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[76,66581,57278],{"class":86},[76,66583,370],{"class":90},[76,66585,9730],{"class":126},[76,66587,66447],{"class":90},[76,66589,53643],{"class":53332},[76,66591,53339],{"class":90},[76,66593,66594,66596,66598],{"class":78,"line":18931},[76,66595,53808],{"class":90},[76,66597,53643],{"class":53332},[76,66599,53339],{"class":90},[76,66601,66602,66604,66606],{"class":78,"line":18936},[76,66603,54449],{"class":90},[76,66605,53643],{"class":53332},[76,66607,53339],{"class":90},[76,66609,66610,66612,66614],{"class":78,"line":18949},[76,66611,54176],{"class":90},[76,66613,53845],{"class":53332},[76,66615,53339],{"class":90},[76,66617,66618],{"class":78,"line":18954},[76,66619,66620],{"class":540},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[76,66622,66623],{"class":78,"line":18959},[76,66624,66625],{"class":540},"    \u002F\u002F 1.1 获取 a 元素 \n",[76,66627,66628,66630,66633,66635,66637,66639,66641,66644],{"class":78,"line":18964},[76,66629,13275],{"class":82},[76,66631,66632],{"class":119}," as",[76,66634,15617],{"class":82},[76,66636,56427],{"class":90},[76,66638,57712],{"class":86},[76,66640,123],{"class":90},[76,66642,66643],{"class":126},"'.tab-nav a'",[76,66645,130],{"class":90},[76,66647,66648],{"class":78,"line":18977},[76,66649,66650],{"class":540},"    \u002F\u002F console.log(as) \n",[76,66652,66653,66655,66657,66659,66661,66663,66665,66667,66669,66672,66674,66676,66678],{"class":78,"line":18982},[76,66654,1469],{"class":82},[76,66656,3770],{"class":90},[76,66658,53879],{"class":82},[76,66660,11505],{"class":90},[76,66662,370],{"class":82},[76,66664,587],{"class":119},[76,66666,11512],{"class":90},[76,66668,584],{"class":82},[76,66670,66671],{"class":90}," as.",[76,66673,54000],{"class":119},[76,66675,5299],{"class":90},[76,66677,4388],{"class":82},[76,66679,14495],{"class":90},[76,66681,66682],{"class":78,"line":34671},[76,66683,66684],{"class":540},"      \u002F\u002F console.log(as[i])\n",[76,66686,66687],{"class":78,"line":34677},[76,66688,66689],{"class":540},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[76,66691,66692,66695,66697,66699,66702,66704,66706],{"class":78,"line":34683},[76,66693,66694],{"class":90},"      as[i].",[76,66696,59843],{"class":86},[76,66698,123],{"class":90},[76,66700,66701],{"class":126},"'mouseenter'",[76,66703,405],{"class":90},[76,66705,56480],{"class":82},[76,66707,56483],{"class":90},[76,66709,66710],{"class":78,"line":34689},[76,66711,66712],{"class":540},"        \u002F\u002F console.log('鼠标经过')\n",[76,66714,66715],{"class":78,"line":34695},[76,66716,66717],{"class":540},"        \u002F\u002F 排他思想  \n",[76,66719,66720],{"class":78,"line":34706},[76,66721,66722],{"class":540},"        \u002F\u002F 干掉别人 移除类active\n",[76,66724,66725,66727,66729,66731,66734,66736,66738,66740,66743],{"class":78,"line":34712},[76,66726,53957],{"class":90},[76,66728,56430],{"class":86},[76,66730,123],{"class":90},[76,66732,66733],{"class":126},"'.tab-nav .active'",[76,66735,59033],{"class":90},[76,66737,59036],{"class":86},[76,66739,123],{"class":90},[76,66741,66742],{"class":126},"'active'",[76,66744,130],{"class":90},[76,66746,66747],{"class":78,"line":34732},[76,66748,66749],{"class":540},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[76,66751,66752,66755,66758,66760,66762,66764],{"class":78,"line":34738},[76,66753,66754],{"class":119},"        this",[76,66756,66757],{"class":90},".classList.",[76,66759,7414],{"class":86},[76,66761,123],{"class":90},[76,66763,66742],{"class":126},[76,66765,130],{"class":90},[76,66767,66768],{"class":78,"line":34749},[76,66769,149],{"emptyLinePlaceholder":148},[76,66771,66772],{"class":78,"line":34755},[76,66773,66774],{"class":540},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[76,66776,66777],{"class":78,"line":34761},[76,66778,66779],{"class":540},"        \u002F\u002F 干掉别人\n",[76,66781,66782,66784,66786,66788,66791,66793,66795,66797,66799],{"class":78,"line":34767},[76,66783,53957],{"class":90},[76,66785,56430],{"class":86},[76,66787,123],{"class":90},[76,66789,66790],{"class":126},"'.tab-content .active'",[76,66792,59033],{"class":90},[76,66794,59036],{"class":86},[76,66796,123],{"class":90},[76,66798,66742],{"class":126},[76,66800,130],{"class":90},[76,66802,66803],{"class":78,"line":34773},[76,66804,66805],{"class":540},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[76,66807,66808,66810,66812,66814,66817,66819,66821,66823,66825,66827,66829,66831,66833],{"class":78,"line":34779},[76,66809,53957],{"class":90},[76,66811,56430],{"class":86},[76,66813,123],{"class":90},[76,66815,66816],{"class":126},"`.tab-content .item:nth-child(${",[76,66818,2705],{"class":90},[76,66820,47601],{"class":82},[76,66822,27168],{"class":119},[76,66824,59062],{"class":126},[76,66826,59033],{"class":90},[76,66828,7414],{"class":86},[76,66830,123],{"class":90},[76,66832,66742],{"class":126},[76,66834,130],{"class":90},[76,66836,66837],{"class":78,"line":34785},[76,66838,149],{"emptyLinePlaceholder":148},[76,66840,66841],{"class":78,"line":34791},[76,66842,66843],{"class":90},"      })\n",[76,66845,66846],{"class":78,"line":34811},[76,66847,4283],{"class":90},[76,66849,66850,66852,66854],{"class":78,"line":34817},[76,66851,54449],{"class":90},[76,66853,53845],{"class":53332},[76,66855,53339],{"class":90},[76,66857,66858,66860,66862],{"class":78,"line":34833},[76,66859,53817],{"class":90},[76,66861,53832],{"class":53332},[76,66863,53339],{"class":90},[76,66865,66866],{"class":78,"line":34839},[76,66867,149],{"emptyLinePlaceholder":148},[76,66869,66870,66872,66874],{"class":78,"line":34853},[76,66871,53817],{"class":90},[76,66873,52667],{"class":53332},[76,66875,53339],{"class":90},[19,66877,66878],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66880,66881],{},"在监听事件中，this指向的就是他的调用者",[19,66883,66884],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66886,55752],{},[19,66888,66889],{},"(function () {",[19,66891,66892],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66894,66895],{},"list.addEventListener('click', function (e) {",[19,66897,66898],{},"if (e.target.tagName === 'A') {",[19,66900,66901],{},"\u002F\u002F 排他思想",[19,66903,66904],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66906,66907],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66909,66910],{},"\u002F\u002F console.log(old);",[19,66912,66913],{},"\u002F\u002F 判断",[19,66915,66916],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66918,66919],{},"if (old) old.classList.remove('active')",[19,66921,66922],{},"e.target.classList.add('active')",[19,66924,304],{},[19,66926,54496],{},[19,66928,66929],{},"})();",[889,66931,66933],{"id":66932},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[66,66935,66937],{"className":52665,"code":66936,"language":52667,"meta":71,"style":71},"\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",[73,66938,66939,66949,66953,66961,66965,66979,66993,67005,67013,67019,67029,67039,67043,67047,67054,67066,67077,67094,67107,67121,67131,67135,67139,67146,67157,67175,67185,67197,67201,67205,67212,67229,67240,67252,67256,67260,67267,67279,67283,67291,67299,67303,67311,67319,67327,67342,67386,67394,67407,67420,67433,67441,67449,67457,67485,67493,67505,67518,67531,67539,67547,67555,67581,67589,67602,67614,67627,67635,67643,67651,67677,67685,67698,67710,67723,67731,67739,67747,67752,67772,67777,67797,67802,67819,67824,67832,67837,67866,67879,67883,67887,67892,67896,67924,67929,67946,67951,67956,67961,67966,67992,67996,68000,68008,68016,68020],{"__ignoreMap":71},[76,66940,66941,66943,66945,66947],{"class":78,"line":79},[76,66942,53329],{"class":90},[76,66944,53333],{"class":53332},[76,66946,53336],{"class":86},[76,66948,53339],{"class":90},[76,66950,66951],{"class":78,"line":94},[76,66952,149],{"emptyLinePlaceholder":148},[76,66954,66955,66957,66959],{"class":78,"line":133},[76,66956,584],{"class":90},[76,66958,52667],{"class":53332},[76,66960,53339],{"class":90},[76,66962,66963],{"class":78,"line":145},[76,66964,149],{"emptyLinePlaceholder":148},[76,66966,66967,66969,66971,66973,66975,66977],{"class":78,"line":152},[76,66968,584],{"class":90},[76,66970,53366],{"class":53332},[76,66972,53348],{"class":86},[76,66974,370],{"class":90},[76,66976,53353],{"class":126},[76,66978,53339],{"class":90},[76,66980,66981,66983,66985,66987,66989,66991],{"class":78,"line":157},[76,66982,54176],{"class":90},[76,66984,53376],{"class":53332},[76,66986,53379],{"class":86},[76,66988,370],{"class":90},[76,66990,53384],{"class":126},[76,66992,53339],{"class":90},[76,66994,66995,66997,66999,67001,67003],{"class":78,"line":246},[76,66996,54176],{"class":90},[76,66998,53439],{"class":53332},[76,67000,57345],{"class":90},[76,67002,53439],{"class":53332},[76,67004,53339],{"class":90},[76,67006,67007,67009,67011],{"class":78,"line":251},[76,67008,54176],{"class":90},[76,67010,2178],{"class":53332},[76,67012,53339],{"class":90},[76,67014,67015,67017],{"class":78,"line":257},[76,67016,8482],{"class":53332},[76,67018,17623],{"class":90},[76,67020,67021,67023,67025,67027],{"class":78,"line":641},[76,67022,56737],{"class":119},[76,67024,53469],{"class":90},[76,67026,1294],{"class":119},[76,67028,3415],{"class":90},[76,67030,67031,67033,67035,67037],{"class":78,"line":646},[76,67032,56726],{"class":119},[76,67034,53469],{"class":90},[76,67036,1294],{"class":119},[76,67038,3415],{"class":90},[76,67040,67041],{"class":78,"line":659},[76,67042,4283],{"class":90},[76,67044,67045],{"class":78,"line":1608},[76,67046,149],{"emptyLinePlaceholder":148},[76,67048,67049,67052],{"class":78,"line":1632},[76,67050,67051],{"class":53332},"    table",[76,67053,17623],{"class":90},[76,67055,67056,67059,67061,67064],{"class":78,"line":1637},[76,67057,67058],{"class":119},"      border-collapse",[76,67060,53469],{"class":90},[76,67062,67063],{"class":119},"collapse",[76,67065,3415],{"class":90},[76,67067,67068,67071,67073,67075],{"class":78,"line":1642},[76,67069,67070],{"class":119},"      border-spacing",[76,67072,53469],{"class":90},[76,67074,1294],{"class":119},[76,67076,3415],{"class":90},[76,67078,67079,67081,67083,67085,67087,67089,67092],{"class":78,"line":1652},[76,67080,64005],{"class":119},[76,67082,53469],{"class":90},[76,67084,669],{"class":119},[76,67086,53524],{"class":82},[76,67088,53553],{"class":119},[76,67090,67091],{"class":119}," #c0c0c0",[76,67093,3415],{"class":90},[76,67095,67096,67098,67100,67103,67105],{"class":78,"line":1660},[76,67097,56802],{"class":119},[76,67099,53469],{"class":90},[76,67101,67102],{"class":119},"500",[76,67104,53524],{"class":82},[76,67106,3415],{"class":90},[76,67108,67109,67111,67113,67115,67117,67119],{"class":78,"line":1683},[76,67110,56737],{"class":119},[76,67112,53469],{"class":90},[76,67114,2575],{"class":119},[76,67116,53524],{"class":82},[76,67118,53588],{"class":119},[76,67120,3415],{"class":90},[76,67122,67123,67125,67127,67129],{"class":78,"line":1698},[76,67124,59316],{"class":119},[76,67126,53469],{"class":90},[76,67128,53624],{"class":119},[76,67130,3415],{"class":90},[76,67132,67133],{"class":78,"line":1711},[76,67134,4283],{"class":90},[76,67136,67137],{"class":78,"line":1717},[76,67138,149],{"emptyLinePlaceholder":148},[76,67140,67141,67144],{"class":78,"line":1728},[76,67142,67143],{"class":53332},"    th",[76,67145,17623],{"class":90},[76,67147,67148,67150,67152,67155],{"class":78,"line":1740},[76,67149,56915],{"class":119},[76,67151,53469],{"class":90},[76,67153,67154],{"class":119},"#09c",[76,67156,3415],{"class":90},[76,67158,67159,67162,67164,67166,67168,67170,67173],{"class":78,"line":1746},[76,67160,67161],{"class":119},"      font",[76,67163,53469],{"class":90},[76,67165,64367],{"class":119},[76,67167,66101],{"class":119},[76,67169,53524],{"class":82},[76,67171,67172],{"class":126}," \"微软雅黑\"",[76,67174,3415],{"class":90},[76,67176,67177,67179,67181,67183],{"class":78,"line":1751},[76,67178,59446],{"class":119},[76,67180,53469],{"class":90},[76,67182,62870],{"class":119},[76,67184,3415],{"class":90},[76,67186,67187,67189,67191,67193,67195],{"class":78,"line":1756},[76,67188,56816],{"class":119},[76,67190,53469],{"class":90},[76,67192,3058],{"class":119},[76,67194,53524],{"class":82},[76,67196,3415],{"class":90},[76,67198,67199],{"class":78,"line":1766},[76,67200,4283],{"class":90},[76,67202,67203],{"class":78,"line":1773},[76,67204,149],{"emptyLinePlaceholder":148},[76,67206,67207,67210],{"class":78,"line":1793},[76,67208,67209],{"class":53332},"    td",[76,67211,17623],{"class":90},[76,67213,67214,67216,67218,67220,67222,67224,67227],{"class":78,"line":1806},[76,67215,64005],{"class":119},[76,67217,53469],{"class":90},[76,67219,669],{"class":119},[76,67221,53524],{"class":82},[76,67223,53553],{"class":119},[76,67225,67226],{"class":119}," #d0d0d0",[76,67228,3415],{"class":90},[76,67230,67231,67233,67235,67238],{"class":78,"line":1817},[76,67232,59446],{"class":119},[76,67234,53469],{"class":90},[76,67236,67237],{"class":119},"#404060",[76,67239,3415],{"class":90},[76,67241,67242,67244,67246,67248,67250],{"class":78,"line":1822},[76,67243,56726],{"class":119},[76,67245,53469],{"class":90},[76,67247,402],{"class":119},[76,67249,53524],{"class":82},[76,67251,3415],{"class":90},[76,67253,67254],{"class":78,"line":1835},[76,67255,4283],{"class":90},[76,67257,67258],{"class":78,"line":1847},[76,67259,149],{"emptyLinePlaceholder":148},[76,67261,67262,67265],{"class":78,"line":1852},[76,67263,67264],{"class":86},"    .allCheck",[76,67266,17623],{"class":90},[76,67268,67269,67271,67273,67275,67277],{"class":78,"line":1862},[76,67270,56802],{"class":119},[76,67272,53469],{"class":90},[76,67274,2872],{"class":119},[76,67276,53524],{"class":82},[76,67278,3415],{"class":90},[76,67280,67281],{"class":78,"line":1874},[76,67282,4283],{"class":90},[76,67284,67285,67287,67289],{"class":78,"line":1879},[76,67286,54449],{"class":90},[76,67288,2178],{"class":53332},[76,67290,53339],{"class":90},[76,67292,67293,67295,67297],{"class":78,"line":1884},[76,67294,53817],{"class":90},[76,67296,53366],{"class":53332},[76,67298,53339],{"class":90},[76,67300,67301],{"class":78,"line":1889},[76,67302,149],{"emptyLinePlaceholder":148},[76,67304,67305,67307,67309],{"class":78,"line":1900},[76,67306,584],{"class":90},[76,67308,53832],{"class":53332},[76,67310,53339],{"class":90},[76,67312,67313,67315,67317],{"class":78,"line":1906},[76,67314,54176],{"class":90},[76,67316,2404],{"class":53332},[76,67318,53339],{"class":90},[76,67320,67321,67323,67325],{"class":78,"line":1924},[76,67322,53373],{"class":90},[76,67324,2410],{"class":53332},[76,67326,53339],{"class":90},[76,67328,67329,67331,67333,67335,67337,67340],{"class":78,"line":1929},[76,67330,57265],{"class":90},[76,67332,2413],{"class":53332},[76,67334,55518],{"class":86},[76,67336,370],{"class":90},[76,67338,67339],{"class":126},"\"allCheck\"",[76,67341,53339],{"class":90},[76,67343,67344,67346,67348,67350,67352,67354,67356,67358,67360,67362,67364,67367,67370,67372,67374,67376,67379,67382,67384],{"class":78,"line":1944},[76,67345,57333],{"class":90},[76,67347,1673],{"class":53332},[76,67349,55855],{"class":86},[76,67351,370],{"class":90},[76,67353,55860],{"class":126},[76,67355,16972],{"class":86},[76,67357,370],{"class":90},[76,67359,9730],{"class":126},[76,67361,17011],{"class":86},[76,67363,370],{"class":90},[76,67365,67366],{"class":126},"\"checkAll\"",[76,67368,67369],{"class":90},"> \u003C",[76,67371,76],{"class":53332},[76,67373,55518],{"class":86},[76,67375,370],{"class":90},[76,67377,67378],{"class":126},"\"all\"",[76,67380,67381],{"class":90},">全选\u003C\u002F",[76,67383,76],{"class":53332},[76,67385,53339],{"class":90},[76,67387,67388,67390,67392],{"class":78,"line":1950},[76,67389,57438],{"class":90},[76,67391,2413],{"class":53332},[76,67393,53339],{"class":90},[76,67395,67396,67398,67400,67403,67405],{"class":78,"line":1965},[76,67397,57265],{"class":90},[76,67399,2413],{"class":53332},[76,67401,67402],{"class":90},">商品\u003C\u002F",[76,67404,2413],{"class":53332},[76,67406,53339],{"class":90},[76,67408,67409,67411,67413,67416,67418],{"class":78,"line":1971},[76,67410,57265],{"class":90},[76,67412,2413],{"class":53332},[76,67414,67415],{"class":90},">商家\u003C\u002F",[76,67417,2413],{"class":53332},[76,67419,53339],{"class":90},[76,67421,67422,67424,67426,67429,67431],{"class":78,"line":1985},[76,67423,57265],{"class":90},[76,67425,2413],{"class":53332},[76,67427,67428],{"class":90},">价格\u003C\u002F",[76,67430,2413],{"class":53332},[76,67432,53339],{"class":90},[76,67434,67435,67437,67439],{"class":78,"line":1991},[76,67436,53808],{"class":90},[76,67438,2410],{"class":53332},[76,67440,53339],{"class":90},[76,67442,67443,67445,67447],{"class":78,"line":2005},[76,67444,53373],{"class":90},[76,67446,2410],{"class":53332},[76,67448,53339],{"class":90},[76,67450,67451,67453,67455],{"class":78,"line":2017},[76,67452,57265],{"class":90},[76,67454,2456],{"class":53332},[76,67456,53339],{"class":90},[76,67458,67459,67461,67463,67465,67467,67469,67471,67473,67476,67478,67480,67483],{"class":78,"line":2023},[76,67460,57333],{"class":90},[76,67462,1673],{"class":53332},[76,67464,55855],{"class":86},[76,67466,370],{"class":90},[76,67468,55860],{"class":126},[76,67470,16972],{"class":86},[76,67472,370],{"class":90},[76,67474,67475],{"class":126},"\"check\"",[76,67477,55518],{"class":86},[76,67479,370],{"class":90},[76,67481,67482],{"class":126},"\"ck\"",[76,67484,53339],{"class":90},[76,67486,67487,67489,67491],{"class":78,"line":2031},[76,67488,57438],{"class":90},[76,67490,2456],{"class":53332},[76,67492,53339],{"class":90},[76,67494,67495,67497,67499,67501,67503],{"class":78,"line":11880},[76,67496,57265],{"class":90},[76,67498,2456],{"class":53332},[76,67500,63201],{"class":90},[76,67502,2456],{"class":53332},[76,67504,53339],{"class":90},[76,67506,67507,67509,67511,67514,67516],{"class":78,"line":11901},[76,67508,57265],{"class":90},[76,67510,2456],{"class":53332},[76,67512,67513],{"class":90},">小米\u003C\u002F",[76,67515,2456],{"class":53332},[76,67517,53339],{"class":90},[76,67519,67520,67522,67524,67527,67529],{"class":78,"line":11907},[76,67521,57265],{"class":90},[76,67523,2456],{"class":53332},[76,67525,67526],{"class":90},">￥1999\u003C\u002F",[76,67528,2456],{"class":53332},[76,67530,53339],{"class":90},[76,67532,67533,67535,67537],{"class":78,"line":11921},[76,67534,53808],{"class":90},[76,67536,2410],{"class":53332},[76,67538,53339],{"class":90},[76,67540,67541,67543,67545],{"class":78,"line":11927},[76,67542,53373],{"class":90},[76,67544,2410],{"class":53332},[76,67546,53339],{"class":90},[76,67548,67549,67551,67553],{"class":78,"line":11954},[76,67550,57265],{"class":90},[76,67552,2456],{"class":53332},[76,67554,53339],{"class":90},[76,67556,67557,67559,67561,67563,67565,67567,67569,67571,67573,67575,67577,67579],{"class":78,"line":11963},[76,67558,57333],{"class":90},[76,67560,1673],{"class":53332},[76,67562,55855],{"class":86},[76,67564,370],{"class":90},[76,67566,55860],{"class":126},[76,67568,16972],{"class":86},[76,67570,370],{"class":90},[76,67572,67475],{"class":126},[76,67574,55518],{"class":86},[76,67576,370],{"class":90},[76,67578,67482],{"class":126},[76,67580,53339],{"class":90},[76,67582,67583,67585,67587],{"class":78,"line":11969},[76,67584,57438],{"class":90},[76,67586,2456],{"class":53332},[76,67588,53339],{"class":90},[76,67590,67591,67593,67595,67598,67600],{"class":78,"line":11977},[76,67592,57265],{"class":90},[76,67594,2456],{"class":53332},[76,67596,67597],{"class":90},">小米净水器\u003C\u002F",[76,67599,2456],{"class":53332},[76,67601,53339],{"class":90},[76,67603,67604,67606,67608,67610,67612],{"class":78,"line":11982},[76,67605,57265],{"class":90},[76,67607,2456],{"class":53332},[76,67609,67513],{"class":90},[76,67611,2456],{"class":53332},[76,67613,53339],{"class":90},[76,67615,67616,67618,67620,67623,67625],{"class":78,"line":18654},[76,67617,57265],{"class":90},[76,67619,2456],{"class":53332},[76,67621,67622],{"class":90},">￥4999\u003C\u002F",[76,67624,2456],{"class":53332},[76,67626,53339],{"class":90},[76,67628,67629,67631,67633],{"class":78,"line":18660},[76,67630,53808],{"class":90},[76,67632,2410],{"class":53332},[76,67634,53339],{"class":90},[76,67636,67637,67639,67641],{"class":78,"line":18683},[76,67638,53373],{"class":90},[76,67640,2410],{"class":53332},[76,67642,53339],{"class":90},[76,67644,67645,67647,67649],{"class":78,"line":18689},[76,67646,57265],{"class":90},[76,67648,2456],{"class":53332},[76,67650,53339],{"class":90},[76,67652,67653,67655,67657,67659,67661,67663,67665,67667,67669,67671,67673,67675],{"class":78,"line":18712},[76,67654,57333],{"class":90},[76,67656,1673],{"class":53332},[76,67658,55855],{"class":86},[76,67660,370],{"class":90},[76,67662,55860],{"class":126},[76,67664,16972],{"class":86},[76,67666,370],{"class":90},[76,67668,67475],{"class":126},[76,67670,55518],{"class":86},[76,67672,370],{"class":90},[76,67674,67482],{"class":126},[76,67676,53339],{"class":90},[76,67678,67679,67681,67683],{"class":78,"line":18726},[76,67680,57438],{"class":90},[76,67682,2456],{"class":53332},[76,67684,53339],{"class":90},[76,67686,67687,67689,67691,67694,67696],{"class":78,"line":18746},[76,67688,57265],{"class":90},[76,67690,2456],{"class":53332},[76,67692,67693],{"class":90},">小米电视\u003C\u002F",[76,67695,2456],{"class":53332},[76,67697,53339],{"class":90},[76,67699,67700,67702,67704,67706,67708],{"class":78,"line":18752},[76,67701,57265],{"class":90},[76,67703,2456],{"class":53332},[76,67705,67513],{"class":90},[76,67707,2456],{"class":53332},[76,67709,53339],{"class":90},[76,67711,67712,67714,67716,67719,67721],{"class":78,"line":18763},[76,67713,57265],{"class":90},[76,67715,2456],{"class":53332},[76,67717,67718],{"class":90},">￥5999\u003C\u002F",[76,67720,2456],{"class":53332},[76,67722,53339],{"class":90},[76,67724,67725,67727,67729],{"class":78,"line":18786},[76,67726,53808],{"class":90},[76,67728,2410],{"class":53332},[76,67730,53339],{"class":90},[76,67732,67733,67735,67737],{"class":78,"line":18808},[76,67734,54449],{"class":90},[76,67736,2404],{"class":53332},[76,67738,53339],{"class":90},[76,67740,67741,67743,67745],{"class":78,"line":18813},[76,67742,54176],{"class":90},[76,67744,53845],{"class":53332},[76,67746,53339],{"class":90},[76,67748,67749],{"class":78,"line":18819},[76,67750,67751],{"class":540},"    \u002F\u002F 1. 获取大复选框\n",[76,67753,67754,67756,67759,67761,67763,67765,67767,67770],{"class":78,"line":18833},[76,67755,13275],{"class":82},[76,67757,67758],{"class":119}," checkAll",[76,67760,15617],{"class":82},[76,67762,56427],{"class":90},[76,67764,56430],{"class":86},[76,67766,123],{"class":90},[76,67768,67769],{"class":126},"'#checkAll'",[76,67771,130],{"class":90},[76,67773,67774],{"class":78,"line":18846},[76,67775,67776],{"class":540},"    \u002F\u002F 2. 获取所有的小复选框\n",[76,67778,67779,67781,67784,67786,67788,67790,67792,67795],{"class":78,"line":18851},[76,67780,13275],{"class":82},[76,67782,67783],{"class":119}," cks",[76,67785,15617],{"class":82},[76,67787,56427],{"class":90},[76,67789,57712],{"class":86},[76,67791,123],{"class":90},[76,67793,67794],{"class":126},"'.ck'",[76,67796,130],{"class":90},[76,67798,67799],{"class":78,"line":18865},[76,67800,67801],{"class":540},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[76,67803,67804,67807,67809,67811,67813,67815,67817],{"class":78,"line":18870},[76,67805,67806],{"class":90},"    checkAll.",[76,67808,59843],{"class":86},[76,67810,123],{"class":90},[76,67812,59848],{"class":126},[76,67814,405],{"class":90},[76,67816,56480],{"class":82},[76,67818,56483],{"class":90},[76,67820,67821],{"class":78,"line":18876},[76,67822,67823],{"class":540},"      \u002F\u002F 得到当前大复选框的选中状态\n",[76,67825,67826,67829],{"class":78,"line":18881},[76,67827,67828],{"class":540},"      \u002F\u002F console.log(checkAll.checked)",[76,67830,67831],{"class":540},"  \u002F\u002F 得到 是 true 或者是 false\n",[76,67833,67834],{"class":78,"line":18895},[76,67835,67836],{"class":540},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[76,67838,67839,67841,67843,67845,67847,67849,67851,67853,67855,67858,67860,67862,67864],{"class":78,"line":18900},[76,67840,54316],{"class":82},[76,67842,3770],{"class":90},[76,67844,53879],{"class":82},[76,67846,11505],{"class":90},[76,67848,370],{"class":82},[76,67850,587],{"class":119},[76,67852,11512],{"class":90},[76,67854,584],{"class":82},[76,67856,67857],{"class":90}," cks.",[76,67859,54000],{"class":119},[76,67861,5299],{"class":90},[76,67863,4388],{"class":82},[76,67865,14495],{"class":90},[76,67867,67868,67871,67873,67876],{"class":78,"line":18905},[76,67869,67870],{"class":90},"        cks[i].checked ",[76,67872,370],{"class":82},[76,67874,67875],{"class":119}," this",[76,67877,67878],{"class":90},".checked\n",[76,67880,67881],{"class":78,"line":18919},[76,67882,54430],{"class":90},[76,67884,67885],{"class":78,"line":18931},[76,67886,35499],{"class":90},[76,67888,67889],{"class":78,"line":18936},[76,67890,67891],{"class":540},"    \u002F\u002F 5. 小复选框控制大复选框\n",[76,67893,67894],{"class":78,"line":18949},[76,67895,149],{"emptyLinePlaceholder":148},[76,67897,67898,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922],{"class":78,"line":18954},[76,67899,1469],{"class":82},[76,67901,3770],{"class":90},[76,67903,53879],{"class":82},[76,67905,11505],{"class":90},[76,67907,370],{"class":82},[76,67909,587],{"class":119},[76,67911,11512],{"class":90},[76,67913,584],{"class":82},[76,67915,67857],{"class":90},[76,67917,54000],{"class":119},[76,67919,5299],{"class":90},[76,67921,4388],{"class":82},[76,67923,14495],{"class":90},[76,67925,67926],{"class":78,"line":18959},[76,67927,67928],{"class":540},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[76,67930,67931,67934,67936,67938,67940,67942,67944],{"class":78,"line":18964},[76,67932,67933],{"class":90},"      cks[i].",[76,67935,59843],{"class":86},[76,67937,123],{"class":90},[76,67939,59848],{"class":126},[76,67941,405],{"class":90},[76,67943,56480],{"class":82},[76,67945,56483],{"class":90},[76,67947,67948],{"class":78,"line":18977},[76,67949,67950],{"class":540},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[76,67952,67953],{"class":78,"line":18982},[76,67954,67955],{"class":540},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[76,67957,67958],{"class":78,"line":34671},[76,67959,67960],{"class":540},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[76,67962,67963],{"class":78,"line":34677},[76,67964,67965],{"class":540},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[76,67967,67968,67971,67973,67975,67977,67979,67982,67984,67986,67988,67990],{"class":78,"line":34683},[76,67969,67970],{"class":90},"        checkAll.checked ",[76,67972,370],{"class":82},[76,67974,56427],{"class":90},[76,67976,57712],{"class":86},[76,67978,123],{"class":90},[76,67980,67981],{"class":126},"'.ck:checked'",[76,67983,32870],{"class":90},[76,67985,54000],{"class":119},[76,67987,59936],{"class":82},[76,67989,67857],{"class":90},[76,67991,57861],{"class":119},[76,67993,67994],{"class":78,"line":34689},[76,67995,66843],{"class":90},[76,67997,67998],{"class":78,"line":34695},[76,67999,4283],{"class":90},[76,68001,68002,68004,68006],{"class":78,"line":34706},[76,68003,54449],{"class":90},[76,68005,53845],{"class":53332},[76,68007,53339],{"class":90},[76,68009,68010,68012,68014],{"class":78,"line":34712},[76,68011,53817],{"class":90},[76,68013,53832],{"class":53332},[76,68015,53339],{"class":90},[76,68017,68018],{"class":78,"line":34732},[76,68019,149],{"emptyLinePlaceholder":148},[76,68021,68022,68024,68026],{"class":78,"line":34738},[76,68023,53817],{"class":90},[76,68025,52667],{"class":53332},[76,68027,53339],{"class":90},[19,68029,68030],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68032,68033],{},"用好之间比较得到的布尔值！！！",[19,68035,68036,68037,68040,68041,3770,68044,795,68046,68049],{},"在 JS 里访问的时候，",[73,68038,68039],{},"checkbox.checked"," 是一个 ",[2416,68042,68043],{},"布尔值",[73,68045,3483],{},[73,68047,68048],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68051,68052,68053,68056,68057],{},"HTML 的 ",[73,68054,68055],{},"checked=\"checked\""," 只是 ",[2416,68058,68059,68060,68063],{},"初始值；JS 的 ",[73,68061,68062],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68065,68066],{},"：checked是一个伪类选择器",[19,68068,68069],{},[3583,68070],{"alt":71,"src":68071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68073,68074,68077],{},[68075,68076],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68079,68080],{},[3583,68081],{"alt":71,"src":68082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68084,68086],{"id":68085},"_33-dom事件进阶","3.3 DOM事件进阶",[889,68088,68090],{"id":68089},"_331-事件流","3.3.1 事件流",[19,68092,68093],{},[3583,68094],{"alt":71,"src":68095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24047,68097,68099],{"id":68098},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68101,68102],{},[3583,68103],{"alt":71,"src":68104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[66,68106,68108],{"className":52665,"code":68107,"language":52667,"meta":71,"style":71},"\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",[73,68109,68110,68120,68134,68138,68146,68160,68180,68192,68200,68207,68219,68231,68241,68245,68249,68256,68268,68280,68290,68294,68302,68310,68314,68322,68337,68356,68364,68372,68392,68412,68428,68439,68447,68464,68475,68483,68500,68511,68519,68527,68535,68539],{"__ignoreMap":71},[76,68111,68112,68114,68116,68118],{"class":78,"line":79},[76,68113,53329],{"class":90},[76,68115,53333],{"class":53332},[76,68117,53336],{"class":86},[76,68119,53339],{"class":90},[76,68121,68122,68124,68126,68128,68130,68132],{"class":78,"line":94},[76,68123,584],{"class":90},[76,68125,52667],{"class":53332},[76,68127,53348],{"class":86},[76,68129,370],{"class":90},[76,68131,53353],{"class":126},[76,68133,53339],{"class":90},[76,68135,68136],{"class":78,"line":133},[76,68137,149],{"emptyLinePlaceholder":148},[76,68139,68140,68142,68144],{"class":78,"line":145},[76,68141,584],{"class":90},[76,68143,53366],{"class":53332},[76,68145,53339],{"class":90},[76,68147,68148,68150,68152,68154,68156,68158],{"class":78,"line":152},[76,68149,54176],{"class":90},[76,68151,53376],{"class":53332},[76,68153,53379],{"class":86},[76,68155,370],{"class":90},[76,68157,53384],{"class":126},[76,68159,53339],{"class":90},[76,68161,68162,68164,68166,68168,68170,68172,68174,68176,68178],{"class":78,"line":157},[76,68163,54176],{"class":90},[76,68165,53376],{"class":53332},[76,68167,16972],{"class":86},[76,68169,370],{"class":90},[76,68171,53423],{"class":126},[76,68173,53403],{"class":86},[76,68175,370],{"class":90},[76,68177,53430],{"class":126},[76,68179,53339],{"class":90},[76,68181,68182,68184,68186,68188,68190],{"class":78,"line":246},[76,68183,54176],{"class":90},[76,68185,53439],{"class":53332},[76,68187,53442],{"class":90},[76,68189,53439],{"class":53332},[76,68191,53339],{"class":90},[76,68193,68194,68196,68198],{"class":78,"line":251},[76,68195,54176],{"class":90},[76,68197,2178],{"class":53332},[76,68199,53339],{"class":90},[76,68201,68202,68205],{"class":78,"line":257},[76,68203,68204],{"class":86},"    .father",[76,68206,17623],{"class":90},[76,68208,68209,68211,68213,68215,68217],{"class":78,"line":641},[76,68210,56802],{"class":119},[76,68212,53469],{"class":90},[76,68214,67102],{"class":119},[76,68216,53524],{"class":82},[76,68218,3415],{"class":90},[76,68220,68221,68223,68225,68227,68229],{"class":78,"line":646},[76,68222,56816],{"class":119},[76,68224,53469],{"class":90},[76,68226,67102],{"class":119},[76,68228,53524],{"class":82},[76,68230,3415],{"class":90},[76,68232,68233,68235,68237,68239],{"class":78,"line":659},[76,68234,56915],{"class":119},[76,68236,53469],{"class":90},[76,68238,53677],{"class":119},[76,68240,3415],{"class":90},[76,68242,68243],{"class":78,"line":1608},[76,68244,4283],{"class":90},[76,68246,68247],{"class":78,"line":1632},[76,68248,149],{"emptyLinePlaceholder":148},[76,68250,68251,68254],{"class":78,"line":1637},[76,68252,68253],{"class":86},"    .son",[76,68255,17623],{"class":90},[76,68257,68258,68260,68262,68264,68266],{"class":78,"line":1642},[76,68259,56802],{"class":119},[76,68261,53469],{"class":90},[76,68263,2133],{"class":119},[76,68265,53524],{"class":82},[76,68267,3415],{"class":90},[76,68269,68270,68272,68274,68276,68278],{"class":78,"line":1652},[76,68271,56816],{"class":119},[76,68273,53469],{"class":90},[76,68275,2133],{"class":119},[76,68277,53524],{"class":82},[76,68279,3415],{"class":90},[76,68281,68282,68284,68286,68288],{"class":78,"line":1660},[76,68283,56915],{"class":119},[76,68285,53469],{"class":90},[76,68287,56920],{"class":119},[76,68289,3415],{"class":90},[76,68291,68292],{"class":78,"line":1683},[76,68293,4283],{"class":90},[76,68295,68296,68298,68300],{"class":78,"line":1698},[76,68297,54449],{"class":90},[76,68299,2178],{"class":53332},[76,68301,53339],{"class":90},[76,68303,68304,68306,68308],{"class":78,"line":1711},[76,68305,53817],{"class":90},[76,68307,53366],{"class":53332},[76,68309,53339],{"class":90},[76,68311,68312],{"class":78,"line":1717},[76,68313,149],{"emptyLinePlaceholder":148},[76,68315,68316,68318,68320],{"class":78,"line":1728},[76,68317,584],{"class":90},[76,68319,53832],{"class":53332},[76,68321,53339],{"class":90},[76,68323,68324,68326,68328,68330,68332,68335],{"class":78,"line":1740},[76,68325,54176],{"class":90},[76,68327,53643],{"class":53332},[76,68329,55518],{"class":86},[76,68331,370],{"class":90},[76,68333,68334],{"class":126},"\"father\"",[76,68336,53339],{"class":90},[76,68338,68339,68341,68343,68345,68347,68350,68352,68354],{"class":78,"line":1746},[76,68340,53373],{"class":90},[76,68342,53643],{"class":53332},[76,68344,55518],{"class":86},[76,68346,370],{"class":90},[76,68348,68349],{"class":126},"\"son\"",[76,68351,57345],{"class":90},[76,68353,53643],{"class":53332},[76,68355,53339],{"class":90},[76,68357,68358,68360,68362],{"class":78,"line":1751},[76,68359,54449],{"class":90},[76,68361,53643],{"class":53332},[76,68363,53339],{"class":90},[76,68365,68366,68368,68370],{"class":78,"line":1756},[76,68367,54176],{"class":90},[76,68369,53845],{"class":53332},[76,68371,53339],{"class":90},[76,68373,68374,68376,68379,68381,68383,68385,68387,68390],{"class":78,"line":1766},[76,68375,13275],{"class":82},[76,68377,68378],{"class":119}," fa",[76,68380,15617],{"class":82},[76,68382,56427],{"class":90},[76,68384,56430],{"class":86},[76,68386,123],{"class":90},[76,68388,68389],{"class":126},"'.father'",[76,68391,130],{"class":90},[76,68393,68394,68396,68399,68401,68403,68405,68407,68410],{"class":78,"line":1773},[76,68395,13275],{"class":82},[76,68397,68398],{"class":119}," son",[76,68400,15617],{"class":82},[76,68402,56427],{"class":90},[76,68404,56430],{"class":86},[76,68406,123],{"class":90},[76,68408,68409],{"class":126},"'.son'",[76,68411,130],{"class":90},[76,68413,68414,68416,68418,68420,68422,68424,68426],{"class":78,"line":1793},[76,68415,54439],{"class":90},[76,68417,59843],{"class":86},[76,68419,123],{"class":90},[76,68421,59848],{"class":126},[76,68423,405],{"class":90},[76,68425,56480],{"class":82},[76,68427,56483],{"class":90},[76,68429,68430,68432,68434,68437],{"class":78,"line":1806},[76,68431,60954],{"class":86},[76,68433,123],{"class":90},[76,68435,68436],{"class":126},"'woshiu1'",[76,68438,130],{"class":90},[76,68440,68441,68443,68445],{"class":78,"line":1817},[76,68442,56566],{"class":90},[76,68444,3483],{"class":119},[76,68446,130],{"class":90},[76,68448,68449,68452,68454,68456,68458,68460,68462],{"class":78,"line":1822},[76,68450,68451],{"class":90},"    fa.",[76,68453,59843],{"class":86},[76,68455,123],{"class":90},[76,68457,59848],{"class":126},[76,68459,405],{"class":90},[76,68461,56480],{"class":82},[76,68463,56483],{"class":90},[76,68465,68466,68468,68470,68473],{"class":78,"line":1835},[76,68467,60954],{"class":86},[76,68469,123],{"class":90},[76,68471,68472],{"class":126},"'1'",[76,68474,130],{"class":90},[76,68476,68477,68479,68481],{"class":78,"line":1847},[76,68478,56566],{"class":90},[76,68480,3483],{"class":119},[76,68482,130],{"class":90},[76,68484,68485,68488,68490,68492,68494,68496,68498],{"class":78,"line":1852},[76,68486,68487],{"class":90},"    son.",[76,68489,59843],{"class":86},[76,68491,123],{"class":90},[76,68493,59848],{"class":126},[76,68495,405],{"class":90},[76,68497,56480],{"class":82},[76,68499,56483],{"class":90},[76,68501,68502,68504,68506,68509],{"class":78,"line":1862},[76,68503,60954],{"class":86},[76,68505,123],{"class":90},[76,68507,68508],{"class":126},"'2'",[76,68510,130],{"class":90},[76,68512,68513,68515,68517],{"class":78,"line":1874},[76,68514,56566],{"class":90},[76,68516,3483],{"class":119},[76,68518,130],{"class":90},[76,68520,68521,68523,68525],{"class":78,"line":1879},[76,68522,54449],{"class":90},[76,68524,53845],{"class":53332},[76,68526,53339],{"class":90},[76,68528,68529,68531,68533],{"class":78,"line":1884},[76,68530,53817],{"class":90},[76,68532,53832],{"class":53332},[76,68534,53339],{"class":90},[76,68536,68537],{"class":78,"line":1889},[76,68538,149],{"emptyLinePlaceholder":148},[76,68540,68541,68543,68545],{"class":78,"line":1900},[76,68542,53817],{"class":90},[76,68544,52667],{"class":53332},[76,68546,53339],{"class":90},[19,68548,68549],{},[3583,68550],{"alt":71,"src":68551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68553,68554],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24047,68556,68558],{"id":68557},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68560,68561],{},[3583,68562],{"alt":71,"src":68563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68565,68566],{},"反着来",[19,68568,68569],{},"注意是同名事件，比如都是‘click’",[24047,68571,68573],{"id":68572},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68575,68576],{},[3583,68577],{"alt":71,"src":68578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24047,68580,68582],{"id":68581},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68584,68585],{},[3583,68586],{"alt":71,"src":68587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68589,68590],{},[3583,68591],{"alt":71,"src":68592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24047,68594,68596],{"id":68595},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68598,68599],{},[29,68600,68601],{},"事件类型的区别",[19,68603,68604],{},[3583,68605],{"alt":71,"src":68606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68608,68609],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68611,68612],{"start":94},[29,68613,68614],{},"注册事件的区别",[19,68616,68617],{},[3583,68618],{"alt":71,"src":68619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24047,68621,68623],{"id":68622},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68625,68626],{},[3583,68627],{"alt":71,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68630,68631],{},[3583,68632],{"alt":71,"src":68633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[66,68635,68637],{"className":55099,"code":68636,"language":55101,"meta":71,"style":71},"\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",[73,68638,68639,68647,68664,68687,68695,68700,68705,68710,68714,68722,68730],{"__ignoreMap":71},[76,68640,68641,68643,68645],{"class":78,"line":79},[76,68642,584],{"class":90},[76,68644,53832],{"class":53332},[76,68646,53339],{"class":90},[76,68648,68649,68651,68654,68657,68659,68662],{"class":78,"line":94},[76,68650,54176],{"class":90},[76,68652,68653],{"class":53332},"form",[76,68655,68656],{"class":86}," action",[76,68658,370],{"class":90},[76,68660,68661],{"class":126},"\"http:\u002F\u002Fwww.itcast.cn\"",[76,68663,53339],{"class":90},[76,68665,68666,68668,68670,68672,68674,68677,68680,68682,68685],{"class":78,"line":133},[76,68667,53373],{"class":90},[76,68669,1673],{"class":53332},[76,68671,55855],{"class":86},[76,68673,370],{"class":90},[76,68675,68676],{"class":126},"\"submit\"",[76,68678,68679],{"class":86}," value",[76,68681,370],{"class":90},[76,68683,68684],{"class":126},"\"免费注册\"",[76,68686,53339],{"class":90},[76,68688,68689,68691,68693],{"class":78,"line":145},[76,68690,53373],{"class":90},[76,68692,53845],{"class":53332},[76,68694,53339],{"class":90},[76,68696,68697],{"class":78,"line":152},[76,68698,68699],{"class":90},"      const form = document.querySelector('form')\n",[76,68701,68702],{"class":78,"line":157},[76,68703,68704],{"class":90},"      form.addEventListener('submit', function (e) {\n",[76,68706,68707],{"class":78,"line":246},[76,68708,68709],{"class":90},"        e.preventDefault()\n",[76,68711,68712],{"class":78,"line":251},[76,68713,66843],{"class":90},[76,68715,68716,68718,68720],{"class":78,"line":257},[76,68717,53808],{"class":90},[76,68719,53845],{"class":53332},[76,68721,53339],{"class":90},[76,68723,68724,68726,68728],{"class":78,"line":641},[76,68725,54449],{"class":90},[76,68727,68653],{"class":53332},[76,68729,53339],{"class":90},[76,68731,68732,68734,68736],{"class":78,"line":646},[76,68733,53817],{"class":90},[76,68735,53832],{"class":53332},[76,68737,53339],{"class":90},[19,68739,68740],{},"点击不在跳转！！！",[889,68742,68744],{"id":68743},"_332-事件委托","3.3.2 事件委托",[19,68746,68747],{},[3583,68748],{"alt":71,"src":68749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[66,68751,68753],{"className":52665,"code":68752,"language":52667,"meta":71,"style":71},"\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",[73,68754,68755,68765,68779,68783,68791,68805,68825,68837,68845,68849,68857,68865,68877,68889,68901,68913,68925,68938,68946,68954,68959,68978,68999,69004,69009,69014,69019,69028,69032,69042,69046,69051,69056,69070,69080,69084,69088,69096,69104,69108],{"__ignoreMap":71},[76,68756,68757,68759,68761,68763],{"class":78,"line":79},[76,68758,53329],{"class":90},[76,68760,53333],{"class":53332},[76,68762,53336],{"class":86},[76,68764,53339],{"class":90},[76,68766,68767,68769,68771,68773,68775,68777],{"class":78,"line":94},[76,68768,584],{"class":90},[76,68770,52667],{"class":53332},[76,68772,53348],{"class":86},[76,68774,370],{"class":90},[76,68776,53353],{"class":126},[76,68778,53339],{"class":90},[76,68780,68781],{"class":78,"line":133},[76,68782,149],{"emptyLinePlaceholder":148},[76,68784,68785,68787,68789],{"class":78,"line":145},[76,68786,584],{"class":90},[76,68788,53366],{"class":53332},[76,68790,53339],{"class":90},[76,68792,68793,68795,68797,68799,68801,68803],{"class":78,"line":152},[76,68794,54176],{"class":90},[76,68796,53376],{"class":53332},[76,68798,53379],{"class":86},[76,68800,370],{"class":90},[76,68802,53384],{"class":126},[76,68804,53339],{"class":90},[76,68806,68807,68809,68811,68813,68815,68817,68819,68821,68823],{"class":78,"line":157},[76,68808,54176],{"class":90},[76,68810,53376],{"class":53332},[76,68812,16972],{"class":86},[76,68814,370],{"class":90},[76,68816,53423],{"class":126},[76,68818,53403],{"class":86},[76,68820,370],{"class":90},[76,68822,53430],{"class":126},[76,68824,53339],{"class":90},[76,68826,68827,68829,68831,68833,68835],{"class":78,"line":246},[76,68828,54176],{"class":90},[76,68830,53439],{"class":53332},[76,68832,53442],{"class":90},[76,68834,53439],{"class":53332},[76,68836,53339],{"class":90},[76,68838,68839,68841,68843],{"class":78,"line":251},[76,68840,53817],{"class":90},[76,68842,53366],{"class":53332},[76,68844,53339],{"class":90},[76,68846,68847],{"class":78,"line":257},[76,68848,149],{"emptyLinePlaceholder":148},[76,68850,68851,68853,68855],{"class":78,"line":641},[76,68852,584],{"class":90},[76,68854,53832],{"class":53332},[76,68856,53339],{"class":90},[76,68858,68859,68861,68863],{"class":78,"line":646},[76,68860,54176],{"class":90},[76,68862,3261],{"class":53332},[76,68864,53339],{"class":90},[76,68866,68867,68869,68871,68873,68875],{"class":78,"line":659},[76,68868,53373],{"class":90},[76,68870,29],{"class":53332},[76,68872,55997],{"class":90},[76,68874,29],{"class":53332},[76,68876,53339],{"class":90},[76,68878,68879,68881,68883,68885,68887],{"class":78,"line":1608},[76,68880,53373],{"class":90},[76,68882,29],{"class":53332},[76,68884,56016],{"class":90},[76,68886,29],{"class":53332},[76,68888,53339],{"class":90},[76,68890,68891,68893,68895,68897,68899],{"class":78,"line":1632},[76,68892,53373],{"class":90},[76,68894,29],{"class":53332},[76,68896,56035],{"class":90},[76,68898,29],{"class":53332},[76,68900,53339],{"class":90},[76,68902,68903,68905,68907,68909,68911],{"class":78,"line":1637},[76,68904,53373],{"class":90},[76,68906,29],{"class":53332},[76,68908,56054],{"class":90},[76,68910,29],{"class":53332},[76,68912,53339],{"class":90},[76,68914,68915,68917,68919,68921,68923],{"class":78,"line":1642},[76,68916,53373],{"class":90},[76,68918,29],{"class":53332},[76,68920,56073],{"class":90},[76,68922,29],{"class":53332},[76,68924,53339],{"class":90},[76,68926,68927,68929,68931,68934,68936],{"class":78,"line":1652},[76,68928,53373],{"class":90},[76,68930,19],{"class":53332},[76,68932,68933],{"class":90},">我不需要变色\u003C\u002F",[76,68935,19],{"class":53332},[76,68937,53339],{"class":90},[76,68939,68940,68942,68944],{"class":78,"line":1660},[76,68941,54449],{"class":90},[76,68943,3261],{"class":53332},[76,68945,53339],{"class":90},[76,68947,68948,68950,68952],{"class":78,"line":1683},[76,68949,54176],{"class":90},[76,68951,53845],{"class":53332},[76,68953,53339],{"class":90},[76,68955,68956],{"class":78,"line":1698},[76,68957,68958],{"class":540},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[76,68960,68961,68963,68965,68967,68969,68971,68973,68976],{"class":78,"line":1711},[76,68962,13275],{"class":82},[76,68964,63320],{"class":119},[76,68966,15617],{"class":82},[76,68968,56427],{"class":90},[76,68970,56430],{"class":86},[76,68972,123],{"class":90},[76,68974,68975],{"class":126},"'ul'",[76,68977,130],{"class":90},[76,68979,68980,68983,68985,68987,68989,68991,68993,68995,68997],{"class":78,"line":1717},[76,68981,68982],{"class":90},"    ul.",[76,68984,59843],{"class":86},[76,68986,123],{"class":90},[76,68988,59848],{"class":126},[76,68990,405],{"class":90},[76,68992,56480],{"class":82},[76,68994,3770],{"class":90},[76,68996,2342],{"class":7296},[76,68998,14495],{"class":90},[76,69000,69001],{"class":78,"line":1728},[76,69002,69003],{"class":540},"      \u002F\u002F alert(1)\n",[76,69005,69006],{"class":78,"line":1740},[76,69007,69008],{"class":540},"      \u002F\u002F e.target就是我们点击的对象\n",[76,69010,69011],{"class":78,"line":1746},[76,69012,69013],{"class":540},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[76,69015,69016],{"class":78,"line":1751},[76,69017,69018],{"class":540},"      \u002F\u002F e.target.style.color = 'red'\n",[76,69020,69021,69023,69025],{"class":78,"line":1756},[76,69022,60274],{"class":90},[76,69024,60277],{"class":86},[76,69026,69027],{"class":90},"(e)\n",[76,69029,69030],{"class":78,"line":1766},[76,69031,149],{"emptyLinePlaceholder":148},[76,69033,69034,69036,69039],{"class":78,"line":1773},[76,69035,60274],{"class":90},[76,69037,69038],{"class":86},"dir",[76,69040,69041],{"class":90},"(e.target)\n",[76,69043,69044],{"class":78,"line":1793},[76,69045,149],{"emptyLinePlaceholder":148},[76,69047,69048],{"class":78,"line":1806},[76,69049,69050],{"class":540},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[76,69052,69053],{"class":78,"line":1817},[76,69054,69055],{"class":540},"      \u002F\u002F 通过tagName来进行判断\n",[76,69057,69058,69060,69063,69065,69068],{"class":78,"line":1822},[76,69059,56511],{"class":82},[76,69061,69062],{"class":90}," (e.target.tagName ",[76,69064,56517],{"class":82},[76,69066,69067],{"class":126}," 'LI'",[76,69069,14495],{"class":90},[76,69071,69072,69075,69077],{"class":78,"line":1835},[76,69073,69074],{"class":90},"        e.target.style.color ",[76,69076,370],{"class":82},[76,69078,69079],{"class":126}," 'red'\n",[76,69081,69082],{"class":78,"line":1847},[76,69083,54430],{"class":90},[76,69085,69086],{"class":78,"line":1852},[76,69087,35499],{"class":90},[76,69089,69090,69092,69094],{"class":78,"line":1862},[76,69091,54449],{"class":90},[76,69093,53845],{"class":53332},[76,69095,53339],{"class":90},[76,69097,69098,69100,69102],{"class":78,"line":1874},[76,69099,53817],{"class":90},[76,69101,53832],{"class":53332},[76,69103,53339],{"class":90},[76,69105,69106],{"class":78,"line":1879},[76,69107,149],{"emptyLinePlaceholder":148},[76,69109,69110,69112,69114],{"class":78,"line":1884},[76,69111,53817],{"class":90},[76,69113,52667],{"class":53332},[76,69115,53339],{"class":90},[19,69117,69118],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69120,69121],{},"if(e.target.ragName==='P') {}",[19,69123,69124],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69126,69127],{},"通过事件委托的方式实现tab栏切换改造：",[19,69129,69130],{},"一定要记住自定义属性！！！！！！",[19,69132,69133],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69135,69136],{},"id是自定义的属性名",[19,69138,69139],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[66,69141,69143],{"className":52665,"code":69142,"language":52667,"meta":71,"style":71},"\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",[73,69144,69145,69155,69169,69173,69181,69195,69215,69235,69247,69255,69261,69271,69281,69285,69289,69295,69307,69319,69331,69347,69351,69355,69361,69373,69385,69397,69407,69417,69421,69425,69433,69445,69455,69467,69471,69475,69483,69493,69503,69513,69517,69521,69531,69545,69557,69561,69565,69577,69587,69603,69613,69617,69621,69635,69645,69655,69659,69663,69669,69683,69687,69691,69699,69709,69713,69717,69726,69736,69740,69748,69756,69760,69768,69782,69796,69808,69816,69855,69887,69919,69951,69983,69991,69999,70013,70047,70081,70115,70149,70183,70191,70199,70207,70212,70217,70236,70241,70261,70269,70274,70287,70308,70321,70325,70330,70335,70348,70368,70396,70400,70404,70408,70416,70424,70428],{"__ignoreMap":71},[76,69146,69147,69149,69151,69153],{"class":78,"line":79},[76,69148,53329],{"class":90},[76,69150,53333],{"class":53332},[76,69152,53336],{"class":86},[76,69154,53339],{"class":90},[76,69156,69157,69159,69161,69163,69165,69167],{"class":78,"line":94},[76,69158,584],{"class":90},[76,69160,52667],{"class":53332},[76,69162,53348],{"class":86},[76,69164,370],{"class":90},[76,69166,53353],{"class":126},[76,69168,53339],{"class":90},[76,69170,69171],{"class":78,"line":133},[76,69172,149],{"emptyLinePlaceholder":148},[76,69174,69175,69177,69179],{"class":78,"line":145},[76,69176,584],{"class":90},[76,69178,53366],{"class":53332},[76,69180,53339],{"class":90},[76,69182,69183,69185,69187,69189,69191,69193],{"class":78,"line":152},[76,69184,54176],{"class":90},[76,69186,53376],{"class":53332},[76,69188,53379],{"class":86},[76,69190,370],{"class":90},[76,69192,53384],{"class":126},[76,69194,61156],{"class":90},[76,69196,69197,69199,69201,69203,69205,69207,69209,69211,69213],{"class":78,"line":157},[76,69198,54176],{"class":90},[76,69200,53376],{"class":53332},[76,69202,53395],{"class":86},[76,69204,370],{"class":90},[76,69206,53400],{"class":126},[76,69208,53403],{"class":86},[76,69210,370],{"class":90},[76,69212,53408],{"class":126},[76,69214,61156],{"class":90},[76,69216,69217,69219,69221,69223,69225,69227,69229,69231,69233],{"class":78,"line":246},[76,69218,54176],{"class":90},[76,69220,53376],{"class":53332},[76,69222,16972],{"class":86},[76,69224,370],{"class":90},[76,69226,53423],{"class":126},[76,69228,53403],{"class":86},[76,69230,370],{"class":90},[76,69232,53430],{"class":126},[76,69234,61156],{"class":90},[76,69236,69237,69239,69241,69243,69245],{"class":78,"line":251},[76,69238,54176],{"class":90},[76,69240,53439],{"class":53332},[76,69242,65653],{"class":90},[76,69244,53439],{"class":53332},[76,69246,53339],{"class":90},[76,69248,69249,69251,69253],{"class":78,"line":257},[76,69250,54176],{"class":90},[76,69252,2178],{"class":53332},[76,69254,53339],{"class":90},[76,69256,69257,69259],{"class":78,"line":641},[76,69258,8482],{"class":53332},[76,69260,17623],{"class":90},[76,69262,69263,69265,69267,69269],{"class":78,"line":646},[76,69264,56737],{"class":119},[76,69266,53469],{"class":90},[76,69268,1294],{"class":119},[76,69270,3415],{"class":90},[76,69272,69273,69275,69277,69279],{"class":78,"line":659},[76,69274,56726],{"class":119},[76,69276,53469],{"class":90},[76,69278,1294],{"class":119},[76,69280,3415],{"class":90},[76,69282,69283],{"class":78,"line":1608},[76,69284,4283],{"class":90},[76,69286,69287],{"class":78,"line":1632},[76,69288,149],{"emptyLinePlaceholder":148},[76,69290,69291,69293],{"class":78,"line":1637},[76,69292,65704],{"class":86},[76,69294,17623],{"class":90},[76,69296,69297,69299,69301,69303,69305],{"class":78,"line":1642},[76,69298,56802],{"class":119},[76,69300,53469],{"class":90},[76,69302,65715],{"class":119},[76,69304,53524],{"class":82},[76,69306,3415],{"class":90},[76,69308,69309,69311,69313,69315,69317],{"class":78,"line":1652},[76,69310,56816],{"class":119},[76,69312,53469],{"class":90},[76,69314,65728],{"class":119},[76,69316,53524],{"class":82},[76,69318,3415],{"class":90},[76,69320,69321,69323,69325,69327,69329],{"class":78,"line":1660},[76,69322,56737],{"class":119},[76,69324,53469],{"class":90},[76,69326,408],{"class":119},[76,69328,53524],{"class":82},[76,69330,3415],{"class":90},[76,69332,69333,69335,69337,69339,69341,69343,69345],{"class":78,"line":1683},[76,69334,64005],{"class":119},[76,69336,53469],{"class":90},[76,69338,669],{"class":119},[76,69340,53524],{"class":82},[76,69342,53553],{"class":119},[76,69344,64272],{"class":119},[76,69346,3415],{"class":90},[76,69348,69349],{"class":78,"line":1698},[76,69350,4283],{"class":90},[76,69352,69353],{"class":78,"line":1711},[76,69354,149],{"emptyLinePlaceholder":148},[76,69356,69357,69359],{"class":78,"line":1717},[76,69358,65773],{"class":86},[76,69360,17623],{"class":90},[76,69362,69363,69365,69367,69369,69371],{"class":78,"line":1728},[76,69364,56802],{"class":119},[76,69366,53469],{"class":90},[76,69368,2575],{"class":119},[76,69370,2592],{"class":82},[76,69372,3415],{"class":90},[76,69374,69375,69377,69379,69381,69383],{"class":78,"line":1740},[76,69376,56816],{"class":119},[76,69378,53469],{"class":90},[76,69380,3164],{"class":119},[76,69382,53524],{"class":82},[76,69384,3415],{"class":90},[76,69386,69387,69389,69391,69393,69395],{"class":78,"line":1746},[76,69388,59389],{"class":119},[76,69390,53469],{"class":90},[76,69392,3164],{"class":119},[76,69394,53524],{"class":82},[76,69396,3415],{"class":90},[76,69398,69399,69401,69403,69405],{"class":78,"line":1751},[76,69400,57040],{"class":119},[76,69402,53469],{"class":90},[76,69404,53509],{"class":119},[76,69406,3415],{"class":90},[76,69408,69409,69411,69413,69415],{"class":78,"line":1756},[76,69410,57051],{"class":119},[76,69412,53469],{"class":90},[76,69414,53700],{"class":119},[76,69416,3415],{"class":90},[76,69418,69419],{"class":78,"line":1766},[76,69420,4283],{"class":90},[76,69422,69423],{"class":78,"line":1773},[76,69424,149],{"emptyLinePlaceholder":148},[76,69426,69427,69429,69431],{"class":78,"line":1793},[76,69428,65773],{"class":86},[76,69430,65846],{"class":53332},[76,69432,17623],{"class":90},[76,69434,69435,69437,69439,69441,69443],{"class":78,"line":1806},[76,69436,56953],{"class":119},[76,69438,53469],{"class":90},[76,69440,3058],{"class":119},[76,69442,53524],{"class":82},[76,69444,3415],{"class":90},[76,69446,69447,69449,69451,69453],{"class":78,"line":1817},[76,69448,64362],{"class":119},[76,69450,53469],{"class":90},[76,69452,65869],{"class":119},[76,69454,3415],{"class":90},[76,69456,69457,69459,69461,69463,69465],{"class":78,"line":1822},[76,69458,64028],{"class":119},[76,69460,53469],{"class":90},[76,69462,408],{"class":119},[76,69464,53524],{"class":82},[76,69466,3415],{"class":90},[76,69468,69469],{"class":78,"line":1835},[76,69470,4283],{"class":90},[76,69472,69473],{"class":78,"line":1847},[76,69474,149],{"emptyLinePlaceholder":148},[76,69476,69477,69479,69481],{"class":78,"line":1852},[76,69478,65773],{"class":86},[76,69480,63320],{"class":53332},[76,69482,17623],{"class":90},[76,69484,69485,69487,69489,69491],{"class":78,"line":1862},[76,69486,56763],{"class":119},[76,69488,53469],{"class":90},[76,69490,56768],{"class":119},[76,69492,3415],{"class":90},[76,69494,69495,69497,69499,69501],{"class":78,"line":1874},[76,69496,57040],{"class":119},[76,69498,53469],{"class":90},[76,69500,53509],{"class":119},[76,69502,3415],{"class":90},[76,69504,69505,69507,69509,69511],{"class":78,"line":1879},[76,69506,57051],{"class":119},[76,69508,53469],{"class":90},[76,69510,53612],{"class":119},[76,69512,3415],{"class":90},[76,69514,69515],{"class":78,"line":1884},[76,69516,4283],{"class":90},[76,69518,69519],{"class":78,"line":1889},[76,69520,149],{"emptyLinePlaceholder":148},[76,69522,69523,69525,69527,69529],{"class":78,"line":1900},[76,69524,65773],{"class":86},[76,69526,63320],{"class":53332},[76,69528,57106],{"class":53332},[76,69530,17623],{"class":90},[76,69532,69533,69535,69537,69539,69541,69543],{"class":78,"line":1906},[76,69534,56737],{"class":119},[76,69536,53469],{"class":90},[76,69538,1294],{"class":119},[76,69540,11018],{"class":119},[76,69542,53524],{"class":82},[76,69544,3415],{"class":90},[76,69546,69547,69549,69551,69553,69555],{"class":78,"line":1924},[76,69548,56953],{"class":119},[76,69550,53469],{"class":90},[76,69552,2810],{"class":119},[76,69554,53524],{"class":82},[76,69556,3415],{"class":90},[76,69558,69559],{"class":78,"line":1929},[76,69560,4283],{"class":90},[76,69562,69563],{"class":78,"line":1944},[76,69564,149],{"emptyLinePlaceholder":148},[76,69566,69567,69569,69571,69573,69575],{"class":78,"line":1950},[76,69568,65773],{"class":86},[76,69570,63320],{"class":53332},[76,69572,57106],{"class":53332},[76,69574,3519],{"class":53332},[76,69576,17623],{"class":90},[76,69578,69579,69581,69583,69585],{"class":78,"line":1965},[76,69580,65998],{"class":119},[76,69582,53469],{"class":90},[76,69584,56768],{"class":119},[76,69586,3415],{"class":90},[76,69588,69589,69591,69593,69595,69597,69599,69601],{"class":78,"line":1971},[76,69590,64260],{"class":119},[76,69592,53469],{"class":90},[76,69594,2345],{"class":119},[76,69596,53524],{"class":82},[76,69598,53553],{"class":119},[76,69600,66019],{"class":119},[76,69602,3415],{"class":90},[76,69604,69605,69607,69609,69611],{"class":78,"line":1985},[76,69606,59446],{"class":119},[76,69608,53469],{"class":90},[76,69610,64397],{"class":119},[76,69612,3415],{"class":90},[76,69614,69615],{"class":78,"line":1991},[76,69616,4283],{"class":90},[76,69618,69619],{"class":78,"line":2005},[76,69620,149],{"emptyLinePlaceholder":148},[76,69622,69623,69625,69627,69629,69631,69633],{"class":78,"line":2017},[76,69624,65773],{"class":86},[76,69626,63320],{"class":53332},[76,69628,57106],{"class":53332},[76,69630,3519],{"class":53332},[76,69632,66052],{"class":86},[76,69634,17623],{"class":90},[76,69636,69637,69639,69641,69643],{"class":78,"line":2023},[76,69638,63819],{"class":119},[76,69640,53469],{"class":90},[76,69642,66063],{"class":119},[76,69644,3415],{"class":90},[76,69646,69647,69649,69651,69653],{"class":78,"line":2031},[76,69648,59446],{"class":119},[76,69650,53469],{"class":90},[76,69652,66063],{"class":119},[76,69654,3415],{"class":90},[76,69656,69657],{"class":78,"line":11880},[76,69658,4283],{"class":90},[76,69660,69661],{"class":78,"line":11901},[76,69662,149],{"emptyLinePlaceholder":148},[76,69664,69665,69667],{"class":78,"line":11907},[76,69666,66088],{"class":86},[76,69668,17623],{"class":90},[76,69670,69671,69673,69675,69677,69679,69681],{"class":78,"line":11921},[76,69672,56726],{"class":119},[76,69674,53469],{"class":90},[76,69676,1294],{"class":119},[76,69678,66101],{"class":119},[76,69680,53524],{"class":82},[76,69682,3415],{"class":90},[76,69684,69685],{"class":78,"line":11927},[76,69686,4283],{"class":90},[76,69688,69689],{"class":78,"line":11954},[76,69690,149],{"emptyLinePlaceholder":148},[76,69692,69693,69695,69697],{"class":78,"line":11963},[76,69694,66088],{"class":86},[76,69696,64202],{"class":86},[76,69698,17623],{"class":90},[76,69700,69701,69703,69705,69707],{"class":78,"line":11969},[76,69702,57040],{"class":119},[76,69704,53469],{"class":90},[76,69706,56768],{"class":119},[76,69708,3415],{"class":90},[76,69710,69711],{"class":78,"line":11977},[76,69712,4283],{"class":90},[76,69714,69715],{"class":78,"line":11982},[76,69716,149],{"emptyLinePlaceholder":148},[76,69718,69719,69721,69724],{"class":78,"line":18654},[76,69720,66088],{"class":86},[76,69722,69723],{"class":86}," .active",[76,69725,17623],{"class":90},[76,69727,69728,69730,69732,69734],{"class":78,"line":18660},[76,69729,57040],{"class":119},[76,69731,53469],{"class":90},[76,69733,62897],{"class":119},[76,69735,3415],{"class":90},[76,69737,69738],{"class":78,"line":18683},[76,69739,4283],{"class":90},[76,69741,69742,69744,69746],{"class":78,"line":18689},[76,69743,54449],{"class":90},[76,69745,2178],{"class":53332},[76,69747,53339],{"class":90},[76,69749,69750,69752,69754],{"class":78,"line":18712},[76,69751,53817],{"class":90},[76,69753,53366],{"class":53332},[76,69755,53339],{"class":90},[76,69757,69758],{"class":78,"line":18726},[76,69759,149],{"emptyLinePlaceholder":148},[76,69761,69762,69764,69766],{"class":78,"line":18746},[76,69763,584],{"class":90},[76,69765,53832],{"class":53332},[76,69767,53339],{"class":90},[76,69769,69770,69772,69774,69776,69778,69780],{"class":78,"line":18752},[76,69771,54176],{"class":90},[76,69773,53643],{"class":53332},[76,69775,55518],{"class":86},[76,69777,370],{"class":90},[76,69779,66203],{"class":126},[76,69781,53339],{"class":90},[76,69783,69784,69786,69788,69790,69792,69794],{"class":78,"line":18763},[76,69785,53373],{"class":90},[76,69787,53643],{"class":53332},[76,69789,55518],{"class":86},[76,69791,370],{"class":90},[76,69793,66218],{"class":126},[76,69795,53339],{"class":90},[76,69797,69798,69800,69802,69804,69806],{"class":78,"line":18786},[76,69799,57265],{"class":90},[76,69801,889],{"class":53332},[76,69803,66229],{"class":90},[76,69805,889],{"class":53332},[76,69807,53339],{"class":90},[76,69809,69810,69812,69814],{"class":78,"line":18808},[76,69811,57265],{"class":90},[76,69813,3261],{"class":53332},[76,69815,53339],{"class":90},[76,69817,69818,69820,69822,69824,69826,69828,69830,69832,69834,69836,69838,69840,69842,69845,69847,69849,69851,69853],{"class":78,"line":18813},[76,69819,57333],{"class":90},[76,69821,29],{"class":53332},[76,69823,63080],{"class":90},[76,69825,2503],{"class":53332},[76,69827,55518],{"class":86},[76,69829,370],{"class":90},[76,69831,61735],{"class":126},[76,69833,63085],{"class":86},[76,69835,370],{"class":90},[76,69837,66264],{"class":126},[76,69839,55982],{"class":86},[76,69841,370],{"class":90},[76,69843,69844],{"class":126},"\"0\"",[76,69846,66267],{"class":90},[76,69848,2503],{"class":53332},[76,69850,57345],{"class":90},[76,69852,29],{"class":53332},[76,69854,53339],{"class":90},[76,69856,69857,69859,69861,69863,69865,69867,69869,69871,69873,69875,69877,69879,69881,69883,69885],{"class":78,"line":18819},[76,69858,57333],{"class":90},[76,69860,29],{"class":53332},[76,69862,63080],{"class":90},[76,69864,2503],{"class":53332},[76,69866,63085],{"class":86},[76,69868,370],{"class":90},[76,69870,66264],{"class":126},[76,69872,55982],{"class":86},[76,69874,370],{"class":90},[76,69876,5763],{"class":126},[76,69878,66294],{"class":90},[76,69880,2503],{"class":53332},[76,69882,57345],{"class":90},[76,69884,29],{"class":53332},[76,69886,53339],{"class":90},[76,69888,69889,69891,69893,69895,69897,69899,69901,69903,69905,69907,69909,69911,69913,69915,69917],{"class":78,"line":18833},[76,69890,57333],{"class":90},[76,69892,29],{"class":53332},[76,69894,63080],{"class":90},[76,69896,2503],{"class":53332},[76,69898,63085],{"class":86},[76,69900,370],{"class":90},[76,69902,66264],{"class":126},[76,69904,55982],{"class":86},[76,69906,370],{"class":90},[76,69908,5786],{"class":126},[76,69910,66321],{"class":90},[76,69912,2503],{"class":53332},[76,69914,57345],{"class":90},[76,69916,29],{"class":53332},[76,69918,53339],{"class":90},[76,69920,69921,69923,69925,69927,69929,69931,69933,69935,69937,69939,69941,69943,69945,69947,69949],{"class":78,"line":18846},[76,69922,57333],{"class":90},[76,69924,29],{"class":53332},[76,69926,63080],{"class":90},[76,69928,2503],{"class":53332},[76,69930,63085],{"class":86},[76,69932,370],{"class":90},[76,69934,66264],{"class":126},[76,69936,55982],{"class":86},[76,69938,370],{"class":90},[76,69940,5799],{"class":126},[76,69942,66348],{"class":90},[76,69944,2503],{"class":53332},[76,69946,57345],{"class":90},[76,69948,29],{"class":53332},[76,69950,53339],{"class":90},[76,69952,69953,69955,69957,69959,69961,69963,69965,69967,69969,69971,69973,69975,69977,69979,69981],{"class":78,"line":18851},[76,69954,57333],{"class":90},[76,69956,29],{"class":53332},[76,69958,63080],{"class":90},[76,69960,2503],{"class":53332},[76,69962,63085],{"class":86},[76,69964,370],{"class":90},[76,69966,66264],{"class":126},[76,69968,55982],{"class":86},[76,69970,370],{"class":90},[76,69972,5812],{"class":126},[76,69974,66375],{"class":90},[76,69976,2503],{"class":53332},[76,69978,57345],{"class":90},[76,69980,29],{"class":53332},[76,69982,53339],{"class":90},[76,69984,69985,69987,69989],{"class":78,"line":18865},[76,69986,57438],{"class":90},[76,69988,3261],{"class":53332},[76,69990,53339],{"class":90},[76,69992,69993,69995,69997],{"class":78,"line":18870},[76,69994,53808],{"class":90},[76,69996,53643],{"class":53332},[76,69998,53339],{"class":90},[76,70000,70001,70003,70005,70007,70009,70011],{"class":78,"line":18876},[76,70002,53373],{"class":90},[76,70004,53643],{"class":53332},[76,70006,55518],{"class":86},[76,70008,370],{"class":90},[76,70010,66412],{"class":126},[76,70012,53339],{"class":90},[76,70014,70015,70017,70019,70021,70023,70025,70027,70029,70031,70033,70035,70037,70039,70041,70043,70045],{"class":78,"line":18881},[76,70016,57265],{"class":90},[76,70018,53643],{"class":53332},[76,70020,55518],{"class":86},[76,70022,370],{"class":90},[76,70024,66427],{"class":126},[76,70026,63080],{"class":90},[76,70028,3583],{"class":53332},[76,70030,57270],{"class":86},[76,70032,370],{"class":90},[76,70034,66438],{"class":126},[76,70036,57278],{"class":86},[76,70038,370],{"class":90},[76,70040,9730],{"class":126},[76,70042,66447],{"class":90},[76,70044,53643],{"class":53332},[76,70046,53339],{"class":90},[76,70048,70049,70051,70053,70055,70057,70059,70061,70063,70065,70067,70069,70071,70073,70075,70077,70079],{"class":78,"line":18895},[76,70050,57265],{"class":90},[76,70052,53643],{"class":53332},[76,70054,55518],{"class":86},[76,70056,370],{"class":90},[76,70058,64651],{"class":126},[76,70060,63080],{"class":90},[76,70062,3583],{"class":53332},[76,70064,57270],{"class":86},[76,70066,370],{"class":90},[76,70068,66474],{"class":126},[76,70070,57278],{"class":86},[76,70072,370],{"class":90},[76,70074,9730],{"class":126},[76,70076,66447],{"class":90},[76,70078,53643],{"class":53332},[76,70080,53339],{"class":90},[76,70082,70083,70085,70087,70089,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113],{"class":78,"line":18900},[76,70084,57265],{"class":90},[76,70086,53643],{"class":53332},[76,70088,55518],{"class":86},[76,70090,370],{"class":90},[76,70092,64651],{"class":126},[76,70094,63080],{"class":90},[76,70096,3583],{"class":53332},[76,70098,57270],{"class":86},[76,70100,370],{"class":90},[76,70102,66509],{"class":126},[76,70104,57278],{"class":86},[76,70106,370],{"class":90},[76,70108,9730],{"class":126},[76,70110,66447],{"class":90},[76,70112,53643],{"class":53332},[76,70114,53339],{"class":90},[76,70116,70117,70119,70121,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145,70147],{"class":78,"line":18905},[76,70118,57265],{"class":90},[76,70120,53643],{"class":53332},[76,70122,55518],{"class":86},[76,70124,370],{"class":90},[76,70126,64651],{"class":126},[76,70128,63080],{"class":90},[76,70130,3583],{"class":53332},[76,70132,57270],{"class":86},[76,70134,370],{"class":90},[76,70136,66544],{"class":126},[76,70138,57278],{"class":86},[76,70140,370],{"class":90},[76,70142,9730],{"class":126},[76,70144,66447],{"class":90},[76,70146,53643],{"class":53332},[76,70148,53339],{"class":90},[76,70150,70151,70153,70155,70157,70159,70161,70163,70165,70167,70169,70171,70173,70175,70177,70179,70181],{"class":78,"line":18919},[76,70152,57265],{"class":90},[76,70154,53643],{"class":53332},[76,70156,55518],{"class":86},[76,70158,370],{"class":90},[76,70160,64651],{"class":126},[76,70162,63080],{"class":90},[76,70164,3583],{"class":53332},[76,70166,57270],{"class":86},[76,70168,370],{"class":90},[76,70170,66579],{"class":126},[76,70172,57278],{"class":86},[76,70174,370],{"class":90},[76,70176,9730],{"class":126},[76,70178,66447],{"class":90},[76,70180,53643],{"class":53332},[76,70182,53339],{"class":90},[76,70184,70185,70187,70189],{"class":78,"line":18931},[76,70186,53808],{"class":90},[76,70188,53643],{"class":53332},[76,70190,53339],{"class":90},[76,70192,70193,70195,70197],{"class":78,"line":18936},[76,70194,54449],{"class":90},[76,70196,53643],{"class":53332},[76,70198,53339],{"class":90},[76,70200,70201,70203,70205],{"class":78,"line":18949},[76,70202,54176],{"class":90},[76,70204,53845],{"class":53332},[76,70206,53339],{"class":90},[76,70208,70209],{"class":78,"line":18954},[76,70210,70211],{"class":540},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[76,70213,70214],{"class":78,"line":18959},[76,70215,70216],{"class":540},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[76,70218,70219,70221,70223,70225,70227,70229,70231,70234],{"class":78,"line":18964},[76,70220,13275],{"class":82},[76,70222,63320],{"class":119},[76,70224,15617],{"class":82},[76,70226,56427],{"class":90},[76,70228,56430],{"class":86},[76,70230,123],{"class":90},[76,70232,70233],{"class":126},"'.tab-nav ul'",[76,70235,130],{"class":90},[76,70237,70238],{"class":78,"line":18977},[76,70239,70240],{"class":540},"    \u002F\u002F 2.添加事件\n",[76,70242,70243,70245,70247,70249,70251,70253,70255,70257,70259],{"class":78,"line":18982},[76,70244,68982],{"class":90},[76,70246,59843],{"class":86},[76,70248,123],{"class":90},[76,70250,59848],{"class":126},[76,70252,405],{"class":90},[76,70254,56480],{"class":82},[76,70256,3770],{"class":90},[76,70258,2342],{"class":7296},[76,70260,14495],{"class":90},[76,70262,70263,70265,70267],{"class":78,"line":34671},[76,70264,60274],{"class":90},[76,70266,69038],{"class":86},[76,70268,69041],{"class":90},[76,70270,70271],{"class":78,"line":34677},[76,70272,70273],{"class":540},"      \u002F\u002Fe.targer是我们点击的对象\n",[76,70275,70276,70278,70280,70282,70285],{"class":78,"line":34683},[76,70277,56511],{"class":82},[76,70279,69062],{"class":90},[76,70281,56517],{"class":82},[76,70283,70284],{"class":126}," 'A'",[76,70286,14495],{"class":90},[76,70288,70289,70291,70293,70295,70298,70300,70302,70304,70306],{"class":78,"line":34689},[76,70290,53957],{"class":90},[76,70292,56430],{"class":86},[76,70294,123],{"class":90},[76,70296,70297],{"class":126},"'.active'",[76,70299,59033],{"class":90},[76,70301,59036],{"class":86},[76,70303,123],{"class":90},[76,70305,66742],{"class":126},[76,70307,130],{"class":90},[76,70309,70310,70313,70315,70317,70319],{"class":78,"line":34695},[76,70311,70312],{"class":90},"        e.target.classList.",[76,70314,7414],{"class":86},[76,70316,123],{"class":90},[76,70318,66742],{"class":126},[76,70320,130],{"class":90},[76,70322,70323],{"class":78,"line":34706},[76,70324,149],{"emptyLinePlaceholder":148},[76,70326,70327],{"class":78,"line":34712},[76,70328,70329],{"class":540},"        \u002F\u002F 下面大盒子模块\n",[76,70331,70332],{"class":78,"line":34732},[76,70333,70334],{"class":540},"        \u002F\u002F console.log(e.target.dataset.id)\n",[76,70336,70337,70339,70341,70343,70345],{"class":78,"line":34738},[76,70338,63298],{"class":82},[76,70340,5119],{"class":119},[76,70342,15617],{"class":82},[76,70344,47601],{"class":82},[76,70346,70347],{"class":90},"e.target.dataset.id\n",[76,70349,70350,70352,70354,70356,70358,70360,70362,70364,70366],{"class":78,"line":34749},[76,70351,53957],{"class":90},[76,70353,56430],{"class":86},[76,70355,123],{"class":90},[76,70357,66790],{"class":126},[76,70359,59033],{"class":90},[76,70361,59036],{"class":86},[76,70363,123],{"class":90},[76,70365,66742],{"class":126},[76,70367,130],{"class":90},[76,70369,70370,70372,70374,70376,70378,70380,70382,70384,70386,70388,70390,70392,70394],{"class":78,"line":34755},[76,70371,53957],{"class":90},[76,70373,56430],{"class":86},[76,70375,123],{"class":90},[76,70377,66816],{"class":126},[76,70379,2705],{"class":90},[76,70381,47601],{"class":82},[76,70383,27168],{"class":119},[76,70385,59062],{"class":126},[76,70387,59033],{"class":90},[76,70389,7414],{"class":86},[76,70391,123],{"class":90},[76,70393,66742],{"class":126},[76,70395,130],{"class":90},[76,70397,70398],{"class":78,"line":34761},[76,70399,149],{"emptyLinePlaceholder":148},[76,70401,70402],{"class":78,"line":34767},[76,70403,54430],{"class":90},[76,70405,70406],{"class":78,"line":34773},[76,70407,35499],{"class":90},[76,70409,70410,70412,70414],{"class":78,"line":34779},[76,70411,54449],{"class":90},[76,70413,53845],{"class":53332},[76,70415,53339],{"class":90},[76,70417,70418,70420,70422],{"class":78,"line":34785},[76,70419,53817],{"class":90},[76,70421,53832],{"class":53332},[76,70423,53339],{"class":90},[76,70425,70426],{"class":78,"line":34791},[76,70427,149],{"emptyLinePlaceholder":148},[76,70429,70430,70432,70434],{"class":78,"line":34811},[76,70431,53817],{"class":90},[76,70433,52667],{"class":53332},[76,70435,53339],{"class":90},[889,70437,70439],{"id":70438},"_333-页面加载事件","3.3.3 页面加载事件",[26,70441,70442],{},[29,70443,70444],{},"load",[19,70446,70447],{},[3583,70448],{"alt":71,"src":70449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70451,70452],{},"window代表整个窗口，比document还要大",[19,70454,70455],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70457,70458],{},"img.addEventListener('load', function () {",[19,70460,70461],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70463,54496],{},[26,70465,70466],{"start":94},[29,70467,70468],{},"DOMContentLoaded",[19,70470,70471],{},[3583,70472],{"alt":71,"src":70473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70475,70476],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[889,70478,70480],{"id":70479},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70482,70483],{},[3583,70484],{"alt":71,"src":70485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70487,70488],{},[3583,70489],{"alt":71,"src":70490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70492,70493],{},[3583,70494],{"alt":71,"src":70495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70497,70498],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70500,70501],{},"获得的是数字型数据，不带单位",[19,70503,70504],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70506,70507],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70509,70510],{},"它是通过document.documentElement来获取",[19,70512,70513],{},[3583,70514],{"alt":71,"src":70515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70517,70518],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[889,70520,70522],{"id":70521},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70524,70525],{},[3583,70526],{"alt":71,"src":70527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70529,70530],{},[3583,70531],{"alt":71,"src":70532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[889,70534,70536],{"id":70535},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70538,70539],{},[3583,70540],{"alt":71,"src":70541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70543,70544],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70546,70547],{},[3583,70548],{"alt":71,"src":70549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70551,70552],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70554,70555],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70557,70558],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70560,70561],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70563,70564],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70566,70567],{},[3583,70568],{"alt":71,"src":70569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70571,70572],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70574,70575],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70577,70578],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70580,70581],{},"e.pageX-box.getBoundingClientRect()",[889,70583,70585],{"id":70584},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70587,70588],{},[3583,70589],{"alt":71,"src":70590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70592,70593],{},"这个是相对于视口来说的，它是个方法，不是属性值",[889,70595,70597],{"id":70596},"_338-总结","3.3.8 总结",[19,70599,70600],{},[3583,70601],{"alt":71,"src":70602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70604,70605],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70607,70608],{},"修改盒子的宽高只能通过width和height来实现",[889,70610,70612],{"id":70611},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[66,70614,70616],{"className":52665,"code":70615,"language":52667,"meta":71,"style":71},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[73,70617,70618,70623,70628,70633,70638],{"__ignoreMap":71},[76,70619,70620],{"class":78,"line":79},[76,70621,70622],{"class":90},"\u002F* 页面滑动 *\u002F\n",[76,70624,70625],{"class":78,"line":94},[76,70626,70627],{"class":90},"html {\n",[76,70629,70630],{"class":78,"line":133},[76,70631,70632],{"class":90},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[76,70634,70635],{"class":78,"line":145},[76,70636,70637],{"class":90},"  scroll-behavior: smooth;\n",[76,70639,70640],{"class":78,"line":152},[76,70641,3685],{"class":90},[19,70643,70644],{},"默认是auto",[889,70646,70648],{"id":70647},"_3310-日期对象","3.3.10 日期对象",[24047,70650,70652],{"id":70651},"_33101-实例化","3.3.10.1 实例化",[19,70654,70655],{},[3583,70656],{"alt":71,"src":70657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24047,70659,70661],{"id":70660},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70663,70664],{},[3583,70665],{"alt":71,"src":70666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70668,70669],{},"月份+1",[19,70671,70672],{},"老外认为第一天为0，星期天",[19,70674,70675],{},"方法使用的时候必须要跟括号",[19,70677,70678],{},"快速获得日期",[19,70680,70681],{},"\u002F\u002F 得到年月日",[19,70683,70684],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70686,70687],{},"\u002F\u002F 得到当地日期",[19,70689,70690],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70692,70693],{},"\u002F\u002F 得到当地时间",[19,70695,70696],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70698,70699],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70701,70702],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53845,70704,70705],{},"\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,70707,70708],{},"学会去封装函数！",[24047,70710,70712],{"id":70711},"_33103-时间戳","3.3.10.3 时间戳",[19,70714,70715],{},[3583,70716],{"alt":71,"src":70717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70719,70720],{},[3583,70721],{"alt":71,"src":70722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70724,70725],{},"三种方法记住一个就可以",[889,70727,70729],{"id":70728},"_3311-节点操作","3.3.11 节点操作",[24047,70731,70733],{"id":70732},"_33111-dom节点","3.3.11.1 DOM节点",[19,70735,70736],{},[3583,70737],{"alt":71,"src":70738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70740,70741],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24047,70743,70745],{"id":70744},"_33112-查找节点","3.3.11.2 查找节点",[19,70747,70748],{},"前边的document.querySelector()是获取的元素",[19,70750,70751],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70753,70754],{},[3583,70755],{"alt":71,"src":70756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70758,70759],{},[29,70760,70761],{},"父节点",[19,70763,70764],{},[3583,70765],{"alt":71,"src":70766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70768,70769],{"start":94},[29,70770,70771],{},"子节点",[19,70773,70774],{},[3583,70775],{"alt":71,"src":70776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70778,70779],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70781,70782],{},"children获得的是伪数组，是亲儿子",[26,70784,70785],{"start":133},[29,70786,70787],{},"兄弟节点",[19,70789,70790],{},[3583,70791],{"alt":71,"src":70792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24047,70794,70796],{"id":70795},"_33113-增加节点","3.3.11.3 增加节点",[19,70798,70799],{},[3583,70800],{"alt":71,"src":70801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70803,70804],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70806,70807],{},[3583,70808],{"alt":71,"src":70809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70811,70812],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70814,70815],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70817,70818],{},"例：",[53845,70820,70821],{},"\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,70823,70824],{},[3583,70825],{"alt":71,"src":70826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70828,70829],{},"false只克隆标签，里边的内容不会克隆过来",[66,70831,70833],{"className":52665,"code":70832,"language":52667,"meta":71,"style":71},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[73,70834,70835],{"__ignoreMap":71},[76,70836,70837],{"class":78,"line":79},[76,70838,70832],{"class":90},[24047,70840,70842],{"id":70841},"_33114-删除节点","3.3.11.4 删除节点",[19,70844,70845],{},[3583,70846],{"alt":71,"src":70847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70849,70850],{},"父亲删儿子",[19,70852,70853],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[889,70855,70857],{"id":70856},"_3312-m端事件","3.3.12 M端事件",[19,70859,70860],{},"M端就是移动端",[19,70862,70863],{},[3583,70864],{"alt":71,"src":70865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[889,70867,70869],{"id":70868},"_3313-插件","3.3.13 插件",[19,70871,70872],{},"要熟悉官网！！！",[19,70874,70875],{},[2503,70876,70877],{"href":70877,"rel":70878},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25914],[19,70880,70881],{},[2503,70882,70883],{"href":70883,"rel":70884},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25914],[889,70886,70888],{"id":70887},"_3314-学生信息表","3.3.14 学生信息表",[26,70890,70891,70894,70897,70900,70903,70906,70909,70912],{},[29,70892,70893],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70895,70896],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70898,70899],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70901,70902],{},"用好表单元素自带的属性，value,name等",[29,70904,70905],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70907,70908],{},"不要忘记事件对象",[29,70910,70911],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70913,70914],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70916,70917],{},"结构：",[66,70919,70921],{"className":52665,"code":70920,"language":52667,"meta":71,"style":71},"\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",[73,70922,70923,70933,70947,70951,70959,70973,70993,71014,71027,71051,71059,71063,71071,71084,71105,71133,71161,71166,71188,71208,71227,71235,71263,71285,71305,71325,71345,71365,71385,71393,71413,71421,71425,71438,71446,71454,71462,71475,71488,71501,71514,71527,71540,71553,71561,71569,71577,71582,71587,71592,71597,71602,71607,71612,71617,71622,71627,71632,71637,71642,71650,71658,71666,71670,71690,71709,71729,71749,71769,71789,71793,71798,71818,71823,71833,71838,71843,71863,71885,71890,71900,71904,71908,71913,71918,71947,71961,71976,71980,71984,71988,71993,72004,72017,72022,72027,72032,72037,72042,72046,72051,72056,72065,72070,72075,72087,72092,72099,72103,72108,72118,72123,72133,72138,72166,72187,72197,72217,72235,72251,72268,72285,72302,72306,72316,72321,72326,72331,72342,72346,72350,72354,72359,72364,72385,72397,72402,72407,72412,72426,72431,72438,72442,72446,72454,72458,72466,72470],{"__ignoreMap":71},[76,70924,70925,70927,70929,70931],{"class":78,"line":79},[76,70926,53329],{"class":90},[76,70928,53333],{"class":53332},[76,70930,53336],{"class":86},[76,70932,53339],{"class":90},[76,70934,70935,70937,70939,70941,70943,70945],{"class":78,"line":94},[76,70936,584],{"class":90},[76,70938,52667],{"class":53332},[76,70940,53348],{"class":86},[76,70942,370],{"class":90},[76,70944,53353],{"class":126},[76,70946,53339],{"class":90},[76,70948,70949],{"class":78,"line":133},[76,70950,149],{"emptyLinePlaceholder":148},[76,70952,70953,70955,70957],{"class":78,"line":145},[76,70954,584],{"class":90},[76,70956,53366],{"class":53332},[76,70958,53339],{"class":90},[76,70960,70961,70963,70965,70967,70969,70971],{"class":78,"line":152},[76,70962,54176],{"class":90},[76,70964,53376],{"class":53332},[76,70966,53379],{"class":86},[76,70968,370],{"class":90},[76,70970,53384],{"class":126},[76,70972,61156],{"class":90},[76,70974,70975,70977,70979,70981,70983,70985,70987,70989,70991],{"class":78,"line":157},[76,70976,54176],{"class":90},[76,70978,53376],{"class":53332},[76,70980,16972],{"class":86},[76,70982,370],{"class":90},[76,70984,53423],{"class":126},[76,70986,53403],{"class":86},[76,70988,370],{"class":90},[76,70990,53430],{"class":126},[76,70992,61156],{"class":90},[76,70994,70995,70997,70999,71001,71003,71005,71007,71009,71012],{"class":78,"line":246},[76,70996,54176],{"class":90},[76,70998,53376],{"class":53332},[76,71000,53395],{"class":86},[76,71002,370],{"class":90},[76,71004,53400],{"class":126},[76,71006,53403],{"class":86},[76,71008,370],{"class":90},[76,71010,71011],{"class":126},"\"ie=edge\"",[76,71013,61156],{"class":90},[76,71015,71016,71018,71020,71023,71025],{"class":78,"line":251},[76,71017,54176],{"class":90},[76,71019,53439],{"class":53332},[76,71021,71022],{"class":90},">学生信息管理\u003C\u002F",[76,71024,53439],{"class":53332},[76,71026,53339],{"class":90},[76,71028,71029,71031,71034,71037,71039,71042,71044,71046,71049],{"class":78,"line":257},[76,71030,54176],{"class":90},[76,71032,71033],{"class":53332},"link",[76,71035,71036],{"class":86}," rel",[76,71038,370],{"class":90},[76,71040,71041],{"class":126},"\"stylesheet\"",[76,71043,63085],{"class":86},[76,71045,370],{"class":90},[76,71047,71048],{"class":126},"\"css\u002Findex.css\"",[76,71050,61156],{"class":90},[76,71052,71053,71055,71057],{"class":78,"line":641},[76,71054,53817],{"class":90},[76,71056,53366],{"class":53332},[76,71058,53339],{"class":90},[76,71060,71061],{"class":78,"line":646},[76,71062,149],{"emptyLinePlaceholder":148},[76,71064,71065,71067,71069],{"class":78,"line":659},[76,71066,584],{"class":90},[76,71068,53832],{"class":53332},[76,71070,53339],{"class":90},[76,71072,71073,71075,71077,71080,71082],{"class":78,"line":1608},[76,71074,54176],{"class":90},[76,71076,10],{"class":53332},[76,71078,71079],{"class":90},">新增学员\u003C\u002F",[76,71081,10],{"class":53332},[76,71083,53339],{"class":90},[76,71085,71086,71088,71090,71092,71094,71096,71099,71101,71103],{"class":78,"line":1632},[76,71087,54176],{"class":90},[76,71089,68653],{"class":53332},[76,71091,55518],{"class":86},[76,71093,370],{"class":90},[76,71095,64692],{"class":126},[76,71097,71098],{"class":86}," autocomplete",[76,71100,370],{"class":90},[76,71102,33818],{"class":126},[76,71104,53339],{"class":90},[76,71106,71107,71110,71112,71114,71116,71118,71120,71122,71125,71127,71129,71131],{"class":78,"line":1637},[76,71108,71109],{"class":90},"    姓名：\u003C",[76,71111,1673],{"class":53332},[76,71113,55855],{"class":86},[76,71115,370],{"class":90},[76,71117,64727],{"class":126},[76,71119,55518],{"class":86},[76,71121,370],{"class":90},[76,71123,71124],{"class":126},"\"uname\"",[76,71126,16972],{"class":86},[76,71128,370],{"class":90},[76,71130,71124],{"class":126},[76,71132,61156],{"class":90},[76,71134,71135,71138,71140,71142,71144,71146,71148,71150,71153,71155,71157,71159],{"class":78,"line":1642},[76,71136,71137],{"class":90},"    年龄：\u003C",[76,71139,1673],{"class":53332},[76,71141,55855],{"class":86},[76,71143,370],{"class":90},[76,71145,64727],{"class":126},[76,71147,55518],{"class":86},[76,71149,370],{"class":90},[76,71151,71152],{"class":126},"\"age\"",[76,71154,16972],{"class":86},[76,71156,370],{"class":90},[76,71158,71152],{"class":126},[76,71160,61156],{"class":90},[76,71162,71163],{"class":78,"line":1652},[76,71164,71165],{"class":90},"    性别:\n",[76,71167,71168,71170,71173,71175,71177,71180,71182,71184,71186],{"class":78,"line":1660},[76,71169,53373],{"class":90},[76,71171,71172],{"class":53332},"select",[76,71174,16972],{"class":86},[76,71176,370],{"class":90},[76,71178,71179],{"class":126},"\"gender\"",[76,71181,55518],{"class":86},[76,71183,370],{"class":90},[76,71185,71179],{"class":126},[76,71187,53339],{"class":90},[76,71189,71190,71192,71195,71197,71199,71201,71204,71206],{"class":78,"line":1683},[76,71191,57265],{"class":90},[76,71193,71194],{"class":53332},"option",[76,71196,68679],{"class":86},[76,71198,370],{"class":90},[76,71200,12018],{"class":126},[76,71202,71203],{"class":90},">男\u003C\u002F",[76,71205,71194],{"class":53332},[76,71207,53339],{"class":90},[76,71209,71210,71212,71214,71216,71218,71220,71223,71225],{"class":78,"line":1698},[76,71211,57265],{"class":90},[76,71213,71194],{"class":53332},[76,71215,68679],{"class":86},[76,71217,370],{"class":90},[76,71219,12087],{"class":126},[76,71221,71222],{"class":90},">女\u003C\u002F",[76,71224,71194],{"class":53332},[76,71226,53339],{"class":90},[76,71228,71229,71231,71233],{"class":78,"line":1711},[76,71230,53808],{"class":90},[76,71232,71172],{"class":53332},[76,71234,53339],{"class":90},[76,71236,71237,71240,71242,71244,71246,71248,71250,71252,71255,71257,71259,71261],{"class":78,"line":1717},[76,71238,71239],{"class":90},"    薪资：\u003C",[76,71241,1673],{"class":53332},[76,71243,55855],{"class":86},[76,71245,370],{"class":90},[76,71247,64727],{"class":126},[76,71249,55518],{"class":86},[76,71251,370],{"class":90},[76,71253,71254],{"class":126},"\"salary\"",[76,71256,16972],{"class":86},[76,71258,370],{"class":90},[76,71260,71254],{"class":126},[76,71262,61156],{"class":90},[76,71264,71265,71268,71270,71272,71274,71277,71279,71281,71283],{"class":78,"line":1728},[76,71266,71267],{"class":90},"    就业城市：\u003C",[76,71269,71172],{"class":53332},[76,71271,16972],{"class":86},[76,71273,370],{"class":90},[76,71275,71276],{"class":126},"\"city\"",[76,71278,55518],{"class":86},[76,71280,370],{"class":90},[76,71282,71276],{"class":126},[76,71284,53339],{"class":90},[76,71286,71287,71289,71291,71293,71295,71298,71301,71303],{"class":78,"line":1740},[76,71288,57265],{"class":90},[76,71290,71194],{"class":53332},[76,71292,68679],{"class":86},[76,71294,370],{"class":90},[76,71296,71297],{"class":126},"\"北京\"",[76,71299,71300],{"class":90},">北京\u003C\u002F",[76,71302,71194],{"class":53332},[76,71304,53339],{"class":90},[76,71306,71307,71309,71311,71313,71315,71318,71321,71323],{"class":78,"line":1746},[76,71308,57265],{"class":90},[76,71310,71194],{"class":53332},[76,71312,68679],{"class":86},[76,71314,370],{"class":90},[76,71316,71317],{"class":126},"\"上海\"",[76,71319,71320],{"class":90},">上海\u003C\u002F",[76,71322,71194],{"class":53332},[76,71324,53339],{"class":90},[76,71326,71327,71329,71331,71333,71335,71338,71341,71343],{"class":78,"line":1751},[76,71328,57265],{"class":90},[76,71330,71194],{"class":53332},[76,71332,68679],{"class":86},[76,71334,370],{"class":90},[76,71336,71337],{"class":126},"\"广州\"",[76,71339,71340],{"class":90},">广州\u003C\u002F",[76,71342,71194],{"class":53332},[76,71344,53339],{"class":90},[76,71346,71347,71349,71351,71353,71355,71358,71361,71363],{"class":78,"line":1756},[76,71348,57265],{"class":90},[76,71350,71194],{"class":53332},[76,71352,68679],{"class":86},[76,71354,370],{"class":90},[76,71356,71357],{"class":126},"\"深圳\"",[76,71359,71360],{"class":90},">深圳\u003C\u002F",[76,71362,71194],{"class":53332},[76,71364,53339],{"class":90},[76,71366,71367,71369,71371,71373,71375,71378,71381,71383],{"class":78,"line":1766},[76,71368,57265],{"class":90},[76,71370,71194],{"class":53332},[76,71372,68679],{"class":86},[76,71374,370],{"class":90},[76,71376,71377],{"class":126},"\"曹县\"",[76,71379,71380],{"class":90},">曹县\u003C\u002F",[76,71382,71194],{"class":53332},[76,71384,53339],{"class":90},[76,71386,71387,71389,71391],{"class":78,"line":1773},[76,71388,53808],{"class":90},[76,71390,71172],{"class":53332},[76,71392,53339],{"class":90},[76,71394,71395,71397,71399,71401,71403,71406,71409,71411],{"class":78,"line":1793},[76,71396,53373],{"class":90},[76,71398,55918],{"class":53332},[76,71400,55518],{"class":86},[76,71402,370],{"class":90},[76,71404,71405],{"class":126},"\"add\"",[76,71407,71408],{"class":90},">录入\u003C\u002F",[76,71410,55918],{"class":53332},[76,71412,53339],{"class":90},[76,71414,71415,71417,71419],{"class":78,"line":1806},[76,71416,54449],{"class":90},[76,71418,68653],{"class":53332},[76,71420,53339],{"class":90},[76,71422,71423],{"class":78,"line":1817},[76,71424,149],{"emptyLinePlaceholder":148},[76,71426,71427,71429,71431,71434,71436],{"class":78,"line":1822},[76,71428,54176],{"class":90},[76,71430,10],{"class":53332},[76,71432,71433],{"class":90},">就业榜\u003C\u002F",[76,71435,10],{"class":53332},[76,71437,53339],{"class":90},[76,71439,71440,71442,71444],{"class":78,"line":1835},[76,71441,54176],{"class":90},[76,71443,2404],{"class":53332},[76,71445,53339],{"class":90},[76,71447,71448,71450,71452],{"class":78,"line":1847},[76,71449,53373],{"class":90},[76,71451,2407],{"class":53332},[76,71453,53339],{"class":90},[76,71455,71456,71458,71460],{"class":78,"line":1852},[76,71457,57265],{"class":90},[76,71459,2410],{"class":53332},[76,71461,53339],{"class":90},[76,71463,71464,71466,71468,71471,71473],{"class":78,"line":1862},[76,71465,57333],{"class":90},[76,71467,2413],{"class":53332},[76,71469,71470],{"class":90},">序号\u003C\u002F",[76,71472,2413],{"class":53332},[76,71474,53339],{"class":90},[76,71476,71477,71479,71481,71484,71486],{"class":78,"line":1874},[76,71478,57333],{"class":90},[76,71480,2413],{"class":53332},[76,71482,71483],{"class":90},">姓名\u003C\u002F",[76,71485,2413],{"class":53332},[76,71487,53339],{"class":90},[76,71489,71490,71492,71494,71497,71499],{"class":78,"line":1879},[76,71491,57333],{"class":90},[76,71493,2413],{"class":53332},[76,71495,71496],{"class":90},">年龄\u003C\u002F",[76,71498,2413],{"class":53332},[76,71500,53339],{"class":90},[76,71502,71503,71505,71507,71510,71512],{"class":78,"line":1884},[76,71504,57333],{"class":90},[76,71506,2413],{"class":53332},[76,71508,71509],{"class":90},">性别\u003C\u002F",[76,71511,2413],{"class":53332},[76,71513,53339],{"class":90},[76,71515,71516,71518,71520,71523,71525],{"class":78,"line":1889},[76,71517,57333],{"class":90},[76,71519,2413],{"class":53332},[76,71521,71522],{"class":90},">薪资\u003C\u002F",[76,71524,2413],{"class":53332},[76,71526,53339],{"class":90},[76,71528,71529,71531,71533,71536,71538],{"class":78,"line":1900},[76,71530,57333],{"class":90},[76,71532,2413],{"class":53332},[76,71534,71535],{"class":90},">就业城市\u003C\u002F",[76,71537,2413],{"class":53332},[76,71539,53339],{"class":90},[76,71541,71542,71544,71546,71549,71551],{"class":78,"line":1906},[76,71543,57333],{"class":90},[76,71545,2413],{"class":53332},[76,71547,71548],{"class":90},">操作\u003C\u002F",[76,71550,2413],{"class":53332},[76,71552,53339],{"class":90},[76,71554,71555,71557,71559],{"class":78,"line":1924},[76,71556,57438],{"class":90},[76,71558,2410],{"class":53332},[76,71560,53339],{"class":90},[76,71562,71563,71565,71567],{"class":78,"line":1929},[76,71564,53808],{"class":90},[76,71566,2407],{"class":53332},[76,71568,53339],{"class":90},[76,71570,71571,71573,71575],{"class":78,"line":1944},[76,71572,53373],{"class":90},[76,71574,2451],{"class":53332},[76,71576,53339],{"class":90},[76,71578,71579],{"class":78,"line":1950},[76,71580,71581],{"class":540},"      \u003C!-- \n",[76,71583,71584],{"class":78,"line":1965},[76,71585,71586],{"class":540},"        \u003Ctr>\n",[76,71588,71589],{"class":78,"line":1971},[76,71590,71591],{"class":540},"          \u003Ctd>1001\u003C\u002Ftd>\n",[76,71593,71594],{"class":78,"line":1985},[76,71595,71596],{"class":540},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[76,71598,71599],{"class":78,"line":1991},[76,71600,71601],{"class":540},"          \u003Ctd>19\u003C\u002Ftd>\n",[76,71603,71604],{"class":78,"line":2005},[76,71605,71606],{"class":540},"          \u003Ctd>男\u003C\u002Ftd>\n",[76,71608,71609],{"class":78,"line":2017},[76,71610,71611],{"class":540},"          \u003Ctd>15000\u003C\u002Ftd>\n",[76,71613,71614],{"class":78,"line":2023},[76,71615,71616],{"class":540},"          \u003Ctd>上海\u003C\u002Ftd>\n",[76,71618,71619],{"class":78,"line":2031},[76,71620,71621],{"class":540},"          \u003Ctd>\n",[76,71623,71624],{"class":78,"line":11880},[76,71625,71626],{"class":540},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[76,71628,71629],{"class":78,"line":11901},[76,71630,71631],{"class":540},"          \u003C\u002Ftd>\n",[76,71633,71634],{"class":78,"line":11907},[76,71635,71636],{"class":540},"        \u003C\u002Ftr> \n",[76,71638,71639],{"class":78,"line":11921},[76,71640,71641],{"class":540},"        -->\n",[76,71643,71644,71646,71648],{"class":78,"line":11927},[76,71645,53808],{"class":90},[76,71647,2451],{"class":53332},[76,71649,53339],{"class":90},[76,71651,71652,71654,71656],{"class":78,"line":11954},[76,71653,54449],{"class":90},[76,71655,2404],{"class":53332},[76,71657,53339],{"class":90},[76,71659,71660,71662,71664],{"class":78,"line":11963},[76,71661,54176],{"class":90},[76,71663,53845],{"class":53332},[76,71665,53339],{"class":90},[76,71667,71668],{"class":78,"line":11969},[76,71669,61987],{"class":540},[76,71671,71672,71674,71677,71679,71681,71683,71685,71688],{"class":78,"line":11977},[76,71673,13275],{"class":82},[76,71675,71676],{"class":119}," uname",[76,71678,15617],{"class":82},[76,71680,56427],{"class":90},[76,71682,56430],{"class":86},[76,71684,123],{"class":90},[76,71686,71687],{"class":126},"'.uname'",[76,71689,130],{"class":90},[76,71691,71692,71694,71696,71698,71700,71702,71704,71707],{"class":78,"line":11982},[76,71693,13275],{"class":82},[76,71695,17740],{"class":119},[76,71697,15617],{"class":82},[76,71699,56427],{"class":90},[76,71701,56430],{"class":86},[76,71703,123],{"class":90},[76,71705,71706],{"class":126},"'.age'",[76,71708,130],{"class":90},[76,71710,71711,71713,71716,71718,71720,71722,71724,71727],{"class":78,"line":18654},[76,71712,13275],{"class":82},[76,71714,71715],{"class":119}," gender",[76,71717,15617],{"class":82},[76,71719,56427],{"class":90},[76,71721,56430],{"class":86},[76,71723,123],{"class":90},[76,71725,71726],{"class":126},"'.gender'",[76,71728,130],{"class":90},[76,71730,71731,71733,71736,71738,71740,71742,71744,71747],{"class":78,"line":18660},[76,71732,13275],{"class":82},[76,71734,71735],{"class":119}," salary",[76,71737,15617],{"class":82},[76,71739,56427],{"class":90},[76,71741,56430],{"class":86},[76,71743,123],{"class":90},[76,71745,71746],{"class":126},"'.salary'",[76,71748,130],{"class":90},[76,71750,71751,71753,71756,71758,71760,71762,71764,71767],{"class":78,"line":18683},[76,71752,13275],{"class":82},[76,71754,71755],{"class":119}," city",[76,71757,15617],{"class":82},[76,71759,56427],{"class":90},[76,71761,56430],{"class":86},[76,71763,123],{"class":90},[76,71765,71766],{"class":126},"'.city'",[76,71768,130],{"class":90},[76,71770,71771,71773,71776,71778,71780,71782,71784,71787],{"class":78,"line":18689},[76,71772,13275],{"class":82},[76,71774,71775],{"class":119}," tbody",[76,71777,15617],{"class":82},[76,71779,56427],{"class":90},[76,71781,56430],{"class":86},[76,71783,123],{"class":90},[76,71785,71786],{"class":126},"'tbody'",[76,71788,130],{"class":90},[76,71790,71791],{"class":78,"line":18712},[76,71792,149],{"emptyLinePlaceholder":148},[76,71794,71795],{"class":78,"line":18726},[76,71796,71797],{"class":540},"    \u002F\u002F 获取所有带有name属性的元素\n",[76,71799,71800,71802,71805,71807,71809,71811,71813,71816],{"class":78,"line":18746},[76,71801,13275],{"class":82},[76,71803,71804],{"class":119}," items",[76,71806,15617],{"class":82},[76,71808,56427],{"class":90},[76,71810,57712],{"class":86},[76,71812,123],{"class":90},[76,71814,71815],{"class":126},"'[name]'",[76,71817,130],{"class":90},[76,71819,71820],{"class":78,"line":18752},[76,71821,71822],{"class":540},"    \u002F\u002F 声明一个空的数组\n",[76,71824,71825,71827,71829,71831],{"class":78,"line":18763},[76,71826,13275],{"class":82},[76,71828,59725],{"class":119},[76,71830,15617],{"class":82},[76,71832,53870],{"class":90},[76,71834,71835],{"class":78,"line":18786},[76,71836,71837],{"class":540},"    \u002F\u002F 1.录入模块\n",[76,71839,71840],{"class":78,"line":18808},[76,71841,71842],{"class":540},"    \u002F\u002F 1.1这是一个表单提交事件\n",[76,71844,71845,71847,71850,71852,71854,71856,71858,71861],{"class":78,"line":18813},[76,71846,13275],{"class":82},[76,71848,71849],{"class":119}," info",[76,71851,15617],{"class":82},[76,71853,56427],{"class":90},[76,71855,56430],{"class":86},[76,71857,123],{"class":90},[76,71859,71860],{"class":126},"'.info'",[76,71862,130],{"class":90},[76,71864,71865,71868,71870,71872,71875,71877,71879,71881,71883],{"class":78,"line":18819},[76,71866,71867],{"class":90},"    info.",[76,71869,59843],{"class":86},[76,71871,123],{"class":90},[76,71873,71874],{"class":126},"'submit'",[76,71876,405],{"class":90},[76,71878,56480],{"class":82},[76,71880,3770],{"class":90},[76,71882,2342],{"class":7296},[76,71884,14495],{"class":90},[76,71886,71887],{"class":78,"line":18833},[76,71888,71889],{"class":540},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[76,71891,71892,71895,71898],{"class":78,"line":18846},[76,71893,71894],{"class":90},"      e.",[76,71896,71897],{"class":86},"preventDefault",[76,71899,4072],{"class":90},[76,71901,71902],{"class":78,"line":18851},[76,71903,62041],{"class":540},[76,71905,71906],{"class":78,"line":18865},[76,71907,149],{"emptyLinePlaceholder":148},[76,71909,71910],{"class":78,"line":18870},[76,71911,71912],{"class":540},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[76,71914,71915],{"class":78,"line":18876},[76,71916,71917],{"class":540},"      \u002F\u002F 先遍历循环\n",[76,71919,71920,71922,71924,71926,71928,71930,71932,71934,71936,71939,71941,71943,71945],{"class":78,"line":18881},[76,71921,54316],{"class":82},[76,71923,3770],{"class":90},[76,71925,53879],{"class":82},[76,71927,11505],{"class":90},[76,71929,370],{"class":82},[76,71931,587],{"class":119},[76,71933,11512],{"class":90},[76,71935,584],{"class":82},[76,71937,71938],{"class":90}," items.",[76,71940,54000],{"class":119},[76,71942,5299],{"class":90},[76,71944,4388],{"class":82},[76,71946,14495],{"class":90},[76,71948,71949,71951,71954,71956,71959],{"class":78,"line":18895},[76,71950,4592],{"class":82},[76,71952,71953],{"class":90}," (items[i].value ",[76,71955,56517],{"class":82},[76,71957,71958],{"class":126}," ''",[76,71960,14495],{"class":90},[76,71962,71963,71966,71969,71971,71974],{"class":78,"line":18900},[76,71964,71965],{"class":82},"          return",[76,71967,71968],{"class":86}," alert",[76,71970,123],{"class":90},[76,71972,71973],{"class":126},"'输入内容不能为空'",[76,71975,130],{"class":90},[76,71977,71978],{"class":78,"line":18905},[76,71979,4624],{"class":90},[76,71981,71982],{"class":78,"line":18919},[76,71983,54430],{"class":90},[76,71985,71986],{"class":78,"line":18931},[76,71987,149],{"emptyLinePlaceholder":148},[76,71989,71990],{"class":78,"line":18936},[76,71991,71992],{"class":540},"      \u002F\u002F 创建新的对象\n",[76,71994,71995,71997,72000,72002],{"class":78,"line":18949},[76,71996,60258],{"class":82},[76,71998,71999],{"class":119}," obj",[76,72001,15617],{"class":82},[76,72003,17623],{"class":90},[76,72005,72006,72009,72011,72013,72015],{"class":78,"line":18954},[76,72007,72008],{"class":90},"        stuID: arr.",[76,72010,54000],{"class":119},[76,72012,47601],{"class":82},[76,72014,27168],{"class":119},[76,72016,33509],{"class":90},[76,72018,72019],{"class":78,"line":18959},[76,72020,72021],{"class":90},"        uname: uname.value,\n",[76,72023,72024],{"class":78,"line":18964},[76,72025,72026],{"class":90},"        age: age.value,\n",[76,72028,72029],{"class":78,"line":18977},[76,72030,72031],{"class":90},"        gender: gender.value,\n",[76,72033,72034],{"class":78,"line":18982},[76,72035,72036],{"class":90},"        salary: salary.value,\n",[76,72038,72039],{"class":78,"line":34671},[76,72040,72041],{"class":90},"        city: city.value\n",[76,72043,72044],{"class":78,"line":34677},[76,72045,54430],{"class":90},[76,72047,72048],{"class":78,"line":34683},[76,72049,72050],{"class":540},"      \u002F\u002F console.log(obj);\n",[76,72052,72053],{"class":78,"line":34689},[76,72054,72055],{"class":540},"      \u002F\u002F 追加到数组里面\n",[76,72057,72058,72060,72062],{"class":78,"line":34695},[76,72059,60037],{"class":90},[76,72061,53916],{"class":86},[76,72063,72064],{"class":90},"(obj)\n",[76,72066,72067],{"class":78,"line":34706},[76,72068,72069],{"class":540},"      \u002F\u002F console.log(arr);\n",[76,72071,72072],{"class":78,"line":34712},[76,72073,72074],{"class":540},"      \u002F\u002F 清空表单  reset重置表单\n",[76,72076,72077,72080,72082,72085],{"class":78,"line":34732},[76,72078,72079],{"class":119},"      this",[76,72081,2819],{"class":90},[76,72083,72084],{"class":86},"reset",[76,72086,4072],{"class":90},[76,72088,72089],{"class":78,"line":34738},[76,72090,72091],{"class":540},"      \u002F\u002F 调用渲染函数\n",[76,72093,72094,72097],{"class":78,"line":34749},[76,72095,72096],{"class":86},"      render",[76,72098,4072],{"class":90},[76,72100,72101],{"class":78,"line":34755},[76,72102,35499],{"class":90},[76,72104,72105],{"class":78,"line":34761},[76,72106,72107],{"class":540},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[76,72109,72110,72113,72116],{"class":78,"line":34767},[76,72111,72112],{"class":82},"    function",[76,72114,72115],{"class":86}," render",[76,72117,12909],{"class":90},[76,72119,72120],{"class":78,"line":34773},[76,72121,72122],{"class":540},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[76,72124,72125,72128,72130],{"class":78,"line":34779},[76,72126,72127],{"class":90},"      tbody.innerHTML ",[76,72129,370],{"class":82},[76,72131,72132],{"class":126}," ''\n",[76,72134,72135],{"class":78,"line":34785},[76,72136,72137],{"class":540},"      \u002F\u002F 遍历数组\n",[76,72139,72140,72142,72144,72146,72148,72150,72152,72154,72156,72158,72160,72162,72164],{"class":78,"line":34791},[76,72141,54316],{"class":82},[76,72143,3770],{"class":90},[76,72145,53879],{"class":82},[76,72147,11505],{"class":90},[76,72149,370],{"class":82},[76,72151,587],{"class":119},[76,72153,11512],{"class":90},[76,72155,584],{"class":82},[76,72157,53997],{"class":90},[76,72159,54000],{"class":119},[76,72161,5299],{"class":90},[76,72163,4388],{"class":82},[76,72165,14495],{"class":90},[76,72167,72168,72170,72173,72175,72177,72180,72182,72185],{"class":78,"line":34811},[76,72169,63298],{"class":82},[76,72171,72172],{"class":119}," tr",[76,72174,15617],{"class":82},[76,72176,56427],{"class":90},[76,72178,72179],{"class":86},"createElement",[76,72181,123],{"class":90},[76,72183,72184],{"class":126},"'tr'",[76,72186,130],{"class":90},[76,72188,72189,72192,72194],{"class":78,"line":34817},[76,72190,72191],{"class":90},"        tr.innerHTML ",[76,72193,370],{"class":82},[76,72195,72196],{"class":126}," `\n",[76,72198,72199,72202,72204,72206,72208,72211,72214],{"class":78,"line":34833},[76,72200,72201],{"class":126},"        \u003Ctd>${",[76,72203,5964],{"class":90},[76,72205,3148],{"class":126},[76,72207,2705],{"class":90},[76,72209,72210],{"class":126},"].",[76,72212,72213],{"class":90},"stuID",[76,72215,72216],{"class":126},"}\u003C\u002Ftd>\n",[76,72218,72219,72222,72224,72226,72228,72230,72233],{"class":78,"line":34839},[76,72220,72221],{"class":126},"          \u003Ctd>${",[76,72223,5964],{"class":90},[76,72225,3148],{"class":126},[76,72227,2705],{"class":90},[76,72229,72210],{"class":126},[76,72231,72232],{"class":90},"uname",[76,72234,72216],{"class":126},[76,72236,72237,72239,72241,72243,72245,72247,72249],{"class":78,"line":34853},[76,72238,72221],{"class":126},[76,72240,5964],{"class":90},[76,72242,3148],{"class":126},[76,72244,2705],{"class":90},[76,72246,72210],{"class":126},[76,72248,1184],{"class":90},[76,72250,72216],{"class":126},[76,72252,72253,72255,72257,72259,72261,72263,72266],{"class":78,"line":34859},[76,72254,72221],{"class":126},[76,72256,5964],{"class":90},[76,72258,3148],{"class":126},[76,72260,2705],{"class":90},[76,72262,72210],{"class":126},[76,72264,72265],{"class":90},"gender",[76,72267,72216],{"class":126},[76,72269,72270,72272,72274,72276,72278,72280,72283],{"class":78,"line":34874},[76,72271,72221],{"class":126},[76,72273,5964],{"class":90},[76,72275,3148],{"class":126},[76,72277,2705],{"class":90},[76,72279,72210],{"class":126},[76,72281,72282],{"class":90},"salary",[76,72284,72216],{"class":126},[76,72286,72287,72289,72291,72293,72295,72297,72300],{"class":78,"line":34880},[76,72288,72221],{"class":126},[76,72290,5964],{"class":90},[76,72292,3148],{"class":126},[76,72294,2705],{"class":90},[76,72296,72210],{"class":126},[76,72298,72299],{"class":90},"city",[76,72301,72216],{"class":126},[76,72303,72304],{"class":78,"line":34889},[76,72305,71621],{"class":126},[76,72307,72308,72311,72313],{"class":78,"line":34895},[76,72309,72310],{"class":126},"            \u003Ca href=\"javascript:\" data-id=${",[76,72312,2705],{"class":90},[76,72314,72315],{"class":126},"}>删除\u003C\u002Fa>\n",[76,72317,72318],{"class":78,"line":34904},[76,72319,72320],{"class":126},"          \u003C\u002Ftd> \n",[76,72322,72323],{"class":78,"line":34910},[76,72324,72325],{"class":126},"          `\n",[76,72327,72328],{"class":78,"line":34916},[76,72329,72330],{"class":540},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[76,72332,72333,72336,72339],{"class":78,"line":34925},[76,72334,72335],{"class":90},"        tbody.",[76,72337,72338],{"class":86},"appendChild",[76,72340,72341],{"class":90},"(tr)\n",[76,72343,72344],{"class":78,"line":34931},[76,72345,54430],{"class":90},[76,72347,72348],{"class":78,"line":34942},[76,72349,4283],{"class":90},[76,72351,72352],{"class":78,"line":34948},[76,72353,149],{"emptyLinePlaceholder":148},[76,72355,72356],{"class":78,"line":34967},[76,72357,72358],{"class":540},"    \u002F\u002F 3.删除委托\n",[76,72360,72361],{"class":78,"line":34973},[76,72362,72363],{"class":540},"    \u002F\u002F 3.1 事件委托 tbody\n",[76,72365,72366,72369,72371,72373,72375,72377,72379,72381,72383],{"class":78,"line":34984},[76,72367,72368],{"class":90},"    tbody.",[76,72370,59843],{"class":86},[76,72372,123],{"class":90},[76,72374,59848],{"class":126},[76,72376,405],{"class":90},[76,72378,56480],{"class":82},[76,72380,3770],{"class":90},[76,72382,2342],{"class":7296},[76,72384,14495],{"class":90},[76,72386,72387,72389,72391,72393,72395],{"class":78,"line":34990},[76,72388,56511],{"class":82},[76,72390,69062],{"class":90},[76,72392,56517],{"class":82},[76,72394,70284],{"class":126},[76,72396,14495],{"class":90},[76,72398,72399],{"class":78,"line":35010},[76,72400,72401],{"class":540},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[76,72403,72404],{"class":78,"line":35026},[76,72405,72406],{"class":540},"        \u002F\u002F console.log(e.target.dataset.id);\n",[76,72408,72409],{"class":78,"line":35032},[76,72410,72411],{"class":540},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[76,72413,72414,72417,72419,72422,72424],{"class":78,"line":35046},[76,72415,72416],{"class":90},"        arr.",[76,72418,60040],{"class":86},[76,72420,72421],{"class":90},"(e.target.dataset.id, ",[76,72423,669],{"class":119},[76,72425,130],{"class":90},[76,72427,72428],{"class":78,"line":35052},[76,72429,72430],{"class":540},"        \u002F\u002F 重新渲染一次\n",[76,72432,72433,72436],{"class":78,"line":35058},[76,72434,72435],{"class":86},"        render",[76,72437,4072],{"class":90},[76,72439,72440],{"class":78,"line":35069},[76,72441,54430],{"class":90},[76,72443,72444],{"class":78,"line":35075},[76,72445,35499],{"class":90},[76,72447,72448,72450,72452],{"class":78,"line":35081},[76,72449,54449],{"class":90},[76,72451,53845],{"class":53332},[76,72453,53339],{"class":90},[76,72455,72456],{"class":78,"line":35091},[76,72457,149],{"emptyLinePlaceholder":148},[76,72459,72460,72462,72464],{"class":78,"line":35097},[76,72461,53817],{"class":90},[76,72463,53832],{"class":53332},[76,72465,53339],{"class":90},[76,72467,72468],{"class":78,"line":35108},[76,72469,149],{"emptyLinePlaceholder":148},[76,72471,72472,72474,72476],{"class":78,"line":35114},[76,72473,53817],{"class":90},[76,72475,52667],{"class":53332},[76,72477,53339],{"class":90},[19,72479,72480],{},"样式：",[66,72482,72486],{"className":72483,"code":72484,"language":72485,"meta":71,"style":71},"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",[73,72487,72488,72493,72503,72512,72516,72520,72525,72535,72540,72544,72549,72559,72564,72573,72577,72581,72586,72591,72601,72611,72616,72620,72625,72634,72644,72649,72659,72669,72673,72678,72686,72690,72695,72700,72705,72713,72722,72726,72731,72740,72744,72749,72758,72762,72767,72776,72785,72793,72797,72802,72811,72821,72830,72840,72846,72855,72865,72875,72879,72884,72893,72901,72911,72919,72928,72937,72947,72955,72959,72964,72973],{"__ignoreMap":71},[76,72489,72490],{"class":78,"line":79},[76,72491,72492],{"class":90},"* {\n",[76,72494,72495,72498,72500],{"class":78,"line":94},[76,72496,72497],{"class":53332},"  margin",[76,72499,53469],{"class":90},[76,72501,72502],{"class":126},"0;\n",[76,72504,72505,72508,72510],{"class":78,"line":133},[76,72506,72507],{"class":126},"  padding",[76,72509,53469],{"class":90},[76,72511,72502],{"class":126},[76,72513,72514],{"class":78,"line":145},[76,72515,3685],{"class":90},[76,72517,72518],{"class":78,"line":152},[76,72519,149],{"emptyLinePlaceholder":148},[76,72521,72522],{"class":78,"line":157},[76,72523,72524],{"class":126},"a {\n",[76,72526,72527,72530,72532],{"class":78,"line":246},[76,72528,72529],{"class":53332},"  text-decoration",[76,72531,53469],{"class":90},[76,72533,72534],{"class":126},"none;\n",[76,72536,72537],{"class":78,"line":251},[76,72538,72539],{"class":126},"  color:#721c24;\n",[76,72541,72542],{"class":78,"line":257},[76,72543,3685],{"class":90},[76,72545,72546],{"class":78,"line":641},[76,72547,72548],{"class":126},"h1 {\n",[76,72550,72551,72554,72556],{"class":78,"line":646},[76,72552,72553],{"class":53332},"  text-align",[76,72555,53469],{"class":90},[76,72557,72558],{"class":126},"center;\n",[76,72560,72561],{"class":78,"line":659},[76,72562,72563],{"class":126},"  color:#333;\n",[76,72565,72566,72568,72570],{"class":78,"line":1608},[76,72567,72497],{"class":53332},[76,72569,53469],{"class":90},[76,72571,72572],{"class":126},"20px 0;\n",[76,72574,72575],{"class":78,"line":1632},[76,72576,4762],{"class":90},[76,72578,72579],{"class":78,"line":1637},[76,72580,3685],{"class":90},[76,72582,72583],{"class":78,"line":1642},[76,72584,72585],{"class":126},"table {\n",[76,72587,72588],{"class":78,"line":1652},[76,72589,72590],{"class":126},"  margin:0 auto;\n",[76,72592,72593,72596,72598],{"class":78,"line":1660},[76,72594,72595],{"class":53332},"  width",[76,72597,53469],{"class":90},[76,72599,72600],{"class":126},"800px;\n",[76,72602,72603,72606,72608],{"class":78,"line":1683},[76,72604,72605],{"class":53332},"  border-collapse",[76,72607,53469],{"class":90},[76,72609,72610],{"class":126},"collapse;\n",[76,72612,72613],{"class":78,"line":1698},[76,72614,72615],{"class":126},"  color:#004085;\n",[76,72617,72618],{"class":78,"line":1711},[76,72619,3685],{"class":90},[76,72621,72622],{"class":78,"line":1717},[76,72623,72624],{"class":126},"th {\n",[76,72626,72627,72629,72631],{"class":78,"line":1728},[76,72628,72507],{"class":53332},[76,72630,53469],{"class":90},[76,72632,72633],{"class":126},"10px;\n",[76,72635,72636,72639,72641],{"class":78,"line":1740},[76,72637,72638],{"class":53332},"  background",[76,72640,53469],{"class":90},[76,72642,72643],{"class":540},"#cfe5ff;\n",[76,72645,72646],{"class":78,"line":1746},[76,72647,72648],{"class":90},"  \n",[76,72650,72651,72654,72656],{"class":78,"line":1751},[76,72652,72653],{"class":53332},"  font-size",[76,72655,53469],{"class":90},[76,72657,72658],{"class":126},"20px;\n",[76,72660,72661,72664,72666],{"class":78,"line":1756},[76,72662,72663],{"class":53332},"  font-weight",[76,72665,53469],{"class":90},[76,72667,72668],{"class":126},"400;\n",[76,72670,72671],{"class":78,"line":1766},[76,72672,3685],{"class":90},[76,72674,72675],{"class":78,"line":1773},[76,72676,72677],{"class":126},"td,th {\n",[76,72679,72680,72683],{"class":78,"line":1793},[76,72681,72682],{"class":126},"  border:1px solid",[76,72684,72685],{"class":540}," #b8daff;\n",[76,72687,72688],{"class":78,"line":1806},[76,72689,3685],{"class":90},[76,72691,72692],{"class":78,"line":1817},[76,72693,72694],{"class":126},"td {\n",[76,72696,72697],{"class":78,"line":1822},[76,72698,72699],{"class":126},"  padding:10px;\n",[76,72701,72702],{"class":78,"line":1835},[76,72703,72704],{"class":126},"  color:#666;\n",[76,72706,72707,72709,72711],{"class":78,"line":1847},[76,72708,72553],{"class":53332},[76,72710,53469],{"class":90},[76,72712,72558],{"class":126},[76,72714,72715,72717,72719],{"class":78,"line":1852},[76,72716,72653],{"class":53332},[76,72718,53469],{"class":90},[76,72720,72721],{"class":126},"16px;\n",[76,72723,72724],{"class":78,"line":1862},[76,72725,3685],{"class":90},[76,72727,72728],{"class":78,"line":1874},[76,72729,72730],{"class":126},"tbody tr {\n",[76,72732,72733,72735,72737],{"class":78,"line":1879},[76,72734,72638],{"class":53332},[76,72736,53469],{"class":90},[76,72738,72739],{"class":540},"#fff;\n",[76,72741,72742],{"class":78,"line":1884},[76,72743,3685],{"class":90},[76,72745,72746],{"class":78,"line":1889},[76,72747,72748],{"class":126},"tbody tr:hover {\n",[76,72750,72751,72753,72755],{"class":78,"line":1900},[76,72752,72638],{"class":53332},[76,72754,53469],{"class":90},[76,72756,72757],{"class":540},"#e1ecf8;\n",[76,72759,72760],{"class":78,"line":1906},[76,72761,3685],{"class":90},[76,72763,72764],{"class":78,"line":1924},[76,72765,72766],{"class":126},".info {\n",[76,72768,72769,72771,72773],{"class":78,"line":1929},[76,72770,72595],{"class":53332},[76,72772,53469],{"class":90},[76,72774,72775],{"class":126},"900px;\n",[76,72777,72778,72780,72782],{"class":78,"line":1944},[76,72779,72497],{"class":53332},[76,72781,53469],{"class":90},[76,72783,72784],{"class":126},"50px auto;\n",[76,72786,72787,72789,72791],{"class":78,"line":1950},[76,72788,72553],{"class":53332},[76,72790,53469],{"class":90},[76,72792,72558],{"class":126},[76,72794,72795],{"class":78,"line":1965},[76,72796,3685],{"class":90},[76,72798,72799],{"class":78,"line":1971},[76,72800,72801],{"class":126},".info  input, .info select {\n",[76,72803,72804,72806,72808],{"class":78,"line":1985},[76,72805,72595],{"class":53332},[76,72807,53469],{"class":90},[76,72809,72810],{"class":126},"80px;\n",[76,72812,72813,72816,72818],{"class":78,"line":1991},[76,72814,72815],{"class":53332},"  height",[76,72817,53469],{"class":90},[76,72819,72820],{"class":126},"27px;\n",[76,72822,72823,72826,72828],{"class":78,"line":2005},[76,72824,72825],{"class":53332},"  outline",[76,72827,53469],{"class":90},[76,72829,72534],{"class":126},[76,72831,72832,72835,72837],{"class":78,"line":2017},[76,72833,72834],{"class":53332},"  border-radius",[76,72836,53469],{"class":90},[76,72838,72839],{"class":126},"5px;\n",[76,72841,72842,72844],{"class":78,"line":2023},[76,72843,72682],{"class":126},[76,72845,72685],{"class":540},[76,72847,72848,72851,72853],{"class":78,"line":2031},[76,72849,72850],{"class":53332},"  padding-left",[76,72852,53469],{"class":90},[76,72854,72839],{"class":126},[76,72856,72857,72860,72862],{"class":78,"line":11880},[76,72858,72859],{"class":53332},"  box-sizing",[76,72861,53469],{"class":90},[76,72863,72864],{"class":126},"border-box;\n",[76,72866,72867,72870,72872],{"class":78,"line":11901},[76,72868,72869],{"class":53332},"  margin-right",[76,72871,53469],{"class":90},[76,72873,72874],{"class":126},"15px;\n",[76,72876,72877],{"class":78,"line":11907},[76,72878,3685],{"class":90},[76,72880,72881],{"class":78,"line":11921},[76,72882,72883],{"class":126},".info button {\n",[76,72885,72886,72888,72890],{"class":78,"line":11927},[76,72887,72595],{"class":53332},[76,72889,53469],{"class":90},[76,72891,72892],{"class":126},"60px;\n",[76,72894,72895,72897,72899],{"class":78,"line":11954},[76,72896,72815],{"class":53332},[76,72898,53469],{"class":90},[76,72900,72820],{"class":126},[76,72902,72903,72906,72908],{"class":78,"line":11963},[76,72904,72905],{"class":53332},"  background-color",[76,72907,53469],{"class":90},[76,72909,72910],{"class":540},"#004085;\n",[76,72912,72913,72915,72917],{"class":78,"line":11969},[76,72914,72825],{"class":53332},[76,72916,53469],{"class":90},[76,72918,72534],{"class":126},[76,72920,72921,72924,72926],{"class":78,"line":11977},[76,72922,72923],{"class":53332},"  border",[76,72925,53469],{"class":90},[76,72927,72502],{"class":126},[76,72929,72930,72933,72935],{"class":78,"line":11982},[76,72931,72932],{"class":53332},"  color",[76,72934,53469],{"class":90},[76,72936,72739],{"class":540},[76,72938,72939,72942,72944],{"class":78,"line":18654},[76,72940,72941],{"class":53332},"  cursor",[76,72943,53469],{"class":90},[76,72945,72946],{"class":126},"pointer;\n",[76,72948,72949,72951,72953],{"class":78,"line":18660},[76,72950,72834],{"class":53332},[76,72952,53469],{"class":90},[76,72954,72839],{"class":126},[76,72956,72957],{"class":78,"line":18683},[76,72958,3685],{"class":90},[76,72960,72961],{"class":78,"line":18689},[76,72962,72963],{"class":126},".info .age {\n",[76,72965,72966,72968,72970],{"class":78,"line":18712},[76,72967,72595],{"class":53332},[76,72969,53469],{"class":90},[76,72971,72972],{"class":126},"50px;\n",[76,72974,72975],{"class":78,"line":18726},[76,72976,3685],{"class":90},[19,72978,72979],{},"思路：",[19,72981,72982],{},[3583,72983],{"alt":71,"src":72984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72986,72987],{},[3583,72988],{"alt":71,"src":72989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72991,72992],{},[3583,72993],{"alt":71,"src":72994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[889,72996,72998],{"id":72997},"_3315-重绘回流","3.3.15 重绘回流",[19,73000,73001],{},[3583,73002],{"alt":71,"src":73003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73005,73006],{},[3583,73007],{"alt":71,"src":73008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73010,73011],{},[3583,73012],{"alt":71,"src":73013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73015,73017],{"id":73016},"_34-bom","3.4 BOM",[19,73019,73020],{},[3583,73021],{"alt":71,"src":73022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73024,73025],{},"平时写的document省略了window而已，实际上是window.document",[19,73027,73028],{},"函数也是这样，调用的时候实际为window.fn()",[19,73030,73031],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73033,73034],{},"window大部分情况下可以省略",[889,73036,73038],{"id":73037},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73040,73041],{},"只执行一次",[19,73043,73044],{},[3583,73045],{"alt":71,"src":73046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73048,73049],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73051,73052],{},[3583,73053],{"alt":71,"src":73054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[889,73056,73058],{"id":73057},"_342-js执行机制","3.4.2 JS执行机制",[19,73060,73061],{},[3583,73062],{"alt":71,"src":73063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73065,73066],{},"两个的结果都是1111 3333 2222",[19,73068,73069],{},[3583,73070],{"alt":71,"src":73071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73073,73074],{},[3583,73075],{"alt":71,"src":73076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73078,73079],{},[3583,73080],{"alt":71,"src":73081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73083,73084],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73086,73087],{},"工作流程：",[19,73089,73090],{},[3583,73091],{"alt":71,"src":73092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73094,73095],{},[3583,73096],{"alt":71,"src":73097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73099,73100],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73102,73103],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[889,73105,73107],{"id":73106},"_343-location对象","3.4.3 location对象",[19,73109,73110],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73112,73113],{},[3583,73114],{"alt":71,"src":73115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73117,73118],{},"href可以跳转页面",[26,73120,73121],{},[29,73122,73123],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73125,73126],{},"search得到提交信息之后网站后边的地址",[19,73128,73129],{},[3583,73130],{"alt":71,"src":73131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73133,73134],{},[3583,73135],{"alt":71,"src":73136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,73138,73139],{"start":94},[29,73140,73141],{},"hash:这个获取单页面应用#后边的地址",[19,73143,73144],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73146,73147],{},[3583,73148],{"alt":71,"src":73149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[66,73151,73153],{"className":55099,"code":73152,"language":55101,"meta":71,"style":71},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[73,73154,73155,73175,73195],{"__ignoreMap":71},[76,73156,73157,73159,73161,73163,73165,73168,73171,73173],{"class":78,"line":79},[76,73158,54176],{"class":90},[76,73160,2503],{"class":53332},[76,73162,63085],{"class":86},[76,73164,370],{"class":90},[76,73166,73167],{"class":126},"\"#\u002Fmy\"",[76,73169,73170],{"class":90},">我的\u003C\u002F",[76,73172,2503],{"class":53332},[76,73174,53339],{"class":90},[76,73176,73177,73179,73181,73183,73185,73188,73191,73193],{"class":78,"line":94},[76,73178,54176],{"class":90},[76,73180,2503],{"class":53332},[76,73182,63085],{"class":86},[76,73184,370],{"class":90},[76,73186,73187],{"class":126},"\"#\u002Ffriend\"",[76,73189,73190],{"class":90},">关注\u003C\u002F",[76,73192,2503],{"class":53332},[76,73194,53339],{"class":90},[76,73196,73197,73199,73201,73203,73205,73208,73211,73213],{"class":78,"line":133},[76,73198,54176],{"class":90},[76,73200,2503],{"class":53332},[76,73202,63085],{"class":86},[76,73204,370],{"class":90},[76,73206,73207],{"class":126},"\"#\u002Fdownload\"",[76,73209,73210],{"class":90},">下载\u003C\u002F",[76,73212,2503],{"class":53332},[76,73214,53339],{"class":90},[19,73216,73217],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,73219,73220],{"start":133},[29,73221,73222,73223,73225,73226,73228],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55748,73224],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55748,73227],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[889,73230,73232],{"id":73231},"_345-navigator对象","3.4.5 navigator对象",[19,73234,73235],{},[3583,73236],{"alt":71,"src":73237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[66,73239,73243],{"className":73240,"code":73241,"language":73242,"meta":71,"style":71},"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",[73,73244,73245,73250,73261,73273,73278,73329,73370,73375,73388,73400,73405],{"__ignoreMap":71},[76,73246,73247],{"class":78,"line":79},[76,73248,73249],{"class":540},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[76,73251,73252,73254,73256,73258],{"class":78,"line":94},[76,73253,2491],{"class":82},[76,73255,123],{"class":90},[76,73257,56480],{"class":82},[76,73259,73260],{"class":90}," () { \n",[76,73262,73263,73265,73268,73270],{"class":78,"line":133},[76,73264,8870],{"class":82},[76,73266,73267],{"class":119}," userAgent",[76,73269,15617],{"class":82},[76,73271,73272],{"class":90}," navigator.userAgent \n",[76,73274,73275],{"class":78,"line":145},[76,73276,73277],{"class":540},"\u002F\u002F 验证是否为Android或iPhone \n",[76,73279,73280,73282,73285,73287,73290,73293,73295,73297,73300,73302,73305,73309,73311,73313,73315,73318,73320,73322,73324,73326],{"class":78,"line":152},[76,73281,8870],{"class":82},[76,73283,73284],{"class":119}," android",[76,73286,15617],{"class":82},[76,73288,73289],{"class":90}," userAgent.",[76,73291,73292],{"class":86},"match",[76,73294,123],{"class":90},[76,73296,795],{"class":126},[76,73298,73299],{"class":50009},"(Android);",[76,73301,3240],{"class":82},[76,73303,73304],{"class":119},"[\\s",[76,73306,73308],{"class":73307},"snhLl","\\\u002F",[76,73310,3196],{"class":119},[76,73312,376],{"class":82},[76,73314,123],{"class":50009},[76,73316,73317],{"class":119},"[\\d.]",[76,73319,376],{"class":82},[76,73321,2693],{"class":50009},[76,73323,3240],{"class":82},[76,73325,795],{"class":126},[76,73327,73328],{"class":90},") \n",[76,73330,73331,73333,73336,73338,73340,73342,73344,73346,73349,73352,73355,73357,73359,73362,73364,73366,73368],{"class":78,"line":157},[76,73332,8870],{"class":82},[76,73334,73335],{"class":119}," iphone",[76,73337,15617],{"class":82},[76,73339,73289],{"class":90},[76,73341,73292],{"class":86},[76,73343,123],{"class":90},[76,73345,795],{"class":126},[76,73347,73348],{"class":50009},"(iPhone",[76,73350,73351],{"class":119},"\\s",[76,73353,73354],{"class":50009},"OS)",[76,73356,73351],{"class":119},[76,73358,123],{"class":50009},[76,73360,73361],{"class":119},"[\\d_]",[76,73363,376],{"class":82},[76,73365,2693],{"class":50009},[76,73367,795],{"class":126},[76,73369,73328],{"class":90},[76,73371,73372],{"class":78,"line":246},[76,73373,73374],{"class":540},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[76,73376,73377,73379,73382,73385],{"class":78,"line":251},[76,73378,723],{"class":82},[76,73380,73381],{"class":90}," (android ",[76,73383,73384],{"class":82},"||",[76,73386,73387],{"class":90}," iphone) { \n",[76,73389,73390,73393,73395,73398],{"class":78,"line":257},[76,73391,73392],{"class":90},"location.href ",[76,73394,370],{"class":82},[76,73396,73397],{"class":126}," 'http:\u002F\u002Fm.itcast.cn'",[76,73399,4762],{"class":90},[76,73401,73402],{"class":78,"line":641},[76,73403,73404],{"class":90},"} \n",[76,73406,73407],{"class":78,"line":646},[76,73408,73409],{"class":90},"})()\n",[889,73411,73413],{"id":73412},"_346-histroy对象","3.4.6 histroy对象",[19,73415,73416],{},[3583,73417],{"alt":71,"src":73418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73420,73421],{},"浏览器地址的前进与后退!!!",[19,73423,73424],{},"history.back() 等效于 history.go(-1)",[19,73426,73427],{},"history.forward() 等效于 history.go(1)",[14,73429,73431],{"id":73430},"_35-本地存储","3.5 本地存储",[26,73433,73434,73437,73440],{},[29,73435,73436],{},"数据存储在用户浏览器中",[29,73438,73439],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73441,73442],{},"容量较大，sessionStorage和localStorage约 5M 左右",[889,73444,73446],{"id":73445},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73448,73449],{},"只能存储字符串",[19,73451,73452],{},[3583,73453],{"alt":71,"src":73454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73456,73457],{},[3583,73458],{"alt":71,"src":73459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73461,73462],{},"键值对要加引号,不然就会当变量来看了",[19,73464,73465],{},"localStorage.setItem('uname', 'pink')",[19,73467,73468],{},"刷新之后信息不再丢失",[19,73470,73471],{},"操作key,value会跟着变",[19,73473,73474],{},"删除只删除键就可以,即名字",[19,73476,73465],{},[19,73478,73479],{},"改:",[19,73481,73482],{},"localStorage.setItem('uname','red')",[19,73484,73485],{},"有这个键就是改,没有这个键就是改",[19,73487,73488],{},[3583,73489],{"alt":71,"src":73490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73492,73493],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73495,73496],{},[3583,73497],{"alt":71,"src":73498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73500,73501],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[889,73503,73505],{"id":73504},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73507,73508],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73510,73511],{},"特性:",[26,73513,73514,73517,73520,73523],{},[29,73515,73516],{},"生命周期为关闭浏览器窗口",[29,73518,73519],{},"在同一个窗口(页面)下数据可以共享",[29,73521,73522],{},"以键值对的形式存储使用",[29,73524,73525],{},"用法跟localStorage 基本相同",[889,73527,73529],{"id":73528},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73531,73532],{},"本地只能存储字符串,无法直接存储复杂数据类型",[66,73534,73536],{"className":55099,"code":73535,"language":55101,"meta":71,"style":71},"\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",[73,73537,73538,73546,73551,73556,73561,73566,73570,73575,73580],{"__ignoreMap":71},[76,73539,73540,73542,73544],{"class":78,"line":79},[76,73541,584],{"class":90},[76,73543,53845],{"class":53332},[76,73545,53339],{"class":90},[76,73547,73548],{"class":78,"line":94},[76,73549,73550],{"class":90},"    const obj = {\n",[76,73552,73553],{"class":78,"line":133},[76,73554,73555],{"class":90},"      uname: 'pink老师',\n",[76,73557,73558],{"class":78,"line":145},[76,73559,73560],{"class":90},"      age: 18,\n",[76,73562,73563],{"class":78,"line":152},[76,73564,73565],{"class":90},"      gender: '女'\n",[76,73567,73568],{"class":78,"line":157},[76,73569,4283],{"class":90},[76,73571,73572],{"class":78,"line":246},[76,73573,73574],{"class":90},"    \u002F\u002F 存储复杂数据类型\n",[76,73576,73577],{"class":78,"line":251},[76,73578,73579],{"class":90},"    localStorage.setItem('obj', obj)\n",[76,73581,73582,73584,73586],{"class":78,"line":257},[76,73583,54449],{"class":90},[76,73585,53845],{"class":53332},[76,73587,53339],{"class":90},[19,73589,73590],{},[3583,73591],{"alt":71,"src":73592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73594,73595],{},"如果获取一下数据:",[19,73597,73598],{},"log(localStorage.getItem('obj'))",[19,73600,73601],{},[3583,73602],{"alt":71,"src":73603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73605,73606],{},"发现直接存对象是使用不了的!!!",[24047,73608,73610],{"id":73609},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73612,73613],{},[3583,73614],{"alt":71,"src":73615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[66,73617,73619],{"className":52665,"code":73618,"language":52667,"meta":71,"style":71},"\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",[73,73620,73621,73629,73639,73649,73658,73666,73670,73674,73700,73719,73727,73731,73736,73741],{"__ignoreMap":71},[76,73622,73623,73625,73627],{"class":78,"line":79},[76,73624,584],{"class":90},[76,73626,53845],{"class":53332},[76,73628,53339],{"class":90},[76,73630,73631,73633,73635,73637],{"class":78,"line":94},[76,73632,13275],{"class":82},[76,73634,71999],{"class":119},[76,73636,15617],{"class":82},[76,73638,17623],{"class":90},[76,73640,73641,73644,73647],{"class":78,"line":133},[76,73642,73643],{"class":90},"      uname: ",[76,73645,73646],{"class":126},"'pink老师'",[76,73648,33509],{"class":90},[76,73650,73651,73654,73656],{"class":78,"line":145},[76,73652,73653],{"class":90},"      age: ",[76,73655,1214],{"class":119},[76,73657,33509],{"class":90},[76,73659,73660,73663],{"class":78,"line":152},[76,73661,73662],{"class":90},"      gender: ",[76,73664,73665],{"class":126},"'女'\n",[76,73667,73668],{"class":78,"line":157},[76,73669,4283],{"class":90},[76,73671,73672],{"class":78,"line":246},[76,73673,73574],{"class":540},[76,73675,73676,73679,73682,73684,73687,73689,73692,73694,73697],{"class":78,"line":251},[76,73677,73678],{"class":90},"  localStorage.",[76,73680,73681],{"class":86},"setItem",[76,73683,123],{"class":90},[76,73685,73686],{"class":126},"'obj'",[76,73688,405],{"class":90},[76,73690,73691],{"class":119},"JSON",[76,73693,2819],{"class":90},[76,73695,73696],{"class":86},"stringify",[76,73698,73699],{"class":90},"(obj))\n",[76,73701,73702,73705,73707,73710,73713,73715,73717],{"class":78,"line":257},[76,73703,73704],{"class":90},"  console.",[76,73706,60277],{"class":86},[76,73708,73709],{"class":90},"(localStorage.",[76,73711,73712],{"class":86},"getItem",[76,73714,123],{"class":90},[76,73716,73686],{"class":126},[76,73718,656],{"class":90},[76,73720,73721,73723,73725],{"class":78,"line":641},[76,73722,54449],{"class":90},[76,73724,53845],{"class":53332},[76,73726,53339],{"class":90},[76,73728,73729],{"class":78,"line":646},[76,73730,72648],{"class":90},[76,73732,73733],{"class":78,"line":659},[76,73734,73735],{"class":90},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[76,73737,73738],{"class":78,"line":1608},[76,73739,73740],{"class":90},"  类型是字符串的\n",[76,73742,73743],{"class":78,"line":1632},[76,73744,73745],{"class":90},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24047,73747,73749],{"id":73748},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73751,73752],{},[3583,73753],{"alt":71,"src":73754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73756,73757],{},[3583,73758],{"alt":71,"src":73759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[66,73761,73763],{"className":55099,"code":73762,"language":55101,"meta":71,"style":71},"  \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",[73,73764,73765,73773,73777,73781,73785,73789,73793,73798,73803,73808,73813,73818,73823,73828,73833],{"__ignoreMap":71},[76,73766,73767,73769,73771],{"class":78,"line":79},[76,73768,54176],{"class":90},[76,73770,53845],{"class":53332},[76,73772,53339],{"class":90},[76,73774,73775],{"class":78,"line":94},[76,73776,73550],{"class":90},[76,73778,73779],{"class":78,"line":133},[76,73780,73555],{"class":90},[76,73782,73783],{"class":78,"line":145},[76,73784,73560],{"class":90},[76,73786,73787],{"class":78,"line":152},[76,73788,73565],{"class":90},[76,73790,73791],{"class":78,"line":157},[76,73792,4283],{"class":90},[76,73794,73795],{"class":78,"line":246},[76,73796,73797],{"class":90},"    \u002F\u002F 1.存储复杂数据类型\n",[76,73799,73800],{"class":78,"line":251},[76,73801,73802],{"class":90},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[76,73804,73805],{"class":78,"line":257},[76,73806,73807],{"class":90},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[76,73809,73810],{"class":78,"line":641},[76,73811,73812],{"class":90},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[76,73814,73815],{"class":78,"line":646},[76,73816,73817],{"class":90},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[76,73819,73820],{"class":78,"line":659},[76,73821,73822],{"class":90},"    \u002F\u002F 取\n",[76,73824,73825],{"class":78,"line":1608},[76,73826,73827],{"class":90},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[76,73829,73830],{"class":78,"line":1632},[76,73831,73832],{"class":90},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[76,73834,73835,73837,73839],{"class":78,"line":1637},[76,73836,54449],{"class":90},[76,73838,53845],{"class":53332},[76,73840,53339],{"class":90},[19,73842,73843],{},[3583,73844],{"alt":71,"src":73845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[889,73847,73849],{"id":73848},"_356-数组map方法","3.5.6 数组map方法",[19,73851,73852],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73854,73855],{},[3583,73856],{"alt":71,"src":73857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73859,73860],{},[3583,73861],{"alt":71,"src":73862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73864,73865,73868],{},[2416,73866,73867],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73870,73871],{},"map有返回值，但是forEach没有返回值",[19,73873,73874],{},"map是个方法。用的时候要加 ()",[19,73876,73877],{},"map返回的是一个数组",[889,73879,73881],{"id":73880},"_357-数组中join方法","3.5.7 数组中join方法",[19,73883,73884],{},[3583,73885],{"alt":71,"src":73886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73888,73889],{},"类似于python中拼接字符串一样！",[26,73891,73892,73895,73898],{},[29,73893,73894],{},"小括号为空则逗号分开",[29,73896,73897],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73899,73900],{},"小括号用啥符号就用进行分割",[889,73902,73904],{"id":73903},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73906,73907,73910,73913,73916,73919],{},[29,73908,73909],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73911,73912],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73914,73915],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73917,73918],{},"return可以实现函数的结束",[29,73920,73921],{},"禁止跳转是 preventDefault() 不要忘记",[66,73923,73925],{"className":52665,"code":73924,"language":52667,"meta":71,"style":71},"\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",[73,73926,73927,73937,73951,73955,73963,73977,73997,74009,74017,74023,74033,74043,74047,74051,74057,74067,74079,74083,74087,74094,74106,74120,74130,74134,74138,74145,74152,74159,74171,74183,74193,74205,74209,74213,74220,74227,74239,74251,74261,74273,74303,74307,74311,74318,74330,74342,74366,74376,74386,74390,74394,74402,74413,74425,74437,74449,74466,74478,74490,74494,74498,74505,74517,74529,74541,74552,74570,74583,74595,74619,74630,74634,74638,74646,74656,74660,74664,74670,74682,74693,74703,74707,74711,74717,74739,74743,74747,74753,74759,74771,74781,74793,74823,74836,74853,74857,74861,74872,74894,74904,74908,74912,74925,74935,74947,74959,74971,74983,74993,75003,75013,75024,75037,75041,75049,75057,75061,75069,75082,75102,75135,75168,75201,75227,75245,75263,75271,75297,75315,75333,75351,75369,75387,75395,75403,75421,75429,75458,75466,75474,75482,75495,75507,75519,75531,75543,75555,75568,75580,75588,75596,75604,75609,75614,75618,75622,75626,75630,75634,75638,75643,75648,75653,75658,75666,75674,75682,75687,75692,75697,75702,75707,75712,75717,75722,75727,75732,75737,75742,75747,75752,75756,75761,75766,75776,75785,75789,75794,75803,75819,75861,75901,75940,76005,76013,76017,76022,76040,76048,76053,76058,76088,76094,76099,76112,76124,76136,76148,76160,76172,76184,76188,76198,76202,76207,76212,76216,76225,76229,76234,76239,76258,76263,76283,76287,76292,76296,76301,76319,76337,76355,76374,76393,76412,76417,76423,76444,76450,76459,76465,76471,76477,76504,76517,76522,76532,76538,76544,76550,76556,76561,76567,76573,76579,76585,76618,76623,76628,76633,76638,76644,76650,76656,76667,76672,76678,76685,76699,76705,76729,76734,76739,76745,76751,76772,76778,76791,76797,76803,76809,76815,76820,76826,76832,76838,76856,76870,76876,76884,76890,76912,76917,76922,76927,76932,76937,76946,76955,76960],{"__ignoreMap":71},[76,73928,73929,73931,73933,73935],{"class":78,"line":79},[76,73930,53329],{"class":90},[76,73932,53333],{"class":53332},[76,73934,53336],{"class":86},[76,73936,53339],{"class":90},[76,73938,73939,73941,73943,73945,73947,73949],{"class":78,"line":94},[76,73940,584],{"class":90},[76,73942,52667],{"class":53332},[76,73944,53348],{"class":86},[76,73946,370],{"class":90},[76,73948,53353],{"class":126},[76,73950,53339],{"class":90},[76,73952,73953],{"class":78,"line":133},[76,73954,149],{"emptyLinePlaceholder":148},[76,73956,73957,73959,73961],{"class":78,"line":145},[76,73958,584],{"class":90},[76,73960,53366],{"class":53332},[76,73962,53339],{"class":90},[76,73964,73965,73967,73969,73971,73973,73975],{"class":78,"line":152},[76,73966,54176],{"class":90},[76,73968,53376],{"class":53332},[76,73970,53379],{"class":86},[76,73972,370],{"class":90},[76,73974,53384],{"class":126},[76,73976,53339],{"class":90},[76,73978,73979,73981,73983,73985,73987,73989,73991,73993,73995],{"class":78,"line":157},[76,73980,54176],{"class":90},[76,73982,53376],{"class":53332},[76,73984,16972],{"class":86},[76,73986,370],{"class":90},[76,73988,53423],{"class":126},[76,73990,53403],{"class":86},[76,73992,370],{"class":90},[76,73994,53430],{"class":126},[76,73996,53339],{"class":90},[76,73998,73999,74001,74003,74005,74007],{"class":78,"line":246},[76,74000,54176],{"class":90},[76,74002,53439],{"class":53332},[76,74004,53442],{"class":90},[76,74006,53439],{"class":53332},[76,74008,53339],{"class":90},[76,74010,74011,74013,74015],{"class":78,"line":251},[76,74012,54176],{"class":90},[76,74014,2178],{"class":53332},[76,74016,53339],{"class":90},[76,74018,74019,74021],{"class":78,"line":257},[76,74020,8482],{"class":53332},[76,74022,17623],{"class":90},[76,74024,74025,74027,74029,74031],{"class":78,"line":641},[76,74026,56726],{"class":119},[76,74028,53469],{"class":90},[76,74030,1294],{"class":119},[76,74032,3415],{"class":90},[76,74034,74035,74037,74039,74041],{"class":78,"line":646},[76,74036,56737],{"class":119},[76,74038,53469],{"class":90},[76,74040,1294],{"class":119},[76,74042,3415],{"class":90},[76,74044,74045],{"class":78,"line":659},[76,74046,4283],{"class":90},[76,74048,74049],{"class":78,"line":1608},[76,74050,149],{"emptyLinePlaceholder":148},[76,74052,74053,74055],{"class":78,"line":1632},[76,74054,59309],{"class":53332},[76,74056,17623],{"class":90},[76,74058,74059,74061,74063,74065],{"class":78,"line":1637},[76,74060,59316],{"class":119},[76,74062,53469],{"class":90},[76,74064,53624],{"class":119},[76,74066,3415],{"class":90},[76,74068,74069,74071,74073,74075,74077],{"class":78,"line":1642},[76,74070,64105],{"class":119},[76,74072,53469],{"class":90},[76,74074,408],{"class":119},[76,74076,53524],{"class":82},[76,74078,3415],{"class":90},[76,74080,74081],{"class":78,"line":1652},[76,74082,4283],{"class":90},[76,74084,74085],{"class":78,"line":1660},[76,74086,149],{"emptyLinePlaceholder":148},[76,74088,74089,74092],{"class":78,"line":1683},[76,74090,74091],{"class":86},"    .info",[76,74093,17623],{"class":90},[76,74095,74096,74098,74100,74102,74104],{"class":78,"line":1698},[76,74097,56802],{"class":119},[76,74099,53469],{"class":90},[76,74101,53521],{"class":119},[76,74103,53524],{"class":82},[76,74105,3415],{"class":90},[76,74107,74108,74110,74112,74114,74116,74118],{"class":78,"line":1711},[76,74109,56737],{"class":119},[76,74111,53469],{"class":90},[76,74113,402],{"class":119},[76,74115,53524],{"class":82},[76,74117,53588],{"class":119},[76,74119,3415],{"class":90},[76,74121,74122,74124,74126,74128],{"class":78,"line":1717},[76,74123,59316],{"class":119},[76,74125,53469],{"class":90},[76,74127,53624],{"class":119},[76,74129,3415],{"class":90},[76,74131,74132],{"class":78,"line":1728},[76,74133,4283],{"class":90},[76,74135,74136],{"class":78,"line":1740},[76,74137,149],{"emptyLinePlaceholder":148},[76,74139,74140,74143],{"class":78,"line":1746},[76,74141,74142],{"class":86},"    .uname",[76,74144,33509],{"class":90},[76,74146,74147,74150],{"class":78,"line":1751},[76,74148,74149],{"class":86},"    .age",[76,74151,33509],{"class":90},[76,74153,74154,74157],{"class":78,"line":1756},[76,74155,74156],{"class":86},"    .salary",[76,74158,17623],{"class":90},[76,74160,74161,74163,74165,74167,74169],{"class":78,"line":1766},[76,74162,56802],{"class":119},[76,74164,53469],{"class":90},[76,74166,2575],{"class":119},[76,74168,53524],{"class":82},[76,74170,3415],{"class":90},[76,74172,74173,74175,74177,74179,74181],{"class":78,"line":1773},[76,74174,56816],{"class":119},[76,74176,53469],{"class":90},[76,74178,408],{"class":119},[76,74180,53524],{"class":82},[76,74182,3415],{"class":90},[76,74184,74185,74187,74189,74191],{"class":78,"line":1793},[76,74186,63808],{"class":119},[76,74188,53469],{"class":90},[76,74190,56768],{"class":119},[76,74192,3415],{"class":90},[76,74194,74195,74197,74199,74201,74203],{"class":78,"line":1806},[76,74196,63778],{"class":119},[76,74198,53469],{"class":90},[76,74200,2836],{"class":119},[76,74202,53524],{"class":82},[76,74204,3415],{"class":90},[76,74206,74207],{"class":78,"line":1817},[76,74208,4283],{"class":90},[76,74210,74211],{"class":78,"line":1822},[76,74212,149],{"emptyLinePlaceholder":148},[76,74214,74215,74218],{"class":78,"line":1835},[76,74216,74217],{"class":86},"    .gender",[76,74219,33509],{"class":90},[76,74221,74222,74225],{"class":78,"line":1847},[76,74223,74224],{"class":86},"    .city",[76,74226,17623],{"class":90},[76,74228,74229,74231,74233,74235,74237],{"class":78,"line":1852},[76,74230,56802],{"class":119},[76,74232,53469],{"class":90},[76,74234,2575],{"class":119},[76,74236,53524],{"class":82},[76,74238,3415],{"class":90},[76,74240,74241,74243,74245,74247,74249],{"class":78,"line":1862},[76,74242,56816],{"class":119},[76,74244,53469],{"class":90},[76,74246,3083],{"class":119},[76,74248,53524],{"class":82},[76,74250,3415],{"class":90},[76,74252,74253,74255,74257,74259],{"class":78,"line":1874},[76,74254,63808],{"class":119},[76,74256,53469],{"class":90},[76,74258,56768],{"class":119},[76,74260,3415],{"class":90},[76,74262,74263,74265,74267,74269,74271],{"class":78,"line":1879},[76,74264,63778],{"class":119},[76,74266,53469],{"class":90},[76,74268,2836],{"class":119},[76,74270,53524],{"class":82},[76,74272,3415],{"class":90},[76,74274,74275,74277,74279,74281,74283,74285,74288,74290,74292,74294,74297,74299,74301],{"class":78,"line":1884},[76,74276,64005],{"class":119},[76,74278,53469],{"class":90},[76,74280,669],{"class":119},[76,74282,53524],{"class":82},[76,74284,53553],{"class":119},[76,74286,74287],{"class":119}," rgb",[76,74289,123],{"class":90},[76,74291,2133],{"class":119},[76,74293,405],{"class":90},[76,74295,74296],{"class":119},"197",[76,74298,405],{"class":90},[76,74300,74296],{"class":119},[76,74302,4807],{"class":90},[76,74304,74305],{"class":78,"line":1889},[76,74306,4283],{"class":90},[76,74308,74309],{"class":78,"line":1900},[76,74310,149],{"emptyLinePlaceholder":148},[76,74312,74313,74316],{"class":78,"line":1906},[76,74314,74315],{"class":53332},"    button",[76,74317,17623],{"class":90},[76,74319,74320,74322,74324,74326,74328],{"class":78,"line":1924},[76,74321,56816],{"class":119},[76,74323,53469],{"class":90},[76,74325,3083],{"class":119},[76,74327,53524],{"class":82},[76,74329,3415],{"class":90},[76,74331,74332,74334,74336,74338,74340],{"class":78,"line":1929},[76,74333,56802],{"class":119},[76,74335,53469],{"class":90},[76,74337,2746],{"class":119},[76,74339,53524],{"class":82},[76,74341,3415],{"class":90},[76,74343,74344,74346,74348,74351,74353,74355,74357,74360,74362,74364],{"class":78,"line":1944},[76,74345,56915],{"class":119},[76,74347,53469],{"class":90},[76,74349,74350],{"class":119},"rgb",[76,74352,123],{"class":90},[76,74354,3223],{"class":119},[76,74356,405],{"class":90},[76,74358,74359],{"class":119},"187",[76,74361,405],{"class":90},[76,74363,2563],{"class":119},[76,74365,4807],{"class":90},[76,74367,74368,74370,74372,74374],{"class":78,"line":1950},[76,74369,59446],{"class":119},[76,74371,53469],{"class":90},[76,74373,62870],{"class":119},[76,74375,3415],{"class":90},[76,74377,74378,74380,74382,74384],{"class":78,"line":1965},[76,74379,64005],{"class":119},[76,74381,53469],{"class":90},[76,74383,1294],{"class":119},[76,74385,3415],{"class":90},[76,74387,74388],{"class":78,"line":1971},[76,74389,4283],{"class":90},[76,74391,74392],{"class":78,"line":1985},[76,74393,149],{"emptyLinePlaceholder":148},[76,74395,74396,74398,74400],{"class":78,"line":1991},[76,74397,74315],{"class":53332},[76,74399,53720],{"class":53332},[76,74401,17623],{"class":90},[76,74403,74404,74406,74408,74411],{"class":78,"line":2005},[76,74405,57040],{"class":119},[76,74407,53469],{"class":90},[76,74409,74410],{"class":119},"inline-block",[76,74412,3415],{"class":90},[76,74414,74415,74417,74419,74421,74423],{"class":78,"line":2017},[76,74416,56802],{"class":119},[76,74418,53469],{"class":90},[76,74420,402],{"class":119},[76,74422,53524],{"class":82},[76,74424,3415],{"class":90},[76,74426,74427,74429,74431,74433,74435],{"class":78,"line":2023},[76,74428,56816],{"class":119},[76,74430,53469],{"class":90},[76,74432,402],{"class":119},[76,74434,53524],{"class":82},[76,74436,3415],{"class":90},[76,74438,74439,74441,74443,74445,74447],{"class":78,"line":2031},[76,74440,59389],{"class":119},[76,74442,53469],{"class":90},[76,74444,2735],{"class":119},[76,74446,53524],{"class":82},[76,74448,3415],{"class":90},[76,74450,74451,74453,74455,74457,74459,74461,74464],{"class":78,"line":11880},[76,74452,64005],{"class":119},[76,74454,53469],{"class":90},[76,74456,669],{"class":119},[76,74458,53524],{"class":82},[76,74460,53553],{"class":119},[76,74462,74463],{"class":119}," #fff",[76,74465,3415],{"class":90},[76,74467,74468,74470,74472,74474,74476],{"class":78,"line":11901},[76,74469,57165],{"class":119},[76,74471,53469],{"class":90},[76,74473,2583],{"class":119},[76,74475,53524],{"class":82},[76,74477,3415],{"class":90},[76,74479,74480,74482,74484,74486,74488],{"class":78,"line":11907},[76,74481,63778],{"class":119},[76,74483,53469],{"class":90},[76,74485,669],{"class":119},[76,74487,53524],{"class":82},[76,74489,3415],{"class":90},[76,74491,74492],{"class":78,"line":11921},[76,74493,4283],{"class":90},[76,74495,74496],{"class":78,"line":11927},[76,74497,149],{"emptyLinePlaceholder":148},[76,74499,74500,74503],{"class":78,"line":11954},[76,74501,74502],{"class":86},"    .total",[76,74504,17623],{"class":90},[76,74506,74507,74509,74511,74513,74515],{"class":78,"line":11963},[76,74508,56802],{"class":119},[76,74510,53469],{"class":90},[76,74512,63657],{"class":119},[76,74514,53524],{"class":82},[76,74516,3415],{"class":90},[76,74518,74519,74521,74523,74525,74527],{"class":78,"line":11969},[76,74520,56816],{"class":119},[76,74522,53469],{"class":90},[76,74524,2665],{"class":119},[76,74526,53524],{"class":82},[76,74528,3415],{"class":90},[76,74530,74531,74533,74535,74537,74539],{"class":78,"line":11977},[76,74532,59389],{"class":119},[76,74534,53469],{"class":90},[76,74536,2665],{"class":119},[76,74538,53524],{"class":82},[76,74540,3415],{"class":90},[76,74542,74543,74545,74547,74550],{"class":78,"line":11982},[76,74544,59316],{"class":119},[76,74546,53469],{"class":90},[76,74548,74549],{"class":119},"right",[76,74551,3415],{"class":90},[76,74553,74554,74556,74558,74560,74562,74564,74566,74568],{"class":78,"line":18654},[76,74555,56737],{"class":119},[76,74557,53469],{"class":90},[76,74559,2665],{"class":119},[76,74561,53524],{"class":82},[76,74563,53588],{"class":119},[76,74565,4134],{"class":119},[76,74567,53524],{"class":82},[76,74569,3415],{"class":90},[76,74571,74572,74575,74577,74579,74581],{"class":78,"line":18660},[76,74573,74574],{"class":119},"      padding-right",[76,74576,53469],{"class":90},[76,74578,402],{"class":119},[76,74580,53524],{"class":82},[76,74582,3415],{"class":90},[76,74584,74585,74587,74589,74591,74593],{"class":78,"line":18683},[76,74586,56953],{"class":119},[76,74588,53469],{"class":90},[76,74590,2785],{"class":119},[76,74592,53524],{"class":82},[76,74594,3415],{"class":90},[76,74596,74597,74599,74601,74603,74605,74608,74610,74613,74615,74617],{"class":78,"line":18689},[76,74598,56915],{"class":119},[76,74600,53469],{"class":90},[76,74602,74350],{"class":119},[76,74604,123],{"class":90},[76,74606,74607],{"class":119},"237",[76,74609,405],{"class":90},[76,74611,74612],{"class":119},"235",[76,74614,405],{"class":90},[76,74616,74612],{"class":119},[76,74618,4807],{"class":90},[76,74620,74621,74624,74626,74628],{"class":78,"line":18712},[76,74622,74623],{"class":119},"      box-sizing",[76,74625,53469],{"class":90},[76,74627,62534],{"class":119},[76,74629,3415],{"class":90},[76,74631,74632],{"class":78,"line":18726},[76,74633,4283],{"class":90},[76,74635,74636],{"class":78,"line":18746},[76,74637,149],{"emptyLinePlaceholder":148},[76,74639,74640,74642,74644],{"class":78,"line":18752},[76,74641,74502],{"class":86},[76,74643,53720],{"class":53332},[76,74645,17623],{"class":90},[76,74647,74648,74650,74652,74654],{"class":78,"line":18763},[76,74649,59446],{"class":119},[76,74651,53469],{"class":90},[76,74653,59451],{"class":119},[76,74655,3415],{"class":90},[76,74657,74658],{"class":78,"line":18786},[76,74659,4283],{"class":90},[76,74661,74662],{"class":78,"line":18808},[76,74663,149],{"emptyLinePlaceholder":148},[76,74665,74666,74668],{"class":78,"line":18813},[76,74667,67051],{"class":53332},[76,74669,17623],{"class":90},[76,74671,74672,74674,74676,74678,74680],{"class":78,"line":18819},[76,74673,56802],{"class":119},[76,74675,53469],{"class":90},[76,74677,63657],{"class":119},[76,74679,53524],{"class":82},[76,74681,3415],{"class":90},[76,74683,74684,74686,74688,74691],{"class":78,"line":18833},[76,74685,56737],{"class":119},[76,74687,53469],{"class":90},[76,74689,74690],{"class":119},"auto",[76,74692,3415],{"class":90},[76,74694,74695,74697,74699,74701],{"class":78,"line":18846},[76,74696,67058],{"class":119},[76,74698,53469],{"class":90},[76,74700,67063],{"class":119},[76,74702,3415],{"class":90},[76,74704,74705],{"class":78,"line":18851},[76,74706,4283],{"class":90},[76,74708,74709],{"class":78,"line":18865},[76,74710,149],{"emptyLinePlaceholder":148},[76,74712,74713,74715],{"class":78,"line":18870},[76,74714,67143],{"class":53332},[76,74716,17623],{"class":90},[76,74718,74719,74721,74723,74725,74727,74729,74731,74733,74735,74737],{"class":78,"line":18876},[76,74720,56915],{"class":119},[76,74722,53469],{"class":90},[76,74724,74350],{"class":119},[76,74726,123],{"class":90},[76,74728,74607],{"class":119},[76,74730,405],{"class":90},[76,74732,74612],{"class":119},[76,74734,405],{"class":90},[76,74736,74612],{"class":119},[76,74738,4807],{"class":90},[76,74740,74741],{"class":78,"line":18881},[76,74742,4283],{"class":90},[76,74744,74745],{"class":78,"line":18895},[76,74746,149],{"emptyLinePlaceholder":148},[76,74748,74749,74751],{"class":78,"line":18900},[76,74750,67143],{"class":53332},[76,74752,33509],{"class":90},[76,74754,74755,74757],{"class":78,"line":18905},[76,74756,67209],{"class":53332},[76,74758,17623],{"class":90},[76,74760,74761,74763,74765,74767,74769],{"class":78,"line":18919},[76,74762,56816],{"class":119},[76,74764,53469],{"class":90},[76,74766,2537],{"class":119},[76,74768,53524],{"class":82},[76,74770,3415],{"class":90},[76,74772,74773,74775,74777,74779],{"class":78,"line":18931},[76,74774,59316],{"class":119},[76,74776,53469],{"class":90},[76,74778,25785],{"class":119},[76,74780,3415],{"class":90},[76,74782,74783,74785,74787,74789,74791],{"class":78,"line":18936},[76,74784,56953],{"class":119},[76,74786,53469],{"class":90},[76,74788,2810],{"class":119},[76,74790,53524],{"class":82},[76,74792,3415],{"class":90},[76,74794,74795,74797,74799,74801,74803,74805,74807,74809,74812,74814,74817,74819,74821],{"class":78,"line":18949},[76,74796,64005],{"class":119},[76,74798,53469],{"class":90},[76,74800,669],{"class":119},[76,74802,53524],{"class":82},[76,74804,53553],{"class":119},[76,74806,74287],{"class":119},[76,74808,123],{"class":90},[76,74810,74811],{"class":119},"228",[76,74813,405],{"class":90},[76,74815,74816],{"class":119},"225",[76,74818,405],{"class":90},[76,74820,74816],{"class":119},[76,74822,4807],{"class":90},[76,74824,74825,74828,74830,74832,74834],{"class":78,"line":18954},[76,74826,74827],{"class":119},"      padding-left",[76,74829,53469],{"class":90},[76,74831,2583],{"class":119},[76,74833,53524],{"class":82},[76,74835,3415],{"class":90},[76,74837,74838,74840,74842,74844,74847,74849,74851],{"class":78,"line":18959},[76,74839,63888],{"class":119},[76,74841,53469],{"class":90},[76,74843,30170],{"class":119},[76,74845,74846],{"class":119}," linear",[76,74848,63895],{"class":119},[76,74850,2954],{"class":82},[76,74852,3415],{"class":90},[76,74854,74855],{"class":78,"line":18964},[76,74856,4283],{"class":90},[76,74858,74859],{"class":78,"line":18977},[76,74860,149],{"emptyLinePlaceholder":148},[76,74862,74863,74866,74868,74870],{"class":78,"line":18982},[76,74864,74865],{"class":53332},"    tbody",[76,74867,72172],{"class":53332},[76,74869,62968],{"class":86},[76,74871,17623],{"class":90},[76,74873,74874,74876,74878,74880,74882,74884,74886,74888,74890,74892],{"class":78,"line":34671},[76,74875,56915],{"class":119},[76,74877,53469],{"class":90},[76,74879,74350],{"class":119},[76,74881,123],{"class":90},[76,74883,74607],{"class":119},[76,74885,405],{"class":90},[76,74887,74612],{"class":119},[76,74889,405],{"class":90},[76,74891,74612],{"class":119},[76,74893,4807],{"class":90},[76,74895,74896,74898,74900,74902],{"class":78,"line":34677},[76,74897,64053],{"class":119},[76,74899,53469],{"class":90},[76,74901,64058],{"class":119},[76,74903,3415],{"class":90},[76,74905,74906],{"class":78,"line":34683},[76,74907,4283],{"class":90},[76,74909,74910],{"class":78,"line":34689},[76,74911,149],{"emptyLinePlaceholder":148},[76,74913,74914,74916,74918,74921,74923],{"class":78,"line":34695},[76,74915,74865],{"class":53332},[76,74917,72172],{"class":53332},[76,74919,74920],{"class":53332}," td",[76,74922,3519],{"class":53332},[76,74924,17623],{"class":90},[76,74926,74927,74929,74931,74933],{"class":78,"line":34706},[76,74928,57040],{"class":119},[76,74930,53469],{"class":90},[76,74932,62897],{"class":119},[76,74934,3415],{"class":90},[76,74936,74937,74939,74941,74943,74945],{"class":78,"line":34712},[76,74938,56802],{"class":119},[76,74940,53469],{"class":90},[76,74942,3164],{"class":119},[76,74944,53524],{"class":82},[76,74946,3415],{"class":90},[76,74948,74949,74951,74953,74955,74957],{"class":78,"line":34732},[76,74950,56816],{"class":119},[76,74952,53469],{"class":90},[76,74954,3083],{"class":119},[76,74956,53524],{"class":82},[76,74958,3415],{"class":90},[76,74960,74961,74963,74965,74967,74969],{"class":78,"line":34738},[76,74962,59389],{"class":119},[76,74964,53469],{"class":90},[76,74966,3083],{"class":119},[76,74968,53524],{"class":82},[76,74970,3415],{"class":90},[76,74972,74973,74975,74977,74979,74981],{"class":78,"line":34749},[76,74974,64105],{"class":119},[76,74976,53469],{"class":90},[76,74978,2345],{"class":119},[76,74980,53524],{"class":82},[76,74982,3415],{"class":90},[76,74984,74985,74987,74989,74991],{"class":78,"line":34755},[76,74986,59446],{"class":119},[76,74988,53469],{"class":90},[76,74990,62870],{"class":119},[76,74992,3415],{"class":90},[76,74994,74995,74997,74999,75001],{"class":78,"line":34761},[76,74996,59316],{"class":119},[76,74998,53469],{"class":90},[76,75000,53624],{"class":119},[76,75002,3415],{"class":90},[76,75004,75005,75007,75009,75011],{"class":78,"line":34767},[76,75006,65998],{"class":119},[76,75008,53469],{"class":90},[76,75010,56768],{"class":119},[76,75012,3415],{"class":90},[76,75014,75015,75017,75019,75022],{"class":78,"line":34773},[76,75016,56915],{"class":119},[76,75018,53469],{"class":90},[76,75020,75021],{"class":119},"orange",[76,75023,3415],{"class":90},[76,75025,75026,75028,75030,75033,75035],{"class":78,"line":34779},[76,75027,57165],{"class":119},[76,75029,53469],{"class":90},[76,75031,75032],{"class":119},"12.5",[76,75034,53524],{"class":82},[76,75036,3415],{"class":90},[76,75038,75039],{"class":78,"line":34785},[76,75040,4283],{"class":90},[76,75042,75043,75045,75047],{"class":78,"line":34791},[76,75044,54449],{"class":90},[76,75046,2178],{"class":53332},[76,75048,53339],{"class":90},[76,75050,75051,75053,75055],{"class":78,"line":34811},[76,75052,53817],{"class":90},[76,75054,53366],{"class":53332},[76,75056,53339],{"class":90},[76,75058,75059],{"class":78,"line":34817},[76,75060,149],{"emptyLinePlaceholder":148},[76,75062,75063,75065,75067],{"class":78,"line":34833},[76,75064,584],{"class":90},[76,75066,53832],{"class":53332},[76,75068,53339],{"class":90},[76,75070,75071,75073,75075,75078,75080],{"class":78,"line":34839},[76,75072,54176],{"class":90},[76,75074,14],{"class":53332},[76,75076,75077],{"class":90},">学生就业统计表\u003C\u002F",[76,75079,14],{"class":53332},[76,75081,53339],{"class":90},[76,75083,75084,75086,75088,75090,75092,75094,75096,75098,75100],{"class":78,"line":34853},[76,75085,54176],{"class":90},[76,75087,68653],{"class":53332},[76,75089,55518],{"class":86},[76,75091,370],{"class":90},[76,75093,64692],{"class":126},[76,75095,71098],{"class":86},[76,75097,370],{"class":90},[76,75099,33818],{"class":126},[76,75101,53339],{"class":90},[76,75103,75104,75106,75108,75110,75112,75114,75116,75118,75120,75122,75124,75127,75129,75131,75133],{"class":78,"line":34859},[76,75105,53373],{"class":90},[76,75107,1673],{"class":53332},[76,75109,55855],{"class":86},[76,75111,370],{"class":90},[76,75113,64727],{"class":126},[76,75115,16972],{"class":86},[76,75117,370],{"class":90},[76,75119,71124],{"class":126},[76,75121,63048],{"class":86},[76,75123,370],{"class":90},[76,75125,75126],{"class":126},"\"姓名\"",[76,75128,55518],{"class":86},[76,75130,370],{"class":90},[76,75132,71124],{"class":126},[76,75134,53339],{"class":90},[76,75136,75137,75139,75141,75143,75145,75147,75149,75151,75153,75155,75157,75160,75162,75164,75166],{"class":78,"line":34874},[76,75138,53373],{"class":90},[76,75140,1673],{"class":53332},[76,75142,55855],{"class":86},[76,75144,370],{"class":90},[76,75146,64727],{"class":126},[76,75148,16972],{"class":86},[76,75150,370],{"class":90},[76,75152,71152],{"class":126},[76,75154,63048],{"class":86},[76,75156,370],{"class":90},[76,75158,75159],{"class":126},"\"年龄\"",[76,75161,55518],{"class":86},[76,75163,370],{"class":90},[76,75165,71152],{"class":126},[76,75167,53339],{"class":90},[76,75169,75170,75172,75174,75176,75178,75180,75182,75184,75186,75188,75190,75193,75195,75197,75199],{"class":78,"line":34880},[76,75171,53373],{"class":90},[76,75173,1673],{"class":53332},[76,75175,55855],{"class":86},[76,75177,370],{"class":90},[76,75179,64727],{"class":126},[76,75181,16972],{"class":86},[76,75183,370],{"class":90},[76,75185,71254],{"class":126},[76,75187,63048],{"class":86},[76,75189,370],{"class":90},[76,75191,75192],{"class":126},"\"薪资\"",[76,75194,55518],{"class":86},[76,75196,370],{"class":90},[76,75198,71254],{"class":126},[76,75200,53339],{"class":90},[76,75202,75203,75205,75207,75209,75211,75213,75215,75217,75219,75221,75223,75225],{"class":78,"line":34889},[76,75204,53373],{"class":90},[76,75206,71172],{"class":53332},[76,75208,16972],{"class":86},[76,75210,370],{"class":90},[76,75212,71179],{"class":126},[76,75214,17011],{"class":86},[76,75216,370],{"class":90},[76,75218,9730],{"class":126},[76,75220,55518],{"class":86},[76,75222,370],{"class":90},[76,75224,71179],{"class":126},[76,75226,53339],{"class":90},[76,75228,75229,75231,75233,75235,75237,75239,75241,75243],{"class":78,"line":34895},[76,75230,57265],{"class":90},[76,75232,71194],{"class":53332},[76,75234,68679],{"class":86},[76,75236,370],{"class":90},[76,75238,12018],{"class":126},[76,75240,71203],{"class":90},[76,75242,71194],{"class":53332},[76,75244,53339],{"class":90},[76,75246,75247,75249,75251,75253,75255,75257,75259,75261],{"class":78,"line":34904},[76,75248,57265],{"class":90},[76,75250,71194],{"class":53332},[76,75252,68679],{"class":86},[76,75254,370],{"class":90},[76,75256,12087],{"class":126},[76,75258,71222],{"class":90},[76,75260,71194],{"class":53332},[76,75262,53339],{"class":90},[76,75264,75265,75267,75269],{"class":78,"line":34910},[76,75266,53808],{"class":90},[76,75268,71172],{"class":53332},[76,75270,53339],{"class":90},[76,75272,75273,75275,75277,75279,75281,75283,75285,75287,75289,75291,75293,75295],{"class":78,"line":34916},[76,75274,53373],{"class":90},[76,75276,71172],{"class":53332},[76,75278,16972],{"class":86},[76,75280,370],{"class":90},[76,75282,71276],{"class":126},[76,75284,17011],{"class":86},[76,75286,370],{"class":90},[76,75288,9730],{"class":126},[76,75290,55518],{"class":86},[76,75292,370],{"class":90},[76,75294,71276],{"class":126},[76,75296,53339],{"class":90},[76,75298,75299,75301,75303,75305,75307,75309,75311,75313],{"class":78,"line":34925},[76,75300,57265],{"class":90},[76,75302,71194],{"class":53332},[76,75304,68679],{"class":86},[76,75306,370],{"class":90},[76,75308,71297],{"class":126},[76,75310,71300],{"class":90},[76,75312,71194],{"class":53332},[76,75314,53339],{"class":90},[76,75316,75317,75319,75321,75323,75325,75327,75329,75331],{"class":78,"line":34931},[76,75318,57265],{"class":90},[76,75320,71194],{"class":53332},[76,75322,68679],{"class":86},[76,75324,370],{"class":90},[76,75326,71317],{"class":126},[76,75328,71320],{"class":90},[76,75330,71194],{"class":53332},[76,75332,53339],{"class":90},[76,75334,75335,75337,75339,75341,75343,75345,75347,75349],{"class":78,"line":34942},[76,75336,57265],{"class":90},[76,75338,71194],{"class":53332},[76,75340,68679],{"class":86},[76,75342,370],{"class":90},[76,75344,71337],{"class":126},[76,75346,71340],{"class":90},[76,75348,71194],{"class":53332},[76,75350,53339],{"class":90},[76,75352,75353,75355,75357,75359,75361,75363,75365,75367],{"class":78,"line":34948},[76,75354,57265],{"class":90},[76,75356,71194],{"class":53332},[76,75358,68679],{"class":86},[76,75360,370],{"class":90},[76,75362,71357],{"class":126},[76,75364,71360],{"class":90},[76,75366,71194],{"class":53332},[76,75368,53339],{"class":90},[76,75370,75371,75373,75375,75377,75379,75381,75383,75385],{"class":78,"line":34967},[76,75372,57265],{"class":90},[76,75374,71194],{"class":53332},[76,75376,68679],{"class":86},[76,75378,370],{"class":90},[76,75380,71377],{"class":126},[76,75382,71380],{"class":90},[76,75384,71194],{"class":53332},[76,75386,53339],{"class":90},[76,75388,75389,75391,75393],{"class":78,"line":34973},[76,75390,53808],{"class":90},[76,75392,71172],{"class":53332},[76,75394,53339],{"class":90},[76,75396,75397,75399,75401],{"class":78,"line":34984},[76,75398,53373],{"class":90},[76,75400,55918],{"class":53332},[76,75402,53339],{"class":90},[76,75404,75405,75407,75409,75412,75414,75417,75419],{"class":78,"line":34990},[76,75406,57265],{"class":90},[76,75408,76],{"class":53332},[76,75410,75411],{"class":90},">+\u003C\u002F",[76,75413,76],{"class":53332},[76,75415,75416],{"class":90},">添加\u003C\u002F",[76,75418,55918],{"class":53332},[76,75420,53339],{"class":90},[76,75422,75423,75425,75427],{"class":78,"line":35010},[76,75424,54449],{"class":90},[76,75426,68653],{"class":53332},[76,75428,53339],{"class":90},[76,75430,75431,75433,75435,75437,75439,75441,75444,75446,75449,75451,75454,75456],{"class":78,"line":35026},[76,75432,54176],{"class":90},[76,75434,53643],{"class":53332},[76,75436,55518],{"class":86},[76,75438,370],{"class":90},[76,75440,64608],{"class":126},[76,75442,75443],{"class":90},">共有数据 \u003C",[76,75445,76],{"class":53332},[76,75447,75448],{"class":90},">0\u003C\u002F",[76,75450,76],{"class":53332},[76,75452,75453],{"class":90},"> 条\u003C\u002F",[76,75455,53643],{"class":53332},[76,75457,53339],{"class":90},[76,75459,75460,75462,75464],{"class":78,"line":35032},[76,75461,54176],{"class":90},[76,75463,2404],{"class":53332},[76,75465,53339],{"class":90},[76,75467,75468,75470,75472],{"class":78,"line":35046},[76,75469,53373],{"class":90},[76,75471,2407],{"class":53332},[76,75473,53339],{"class":90},[76,75475,75476,75478,75480],{"class":78,"line":35052},[76,75477,57265],{"class":90},[76,75479,2410],{"class":53332},[76,75481,53339],{"class":90},[76,75483,75484,75486,75488,75491,75493],{"class":78,"line":35058},[76,75485,57333],{"class":90},[76,75487,2413],{"class":53332},[76,75489,75490],{"class":90},">ID\u003C\u002F",[76,75492,2413],{"class":53332},[76,75494,53339],{"class":90},[76,75496,75497,75499,75501,75503,75505],{"class":78,"line":35069},[76,75498,57333],{"class":90},[76,75500,2413],{"class":53332},[76,75502,71483],{"class":90},[76,75504,2413],{"class":53332},[76,75506,53339],{"class":90},[76,75508,75509,75511,75513,75515,75517],{"class":78,"line":35075},[76,75510,57333],{"class":90},[76,75512,2413],{"class":53332},[76,75514,71496],{"class":90},[76,75516,2413],{"class":53332},[76,75518,53339],{"class":90},[76,75520,75521,75523,75525,75527,75529],{"class":78,"line":35081},[76,75522,57333],{"class":90},[76,75524,2413],{"class":53332},[76,75526,71509],{"class":90},[76,75528,2413],{"class":53332},[76,75530,53339],{"class":90},[76,75532,75533,75535,75537,75539,75541],{"class":78,"line":35091},[76,75534,57333],{"class":90},[76,75536,2413],{"class":53332},[76,75538,71522],{"class":90},[76,75540,2413],{"class":53332},[76,75542,53339],{"class":90},[76,75544,75545,75547,75549,75551,75553],{"class":78,"line":35097},[76,75546,57333],{"class":90},[76,75548,2413],{"class":53332},[76,75550,71535],{"class":90},[76,75552,2413],{"class":53332},[76,75554,53339],{"class":90},[76,75556,75557,75559,75561,75564,75566],{"class":78,"line":35108},[76,75558,57333],{"class":90},[76,75560,2413],{"class":53332},[76,75562,75563],{"class":90},">录入时间\u003C\u002F",[76,75565,2413],{"class":53332},[76,75567,53339],{"class":90},[76,75569,75570,75572,75574,75576,75578],{"class":78,"line":35114},[76,75571,57333],{"class":90},[76,75573,2413],{"class":53332},[76,75575,71548],{"class":90},[76,75577,2413],{"class":53332},[76,75579,53339],{"class":90},[76,75581,75582,75584,75586],{"class":78,"line":35124},[76,75583,57438],{"class":90},[76,75585,2410],{"class":53332},[76,75587,53339],{"class":90},[76,75589,75590,75592,75594],{"class":78,"line":35129},[76,75591,53808],{"class":90},[76,75593,2407],{"class":53332},[76,75595,53339],{"class":90},[76,75597,75598,75600,75602],{"class":78,"line":35135},[76,75599,53373],{"class":90},[76,75601,2451],{"class":53332},[76,75603,53339],{"class":90},[76,75605,75606],{"class":78,"line":35184},[76,75607,75608],{"class":540},"      \u003C!-- \u003Ctr>\n",[76,75610,75611],{"class":78,"line":35231},[76,75612,75613],{"class":540},"        \u003Ctd>1\u003C\u002Ftd>\n",[76,75615,75616],{"class":78,"line":35236},[76,75617,75613],{"class":540},[76,75619,75620],{"class":78,"line":35242},[76,75621,75613],{"class":540},[76,75623,75624],{"class":78,"line":35261},[76,75625,75613],{"class":540},[76,75627,75628],{"class":78,"line":35267},[76,75629,75613],{"class":540},[76,75631,75632],{"class":78,"line":35287},[76,75633,75613],{"class":540},[76,75635,75636],{"class":78,"line":35293},[76,75637,75613],{"class":540},[76,75639,75640],{"class":78,"line":35299},[76,75641,75642],{"class":540},"        \u003Ctd>\n",[76,75644,75645],{"class":78,"line":35309},[76,75646,75647],{"class":540},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[76,75649,75650],{"class":78,"line":35314},[76,75651,75652],{"class":540},"        \u003C\u002Ftd>\n",[76,75654,75655],{"class":78,"line":35320},[76,75656,75657],{"class":540},"      \u003C\u002Ftr> -->\n",[76,75659,75660,75662,75664],{"class":78,"line":35336},[76,75661,53808],{"class":90},[76,75663,2451],{"class":53332},[76,75665,53339],{"class":90},[76,75667,75668,75670,75672],{"class":78,"line":35381},[76,75669,54449],{"class":90},[76,75671,2404],{"class":53332},[76,75673,53339],{"class":90},[76,75675,75676,75678,75680],{"class":78,"line":35387},[76,75677,54176],{"class":90},[76,75679,53845],{"class":53332},[76,75681,53339],{"class":90},[76,75683,75684],{"class":78,"line":35393},[76,75685,75686],{"class":540},"    \u002F\u002F const initData = [{\n",[76,75688,75689],{"class":78,"line":35399},[76,75690,75691],{"class":540},"    \u002F\u002F   unameId: 1,\n",[76,75693,75694],{"class":78,"line":35410},[76,75695,75696],{"class":540},"    \u002F\u002F   uname: '华晨宇',\n",[76,75698,75699],{"class":78,"line":35416},[76,75700,75701],{"class":540},"    \u002F\u002F   age: 22,\n",[76,75703,75704],{"class":78,"line":35422},[76,75705,75706],{"class":540},"    \u002F\u002F   salary: 12000,\n",[76,75708,75709],{"class":78,"line":35428},[76,75710,75711],{"class":540},"    \u002F\u002F   gender: '男',\n",[76,75713,75714],{"class":78,"line":35446},[76,75715,75716],{"class":540},"    \u002F\u002F   city: '北京',\n",[76,75718,75719],{"class":78,"line":35460},[76,75720,75721],{"class":540},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[76,75723,75724],{"class":78,"line":35469},[76,75725,75726],{"class":540},"    \u002F\u002F }]\n",[76,75728,75729],{"class":78,"line":35478},[76,75730,75731],{"class":540},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[76,75733,75734],{"class":78,"line":35487},[76,75735,75736],{"class":540},"    \u002F\u002F 1.渲染业务\n",[76,75738,75739],{"class":78,"line":35496},[76,75740,75741],{"class":540},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[76,75743,75744],{"class":78,"line":35502},[76,75745,75746],{"class":540},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[76,75748,75749],{"class":78,"line":35508},[76,75750,75751],{"class":540},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[76,75753,75754],{"class":78,"line":35516},[76,75755,149],{"emptyLinePlaceholder":148},[76,75757,75758],{"class":78,"line":35521},[76,75759,75760],{"class":540},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[76,75762,75763],{"class":78,"line":35527},[76,75764,75765],{"class":540},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[76,75767,75768,75770,75772,75774],{"class":78,"line":35538},[76,75769,13275],{"class":82},[76,75771,59725],{"class":119},[76,75773,15617],{"class":82},[76,75775,53870],{"class":90},[76,75777,75778,75781,75783],{"class":78,"line":35544},[76,75779,75780],{"class":90},"    console.",[76,75782,60277],{"class":86},[76,75784,54444],{"class":90},[76,75786,75787],{"class":78,"line":35564},[76,75788,149],{"emptyLinePlaceholder":148},[76,75790,75791],{"class":78,"line":35570},[76,75792,75793],{"class":540},"    \u002F\u002F 时间函数\n",[76,75795,75796,75798,75801],{"class":78,"line":35576},[76,75797,72112],{"class":82},[76,75799,75800],{"class":86}," getTime",[76,75802,12909],{"class":90},[76,75804,75805,75807,75810,75812,75814,75817],{"class":78,"line":35582},[76,75806,60258],{"class":82},[76,75808,75809],{"class":119}," date",[76,75811,15617],{"class":82},[76,75813,13632],{"class":82},[76,75815,75816],{"class":86}," Date",[76,75818,4072],{"class":90},[76,75820,75821,75823,75825,75827,75830,75833,75835,75837,75839,75842,75845,75847,75849,75851,75853,75855,75857,75859],{"class":78,"line":35599},[76,75822,60258],{"class":82},[76,75824,18141],{"class":119},[76,75826,15617],{"class":82},[76,75828,75829],{"class":90}," date.",[76,75831,75832],{"class":86},"getHours",[76,75834,15103],{"class":90},[76,75836,584],{"class":82},[76,75838,4134],{"class":119},[76,75840,75841],{"class":82}," ?",[76,75843,75844],{"class":126}," '0'",[76,75846,47601],{"class":82},[76,75848,75829],{"class":90},[76,75850,75832],{"class":86},[76,75852,15103],{"class":90},[76,75854,3117],{"class":82},[76,75856,75829],{"class":90},[76,75858,75832],{"class":86},[76,75860,4072],{"class":90},[76,75862,75863,75865,75868,75870,75872,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899],{"class":78,"line":35605},[76,75864,60258],{"class":82},[76,75866,75867],{"class":119}," m",[76,75869,15617],{"class":82},[76,75871,75829],{"class":90},[76,75873,75874],{"class":86},"getMinutes",[76,75876,15103],{"class":90},[76,75878,584],{"class":82},[76,75880,4134],{"class":119},[76,75882,75841],{"class":82},[76,75884,75844],{"class":126},[76,75886,47601],{"class":82},[76,75888,75829],{"class":90},[76,75890,75874],{"class":86},[76,75892,15103],{"class":90},[76,75894,3117],{"class":82},[76,75896,75829],{"class":90},[76,75898,75874],{"class":86},[76,75900,4072],{"class":90},[76,75902,75903,75905,75907,75909,75911,75914,75916,75918,75920,75922,75924,75926,75928,75930,75932,75934,75936,75938],{"class":78,"line":35611},[76,75904,60258],{"class":82},[76,75906,10496],{"class":119},[76,75908,15617],{"class":82},[76,75910,75829],{"class":90},[76,75912,75913],{"class":86},"getSeconds",[76,75915,15103],{"class":90},[76,75917,584],{"class":82},[76,75919,4134],{"class":119},[76,75921,75841],{"class":82},[76,75923,75844],{"class":126},[76,75925,47601],{"class":82},[76,75927,75829],{"class":90},[76,75929,75913],{"class":86},[76,75931,15103],{"class":90},[76,75933,3117],{"class":82},[76,75935,75829],{"class":90},[76,75937,75913],{"class":86},[76,75939,4072],{"class":90},[76,75941,75942,75944,75947,75949,75951,75954,75956,75959,75961,75964,75966,75968,75971,75973,75975,75977,75979,75981,75983,75986,75988,75991,75993,75996,75998,76000,76002],{"class":78,"line":35617},[76,75943,60258],{"class":82},[76,75945,75946],{"class":119}," str",[76,75948,15617],{"class":82},[76,75950,64931],{"class":126},[76,75952,75953],{"class":90},"date",[76,75955,2819],{"class":126},[76,75957,75958],{"class":86},"getFullYear",[76,75960,4522],{"class":126},[76,75962,75963],{"class":126},"}\u002F${",[76,75965,75953],{"class":90},[76,75967,2819],{"class":126},[76,75969,75970],{"class":86},"getMonth",[76,75972,15103],{"class":126},[76,75974,376],{"class":82},[76,75976,27168],{"class":119},[76,75978,75963],{"class":126},[76,75980,75953],{"class":90},[76,75982,2819],{"class":126},[76,75984,75985],{"class":86},"getDate",[76,75987,4522],{"class":126},[76,75989,75990],{"class":126},"} ${",[76,75992,2679],{"class":90},[76,75994,75995],{"class":126},"}:${",[76,75997,2805],{"class":90},[76,75999,75995],{"class":126},[76,76001,2954],{"class":90},[76,76003,76004],{"class":126},"}`\n",[76,76006,76007,76010],{"class":78,"line":35623},[76,76008,76009],{"class":82},"      return",[76,76011,76012],{"class":90}," str\n",[76,76014,76015],{"class":78,"line":35629},[76,76016,4283],{"class":90},[76,76018,76019],{"class":78,"line":35656},[76,76020,76021],{"class":540},"    \u002F\u002F 渲染函数\n",[76,76023,76024,76026,76028,76030,76032,76034,76036,76038],{"class":78,"line":35680},[76,76025,13275],{"class":82},[76,76027,71775],{"class":119},[76,76029,15617],{"class":82},[76,76031,56427],{"class":90},[76,76033,56430],{"class":86},[76,76035,123],{"class":90},[76,76037,71786],{"class":126},[76,76039,130],{"class":90},[76,76041,76042,76044,76046],{"class":78,"line":35686},[76,76043,72112],{"class":82},[76,76045,72115],{"class":86},[76,76047,12909],{"class":90},[76,76049,76050],{"class":78,"line":35692},[76,76051,76052],{"class":540},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[76,76054,76055],{"class":78,"line":35698},[76,76056,76057],{"class":540},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[76,76059,76060,76062,76065,76067,76069,76072,76074,76076,76078,76081,76083,76086],{"class":78,"line":35709},[76,76061,60258],{"class":82},[76,76063,76064],{"class":119}," trArr",[76,76066,15617],{"class":82},[76,76068,53997],{"class":90},[76,76070,76071],{"class":86},"map",[76,76073,123],{"class":90},[76,76075,56480],{"class":82},[76,76077,3770],{"class":90},[76,76079,76080],{"class":7296},"ele",[76,76082,405],{"class":90},[76,76084,76085],{"class":7296},"index",[76,76087,14495],{"class":90},[76,76089,76090,76092],{"class":78,"line":35720},[76,76091,595],{"class":82},[76,76093,72196],{"class":126},[76,76095,76096],{"class":78,"line":35726},[76,76097,76098],{"class":126},"      \u003Ctr>\n",[76,76100,76101,76103,76105,76107,76110],{"class":78,"line":35743},[76,76102,72201],{"class":126},[76,76104,76080],{"class":90},[76,76106,2819],{"class":126},[76,76108,76109],{"class":90},"unameId",[76,76111,72216],{"class":126},[76,76113,76114,76116,76118,76120,76122],{"class":78,"line":35766},[76,76115,72201],{"class":126},[76,76117,76080],{"class":90},[76,76119,2819],{"class":126},[76,76121,72232],{"class":90},[76,76123,72216],{"class":126},[76,76125,76126,76128,76130,76132,76134],{"class":78,"line":35789},[76,76127,72201],{"class":126},[76,76129,76080],{"class":90},[76,76131,2819],{"class":126},[76,76133,1184],{"class":90},[76,76135,72216],{"class":126},[76,76137,76138,76140,76142,76144,76146],{"class":78,"line":35795},[76,76139,72201],{"class":126},[76,76141,76080],{"class":90},[76,76143,2819],{"class":126},[76,76145,72265],{"class":90},[76,76147,72216],{"class":126},[76,76149,76150,76152,76154,76156,76158],{"class":78,"line":35800},[76,76151,72201],{"class":126},[76,76153,76080],{"class":90},[76,76155,2819],{"class":126},[76,76157,72282],{"class":90},[76,76159,72216],{"class":126},[76,76161,76162,76164,76166,76168,76170],{"class":78,"line":35809},[76,76163,72201],{"class":126},[76,76165,76080],{"class":90},[76,76167,2819],{"class":126},[76,76169,72299],{"class":90},[76,76171,72216],{"class":126},[76,76173,76174,76176,76178,76180,76182],{"class":78,"line":35819},[76,76175,72201],{"class":126},[76,76177,76080],{"class":90},[76,76179,2819],{"class":126},[76,76181,4483],{"class":90},[76,76183,72216],{"class":126},[76,76185,76186],{"class":78,"line":35825},[76,76187,75642],{"class":126},[76,76189,76190,76193,76195],{"class":78,"line":35830},[76,76191,76192],{"class":126},"          \u003Ca href=\"#\" data-id=\"${",[76,76194,76085],{"class":90},[76,76196,76197],{"class":126},"}\">删除\u003C\u002Fa>\n",[76,76199,76200],{"class":78,"line":35836},[76,76201,75652],{"class":126},[76,76203,76204],{"class":78,"line":35849},[76,76205,76206],{"class":126},"      \u003C\u002Ftr>\n",[76,76208,76209],{"class":78,"line":35855},[76,76210,76211],{"class":126},"  `\n",[76,76213,76214],{"class":78,"line":35866},[76,76215,66843],{"class":90},[76,76217,76218,76220,76222],{"class":78,"line":35877},[76,76219,60274],{"class":90},[76,76221,60277],{"class":86},[76,76223,76224],{"class":90},"(trArr)\n",[76,76226,76227],{"class":78,"line":35896},[76,76228,149],{"emptyLinePlaceholder":148},[76,76230,76231],{"class":78,"line":51550},[76,76232,76233],{"class":540},"      \u002F\u002F (2) 把数组转换为字符串join\n",[76,76235,76236],{"class":78,"line":51555},[76,76237,76238],{"class":540},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[76,76240,76241,76243,76245,76248,76251,76253,76256],{"class":78,"line":51564},[76,76242,72127],{"class":90},[76,76244,370],{"class":82},[76,76246,76247],{"class":90}," trArr.",[76,76249,76250],{"class":86},"join",[76,76252,123],{"class":90},[76,76254,76255],{"class":126},"''",[76,76257,130],{"class":90},[76,76259,76260],{"class":78,"line":51573},[76,76261,76262],{"class":540},"      \u002F\u002F 显示共有几条\n",[76,76264,76265,76267,76269,76271,76274,76277,76279,76281],{"class":78,"line":51578},[76,76266,57801],{"class":90},[76,76268,56430],{"class":86},[76,76270,123],{"class":90},[76,76272,76273],{"class":126},"'.total span'",[76,76275,76276],{"class":90},").innerHTML ",[76,76278,370],{"class":82},[76,76280,53997],{"class":90},[76,76282,57861],{"class":119},[76,76284,76285],{"class":78,"line":51583},[76,76286,4283],{"class":90},[76,76288,76289],{"class":78,"line":51588},[76,76290,76291],{"class":540},"    \u002F\u002F render()\n",[76,76293,76294],{"class":78,"line":51601},[76,76295,149],{"emptyLinePlaceholder":148},[76,76297,76298],{"class":78,"line":51606},[76,76299,76300],{"class":540},"    \u002F\u002F 获取DOM对象\n",[76,76302,76303,76305,76307,76309,76311,76313,76315,76317],{"class":78,"line":51615},[76,76304,13275],{"class":82},[76,76306,71849],{"class":119},[76,76308,15617],{"class":82},[76,76310,56427],{"class":90},[76,76312,56430],{"class":86},[76,76314,123],{"class":90},[76,76316,71860],{"class":126},[76,76318,130],{"class":90},[76,76320,76321,76323,76325,76327,76329,76331,76333,76335],{"class":78,"line":51624},[76,76322,13275],{"class":82},[76,76324,71676],{"class":119},[76,76326,15617],{"class":82},[76,76328,56427],{"class":90},[76,76330,56430],{"class":86},[76,76332,123],{"class":90},[76,76334,71687],{"class":126},[76,76336,130],{"class":90},[76,76338,76339,76341,76343,76345,76347,76349,76351,76353],{"class":78,"line":51641},[76,76340,13275],{"class":82},[76,76342,17740],{"class":119},[76,76344,15617],{"class":82},[76,76346,56427],{"class":90},[76,76348,56430],{"class":86},[76,76350,123],{"class":90},[76,76352,71706],{"class":126},[76,76354,130],{"class":90},[76,76356,76358,76360,76362,76364,76366,76368,76370,76372],{"class":78,"line":76357},231,[76,76359,13275],{"class":82},[76,76361,71735],{"class":119},[76,76363,15617],{"class":82},[76,76365,56427],{"class":90},[76,76367,56430],{"class":86},[76,76369,123],{"class":90},[76,76371,71746],{"class":126},[76,76373,130],{"class":90},[76,76375,76377,76379,76381,76383,76385,76387,76389,76391],{"class":78,"line":76376},232,[76,76378,13275],{"class":82},[76,76380,71715],{"class":119},[76,76382,15617],{"class":82},[76,76384,56427],{"class":90},[76,76386,56430],{"class":86},[76,76388,123],{"class":90},[76,76390,71726],{"class":126},[76,76392,130],{"class":90},[76,76394,76396,76398,76400,76402,76404,76406,76408,76410],{"class":78,"line":76395},233,[76,76397,13275],{"class":82},[76,76399,71755],{"class":119},[76,76401,15617],{"class":82},[76,76403,56427],{"class":90},[76,76405,56430],{"class":86},[76,76407,123],{"class":90},[76,76409,71766],{"class":126},[76,76411,130],{"class":90},[76,76413,76415],{"class":78,"line":76414},234,[76,76416,149],{"emptyLinePlaceholder":148},[76,76418,76420],{"class":78,"line":76419},235,[76,76421,76422],{"class":540},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[76,76424,76426,76428,76430,76432,76434,76436,76438,76440,76442],{"class":78,"line":76425},236,[76,76427,71867],{"class":90},[76,76429,59843],{"class":86},[76,76431,123],{"class":90},[76,76433,71874],{"class":126},[76,76435,405],{"class":90},[76,76437,56480],{"class":82},[76,76439,3770],{"class":90},[76,76441,2342],{"class":7296},[76,76443,14495],{"class":90},[76,76445,76447],{"class":78,"line":76446},237,[76,76448,76449],{"class":540},"      \u002F\u002F 禁止浏览器跳转\n",[76,76451,76453,76455,76457],{"class":78,"line":76452},238,[76,76454,71894],{"class":90},[76,76456,71897],{"class":86},[76,76458,4072],{"class":90},[76,76460,76462],{"class":78,"line":76461},239,[76,76463,76464],{"class":540},"      \u002F\u002F 非空判断\n",[76,76466,76468],{"class":78,"line":76467},240,[76,76469,76470],{"class":540},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[76,76472,76474],{"class":78,"line":76473},241,[76,76475,76476],{"class":540},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[76,76478,76480,76482,76484,76486,76489,76491,76494,76497,76499,76501],{"class":78,"line":76479},242,[76,76481,56511],{"class":82},[76,76483,3770],{"class":90},[76,76485,2491],{"class":82},[76,76487,76488],{"class":90},"uname.value ",[76,76490,73384],{"class":82},[76,76492,76493],{"class":82}," !",[76,76495,76496],{"class":90},"age.value ",[76,76498,73384],{"class":82},[76,76500,76493],{"class":82},[76,76502,76503],{"class":90},"salary.value) {\n",[76,76505,76507,76509,76511,76513,76515],{"class":78,"line":76506},243,[76,76508,595],{"class":82},[76,76510,71968],{"class":86},[76,76512,123],{"class":90},[76,76514,71973],{"class":126},[76,76516,130],{"class":90},[76,76518,76520],{"class":78,"line":76519},244,[76,76521,54430],{"class":90},[76,76523,76525,76527,76529],{"class":78,"line":76524},245,[76,76526,60037],{"class":90},[76,76528,53916],{"class":86},[76,76530,76531],{"class":90},"({\n",[76,76533,76535],{"class":78,"line":76534},246,[76,76536,76537],{"class":540},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[76,76539,76541],{"class":78,"line":76540},247,[76,76542,76543],{"class":540},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[76,76545,76547],{"class":78,"line":76546},248,[76,76548,76549],{"class":540},"        \u002F\u002F 对象的序号应为数组长度+1\n",[76,76551,76553],{"class":78,"line":76552},249,[76,76554,76555],{"class":540},"        \u002F\u002F unameId: arr.length + 1,\n",[76,76557,76559],{"class":78,"line":76558},250,[76,76560,149],{"emptyLinePlaceholder":148},[76,76562,76564],{"class":78,"line":76563},251,[76,76565,76566],{"class":540},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[76,76568,76570],{"class":78,"line":76569},252,[76,76571,76572],{"class":540},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[76,76574,76576],{"class":78,"line":76575},253,[76,76577,76578],{"class":540},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[76,76580,76582],{"class":78,"line":76581},254,[76,76583,76584],{"class":540},"        \u002F\u002F 0当假看\n",[76,76586,76588,76591,76593,76595,76598,76600,76602,76604,76607,76609,76611,76614,76616],{"class":78,"line":76587},255,[76,76589,76590],{"class":90},"        unameId: arr.",[76,76592,54000],{"class":119},[76,76594,75841],{"class":82},[76,76596,76597],{"class":90}," arr[arr.",[76,76599,54000],{"class":119},[76,76601,54303],{"class":82},[76,76603,27168],{"class":119},[76,76605,76606],{"class":90},"].unameId ",[76,76608,376],{"class":82},[76,76610,27168],{"class":119},[76,76612,76613],{"class":82}," :",[76,76615,27168],{"class":119},[76,76617,33509],{"class":90},[76,76619,76621],{"class":78,"line":76620},256,[76,76622,72021],{"class":90},[76,76624,76626],{"class":78,"line":76625},257,[76,76627,72026],{"class":90},[76,76629,76631],{"class":78,"line":76630},258,[76,76632,72036],{"class":90},[76,76634,76636],{"class":78,"line":76635},259,[76,76637,72031],{"class":90},[76,76639,76641],{"class":78,"line":76640},260,[76,76642,76643],{"class":90},"        city: city.value,\n",[76,76645,76647],{"class":78,"line":76646},261,[76,76648,76649],{"class":540},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[76,76651,76653],{"class":78,"line":76652},262,[76,76654,76655],{"class":540},"        \u002F\u002F time: new Date().toDateString()\n",[76,76657,76659,76662,76665],{"class":78,"line":76658},263,[76,76660,76661],{"class":90},"        time: ",[76,76663,76664],{"class":86},"getTime",[76,76666,4072],{"class":90},[76,76668,76670],{"class":78,"line":76669},264,[76,76671,66843],{"class":90},[76,76673,76675],{"class":78,"line":76674},265,[76,76676,76677],{"class":540},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[76,76679,76681,76683],{"class":78,"line":76680},266,[76,76682,72096],{"class":86},[76,76684,4072],{"class":90},[76,76686,76688,76690,76692,76694,76696],{"class":78,"line":76687},267,[76,76689,72079],{"class":119},[76,76691,2819],{"class":90},[76,76693,72084],{"class":86},[76,76695,15103],{"class":90},[76,76697,76698],{"class":540},"\u002F\u002F重置表单\n",[76,76700,76702],{"class":78,"line":76701},268,[76,76703,76704],{"class":540},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[76,76706,76708,76711,76713,76715,76718,76720,76722,76724,76726],{"class":78,"line":76707},269,[76,76709,76710],{"class":90},"      localStorage.",[76,76712,73681],{"class":86},[76,76714,123],{"class":90},[76,76716,76717],{"class":126},"'data'",[76,76719,405],{"class":90},[76,76721,73691],{"class":119},[76,76723,2819],{"class":90},[76,76725,73696],{"class":86},[76,76727,76728],{"class":90},"(arr))\n",[76,76730,76732],{"class":78,"line":76731},270,[76,76733,35499],{"class":90},[76,76735,76737],{"class":78,"line":76736},271,[76,76738,149],{"emptyLinePlaceholder":148},[76,76740,76742],{"class":78,"line":76741},272,[76,76743,76744],{"class":540},"    \u002F\u002F 3.删除业务\n",[76,76746,76748],{"class":78,"line":76747},273,[76,76749,76750],{"class":540},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[76,76752,76754,76756,76758,76760,76762,76764,76766,76768,76770],{"class":78,"line":76753},274,[76,76755,72368],{"class":90},[76,76757,59843],{"class":86},[76,76759,123],{"class":90},[76,76761,59848],{"class":126},[76,76763,405],{"class":90},[76,76765,56480],{"class":82},[76,76767,3770],{"class":90},[76,76769,2342],{"class":7296},[76,76771,14495],{"class":90},[76,76773,76775],{"class":78,"line":76774},275,[76,76776,76777],{"class":540},"      \u002F\u002F 判断是否点击的是删除按钮\n",[76,76779,76781,76783,76785,76787,76789],{"class":78,"line":76780},276,[76,76782,56511],{"class":82},[76,76784,69062],{"class":90},[76,76786,56517],{"class":82},[76,76788,70284],{"class":126},[76,76790,14495],{"class":90},[76,76792,76794],{"class":78,"line":76793},277,[76,76795,76796],{"class":540},"        \u002F\u002F alert(1)\n",[76,76798,76800],{"class":78,"line":76799},278,[76,76801,76802],{"class":540},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[76,76804,76806],{"class":78,"line":76805},279,[76,76807,76808],{"class":540},"        \u002F\u002F console.log(e.target)\n",[76,76810,76812],{"class":78,"line":76811},280,[76,76813,76814],{"class":540},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[76,76816,76818],{"class":78,"line":76817},281,[76,76819,149],{"emptyLinePlaceholder":148},[76,76821,76823],{"class":78,"line":76822},282,[76,76824,76825],{"class":540},"        \u002F\u002F 确认框，确然是否真的要删除\n",[76,76827,76829],{"class":78,"line":76828},283,[76,76830,76831],{"class":540},"        \u002F\u002F confirm()为确认框\n",[76,76833,76835],{"class":78,"line":76834},284,[76,76836,76837],{"class":540},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[76,76839,76841,76843,76845,76848,76850,76853],{"class":78,"line":76840},285,[76,76842,4592],{"class":82},[76,76844,3770],{"class":90},[76,76846,76847],{"class":86},"confirm",[76,76849,123],{"class":90},[76,76851,76852],{"class":126},"'您确定要删除这条数据吗？'",[76,76854,76855],{"class":90},")) {\n",[76,76857,76859,76862,76864,76866,76868],{"class":78,"line":76858},286,[76,76860,76861],{"class":90},"          arr.",[76,76863,60040],{"class":86},[76,76865,72421],{"class":90},[76,76867,669],{"class":119},[76,76869,130],{"class":90},[76,76871,76873],{"class":78,"line":76872},287,[76,76874,76875],{"class":540},"          \u002F\u002F 3.4 重新渲染页面\n",[76,76877,76879,76882],{"class":78,"line":76878},288,[76,76880,76881],{"class":86},"          render",[76,76883,4072],{"class":90},[76,76885,76887],{"class":78,"line":76886},289,[76,76888,76889],{"class":540},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[76,76891,76893,76896,76898,76900,76902,76904,76906,76908,76910],{"class":78,"line":76892},290,[76,76894,76895],{"class":90},"          localStorage.",[76,76897,73681],{"class":86},[76,76899,123],{"class":90},[76,76901,76717],{"class":126},[76,76903,405],{"class":90},[76,76905,73691],{"class":119},[76,76907,2819],{"class":90},[76,76909,73696],{"class":86},[76,76911,76728],{"class":90},[76,76913,76915],{"class":78,"line":76914},291,[76,76916,4624],{"class":90},[76,76918,76920],{"class":78,"line":76919},292,[76,76921,54430],{"class":90},[76,76923,76925],{"class":78,"line":76924},293,[76,76926,149],{"emptyLinePlaceholder":148},[76,76928,76930],{"class":78,"line":76929},294,[76,76931,35499],{"class":90},[76,76933,76935],{"class":78,"line":76934},295,[76,76936,149],{"emptyLinePlaceholder":148},[76,76938,76940,76942,76944],{"class":78,"line":76939},296,[76,76941,54449],{"class":90},[76,76943,53845],{"class":53332},[76,76945,53339],{"class":90},[76,76947,76949,76951,76953],{"class":78,"line":76948},297,[76,76950,53817],{"class":90},[76,76952,53832],{"class":53332},[76,76954,53339],{"class":90},[76,76956,76958],{"class":78,"line":76957},298,[76,76959,149],{"emptyLinePlaceholder":148},[76,76961,76963,76965,76967],{"class":78,"line":76962},299,[76,76964,53817],{"class":90},[76,76966,52667],{"class":53332},[76,76968,53339],{"class":90},[14,76970,76972],{"id":76971},"_36-正则表达式","3.6 正则表达式",[19,76974,76975],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76977,76978],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76980,76981],{},"正则表达式的作用：",[3261,76983,76984,76991,76997],{},[29,76985,76986,76987,76990],{},"表单验证（ ",[2416,76988,76989],{},"匹配"," ）",[29,76992,76993,76994,76990],{},"过滤敏感词（ ",[2416,76995,76996],{},"替换",[29,76998,76999,77000,76990],{},"字符串中提取我们想要的部分（ ",[2416,77001,77002],{},"提取",[889,77004,77006],{"id":77005},"_361-语法","3.6.1 语法",[19,77008,77009],{},"正则表达式使用步骤：",[26,77011,77012,77015],{},[29,77013,77014],{},"定义规则",[29,77016,77017],{},"查找是否匹配",[19,77019,77020],{},"正则表达式里边不需要写引号",[19,77022,77023],{},[3583,77024],{"alt":71,"src":77025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77027,77028],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77030,77031],{},"reg.test(str)",[19,77033,77034],{},[3583,77035],{"alt":71,"src":77036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77038,77039],{},[3583,77040],{"alt":71,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[889,77043,77045],{"id":77044},"_362-元字符","3.6.2 元字符",[26,77047,77048,77051,77054,77057,77064],{},[29,77049,77050],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,77052,77053],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,77055,77056],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,77058,77059,77060],{},"正则验证工具：",[2503,77061,77062],{"href":77062,"rel":77063},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25914],[29,77065,77066],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24047,77068,77070],{"id":77069},"_3621-边界符","3.6.2.1 边界符",[19,77072,77073],{},[3583,77074],{"alt":71,"src":77075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77077,77078],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77080,77081],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77083,77084],{},"只匹配一次",[19,77086,77087],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24047,77089,77091],{"id":77090},"_3622-量词","3.6.2.2 量词",[19,77093,77094],{},[3583,77095],{"alt":71,"src":77096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77098,77099],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24047,77101,77103],{"id":77102},"_3623-元字符","3.6.2.3 元字符",[19,77105,77106],{},[3583,77107],{"alt":71,"src":77108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77110,77111],{},"匹配的是a或b或c []只选一个",[19,77113,77114],{},[3583,77115],{"alt":71,"src":77116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77118,77119],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77121,77122],{},[3583,77123],{"alt":71,"src":77124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77126,77127],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77129,77130],{},[3583,77131],{"alt":71,"src":77132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[66,77134,77136],{"className":52665,"code":77135,"language":52667,"meta":71,"style":71},"\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",[73,77137,77138,77148,77162,77166,77174,77188,77208,77220,77228,77232,77240,77248,77253,77284,77311,77339,77343,77348,77376,77407,77412,77417,77448,77480,77512,77516,77521,77552,77582,77612,77616,77621,77652,77683,77713,77743,77747,77752,77785,77789,77794,77825,77856,77860,77865,77896,77926,77957,77961,77966,77998,78029,78060,78087,78118,78150,78183,78214,78245,78277,78308,78316,78324,78328],{"__ignoreMap":71},[76,77139,77140,77142,77144,77146],{"class":78,"line":79},[76,77141,53329],{"class":90},[76,77143,53333],{"class":53332},[76,77145,53336],{"class":86},[76,77147,53339],{"class":90},[76,77149,77150,77152,77154,77156,77158,77160],{"class":78,"line":94},[76,77151,584],{"class":90},[76,77153,52667],{"class":53332},[76,77155,53348],{"class":86},[76,77157,370],{"class":90},[76,77159,53353],{"class":126},[76,77161,53339],{"class":90},[76,77163,77164],{"class":78,"line":133},[76,77165,149],{"emptyLinePlaceholder":148},[76,77167,77168,77170,77172],{"class":78,"line":145},[76,77169,584],{"class":90},[76,77171,53366],{"class":53332},[76,77173,53339],{"class":90},[76,77175,77176,77178,77180,77182,77184,77186],{"class":78,"line":152},[76,77177,54176],{"class":90},[76,77179,53376],{"class":53332},[76,77181,53379],{"class":86},[76,77183,370],{"class":90},[76,77185,53384],{"class":126},[76,77187,53339],{"class":90},[76,77189,77190,77192,77194,77196,77198,77200,77202,77204,77206],{"class":78,"line":157},[76,77191,54176],{"class":90},[76,77193,53376],{"class":53332},[76,77195,16972],{"class":86},[76,77197,370],{"class":90},[76,77199,53423],{"class":126},[76,77201,53403],{"class":86},[76,77203,370],{"class":90},[76,77205,53430],{"class":126},[76,77207,53339],{"class":90},[76,77209,77210,77212,77214,77216,77218],{"class":78,"line":246},[76,77211,54176],{"class":90},[76,77213,53439],{"class":53332},[76,77215,53442],{"class":90},[76,77217,53439],{"class":53332},[76,77219,53339],{"class":90},[76,77221,77222,77224,77226],{"class":78,"line":251},[76,77223,53817],{"class":90},[76,77225,53366],{"class":53332},[76,77227,53339],{"class":90},[76,77229,77230],{"class":78,"line":257},[76,77231,149],{"emptyLinePlaceholder":148},[76,77233,77234,77236,77238],{"class":78,"line":641},[76,77235,584],{"class":90},[76,77237,53832],{"class":53332},[76,77239,53339],{"class":90},[76,77241,77242,77244,77246],{"class":78,"line":646},[76,77243,54176],{"class":90},[76,77245,53845],{"class":53332},[76,77247,53339],{"class":90},[76,77249,77250],{"class":78,"line":659},[76,77251,77252],{"class":540},"    \u002F\u002F 元字符中\n",[76,77254,77255,77257,77259,77261,77263,77266,77268,77270,77273,77275,77278,77281],{"class":78,"line":1608},[76,77256,75780],{"class":90},[76,77258,60277],{"class":86},[76,77260,123],{"class":90},[76,77262,795],{"class":126},[76,77264,77265],{"class":50009},"哈",[76,77267,795],{"class":126},[76,77269,2819],{"class":90},[76,77271,77272],{"class":86},"test",[76,77274,123],{"class":90},[76,77276,77277],{"class":126},"'哈'",[76,77279,77280],{"class":90},"))  ",[76,77282,77283],{"class":540},"\u002F\u002Ftrue\n",[76,77285,77286,77288,77290,77292,77294,77296,77298,77300,77302,77304,77307,77309],{"class":78,"line":1632},[76,77287,75780],{"class":90},[76,77289,60277],{"class":86},[76,77291,123],{"class":90},[76,77293,795],{"class":126},[76,77295,77265],{"class":50009},[76,77297,795],{"class":126},[76,77299,2819],{"class":90},[76,77301,77272],{"class":86},[76,77303,123],{"class":90},[76,77305,77306],{"class":126},"'哈哈'",[76,77308,77280],{"class":90},[76,77310,77283],{"class":540},[76,77312,77313,77315,77317,77319,77321,77323,77325,77327,77329,77331,77334,77337],{"class":78,"line":1637},[76,77314,75780],{"class":90},[76,77316,60277],{"class":86},[76,77318,123],{"class":90},[76,77320,795],{"class":126},[76,77322,77265],{"class":50009},[76,77324,795],{"class":126},[76,77326,2819],{"class":90},[76,77328,77272],{"class":86},[76,77330,123],{"class":90},[76,77332,77333],{"class":126},"'二哈'",[76,77335,77336],{"class":90},"))   ",[76,77338,77283],{"class":540},[76,77340,77341],{"class":78,"line":1642},[76,77342,149],{"emptyLinePlaceholder":148},[76,77344,77345],{"class":78,"line":1652},[76,77346,77347],{"class":540},"    \u002F\u002F 1.边界符\n",[76,77349,77350,77352,77354,77356,77358,77360,77362,77364,77366,77368,77370,77372,77374],{"class":78,"line":1660},[76,77351,75780],{"class":90},[76,77353,60277],{"class":86},[76,77355,123],{"class":90},[76,77357,795],{"class":126},[76,77359,3220],{"class":82},[76,77361,77265],{"class":50009},[76,77363,795],{"class":126},[76,77365,2819],{"class":90},[76,77367,77272],{"class":86},[76,77369,123],{"class":90},[76,77371,77277],{"class":126},[76,77373,77280],{"class":90},[76,77375,77283],{"class":540},[76,77377,77378,77380,77382,77384,77386,77388,77390,77392,77394,77396,77398,77400,77402,77404],{"class":78,"line":1683},[76,77379,75780],{"class":90},[76,77381,60277],{"class":86},[76,77383,123],{"class":90},[76,77385,795],{"class":126},[76,77387,3220],{"class":82},[76,77389,77265],{"class":50009},[76,77391,2566],{"class":82},[76,77393,795],{"class":126},[76,77395,2819],{"class":90},[76,77397,77272],{"class":86},[76,77399,123],{"class":90},[76,77401,77306],{"class":126},[76,77403,77280],{"class":90},[76,77405,77406],{"class":540},"\u002F\u002Ffalse\n",[76,77408,77409],{"class":78,"line":1698},[76,77410,77411],{"class":540},"    \u002F\u002F 2.量词\n",[76,77413,77414],{"class":78,"line":1711},[76,77415,77416],{"class":540},"    \u002F\u002F 量词 * 类似于 >= 0\n",[76,77418,77419,77421,77423,77425,77427,77429,77431,77434,77436,77438,77440,77442,77444,77446],{"class":78,"line":1717},[76,77420,75780],{"class":90},[76,77422,60277],{"class":86},[76,77424,123],{"class":90},[76,77426,795],{"class":126},[76,77428,3220],{"class":82},[76,77430,77265],{"class":50009},[76,77432,77433],{"class":82},"*$",[76,77435,795],{"class":126},[76,77437,2819],{"class":90},[76,77439,77272],{"class":86},[76,77441,123],{"class":90},[76,77443,77306],{"class":126},[76,77445,77280],{"class":90},[76,77447,77283],{"class":540},[76,77449,77450,77452,77454,77456,77458,77460,77462,77464,77466,77468,77470,77472,77475,77477],{"class":78,"line":1728},[76,77451,75780],{"class":90},[76,77453,60277],{"class":86},[76,77455,123],{"class":90},[76,77457,795],{"class":126},[76,77459,3220],{"class":82},[76,77461,77265],{"class":50009},[76,77463,77433],{"class":82},[76,77465,795],{"class":126},[76,77467,2819],{"class":90},[76,77469,77272],{"class":86},[76,77471,123],{"class":90},[76,77473,77474],{"class":126},"'二哈好傻'",[76,77476,77280],{"class":90},[76,77478,77479],{"class":540},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[76,77481,77482,77484,77486,77488,77490,77492,77494,77496,77498,77500,77502,77504,77507,77509],{"class":78,"line":1740},[76,77483,75780],{"class":90},[76,77485,60277],{"class":86},[76,77487,123],{"class":90},[76,77489,795],{"class":126},[76,77491,3220],{"class":82},[76,77493,77265],{"class":50009},[76,77495,77433],{"class":82},[76,77497,795],{"class":126},[76,77499,2819],{"class":90},[76,77501,77272],{"class":86},[76,77503,123],{"class":90},[76,77505,77506],{"class":126},"'哈好哈'",[76,77508,77336],{"class":90},[76,77510,77511],{"class":540},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[76,77513,77514],{"class":78,"line":1746},[76,77515,149],{"emptyLinePlaceholder":148},[76,77517,77518],{"class":78,"line":1751},[76,77519,77520],{"class":540},"    \u002F\u002F +类似于>=1\n",[76,77522,77523,77525,77527,77529,77531,77533,77535,77538,77540,77542,77544,77546,77548,77550],{"class":78,"line":1756},[76,77524,75780],{"class":90},[76,77526,60277],{"class":86},[76,77528,123],{"class":90},[76,77530,795],{"class":126},[76,77532,3220],{"class":82},[76,77534,77265],{"class":50009},[76,77536,77537],{"class":82},"+$",[76,77539,795],{"class":126},[76,77541,2819],{"class":90},[76,77543,77272],{"class":86},[76,77545,123],{"class":90},[76,77547,77306],{"class":126},[76,77549,77280],{"class":90},[76,77551,77283],{"class":540},[76,77553,77554,77556,77558,77560,77562,77564,77566,77568,77570,77572,77574,77576,77578,77580],{"class":78,"line":1766},[76,77555,75780],{"class":90},[76,77557,60277],{"class":86},[76,77559,123],{"class":90},[76,77561,795],{"class":126},[76,77563,3220],{"class":82},[76,77565,77265],{"class":50009},[76,77567,77537],{"class":82},[76,77569,795],{"class":126},[76,77571,2819],{"class":90},[76,77573,77272],{"class":86},[76,77575,123],{"class":90},[76,77577,77474],{"class":126},[76,77579,77280],{"class":90},[76,77581,77479],{"class":540},[76,77583,77584,77586,77588,77590,77592,77594,77596,77598,77600,77602,77604,77606,77608,77610],{"class":78,"line":1773},[76,77585,75780],{"class":90},[76,77587,60277],{"class":86},[76,77589,123],{"class":90},[76,77591,795],{"class":126},[76,77593,3220],{"class":82},[76,77595,77265],{"class":50009},[76,77597,77537],{"class":82},[76,77599,795],{"class":126},[76,77601,2819],{"class":90},[76,77603,77272],{"class":86},[76,77605,123],{"class":90},[76,77607,77506],{"class":126},[76,77609,77336],{"class":90},[76,77611,77406],{"class":540},[76,77613,77614],{"class":78,"line":1793},[76,77615,149],{"emptyLinePlaceholder":148},[76,77617,77618],{"class":78,"line":1806},[76,77619,77620],{"class":540},"    \u002F\u002F ?类似于0次或一次\n",[76,77622,77623,77625,77627,77629,77631,77633,77636,77638,77640,77642,77644,77646,77648,77650],{"class":78,"line":1817},[76,77624,75780],{"class":90},[76,77626,60277],{"class":86},[76,77628,123],{"class":90},[76,77630,795],{"class":126},[76,77632,3220],{"class":82},[76,77634,77635],{"class":50009},"哈？",[76,77637,2566],{"class":82},[76,77639,795],{"class":126},[76,77641,2819],{"class":90},[76,77643,77272],{"class":86},[76,77645,123],{"class":90},[76,77647,76255],{"class":126},[76,77649,77336],{"class":90},[76,77651,77283],{"class":540},[76,77653,77654,77656,77658,77660,77662,77664,77666,77669,77671,77673,77675,77677,77679,77681],{"class":78,"line":1822},[76,77655,75780],{"class":90},[76,77657,60277],{"class":86},[76,77659,123],{"class":90},[76,77661,795],{"class":126},[76,77663,3220],{"class":82},[76,77665,77265],{"class":50009},[76,77667,77668],{"class":82},"?$",[76,77670,795],{"class":126},[76,77672,2819],{"class":90},[76,77674,77272],{"class":86},[76,77676,123],{"class":90},[76,77678,77306],{"class":126},[76,77680,77280],{"class":90},[76,77682,77406],{"class":540},[76,77684,77685,77687,77689,77691,77693,77695,77697,77699,77701,77703,77705,77707,77709,77711],{"class":78,"line":1835},[76,77686,75780],{"class":90},[76,77688,60277],{"class":86},[76,77690,123],{"class":90},[76,77692,795],{"class":126},[76,77694,3220],{"class":82},[76,77696,77265],{"class":50009},[76,77698,77668],{"class":82},[76,77700,795],{"class":126},[76,77702,2819],{"class":90},[76,77704,77272],{"class":86},[76,77706,123],{"class":90},[76,77708,77474],{"class":126},[76,77710,77280],{"class":90},[76,77712,77479],{"class":540},[76,77714,77715,77717,77719,77721,77723,77725,77727,77729,77731,77733,77735,77737,77739,77741],{"class":78,"line":1847},[76,77716,75780],{"class":90},[76,77718,60277],{"class":86},[76,77720,123],{"class":90},[76,77722,795],{"class":126},[76,77724,3220],{"class":82},[76,77726,77265],{"class":50009},[76,77728,77668],{"class":82},[76,77730,795],{"class":126},[76,77732,2819],{"class":90},[76,77734,77272],{"class":86},[76,77736,123],{"class":90},[76,77738,77506],{"class":126},[76,77740,77280],{"class":90},[76,77742,77406],{"class":540},[76,77744,77745],{"class":78,"line":1852},[76,77746,149],{"emptyLinePlaceholder":148},[76,77748,77749],{"class":78,"line":1862},[76,77750,77751],{"class":540},"    \u002F\u002F {n}写几，就必须出现几次\n",[76,77753,77754,77756,77758,77760,77762,77764,77766,77769,77771,77773,77775,77777,77780,77783],{"class":78,"line":1874},[76,77755,75780],{"class":90},[76,77757,60277],{"class":86},[76,77759,123],{"class":90},[76,77761,795],{"class":126},[76,77763,3220],{"class":82},[76,77765,77265],{"class":50009},[76,77767,77768],{"class":82},"{4}$",[76,77770,795],{"class":126},[76,77772,2819],{"class":90},[76,77774,77272],{"class":86},[76,77776,123],{"class":90},[76,77778,77779],{"class":126},"'哈哈哈哈'",[76,77781,77782],{"class":90},")) ",[76,77784,77283],{"class":540},[76,77786,77787],{"class":78,"line":1879},[76,77788,149],{"emptyLinePlaceholder":148},[76,77790,77791],{"class":78,"line":1884},[76,77792,77793],{"class":540},"    \u002F\u002F {n,}大于等于n次\n",[76,77795,77796,77798,77800,77802,77804,77806,77808,77811,77813,77815,77817,77819,77821,77823],{"class":78,"line":1889},[76,77797,75780],{"class":90},[76,77799,60277],{"class":86},[76,77801,123],{"class":90},[76,77803,795],{"class":126},[76,77805,3220],{"class":82},[76,77807,77265],{"class":50009},[76,77809,77810],{"class":82},"{4,}$",[76,77812,795],{"class":126},[76,77814,2819],{"class":90},[76,77816,77272],{"class":86},[76,77818,123],{"class":90},[76,77820,77779],{"class":126},[76,77822,77782],{"class":90},[76,77824,77283],{"class":540},[76,77826,77827,77829,77831,77833,77835,77837,77839,77841,77843,77845,77847,77849,77852,77854],{"class":78,"line":1900},[76,77828,75780],{"class":90},[76,77830,60277],{"class":86},[76,77832,123],{"class":90},[76,77834,795],{"class":126},[76,77836,3220],{"class":82},[76,77838,77265],{"class":50009},[76,77840,77810],{"class":82},[76,77842,795],{"class":126},[76,77844,2819],{"class":90},[76,77846,77272],{"class":86},[76,77848,123],{"class":90},[76,77850,77851],{"class":126},"'哈哈哈哈哈'",[76,77853,77782],{"class":90},[76,77855,77283],{"class":540},[76,77857,77858],{"class":78,"line":1906},[76,77859,149],{"emptyLinePlaceholder":148},[76,77861,77862],{"class":78,"line":1924},[76,77863,77864],{"class":540},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[76,77866,77867,77869,77871,77873,77875,77877,77879,77882,77884,77886,77888,77890,77892,77894],{"class":78,"line":1929},[76,77868,75780],{"class":90},[76,77870,60277],{"class":86},[76,77872,123],{"class":90},[76,77874,795],{"class":126},[76,77876,3220],{"class":82},[76,77878,77265],{"class":50009},[76,77880,77881],{"class":82},"{4,6}$",[76,77883,795],{"class":126},[76,77885,2819],{"class":90},[76,77887,77272],{"class":86},[76,77889,123],{"class":90},[76,77891,77779],{"class":126},[76,77893,77782],{"class":90},[76,77895,77283],{"class":540},[76,77897,77898,77900,77902,77904,77906,77908,77910,77912,77914,77916,77918,77920,77922,77924],{"class":78,"line":1944},[76,77899,75780],{"class":90},[76,77901,60277],{"class":86},[76,77903,123],{"class":90},[76,77905,795],{"class":126},[76,77907,3220],{"class":82},[76,77909,77265],{"class":50009},[76,77911,77881],{"class":82},[76,77913,795],{"class":126},[76,77915,2819],{"class":90},[76,77917,77272],{"class":86},[76,77919,123],{"class":90},[76,77921,77851],{"class":126},[76,77923,77782],{"class":90},[76,77925,77283],{"class":540},[76,77927,77928,77930,77932,77934,77936,77938,77940,77942,77944,77946,77948,77950,77953,77955],{"class":78,"line":1950},[76,77929,75780],{"class":90},[76,77931,60277],{"class":86},[76,77933,123],{"class":90},[76,77935,795],{"class":126},[76,77937,3220],{"class":82},[76,77939,77265],{"class":50009},[76,77941,77881],{"class":82},[76,77943,795],{"class":126},[76,77945,2819],{"class":90},[76,77947,77272],{"class":86},[76,77949,123],{"class":90},[76,77951,77952],{"class":126},"'哈哈哈哈哈哈哈'",[76,77954,77782],{"class":90},[76,77956,77406],{"class":540},[76,77958,77959],{"class":78,"line":1965},[76,77960,149],{"emptyLinePlaceholder":148},[76,77962,77963],{"class":78,"line":1971},[76,77964,77965],{"class":540},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[76,77967,77968,77970,77972,77974,77976,77978,77981,77983,77985,77987,77989,77991,77994,77996],{"class":78,"line":1985},[76,77969,75780],{"class":90},[76,77971,60277],{"class":86},[76,77973,123],{"class":90},[76,77975,795],{"class":126},[76,77977,3220],{"class":82},[76,77979,77980],{"class":119},"[abc]",[76,77982,2566],{"class":82},[76,77984,795],{"class":126},[76,77986,2819],{"class":90},[76,77988,77272],{"class":86},[76,77990,123],{"class":90},[76,77992,77993],{"class":126},"'a'",[76,77995,77280],{"class":90},[76,77997,77283],{"class":540},[76,77999,78000,78002,78004,78006,78008,78010,78012,78014,78016,78018,78020,78022,78025,78027],{"class":78,"line":1991},[76,78001,75780],{"class":90},[76,78003,60277],{"class":86},[76,78005,123],{"class":90},[76,78007,795],{"class":126},[76,78009,3220],{"class":82},[76,78011,77980],{"class":119},[76,78013,2566],{"class":82},[76,78015,795],{"class":126},[76,78017,2819],{"class":90},[76,78019,77272],{"class":86},[76,78021,123],{"class":90},[76,78023,78024],{"class":126},"'b'",[76,78026,77280],{"class":90},[76,78028,77283],{"class":540},[76,78030,78031,78033,78035,78037,78039,78041,78043,78045,78047,78049,78051,78053,78056,78058],{"class":78,"line":2005},[76,78032,75780],{"class":90},[76,78034,60277],{"class":86},[76,78036,123],{"class":90},[76,78038,795],{"class":126},[76,78040,3220],{"class":82},[76,78042,77980],{"class":119},[76,78044,2566],{"class":82},[76,78046,795],{"class":126},[76,78048,2819],{"class":90},[76,78050,77272],{"class":86},[76,78052,123],{"class":90},[76,78054,78055],{"class":126},"'c'",[76,78057,77280],{"class":90},[76,78059,77283],{"class":540},[76,78061,78062,78064,78066,78068,78070,78072,78074,78076,78078,78080,78083,78085],{"class":78,"line":2017},[76,78063,75780],{"class":90},[76,78065,60277],{"class":86},[76,78067,123],{"class":90},[76,78069,795],{"class":126},[76,78071,77980],{"class":119},[76,78073,795],{"class":126},[76,78075,2819],{"class":90},[76,78077,77272],{"class":86},[76,78079,123],{"class":90},[76,78081,78082],{"class":126},"'ab'",[76,78084,77280],{"class":90},[76,78086,77283],{"class":540},[76,78088,78089,78091,78093,78095,78097,78099,78101,78103,78105,78107,78109,78111,78113,78115],{"class":78,"line":2023},[76,78090,75780],{"class":90},[76,78092,60277],{"class":86},[76,78094,123],{"class":90},[76,78096,795],{"class":126},[76,78098,3220],{"class":82},[76,78100,77980],{"class":119},[76,78102,2566],{"class":82},[76,78104,795],{"class":126},[76,78106,2819],{"class":90},[76,78108,77272],{"class":86},[76,78110,123],{"class":90},[76,78112,78082],{"class":126},[76,78114,77280],{"class":90},[76,78116,78117],{"class":540},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[76,78119,78120,78122,78124,78126,78128,78130,78132,78135,78137,78139,78141,78143,78145,78147],{"class":78,"line":2031},[76,78121,75780],{"class":90},[76,78123,60277],{"class":86},[76,78125,123],{"class":90},[76,78127,795],{"class":126},[76,78129,3220],{"class":82},[76,78131,77980],{"class":119},[76,78133,78134],{"class":82},"{2}$",[76,78136,795],{"class":126},[76,78138,2819],{"class":90},[76,78140,77272],{"class":86},[76,78142,123],{"class":90},[76,78144,78082],{"class":126},[76,78146,77280],{"class":90},[76,78148,78149],{"class":540},"\u002F\u002Ftrue   可以选两个\n",[76,78151,78152,78154,78156,78158,78160,78162,78165,78167,78169,78171,78173,78175,78178,78180],{"class":78,"line":11880},[76,78153,75780],{"class":90},[76,78155,60277],{"class":86},[76,78157,123],{"class":90},[76,78159,795],{"class":126},[76,78161,3220],{"class":82},[76,78163,78164],{"class":119},"[a-z]",[76,78166,2566],{"class":82},[76,78168,795],{"class":126},[76,78170,2819],{"class":90},[76,78172,77272],{"class":86},[76,78174,123],{"class":90},[76,78176,78177],{"class":126},"'p'",[76,78179,77336],{"class":90},[76,78181,78182],{"class":540},"\u002F\u002Ftrue   依然只能选一个\n",[76,78184,78185,78187,78189,78191,78193,78195,78198,78200,78202,78204,78206,78208,78210,78212],{"class":78,"line":11901},[76,78186,75780],{"class":90},[76,78188,60277],{"class":86},[76,78190,123],{"class":90},[76,78192,795],{"class":126},[76,78194,3220],{"class":82},[76,78196,78197],{"class":119},"[A-Z]",[76,78199,2566],{"class":82},[76,78201,795],{"class":126},[76,78203,2819],{"class":90},[76,78205,77272],{"class":86},[76,78207,123],{"class":90},[76,78209,78177],{"class":126},[76,78211,77336],{"class":90},[76,78213,77406],{"class":540},[76,78215,78216,78218,78220,78222,78224,78226,78228,78230,78232,78234,78236,78238,78241,78243],{"class":78,"line":11907},[76,78217,75780],{"class":90},[76,78219,60277],{"class":86},[76,78221,123],{"class":90},[76,78223,795],{"class":126},[76,78225,3220],{"class":82},[76,78227,78197],{"class":119},[76,78229,2566],{"class":82},[76,78231,795],{"class":126},[76,78233,2819],{"class":90},[76,78235,77272],{"class":86},[76,78237,123],{"class":90},[76,78239,78240],{"class":126},"'P'",[76,78242,77336],{"class":90},[76,78244,77283],{"class":540},[76,78246,78247,78249,78251,78253,78255,78257,78260,78262,78264,78266,78268,78270,78273,78275],{"class":78,"line":11921},[76,78248,75780],{"class":90},[76,78250,60277],{"class":86},[76,78252,123],{"class":90},[76,78254,795],{"class":126},[76,78256,3220],{"class":82},[76,78258,78259],{"class":119},"[0-9]",[76,78261,2566],{"class":82},[76,78263,795],{"class":126},[76,78265,2819],{"class":90},[76,78267,77272],{"class":86},[76,78269,123],{"class":90},[76,78271,78272],{"class":126},"'0'",[76,78274,77336],{"class":90},[76,78276,77283],{"class":540},[76,78278,78279,78281,78283,78285,78287,78289,78292,78294,78296,78298,78300,78302,78304,78306],{"class":78,"line":11927},[76,78280,75780],{"class":90},[76,78282,60277],{"class":86},[76,78284,123],{"class":90},[76,78286,795],{"class":126},[76,78288,3220],{"class":82},[76,78290,78291],{"class":119},"[a-zA-Z0-9]",[76,78293,2566],{"class":82},[76,78295,795],{"class":126},[76,78297,2819],{"class":90},[76,78299,77272],{"class":86},[76,78301,123],{"class":90},[76,78303,78177],{"class":126},[76,78305,77280],{"class":90},[76,78307,77283],{"class":540},[76,78309,78310,78312,78314],{"class":78,"line":11954},[76,78311,54449],{"class":90},[76,78313,53845],{"class":53332},[76,78315,53339],{"class":90},[76,78317,78318,78320,78322],{"class":78,"line":11963},[76,78319,53817],{"class":90},[76,78321,53832],{"class":53332},[76,78323,53339],{"class":90},[76,78325,78326],{"class":78,"line":11969},[76,78327,149],{"emptyLinePlaceholder":148},[76,78329,78330,78332,78334],{"class":78,"line":11977},[76,78331,53817],{"class":90},[76,78333,52667],{"class":53332},[76,78335,53339],{"class":90},[24047,78337,78339],{"id":78338},"_3624-修饰符","3.6.2.4 修饰符",[19,78341,78342],{},[3583,78343],{"alt":71,"src":78344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78346,78347],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78349,78350],{},[3583,78351],{"alt":71,"src":78352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[66,78354,78356],{"className":52665,"code":78355,"language":52667,"meta":71,"style":71},"\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",[73,78357,78358,78368,78382,78390,78404,78424,78436,78444,78452,78460,78492,78523,78528,78560,78571,78604,78612,78620,78628],{"__ignoreMap":71},[76,78359,78360,78362,78364,78366],{"class":78,"line":79},[76,78361,53329],{"class":90},[76,78363,53333],{"class":53332},[76,78365,53336],{"class":86},[76,78367,53339],{"class":90},[76,78369,78370,78372,78374,78376,78378,78380],{"class":78,"line":94},[76,78371,584],{"class":90},[76,78373,52667],{"class":53332},[76,78375,53348],{"class":86},[76,78377,370],{"class":90},[76,78379,53353],{"class":126},[76,78381,53339],{"class":90},[76,78383,78384,78386,78388],{"class":78,"line":133},[76,78385,584],{"class":90},[76,78387,53366],{"class":53332},[76,78389,53339],{"class":90},[76,78391,78392,78394,78396,78398,78400,78402],{"class":78,"line":145},[76,78393,54176],{"class":90},[76,78395,53376],{"class":53332},[76,78397,53379],{"class":86},[76,78399,370],{"class":90},[76,78401,53384],{"class":126},[76,78403,53339],{"class":90},[76,78405,78406,78408,78410,78412,78414,78416,78418,78420,78422],{"class":78,"line":152},[76,78407,54176],{"class":90},[76,78409,53376],{"class":53332},[76,78411,16972],{"class":86},[76,78413,370],{"class":90},[76,78415,53423],{"class":126},[76,78417,53403],{"class":86},[76,78419,370],{"class":90},[76,78421,53430],{"class":126},[76,78423,53339],{"class":90},[76,78425,78426,78428,78430,78432,78434],{"class":78,"line":157},[76,78427,54176],{"class":90},[76,78429,53439],{"class":53332},[76,78431,53442],{"class":90},[76,78433,53439],{"class":53332},[76,78435,53339],{"class":90},[76,78437,78438,78440,78442],{"class":78,"line":246},[76,78439,53817],{"class":90},[76,78441,53366],{"class":53332},[76,78443,53339],{"class":90},[76,78445,78446,78448,78450],{"class":78,"line":251},[76,78447,584],{"class":90},[76,78449,53832],{"class":53332},[76,78451,53339],{"class":90},[76,78453,78454,78456,78458],{"class":78,"line":257},[76,78455,54176],{"class":90},[76,78457,53845],{"class":53332},[76,78459,53339],{"class":90},[76,78461,78462,78464,78466,78468,78470,78472,78475,78477,78479,78481,78483,78485,78488,78490],{"class":78,"line":641},[76,78463,75780],{"class":90},[76,78465,60277],{"class":86},[76,78467,123],{"class":90},[76,78469,795],{"class":126},[76,78471,3220],{"class":82},[76,78473,78474],{"class":50009},"java",[76,78476,2566],{"class":82},[76,78478,795],{"class":126},[76,78480,2819],{"class":90},[76,78482,77272],{"class":86},[76,78484,123],{"class":90},[76,78486,78487],{"class":126},"'java'",[76,78489,77782],{"class":90},[76,78491,77283],{"class":540},[76,78493,78494,78496,78498,78500,78502,78504,78506,78508,78510,78512,78514,78516,78519,78521],{"class":78,"line":646},[76,78495,75780],{"class":90},[76,78497,60277],{"class":86},[76,78499,123],{"class":90},[76,78501,795],{"class":126},[76,78503,3220],{"class":82},[76,78505,78474],{"class":50009},[76,78507,2566],{"class":82},[76,78509,795],{"class":126},[76,78511,2819],{"class":90},[76,78513,77272],{"class":86},[76,78515,123],{"class":90},[76,78517,78518],{"class":126},"'Java'",[76,78520,77782],{"class":90},[76,78522,77406],{"class":540},[76,78524,78525],{"class":78,"line":659},[76,78526,78527],{"class":540},"    \u002F\u002F 不区分大小写、\n",[76,78529,78530,78532,78534,78536,78538,78540,78542,78544,78546,78548,78550,78552,78554,78556,78558],{"class":78,"line":1608},[76,78531,75780],{"class":90},[76,78533,60277],{"class":86},[76,78535,123],{"class":90},[76,78537,795],{"class":126},[76,78539,3220],{"class":82},[76,78541,78474],{"class":50009},[76,78543,2566],{"class":82},[76,78545,795],{"class":126},[76,78547,2705],{"class":82},[76,78549,2819],{"class":90},[76,78551,77272],{"class":86},[76,78553,123],{"class":90},[76,78555,78518],{"class":126},[76,78557,77782],{"class":90},[76,78559,77283],{"class":540},[76,78561,78562,78564,78566,78568],{"class":78,"line":1632},[76,78563,13275],{"class":82},[76,78565,75946],{"class":119},[76,78567,15617],{"class":82},[76,78569,78570],{"class":126}," 'java是一门编程语言，学完java工资很高'\n",[76,78572,78573,78575,78578,78580,78583,78586,78588,78590,78592,78594,78597,78599,78602],{"class":78,"line":1637},[76,78574,13275],{"class":82},[76,78576,78577],{"class":119}," result",[76,78579,15617],{"class":82},[76,78581,78582],{"class":90}," str.",[76,78584,78585],{"class":86},"replace",[76,78587,123],{"class":90},[76,78589,795],{"class":126},[76,78591,78474],{"class":50009},[76,78593,795],{"class":126},[76,78595,78596],{"class":82},"ig",[76,78598,405],{"class":90},[76,78600,78601],{"class":126},"'前端'",[76,78603,130],{"class":90},[76,78605,78606,78608,78610],{"class":78,"line":1642},[76,78607,75780],{"class":90},[76,78609,60277],{"class":86},[76,78611,386],{"class":90},[76,78613,78614,78616,78618],{"class":78,"line":1652},[76,78615,54449],{"class":90},[76,78617,53845],{"class":53332},[76,78619,53339],{"class":90},[76,78621,78622,78624,78626],{"class":78,"line":1660},[76,78623,53817],{"class":90},[76,78625,53832],{"class":53332},[76,78627,53339],{"class":90},[76,78629,78630,78632,78634],{"class":78,"line":1683},[76,78631,53817],{"class":90},[76,78633,52667],{"class":53332},[76,78635,53339],{"class":90},[2178,78637,78638],{},"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":71,"searchDepth":94,"depth":94,"links":78640},[78641,78651,78663,78680,78687,78695],{"id":55392,"depth":94,"text":55393,"children":78642},[78643,78644,78645,78646,78647,78648,78649,78650],{"id":55396,"depth":133,"text":55397},{"id":55429,"depth":133,"text":55430},{"id":55468,"depth":133,"text":55469},{"id":55626,"depth":133,"text":55627},{"id":55674,"depth":133,"text":55675},{"id":55811,"depth":133,"text":55812},{"id":56132,"depth":133,"text":56133},{"id":59119,"depth":133,"text":59120},{"id":59147,"depth":94,"text":59148,"children":78652},[78653,78654,78655,78656,78657,78658,78659,78660,78661,78662],{"id":59151,"depth":133,"text":59152},{"id":59174,"depth":133,"text":59175},{"id":60089,"depth":133,"text":60090},{"id":60778,"depth":133,"text":60779},{"id":61060,"depth":133,"text":61061},{"id":65220,"depth":133,"text":65221},{"id":65390,"depth":133,"text":65391},{"id":65518,"depth":133,"text":65519},{"id":65543,"depth":133,"text":65544},{"id":66932,"depth":133,"text":66933},{"id":68085,"depth":94,"text":68086,"children":78664},[78665,78666,78667,78668,78669,78670,78671,78672,78673,78674,78675,78676,78677,78678,78679],{"id":68089,"depth":133,"text":68090},{"id":68743,"depth":133,"text":68744},{"id":70438,"depth":133,"text":70439},{"id":70479,"depth":133,"text":70480},{"id":70521,"depth":133,"text":70522},{"id":70535,"depth":133,"text":70536},{"id":70584,"depth":133,"text":70585},{"id":70596,"depth":133,"text":70597},{"id":70611,"depth":133,"text":70612},{"id":70647,"depth":133,"text":70648},{"id":70728,"depth":133,"text":70729},{"id":70856,"depth":133,"text":70857},{"id":70868,"depth":133,"text":70869},{"id":70887,"depth":133,"text":70888},{"id":72997,"depth":133,"text":72998},{"id":73016,"depth":94,"text":73017,"children":78681},[78682,78683,78684,78685,78686],{"id":73037,"depth":133,"text":73038},{"id":73057,"depth":133,"text":73058},{"id":73106,"depth":133,"text":73107},{"id":73231,"depth":133,"text":73232},{"id":73412,"depth":133,"text":73413},{"id":73430,"depth":94,"text":73431,"children":78688},[78689,78690,78691,78692,78693,78694],{"id":73445,"depth":133,"text":73446},{"id":73504,"depth":133,"text":73505},{"id":73528,"depth":133,"text":73529},{"id":73848,"depth":133,"text":73849},{"id":73880,"depth":133,"text":73881},{"id":73903,"depth":133,"text":73904},{"id":76971,"depth":94,"text":76972,"children":78696},[78697,78698],{"id":77005,"depth":133,"text":77006},{"id":77044,"depth":133,"text":77045},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55364,"description":2201},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78705,"title":78706,"body":78707,"description":2201,"extension":2202,"meta":94842,"navigation":148,"path":94843,"seo":94844,"stem":94845,"__hash__":94846},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78708,"toc":94778},[78709,78712,78715,78719,78723,78728,78733,78744,78748,78753,78756,78760,78763,78768,78772,78776,78779,78784,78787,78791,78794,78802,78805,78809,78814,78819,78822,78826,78831,78836,78839,78843,78848,78851,78856,78859,78864,78867,78872,78877,78880,78883,78887,78892,78897,78900,78904,78908,78911,78914,78917,78921,78925,78930,78935,78938,78942,78947,78952,78955,78958,78961,78964,78967,78970,78973,78976,78979,78984,78988,78993,78998,79001,79004,79007,79010,79013,79016,79019,79022,79026,79030,79033,79036,79039,79044,79046,79049,79052,79055,79058,79061,79064,79067,79070,79073,79076,79079,79082,79085,79090,79095,79100,79103,79107,79110,79115,79119,79121,79132,79137,79238,79241,79244,79247,79250,79253,79256,79259,79262,79264,79267,79270,79273,79276,79279,79281,79284,79287,79290,79293,79296,79299,79301,79304,79306,79308,79311,79315,79319,79322,79325,79328,79331,79334,79337,79340,79343,79346,79351,79471,79474,79477,79482,79485,79488,79491,79494,79499,79502,79505,79508,79511,79516,79519,79619,79684,79758,79762,79765,79768,79772,79775,79789,79818,79821,79824,79827,79830,79833,79836,79839,79841,79844,79847,79850,79853,79857,79862,79866,79871,79946,79949,80132,80135,80138,80141,80144,80147,80149,80152,80155,80158,80161,80164,80167,80169,80173,80176,80181,80184,80187,80190,80193,80195,80200,80203,80206,80209,80212,80214,80219,80222,80225,80227,80229,80232,80236,80239,80242,80247,80250,80253,80256,80306,80311,80315,80320,80323,80392,80395,80404,80408,80413,80416,80419,80427,80430,80447,82247,82251,82255,82260,82263,82267,82273,82279,82431,82436,82441,82444,82447,82450,82453,82456,82459,82462,82465,82468,82471,82474,82477,82482,82486,82489,82500,82504,82509,82512,82515,82518,82521,82524,82526,82529,82532,82535,82538,82540,82557,82560,82564,82567,82572,82577,82580,82583,82587,82590,82593,82602,82605,82609,82612,82617,82622,82689,82693,82696,82699,82704,82709,82795,82800,82804,82807,82810,82825,82828,82833,82837,82842,82951,82954,82965,83115,83119,83124,83233,83237,83242,83247,83252,83255,83262,83282,83318,83482,83487,83490,83495,83502,83505,83508,83511,83570,83626,83682,83686,83691,84006,84009,84013,84016,84021,84130,84135,84139,84144,84148,84219,84223,84225,84228,84231,84269,84545,84549,84566,84632,84666,84670,84673,84678,84707,84714,84723,84728,84743,84748,84757,84760,84897,84901,84963,84967,84972,85217,85221,85226,85229,85232,85235,85238,85242,85247,86828,86832,86836,86842,86845,86850,86854,86857,86862,86865,86876,86880,86885,86889,86894,86899,86902,86907,86911,86915,86918,86923,86928,86931,86934,86937,87059,87064,87166,87169,87172,87176,87181,87353,87358,87362,87365,87370,87436,87441,87444,87575,87578,87583,87586,87589,87680,87685,87688,87691,87694,87697,87702,87707,87710,87715,87720,87725,87729,87732,87735,87740,87745,87750,87755,87809,87812,87815,87820,87823,87826,87831,87836,87841,87845,87850,87864,87869,87872,87877,87881,87886,87891,87896,87901,87906,87911,87916,87921,87924,87928,87933,87936,87939,87942,87947,87952,87955,87958,87962,87965,87968,87973,87978,87983,87988,87991,87996,88001,88062,88067,88070,88075,89316,89321,89325,89329,89334,89337,89342,89347,89350,89355,89357,89362,89366,89369,89372,89383,89387,89392,89397,89452,89457,89462,89467,89678,89683,89687,89692,89695,89697,89700,89703,90150,90155,90162,90168,90171,90174,90438,90443,90447,90712,90717,90721,90726,90731,90736,90741,91072,91075,91080,91085,91088,91092,91096,91101,91106,91111,91116,91121,91126,91130,91133,91138,91143,91146,91220,91225,91230,91235,91237,91240,91610,91615,91620,91625,91628,91631,91733,91738,91743,91846,91850,91855,91859,91863,91868,91873,91876,91881,91884,91887,92280,92285,92288,92291,92294,92297,92817,92821,92826,92831,92836,92839,92844,92847,92850,93232,93237,93239,93241,93244,93247,93759,93763,93824,93827,93830,93833,93837,93840,93845,93850,94775],[10,78710,78706],{"id":78711},"_4js进阶",[19,78713,78714],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78716,78718],{"id":78717},"_41-作用域","4.1 作用域",[889,78720,78722],{"id":78721},"_411-局部作用域","4.1.1 局部作用域",[19,78724,78725],{},[3583,78726],{"alt":71,"src":78727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78729,78730],{},[3583,78731],{"alt":71,"src":78732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3261,78734,78735,78738,78741],{},[29,78736,78737],{},"函数作用域在函数内部",[29,78739,78740],{},"块级作用域在{}",[29,78742,78743],{},"对象的那个{}不是作用域，不是块作用域",[889,78745,78747],{"id":78746},"_412-全局作用域","4.1.2 全局作用域",[19,78749,78750],{},[3583,78751],{"alt":71,"src":78752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78754,78755],{},"window.a=10不要这样写",[889,78757,78759],{"id":78758},"_413-作用域链","4.1.3 作用域链",[19,78761,78762],{},"变量查找机制",[19,78764,78765],{},[3583,78766],{"alt":71,"src":78767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78769,78771],{"id":78770},"_42-垃圾回收机制","4.2 垃圾回收机制",[889,78773,78775],{"id":78774},"_421-大体介绍","4.2.1 大体介绍",[19,78777,78778],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78780,78781],{},[3583,78782],{"alt":71,"src":78783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78785,78786],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[889,78788,78790],{"id":78789},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78792,78793],{},"堆栈空间分配区别：",[26,78795,78796,78799],{},[29,78797,78798],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78800,78801],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78803,78804],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24047,78806,78808],{"id":78807},"_4221-引用计数","4.2.2.1 引用计数",[19,78810,78811],{},[3583,78812],{"alt":71,"src":78813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78815,78816],{},[3583,78817],{"alt":71,"src":78818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78820,78821],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24047,78823,78825],{"id":78824},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78827,78828],{},[3583,78829],{"alt":71,"src":78830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78832,78833],{},[3583,78834],{"alt":71,"src":78835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78837,78838],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78840,78842],{"id":78841},"_43-闭包","4.3 闭包",[19,78844,78845],{},[3583,78846],{"alt":71,"src":78847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78849,78850],{},"闭包：内层函数+外层函数的变量",[19,78852,78853],{},[3583,78854],{"alt":71,"src":78855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78857,78858],{},"closure就是闭包",[19,78860,78861],{},[3583,78862],{"alt":71,"src":78863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78865,78866],{},"内层函数必须包含外层函数的变量才是闭包",[19,78868,78869],{},[3583,78870],{"alt":71,"src":78871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78873,78874],{},[3583,78875],{"alt":71,"src":78876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78878,78879],{},"闭包可能会引起内存泄漏",[19,78881,78882],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78884,78886],{"id":78885},"_44-变量提升","4.4 变量提升",[19,78888,78889],{},[3583,78890],{"alt":71,"src":78891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78893,78894],{},[3583,78895],{"alt":71,"src":78896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78898,78899],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78901,78903],{"id":78902},"_45-函数进阶","4.5 函数进阶",[889,78905,78907],{"id":78906},"_451-函数提升","4.5.1 函数提升",[19,78909,78910],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78912,78913],{},"只提升函数声明，不提升函数调用",[53845,78915,78916],{},"\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",[889,78918,78920],{"id":78919},"_452-函数参数","4.5.2 函数参数",[24047,78922,78924],{"id":78923},"_4521-动态参数","4.5.2.1 动态参数",[19,78926,78927],{},[3583,78928],{"alt":71,"src":78929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78931,78932],{},[3583,78933],{"alt":71,"src":78934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78936,78937],{},"箭头函数里边没有arguments",[24047,78939,78941],{"id":78940},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78943,78944],{},[3583,78945],{"alt":71,"src":78946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78948,78949],{},[3583,78950],{"alt":71,"src":78951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78953,78954],{},"剩余参数使用的时候不需要写...",[19,78956,78957],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78959,78960],{},"  function getSum(a,b,...arr) {",[19,78962,78963],{},"  console.log(11)",[19,78965,78966],{},"  }",[19,78968,78969],{},"  getSum(1,2,3,4)",[19,78971,78972],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78974,78975],{},"  getSum(1,2)",[19,78977,78978],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78980,78981],{},[3583,78982],{"alt":71,"src":78983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24047,78985,78987],{"id":78986},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78989,78990],{},[3583,78991],{"alt":71,"src":78992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78994,78995],{},[3583,78996],{"alt":71,"src":78997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78999,79000],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79002,79003],{},"展开运算符可以用于数组之间的合并：",[19,79005,79006],{},"const arr1 = [1, 2, 3]",[19,79008,79009],{},"const arr2 = [3, 4, 5]",[19,79011,79012],{},"const arr = [...arr1, ...arr2]",[19,79014,79015],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79017,79018],{},"剩余参数：函数参数使用，得到真数组",[19,79020,79021],{},"展开运算符：数组中使用，数组展开",[889,79023,79025],{"id":79024},"_453-箭头函数","4.5.3 箭头函数",[24047,79027,79029],{"id":79028},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79031,79032],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79034,79035],{},"它不是万能的！！！",[19,79037,79038],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79040,79041],{},[3583,79042],{"alt":71,"src":79043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79045,2301],{},[19,79047,79048],{},"① 只有一个形参的时候，可以省略小括号：",[19,79050,79051],{},"const fn=x=>{console.log(x)}",[19,79053,79054],{},"② 只有一行代码时可以省略大括号：",[19,79056,79057],{},"const fn=x=>console.log(11)",[19,79059,79060],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79062,79063],{},"const fn=x=>x+x",[19,79065,79066],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79068,79069],{},"⑤ 阻止表单默认提交：",[19,79071,79072],{},"const form = document.querySelector('form')",[19,79074,79075],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79077,79078],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79080,79081],{},"const fn=uname=>({uname:uname})",[19,79083,79084],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79086,79087],{},[3583,79088],{"alt":71,"src":79089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79091,79092],{},[3583,79093],{"alt":71,"src":79094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79096,79097],{},[3583,79098],{"alt":71,"src":79099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79101,79102],{},"一定不要忘记用()，有()就理解为自带return",[24047,79104,79106],{"id":79105},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79108,79109],{},"箭头函数是没有动态参数的arguments",[19,79111,79112],{},[3583,79113],{"alt":71,"src":79114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24047,79116,79118],{"id":79117},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79120,13386],{},[26,79122,79123,79126,79129],{},[29,79124,79125],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,79127,79128],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,79130,79131],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79133,79134],{},[3583,79135],{"alt":71,"src":79136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[66,79138,79140],{"className":55099,"code":79139,"language":55101,"meta":71,"style":71},"  \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",[73,79141,79142,79150,79155,79160,79165,79170,79175,79179,79184,79188,79192,79197,79202,79207,79211,79215,79220,79225,79230],{"__ignoreMap":71},[76,79143,79144,79146,79148],{"class":78,"line":79},[76,79145,54176],{"class":90},[76,79147,53845],{"class":53332},[76,79149,53339],{"class":90},[76,79151,79152],{"class":78,"line":94},[76,79153,79154],{"class":90},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[76,79156,79157],{"class":78,"line":133},[76,79158,79159],{"class":90},"    console.log(this) \u002F\u002F指向window\n",[76,79161,79162],{"class":78,"line":145},[76,79163,79164],{"class":90},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[76,79166,79167],{"class":78,"line":152},[76,79168,79169],{"class":90},"    function fn() {\n",[76,79171,79172],{"class":78,"line":157},[76,79173,79174],{"class":90},"      console.log(this)  \u002F\u002F指向window\n",[76,79176,79177],{"class":78,"line":246},[76,79178,4283],{"class":90},[76,79180,79181],{"class":78,"line":251},[76,79182,79183],{"class":90},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[76,79185,79186],{"class":78,"line":257},[76,79187,149],{"emptyLinePlaceholder":148},[76,79189,79190],{"class":78,"line":641},[76,79191,73550],{"class":90},[76,79193,79194],{"class":78,"line":646},[76,79195,79196],{"class":90},"      name: 'andy',\n",[76,79198,79199],{"class":78,"line":659},[76,79200,79201],{"class":90},"      sayHai: function () {\n",[76,79203,79204],{"class":78,"line":1608},[76,79205,79206],{"class":90},"        console.log(this)\n",[76,79208,79209],{"class":78,"line":1632},[76,79210,54430],{"class":90},[76,79212,79213],{"class":78,"line":1637},[76,79214,4283],{"class":90},[76,79216,79217],{"class":78,"line":1642},[76,79218,79219],{"class":90},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[76,79221,79222],{"class":78,"line":1652},[76,79223,79224],{"class":90},"    \u002F\u002F 2.箭头函数的this\n",[76,79226,79227],{"class":78,"line":1660},[76,79228,79229],{"class":90},"    const fn = () => console.log(this)\n",[76,79231,79232,79234,79236],{"class":78,"line":1683},[76,79233,54449],{"class":90},[76,79235,53845],{"class":53332},[76,79237,53339],{"class":90},[19,79239,79240],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79242,79243],{},"const fn = () => console.log(this)",[19,79245,79246],{},"fn() \u002F\u002F指向window",[19,79248,79249],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79251,79252],{},"①",[19,79254,79255],{},"const obj = {",[19,79257,79258],{},"uname: 'pink老师',",[19,79260,79261],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79263,304],{},[19,79265,79266],{},"调用对象里边的函数",[19,79268,79269],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79271,79272],{},"obj.sayHai()",[19,79274,79275],{},"②",[19,79277,79278],{},"const obj1 = {",[19,79280,79258],{},[19,79282,79283],{},"sayHai: function () {",[19,79285,79286],{},"let i = 10",[19,79288,79289],{},"const count = () => {",[19,79291,79292],{},"console.log(this)",[19,79294,79295],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79297,79298],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79300,304],{},[19,79302,79303],{},"count()",[19,79305,304],{},[19,79307,304],{},[19,79309,79310],{},"obj1.sayHai()",[14,79312,79314],{"id":79313},"_46-解构赋值","4.6 解构赋值",[889,79316,79318],{"id":79317},"_461-数组解构","4.6.1 数组解构",[19,79320,79321],{},"以前要是使用数组中的值的话：",[19,79323,79324],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79326,79327],{},"const arr=[100,60,80]",[19,79329,79330],{},"const max=arr[0]",[19,79332,79333],{},"const min=arr[1]",[19,79335,79336],{},"const avg=arr[2]",[19,79338,79339],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79341,79342],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79344,79345],{},"这个写法就类似于上边的那种用很多const的方法",[19,79347,79348],{},[3583,79349],{"alt":71,"src":79350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[66,79352,79354],{"className":52665,"code":79353,"language":52667,"meta":71,"style":71},"①变量之间交换值:\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",[73,79355,79356,79361,79366,79371,79376,79381,79385,79389,79394,79398,79403,79408,79412,79417,79422,79433,79443,79448,79453,79458,79462,79466],{"__ignoreMap":71},[76,79357,79358],{"class":78,"line":79},[76,79359,79360],{"class":90},"①变量之间交换值:\n",[76,79362,79363],{"class":78,"line":94},[76,79364,79365],{"class":90},"let a=1\n",[76,79367,79368],{"class":78,"line":133},[76,79369,79370],{"class":90},"let b=2;\n",[76,79372,79373],{"class":78,"line":145},[76,79374,79375],{"class":90},"必须加这行代码，不然就会报错\n",[76,79377,79378],{"class":78,"line":152},[76,79379,79380],{"class":90},"[b,a]=[a,b]\n",[76,79382,79383],{"class":78,"line":157},[76,79384,149],{"emptyLinePlaceholder":148},[76,79386,79387],{"class":78,"line":246},[76,79388,149],{"emptyLinePlaceholder":148},[76,79390,79391],{"class":78,"line":251},[76,79392,79393],{"class":90},"可以写成下面的方式：\n",[76,79395,79396],{"class":78,"line":257},[76,79397,79365],{"class":90},[76,79399,79400],{"class":78,"line":641},[76,79401,79402],{"class":90},"let b=2\n",[76,79404,79405],{"class":78,"line":646},[76,79406,79407],{"class":90},";[b,a]=[a,b]\n",[76,79409,79410],{"class":78,"line":659},[76,79411,149],{"emptyLinePlaceholder":148},[76,79413,79414],{"class":78,"line":1608},[76,79415,79416],{"class":90},"②排序\n",[76,79418,79419],{"class":78,"line":1632},[76,79420,79421],{"class":90},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[76,79423,79424,79427,79430],{"class":78,"line":1637},[76,79425,79426],{"class":90},"for (let i = 0; i ",[76,79428,584],{"class":79429},"s7hpK",[76,79431,79432],{"class":90}," arr1.length; i++) {\n",[76,79434,79435,79438,79440],{"class":78,"line":1642},[76,79436,79437],{"class":90},"   for (let j = 0; j ",[76,79439,584],{"class":79429},[76,79441,79442],{"class":90}," arr1.length - 1; j++) {\n",[76,79444,79445],{"class":78,"line":1652},[76,79446,79447],{"class":90},"      if (arr1[j] > arr1[j + 1]) {\n",[76,79449,79450],{"class":78,"line":1660},[76,79451,79452],{"class":90},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[76,79454,79455],{"class":78,"line":1683},[76,79456,79457],{"class":90},"       }\n",[76,79459,79460],{"class":78,"line":1698},[76,79461,6391],{"class":90},[76,79463,79464],{"class":78,"line":1711},[76,79465,3685],{"class":90},[76,79467,79468],{"class":78,"line":1717},[76,79469,79470],{"class":90},"console.log(arr1)\n",[19,79472,79473],{},"数组解构的细节：",[19,79475,79476],{},"①变量多，单元值少",[19,79478,79479],{},[3583,79480],{"alt":71,"src":79481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79483,79484],{},"防止出现undefined的方法：",[19,79486,79487],{},"const [a=0,b=0] =[1]",[19,79489,79490],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79492,79493],{},"②变量少，单元值多",[19,79495,79496],{},[3583,79497],{"alt":71,"src":79498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79500,79501],{},"此时可以使用剩余参数来接收多余的值",[19,79503,79504],{},"const [a,b,...c]=[1,2,3,4]",[19,79506,79507],{},"console.log(c) 输出[3,4]",[19,79509,79510],{},"③可以按需导入，忽略某些返回值",[19,79512,79513],{},[3583,79514],{"alt":71,"src":79515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79517,79518],{},"④支持多维数组的结构",[66,79520,79524],{"className":79521,"code":79522,"language":79523,"meta":71,"style":71},"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",[73,79525,79526,79554,79570,79585,79600],{"__ignoreMap":71},[76,79527,79528,79530,79532,79534,79536,79538,79540,79542,79545,79547,79549,79551],{"class":78,"line":79},[76,79529,8870],{"class":82},[76,79531,53865],{"class":90},[76,79533,370],{"class":82},[76,79535,54258],{"class":90},[76,79537,669],{"class":119},[76,79539,405],{"class":90},[76,79541,2345],{"class":119},[76,79543,79544],{"class":90},", [",[76,79546,2339],{"class":119},[76,79548,405],{"class":90},[76,79550,2557],{"class":119},[76,79552,79553],{"class":90},"]]\n",[76,79555,79556,79559,79561,79563,79565,79567],{"class":78,"line":94},[76,79557,79558],{"class":90},"console.",[76,79560,60277],{"class":86},[76,79562,5935],{"class":90},[76,79564,1294],{"class":119},[76,79566,6298],{"class":90},[76,79568,79569],{"class":540},"  \u002F\u002F1\n",[76,79571,79572,79574,79576,79578,79580,79582],{"class":78,"line":133},[76,79573,79558],{"class":90},[76,79575,60277],{"class":86},[76,79577,5935],{"class":90},[76,79579,669],{"class":119},[76,79581,6298],{"class":90},[76,79583,79584],{"class":540},"  \u002F\u002F2\n",[76,79586,79587,79589,79591,79593,79595,79597],{"class":78,"line":145},[76,79588,79558],{"class":90},[76,79590,60277],{"class":86},[76,79592,5935],{"class":90},[76,79594,2345],{"class":119},[76,79596,6298],{"class":90},[76,79598,79599],{"class":540},"  \u002F\u002F[3,4]\n",[76,79601,79602,79604,79606,79608,79610,79612,79614,79616],{"class":78,"line":152},[76,79603,79558],{"class":90},[76,79605,60277],{"class":86},[76,79607,5935],{"class":90},[76,79609,2345],{"class":119},[76,79611,6983],{"class":90},[76,79613,1294],{"class":119},[76,79615,6298],{"class":90},[76,79617,79618],{"class":540},"  \u002F\u002F3\n",[66,79620,79622],{"className":79521,"code":79621,"language":79523,"meta":71,"style":71},"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",[73,79623,79624,79651,79662,79673],{"__ignoreMap":71},[76,79625,79626,79628,79631,79633,79635,79637,79639,79641,79643,79645,79647,79649],{"class":78,"line":79},[76,79627,8870],{"class":82},[76,79629,79630],{"class":90}," [a, b, c] ",[76,79632,370],{"class":82},[76,79634,54258],{"class":90},[76,79636,669],{"class":119},[76,79638,405],{"class":90},[76,79640,2345],{"class":119},[76,79642,79544],{"class":90},[76,79644,2339],{"class":119},[76,79646,405],{"class":90},[76,79648,2557],{"class":119},[76,79650,79553],{"class":90},[76,79652,79653,79655,79657,79660],{"class":78,"line":94},[76,79654,79558],{"class":90},[76,79656,60277],{"class":86},[76,79658,79659],{"class":90},"(a)",[76,79661,79569],{"class":540},[76,79663,79664,79666,79668,79671],{"class":78,"line":133},[76,79665,79558],{"class":90},[76,79667,60277],{"class":86},[76,79669,79670],{"class":90},"(b)",[76,79672,79584],{"class":540},[76,79674,79675,79677,79679,79682],{"class":78,"line":145},[76,79676,79558],{"class":90},[76,79678,60277],{"class":86},[76,79680,79681],{"class":90},"(c)",[76,79683,79599],{"class":540},[66,79685,79687],{"className":79521,"code":79686,"language":79523,"meta":71,"style":71},"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",[73,79688,79689,79716,79726,79736,79746],{"__ignoreMap":71},[76,79690,79691,79693,79696,79698,79700,79702,79704,79706,79708,79710,79712,79714],{"class":78,"line":79},[76,79692,8870],{"class":82},[76,79694,79695],{"class":90}," [a, b, [c, d]] ",[76,79697,370],{"class":82},[76,79699,54258],{"class":90},[76,79701,669],{"class":119},[76,79703,405],{"class":90},[76,79705,2345],{"class":119},[76,79707,79544],{"class":90},[76,79709,2339],{"class":119},[76,79711,405],{"class":90},[76,79713,2557],{"class":119},[76,79715,79553],{"class":90},[76,79717,79718,79720,79722,79724],{"class":78,"line":94},[76,79719,79558],{"class":90},[76,79721,60277],{"class":86},[76,79723,79659],{"class":90},[76,79725,79569],{"class":540},[76,79727,79728,79730,79732,79734],{"class":78,"line":133},[76,79729,79558],{"class":90},[76,79731,60277],{"class":86},[76,79733,79670],{"class":90},[76,79735,79584],{"class":540},[76,79737,79738,79740,79742,79744],{"class":78,"line":145},[76,79739,79558],{"class":90},[76,79741,60277],{"class":86},[76,79743,79681],{"class":90},[76,79745,79618],{"class":540},[76,79747,79748,79750,79752,79755],{"class":78,"line":152},[76,79749,79558],{"class":90},[76,79751,60277],{"class":86},[76,79753,79754],{"class":90},"(d)",[76,79756,79757],{"class":540},"  \u002F\u002F4\n",[889,79759,79761],{"id":79760},"_462-对象解构","4.6.2 对象解构",[19,79763,79764],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79766,79767],{},"用的非常非常多！！！！！！",[24047,79769,79771],{"id":79770},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79773,79774],{},"基本语法：",[26,79776,79777,79780,79783,79786],{},[29,79778,79779],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79781,79782],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79784,79785],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79787,79788],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[66,79790,79792],{"className":52665,"code":79791,"language":52667,"meta":71,"style":71},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[73,79793,79794,79799,79804,79809,79813],{"__ignoreMap":71},[76,79795,79796],{"class":78,"line":79},[76,79797,79798],{"class":90},"const obj = {\n",[76,79800,79801],{"class":78,"line":94},[76,79802,79803],{"class":90},"   uname: 'pink老师',\n",[76,79805,79806],{"class":78,"line":133},[76,79807,79808],{"class":90},"   age: 18,\n",[76,79810,79811],{"class":78,"line":145},[76,79812,3685],{"class":90},[76,79814,79815],{"class":78,"line":152},[76,79816,79817],{"class":90},"const { uname, age } = obj\n",[19,79819,79820],{},"上方代码这样写等价于：",[19,79822,79823],{},"const uname等价于obj.uname",[19,79825,79826],{},"变量名可以重新改名：",[19,79828,79829],{},"const uname='red老师'",[19,79831,79832],{},"const user={",[19,79834,79835],{},"  uname:'pink老师',",[19,79837,79838],{},"  age:18",[19,79840,304],{},[19,79842,79843],{},"const {uname,age}=user",[19,79845,79846],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79848,79849],{},"const {旧变量名：新变量名}=对象",[19,79851,79852],{},"const {uname:username,age}=user",[24047,79854,79856],{"id":79855},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79858,79859],{},[3583,79860],{"alt":71,"src":79861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24047,79863,79865],{"id":79864},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79867,79868],{},[3583,79869],{"alt":71,"src":79870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[66,79872,79874],{"className":55099,"code":79873,"language":55101,"meta":71,"style":71},"  \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",[73,79875,79876,79884,79889,79894,79899,79904,79909,79914,79919,79924,79928,79933,79938],{"__ignoreMap":71},[76,79877,79878,79880,79882],{"class":78,"line":79},[76,79879,54176],{"class":90},[76,79881,53845],{"class":53332},[76,79883,53339],{"class":90},[76,79885,79886],{"class":78,"line":94},[76,79887,79888],{"class":90},"    const pig = {\n",[76,79890,79891],{"class":78,"line":133},[76,79892,79893],{"class":90},"      name: '佩奇',\n",[76,79895,79896],{"class":78,"line":145},[76,79897,79898],{"class":90},"      family: {\n",[76,79900,79901],{"class":78,"line":152},[76,79902,79903],{"class":90},"        mother: '猪妈妈',\n",[76,79905,79906],{"class":78,"line":157},[76,79907,79908],{"class":90},"        father: '猪爸爸',\n",[76,79910,79911],{"class":78,"line":246},[76,79912,79913],{"class":90},"        sister: '乔治'\n",[76,79915,79916],{"class":78,"line":251},[76,79917,79918],{"class":90},"      },\n",[76,79920,79921],{"class":78,"line":257},[76,79922,79923],{"class":90},"      age: 6\n",[76,79925,79926],{"class":78,"line":641},[76,79927,4283],{"class":90},[76,79929,79930],{"class":78,"line":646},[76,79931,79932],{"class":90},"    \u002F\u002F 多级对象解构\n",[76,79934,79935],{"class":78,"line":659},[76,79936,79937],{"class":90},"    const { name, family: { mother, father, sister }, age } = pig\n",[76,79939,79940,79942,79944],{"class":78,"line":1608},[76,79941,54449],{"class":90},[76,79943,53845],{"class":53332},[76,79945,53339],{"class":90},[19,79947,79948],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[66,79950,79953],{"className":79951,"code":79952,"language":78474,"meta":71,"style":71},"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",[73,79954,79955,79960,79971,79983,79995,80004,80008,80019,80031,80041,80046,80050,80060,80071,80080,80084,80088,80099,80110,80119,80123,80128],{"__ignoreMap":71},[76,79956,79957],{"class":78,"line":79},[76,79958,79959],{"class":540},"    \u002F\u002F 这是后台传递过来的数据\n",[76,79961,79962,79964,79967,79969],{"class":78,"line":94},[76,79963,13275],{"class":82},[76,79965,79966],{"class":90}," msg ",[76,79968,370],{"class":82},[76,79970,17623],{"class":90},[76,79972,79973,79976,79978,79981],{"class":78,"line":133},[76,79974,79975],{"class":126},"      \"code\"",[76,79977,3117],{"class":82},[76,79979,79980],{"class":119}," 200",[76,79982,33509],{"class":90},[76,79984,79985,79988,79990,79993],{"class":78,"line":145},[76,79986,79987],{"class":126},"      \"msg\"",[76,79989,3117],{"class":82},[76,79991,79992],{"class":126}," \"获取新闻列表成功\"",[76,79994,33509],{"class":90},[76,79996,79997,80000,80002],{"class":78,"line":152},[76,79998,79999],{"class":126},"      \"data\"",[76,80001,3117],{"class":82},[76,80003,57478],{"class":90},[76,80005,80006],{"class":78,"line":157},[76,80007,4605],{"class":90},[76,80009,80010,80013,80015,80017],{"class":78,"line":246},[76,80011,80012],{"class":126},"          \"id\"",[76,80014,3117],{"class":82},[76,80016,27168],{"class":119},[76,80018,33509],{"class":90},[76,80020,80021,80024,80026,80029],{"class":78,"line":251},[76,80022,80023],{"class":126},"          \"title\"",[76,80025,3117],{"class":82},[76,80027,80028],{"class":126}," \"5G商用自己，三大运用商收入下降\"",[76,80030,33509],{"class":90},[76,80032,80033,80036,80038],{"class":78,"line":257},[76,80034,80035],{"class":126},"          \"count\"",[76,80037,3117],{"class":82},[76,80039,80040],{"class":119}," 58\n",[76,80042,80043],{"class":78,"line":641},[76,80044,80045],{"class":90},"        },\n",[76,80047,80048],{"class":78,"line":646},[76,80049,4605],{"class":90},[76,80051,80052,80054,80056,80058],{"class":78,"line":659},[76,80053,80012],{"class":126},[76,80055,3117],{"class":82},[76,80057,16807],{"class":119},[76,80059,33509],{"class":90},[76,80061,80062,80064,80066,80069],{"class":78,"line":1608},[76,80063,80023],{"class":126},[76,80065,3117],{"class":82},[76,80067,80068],{"class":126}," \"国际媒体头条速览\"",[76,80070,33509],{"class":90},[76,80072,80073,80075,80077],{"class":78,"line":1632},[76,80074,80035],{"class":126},[76,80076,3117],{"class":82},[76,80078,80079],{"class":119}," 56\n",[76,80081,80082],{"class":78,"line":1637},[76,80083,80045],{"class":90},[76,80085,80086],{"class":78,"line":1642},[76,80087,4605],{"class":90},[76,80089,80090,80092,80094,80097],{"class":78,"line":1652},[76,80091,80012],{"class":126},[76,80093,3117],{"class":82},[76,80095,80096],{"class":119}," 3",[76,80098,33509],{"class":90},[76,80100,80101,80103,80105,80108],{"class":78,"line":1660},[76,80102,80023],{"class":126},[76,80104,3117],{"class":82},[76,80106,80107],{"class":126}," \"乌克兰和俄罗斯持续冲突\"",[76,80109,33509],{"class":90},[76,80111,80112,80114,80116],{"class":78,"line":1683},[76,80113,80035],{"class":126},[76,80115,3117],{"class":82},[76,80117,80118],{"class":119}," 1669\n",[76,80120,80121],{"class":78,"line":1698},[76,80122,80045],{"class":90},[76,80124,80125],{"class":78,"line":1711},[76,80126,80127],{"class":90},"      ]\n",[76,80129,80130],{"class":78,"line":1717},[76,80131,4283],{"class":90},[19,80133,80134],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80136,80137],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80139,80140],{},"\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,80142,80143],{},"function({data}) {",[19,80145,80146],{},"console.log(data)",[19,80148,304],{},[19,80150,80151],{},"render(msg)",[19,80153,80154],{},"实参传递给形参的时候解构了",[19,80156,80157],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80159,80160],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80162,80163],{},"function render({data:mydata}) {",[19,80165,80166],{},"  console.log(data)",[19,80168,304],{},[889,80170,80172],{"id":80171},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80174,80175],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,80177,80178],{},[29,80179,80180],{},"如果对一个数组进行遍历，有两种方式：",[19,80182,80183],{},"①法1",[19,80185,80186],{},"const arr=[1,2,3]",[19,80188,80189],{},"arr.map(function(item,index) {",[19,80191,80192],{},"  console.log(item)",[19,80194,54496],{},[19,80196,80197],{},[3583,80198],{"alt":71,"src":80199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80201,80202],{},"②法2",[19,80204,80205],{},"const str='pink'",[19,80207,80208],{},"[1,2,3].map(function(item,index) {",[19,80210,80211],{},"console.log(item)",[19,80213,54496],{},[19,80215,80216],{},[3583,80217],{"alt":71,"src":80218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80220,80221],{},"此时会报错",[19,80223,80224],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80226,80211],{},[19,80228,54496],{},[19,80230,80231],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80233,80235],{"id":80234},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80237,80238],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80240,80241],{},"可以理解为加强版的for循环",[19,80243,80244],{},[3583,80245],{"alt":71,"src":80246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80248,80249],{},"里边不写return，不返回数组，只遍历不返回",[19,80251,80252],{},"map是返回数组",[19,80254,80255],{},"forEach主要用于遍历数组对象",[66,80257,80259],{"className":55099,"code":80258,"language":55101,"meta":71,"style":71},"  \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",[73,80260,80261,80269,80274,80279,80284,80289,80293,80298],{"__ignoreMap":71},[76,80262,80263,80265,80267],{"class":78,"line":79},[76,80264,54176],{"class":90},[76,80266,53845],{"class":53332},[76,80268,53339],{"class":90},[76,80270,80271],{"class":78,"line":94},[76,80272,80273],{"class":90},"    const arr = ['red', 'green', 'pink']\n",[76,80275,80276],{"class":78,"line":133},[76,80277,80278],{"class":90},"    const result = arr.forEach(function (item, index) {\n",[76,80280,80281],{"class":78,"line":145},[76,80282,80283],{"class":90},"      console.log(item)\n",[76,80285,80286],{"class":78,"line":152},[76,80287,80288],{"class":90},"      console.log(index)\n",[76,80290,80291],{"class":78,"line":157},[76,80292,35499],{"class":90},[76,80294,80295],{"class":78,"line":246},[76,80296,80297],{"class":90},"    console.log(result)\n",[76,80299,80300,80302,80304],{"class":78,"line":251},[76,80301,54449],{"class":90},[76,80303,53845],{"class":53332},[76,80305,53339],{"class":90},[19,80307,80308],{},[3583,80309],{"alt":71,"src":80310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80312,80314],{"id":80313},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80316,80317],{},[3583,80318],{"alt":71,"src":80319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80321,80322],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[66,80324,80326],{"className":55099,"code":80325,"language":55101,"meta":71,"style":71},"\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",[73,80327,80328,80336,80344,80349,80354,80358,80362,80367,80371,80376,80384],{"__ignoreMap":71},[76,80329,80330,80332,80334],{"class":78,"line":79},[76,80331,584],{"class":90},[76,80333,53832],{"class":53332},[76,80335,53339],{"class":90},[76,80337,80338,80340,80342],{"class":78,"line":94},[76,80339,54176],{"class":90},[76,80341,53845],{"class":53332},[76,80343,53339],{"class":90},[76,80345,80346],{"class":78,"line":133},[76,80347,80348],{"class":90},"    const arr = [10, 20, 30]\n",[76,80350,80351],{"class":78,"line":145},[76,80352,80353],{"class":90},"    const newArr = arr.filter(function (item, index) {\n",[76,80355,80356],{"class":78,"line":152},[76,80357,80283],{"class":90},[76,80359,80360],{"class":78,"line":157},[76,80361,80288],{"class":90},[76,80363,80364],{"class":78,"line":246},[76,80365,80366],{"class":90},"      return item >= 20\n",[76,80368,80369],{"class":78,"line":251},[76,80370,35499],{"class":90},[76,80372,80373],{"class":78,"line":257},[76,80374,80375],{"class":90},"    console.log(newArr)\n",[76,80377,80378,80380,80382],{"class":78,"line":641},[76,80379,54449],{"class":90},[76,80381,53845],{"class":53332},[76,80383,53339],{"class":90},[76,80385,80386,80388,80390],{"class":78,"line":646},[76,80387,53817],{"class":90},[76,80389,53832],{"class":53332},[76,80391,53339],{"class":90},[19,80393,80394],{},"这个也可以写成箭头函数：",[66,80396,80398],{"className":52665,"code":80397,"language":52667,"meta":71,"style":71},"const newArr = arr.filter(item => item >= 20)\n",[73,80399,80400],{"__ignoreMap":71},[76,80401,80402],{"class":78,"line":79},[76,80403,80397],{"class":90},[14,80405,80407],{"id":80406},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80409,80410],{},[3583,80411],{"alt":71,"src":80412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80414,80415],{},"步骤：",[19,80417,80418],{},"①：渲染页面模块",[3261,80420,80421,80424],{},[29,80422,80423],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80425,80426],{},"用forEach+字符串的形式",[19,80428,80429],{},"②：点击不同需求，显示不同页面内容",[3261,80431,80432,80435,80438,80441,80444],{},[29,80433,80434],{},"点击采取事件委托方式 .filter",[29,80436,80437],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80439,80440],{},"筛选条件是根据点击的 data-index 来判断",[29,80442,80443],{},"可以使用对象解构，把事件对象解构",[29,80445,80446],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[66,80448,80450],{"className":52665,"code":80449,"language":52667,"meta":71,"style":71},"\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",[73,80451,80452,80462,80476,80480,80488,80502,80522,80534,80542,80548,80558,80568,80578,80582,80586,80592,80605,80617,80627,80639,80643,80647,80654,80667,80679,80695,80713,80726,80730,80734,80746,80756,80760,80764,80771,80812,80839,80849,80853,80857,80865,80877,80881,80885,80893,80905,80917,80928,80932,80936,80945,80957,80968,80972,80976,80985,80997,81009,81013,81017,81024,81034,81046,81058,81073,81077,81081,81089,81105,81115,81125,81135,81147,81151,81155,81165,81176,81186,81190,81198,81206,81210,81218,81233,81259,81284,81309,81328,81336,81350,81355,81360,81365,81370,81375,81383,81391,81396,81407,81412,81422,81432,81442,81452,81456,81460,81469,81478,81487,81496,81500,81504,81513,81522,81531,81540,81544,81548,81557,81566,81575,81584,81588,81592,81601,81610,81619,81628,81632,81636,81645,81654,81663,81672,81676,81680,81689,81698,81707,81716,81720,81724,81733,81742,81750,81759,81763,81767,81771,81776,81788,81793,81805,81809,81826,81853,81862,81867,81877,81887,81896,81901,81906,81910,81915,81932,81936,81941,81949,81954,81981,81986,82006,82011,82023,82028,82033,82038,82049,82063,82100,82118,82151,82168,82192,82196,82201,82207,82211,82215,82219,82227,82235,82239],{"__ignoreMap":71},[76,80453,80454,80456,80458,80460],{"class":78,"line":79},[76,80455,53329],{"class":90},[76,80457,53333],{"class":53332},[76,80459,53336],{"class":86},[76,80461,53339],{"class":90},[76,80463,80464,80466,80468,80470,80472,80474],{"class":78,"line":94},[76,80465,584],{"class":90},[76,80467,52667],{"class":53332},[76,80469,53348],{"class":86},[76,80471,370],{"class":90},[76,80473,53353],{"class":126},[76,80475,53339],{"class":90},[76,80477,80478],{"class":78,"line":133},[76,80479,149],{"emptyLinePlaceholder":148},[76,80481,80482,80484,80486],{"class":78,"line":145},[76,80483,584],{"class":90},[76,80485,53366],{"class":53332},[76,80487,53339],{"class":90},[76,80489,80490,80492,80494,80496,80498,80500],{"class":78,"line":152},[76,80491,54176],{"class":90},[76,80493,53376],{"class":53332},[76,80495,53379],{"class":86},[76,80497,370],{"class":90},[76,80499,53384],{"class":126},[76,80501,53339],{"class":90},[76,80503,80504,80506,80508,80510,80512,80514,80516,80518,80520],{"class":78,"line":157},[76,80505,54176],{"class":90},[76,80507,53376],{"class":53332},[76,80509,16972],{"class":86},[76,80511,370],{"class":90},[76,80513,53423],{"class":126},[76,80515,53403],{"class":86},[76,80517,370],{"class":90},[76,80519,53430],{"class":126},[76,80521,53339],{"class":90},[76,80523,80524,80526,80528,80530,80532],{"class":78,"line":246},[76,80525,54176],{"class":90},[76,80527,53439],{"class":53332},[76,80529,53442],{"class":90},[76,80531,53439],{"class":53332},[76,80533,53339],{"class":90},[76,80535,80536,80538,80540],{"class":78,"line":251},[76,80537,54176],{"class":90},[76,80539,2178],{"class":53332},[76,80541,53339],{"class":90},[76,80543,80544,80546],{"class":78,"line":257},[76,80545,8482],{"class":53332},[76,80547,17623],{"class":90},[76,80549,80550,80552,80554,80556],{"class":78,"line":641},[76,80551,56726],{"class":119},[76,80553,53469],{"class":90},[76,80555,1294],{"class":119},[76,80557,3415],{"class":90},[76,80559,80560,80562,80564,80566],{"class":78,"line":646},[76,80561,56737],{"class":119},[76,80563,53469],{"class":90},[76,80565,1294],{"class":119},[76,80567,3415],{"class":90},[76,80569,80570,80572,80574,80576],{"class":78,"line":659},[76,80571,74623],{"class":119},[76,80573,53469],{"class":90},[76,80575,62534],{"class":119},[76,80577,3415],{"class":90},[76,80579,80580],{"class":78,"line":1608},[76,80581,4283],{"class":90},[76,80583,80584],{"class":78,"line":1632},[76,80585,149],{"emptyLinePlaceholder":148},[76,80587,80588,80590],{"class":78,"line":1637},[76,80589,64151],{"class":86},[76,80591,17623],{"class":90},[76,80593,80594,80596,80598,80601,80603],{"class":78,"line":1642},[76,80595,56802],{"class":119},[76,80597,53469],{"class":90},[76,80599,80600],{"class":119},"990",[76,80602,53524],{"class":82},[76,80604,3415],{"class":90},[76,80606,80607,80609,80611,80613,80615],{"class":78,"line":1652},[76,80608,56737],{"class":119},[76,80610,53469],{"class":90},[76,80612,1294],{"class":119},[76,80614,53588],{"class":119},[76,80616,3415],{"class":90},[76,80618,80619,80621,80623,80625],{"class":78,"line":1660},[76,80620,57040],{"class":119},[76,80622,53469],{"class":90},[76,80624,53509],{"class":119},[76,80626,3415],{"class":90},[76,80628,80629,80632,80634,80637],{"class":78,"line":1683},[76,80630,80631],{"class":119},"      flex-wrap",[76,80633,53469],{"class":90},[76,80635,80636],{"class":119},"wrap",[76,80638,3415],{"class":90},[76,80640,80641],{"class":78,"line":1698},[76,80642,4283],{"class":90},[76,80644,80645],{"class":78,"line":1711},[76,80646,149],{"emptyLinePlaceholder":148},[76,80648,80649,80652],{"class":78,"line":1717},[76,80650,80651],{"class":86},"    .item",[76,80653,17623],{"class":90},[76,80655,80656,80658,80660,80663,80665],{"class":78,"line":1728},[76,80657,56802],{"class":119},[76,80659,53469],{"class":90},[76,80661,80662],{"class":119},"240",[76,80664,53524],{"class":82},[76,80666,3415],{"class":90},[76,80668,80669,80671,80673,80675,80677],{"class":78,"line":1740},[76,80670,64028],{"class":119},[76,80672,53469],{"class":90},[76,80674,402],{"class":119},[76,80676,53524],{"class":82},[76,80678,3415],{"class":90},[76,80680,80681,80683,80685,80687,80689,80691,80693],{"class":78,"line":1746},[76,80682,56726],{"class":119},[76,80684,53469],{"class":90},[76,80686,408],{"class":119},[76,80688,53524],{"class":82},[76,80690,1122],{"class":119},[76,80692,53524],{"class":82},[76,80694,3415],{"class":90},[76,80696,80697,80699,80701,80703,80706,80709,80711],{"class":78,"line":1751},[76,80698,63888],{"class":119},[76,80700,53469],{"class":90},[76,80702,30170],{"class":119},[76,80704,80705],{"class":119}," ease",[76,80707,80708],{"class":119}," .5",[76,80710,2954],{"class":82},[76,80712,3415],{"class":90},[76,80714,80715,80718,80720,80722,80724],{"class":78,"line":1756},[76,80716,80717],{"class":119},"      margin-bottom",[76,80719,53469],{"class":90},[76,80721,408],{"class":119},[76,80723,53524],{"class":82},[76,80725,3415],{"class":90},[76,80727,80728],{"class":78,"line":1766},[76,80729,4283],{"class":90},[76,80731,80732],{"class":78,"line":1773},[76,80733,149],{"emptyLinePlaceholder":148},[76,80735,80736,80739,80741,80744],{"class":78,"line":1793},[76,80737,80738],{"class":86},"    .item:nth-child",[76,80740,123],{"class":90},[76,80742,80743],{"class":119},"4n",[76,80745,14495],{"class":90},[76,80747,80748,80750,80752,80754],{"class":78,"line":1806},[76,80749,64028],{"class":119},[76,80751,53469],{"class":90},[76,80753,1294],{"class":119},[76,80755,3415],{"class":90},[76,80757,80758],{"class":78,"line":1817},[76,80759,4283],{"class":90},[76,80761,80762],{"class":78,"line":1822},[76,80763,149],{"emptyLinePlaceholder":148},[76,80765,80766,80769],{"class":78,"line":1835},[76,80767,80768],{"class":86},"    .item:hover",[76,80770,17623],{"class":90},[76,80772,80773,80776,80778,80780,80782,80784,80786,80788,80790,80793,80795,80797,80799,80801,80803,80805,80807,80810],{"class":78,"line":1847},[76,80774,80775],{"class":119},"      box-shadow",[76,80777,53469],{"class":90},[76,80779,1294],{"class":119},[76,80781,53524],{"class":82},[76,80783,587],{"class":119},[76,80785,53524],{"class":82},[76,80787,4244],{"class":119},[76,80789,53524],{"class":82},[76,80791,80792],{"class":119}," rgba",[76,80794,123],{"class":90},[76,80796,1294],{"class":119},[76,80798,405],{"class":90},[76,80800,1294],{"class":119},[76,80802,405],{"class":90},[76,80804,1294],{"class":119},[76,80806,405],{"class":90},[76,80808,80809],{"class":119},".2",[76,80811,4807],{"class":90},[76,80813,80814,80817,80819,80822,80824,80826,80828,80831,80833,80835,80837],{"class":78,"line":1852},[76,80815,80816],{"class":119},"      transform",[76,80818,53469],{"class":90},[76,80820,80821],{"class":119},"translate3d",[76,80823,123],{"class":90},[76,80825,1294],{"class":119},[76,80827,405],{"class":90},[76,80829,80830],{"class":119},"-4",[76,80832,53524],{"class":82},[76,80834,405],{"class":90},[76,80836,1294],{"class":119},[76,80838,4807],{"class":90},[76,80840,80841,80843,80845,80847],{"class":78,"line":1862},[76,80842,64053],{"class":119},[76,80844,53469],{"class":90},[76,80846,64058],{"class":119},[76,80848,3415],{"class":90},[76,80850,80851],{"class":78,"line":1874},[76,80852,4283],{"class":90},[76,80854,80855],{"class":78,"line":1879},[76,80856,149],{"emptyLinePlaceholder":148},[76,80858,80859,80861,80863],{"class":78,"line":1884},[76,80860,80651],{"class":86},[76,80862,57646],{"class":53332},[76,80864,17623],{"class":90},[76,80866,80867,80869,80871,80873,80875],{"class":78,"line":1889},[76,80868,56802],{"class":119},[76,80870,53469],{"class":90},[76,80872,2575],{"class":119},[76,80874,2592],{"class":82},[76,80876,3415],{"class":90},[76,80878,80879],{"class":78,"line":1900},[76,80880,4283],{"class":90},[76,80882,80883],{"class":78,"line":1906},[76,80884,149],{"emptyLinePlaceholder":148},[76,80886,80887,80889,80891],{"class":78,"line":1924},[76,80888,80651],{"class":86},[76,80890,64332],{"class":86},[76,80892,17623],{"class":90},[76,80894,80895,80897,80899,80901,80903],{"class":78,"line":1929},[76,80896,56953],{"class":119},[76,80898,53469],{"class":90},[76,80900,1214],{"class":119},[76,80902,53524],{"class":82},[76,80904,3415],{"class":90},[76,80906,80907,80909,80911,80913,80915],{"class":78,"line":1944},[76,80908,80717],{"class":119},[76,80910,53469],{"class":90},[76,80912,402],{"class":119},[76,80914,53524],{"class":82},[76,80916,3415],{"class":90},[76,80918,80919,80921,80923,80926],{"class":78,"line":1950},[76,80920,59446],{"class":119},[76,80922,53469],{"class":90},[76,80924,80925],{"class":119},"#666",[76,80927,3415],{"class":90},[76,80929,80930],{"class":78,"line":1965},[76,80931,4283],{"class":90},[76,80933,80934],{"class":78,"line":1971},[76,80935,149],{"emptyLinePlaceholder":148},[76,80937,80938,80940,80943],{"class":78,"line":1985},[76,80939,80651],{"class":86},[76,80941,80942],{"class":86}," .price",[76,80944,17623],{"class":90},[76,80946,80947,80949,80951,80953,80955],{"class":78,"line":1991},[76,80948,56953],{"class":119},[76,80950,53469],{"class":90},[76,80952,3008],{"class":119},[76,80954,53524],{"class":82},[76,80956,3415],{"class":90},[76,80958,80959,80961,80963,80966],{"class":78,"line":2005},[76,80960,59446],{"class":119},[76,80962,53469],{"class":90},[76,80964,80965],{"class":119},"firebrick",[76,80967,3415],{"class":90},[76,80969,80970],{"class":78,"line":2017},[76,80971,4283],{"class":90},[76,80973,80974],{"class":78,"line":2023},[76,80975,149],{"emptyLinePlaceholder":148},[76,80977,80978,80980,80983],{"class":78,"line":2031},[76,80979,80651],{"class":86},[76,80981,80982],{"class":86}," .price::before",[76,80984,17623],{"class":90},[76,80986,80987,80990,80992,80995],{"class":78,"line":11880},[76,80988,80989],{"class":119},"      content",[76,80991,53469],{"class":90},[76,80993,80994],{"class":126},"'￥'",[76,80996,3415],{"class":90},[76,80998,80999,81001,81003,81005,81007],{"class":78,"line":11901},[76,81000,56953],{"class":119},[76,81002,53469],{"class":90},[76,81004,2810],{"class":119},[76,81006,53524],{"class":82},[76,81008,3415],{"class":90},[76,81010,81011],{"class":78,"line":11907},[76,81012,4283],{"class":90},[76,81014,81015],{"class":78,"line":11921},[76,81016,149],{"emptyLinePlaceholder":148},[76,81018,81019,81022],{"class":78,"line":11927},[76,81020,81021],{"class":86},"    .filter",[76,81023,17623],{"class":90},[76,81025,81026,81028,81030,81032],{"class":78,"line":11954},[76,81027,57040],{"class":119},[76,81029,53469],{"class":90},[76,81031,53509],{"class":119},[76,81033,3415],{"class":90},[76,81035,81036,81038,81040,81042,81044],{"class":78,"line":11963},[76,81037,56802],{"class":119},[76,81039,53469],{"class":90},[76,81041,80600],{"class":119},[76,81043,53524],{"class":82},[76,81045,3415],{"class":90},[76,81047,81048,81050,81052,81054,81056],{"class":78,"line":11969},[76,81049,56737],{"class":119},[76,81051,53469],{"class":90},[76,81053,1294],{"class":119},[76,81055,53588],{"class":119},[76,81057,3415],{"class":90},[76,81059,81060,81062,81064,81066,81068,81070],{"class":78,"line":11977},[76,81061,56726],{"class":119},[76,81063,53469],{"class":90},[76,81065,2915],{"class":119},[76,81067,53524],{"class":82},[76,81069,1122],{"class":119},[76,81071,81072],{"class":82},"px\n",[76,81074,81075],{"class":78,"line":11982},[76,81076,4283],{"class":90},[76,81078,81079],{"class":78,"line":18654},[76,81080,149],{"emptyLinePlaceholder":148},[76,81082,81083,81085,81087],{"class":78,"line":18660},[76,81084,81021],{"class":86},[76,81086,3519],{"class":53332},[76,81088,17623],{"class":90},[76,81090,81091,81093,81095,81097,81099,81101,81103],{"class":78,"line":18683},[76,81092,56726],{"class":119},[76,81094,53469],{"class":90},[76,81096,402],{"class":119},[76,81098,53524],{"class":82},[76,81100,11018],{"class":119},[76,81102,53524],{"class":82},[76,81104,3415],{"class":90},[76,81106,81107,81109,81111,81113],{"class":78,"line":18689},[76,81108,63749],{"class":119},[76,81110,53469],{"class":90},[76,81112,63846],{"class":119},[76,81114,3415],{"class":90},[76,81116,81117,81119,81121,81123],{"class":78,"line":18712},[76,81118,59446],{"class":119},[76,81120,53469],{"class":90},[76,81122,80925],{"class":119},[76,81124,3415],{"class":90},[76,81126,81127,81129,81131,81133],{"class":78,"line":18726},[76,81128,65998],{"class":119},[76,81130,53469],{"class":90},[76,81132,56768],{"class":119},[76,81134,3415],{"class":90},[76,81136,81137,81139,81141,81143,81145],{"class":78,"line":18746},[76,81138,63778],{"class":119},[76,81140,53469],{"class":90},[76,81142,408],{"class":119},[76,81144,53524],{"class":82},[76,81146,3415],{"class":90},[76,81148,81149],{"class":78,"line":18752},[76,81150,4283],{"class":90},[76,81152,81153],{"class":78,"line":18763},[76,81154,149],{"emptyLinePlaceholder":148},[76,81156,81157,81159,81161,81163],{"class":78,"line":18786},[76,81158,81021],{"class":86},[76,81160,3519],{"class":53332},[76,81162,63928],{"class":86},[76,81164,17623],{"class":90},[76,81166,81167,81169,81171,81174],{"class":78,"line":18808},[76,81168,56915],{"class":119},[76,81170,53469],{"class":90},[76,81172,81173],{"class":119},"#05943c",[76,81175,3415],{"class":90},[76,81177,81178,81180,81182,81184],{"class":78,"line":18813},[76,81179,59446],{"class":119},[76,81181,53469],{"class":90},[76,81183,62870],{"class":119},[76,81185,3415],{"class":90},[76,81187,81188],{"class":78,"line":18819},[76,81189,4283],{"class":90},[76,81191,81192,81194,81196],{"class":78,"line":18833},[76,81193,54449],{"class":90},[76,81195,2178],{"class":53332},[76,81197,53339],{"class":90},[76,81199,81200,81202,81204],{"class":78,"line":18846},[76,81201,53817],{"class":90},[76,81203,53366],{"class":53332},[76,81205,53339],{"class":90},[76,81207,81208],{"class":78,"line":18851},[76,81209,149],{"emptyLinePlaceholder":148},[76,81211,81212,81214,81216],{"class":78,"line":18865},[76,81213,584],{"class":90},[76,81215,53832],{"class":53332},[76,81217,53339],{"class":90},[76,81219,81220,81222,81224,81226,81228,81231],{"class":78,"line":18870},[76,81221,54176],{"class":90},[76,81223,53643],{"class":53332},[76,81225,55518],{"class":86},[76,81227,370],{"class":90},[76,81229,81230],{"class":126},"\"filter\"",[76,81232,53339],{"class":90},[76,81234,81235,81237,81239,81241,81243,81245,81248,81250,81252,81255,81257],{"class":78,"line":18876},[76,81236,53373],{"class":90},[76,81238,2503],{"class":53332},[76,81240,63085],{"class":86},[76,81242,370],{"class":90},[76,81244,63090],{"class":126},[76,81246,81247],{"class":86}," data-index",[76,81249,370],{"class":90},[76,81251,5763],{"class":126},[76,81253,81254],{"class":90},">0-100元\u003C\u002F",[76,81256,2503],{"class":53332},[76,81258,53339],{"class":90},[76,81260,81261,81263,81265,81267,81269,81271,81273,81275,81277,81280,81282],{"class":78,"line":18881},[76,81262,53373],{"class":90},[76,81264,2503],{"class":53332},[76,81266,63085],{"class":86},[76,81268,370],{"class":90},[76,81270,63090],{"class":126},[76,81272,81247],{"class":86},[76,81274,370],{"class":90},[76,81276,5786],{"class":126},[76,81278,81279],{"class":90},">100-300元\u003C\u002F",[76,81281,2503],{"class":53332},[76,81283,53339],{"class":90},[76,81285,81286,81288,81290,81292,81294,81296,81298,81300,81302,81305,81307],{"class":78,"line":18895},[76,81287,53373],{"class":90},[76,81289,2503],{"class":53332},[76,81291,63085],{"class":86},[76,81293,370],{"class":90},[76,81295,63090],{"class":126},[76,81297,81247],{"class":86},[76,81299,370],{"class":90},[76,81301,5799],{"class":126},[76,81303,81304],{"class":90},">300元以上\u003C\u002F",[76,81306,2503],{"class":53332},[76,81308,53339],{"class":90},[76,81310,81311,81313,81315,81317,81319,81321,81324,81326],{"class":78,"line":18900},[76,81312,53373],{"class":90},[76,81314,2503],{"class":53332},[76,81316,63085],{"class":86},[76,81318,370],{"class":90},[76,81320,63090],{"class":126},[76,81322,81323],{"class":90},">全部区间\u003C\u002F",[76,81325,2503],{"class":53332},[76,81327,53339],{"class":90},[76,81329,81330,81332,81334],{"class":78,"line":18905},[76,81331,54449],{"class":90},[76,81333,53643],{"class":53332},[76,81335,53339],{"class":90},[76,81337,81338,81340,81342,81344,81346,81348],{"class":78,"line":18919},[76,81339,54176],{"class":90},[76,81341,53643],{"class":53332},[76,81343,55518],{"class":86},[76,81345,370],{"class":90},[76,81347,64636],{"class":126},[76,81349,53339],{"class":90},[76,81351,81352],{"class":78,"line":18931},[76,81353,81354],{"class":540},"    \u003C!-- \u003Cdiv class=\"item\">\n",[76,81356,81357],{"class":78,"line":18936},[76,81358,81359],{"class":540},"      \u003Cimg src=\"\" alt=\"\">\n",[76,81361,81362],{"class":78,"line":18949},[76,81363,81364],{"class":540},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[76,81366,81367],{"class":78,"line":18954},[76,81368,81369],{"class":540},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[76,81371,81372],{"class":78,"line":18959},[76,81373,81374],{"class":540},"    \u003C\u002Fdiv> -->\n",[76,81376,81377,81379,81381],{"class":78,"line":18964},[76,81378,54449],{"class":90},[76,81380,53643],{"class":53332},[76,81382,53339],{"class":90},[76,81384,81385,81387,81389],{"class":78,"line":18977},[76,81386,54176],{"class":90},[76,81388,53845],{"class":53332},[76,81390,53339],{"class":90},[76,81392,81393],{"class":78,"line":18982},[76,81394,81395],{"class":540},"    \u002F\u002F 2. 初始化数据\n",[76,81397,81398,81400,81403,81405],{"class":78,"line":34671},[76,81399,13275],{"class":82},[76,81401,81402],{"class":119}," goodsList",[76,81404,15617],{"class":82},[76,81406,57478],{"class":90},[76,81408,81409],{"class":78,"line":34677},[76,81410,81411],{"class":90},"      {\n",[76,81413,81414,81417,81420],{"class":78,"line":34683},[76,81415,81416],{"class":90},"        id: ",[76,81418,81419],{"class":126},"'4001172'",[76,81421,33509],{"class":90},[76,81423,81424,81427,81430],{"class":78,"line":34689},[76,81425,81426],{"class":90},"        name: ",[76,81428,81429],{"class":126},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[76,81431,33509],{"class":90},[76,81433,81434,81437,81440],{"class":78,"line":34695},[76,81435,81436],{"class":90},"        price: ",[76,81438,81439],{"class":126},"'289.00'",[76,81441,33509],{"class":90},[76,81443,81444,81447,81450],{"class":78,"line":34706},[76,81445,81446],{"class":90},"        picture: ",[76,81448,81449],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[76,81451,33509],{"class":90},[76,81453,81454],{"class":78,"line":34712},[76,81455,79918],{"class":90},[76,81457,81458],{"class":78,"line":34732},[76,81459,81411],{"class":90},[76,81461,81462,81464,81467],{"class":78,"line":34738},[76,81463,81416],{"class":90},[76,81465,81466],{"class":126},"'4001594'",[76,81468,33509],{"class":90},[76,81470,81471,81473,81476],{"class":78,"line":34749},[76,81472,81426],{"class":90},[76,81474,81475],{"class":126},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[76,81477,33509],{"class":90},[76,81479,81480,81482,81485],{"class":78,"line":34755},[76,81481,81436],{"class":90},[76,81483,81484],{"class":126},"'288.00'",[76,81486,33509],{"class":90},[76,81488,81489,81491,81494],{"class":78,"line":34761},[76,81490,81446],{"class":90},[76,81492,81493],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[76,81495,33509],{"class":90},[76,81497,81498],{"class":78,"line":34767},[76,81499,79918],{"class":90},[76,81501,81502],{"class":78,"line":34773},[76,81503,81411],{"class":90},[76,81505,81506,81508,81511],{"class":78,"line":34779},[76,81507,81416],{"class":90},[76,81509,81510],{"class":126},"'4001009'",[76,81512,33509],{"class":90},[76,81514,81515,81517,81520],{"class":78,"line":34785},[76,81516,81426],{"class":90},[76,81518,81519],{"class":126},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[76,81521,33509],{"class":90},[76,81523,81524,81526,81529],{"class":78,"line":34791},[76,81525,81436],{"class":90},[76,81527,81528],{"class":126},"'109.00'",[76,81530,33509],{"class":90},[76,81532,81533,81535,81538],{"class":78,"line":34811},[76,81534,81446],{"class":90},[76,81536,81537],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[76,81539,33509],{"class":90},[76,81541,81542],{"class":78,"line":34817},[76,81543,79918],{"class":90},[76,81545,81546],{"class":78,"line":34833},[76,81547,81411],{"class":90},[76,81549,81550,81552,81555],{"class":78,"line":34839},[76,81551,81416],{"class":90},[76,81553,81554],{"class":126},"'4001874'",[76,81556,33509],{"class":90},[76,81558,81559,81561,81564],{"class":78,"line":34853},[76,81560,81426],{"class":90},[76,81562,81563],{"class":126},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[76,81565,33509],{"class":90},[76,81567,81568,81570,81573],{"class":78,"line":34859},[76,81569,81436],{"class":90},[76,81571,81572],{"class":126},"'488.00'",[76,81574,33509],{"class":90},[76,81576,81577,81579,81582],{"class":78,"line":34874},[76,81578,81446],{"class":90},[76,81580,81581],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[76,81583,33509],{"class":90},[76,81585,81586],{"class":78,"line":34880},[76,81587,79918],{"class":90},[76,81589,81590],{"class":78,"line":34889},[76,81591,81411],{"class":90},[76,81593,81594,81596,81599],{"class":78,"line":34895},[76,81595,81416],{"class":90},[76,81597,81598],{"class":126},"'4001649'",[76,81600,33509],{"class":90},[76,81602,81603,81605,81608],{"class":78,"line":34904},[76,81604,81426],{"class":90},[76,81606,81607],{"class":126},"'大师监制龙泉青瓷茶叶罐'",[76,81609,33509],{"class":90},[76,81611,81612,81614,81617],{"class":78,"line":34910},[76,81613,81436],{"class":90},[76,81615,81616],{"class":126},"'139.00'",[76,81618,33509],{"class":90},[76,81620,81621,81623,81626],{"class":78,"line":34916},[76,81622,81446],{"class":90},[76,81624,81625],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[76,81627,33509],{"class":90},[76,81629,81630],{"class":78,"line":34925},[76,81631,79918],{"class":90},[76,81633,81634],{"class":78,"line":34931},[76,81635,81411],{"class":90},[76,81637,81638,81640,81643],{"class":78,"line":34942},[76,81639,81416],{"class":90},[76,81641,81642],{"class":126},"'3997185'",[76,81644,33509],{"class":90},[76,81646,81647,81649,81652],{"class":78,"line":34948},[76,81648,81426],{"class":90},[76,81650,81651],{"class":126},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[76,81653,33509],{"class":90},[76,81655,81656,81658,81661],{"class":78,"line":34967},[76,81657,81436],{"class":90},[76,81659,81660],{"class":126},"'108.00'",[76,81662,33509],{"class":90},[76,81664,81665,81667,81670],{"class":78,"line":34973},[76,81666,81446],{"class":90},[76,81668,81669],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[76,81671,33509],{"class":90},[76,81673,81674],{"class":78,"line":34984},[76,81675,79918],{"class":90},[76,81677,81678],{"class":78,"line":34990},[76,81679,81411],{"class":90},[76,81681,81682,81684,81687],{"class":78,"line":35010},[76,81683,81416],{"class":90},[76,81685,81686],{"class":126},"'3997403'",[76,81688,33509],{"class":90},[76,81690,81691,81693,81696],{"class":78,"line":35026},[76,81692,81426],{"class":90},[76,81694,81695],{"class":126},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[76,81697,33509],{"class":90},[76,81699,81700,81702,81705],{"class":78,"line":35032},[76,81701,81436],{"class":90},[76,81703,81704],{"class":126},"'100.00'",[76,81706,33509],{"class":90},[76,81708,81709,81711,81714],{"class":78,"line":35046},[76,81710,81446],{"class":90},[76,81712,81713],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[76,81715,33509],{"class":90},[76,81717,81718],{"class":78,"line":35052},[76,81719,79918],{"class":90},[76,81721,81722],{"class":78,"line":35058},[76,81723,81411],{"class":90},[76,81725,81726,81728,81731],{"class":78,"line":35069},[76,81727,81416],{"class":90},[76,81729,81730],{"class":126},"'3998274'",[76,81732,33509],{"class":90},[76,81734,81735,81737,81740],{"class":78,"line":35075},[76,81736,81426],{"class":90},[76,81738,81739],{"class":126},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[76,81741,33509],{"class":90},[76,81743,81744,81746,81748],{"class":78,"line":35081},[76,81745,81436],{"class":90},[76,81747,81616],{"class":126},[76,81749,33509],{"class":90},[76,81751,81752,81754,81757],{"class":78,"line":35091},[76,81753,81446],{"class":90},[76,81755,81756],{"class":126},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[76,81758,33509],{"class":90},[76,81760,81761],{"class":78,"line":35097},[76,81762,79918],{"class":90},[76,81764,81765],{"class":78,"line":35108},[76,81766,55141],{"class":90},[76,81768,81769],{"class":78,"line":35114},[76,81770,149],{"emptyLinePlaceholder":148},[76,81772,81773],{"class":78,"line":35124},[76,81774,81775],{"class":540},"    \u002F\u002F 1.渲染函数\n",[76,81777,81778,81780,81782,81784,81786],{"class":78,"line":35129},[76,81779,72112],{"class":82},[76,81781,72115],{"class":86},[76,81783,123],{"class":90},[76,81785,5964],{"class":7296},[76,81787,14495],{"class":90},[76,81789,81790],{"class":78,"line":35135},[76,81791,81792],{"class":540},"      \u002F\u002F 声明空字符串\n",[76,81794,81795,81798,81801,81803],{"class":78,"line":35184},[76,81796,81797],{"class":82},"      let",[76,81799,81800],{"class":90}," str ",[76,81802,370],{"class":82},[76,81804,72132],{"class":126},[76,81806,81807],{"class":78,"line":35231},[76,81808,72137],{"class":540},[76,81810,81811,81813,81816,81818,81821,81824],{"class":78,"line":35236},[76,81812,60037],{"class":90},[76,81814,81815],{"class":86},"forEach",[76,81817,123],{"class":90},[76,81819,81820],{"class":7296},"item",[76,81822,81823],{"class":82}," =>",[76,81825,17623],{"class":90},[76,81827,81828,81830,81833,81835,81837,81840,81842,81845,81848,81850],{"class":78,"line":35242},[76,81829,63298],{"class":82},[76,81831,81832],{"class":90}," { ",[76,81834,301],{"class":119},[76,81836,405],{"class":90},[76,81838,81839],{"class":119},"price",[76,81841,405],{"class":90},[76,81843,81844],{"class":119},"picture",[76,81846,81847],{"class":90}," } ",[76,81849,370],{"class":82},[76,81851,81852],{"class":90}," item\n",[76,81854,81855,81858,81860],{"class":78,"line":35261},[76,81856,81857],{"class":90},"        str ",[76,81859,1060],{"class":82},[76,81861,72196],{"class":126},[76,81863,81864],{"class":78,"line":35267},[76,81865,81866],{"class":126},"          \u003Cdiv class=\"item\">\n",[76,81868,81869,81872,81874],{"class":78,"line":35287},[76,81870,81871],{"class":126},"            \u003Cimg src=\"${",[76,81873,81844],{"class":90},[76,81875,81876],{"class":126},"}\" alt=\"\">\n",[76,81878,81879,81882,81884],{"class":78,"line":35293},[76,81880,81881],{"class":126},"            \u003Cp class=\"name\">${",[76,81883,301],{"class":90},[76,81885,81886],{"class":126},"}\u003C\u002Fp>\n",[76,81888,81889,81892,81894],{"class":78,"line":35299},[76,81890,81891],{"class":126},"            \u003Cp class=\"price\">${",[76,81893,81839],{"class":90},[76,81895,81886],{"class":126},[76,81897,81898],{"class":78,"line":35309},[76,81899,81900],{"class":126},"          \u003C\u002Fdiv>\n",[76,81902,81903],{"class":78,"line":35314},[76,81904,81905],{"class":126},"        `\n",[76,81907,81908],{"class":78,"line":35320},[76,81909,66843],{"class":90},[76,81911,81912],{"class":78,"line":35336},[76,81913,81914],{"class":540},"      \u002F\u002F 追加给List\n",[76,81916,81917,81919,81921,81923,81926,81928,81930],{"class":78,"line":35381},[76,81918,57801],{"class":90},[76,81920,56430],{"class":86},[76,81922,123],{"class":90},[76,81924,81925],{"class":126},"'.list'",[76,81927,76276],{"class":90},[76,81929,370],{"class":82},[76,81931,76012],{"class":90},[76,81933,81934],{"class":78,"line":35387},[76,81935,4283],{"class":90},[76,81937,81938],{"class":78,"line":35393},[76,81939,81940],{"class":540},"    \u002F\u002F 页面一打开就需要渲染\n",[76,81942,81943,81946],{"class":78,"line":35399},[76,81944,81945],{"class":86},"    render",[76,81947,81948],{"class":90},"(goodsList)\n",[76,81950,81951],{"class":78,"line":35410},[76,81952,81953],{"class":540},"    \u002F\u002F 2.过滤筛选\n",[76,81955,81956,81958,81960,81962,81965,81967,81969,81971,81973,81975,81977,81979],{"class":78,"line":35416},[76,81957,54439],{"class":90},[76,81959,56430],{"class":86},[76,81961,123],{"class":90},[76,81963,81964],{"class":126},"'.filter'",[76,81966,32870],{"class":90},[76,81968,59843],{"class":86},[76,81970,123],{"class":90},[76,81972,59848],{"class":126},[76,81974,405],{"class":90},[76,81976,2342],{"class":7296},[76,81978,81823],{"class":82},[76,81980,17623],{"class":90},[76,81982,81983],{"class":78,"line":35422},[76,81984,81985],{"class":540},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[76,81987,81988,81990,81992,81995,81997,81999,82001,82003],{"class":78,"line":35428},[76,81989,60258],{"class":82},[76,81991,81832],{"class":90},[76,81993,81994],{"class":119},"tagName",[76,81996,405],{"class":90},[76,81998,33580],{"class":119},[76,82000,81847],{"class":90},[76,82002,370],{"class":82},[76,82004,82005],{"class":90}," e.target\n",[76,82007,82008],{"class":78,"line":35446},[76,82009,82010],{"class":540},"      \u002F\u002F 判断\n",[76,82012,82013,82015,82017,82019,82021],{"class":78,"line":35460},[76,82014,56511],{"class":82},[76,82016,69062],{"class":90},[76,82018,56517],{"class":82},[76,82020,70284],{"class":126},[76,82022,14495],{"class":90},[76,82024,82025],{"class":78,"line":35469},[76,82026,82027],{"class":540},"        \u002F\u002F console.log(11)\n",[76,82029,82030],{"class":78,"line":35478},[76,82031,82032],{"class":540},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[76,82034,82035],{"class":78,"line":35487},[76,82036,82037],{"class":540},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[76,82039,82040,82042,82044,82046],{"class":78,"line":35496},[76,82041,53862],{"class":82},[76,82043,53865],{"class":90},[76,82045,370],{"class":82},[76,82047,82048],{"class":90}," goodsList\n",[76,82050,82051,82053,82056,82058,82061],{"class":78,"line":35502},[76,82052,4592],{"class":82},[76,82054,82055],{"class":90}," (dataset.index ",[76,82057,56517],{"class":82},[76,82059,82060],{"class":126}," '1'",[76,82062,14495],{"class":90},[76,82064,82065,82068,82070,82073,82076,82078,82080,82082,82085,82087,82089,82092,82094,82096,82098],{"class":78,"line":35508},[76,82066,82067],{"class":90},"          arr ",[76,82069,370],{"class":82},[76,82071,82072],{"class":90}," goodsList.",[76,82074,82075],{"class":86},"filter",[76,82077,123],{"class":90},[76,82079,81820],{"class":7296},[76,82081,81823],{"class":82},[76,82083,82084],{"class":90}," item.price ",[76,82086,611],{"class":82},[76,82088,587],{"class":119},[76,82090,82091],{"class":82}," &&",[76,82093,82084],{"class":90},[76,82095,1691],{"class":82},[76,82097,7834],{"class":119},[76,82099,130],{"class":90},[76,82101,82102,82105,82107,82109,82111,82113,82116],{"class":78,"line":35516},[76,82103,82104],{"class":90},"        } ",[76,82106,1328],{"class":82},[76,82108,3811],{"class":82},[76,82110,82055],{"class":90},[76,82112,56517],{"class":82},[76,82114,82115],{"class":126}," '2'",[76,82117,14495],{"class":90},[76,82119,82120,82122,82124,82126,82128,82130,82132,82134,82136,82138,82140,82142,82144,82146,82149],{"class":78,"line":35521},[76,82121,82067],{"class":90},[76,82123,370],{"class":82},[76,82125,82072],{"class":90},[76,82127,82075],{"class":86},[76,82129,123],{"class":90},[76,82131,81820],{"class":7296},[76,82133,81823],{"class":82},[76,82135,82084],{"class":90},[76,82137,611],{"class":82},[76,82139,7834],{"class":119},[76,82141,82091],{"class":82},[76,82143,82084],{"class":90},[76,82145,1691],{"class":82},[76,82147,82148],{"class":119}," 300",[76,82150,130],{"class":90},[76,82152,82153,82155,82157,82159,82161,82163,82166],{"class":78,"line":35527},[76,82154,82104],{"class":90},[76,82156,1328],{"class":82},[76,82158,3811],{"class":82},[76,82160,82055],{"class":90},[76,82162,56517],{"class":82},[76,82164,82165],{"class":126}," '3'",[76,82167,14495],{"class":90},[76,82169,82170,82172,82174,82176,82178,82180,82182,82184,82186,82188,82190],{"class":78,"line":35538},[76,82171,82067],{"class":90},[76,82173,370],{"class":82},[76,82175,82072],{"class":90},[76,82177,82075],{"class":86},[76,82179,123],{"class":90},[76,82181,81820],{"class":7296},[76,82183,81823],{"class":82},[76,82185,82084],{"class":90},[76,82187,611],{"class":82},[76,82189,82148],{"class":119},[76,82191,130],{"class":90},[76,82193,82194],{"class":78,"line":35544},[76,82195,4624],{"class":90},[76,82197,82198],{"class":78,"line":35564},[76,82199,82200],{"class":540},"        \u002F\u002F 渲染函数\n",[76,82202,82203,82205],{"class":78,"line":35570},[76,82204,72435],{"class":86},[76,82206,54444],{"class":90},[76,82208,82209],{"class":78,"line":35576},[76,82210,54430],{"class":90},[76,82212,82213],{"class":78,"line":35582},[76,82214,149],{"emptyLinePlaceholder":148},[76,82216,82217],{"class":78,"line":35599},[76,82218,35499],{"class":90},[76,82220,82221,82223,82225],{"class":78,"line":35605},[76,82222,54449],{"class":90},[76,82224,53845],{"class":53332},[76,82226,53339],{"class":90},[76,82228,82229,82231,82233],{"class":78,"line":35611},[76,82230,53817],{"class":90},[76,82232,53832],{"class":53332},[76,82234,53339],{"class":90},[76,82236,82237],{"class":78,"line":35617},[76,82238,149],{"emptyLinePlaceholder":148},[76,82240,82241,82243,82245],{"class":78,"line":35623},[76,82242,53817],{"class":90},[76,82244,52667],{"class":53332},[76,82246,53339],{"class":90},[14,82248,82250],{"id":82249},"_410-深入了解对象","4.10 深入了解对象",[889,82252,82254],{"id":82253},"_4101-创建对象","4.10.1 创建对象",[19,82256,82257],{},[3583,82258],{"alt":71,"src":82259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82261,82262],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[889,82264,82266],{"id":82265},"_4102-构造函数","4.10.2 构造函数",[19,82268,82269,82272],{},[2416,82270,82271],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82274,82275,82278],{},[2416,82276,82277],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[66,82280,82282],{"className":52665,"code":82281,"language":52667,"meta":71,"style":71},"\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",[73,82283,82284,82292,82297,82318,82331,82343,82355,82359,82364,82391,82396,82423],{"__ignoreMap":71},[76,82285,82286,82288,82290],{"class":78,"line":79},[76,82287,584],{"class":90},[76,82289,53845],{"class":53332},[76,82291,53339],{"class":90},[76,82293,82294],{"class":78,"line":94},[76,82295,82296],{"class":540},"\u002F\u002F例：\n",[76,82298,82299,82301,82304,82306,82308,82310,82312,82314,82316],{"class":78,"line":133},[76,82300,56480],{"class":82},[76,82302,82303],{"class":86}," Pig",[76,82305,123],{"class":90},[76,82307,301],{"class":7296},[76,82309,2642],{"class":90},[76,82311,1184],{"class":7296},[76,82313,2642],{"class":90},[76,82315,72265],{"class":7296},[76,82317,14495],{"class":90},[76,82319,82320,82323,82326,82328],{"class":78,"line":145},[76,82321,82322],{"class":119},"    this",[76,82324,82325],{"class":90},".name",[76,82327,370],{"class":82},[76,82329,82330],{"class":90},"name\n",[76,82332,82333,82335,82338,82340],{"class":78,"line":152},[76,82334,82322],{"class":119},[76,82336,82337],{"class":90},".age",[76,82339,370],{"class":82},[76,82341,82342],{"class":90},"age\n",[76,82344,82345,82347,82350,82352],{"class":78,"line":157},[76,82346,82322],{"class":119},[76,82348,82349],{"class":90},".gender",[76,82351,370],{"class":82},[76,82353,82354],{"class":90},"gender    \n",[76,82356,82357],{"class":78,"line":246},[76,82358,3685],{"class":90},[76,82360,82361],{"class":78,"line":251},[76,82362,82363],{"class":540},"\u002F\u002F创建佩奇对象\n",[76,82365,82366,82368,82371,82373,82375,82377,82380,82382,82384,82386,82389],{"class":78,"line":257},[76,82367,8870],{"class":82},[76,82369,82370],{"class":119}," Peppa",[76,82372,13771],{"class":82},[76,82374,82303],{"class":86},[76,82376,123],{"class":90},[76,82378,82379],{"class":126},"'佩奇'",[76,82381,2642],{"class":90},[76,82383,2608],{"class":119},[76,82385,2642],{"class":90},[76,82387,82388],{"class":126},"'女'",[76,82390,130],{"class":90},[76,82392,82393],{"class":78,"line":641},[76,82394,82395],{"class":540},"\u002F\u002F创建乔治对象\n",[76,82397,82398,82400,82403,82405,82407,82409,82412,82414,82416,82418,82421],{"class":78,"line":646},[76,82399,8870],{"class":82},[76,82401,82402],{"class":119}," George",[76,82404,13771],{"class":82},[76,82406,82303],{"class":86},[76,82408,123],{"class":90},[76,82410,82411],{"class":126},"'乔治'",[76,82413,2642],{"class":90},[76,82415,2339],{"class":119},[76,82417,2642],{"class":90},[76,82419,82420],{"class":126},"'男'",[76,82422,130],{"class":90},[76,82424,82425,82427,82429],{"class":78,"line":659},[76,82426,53817],{"class":90},[76,82428,53845],{"class":53332},[76,82430,53339],{"class":90},[19,82432,82433],{},[3583,82434],{"alt":71,"src":82435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82437,82438],{},[3583,82439],{"alt":71,"src":82440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82442,82443],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82445,82446],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82448,82449],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82451,82452],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82454,82455],{},"这里用等号是因为：对象.属性=值",[19,82457,82458],{},"①利用对象字面量创建对象",[19,82460,82461],{},"const o={",[19,82463,82464],{},"name:'pink'",[19,82466,82467],{},"} ②利用new Object创建对象",[19,82469,82470],{},"const o=new Object({name:'pink'})",[19,82472,82473],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82475,82476],{},"构造函数创建对象的执行过程：",[19,82478,82479],{},[3583,82480],{"alt":71,"src":82481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[889,82483,82485],{"id":82484},"_4103-实例成员","4.10.3 实例成员",[19,82487,82488],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82490,82491,82494,82497],{},[29,82492,82493],{},"实例对象的属性和方法即为实例成员",[29,82495,82496],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82498,82499],{},"构造函数创建的实例对象彼此独立互不影响",[889,82501,82503],{"id":82502},"_4104-静态成员","4.10.4 静态成员",[19,82505,82506],{},[3583,82507],{"alt":71,"src":82508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82510,82511],{},"静态成员有Date.now() Math.PI Math.random()",[19,82513,82514],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82516,82517],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82519,82520],{},"function Pig(name) n {",[19,82522,82523],{},"this.name=name",[19,82525,304],{},[19,82527,82528],{},"Pig.eyes=2",[19,82530,82531],{},"Pig.sayHai=function () { console.log(this) }",[19,82533,82534],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82536,82537],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82539,13386],{},[26,82541,82542,82545,82548,82551,82554],{},[29,82543,82544],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82546,82547],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82549,82550],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82552,82553],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82555,82556],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82558,82559],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[889,82561,82563],{"id":82562},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82565,82566],{},"内置构造函数包含：",[19,82568,82569],{},[3583,82570],{"alt":71,"src":82571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82573,82574],{},[3583,82575],{"alt":71,"src":82576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82578,82579],{},"这些基本数据类型，js对他们进行了包装",[53845,82581,82582],{},"\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",[24047,82584,82586],{"id":82585},"_41051-object","4.10.5.1 Object",[19,82588,82589],{},"Object 是内置的构造函数，用于创建普通对象",[19,82591,82592],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[66,82594,82596],{"className":52665,"code":82595,"language":52667,"meta":71,"style":71},"const user=new Object({name:'小明',age:15})\n",[73,82597,82598],{"__ignoreMap":71},[76,82599,82600],{"class":78,"line":79},[76,82601,82595],{"class":90},[19,82603,82604],{},"三个常用的静态方法：",[24959,82606,82608],{"id":82607},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82610,82611],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82613,82614],{},[3583,82615],{"alt":71,"src":82616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82618,82619],{},[3583,82620],{"alt":71,"src":82621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[66,82623,82625],{"className":55099,"code":82624,"language":55101,"meta":71,"style":71},"\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",[73,82626,82627,82635,82643,82648,82653,82658,82663,82668,82673,82681],{"__ignoreMap":71},[76,82628,82629,82631,82633],{"class":78,"line":79},[76,82630,584],{"class":90},[76,82632,53832],{"class":53332},[76,82634,53339],{"class":90},[76,82636,82637,82639,82641],{"class":78,"line":94},[76,82638,54176],{"class":90},[76,82640,53845],{"class":53332},[76,82642,53339],{"class":90},[76,82644,82645],{"class":78,"line":133},[76,82646,82647],{"class":90},"    const o = { name: 'pink', age: 6 }\n",[76,82649,82650],{"class":78,"line":145},[76,82651,82652],{"class":90},"    \u002F\u002F 获得所有属性名\n",[76,82654,82655],{"class":78,"line":152},[76,82656,82657],{"class":90},"    const arr = Object.keys(o)\n",[76,82659,82660],{"class":78,"line":157},[76,82661,82662],{"class":90},"    console.log(arr)\n",[76,82664,82665],{"class":78,"line":246},[76,82666,82667],{"class":90},"    \u002F\u002F 获得所有属性值\n",[76,82669,82670],{"class":78,"line":251},[76,82671,82672],{"class":90},"    console.log(Object.values(o))\n",[76,82674,82675,82677,82679],{"class":78,"line":257},[76,82676,54449],{"class":90},[76,82678,53845],{"class":53332},[76,82680,53339],{"class":90},[76,82682,82683,82685,82687],{"class":78,"line":641},[76,82684,53817],{"class":90},[76,82686,53832],{"class":53332},[76,82688,53339],{"class":90},[24959,82690,82692],{"id":82691},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82694,82695],{},"Object.assign(oo,o)",[19,82697,82698],{},"后的东西添加给前 是追加",[19,82700,82701],{},[3583,82702],{"alt":71,"src":82703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82705,82706],{},[3583,82707],{"alt":71,"src":82708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[66,82710,82712],{"className":55099,"code":82711,"language":55101,"meta":71,"style":71},"\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",[73,82713,82714,82722,82730,82734,82738,82742,82746,82750,82754,82759,82764,82769,82774,82779,82787],{"__ignoreMap":71},[76,82715,82716,82718,82720],{"class":78,"line":79},[76,82717,584],{"class":90},[76,82719,53832],{"class":53332},[76,82721,53339],{"class":90},[76,82723,82724,82726,82728],{"class":78,"line":94},[76,82725,54176],{"class":90},[76,82727,53845],{"class":53332},[76,82729,53339],{"class":90},[76,82731,82732],{"class":78,"line":133},[76,82733,82647],{"class":90},[76,82735,82736],{"class":78,"line":145},[76,82737,82652],{"class":90},[76,82739,82740],{"class":78,"line":152},[76,82741,82657],{"class":90},[76,82743,82744],{"class":78,"line":157},[76,82745,82662],{"class":90},[76,82747,82748],{"class":78,"line":246},[76,82749,82667],{"class":90},[76,82751,82752],{"class":78,"line":251},[76,82753,82672],{"class":90},[76,82755,82756],{"class":78,"line":257},[76,82757,82758],{"class":90},"    const oo = {}\n",[76,82760,82761],{"class":78,"line":641},[76,82762,82763],{"class":90},"    Object.assign(oo, o)\n",[76,82765,82766],{"class":78,"line":646},[76,82767,82768],{"class":90},"    console.log(oo)\n",[76,82770,82771],{"class":78,"line":659},[76,82772,82773],{"class":90},"    Object.assign(o, { gender: '女' })\n",[76,82775,82776],{"class":78,"line":1608},[76,82777,82778],{"class":90},"    console.log(o)\n",[76,82780,82781,82783,82785],{"class":78,"line":1632},[76,82782,54449],{"class":90},[76,82784,53845],{"class":53332},[76,82786,53339],{"class":90},[76,82788,82789,82791,82793],{"class":78,"line":1637},[76,82790,53817],{"class":90},[76,82792,53832],{"class":53332},[76,82794,53339],{"class":90},[19,82796,82797],{},[3583,82798],{"alt":71,"src":82799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24047,82801,82803],{"id":82802},"_41052-array","4.10.5.2 Array",[19,82805,82806],{},"Array 是内置的构造函数，用于创建数组",[19,82808,82809],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[66,82811,82813],{"className":52665,"code":82812,"language":52667,"meta":71,"style":71},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[73,82814,82815,82820],{"__ignoreMap":71},[76,82816,82817],{"class":78,"line":79},[76,82818,82819],{"class":90},"const arr=new Array(3,5)\n",[76,82821,82822],{"class":78,"line":94},[76,82823,82824],{"class":90},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82826,82827],{},"Array的实例方法，这个方法是实例成员",[19,82829,82830],{},[3583,82831],{"alt":71,"src":82832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24959,82834,82836],{"id":82835},"_410521-reduce","4.10.5.2.1 reduce",[19,82838,82839],{},[3583,82840],{"alt":71,"src":82841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[66,82843,82845],{"className":55099,"code":82844,"language":55101,"meta":71,"style":71},"\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",[73,82846,82847,82855,82863,82868,82873,82878,82883,82887,82892,82897,82902,82906,82911,82916,82920,82925,82930,82935,82943],{"__ignoreMap":71},[76,82848,82849,82851,82853],{"class":78,"line":79},[76,82850,584],{"class":90},[76,82852,53832],{"class":53332},[76,82854,53339],{"class":90},[76,82856,82857,82859,82861],{"class":78,"line":94},[76,82858,54176],{"class":90},[76,82860,53845],{"class":53332},[76,82862,53339],{"class":90},[76,82864,82865],{"class":78,"line":133},[76,82866,82867],{"class":90},"    const arr = [1, 5, 8]\n",[76,82869,82870],{"class":78,"line":145},[76,82871,82872],{"class":90},"    \u002F\u002F 1.没有初始值\n",[76,82874,82875],{"class":78,"line":152},[76,82876,82877],{"class":90},"    const total = arr.reduce(function (prev, current) {\n",[76,82879,82880],{"class":78,"line":157},[76,82881,82882],{"class":90},"      return prev + current\n",[76,82884,82885],{"class":78,"line":246},[76,82886,35499],{"class":90},[76,82888,82889],{"class":78,"line":251},[76,82890,82891],{"class":90},"    console.log(total)   \u002F\u002F14\n",[76,82893,82894],{"class":78,"line":257},[76,82895,82896],{"class":90},"    \u002F\u002F 2.有初始值\n",[76,82898,82899],{"class":78,"line":641},[76,82900,82901],{"class":90},"    const total1 = arr.reduce(function (prev, current) {\n",[76,82903,82904],{"class":78,"line":646},[76,82905,82882],{"class":90},[76,82907,82908],{"class":78,"line":659},[76,82909,82910],{"class":90},"    }, 10)\n",[76,82912,82913],{"class":78,"line":1608},[76,82914,82915],{"class":90},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[76,82917,82918],{"class":78,"line":1632},[76,82919,149],{"emptyLinePlaceholder":148},[76,82921,82922],{"class":78,"line":1637},[76,82923,82924],{"class":90},"    \u002F\u002F 3.箭头函数写法\n",[76,82926,82927],{"class":78,"line":1642},[76,82928,82929],{"class":90},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[76,82931,82932],{"class":78,"line":1652},[76,82933,82934],{"class":90},"    console.log(total2)   \u002F\u002F24\n",[76,82936,82937,82939,82941],{"class":78,"line":1660},[76,82938,54449],{"class":90},[76,82940,53845],{"class":53332},[76,82942,53339],{"class":90},[76,82944,82945,82947,82949],{"class":78,"line":1683},[76,82946,53817],{"class":90},[76,82948,53832],{"class":53332},[76,82950,53339],{"class":90},[19,82952,82953],{},"执行过程：",[26,82955,82956,82959,82962],{},[29,82957,82958],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82960,82961],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82963,82964],{},"如果有起始值，则起始值作为上一次值",[66,82966,82968],{"className":55099,"code":82967,"language":55101,"meta":71,"style":71},"\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",[73,82969,82970,82978,82986,82990,82994,82998,83002,83006,83010,83015,83020,83025,83030,83035,83039,83043,83047,83051,83055,83059,83064,83068,83073,83077,83082,83087,83091,83095,83099,83107],{"__ignoreMap":71},[76,82971,82972,82974,82976],{"class":78,"line":79},[76,82973,584],{"class":90},[76,82975,53832],{"class":53332},[76,82977,53339],{"class":90},[76,82979,82980,82982,82984],{"class":78,"line":94},[76,82981,54176],{"class":90},[76,82983,53845],{"class":53332},[76,82985,53339],{"class":90},[76,82987,82988],{"class":78,"line":133},[76,82989,82867],{"class":90},[76,82991,82992],{"class":78,"line":145},[76,82993,82872],{"class":90},[76,82995,82996],{"class":78,"line":152},[76,82997,82877],{"class":90},[76,82999,83000],{"class":78,"line":157},[76,83001,82882],{"class":90},[76,83003,83004],{"class":78,"line":246},[76,83005,35499],{"class":90},[76,83007,83008],{"class":78,"line":251},[76,83009,82891],{"class":90},[76,83011,83012],{"class":78,"line":257},[76,83013,83014],{"class":90},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[76,83016,83017],{"class":78,"line":641},[76,83018,83019],{"class":90},"    \u002F\u002F     1              5                    6\n",[76,83021,83022],{"class":78,"line":646},[76,83023,83024],{"class":90},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[76,83026,83027],{"class":78,"line":659},[76,83028,83029],{"class":90},"    \u002F\u002F     6              8                    14\n",[76,83031,83032],{"class":78,"line":1608},[76,83033,83034],{"class":90},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[76,83036,83037],{"class":78,"line":1632},[76,83038,82896],{"class":90},[76,83040,83041],{"class":78,"line":1637},[76,83042,82901],{"class":90},[76,83044,83045],{"class":78,"line":1642},[76,83046,82882],{"class":90},[76,83048,83049],{"class":78,"line":1652},[76,83050,82910],{"class":90},[76,83052,83053],{"class":78,"line":1660},[76,83054,82915],{"class":90},[76,83056,83057],{"class":78,"line":1683},[76,83058,83014],{"class":90},[76,83060,83061],{"class":78,"line":1698},[76,83062,83063],{"class":90},"    \u002F\u002F     10             1                     11\n",[76,83065,83066],{"class":78,"line":1711},[76,83067,83024],{"class":90},[76,83069,83070],{"class":78,"line":1717},[76,83071,83072],{"class":90},"    \u002F\u002F     11             5                    16\n",[76,83074,83075],{"class":78,"line":1728},[76,83076,83024],{"class":90},[76,83078,83079],{"class":78,"line":1740},[76,83080,83081],{"class":90},"    \u002F\u002F     16             8                    24\n",[76,83083,83084],{"class":78,"line":1746},[76,83085,83086],{"class":90},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[76,83088,83089],{"class":78,"line":1751},[76,83090,82924],{"class":90},[76,83092,83093],{"class":78,"line":1756},[76,83094,82929],{"class":90},[76,83096,83097],{"class":78,"line":1766},[76,83098,82934],{"class":90},[76,83100,83101,83103,83105],{"class":78,"line":1773},[76,83102,54449],{"class":90},[76,83104,53845],{"class":53332},[76,83106,53339],{"class":90},[76,83108,83109,83111,83113],{"class":78,"line":1793},[76,83110,53817],{"class":90},[76,83112,53832],{"class":53332},[76,83114,53339],{"class":90},[24959,83116,83118],{"id":83117},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83120,83121],{},[3583,83122],{"alt":71,"src":83123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[66,83125,83127],{"className":55099,"code":83126,"language":55101,"meta":71,"style":71},"\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",[73,83128,83129,83137,83145,83150,83155,83160,83165,83169,83174,83179,83184,83189,83194,83199,83203,83208,83212,83217,83225],{"__ignoreMap":71},[76,83130,83131,83133,83135],{"class":78,"line":79},[76,83132,584],{"class":90},[76,83134,53832],{"class":53332},[76,83136,53339],{"class":90},[76,83138,83139,83141,83143],{"class":78,"line":94},[76,83140,54176],{"class":90},[76,83142,53845],{"class":53332},[76,83144,53339],{"class":90},[76,83146,83147],{"class":78,"line":133},[76,83148,83149],{"class":90},"    const arr = [\n",[76,83151,83152],{"class":78,"line":145},[76,83153,83154],{"class":90},"      { name: '张三', salary: 10000 },\n",[76,83156,83157],{"class":78,"line":152},[76,83158,83159],{"class":90},"      { name: '李四', salary: 10000 },\n",[76,83161,83162],{"class":78,"line":157},[76,83163,83164],{"class":90},"      { name: '王五', salary: 10000 }\n",[76,83166,83167],{"class":78,"line":246},[76,83168,55141],{"class":90},[76,83170,83171],{"class":78,"line":251},[76,83172,83173],{"class":90},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[76,83175,83176],{"class":78,"line":257},[76,83177,83178],{"class":90},"    \u002F\u002F prev是累计值\n",[76,83180,83181],{"class":78,"line":641},[76,83182,83183],{"class":90},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[76,83185,83186],{"class":78,"line":646},[76,83187,83188],{"class":90},"    console.log(total)\n",[76,83190,83191],{"class":78,"line":659},[76,83192,83193],{"class":90},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[76,83195,83196],{"class":78,"line":1608},[76,83197,83198],{"class":90},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[76,83200,83201],{"class":78,"line":1632},[76,83202,83193],{"class":90},[76,83204,83205],{"class":78,"line":1637},[76,83206,83207],{"class":90},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[76,83209,83210],{"class":78,"line":1642},[76,83211,83193],{"class":90},[76,83213,83214],{"class":78,"line":1652},[76,83215,83216],{"class":90},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[76,83218,83219,83221,83223],{"class":78,"line":1660},[76,83220,54449],{"class":90},[76,83222,53845],{"class":53332},[76,83224,53339],{"class":90},[76,83226,83227,83229,83231],{"class":78,"line":1683},[76,83228,53817],{"class":90},[76,83230,53832],{"class":53332},[76,83232,53339],{"class":90},[24959,83234,83236],{"id":83235},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83238,83239],{},[3583,83240],{"alt":71,"src":83241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83243,83244],{},[3583,83245],{"alt":71,"src":83246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,83248,83249],{},[29,83250,83251],{},"find()",[19,83253,83254],{},"循环查找，找到第一个就ok",[19,83256,83257],{},[2503,83258,83261],{"href":83259,"rel":83260},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25914],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[66,83263,83265],{"className":52665,"code":83264,"language":52667,"meta":71,"style":71},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[73,83266,83267,83272,83277],{"__ignoreMap":71},[76,83268,83269],{"class":78,"line":79},[76,83270,83271],{"class":90},"const array1 = [5, 12, 8, 130, 44]\n",[76,83273,83274],{"class":78,"line":94},[76,83275,83276],{"class":90},"const found = array1.find((element) => element > 10)\n",[76,83278,83279],{"class":78,"line":133},[76,83280,83281],{"class":90},"console.log(found)  \u002F\u002F12\n",[19,83283,83284,83286,83287,83292,83293,83296,83297,83299,83300,83305,83306,83308,83309,83311,83312,83314,83315],{},[73,83285,83251],{}," 方法是一个",[2503,83288,83291],{"href":83289,"rel":83290},"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",[25914],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[73,83294,83295],{},"callbackFn"," 函数，直到 ",[73,83298,83295],{}," 返回一个",[2503,83301,83304],{"href":83302,"rel":83303},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25914],"真值","。然后 ",[73,83307,83251],{}," 返回该元素并停止迭代数组。如果 ",[73,83310,83295],{}," 从未返回真值，则 ",[73,83313,83251],{}," 返回 ",[73,83316,83317],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[66,83319,83321],{"className":55099,"code":83320,"language":55101,"meta":71,"style":71},"\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",[73,83322,83323,83331,83339,83344,83349,83354,83358,83363,83368,83372,83377,83382,83386,83390,83395,83400,83404,83408,83413,83418,83423,83428,83433,83437,83442,83447,83452,83457,83461,83466,83474],{"__ignoreMap":71},[76,83324,83325,83327,83329],{"class":78,"line":79},[76,83326,584],{"class":90},[76,83328,53832],{"class":53332},[76,83330,53339],{"class":90},[76,83332,83333,83335,83337],{"class":78,"line":94},[76,83334,54176],{"class":90},[76,83336,53845],{"class":53332},[76,83338,53339],{"class":90},[76,83340,83341],{"class":78,"line":133},[76,83342,83343],{"class":90},"    const arr = ['red', 'blue', 'green']\n",[76,83345,83346],{"class":78,"line":145},[76,83347,83348],{"class":90},"    const found = arr.find(item => item === 'pink')\n",[76,83350,83351],{"class":78,"line":152},[76,83352,83353],{"class":90},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[76,83355,83356],{"class":78,"line":157},[76,83357,149],{"emptyLinePlaceholder":148},[76,83359,83360],{"class":78,"line":246},[76,83361,83362],{"class":90},"    \u002F\u002F 使用场景，用于查找数据\n",[76,83364,83365],{"class":78,"line":251},[76,83366,83367],{"class":90},"    const arr1 = [\n",[76,83369,83370],{"class":78,"line":257},[76,83371,81411],{"class":90},[76,83373,83374],{"class":78,"line":641},[76,83375,83376],{"class":90},"        name: '小米',\n",[76,83378,83379],{"class":78,"line":646},[76,83380,83381],{"class":90},"        price: 1999\n",[76,83383,83384],{"class":78,"line":659},[76,83385,79918],{"class":90},[76,83387,83388],{"class":78,"line":1608},[76,83389,81411],{"class":90},[76,83391,83392],{"class":78,"line":1632},[76,83393,83394],{"class":90},"        name: '华为',\n",[76,83396,83397],{"class":78,"line":1637},[76,83398,83399],{"class":90},"        price: 3999\n",[76,83401,83402],{"class":78,"line":1642},[76,83403,54430],{"class":90},[76,83405,83406],{"class":78,"line":1652},[76,83407,55141],{"class":90},[76,83409,83410],{"class":78,"line":1660},[76,83411,83412],{"class":90},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[76,83414,83415],{"class":78,"line":1683},[76,83416,83417],{"class":90},"    \u002F\u002F const found1 = arr1.find(item => {\n",[76,83419,83420],{"class":78,"line":1698},[76,83421,83422],{"class":90},"    \u002F\u002F   if (item.name === '小米') {\n",[76,83424,83425],{"class":78,"line":1711},[76,83426,83427],{"class":90},"    \u002F\u002F     return item\n",[76,83429,83430],{"class":78,"line":1717},[76,83431,83432],{"class":90},"    \u002F\u002F   }\n",[76,83434,83435],{"class":78,"line":1728},[76,83436,65318],{"class":90},[76,83438,83439],{"class":78,"line":1740},[76,83440,83441],{"class":90},"    \u002F\u002F 另一种写法\n",[76,83443,83444],{"class":78,"line":1746},[76,83445,83446],{"class":90},"    const found1 = arr1.find(item => {\n",[76,83448,83449],{"class":78,"line":1751},[76,83450,83451],{"class":90},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[76,83453,83454],{"class":78,"line":1756},[76,83455,83456],{"class":90},"      return item.name = '小米'\n",[76,83458,83459],{"class":78,"line":1766},[76,83460,35499],{"class":90},[76,83462,83463],{"class":78,"line":1773},[76,83464,83465],{"class":90},"    console.log(found1)\n",[76,83467,83468,83470,83472],{"class":78,"line":1793},[76,83469,54449],{"class":90},[76,83471,53845],{"class":53332},[76,83473,53339],{"class":90},[76,83475,83476,83478,83480],{"class":78,"line":1806},[76,83477,53817],{"class":90},[76,83479,53832],{"class":53332},[76,83481,53339],{"class":90},[19,83483,83484],{},[3583,83485],{"alt":71,"src":83486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83488,83489],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83491,83492],{"start":94},[29,83493,83494],{},"every()返回的是布尔值",[19,83496,83497],{},[2503,83498,83501],{"href":83499,"rel":83500},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25914],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83503,83504],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83506,83507],{},"some是只有有一个就没问题",[19,83509,83510],{},"every是必须全是才行",[66,83512,83516],{"className":83513,"code":83514,"language":83515,"meta":71,"style":71},"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",[73,83517,83518,83534,83548,83552,83561],{"__ignoreMap":71},[76,83519,83520,83522,83525,83527,83529,83532],{"class":78,"line":79},[76,83521,56480],{"class":82},[76,83523,83524],{"class":90}," isBigEnough(element, ",[76,83526,76085],{"class":82},[76,83528,405],{"class":90},[76,83530,83531],{"class":82},"array",[76,83533,14495],{"class":90},[76,83535,83536,83539,83542,83544,83546],{"class":78,"line":94},[76,83537,83538],{"class":82},"  return",[76,83540,83541],{"class":90}," element ",[76,83543,611],{"class":82},[76,83545,4134],{"class":119},[76,83547,3415],{"class":90},[76,83549,83550],{"class":78,"line":133},[76,83551,3685],{"class":90},[76,83553,83554,83557,83559],{"class":78,"line":145},[76,83555,83556],{"class":90},"[12, 5, 8, 130, 44].every(isBigEnough); ",[76,83558,35367],{"class":82},[76,83560,56547],{"class":90},[76,83562,83563,83566,83568],{"class":78,"line":152},[76,83564,83565],{"class":90},"[12, 54, 18, 130, 44].every(isBigEnough); ",[76,83567,35367],{"class":82},[76,83569,59970],{"class":90},[66,83571,83573],{"className":55099,"code":83572,"language":55101,"meta":71,"style":71},"\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",[73,83574,83575,83583,83591,83596,83600,83605,83610,83618],{"__ignoreMap":71},[76,83576,83577,83579,83581],{"class":78,"line":79},[76,83578,584],{"class":90},[76,83580,53832],{"class":53332},[76,83582,53339],{"class":90},[76,83584,83585,83587,83589],{"class":78,"line":94},[76,83586,54176],{"class":90},[76,83588,53845],{"class":53332},[76,83590,53339],{"class":90},[76,83592,83593],{"class":78,"line":133},[76,83594,83595],{"class":90},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[76,83597,83598],{"class":78,"line":145},[76,83599,80348],{"class":90},[76,83601,83602],{"class":78,"line":152},[76,83603,83604],{"class":90},"    const flag = arr.every(item => item >= 10)\n",[76,83606,83607],{"class":78,"line":157},[76,83608,83609],{"class":90},"    console.log(flag)    \u002F\u002Ftrue\n",[76,83611,83612,83614,83616],{"class":78,"line":246},[76,83613,54449],{"class":90},[76,83615,53845],{"class":53332},[76,83617,53339],{"class":90},[76,83619,83620,83622,83624],{"class":78,"line":251},[76,83621,53817],{"class":90},[76,83623,53832],{"class":53332},[76,83625,53339],{"class":90},[66,83627,83629],{"className":55099,"code":83628,"language":55101,"meta":71,"style":71},"\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",[73,83630,83631,83639,83647,83651,83656,83661,83666,83674],{"__ignoreMap":71},[76,83632,83633,83635,83637],{"class":78,"line":79},[76,83634,584],{"class":90},[76,83636,53832],{"class":53332},[76,83638,53339],{"class":90},[76,83640,83641,83643,83645],{"class":78,"line":94},[76,83642,54176],{"class":90},[76,83644,53845],{"class":53332},[76,83646,53339],{"class":90},[76,83648,83649],{"class":78,"line":133},[76,83650,83595],{"class":90},[76,83652,83653],{"class":78,"line":145},[76,83654,83655],{"class":90},"    const arr = [10, 0, 5]\n",[76,83657,83658],{"class":78,"line":152},[76,83659,83660],{"class":90},"    const flag = arr.some(item => item >= 10)\n",[76,83662,83663],{"class":78,"line":157},[76,83664,83665],{"class":90},"    console.log(flag)   \u002F\u002Ftrue\n",[76,83667,83668,83670,83672],{"class":78,"line":246},[76,83669,54449],{"class":90},[76,83671,53845],{"class":53332},[76,83673,53339],{"class":90},[76,83675,83676,83678,83680],{"class":78,"line":251},[76,83677,53817],{"class":90},[76,83679,53832],{"class":53332},[76,83681,53339],{"class":90},[24959,83683,83685],{"id":83684},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83687,83688],{},[3583,83689],{"alt":71,"src":83690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[66,83692,83694],{"className":52665,"code":83693,"language":52667,"meta":71,"style":71},"\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",[73,83695,83696,83706,83720,83724,83732,83746,83766,83778,83786,83793,83805,83817,83829,83841,83851,83861,83865,83873,83881,83885,83893,83905,83913,83935,83940,83945,83978,83986,83994,83998],{"__ignoreMap":71},[76,83697,83698,83700,83702,83704],{"class":78,"line":79},[76,83699,53329],{"class":90},[76,83701,53333],{"class":53332},[76,83703,53336],{"class":86},[76,83705,53339],{"class":90},[76,83707,83708,83710,83712,83714,83716,83718],{"class":78,"line":94},[76,83709,584],{"class":90},[76,83711,52667],{"class":53332},[76,83713,53348],{"class":86},[76,83715,370],{"class":90},[76,83717,53353],{"class":126},[76,83719,53339],{"class":90},[76,83721,83722],{"class":78,"line":133},[76,83723,149],{"emptyLinePlaceholder":148},[76,83725,83726,83728,83730],{"class":78,"line":145},[76,83727,584],{"class":90},[76,83729,53366],{"class":53332},[76,83731,53339],{"class":90},[76,83733,83734,83736,83738,83740,83742,83744],{"class":78,"line":152},[76,83735,54176],{"class":90},[76,83737,53376],{"class":53332},[76,83739,53379],{"class":86},[76,83741,370],{"class":90},[76,83743,53384],{"class":126},[76,83745,53339],{"class":90},[76,83747,83748,83750,83752,83754,83756,83758,83760,83762,83764],{"class":78,"line":157},[76,83749,54176],{"class":90},[76,83751,53376],{"class":53332},[76,83753,16972],{"class":86},[76,83755,370],{"class":90},[76,83757,53423],{"class":126},[76,83759,53403],{"class":86},[76,83761,370],{"class":90},[76,83763,53430],{"class":126},[76,83765,53339],{"class":90},[76,83767,83768,83770,83772,83774,83776],{"class":78,"line":246},[76,83769,54176],{"class":90},[76,83771,53439],{"class":53332},[76,83773,53442],{"class":90},[76,83775,53439],{"class":53332},[76,83777,53339],{"class":90},[76,83779,83780,83782,83784],{"class":78,"line":251},[76,83781,54176],{"class":90},[76,83783,2178],{"class":53332},[76,83785,53339],{"class":90},[76,83787,83788,83791],{"class":78,"line":257},[76,83789,83790],{"class":53332},"    div",[76,83792,17623],{"class":90},[76,83794,83795,83797,83799,83801,83803],{"class":78,"line":641},[76,83796,56802],{"class":119},[76,83798,53469],{"class":90},[76,83800,2133],{"class":119},[76,83802,53524],{"class":82},[76,83804,3415],{"class":90},[76,83806,83807,83809,83811,83813,83815],{"class":78,"line":646},[76,83808,56816],{"class":119},[76,83810,53469],{"class":90},[76,83812,2665],{"class":119},[76,83814,53524],{"class":82},[76,83816,3415],{"class":90},[76,83818,83819,83821,83823,83825,83827],{"class":78,"line":659},[76,83820,59389],{"class":119},[76,83822,53469],{"class":90},[76,83824,2665],{"class":119},[76,83826,53524],{"class":82},[76,83828,3415],{"class":90},[76,83830,83831,83833,83835,83837,83839],{"class":78,"line":1608},[76,83832,67161],{"class":119},[76,83834,53469],{"class":90},[76,83836,2760],{"class":119},[76,83838,53524],{"class":82},[76,83840,3415],{"class":90},[76,83842,83843,83845,83847,83849],{"class":78,"line":1632},[76,83844,59316],{"class":119},[76,83846,53469],{"class":90},[76,83848,53624],{"class":119},[76,83850,3415],{"class":90},[76,83852,83853,83855,83857,83859],{"class":78,"line":1637},[76,83854,56915],{"class":119},[76,83856,53469],{"class":90},[76,83858,53677],{"class":119},[76,83860,3415],{"class":90},[76,83862,83863],{"class":78,"line":1642},[76,83864,4283],{"class":90},[76,83866,83867,83869,83871],{"class":78,"line":1652},[76,83868,54449],{"class":90},[76,83870,2178],{"class":53332},[76,83872,53339],{"class":90},[76,83874,83875,83877,83879],{"class":78,"line":1660},[76,83876,53817],{"class":90},[76,83878,53366],{"class":53332},[76,83880,53339],{"class":90},[76,83882,83883],{"class":78,"line":1683},[76,83884,149],{"emptyLinePlaceholder":148},[76,83886,83887,83889,83891],{"class":78,"line":1698},[76,83888,584],{"class":90},[76,83890,53832],{"class":53332},[76,83892,53339],{"class":90},[76,83894,83895,83897,83899,83901,83903],{"class":78,"line":1711},[76,83896,54176],{"class":90},[76,83898,53643],{"class":53332},[76,83900,57345],{"class":90},[76,83902,53643],{"class":53332},[76,83904,53339],{"class":90},[76,83906,83907,83909,83911],{"class":78,"line":1717},[76,83908,54176],{"class":90},[76,83910,53845],{"class":53332},[76,83912,53339],{"class":90},[76,83914,83915,83917,83920,83922,83925,83928,83930,83933],{"class":78,"line":1728},[76,83916,13275],{"class":82},[76,83918,83919],{"class":119}," spec",[76,83921,15617],{"class":82},[76,83923,83924],{"class":90}," { size: ",[76,83926,83927],{"class":126},"'40cm*40cm'",[76,83929,57495],{"class":90},[76,83931,83932],{"class":126},"'黑色'",[76,83934,57635],{"class":90},[76,83936,83937],{"class":78,"line":1740},[76,83938,83939],{"class":540},"    \u002F\u002F const arr = Object.values(spec)\n",[76,83941,83942],{"class":78,"line":1746},[76,83943,83944],{"class":540},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[76,83946,83947,83949,83951,83953,83956,83958,83960,83963,83966,83969,83971,83973,83976],{"class":78,"line":1751},[76,83948,54439],{"class":90},[76,83950,56430],{"class":86},[76,83952,123],{"class":90},[76,83954,83955],{"class":126},"'div'",[76,83957,76276],{"class":90},[76,83959,370],{"class":82},[76,83961,83962],{"class":90}," Object.",[76,83964,83965],{"class":86},"values",[76,83967,83968],{"class":90},"(spec).",[76,83970,76250],{"class":86},[76,83972,123],{"class":90},[76,83974,83975],{"class":126},"'\u002F'",[76,83977,130],{"class":90},[76,83979,83980,83982,83984],{"class":78,"line":1756},[76,83981,54449],{"class":90},[76,83983,53845],{"class":53332},[76,83985,53339],{"class":90},[76,83987,83988,83990,83992],{"class":78,"line":1766},[76,83989,53817],{"class":90},[76,83991,53832],{"class":53332},[76,83993,53339],{"class":90},[76,83995,83996],{"class":78,"line":1773},[76,83997,149],{"emptyLinePlaceholder":148},[76,83999,84000,84002,84004],{"class":78,"line":1793},[76,84001,53817],{"class":90},[76,84003,52667],{"class":53332},[76,84005,53339],{"class":90},[19,84007,84008],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24959,84010,84012],{"id":84011},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84014,84015],{},"静态方法，将伪数组转换为真数组",[19,84017,84018],{},[3583,84019],{"alt":71,"src":84020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[66,84022,84024],{"className":55099,"code":84023,"language":55101,"meta":71,"style":71},"\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",[73,84025,84026,84034,84042,84054,84066,84078,84086,84094,84099,84104,84109,84114,84122],{"__ignoreMap":71},[76,84027,84028,84030,84032],{"class":78,"line":79},[76,84029,584],{"class":90},[76,84031,53832],{"class":53332},[76,84033,53339],{"class":90},[76,84035,84036,84038,84040],{"class":78,"line":94},[76,84037,54176],{"class":90},[76,84039,3261],{"class":53332},[76,84041,53339],{"class":90},[76,84043,84044,84046,84048,84050,84052],{"class":78,"line":133},[76,84045,53373],{"class":90},[76,84047,29],{"class":53332},[76,84049,57345],{"class":90},[76,84051,29],{"class":53332},[76,84053,53339],{"class":90},[76,84055,84056,84058,84060,84062,84064],{"class":78,"line":145},[76,84057,53373],{"class":90},[76,84059,29],{"class":53332},[76,84061,57345],{"class":90},[76,84063,29],{"class":53332},[76,84065,53339],{"class":90},[76,84067,84068,84070,84072,84074,84076],{"class":78,"line":152},[76,84069,53373],{"class":90},[76,84071,29],{"class":53332},[76,84073,57345],{"class":90},[76,84075,29],{"class":53332},[76,84077,53339],{"class":90},[76,84079,84080,84082,84084],{"class":78,"line":157},[76,84081,54449],{"class":90},[76,84083,3261],{"class":53332},[76,84085,53339],{"class":90},[76,84087,84088,84090,84092],{"class":78,"line":246},[76,84089,54176],{"class":90},[76,84091,53845],{"class":53332},[76,84093,53339],{"class":90},[76,84095,84096],{"class":78,"line":251},[76,84097,84098],{"class":90},"    const lis = document.querySelectorAll('li')\n",[76,84100,84101],{"class":78,"line":257},[76,84102,84103],{"class":90},"    const liss = Array.from(lis)\n",[76,84105,84106],{"class":78,"line":641},[76,84107,84108],{"class":90},"    liss.pop()\n",[76,84110,84111],{"class":78,"line":646},[76,84112,84113],{"class":90},"    console.log(liss)\n",[76,84115,84116,84118,84120],{"class":78,"line":659},[76,84117,54449],{"class":90},[76,84119,53845],{"class":53332},[76,84121,53339],{"class":90},[76,84123,84124,84126,84128],{"class":78,"line":1608},[76,84125,53817],{"class":90},[76,84127,53832],{"class":53332},[76,84129,53339],{"class":90},[19,84131,84132],{},[3583,84133],{"alt":71,"src":84134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24047,84136,84138],{"id":84137},"_41053-string","4.10.5.3 String",[19,84140,84141],{},[3583,84142],{"alt":71,"src":84143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24959,84145,84147],{"id":84146},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[66,84149,84151],{"className":55099,"code":84150,"language":55101,"meta":71,"style":71},"\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",[73,84152,84153,84161,84169,84174,84179,84184,84188,84193,84198,84203,84211],{"__ignoreMap":71},[76,84154,84155,84157,84159],{"class":78,"line":79},[76,84156,584],{"class":90},[76,84158,53832],{"class":53332},[76,84160,53339],{"class":90},[76,84162,84163,84165,84167],{"class":78,"line":94},[76,84164,54176],{"class":90},[76,84166,53845],{"class":53332},[76,84168,53339],{"class":90},[76,84170,84171],{"class":78,"line":133},[76,84172,84173],{"class":90},"    \u002F\u002F 把字符串转化为数组\n",[76,84175,84176],{"class":78,"line":145},[76,84177,84178],{"class":90},"    const str = 'pink,red'\n",[76,84180,84181],{"class":78,"line":152},[76,84182,84183],{"class":90},"    const arr = str.split(',')\n",[76,84185,84186],{"class":78,"line":157},[76,84187,82662],{"class":90},[76,84189,84190],{"class":78,"line":246},[76,84191,84192],{"class":90},"    const str1 = '2025-8-25'\n",[76,84194,84195],{"class":78,"line":251},[76,84196,84197],{"class":90},"    const arr1 = str1.split('-')\n",[76,84199,84200],{"class":78,"line":257},[76,84201,84202],{"class":90},"    console.log(arr1)\n",[76,84204,84205,84207,84209],{"class":78,"line":641},[76,84206,54449],{"class":90},[76,84208,53845],{"class":53332},[76,84210,53339],{"class":90},[76,84212,84213,84215,84217],{"class":78,"line":646},[76,84214,53817],{"class":90},[76,84216,53832],{"class":53332},[76,84218,53339],{"class":90},[24959,84220,84222],{"id":84221},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84224,64],{},[19,84226,84227],{},"substring(indexStart)",[19,84229,84230],{},"substring(indexStart, indexEnd)",[3261,84232,84233,84244,84256,84266],{},[29,84234,84235,84236,84239,84240,84243],{},"如果省略了 ",[73,84237,84238],{},"indexEnd","，则 ",[73,84241,84242],{},"substring()"," 提取字符直到字符串的末尾",[29,84245,84246,84247,84250,84251,84239,84253,84255],{},"如果 ",[73,84248,84249],{},"indexStart"," 等于 ",[73,84252,84238],{},[73,84254,84242],{}," 返回一个空字符串",[29,84257,84246,84258,84260,84261,84239,84263,84265],{},[73,84259,84249],{}," 大于 ",[73,84262,84238],{},[73,84264,84242],{}," 的效果就像交换了这两个参数一样",[29,84267,84268],{},"结束的索引号不包含想要截取的部分",[66,84270,84272],{"className":83513,"code":84271,"language":83515,"meta":71,"style":71},"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",[73,84273,84274,84286,84290,84324,84354,84358,84389,84393,84420,84450,84480,84484,84515],{"__ignoreMap":71},[76,84275,84276,84279,84281,84284],{"class":78,"line":79},[76,84277,84278],{"class":90},"const anyString ",[76,84280,370],{"class":82},[76,84282,84283],{"class":126}," \"Mozilla\"",[76,84285,3415],{"class":90},[76,84287,84288],{"class":78,"line":94},[76,84289,149],{"emptyLinePlaceholder":148},[76,84291,84292,84295,84297,84299,84301,84304,84306,84309,84311,84313,84315,84317,84319,84321],{"class":78,"line":133},[76,84293,84294],{"class":119},"console",[76,84296,2819],{"class":90},[76,84298,60277],{"class":119},[76,84300,123],{"class":90},[76,84302,84303],{"class":119},"anyString",[76,84305,2819],{"class":90},[76,84307,84308],{"class":119},"substring",[76,84310,123],{"class":90},[76,84312,1294],{"class":119},[76,84314,405],{"class":90},[76,84316,669],{"class":119},[76,84318,77280],{"class":90},[76,84320,35367],{"class":82},[76,84322,84323],{"class":126}," 'M'\n",[76,84325,84326,84328,84330,84332,84334,84336,84338,84340,84342,84344,84346,84348,84350,84352],{"class":78,"line":145},[76,84327,84294],{"class":119},[76,84329,2819],{"class":90},[76,84331,60277],{"class":119},[76,84333,123],{"class":90},[76,84335,84303],{"class":119},[76,84337,2819],{"class":90},[76,84339,84308],{"class":119},[76,84341,123],{"class":90},[76,84343,669],{"class":119},[76,84345,405],{"class":90},[76,84347,1294],{"class":119},[76,84349,77280],{"class":90},[76,84351,35367],{"class":82},[76,84353,84323],{"class":126},[76,84355,84356],{"class":78,"line":152},[76,84357,149],{"emptyLinePlaceholder":148},[76,84359,84360,84362,84364,84366,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386],{"class":78,"line":157},[76,84361,84294],{"class":119},[76,84363,2819],{"class":90},[76,84365,60277],{"class":119},[76,84367,123],{"class":90},[76,84369,84303],{"class":119},[76,84371,2819],{"class":90},[76,84373,84308],{"class":119},[76,84375,123],{"class":90},[76,84377,1294],{"class":119},[76,84379,405],{"class":90},[76,84381,2608],{"class":119},[76,84383,77280],{"class":90},[76,84385,35367],{"class":82},[76,84387,84388],{"class":126}," 'Mozill'\n",[76,84390,84391],{"class":78,"line":246},[76,84392,149],{"emptyLinePlaceholder":148},[76,84394,84395,84397,84399,84401,84403,84405,84407,84409,84411,84413,84415,84417],{"class":78,"line":251},[76,84396,84294],{"class":119},[76,84398,2819],{"class":90},[76,84400,60277],{"class":119},[76,84402,123],{"class":90},[76,84404,84303],{"class":119},[76,84406,2819],{"class":90},[76,84408,84308],{"class":119},[76,84410,123],{"class":90},[76,84412,2557],{"class":119},[76,84414,77280],{"class":90},[76,84416,35367],{"class":82},[76,84418,84419],{"class":126}," 'lla'\n",[76,84421,84422,84424,84426,84428,84430,84432,84434,84436,84438,84440,84442,84444,84446,84448],{"class":78,"line":257},[76,84423,84294],{"class":119},[76,84425,2819],{"class":90},[76,84427,60277],{"class":119},[76,84429,123],{"class":90},[76,84431,84303],{"class":119},[76,84433,2819],{"class":90},[76,84435,84308],{"class":119},[76,84437,123],{"class":90},[76,84439,2557],{"class":119},[76,84441,405],{"class":90},[76,84443,2633],{"class":119},[76,84445,77336],{"class":90},[76,84447,35367],{"class":82},[76,84449,84419],{"class":126},[76,84451,84452,84454,84456,84458,84460,84462,84464,84466,84468,84470,84472,84474,84476,84478],{"class":78,"line":641},[76,84453,84294],{"class":119},[76,84455,2819],{"class":90},[76,84457,60277],{"class":119},[76,84459,123],{"class":90},[76,84461,84303],{"class":119},[76,84463,2819],{"class":90},[76,84465,84308],{"class":119},[76,84467,123],{"class":90},[76,84469,2633],{"class":119},[76,84471,405],{"class":90},[76,84473,2557],{"class":119},[76,84475,77280],{"class":90},[76,84477,35367],{"class":82},[76,84479,84419],{"class":126},[76,84481,84482],{"class":78,"line":646},[76,84483,149],{"emptyLinePlaceholder":148},[76,84485,84486,84488,84490,84492,84494,84496,84498,84500,84502,84504,84506,84508,84510,84512],{"class":78,"line":659},[76,84487,84294],{"class":119},[76,84489,2819],{"class":90},[76,84491,60277],{"class":119},[76,84493,123],{"class":90},[76,84495,84303],{"class":119},[76,84497,2819],{"class":90},[76,84499,84308],{"class":119},[76,84501,123],{"class":90},[76,84503,1294],{"class":119},[76,84505,405],{"class":90},[76,84507,2633],{"class":119},[76,84509,77280],{"class":90},[76,84511,35367],{"class":82},[76,84513,84514],{"class":126}," 'Mozilla'\n",[76,84516,84517,84519,84521,84523,84525,84527,84529,84531,84533,84535,84537,84539,84541,84543],{"class":78,"line":1608},[76,84518,84294],{"class":119},[76,84520,2819],{"class":90},[76,84522,60277],{"class":119},[76,84524,123],{"class":90},[76,84526,84303],{"class":119},[76,84528,2819],{"class":90},[76,84530,84308],{"class":119},[76,84532,123],{"class":90},[76,84534,1294],{"class":119},[76,84536,405],{"class":90},[76,84538,402],{"class":119},[76,84540,77280],{"class":90},[76,84542,35367],{"class":82},[76,84544,84514],{"class":126},[24959,84546,84548],{"id":84547},"_410533-startswith","4.10.5.3.3 startsWith",[19,84550,84551,84554,84555,84560,84561,84563,84564],{},[73,84552,84553],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2416,84556,84557],{},[73,84558,84559],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[73,84562,3483],{}," 或 ",[73,84565,68048],{},[66,84567,84569],{"className":79521,"code":84568,"language":79523,"meta":71,"style":71},"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",[73,84570,84571,84583,84602,84607,84627],{"__ignoreMap":71},[76,84572,84573,84575,84578,84580],{"class":78,"line":79},[76,84574,8870],{"class":82},[76,84576,84577],{"class":90}," str1 ",[76,84579,370],{"class":82},[76,84581,84582],{"class":126}," \"Saturday night plans\"\n",[76,84584,84585,84587,84589,84592,84595,84597,84600],{"class":78,"line":94},[76,84586,79558],{"class":90},[76,84588,60277],{"class":86},[76,84590,84591],{"class":90},"(str1.",[76,84593,84594],{"class":86},"startsWith",[76,84596,123],{"class":90},[76,84598,84599],{"class":126},"\"Sat\"",[76,84601,656],{"class":90},[76,84603,84604],{"class":78,"line":133},[76,84605,84606],{"class":540},"\u002F\u002F Expected output: true\n",[76,84608,84609,84611,84613,84615,84617,84619,84621,84623,84625],{"class":78,"line":145},[76,84610,79558],{"class":90},[76,84612,60277],{"class":86},[76,84614,84591],{"class":90},[76,84616,84594],{"class":86},[76,84618,123],{"class":90},[76,84620,84599],{"class":126},[76,84622,405],{"class":90},[76,84624,2339],{"class":119},[76,84626,656],{"class":90},[76,84628,84629],{"class":78,"line":152},[76,84630,84631],{"class":540},"\u002F\u002F Expected output: false\n",[66,84633,84635],{"className":52665,"code":84634,"language":52667,"meta":71,"style":71},"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",[73,84636,84637,84642,84647,84651,84656,84661],{"__ignoreMap":71},[76,84638,84639],{"class":78,"line":79},[76,84640,84641],{"class":90},"startsWith(searchString)\n",[76,84643,84644],{"class":78,"line":94},[76,84645,84646],{"class":90},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[76,84648,84649],{"class":78,"line":133},[76,84650,149],{"emptyLinePlaceholder":148},[76,84652,84653],{"class":78,"line":145},[76,84654,84655],{"class":90},"const str3 = 'pink老师上课中'\n",[76,84657,84658],{"class":78,"line":152},[76,84659,84660],{"class":90},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[76,84662,84663],{"class":78,"line":157},[76,84664,84665],{"class":90},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24959,84667,84669],{"id":84668},"_410534-includes","4.10.5.3.4 includes",[19,84671,84672],{},"includes(searchString) includes(searchString, position)",[26,84674,84675],{},[29,84676,84677],{},"searchString:",[19,84679,84680,84681,84683,84684,84689,84690,84695,84696,23549,84699,84702,84703,84706],{},"一个要在 ",[73,84682,1402],{}," 中查找的字符串。",[2503,84685,84688],{"href":84686,"rel":84687},"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",[25914],"不能是正则表达式","。所有非正则表达式的值都会被",[2503,84691,84694],{"href":84692,"rel":84693},"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",[25914],"强制转换为字符串","，因此如果该参数被省略或传入 ",[73,84697,84698],{},"undefined",[73,84700,84701],{},"includes()"," 方法会在字符串中搜索 ",[73,84704,84705],{},"\"undefined\"","，这通常不是你想要的",[26,84708,84709],{"start":94},[29,84710,84711,3117],{},[73,84712,84713],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84715,84716,84717,84720,84721],{},"在字符串中开始搜索 ",[73,84718,84719],{},"searchString"," 的位置。默认值为 ",[73,84722,1294],{},[26,84724,84725],{"start":133},[29,84726,84727],{},"返回值：",[19,84729,84730,84731,84733,84734,84738,84739],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[73,84732,84719],{}," 为空字符串的情况），则返回 ",[2416,84735,84736],{},[73,84737,3483],{}," ，否则返回 ",[2416,84740,84741],{},[73,84742,68048],{},[26,84744,84745],{"start":145},[29,84746,84747],{},"异常：",[19,84749,84246,84750,15848,84752,84756],{},[73,84751,84719],{},[2503,84753,84755],{"href":84686,"rel":84754},[25914],"是一个正则表达式","，则会抛出",[19,84758,84759],{},"只要是有就是true，不需要非得以谁开头结尾",[66,84761,84763],{"className":79521,"code":84762,"language":79523,"meta":71,"style":71},"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",[73,84764,84765,84776,84799,84818,84838,84860,84879],{"__ignoreMap":71},[76,84766,84767,84769,84771,84773],{"class":78,"line":79},[76,84768,8870],{"class":82},[76,84770,81800],{"class":90},[76,84772,370],{"class":82},[76,84774,84775],{"class":126}," \"To be, or not to be, that is the question.\"\n",[76,84777,84778,84780,84782,84785,84788,84790,84793,84796],{"class":78,"line":94},[76,84779,79558],{"class":90},[76,84781,60277],{"class":86},[76,84783,84784],{"class":90},"(str.",[76,84786,84787],{"class":86},"includes",[76,84789,123],{"class":90},[76,84791,84792],{"class":126},"\"To be\"",[76,84794,84795],{"class":90},"))",[76,84797,84798],{"class":540},"  \u002F\u002F true\n",[76,84800,84801,84803,84805,84807,84809,84811,84814,84816],{"class":78,"line":133},[76,84802,79558],{"class":90},[76,84804,60277],{"class":86},[76,84806,84784],{"class":90},[76,84808,84787],{"class":86},[76,84810,123],{"class":90},[76,84812,84813],{"class":126},"\"question\"",[76,84815,84795],{"class":90},[76,84817,84798],{"class":540},[76,84819,84820,84822,84824,84826,84828,84830,84833,84835],{"class":78,"line":145},[76,84821,79558],{"class":90},[76,84823,60277],{"class":86},[76,84825,84784],{"class":90},[76,84827,84787],{"class":86},[76,84829,123],{"class":90},[76,84831,84832],{"class":126},"\"nonexistent\"",[76,84834,84795],{"class":90},[76,84836,84837],{"class":540},"  \u002F\u002F false\n",[76,84839,84840,84842,84844,84846,84848,84850,84852,84854,84856,84858],{"class":78,"line":152},[76,84841,79558],{"class":90},[76,84843,60277],{"class":86},[76,84845,84784],{"class":90},[76,84847,84787],{"class":86},[76,84849,123],{"class":90},[76,84851,84792],{"class":126},[76,84853,405],{"class":90},[76,84855,669],{"class":119},[76,84857,84795],{"class":90},[76,84859,84837],{"class":540},[76,84861,84862,84864,84866,84868,84870,84872,84875,84877],{"class":78,"line":157},[76,84863,79558],{"class":90},[76,84865,60277],{"class":86},[76,84867,84784],{"class":90},[76,84869,84787],{"class":86},[76,84871,123],{"class":90},[76,84873,84874],{"class":126},"\"TO BE\"",[76,84876,84795],{"class":90},[76,84878,84837],{"class":540},[76,84880,84881,84883,84885,84887,84889,84891,84893,84895],{"class":78,"line":246},[76,84882,79558],{"class":90},[76,84884,60277],{"class":86},[76,84886,84784],{"class":90},[76,84888,84787],{"class":86},[76,84890,123],{"class":90},[76,84892,9730],{"class":126},[76,84894,84795],{"class":90},[76,84896,84798],{"class":540},[24959,84898,84900],{"id":84899},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[66,84902,84904],{"className":55099,"code":84903,"language":55101,"meta":71,"style":71},"\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",[73,84905,84906,84914,84922,84927,84932,84937,84942,84947,84955],{"__ignoreMap":71},[76,84907,84908,84910,84912],{"class":78,"line":79},[76,84909,584],{"class":90},[76,84911,53832],{"class":53332},[76,84913,53339],{"class":90},[76,84915,84916,84918,84920],{"class":78,"line":94},[76,84917,54176],{"class":90},[76,84919,53845],{"class":53332},[76,84921,53339],{"class":90},[76,84923,84924],{"class":78,"line":133},[76,84925,84926],{"class":90},"    const num = 10\n",[76,84928,84929],{"class":78,"line":145},[76,84930,84931],{"class":90},"    \u002F\u002F 强制转换\n",[76,84933,84934],{"class":78,"line":152},[76,84935,84936],{"class":90},"    console.log(String(num))\n",[76,84938,84939],{"class":78,"line":157},[76,84940,84941],{"class":90},"    \u002F\u002F toString()方法转换\n",[76,84943,84944],{"class":78,"line":246},[76,84945,84946],{"class":90},"    console.log(num.toString())\n",[76,84948,84949,84951,84953],{"class":78,"line":251},[76,84950,54449],{"class":90},[76,84952,53845],{"class":53332},[76,84954,53339],{"class":90},[76,84956,84957,84959,84961],{"class":78,"line":257},[76,84958,53817],{"class":90},[76,84960,53832],{"class":53332},[76,84962,53339],{"class":90},[24959,84964,84966],{"id":84965},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84968,84969],{},[3583,84970],{"alt":71,"src":84971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[66,84973,84975],{"className":52665,"code":84974,"language":52667,"meta":71,"style":71},"\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",[73,84976,84977,84987,85001,85005,85013,85027,85047,85059,85067,85071,85079,85091,85099,85111,85116,85121,85126,85173,85189,85197,85205,85209],{"__ignoreMap":71},[76,84978,84979,84981,84983,84985],{"class":78,"line":79},[76,84980,53329],{"class":90},[76,84982,53333],{"class":53332},[76,84984,53336],{"class":86},[76,84986,53339],{"class":90},[76,84988,84989,84991,84993,84995,84997,84999],{"class":78,"line":94},[76,84990,584],{"class":90},[76,84992,52667],{"class":53332},[76,84994,53348],{"class":86},[76,84996,370],{"class":90},[76,84998,53353],{"class":126},[76,85000,53339],{"class":90},[76,85002,85003],{"class":78,"line":133},[76,85004,149],{"emptyLinePlaceholder":148},[76,85006,85007,85009,85011],{"class":78,"line":145},[76,85008,584],{"class":90},[76,85010,53366],{"class":53332},[76,85012,53339],{"class":90},[76,85014,85015,85017,85019,85021,85023,85025],{"class":78,"line":152},[76,85016,54176],{"class":90},[76,85018,53376],{"class":53332},[76,85020,53379],{"class":86},[76,85022,370],{"class":90},[76,85024,53384],{"class":126},[76,85026,53339],{"class":90},[76,85028,85029,85031,85033,85035,85037,85039,85041,85043,85045],{"class":78,"line":157},[76,85030,54176],{"class":90},[76,85032,53376],{"class":53332},[76,85034,16972],{"class":86},[76,85036,370],{"class":90},[76,85038,53423],{"class":126},[76,85040,53403],{"class":86},[76,85042,370],{"class":90},[76,85044,53430],{"class":126},[76,85046,53339],{"class":90},[76,85048,85049,85051,85053,85055,85057],{"class":78,"line":246},[76,85050,54176],{"class":90},[76,85052,53439],{"class":53332},[76,85054,53442],{"class":90},[76,85056,53439],{"class":53332},[76,85058,53339],{"class":90},[76,85060,85061,85063,85065],{"class":78,"line":251},[76,85062,53817],{"class":90},[76,85064,53366],{"class":53332},[76,85066,53339],{"class":90},[76,85068,85069],{"class":78,"line":257},[76,85070,149],{"emptyLinePlaceholder":148},[76,85072,85073,85075,85077],{"class":78,"line":641},[76,85074,584],{"class":90},[76,85076,53832],{"class":53332},[76,85078,53339],{"class":90},[76,85080,85081,85083,85085,85087,85089],{"class":78,"line":646},[76,85082,54176],{"class":90},[76,85084,53643],{"class":53332},[76,85086,57345],{"class":90},[76,85088,53643],{"class":53332},[76,85090,53339],{"class":90},[76,85092,85093,85095,85097],{"class":78,"line":659},[76,85094,54176],{"class":90},[76,85096,53845],{"class":53332},[76,85098,53339],{"class":90},[76,85100,85101,85103,85106,85108],{"class":78,"line":1608},[76,85102,13275],{"class":82},[76,85104,85105],{"class":119}," gift",[76,85107,15617],{"class":82},[76,85109,85110],{"class":126}," '50g的茶叶，清洗球'\n",[76,85112,85113],{"class":78,"line":1632},[76,85114,85115],{"class":540},"    \u002F\u002F 1.把字符串拆分为数组\n",[76,85117,85118],{"class":78,"line":1637},[76,85119,85120],{"class":540},"    \u002F\u002F console.log(gift.split(','))\n",[76,85122,85123],{"class":78,"line":1642},[76,85124,85125],{"class":540},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[76,85127,85128,85130,85132,85134,85137,85140,85142,85145,85147,85149,85151,85153,85155,85158,85160,85163,85165,85167,85169,85171],{"class":78,"line":1652},[76,85129,13275],{"class":82},[76,85131,75946],{"class":119},[76,85133,15617],{"class":82},[76,85135,85136],{"class":90}," gift.",[76,85138,85139],{"class":86},"split",[76,85141,123],{"class":90},[76,85143,85144],{"class":126},"'，'",[76,85146,32870],{"class":90},[76,85148,76071],{"class":86},[76,85150,123],{"class":90},[76,85152,81820],{"class":7296},[76,85154,81823],{"class":82},[76,85156,85157],{"class":126}," `\u003Cspan>【赠品】${",[76,85159,81820],{"class":90},[76,85161,85162],{"class":126},"}\u003C\u002Fspan>\u003Cbr>`",[76,85164,32870],{"class":90},[76,85166,76250],{"class":86},[76,85168,123],{"class":90},[76,85170,76255],{"class":126},[76,85172,130],{"class":90},[76,85174,85175,85177,85179,85181,85183,85185,85187],{"class":78,"line":1660},[76,85176,54439],{"class":90},[76,85178,56430],{"class":86},[76,85180,123],{"class":90},[76,85182,83955],{"class":126},[76,85184,76276],{"class":90},[76,85186,370],{"class":82},[76,85188,76012],{"class":90},[76,85190,85191,85193,85195],{"class":78,"line":1683},[76,85192,54449],{"class":90},[76,85194,53845],{"class":53332},[76,85196,53339],{"class":90},[76,85198,85199,85201,85203],{"class":78,"line":1698},[76,85200,53817],{"class":90},[76,85202,53832],{"class":53332},[76,85204,53339],{"class":90},[76,85206,85207],{"class":78,"line":1711},[76,85208,149],{"emptyLinePlaceholder":148},[76,85210,85211,85213,85215],{"class":78,"line":1717},[76,85212,53817],{"class":90},[76,85214,52667],{"class":53332},[76,85216,53339],{"class":90},[24047,85218,85220],{"id":85219},"_41054-number","4.10.5.4 Number",[19,85222,85223],{},[3583,85224],{"alt":71,"src":85225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85227,85228],{},"整数也可以进行toFixed来保留小数",[19,85230,85231],{},"比如：",[19,85233,85234],{},"const price=10",[19,85236,85237],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24047,85239,85241],{"id":85240},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85243,85244],{},[3583,85245],{"alt":71,"src":85246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[66,85248,85250],{"className":52665,"code":85249,"language":52667,"meta":71,"style":71},"\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",[73,85251,85252,85262,85276,85280,85288,85302,85322,85334,85342,85348,85358,85368,85378,85382,85386,85392,85404,85418,85422,85426,85432,85444,85460,85470,85486,85490,85494,85500,85510,85520,85524,85528,85536,85548,85560,85572,85576,85580,85588,85600,85604,85608,85619,85629,85641,85653,85663,85667,85671,85679,85688,85700,85710,85720,85724,85728,85736,85745,85752,85762,85774,85778,85782,85791,85801,85812,85824,85836,85840,85844,85853,85863,85874,85878,85882,85888,85900,85912,85922,85932,85950,85962,85966,85970,85979,85991,86001,86011,86023,86027,86035,86043,86047,86055,86069,86077,86091,86119,86127,86135,86145,86149,86157,86165,86174,86182,86191,86201,86205,86209,86217,86225,86234,86242,86250,86263,86267,86271,86279,86287,86296,86304,86312,86327,86331,86335,86343,86351,86360,86368,86376,86390,86398,86402,86406,86411,86437,86442,86479,86484,86507,86512,86566,86571,86607,86611,86617,86622,86631,86645,86654,86673,86682,86692,86697,86702,86715,86720,86774,86800,86808,86816,86820],{"__ignoreMap":71},[76,85253,85254,85256,85258,85260],{"class":78,"line":79},[76,85255,53329],{"class":90},[76,85257,53333],{"class":53332},[76,85259,53336],{"class":86},[76,85261,53339],{"class":90},[76,85263,85264,85266,85268,85270,85272,85274],{"class":78,"line":94},[76,85265,584],{"class":90},[76,85267,52667],{"class":53332},[76,85269,53348],{"class":86},[76,85271,370],{"class":90},[76,85273,53353],{"class":126},[76,85275,53339],{"class":90},[76,85277,85278],{"class":78,"line":133},[76,85279,149],{"emptyLinePlaceholder":148},[76,85281,85282,85284,85286],{"class":78,"line":145},[76,85283,584],{"class":90},[76,85285,53366],{"class":53332},[76,85287,53339],{"class":90},[76,85289,85290,85292,85294,85296,85298,85300],{"class":78,"line":152},[76,85291,54176],{"class":90},[76,85293,53376],{"class":53332},[76,85295,53379],{"class":86},[76,85297,370],{"class":90},[76,85299,53384],{"class":126},[76,85301,53339],{"class":90},[76,85303,85304,85306,85308,85310,85312,85314,85316,85318,85320],{"class":78,"line":157},[76,85305,54176],{"class":90},[76,85307,53376],{"class":53332},[76,85309,16972],{"class":86},[76,85311,370],{"class":90},[76,85313,53423],{"class":126},[76,85315,53403],{"class":86},[76,85317,370],{"class":90},[76,85319,53430],{"class":126},[76,85321,53339],{"class":90},[76,85323,85324,85326,85328,85330,85332],{"class":78,"line":246},[76,85325,54176],{"class":90},[76,85327,53439],{"class":53332},[76,85329,53442],{"class":90},[76,85331,53439],{"class":53332},[76,85333,53339],{"class":90},[76,85335,85336,85338,85340],{"class":78,"line":251},[76,85337,54176],{"class":90},[76,85339,2178],{"class":53332},[76,85341,53339],{"class":90},[76,85343,85344,85346],{"class":78,"line":257},[76,85345,8482],{"class":53332},[76,85347,17623],{"class":90},[76,85349,85350,85352,85354,85356],{"class":78,"line":641},[76,85351,56726],{"class":119},[76,85353,53469],{"class":90},[76,85355,1294],{"class":119},[76,85357,3415],{"class":90},[76,85359,85360,85362,85364,85366],{"class":78,"line":646},[76,85361,56737],{"class":119},[76,85363,53469],{"class":90},[76,85365,1294],{"class":119},[76,85367,3415],{"class":90},[76,85369,85370,85372,85374,85376],{"class":78,"line":659},[76,85371,74623],{"class":119},[76,85373,53469],{"class":90},[76,85375,62534],{"class":119},[76,85377,3415],{"class":90},[76,85379,85380],{"class":78,"line":1608},[76,85381,4283],{"class":90},[76,85383,85384],{"class":78,"line":1632},[76,85385,149],{"emptyLinePlaceholder":148},[76,85387,85388,85390],{"class":78,"line":1637},[76,85389,64151],{"class":86},[76,85391,17623],{"class":90},[76,85393,85394,85396,85398,85400,85402],{"class":78,"line":1642},[76,85395,56802],{"class":119},[76,85397,53469],{"class":90},[76,85399,80600],{"class":119},[76,85401,53524],{"class":82},[76,85403,3415],{"class":90},[76,85405,85406,85408,85410,85412,85414,85416],{"class":78,"line":1652},[76,85407,56737],{"class":119},[76,85409,53469],{"class":90},[76,85411,2575],{"class":119},[76,85413,53524],{"class":82},[76,85415,53588],{"class":119},[76,85417,3415],{"class":90},[76,85419,85420],{"class":78,"line":1660},[76,85421,4283],{"class":90},[76,85423,85424],{"class":78,"line":1683},[76,85425,149],{"emptyLinePlaceholder":148},[76,85427,85428,85430],{"class":78,"line":1698},[76,85429,80651],{"class":86},[76,85431,17623],{"class":90},[76,85433,85434,85436,85438,85440,85442],{"class":78,"line":1711},[76,85435,56726],{"class":119},[76,85437,53469],{"class":90},[76,85439,2836],{"class":119},[76,85441,53524],{"class":82},[76,85443,3415],{"class":90},[76,85445,85446,85448,85450,85452,85454,85456,85458],{"class":78,"line":1717},[76,85447,63888],{"class":119},[76,85449,53469],{"class":90},[76,85451,30170],{"class":119},[76,85453,80705],{"class":119},[76,85455,80708],{"class":119},[76,85457,2954],{"class":82},[76,85459,3415],{"class":90},[76,85461,85462,85464,85466,85468],{"class":78,"line":1728},[76,85463,57040],{"class":119},[76,85465,53469],{"class":90},[76,85467,53509],{"class":119},[76,85469,3415],{"class":90},[76,85471,85472,85474,85476,85478,85480,85482,85484],{"class":78,"line":1740},[76,85473,64005],{"class":119},[76,85475,53469],{"class":90},[76,85477,669],{"class":119},[76,85479,53524],{"class":82},[76,85481,53553],{"class":119},[76,85483,64272],{"class":119},[76,85485,3415],{"class":90},[76,85487,85488],{"class":78,"line":1746},[76,85489,4283],{"class":90},[76,85491,85492],{"class":78,"line":1751},[76,85493,149],{"emptyLinePlaceholder":148},[76,85495,85496,85498],{"class":78,"line":1756},[76,85497,80768],{"class":86},[76,85499,17623],{"class":90},[76,85501,85502,85504,85506,85508],{"class":78,"line":1766},[76,85503,64053],{"class":119},[76,85505,53469],{"class":90},[76,85507,64058],{"class":119},[76,85509,3415],{"class":90},[76,85511,85512,85514,85516,85518],{"class":78,"line":1773},[76,85513,56915],{"class":119},[76,85515,53469],{"class":90},[76,85517,63846],{"class":119},[76,85519,3415],{"class":90},[76,85521,85522],{"class":78,"line":1793},[76,85523,4283],{"class":90},[76,85525,85526],{"class":78,"line":1806},[76,85527,149],{"emptyLinePlaceholder":148},[76,85529,85530,85532,85534],{"class":78,"line":1817},[76,85531,80651],{"class":86},[76,85533,57646],{"class":53332},[76,85535,17623],{"class":90},[76,85537,85538,85540,85542,85544,85546],{"class":78,"line":1822},[76,85539,56802],{"class":119},[76,85541,53469],{"class":90},[76,85543,2872],{"class":119},[76,85545,53524],{"class":82},[76,85547,3415],{"class":90},[76,85549,85550,85552,85554,85556,85558],{"class":78,"line":1835},[76,85551,56816],{"class":119},[76,85553,53469],{"class":90},[76,85555,2872],{"class":119},[76,85557,53524],{"class":82},[76,85559,3415],{"class":90},[76,85561,85562,85564,85566,85568,85570],{"class":78,"line":1847},[76,85563,63778],{"class":119},[76,85565,53469],{"class":90},[76,85567,2583],{"class":119},[76,85569,53524],{"class":82},[76,85571,3415],{"class":90},[76,85573,85574],{"class":78,"line":1852},[76,85575,4283],{"class":90},[76,85577,85578],{"class":78,"line":1862},[76,85579,149],{"emptyLinePlaceholder":148},[76,85581,85582,85584,85586],{"class":78,"line":1874},[76,85583,80651],{"class":86},[76,85585,64332],{"class":86},[76,85587,17623],{"class":90},[76,85589,85590,85592,85594,85596,85598],{"class":78,"line":1879},[76,85591,56802],{"class":119},[76,85593,53469],{"class":90},[76,85595,2133],{"class":119},[76,85597,53524],{"class":82},[76,85599,3415],{"class":90},[76,85601,85602],{"class":78,"line":1884},[76,85603,4283],{"class":90},[76,85605,85606],{"class":78,"line":1889},[76,85607,149],{"emptyLinePlaceholder":148},[76,85609,85610,85612,85614,85617],{"class":78,"line":1900},[76,85611,80651],{"class":86},[76,85613,64332],{"class":86},[76,85615,85616],{"class":86}," .tag",[76,85618,17623],{"class":90},[76,85620,85621,85623,85625,85627],{"class":78,"line":1906},[76,85622,57040],{"class":119},[76,85624,53469],{"class":90},[76,85626,62897],{"class":119},[76,85628,3415],{"class":90},[76,85630,85631,85633,85635,85637,85639],{"class":78,"line":1924},[76,85632,56726],{"class":119},[76,85634,53469],{"class":90},[76,85636,2345],{"class":119},[76,85638,53524],{"class":82},[76,85640,3415],{"class":90},[76,85642,85643,85645,85647,85649,85651],{"class":78,"line":1929},[76,85644,56953],{"class":119},[76,85646,53469],{"class":90},[76,85648,2760],{"class":119},[76,85650,53524],{"class":82},[76,85652,3415],{"class":90},[76,85654,85655,85657,85659,85661],{"class":78,"line":1944},[76,85656,59446],{"class":119},[76,85658,53469],{"class":90},[76,85660,64098],{"class":119},[76,85662,3415],{"class":90},[76,85664,85665],{"class":78,"line":1950},[76,85666,4283],{"class":90},[76,85668,85669],{"class":78,"line":1965},[76,85670,149],{"emptyLinePlaceholder":148},[76,85672,85673,85675,85677],{"class":78,"line":1971},[76,85674,80651],{"class":86},[76,85676,80942],{"class":86},[76,85678,33509],{"class":90},[76,85680,85681,85683,85686],{"class":78,"line":1985},[76,85682,80651],{"class":86},[76,85684,85685],{"class":86}," .sub-total",[76,85687,17623],{"class":90},[76,85689,85690,85692,85694,85696,85698],{"class":78,"line":1991},[76,85691,56953],{"class":119},[76,85693,53469],{"class":90},[76,85695,1214],{"class":119},[76,85697,53524],{"class":82},[76,85699,3415],{"class":90},[76,85701,85702,85704,85706,85708],{"class":78,"line":2005},[76,85703,59446],{"class":119},[76,85705,53469],{"class":90},[76,85707,80965],{"class":119},[76,85709,3415],{"class":90},[76,85711,85712,85714,85716,85718],{"class":78,"line":2017},[76,85713,63865],{"class":119},[76,85715,53469],{"class":90},[76,85717,669],{"class":119},[76,85719,3415],{"class":90},[76,85721,85722],{"class":78,"line":2023},[76,85723,4283],{"class":90},[76,85725,85726],{"class":78,"line":2031},[76,85727,149],{"emptyLinePlaceholder":148},[76,85729,85730,85732,85734],{"class":78,"line":11880},[76,85731,80651],{"class":86},[76,85733,80982],{"class":86},[76,85735,33509],{"class":90},[76,85737,85738,85740,85743],{"class":78,"line":11901},[76,85739,80651],{"class":86},[76,85741,85742],{"class":86}," .sub-total::before",[76,85744,33509],{"class":90},[76,85746,85747,85750],{"class":78,"line":11907},[76,85748,85749],{"class":86},"    .amount::before",[76,85751,17623],{"class":90},[76,85753,85754,85756,85758,85760],{"class":78,"line":11921},[76,85755,80989],{"class":119},[76,85757,53469],{"class":90},[76,85759,80994],{"class":126},[76,85761,3415],{"class":90},[76,85763,85764,85766,85768,85770,85772],{"class":78,"line":11927},[76,85765,56953],{"class":119},[76,85767,53469],{"class":90},[76,85769,2760],{"class":119},[76,85771,53524],{"class":82},[76,85773,3415],{"class":90},[76,85775,85776],{"class":78,"line":11954},[76,85777,4283],{"class":90},[76,85779,85780],{"class":78,"line":11963},[76,85781,149],{"emptyLinePlaceholder":148},[76,85783,85784,85786,85789],{"class":78,"line":11969},[76,85785,80651],{"class":86},[76,85787,85788],{"class":86}," .spec",[76,85790,17623],{"class":90},[76,85792,85793,85795,85797,85799],{"class":78,"line":11977},[76,85794,63865],{"class":119},[76,85796,53469],{"class":90},[76,85798,2345],{"class":119},[76,85800,3415],{"class":90},[76,85802,85803,85805,85807,85810],{"class":78,"line":11982},[76,85804,59446],{"class":119},[76,85806,53469],{"class":90},[76,85808,85809],{"class":119},"#888",[76,85811,3415],{"class":90},[76,85813,85814,85816,85818,85820,85822],{"class":78,"line":18654},[76,85815,56953],{"class":119},[76,85817,53469],{"class":90},[76,85819,2810],{"class":119},[76,85821,53524],{"class":82},[76,85823,3415],{"class":90},[76,85825,85826,85828,85830,85832,85834],{"class":78,"line":18660},[76,85827,64028],{"class":119},[76,85829,53469],{"class":90},[76,85831,408],{"class":119},[76,85833,53524],{"class":82},[76,85835,3415],{"class":90},[76,85837,85838],{"class":78,"line":18683},[76,85839,4283],{"class":90},[76,85841,85842],{"class":78,"line":18689},[76,85843,149],{"emptyLinePlaceholder":148},[76,85845,85846,85848,85851],{"class":78,"line":18712},[76,85847,80651],{"class":86},[76,85849,85850],{"class":86}," .count",[76,85852,17623],{"class":90},[76,85854,85855,85857,85859,85861],{"class":78,"line":18726},[76,85856,63865],{"class":119},[76,85858,53469],{"class":90},[76,85860,669],{"class":119},[76,85862,3415],{"class":90},[76,85864,85865,85867,85869,85872],{"class":78,"line":18746},[76,85866,59446],{"class":119},[76,85868,53469],{"class":90},[76,85870,85871],{"class":119},"#aaa",[76,85873,3415],{"class":90},[76,85875,85876],{"class":78,"line":18752},[76,85877,4283],{"class":90},[76,85879,85880],{"class":78,"line":18763},[76,85881,149],{"emptyLinePlaceholder":148},[76,85883,85884,85886],{"class":78,"line":18786},[76,85885,74502],{"class":86},[76,85887,17623],{"class":90},[76,85889,85890,85892,85894,85896,85898],{"class":78,"line":18808},[76,85891,56802],{"class":119},[76,85893,53469],{"class":90},[76,85895,80600],{"class":119},[76,85897,53524],{"class":82},[76,85899,3415],{"class":90},[76,85901,85902,85904,85906,85908,85910],{"class":78,"line":18813},[76,85903,56737],{"class":119},[76,85905,53469],{"class":90},[76,85907,1294],{"class":119},[76,85909,53588],{"class":119},[76,85911,3415],{"class":90},[76,85913,85914,85916,85918,85920],{"class":78,"line":18819},[76,85915,57040],{"class":119},[76,85917,53469],{"class":90},[76,85919,53509],{"class":119},[76,85921,3415],{"class":90},[76,85923,85924,85926,85928,85930],{"class":78,"line":18833},[76,85925,57051],{"class":119},[76,85927,53469],{"class":90},[76,85929,53612],{"class":119},[76,85931,3415],{"class":90},[76,85933,85934,85937,85939,85941,85943,85945,85948],{"class":78,"line":18846},[76,85935,85936],{"class":119},"      border-top",[76,85938,53469],{"class":90},[76,85940,669],{"class":119},[76,85942,53524],{"class":82},[76,85944,53553],{"class":119},[76,85946,85947],{"class":119}," #4e4e4e",[76,85949,3415],{"class":90},[76,85951,85952,85954,85956,85958,85960],{"class":78,"line":18851},[76,85953,56726],{"class":119},[76,85955,53469],{"class":90},[76,85957,408],{"class":119},[76,85959,53524],{"class":82},[76,85961,3415],{"class":90},[76,85963,85964],{"class":78,"line":18865},[76,85965,4283],{"class":90},[76,85967,85968],{"class":78,"line":18870},[76,85969,149],{"emptyLinePlaceholder":148},[76,85971,85972,85974,85977],{"class":78,"line":18876},[76,85973,74502],{"class":86},[76,85975,85976],{"class":86}," .amount",[76,85978,17623],{"class":90},[76,85980,85981,85983,85985,85987,85989],{"class":78,"line":18881},[76,85982,56953],{"class":119},[76,85984,53469],{"class":90},[76,85986,1214],{"class":119},[76,85988,53524],{"class":82},[76,85990,3415],{"class":90},[76,85992,85993,85995,85997,85999],{"class":78,"line":18895},[76,85994,59446],{"class":119},[76,85996,53469],{"class":90},[76,85998,80965],{"class":119},[76,86000,3415],{"class":90},[76,86002,86003,86005,86007,86009],{"class":78,"line":18900},[76,86004,64362],{"class":119},[76,86006,53469],{"class":90},[76,86008,53521],{"class":119},[76,86010,3415],{"class":90},[76,86012,86013,86015,86017,86019,86021],{"class":78,"line":18905},[76,86014,63778],{"class":119},[76,86016,53469],{"class":90},[76,86018,2915],{"class":119},[76,86020,53524],{"class":82},[76,86022,3415],{"class":90},[76,86024,86025],{"class":78,"line":18919},[76,86026,4283],{"class":90},[76,86028,86029,86031,86033],{"class":78,"line":18931},[76,86030,54449],{"class":90},[76,86032,2178],{"class":53332},[76,86034,53339],{"class":90},[76,86036,86037,86039,86041],{"class":78,"line":18936},[76,86038,53817],{"class":90},[76,86040,53366],{"class":53332},[76,86042,53339],{"class":90},[76,86044,86045],{"class":78,"line":18949},[76,86046,149],{"emptyLinePlaceholder":148},[76,86048,86049,86051,86053],{"class":78,"line":18954},[76,86050,584],{"class":90},[76,86052,53832],{"class":53332},[76,86054,53339],{"class":90},[76,86056,86057,86059,86061,86063,86065,86067],{"class":78,"line":18959},[76,86058,54176],{"class":90},[76,86060,53643],{"class":53332},[76,86062,55518],{"class":86},[76,86064,370],{"class":90},[76,86066,64636],{"class":126},[76,86068,53339],{"class":90},[76,86070,86071,86073,86075],{"class":78,"line":18964},[76,86072,54449],{"class":90},[76,86074,53643],{"class":53332},[76,86076,53339],{"class":90},[76,86078,86079,86081,86083,86085,86087,86089],{"class":78,"line":18977},[76,86080,54176],{"class":90},[76,86082,53643],{"class":53332},[76,86084,55518],{"class":86},[76,86086,370],{"class":90},[76,86088,64608],{"class":126},[76,86090,53339],{"class":90},[76,86092,86093,86095,86097,86100,86102,86104,86106,86109,86111,86113,86115,86117],{"class":78,"line":18982},[76,86094,53373],{"class":90},[76,86096,53643],{"class":53332},[76,86098,86099],{"class":90},">合计：\u003C",[76,86101,76],{"class":53332},[76,86103,55518],{"class":86},[76,86105,370],{"class":90},[76,86107,86108],{"class":126},"\"amount\"",[76,86110,57345],{"class":90},[76,86112,76],{"class":53332},[76,86114,57345],{"class":90},[76,86116,53643],{"class":53332},[76,86118,53339],{"class":90},[76,86120,86121,86123,86125],{"class":78,"line":34671},[76,86122,54449],{"class":90},[76,86124,53643],{"class":53332},[76,86126,53339],{"class":90},[76,86128,86129,86131,86133],{"class":78,"line":34677},[76,86130,54176],{"class":90},[76,86132,53845],{"class":53332},[76,86134,53339],{"class":90},[76,86136,86137,86139,86141,86143],{"class":78,"line":34683},[76,86138,13275],{"class":82},[76,86140,81402],{"class":119},[76,86142,15617],{"class":82},[76,86144,57478],{"class":90},[76,86146,86147],{"class":78,"line":34689},[76,86148,81411],{"class":90},[76,86150,86151,86153,86155],{"class":78,"line":34695},[76,86152,81416],{"class":90},[76,86154,81419],{"class":126},[76,86156,33509],{"class":90},[76,86158,86159,86161,86163],{"class":78,"line":34706},[76,86160,81426],{"class":90},[76,86162,81429],{"class":126},[76,86164,33509],{"class":90},[76,86166,86167,86169,86172],{"class":78,"line":34712},[76,86168,81436],{"class":90},[76,86170,86171],{"class":119},"289.9",[76,86173,33509],{"class":90},[76,86175,86176,86178,86180],{"class":78,"line":34732},[76,86177,81446],{"class":90},[76,86179,81449],{"class":126},[76,86181,33509],{"class":90},[76,86183,86184,86187,86189],{"class":78,"line":34738},[76,86185,86186],{"class":90},"        count: ",[76,86188,2345],{"class":119},[76,86190,33509],{"class":90},[76,86192,86193,86196,86199],{"class":78,"line":34749},[76,86194,86195],{"class":90},"        spec: { color: ",[76,86197,86198],{"class":126},"'白色'",[76,86200,57635],{"class":90},[76,86202,86203],{"class":78,"line":34755},[76,86204,79918],{"class":90},[76,86206,86207],{"class":78,"line":34761},[76,86208,81411],{"class":90},[76,86210,86211,86213,86215],{"class":78,"line":34767},[76,86212,81416],{"class":90},[76,86214,81510],{"class":126},[76,86216,33509],{"class":90},[76,86218,86219,86221,86223],{"class":78,"line":34773},[76,86220,81426],{"class":90},[76,86222,81519],{"class":126},[76,86224,33509],{"class":90},[76,86226,86227,86229,86232],{"class":78,"line":34779},[76,86228,81436],{"class":90},[76,86230,86231],{"class":119},"109.8",[76,86233,33509],{"class":90},[76,86235,86236,86238,86240],{"class":78,"line":34785},[76,86237,81446],{"class":90},[76,86239,81537],{"class":126},[76,86241,33509],{"class":90},[76,86243,86244,86246,86248],{"class":78,"line":34791},[76,86245,86186],{"class":90},[76,86247,2339],{"class":119},[76,86249,33509],{"class":90},[76,86251,86252,86255,86257,86259,86261],{"class":78,"line":34811},[76,86253,86254],{"class":90},"        spec: { size: ",[76,86256,83927],{"class":126},[76,86258,57495],{"class":90},[76,86260,83932],{"class":126},[76,86262,57635],{"class":90},[76,86264,86265],{"class":78,"line":34817},[76,86266,79918],{"class":90},[76,86268,86269],{"class":78,"line":34833},[76,86270,81411],{"class":90},[76,86272,86273,86275,86277],{"class":78,"line":34839},[76,86274,81416],{"class":90},[76,86276,81554],{"class":126},[76,86278,33509],{"class":90},[76,86280,86281,86283,86285],{"class":78,"line":34853},[76,86282,81426],{"class":90},[76,86284,81563],{"class":126},[76,86286,33509],{"class":90},[76,86288,86289,86291,86294],{"class":78,"line":34859},[76,86290,81436],{"class":90},[76,86292,86293],{"class":119},"488",[76,86295,33509],{"class":90},[76,86297,86298,86300,86302],{"class":78,"line":34874},[76,86299,81446],{"class":90},[76,86301,81581],{"class":126},[76,86303,33509],{"class":90},[76,86305,86306,86308,86310],{"class":78,"line":34880},[76,86307,86186],{"class":90},[76,86309,669],{"class":119},[76,86311,33509],{"class":90},[76,86313,86314,86316,86319,86322,86325],{"class":78,"line":34889},[76,86315,86195],{"class":90},[76,86317,86318],{"class":126},"'青色'",[76,86320,86321],{"class":90},", sum: ",[76,86323,86324],{"class":126},"'一大四小'",[76,86326,57635],{"class":90},[76,86328,86329],{"class":78,"line":34895},[76,86330,79918],{"class":90},[76,86332,86333],{"class":78,"line":34904},[76,86334,81411],{"class":90},[76,86336,86337,86339,86341],{"class":78,"line":34910},[76,86338,81416],{"class":90},[76,86340,81598],{"class":126},[76,86342,33509],{"class":90},[76,86344,86345,86347,86349],{"class":78,"line":34916},[76,86346,81426],{"class":90},[76,86348,81607],{"class":126},[76,86350,33509],{"class":90},[76,86352,86353,86355,86358],{"class":78,"line":34925},[76,86354,81436],{"class":90},[76,86356,86357],{"class":119},"139",[76,86359,33509],{"class":90},[76,86361,86362,86364,86366],{"class":78,"line":34931},[76,86363,81446],{"class":90},[76,86365,81625],{"class":126},[76,86367,33509],{"class":90},[76,86369,86370,86372,86374],{"class":78,"line":34942},[76,86371,86186],{"class":90},[76,86373,669],{"class":119},[76,86375,33509],{"class":90},[76,86377,86378,86380,86383,86385,86388],{"class":78,"line":34948},[76,86379,86254],{"class":90},[76,86381,86382],{"class":126},"'小号'",[76,86384,57495],{"class":90},[76,86386,86387],{"class":126},"'紫色'",[76,86389,57501],{"class":90},[76,86391,86392,86395],{"class":78,"line":34967},[76,86393,86394],{"class":90},"        gift: ",[76,86396,86397],{"class":126},"'50g茶叶,清洗球'\n",[76,86399,86400],{"class":78,"line":34973},[76,86401,54430],{"class":90},[76,86403,86404],{"class":78,"line":34984},[76,86405,55141],{"class":90},[76,86407,86408],{"class":78,"line":34990},[76,86409,86410],{"class":540},"    \u002F\u002F  1.根据数据渲染页面\n",[76,86412,86413,86415,86417,86419,86421,86423,86425,86427,86429,86431,86433,86435],{"class":78,"line":35010},[76,86414,54439],{"class":90},[76,86416,56430],{"class":86},[76,86418,123],{"class":90},[76,86420,81925],{"class":126},[76,86422,76276],{"class":90},[76,86424,370],{"class":82},[76,86426,82072],{"class":90},[76,86428,76071],{"class":86},[76,86430,123],{"class":90},[76,86432,81820],{"class":7296},[76,86434,81823],{"class":82},[76,86436,17623],{"class":90},[76,86438,86439],{"class":78,"line":35026},[76,86440,86441],{"class":540},"      \u002F\u002F 对象解构\n",[76,86443,86444,86446,86448,86450,86452,86454,86456,86459,86461,86463,86465,86468,86470,86473,86475,86477],{"class":78,"line":35032},[76,86445,60258],{"class":82},[76,86447,81832],{"class":90},[76,86449,81844],{"class":119},[76,86451,405],{"class":90},[76,86453,301],{"class":119},[76,86455,405],{"class":90},[76,86457,86458],{"class":119},"count",[76,86460,405],{"class":90},[76,86462,81839],{"class":119},[76,86464,405],{"class":90},[76,86466,86467],{"class":119},"spec",[76,86469,405],{"class":90},[76,86471,86472],{"class":119},"gift",[76,86474,81847],{"class":90},[76,86476,370],{"class":82},[76,86478,81852],{"class":90},[76,86480,86481],{"class":78,"line":35046},[76,86482,86483],{"class":540},"      \u002F\u002F 规格文字模块处理\n",[76,86485,86486,86488,86491,86493,86495,86497,86499,86501,86503,86505],{"class":78,"line":35052},[76,86487,60258],{"class":82},[76,86489,86490],{"class":119}," text",[76,86492,15617],{"class":82},[76,86494,83962],{"class":90},[76,86496,83965],{"class":86},[76,86498,83968],{"class":90},[76,86500,76250],{"class":86},[76,86502,123],{"class":90},[76,86504,83975],{"class":126},[76,86506,130],{"class":90},[76,86508,86509],{"class":78,"line":35058},[76,86510,86511],{"class":540},"      \u002F\u002F 处理赠品模块\n",[76,86513,86514,86516,86518,86520,86523,86525,86527,86529,86531,86534,86536,86538,86540,86542,86544,86547,86549,86552,86554,86556,86558,86560,86562,86564],{"class":78,"line":35069},[76,86515,60258],{"class":82},[76,86517,75946],{"class":119},[76,86519,15617],{"class":82},[76,86521,86522],{"class":90}," gift ",[76,86524,3240],{"class":82},[76,86526,85136],{"class":90},[76,86528,85139],{"class":86},[76,86530,123],{"class":90},[76,86532,86533],{"class":126},"','",[76,86535,32870],{"class":90},[76,86537,76071],{"class":86},[76,86539,123],{"class":90},[76,86541,81820],{"class":7296},[76,86543,81823],{"class":82},[76,86545,86546],{"class":126}," `\u003Cspan class=\"tag\">【赠品】${",[76,86548,81820],{"class":90},[76,86550,86551],{"class":126},"}\u003C\u002Fspan>`",[76,86553,32870],{"class":90},[76,86555,76250],{"class":86},[76,86557,123],{"class":90},[76,86559,76255],{"class":126},[76,86561,15767],{"class":90},[76,86563,3117],{"class":82},[76,86565,72132],{"class":126},[76,86567,86568],{"class":78,"line":35075},[76,86569,86570],{"class":540},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[76,86572,86573,86575,86578,86580,86583,86585,86587,86589,86592,86594,86596,86598,86601,86603,86605],{"class":78,"line":35081},[76,86574,60258],{"class":82},[76,86576,86577],{"class":119}," subtotal",[76,86579,15617],{"class":82},[76,86581,86582],{"class":90}," ((price ",[76,86584,2718],{"class":82},[76,86586,7834],{"class":119},[76,86588,1119],{"class":82},[76,86590,86591],{"class":90}," count) ",[76,86593,795],{"class":82},[76,86595,7834],{"class":119},[76,86597,32870],{"class":90},[76,86599,86600],{"class":86},"toFixed",[76,86602,123],{"class":90},[76,86604,2345],{"class":119},[76,86606,130],{"class":90},[76,86608,86609],{"class":78,"line":35091},[76,86610,149],{"emptyLinePlaceholder":148},[76,86612,86613,86615],{"class":78,"line":35097},[76,86614,76009],{"class":82},[76,86616,72196],{"class":126},[76,86618,86619],{"class":78,"line":35108},[76,86620,86621],{"class":126},"        \u003Cdiv class=\"item\">\n",[76,86623,86624,86627,86629],{"class":78,"line":35114},[76,86625,86626],{"class":126},"          \u003Cimg src=\"${",[76,86628,81844],{"class":90},[76,86630,81876],{"class":126},[76,86632,86633,86636,86638,86641,86643],{"class":78,"line":35124},[76,86634,86635],{"class":126},"          \u003Cp class=\"name\">${",[76,86637,301],{"class":90},[76,86639,86640],{"class":126},"}${",[76,86642,1402],{"class":90},[76,86644,81886],{"class":126},[76,86646,86647,86650,86652],{"class":78,"line":35129},[76,86648,86649],{"class":126},"          \u003Cp class=\"spec\">${",[76,86651,7268],{"class":90},[76,86653,81886],{"class":126},[76,86655,86656,86659,86661,86663,86665,86667,86669,86671],{"class":78,"line":35135},[76,86657,86658],{"class":126},"          \u003Cp class=\"price\">${",[76,86660,81839],{"class":90},[76,86662,2819],{"class":126},[76,86664,86600],{"class":86},[76,86666,123],{"class":126},[76,86668,2345],{"class":119},[76,86670,2693],{"class":126},[76,86672,81886],{"class":126},[76,86674,86675,86678,86680],{"class":78,"line":35184},[76,86676,86677],{"class":126},"          \u003Cp class=\"count\">x${",[76,86679,86458],{"class":90},[76,86681,81886],{"class":126},[76,86683,86684,86687,86690],{"class":78,"line":35231},[76,86685,86686],{"class":126},"          \u003Cp class=\"sub-total\">${",[76,86688,86689],{"class":90},"subtotal",[76,86691,81886],{"class":126},[76,86693,86694],{"class":78,"line":35236},[76,86695,86696],{"class":126},"        \u003C\u002Fdiv> \n",[76,86698,86699],{"class":78,"line":35242},[76,86700,86701],{"class":126},"             `\n",[76,86703,86704,86707,86709,86711,86713],{"class":78,"line":35261},[76,86705,86706],{"class":90},"    }).",[76,86708,76250],{"class":86},[76,86710,123],{"class":90},[76,86712,76255],{"class":126},[76,86714,130],{"class":90},[76,86716,86717],{"class":78,"line":35267},[76,86718,86719],{"class":540},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[76,86721,86722,86724,86726,86728,86730,86733,86735,86738,86740,86742,86744,86747,86750,86752,86755,86757,86759,86761,86764,86766,86768,86770,86772],{"class":78,"line":35287},[76,86723,13275],{"class":82},[76,86725,64813],{"class":119},[76,86727,15617],{"class":82},[76,86729,82072],{"class":90},[76,86731,86732],{"class":86},"reduce",[76,86734,4472],{"class":90},[76,86736,86737],{"class":7296},"prev",[76,86739,405],{"class":90},[76,86741,81820],{"class":7296},[76,86743,15767],{"class":90},[76,86745,86746],{"class":82},"=>",[76,86748,86749],{"class":90}," prev ",[76,86751,376],{"class":82},[76,86753,86754],{"class":90}," (item.price ",[76,86756,2718],{"class":82},[76,86758,7834],{"class":119},[76,86760,1119],{"class":82},[76,86762,86763],{"class":90}," item.count) ",[76,86765,795],{"class":82},[76,86767,7834],{"class":119},[76,86769,405],{"class":90},[76,86771,1294],{"class":119},[76,86773,130],{"class":90},[76,86775,86776,86778,86780,86782,86785,86787,86789,86792,86794,86796,86798],{"class":78,"line":35293},[76,86777,54439],{"class":90},[76,86779,56430],{"class":86},[76,86781,123],{"class":90},[76,86783,86784],{"class":126},"'.amount'",[76,86786,76276],{"class":90},[76,86788,370],{"class":82},[76,86790,86791],{"class":90}," total.",[76,86793,86600],{"class":86},[76,86795,123],{"class":90},[76,86797,2345],{"class":119},[76,86799,130],{"class":90},[76,86801,86802,86804,86806],{"class":78,"line":35299},[76,86803,54449],{"class":90},[76,86805,53845],{"class":53332},[76,86807,53339],{"class":90},[76,86809,86810,86812,86814],{"class":78,"line":35309},[76,86811,53817],{"class":90},[76,86813,53832],{"class":53332},[76,86815,53339],{"class":90},[76,86817,86818],{"class":78,"line":35314},[76,86819,149],{"emptyLinePlaceholder":148},[76,86821,86822,86824,86826],{"class":78,"line":35320},[76,86823,53817],{"class":90},[76,86825,52667],{"class":53332},[76,86827,53339],{"class":90},[14,86829,86831],{"id":86830},"_411-编程思想","4.11 编程思想",[889,86833,86835],{"id":86834},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86837,86838,86841],{},[2416,86839,86840],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86843,86844],{},"调用就可以了",[19,86846,86847],{},[3583,86848],{"alt":71,"src":86849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[889,86851,86853],{"id":86852},"_4112-面向对象","4.11.2 面向对象",[19,86855,86856],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86858,86859],{},[3583,86860],{"alt":71,"src":86861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86863,86864],{},"面向对象的特性：",[3261,86866,86867,86870,86873],{},[29,86868,86869],{},"封装性",[29,86871,86872],{},"继承性",[29,86874,86875],{},"多态性",[889,86877,86879],{"id":86878},"_4113-两者比较","4.11.3 两者比较",[19,86881,86882],{},[3583,86883],{"alt":71,"src":86884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86886,86888],{"id":86887},"_412-构造函数回顾","4.12 构造函数回顾",[19,86890,86891],{},[3583,86892],{"alt":71,"src":86893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86895,86896],{},[3583,86897],{"alt":71,"src":86898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86900,86901],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86903,86904],{},[3583,86905],{"alt":71,"src":86906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86908,86910],{"id":86909},"_413-原型","4.13 原型",[889,86912,86914],{"id":86913},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86916,86917],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86919,86920],{},[3583,86921],{"alt":71,"src":86922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86924,86925],{},[3583,86926],{"alt":71,"src":86927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86929,86930],{},"原型是构造函数的属性，它也是一个对象",[19,86932,86933],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86935,86936],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[66,86938,86940],{"className":55099,"code":86939,"language":55101,"meta":71,"style":71},"\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",[73,86941,86942,86950,86955,86963,86968,86973,86978,86983,86988,86992,86996,87000,87005,87010,87014,87019,87024,87029,87034,87039,87043,87051],{"__ignoreMap":71},[76,86943,86944,86946,86948],{"class":78,"line":79},[76,86945,584],{"class":90},[76,86947,53832],{"class":53332},[76,86949,53339],{"class":90},[76,86951,86952],{"class":78,"line":94},[76,86953,86954],{"class":540},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[76,86956,86957,86959,86961],{"class":78,"line":133},[76,86958,54176],{"class":90},[76,86960,53845],{"class":53332},[76,86962,53339],{"class":90},[76,86964,86965],{"class":78,"line":145},[76,86966,86967],{"class":90},"    function Star(uname, age) {\n",[76,86969,86970],{"class":78,"line":152},[76,86971,86972],{"class":90},"      this.uname = uname,\n",[76,86974,86975],{"class":78,"line":157},[76,86976,86977],{"class":90},"        this.age = age\n",[76,86979,86980],{"class":78,"line":246},[76,86981,86982],{"class":90},"      \u002F\u002F this.sing = function () {\n",[76,86984,86985],{"class":78,"line":251},[76,86986,86987],{"class":90},"      \u002F\u002F   console.log('唱歌')\n",[76,86989,86990],{"class":78,"line":257},[76,86991,149],{"emptyLinePlaceholder":148},[76,86993,86994],{"class":78,"line":641},[76,86995,62066],{"class":90},[76,86997,86998],{"class":78,"line":646},[76,86999,4283],{"class":90},[76,87001,87002],{"class":78,"line":659},[76,87003,87004],{"class":90},"    Star.prototype.sing = function () {\n",[76,87006,87007],{"class":78,"line":1608},[76,87008,87009],{"class":90},"      console.log('唱歌')\n",[76,87011,87012],{"class":78,"line":1632},[76,87013,4283],{"class":90},[76,87015,87016],{"class":78,"line":1637},[76,87017,87018],{"class":90},"    \u002F\u002F console.dir(Star.prototype)\n",[76,87020,87021],{"class":78,"line":1642},[76,87022,87023],{"class":90},"    const pink = new Star('pink', 18)\n",[76,87025,87026],{"class":78,"line":1652},[76,87027,87028],{"class":90},"    const red = new Star('red', 20)\n",[76,87030,87031],{"class":78,"line":1660},[76,87032,87033],{"class":90},"    pink.sing()\n",[76,87035,87036],{"class":78,"line":1683},[76,87037,87038],{"class":90},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[76,87040,87041],{"class":78,"line":1698},[76,87042,149],{"emptyLinePlaceholder":148},[76,87044,87045,87047,87049],{"class":78,"line":1711},[76,87046,54449],{"class":90},[76,87048,53845],{"class":53332},[76,87050,53339],{"class":90},[76,87052,87053,87055,87057],{"class":78,"line":1717},[76,87054,53817],{"class":90},[76,87056,53832],{"class":53332},[76,87058,53339],{"class":90},[19,87060,87061],{},[3583,87062],{"alt":71,"src":87063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[66,87065,87067],{"className":55099,"code":87066,"language":55101,"meta":71,"style":71},"\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",[73,87068,87069,87077,87085,87090,87095,87100,87105,87109,87114,87119,87124,87128,87133,87137,87141,87146,87150,87158],{"__ignoreMap":71},[76,87070,87071,87073,87075],{"class":78,"line":79},[76,87072,584],{"class":90},[76,87074,53832],{"class":53332},[76,87076,53339],{"class":90},[76,87078,87079,87081,87083],{"class":78,"line":94},[76,87080,54176],{"class":90},[76,87082,53845],{"class":53332},[76,87084,53339],{"class":90},[76,87086,87087],{"class":78,"line":133},[76,87088,87089],{"class":90},"    let that\n",[76,87091,87092],{"class":78,"line":145},[76,87093,87094],{"class":90},"    function Star(uname) {\n",[76,87096,87097],{"class":78,"line":152},[76,87098,87099],{"class":90},"      this.uname = uname\n",[76,87101,87102],{"class":78,"line":157},[76,87103,87104],{"class":90},"      that = this\n",[76,87106,87107],{"class":78,"line":246},[76,87108,4283],{"class":90},[76,87110,87111],{"class":78,"line":251},[76,87112,87113],{"class":90},"    \u002F\u002F 实例对象是 ldh\n",[76,87115,87116],{"class":78,"line":257},[76,87117,87118],{"class":90},"    const ldh = new Star('刘德华')\n",[76,87120,87121],{"class":78,"line":641},[76,87122,87123],{"class":90},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[76,87125,87126],{"class":78,"line":646},[76,87127,149],{"emptyLinePlaceholder":148},[76,87129,87130],{"class":78,"line":659},[76,87131,87132],{"class":90},"    Star.sing = function () {\n",[76,87134,87135],{"class":78,"line":1608},[76,87136,87009],{"class":90},[76,87138,87139],{"class":78,"line":1632},[76,87140,4283],{"class":90},[76,87142,87143],{"class":78,"line":1637},[76,87144,87145],{"class":90},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[76,87147,87148],{"class":78,"line":1642},[76,87149,149],{"emptyLinePlaceholder":148},[76,87151,87152,87154,87156],{"class":78,"line":1652},[76,87153,54449],{"class":90},[76,87155,53845],{"class":53332},[76,87157,53339],{"class":90},[76,87159,87160,87162,87164],{"class":78,"line":1660},[76,87161,53817],{"class":90},[76,87163,53832],{"class":53332},[76,87165,53339],{"class":90},[19,87167,87168],{},"构造函数的this指向的是实例对象；",[19,87170,87171],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[889,87173,87175],{"id":87174},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87177,87178],{},[3583,87179],{"alt":71,"src":87180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[66,87182,87184],{"className":55099,"code":87183,"language":55101,"meta":71,"style":71},"\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",[73,87185,87186,87194,87202,87207,87212,87217,87222,87227,87232,87237,87242,87247,87252,87256,87261,87266,87271,87276,87280,87285,87290,87295,87300,87304,87309,87314,87319,87324,87328,87333,87337,87345],{"__ignoreMap":71},[76,87187,87188,87190,87192],{"class":78,"line":79},[76,87189,584],{"class":90},[76,87191,53832],{"class":53332},[76,87193,53339],{"class":90},[76,87195,87196,87198,87200],{"class":78,"line":94},[76,87197,54176],{"class":90},[76,87199,53845],{"class":53332},[76,87201,53339],{"class":90},[76,87203,87204],{"class":78,"line":133},[76,87205,87206],{"class":90},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[76,87208,87209],{"class":78,"line":145},[76,87210,87211],{"class":90},"    const arr = [1, 2, 3]\n",[76,87213,87214],{"class":78,"line":152},[76,87215,87216],{"class":90},"    \u002F\u002F 自己定义数组的扩展方法\n",[76,87218,87219],{"class":78,"line":157},[76,87220,87221],{"class":90},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[76,87223,87224],{"class":78,"line":246},[76,87225,87226],{"class":90},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[76,87228,87229],{"class":78,"line":251},[76,87230,87231],{"class":90},"    \u002F\u002F ①.最大值\n",[76,87233,87234],{"class":78,"line":257},[76,87235,87236],{"class":90},"    Array.prototype.max = function () {\n",[76,87238,87239],{"class":78,"line":641},[76,87240,87241],{"class":90},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[76,87243,87244],{"class":78,"line":646},[76,87245,87246],{"class":90},"      return Math.max(...this)\n",[76,87248,87249],{"class":78,"line":659},[76,87250,87251],{"class":90},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[76,87253,87254],{"class":78,"line":1608},[76,87255,4283],{"class":90},[76,87257,87258],{"class":78,"line":1632},[76,87259,87260],{"class":90},"    console.log(arr.max())\n",[76,87262,87263],{"class":78,"line":1637},[76,87264,87265],{"class":90},"    \u002F\u002F ②最小值\n",[76,87267,87268],{"class":78,"line":1642},[76,87269,87270],{"class":90},"    Array.prototype.min = function () {\n",[76,87272,87273],{"class":78,"line":1652},[76,87274,87275],{"class":90},"      return Math.min(...this)\n",[76,87277,87278],{"class":78,"line":1660},[76,87279,4283],{"class":90},[76,87281,87282],{"class":78,"line":1683},[76,87283,87284],{"class":90},"    console.log(arr.min())\n",[76,87286,87287],{"class":78,"line":1698},[76,87288,87289],{"class":90},"    \u002F\u002F③求和\n",[76,87291,87292],{"class":78,"line":1711},[76,87293,87294],{"class":90},"    Array.prototype.sum = function () {\n",[76,87296,87297],{"class":78,"line":1717},[76,87298,87299],{"class":90},"      return this.reduce((prev, current) => prev + current, 0)\n",[76,87301,87302],{"class":78,"line":1728},[76,87303,4283],{"class":90},[76,87305,87306],{"class":78,"line":1740},[76,87307,87308],{"class":90},"    console.log(arr.sum())\n",[76,87310,87311],{"class":78,"line":1746},[76,87312,87313],{"class":90},"    \u002F\u002F ③排序\n",[76,87315,87316],{"class":78,"line":1751},[76,87317,87318],{"class":90},"    Array.prototype.rever = function () {\n",[76,87320,87321],{"class":78,"line":1756},[76,87322,87323],{"class":90},"      return this.reverse()\n",[76,87325,87326],{"class":78,"line":1766},[76,87327,4283],{"class":90},[76,87329,87330],{"class":78,"line":1773},[76,87331,87332],{"class":90},"    console.log(arr.rever())\n",[76,87334,87335],{"class":78,"line":1793},[76,87336,149],{"emptyLinePlaceholder":148},[76,87338,87339,87341,87343],{"class":78,"line":1806},[76,87340,54449],{"class":90},[76,87342,53845],{"class":53332},[76,87344,53339],{"class":90},[76,87346,87347,87349,87351],{"class":78,"line":1817},[76,87348,53817],{"class":90},[76,87350,53832],{"class":53332},[76,87352,53339],{"class":90},[19,87354,87355],{},[3583,87356],{"alt":71,"src":87357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[889,87359,87361],{"id":87360},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87363,87364],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87366,87367],{},[3583,87368],{"alt":71,"src":87369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[66,87371,87373],{"className":55099,"code":87372,"language":55101,"meta":71,"style":71},"\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",[73,87374,87375,87383,87391,87396,87401,87405,87410,87415,87420,87428],{"__ignoreMap":71},[76,87376,87377,87379,87381],{"class":78,"line":79},[76,87378,584],{"class":90},[76,87380,53832],{"class":53332},[76,87382,53339],{"class":90},[76,87384,87385,87387,87389],{"class":78,"line":94},[76,87386,54176],{"class":90},[76,87388,53845],{"class":53332},[76,87390,53339],{"class":90},[76,87392,87393],{"class":78,"line":133},[76,87394,87395],{"class":90},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[76,87397,87398],{"class":78,"line":145},[76,87399,87400],{"class":90},"    function Star() {\n",[76,87402,87403],{"class":78,"line":152},[76,87404,4283],{"class":90},[76,87406,87407],{"class":78,"line":157},[76,87408,87409],{"class":90},"    const ldh = new Star()\n",[76,87411,87412],{"class":78,"line":246},[76,87413,87414],{"class":90},"    console.log(Star.prototype)\n",[76,87416,87417],{"class":78,"line":251},[76,87418,87419],{"class":90},"    console.log(Star.prototype.constructor === Star)\n",[76,87421,87422,87424,87426],{"class":78,"line":257},[76,87423,54449],{"class":90},[76,87425,53845],{"class":53332},[76,87427,53339],{"class":90},[76,87429,87430,87432,87434],{"class":78,"line":641},[76,87431,53817],{"class":90},[76,87433,53832],{"class":53332},[76,87435,53339],{"class":90},[19,87437,87438],{},[3583,87439],{"alt":71,"src":87440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87442,87443],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[66,87445,87447],{"className":55099,"code":87446,"language":55101,"meta":71,"style":71},"  \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",[73,87448,87449,87457,87461,87465,87469,87474,87479,87484,87488,87493,87498,87503,87508,87513,87518,87522,87526,87531,87536,87541,87545,87550,87555,87559,87563,87567],{"__ignoreMap":71},[76,87450,87451,87453,87455],{"class":78,"line":79},[76,87452,54176],{"class":90},[76,87454,53845],{"class":53332},[76,87456,53339],{"class":90},[76,87458,87459],{"class":78,"line":94},[76,87460,87395],{"class":90},[76,87462,87463],{"class":78,"line":133},[76,87464,87400],{"class":90},[76,87466,87467],{"class":78,"line":145},[76,87468,4283],{"class":90},[76,87470,87471],{"class":78,"line":152},[76,87472,87473],{"class":90},"    \u002F\u002F const ldh = new Star()\n",[76,87475,87476],{"class":78,"line":157},[76,87477,87478],{"class":90},"    \u002F\u002F console.log(Star.prototype)\n",[76,87480,87481],{"class":78,"line":246},[76,87482,87483],{"class":90},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[76,87485,87486],{"class":78,"line":251},[76,87487,149],{"emptyLinePlaceholder":148},[76,87489,87490],{"class":78,"line":257},[76,87491,87492],{"class":90},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[76,87494,87495],{"class":78,"line":641},[76,87496,87497],{"class":90},"    \u002F\u002F Star.prototype.sing = function () {\n",[76,87499,87500],{"class":78,"line":646},[76,87501,87502],{"class":90},"    \u002F\u002F   console.log('唱歌')\n",[76,87504,87505],{"class":78,"line":659},[76,87506,87507],{"class":90},"    \u002F\u002F }\n",[76,87509,87510],{"class":78,"line":1608},[76,87511,87512],{"class":90},"    \u002F\u002F Star.prototype.dance = function () {\n",[76,87514,87515],{"class":78,"line":1632},[76,87516,87517],{"class":90},"    \u002F\u002F   console.log('跳舞')\n",[76,87519,87520],{"class":78,"line":1637},[76,87521,87507],{"class":90},[76,87523,87524],{"class":78,"line":1642},[76,87525,87414],{"class":90},[76,87527,87528],{"class":78,"line":1652},[76,87529,87530],{"class":90},"    Star.prototype = {\n",[76,87532,87533],{"class":78,"line":1660},[76,87534,87535],{"class":90},"      sing: function () {\n",[76,87537,87538],{"class":78,"line":1683},[76,87539,87540],{"class":90},"        console.log('唱歌')\n",[76,87542,87543],{"class":78,"line":1698},[76,87544,79918],{"class":90},[76,87546,87547],{"class":78,"line":1711},[76,87548,87549],{"class":90},"      dance: function () {\n",[76,87551,87552],{"class":78,"line":1717},[76,87553,87554],{"class":90},"        console.log('跳舞')\n",[76,87556,87557],{"class":78,"line":1728},[76,87558,54430],{"class":90},[76,87560,87561],{"class":78,"line":1740},[76,87562,4283],{"class":90},[76,87564,87565],{"class":78,"line":1746},[76,87566,87414],{"class":90},[76,87568,87569,87571,87573],{"class":78,"line":1751},[76,87570,54449],{"class":90},[76,87572,53845],{"class":53332},[76,87574,53339],{"class":90},[19,87576,87577],{},"进行输出结果后会发现：",[19,87579,87580],{},[3583,87581],{"alt":71,"src":87582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87584,87585],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87587,87588],{},"所以，要重新指回创造这个原型对象的构造函数",[66,87590,87592],{"className":73240,"code":87591,"language":73242,"meta":71,"style":71},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[73,87593,87594,87608,87613,87618,87629,87642,87647,87658,87672,87676],{"__ignoreMap":71},[76,87595,87596,87599,87601,87604,87606],{"class":78,"line":79},[76,87597,87598],{"class":119},"Star",[76,87600,2819],{"class":90},[76,87602,87603],{"class":119},"prototype",[76,87605,15617],{"class":82},[76,87607,17623],{"class":90},[76,87609,87610],{"class":78,"line":94},[76,87611,87612],{"class":540},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[76,87614,87615],{"class":78,"line":133},[76,87616,87617],{"class":90},"  constructor: Star,\n",[76,87619,87620,87623,87625,87627],{"class":78,"line":145},[76,87621,87622],{"class":86},"  sing",[76,87624,53469],{"class":90},[76,87626,56480],{"class":82},[76,87628,56483],{"class":90},[76,87630,87631,87633,87635,87637,87640],{"class":78,"line":152},[76,87632,75780],{"class":90},[76,87634,60277],{"class":86},[76,87636,123],{"class":90},[76,87638,87639],{"class":126},"'唱歌'",[76,87641,130],{"class":90},[76,87643,87644],{"class":78,"line":157},[76,87645,87646],{"class":90},"   },\n",[76,87648,87649,87652,87654,87656],{"class":78,"line":246},[76,87650,87651],{"class":86},"   dance",[76,87653,53469],{"class":90},[76,87655,56480],{"class":82},[76,87657,56483],{"class":90},[76,87659,87660,87663,87665,87667,87670],{"class":78,"line":251},[76,87661,87662],{"class":90},"     console.",[76,87664,60277],{"class":86},[76,87666,123],{"class":90},[76,87668,87669],{"class":126},"'跳舞'",[76,87671,130],{"class":90},[76,87673,87674],{"class":78,"line":257},[76,87675,6391],{"class":90},[76,87677,87678],{"class":78,"line":641},[76,87679,3685],{"class":90},[19,87681,87682],{},[3583,87683],{"alt":71,"src":87684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87686,87687],{},"总结1：",[19,87689,87690],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87692,87693],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87695,87696],{},"constructor指的是他的来源",[19,87698,87699],{},[3583,87700],{"alt":71,"src":87701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87703,87704],{},[3583,87705],{"alt":71,"src":87706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87708,87709],{},"总结2：",[19,87711,87712],{},[3583,87713],{"alt":71,"src":87714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87716,87717],{},[3583,87718],{"alt":71,"src":87719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87721,87722],{},[3583,87723],{"alt":71,"src":87724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[889,87726,87728],{"id":87727},"_4134-对象原型","4.13.4 对象原型",[19,87730,87731],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87733,87734],{},"对象原型就是__proto__这个属性",[19,87736,87737],{},[3583,87738],{"alt":71,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87741,87742],{},[3583,87743],{"alt":71,"src":87744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87746,87747],{},[3583,87748],{"alt":71,"src":87749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87751,87752],{},[3583,87753],{"alt":71,"src":87754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[66,87756,87758],{"className":55099,"code":87757,"language":55101,"meta":71,"style":71},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,87759,87760,87768,87776,87780,87784,87788,87793,87801],{"__ignoreMap":71},[76,87761,87762,87764,87766],{"class":78,"line":79},[76,87763,584],{"class":90},[76,87765,53832],{"class":53332},[76,87767,53339],{"class":90},[76,87769,87770,87772,87774],{"class":78,"line":94},[76,87771,54176],{"class":90},[76,87773,53845],{"class":53332},[76,87775,53339],{"class":90},[76,87777,87778],{"class":78,"line":133},[76,87779,87400],{"class":90},[76,87781,87782],{"class":78,"line":145},[76,87783,4283],{"class":90},[76,87785,87786],{"class":78,"line":152},[76,87787,87409],{"class":90},[76,87789,87790],{"class":78,"line":157},[76,87791,87792],{"class":90},"    console.log(ldh)\n",[76,87794,87795,87797,87799],{"class":78,"line":246},[76,87796,54449],{"class":90},[76,87798,53845],{"class":53332},[76,87800,53339],{"class":90},[76,87802,87803,87805,87807],{"class":78,"line":251},[76,87804,53817],{"class":90},[76,87806,53832],{"class":53332},[76,87808,53339],{"class":90},[19,87810,87811],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87813,87814],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87816,87817],{},[3583,87818],{"alt":71,"src":87819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87821,87822],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87824,87825],{},"对象原型指向原型对象",[19,87827,87828],{},[3583,87829],{"alt":71,"src":87830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87832,87833],{},[3583,87834],{"alt":71,"src":87835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87837,87838],{},[3583,87839],{"alt":71,"src":87840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[889,87842,87844],{"id":87843},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87846,87847],{},[3583,87848],{"alt":71,"src":87849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87851,87852,87855,87858,87861],{},[29,87853,87854],{},"构造函数通过new的形式实例化得到实例对象",[29,87856,87857],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87859,87860],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87862,87863],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87865,87866],{},[3583,87867],{"alt":71,"src":87868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87870,87871],{},"题目梳理：",[19,87873,87874],{},[3583,87875],{"alt":71,"src":87876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[889,87878,87880],{"id":87879},"_4136-原型继承","4.13.6 原型继承",[19,87882,87883],{},[3583,87884],{"alt":71,"src":87885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87887,87888],{},[3583,87889],{"alt":71,"src":87890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87892,87893],{},[3583,87894],{"alt":71,"src":87895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87897,87898],{},[3583,87899],{"alt":71,"src":87900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87902,87903],{},[3583,87904],{"alt":71,"src":87905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87907,87908],{},[3583,87909],{"alt":71,"src":87910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87912,87913],{},[3583,87914],{"alt":71,"src":87915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87917,87918],{},[3583,87919],{"alt":71,"src":87920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87922,87923],{},"回顾：构造函数每次new得到对象都是不同的",[889,87925,87927],{"id":87926},"_4137-原型链","4.13.7 原型链",[19,87929,87930],{},[3583,87931],{"alt":71,"src":87932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87934,87935],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87937,87938],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87940,87941],{},"大哥是Object",[19,87943,87944],{},[3583,87945],{"alt":71,"src":87946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87948,87949],{},[3583,87950],{"alt":71,"src":87951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87953,87954],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87956,87957],{},"万物皆对象",[889,87959,87961],{"id":87960},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87963,87964],{},"模态框",[19,87966,87967],{},"以后遇见这个效果直接使用这个就行",[19,87969,87970],{},[3583,87971],{"alt":71,"src":87972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87974,87975],{},[3583,87976],{"alt":71,"src":87977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87979,87980],{},[3583,87981],{"alt":71,"src":87982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87984,87985],{},[3583,87986],{"alt":71,"src":87987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87989,87990],{},"补充知识点：",[26,87992,87993],{},[29,87994,87995],{},"append()",[19,87997,87998],{},[3583,87999],{"alt":71,"src":88000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[66,88002,88004],{"className":52665,"code":88003,"language":52667,"meta":71,"style":71},"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",[73,88005,88006,88011,88016,88021,88025,88029,88033,88038,88043,88048,88052],{"__ignoreMap":71},[76,88007,88008],{"class":78,"line":79},[76,88009,88010],{"class":90},"append(param1)\n",[76,88012,88013],{"class":78,"line":94},[76,88014,88015],{"class":90},"append(param1, param2)\n",[76,88017,88018],{"class":78,"line":133},[76,88019,88020],{"class":90},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[76,88022,88023],{"class":78,"line":145},[76,88024,149],{"emptyLinePlaceholder":148},[76,88026,88027],{"class":78,"line":152},[76,88028,149],{"emptyLinePlaceholder":148},[76,88030,88031],{"class":78,"line":157},[76,88032,149],{"emptyLinePlaceholder":148},[76,88034,88035],{"class":78,"line":246},[76,88036,88037],{"class":90},"let div = document.createElement(\"div\");\n",[76,88039,88040],{"class":78,"line":251},[76,88041,88042],{"class":90},"let p = document.createElement(\"p\");\n",[76,88044,88045],{"class":78,"line":257},[76,88046,88047],{"class":90},"div.append(p);\n",[76,88049,88050],{"class":78,"line":641},[76,88051,149],{"emptyLinePlaceholder":148},[76,88053,88054,88057,88059],{"class":78,"line":646},[76,88055,88056],{"class":90},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[76,88058,19],{"class":53332},[76,88060,88061],{"class":90},"> ]\n",[26,88063,88064],{"start":94},[29,88065,88066],{},"remove()",[19,88068,88069],{},"自己删自己",[19,88071,88072],{},[3583,88073],{"alt":71,"src":88074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[66,88076,88078],{"className":52665,"code":88077,"language":52667,"meta":71,"style":71},"\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",[73,88079,88080,88090,88104,88108,88116,88130,88150,88162,88170,88177,88189,88202,88237,88249,88260,88272,88284,88296,88323,88333,88337,88341,88350,88362,88376,88386,88398,88402,88406,88416,88427,88437,88447,88460,88473,88483,88487,88491,88500,88510,88522,88526,88530,88539,88549,88559,88571,88575,88579,88589,88605,88616,88626,88636,88648,88660,88672,88676,88680,88693,88704,88708,88716,88724,88728,88736,88756,88776,88784,88789,88815,88820,88825,88844,88849,88861,88866,88877,88887,88897,88902,88907,88911,88916,88921,88926,88946,88951,88971,88976,88990,88995,89000,89005,89021,89025,89030,89059,89064,89069,89074,89085,89089,89093,89097,89102,89127,89132,89157,89162,89171,89175,89180,89205,89209,89234,89238,89247,89251,89256,89274,89284,89288,89296,89304,89308],{"__ignoreMap":71},[76,88081,88082,88084,88086,88088],{"class":78,"line":79},[76,88083,53329],{"class":90},[76,88085,53333],{"class":53332},[76,88087,53336],{"class":86},[76,88089,53339],{"class":90},[76,88091,88092,88094,88096,88098,88100,88102],{"class":78,"line":94},[76,88093,584],{"class":90},[76,88095,52667],{"class":53332},[76,88097,53348],{"class":86},[76,88099,370],{"class":90},[76,88101,53353],{"class":126},[76,88103,53339],{"class":90},[76,88105,88106],{"class":78,"line":133},[76,88107,149],{"emptyLinePlaceholder":148},[76,88109,88110,88112,88114],{"class":78,"line":145},[76,88111,584],{"class":90},[76,88113,53366],{"class":53332},[76,88115,53339],{"class":90},[76,88117,88118,88120,88122,88124,88126,88128],{"class":78,"line":152},[76,88119,54176],{"class":90},[76,88121,53376],{"class":53332},[76,88123,53379],{"class":86},[76,88125,370],{"class":90},[76,88127,53384],{"class":126},[76,88129,53339],{"class":90},[76,88131,88132,88134,88136,88138,88140,88142,88144,88146,88148],{"class":78,"line":157},[76,88133,54176],{"class":90},[76,88135,53376],{"class":53332},[76,88137,16972],{"class":86},[76,88139,370],{"class":90},[76,88141,53423],{"class":126},[76,88143,53403],{"class":86},[76,88145,370],{"class":90},[76,88147,53430],{"class":126},[76,88149,53339],{"class":90},[76,88151,88152,88154,88156,88158,88160],{"class":78,"line":246},[76,88153,54176],{"class":90},[76,88155,53439],{"class":53332},[76,88157,53442],{"class":90},[76,88159,53439],{"class":53332},[76,88161,53339],{"class":90},[76,88163,88164,88166,88168],{"class":78,"line":251},[76,88165,54176],{"class":90},[76,88167,2178],{"class":53332},[76,88169,53339],{"class":90},[76,88171,88172,88175],{"class":78,"line":257},[76,88173,88174],{"class":86},"    .modal",[76,88176,17623],{"class":90},[76,88178,88179,88181,88183,88185,88187],{"class":78,"line":641},[76,88180,56802],{"class":119},[76,88182,53469],{"class":90},[76,88184,6057],{"class":119},[76,88186,53524],{"class":82},[76,88188,3415],{"class":90},[76,88190,88191,88194,88196,88198,88200],{"class":78,"line":646},[76,88192,88193],{"class":119},"      min-height",[76,88195,53469],{"class":90},[76,88197,2575],{"class":119},[76,88199,53524],{"class":82},[76,88201,3415],{"class":90},[76,88203,88204,88206,88208,88210,88212,88214,88216,88218,88220,88222,88224,88226,88228,88230,88232,88235],{"class":78,"line":659},[76,88205,80775],{"class":119},[76,88207,53469],{"class":90},[76,88209,1294],{"class":119},[76,88211,587],{"class":119},[76,88213,4134],{"class":119},[76,88215,53524],{"class":82},[76,88217,80792],{"class":119},[76,88219,123],{"class":90},[76,88221,1294],{"class":119},[76,88223,405],{"class":90},[76,88225,1294],{"class":119},[76,88227,405],{"class":90},[76,88229,1294],{"class":119},[76,88231,405],{"class":90},[76,88233,88234],{"class":119},"0.1",[76,88236,4807],{"class":90},[76,88238,88239,88241,88243,88245,88247],{"class":78,"line":1608},[76,88240,57165],{"class":119},[76,88242,53469],{"class":90},[76,88244,2557],{"class":119},[76,88246,53524],{"class":82},[76,88248,3415],{"class":90},[76,88250,88251,88253,88255,88258],{"class":78,"line":1632},[76,88252,56790],{"class":119},[76,88254,53469],{"class":90},[76,88256,88257],{"class":119},"fixed",[76,88259,3415],{"class":90},[76,88261,88262,88265,88267,88270],{"class":78,"line":1637},[76,88263,88264],{"class":119},"      z-index",[76,88266,53469],{"class":90},[76,88268,88269],{"class":119},"999",[76,88271,3415],{"class":90},[76,88273,88274,88276,88278,88280,88282],{"class":78,"line":1642},[76,88275,56869],{"class":119},[76,88277,53469],{"class":90},[76,88279,2915],{"class":119},[76,88281,2592],{"class":82},[76,88283,3415],{"class":90},[76,88285,88286,88288,88290,88292,88294],{"class":78,"line":1652},[76,88287,56978],{"class":119},[76,88289,53469],{"class":90},[76,88291,2915],{"class":119},[76,88293,2592],{"class":82},[76,88295,3415],{"class":90},[76,88297,88298,88300,88302,88304,88306,88309,88311,88313,88315,88317,88319,88321],{"class":78,"line":1660},[76,88299,80816],{"class":119},[76,88301,53469],{"class":90},[76,88303,80821],{"class":119},[76,88305,123],{"class":90},[76,88307,88308],{"class":119},"-50",[76,88310,2592],{"class":82},[76,88312,405],{"class":90},[76,88314,88308],{"class":119},[76,88316,2592],{"class":82},[76,88318,405],{"class":90},[76,88320,1294],{"class":119},[76,88322,4807],{"class":90},[76,88324,88325,88327,88329,88331],{"class":78,"line":1683},[76,88326,56915],{"class":119},[76,88328,53469],{"class":90},[76,88330,62870],{"class":119},[76,88332,3415],{"class":90},[76,88334,88335],{"class":78,"line":1698},[76,88336,4283],{"class":90},[76,88338,88339],{"class":78,"line":1711},[76,88340,149],{"emptyLinePlaceholder":148},[76,88342,88343,88345,88348],{"class":78,"line":1717},[76,88344,88174],{"class":86},[76,88346,88347],{"class":86}," .header",[76,88349,17623],{"class":90},[76,88351,88352,88354,88356,88358,88360],{"class":78,"line":1728},[76,88353,59389],{"class":119},[76,88355,53469],{"class":90},[76,88357,2665],{"class":119},[76,88359,53524],{"class":82},[76,88361,3415],{"class":90},[76,88363,88364,88366,88368,88370,88372,88374],{"class":78,"line":1740},[76,88365,56726],{"class":119},[76,88367,53469],{"class":90},[76,88369,1294],{"class":119},[76,88371,4134],{"class":119},[76,88373,53524],{"class":82},[76,88375,3415],{"class":90},[76,88377,88378,88380,88382,88384],{"class":78,"line":1746},[76,88379,56790],{"class":119},[76,88381,53469],{"class":90},[76,88383,56795],{"class":119},[76,88385,3415],{"class":90},[76,88387,88388,88390,88392,88394,88396],{"class":78,"line":1751},[76,88389,56953],{"class":119},[76,88391,53469],{"class":90},[76,88393,408],{"class":119},[76,88395,53524],{"class":82},[76,88397,3415],{"class":90},[76,88399,88400],{"class":78,"line":1756},[76,88401,4283],{"class":90},[76,88403,88404],{"class":78,"line":1766},[76,88405,149],{"emptyLinePlaceholder":148},[76,88407,88408,88410,88412,88414],{"class":78,"line":1773},[76,88409,88174],{"class":86},[76,88411,88347],{"class":86},[76,88413,5119],{"class":53332},[76,88415,17623],{"class":90},[76,88417,88418,88421,88423,88425],{"class":78,"line":1793},[76,88419,88420],{"class":119},"      font-style",[76,88422,53469],{"class":90},[76,88424,65869],{"class":119},[76,88426,3415],{"class":90},[76,88428,88429,88431,88433,88435],{"class":78,"line":1806},[76,88430,59446],{"class":119},[76,88432,53469],{"class":90},[76,88434,64098],{"class":119},[76,88436,3415],{"class":90},[76,88438,88439,88441,88443,88445],{"class":78,"line":1817},[76,88440,56790],{"class":119},[76,88442,53469],{"class":90},[76,88444,56862],{"class":119},[76,88446,3415],{"class":90},[76,88448,88449,88452,88454,88456,88458],{"class":78,"line":1822},[76,88450,88451],{"class":119},"      right",[76,88453,53469],{"class":90},[76,88455,2836],{"class":119},[76,88457,53524],{"class":82},[76,88459,3415],{"class":90},[76,88461,88462,88464,88466,88469,88471],{"class":78,"line":1835},[76,88463,56978],{"class":119},[76,88465,53469],{"class":90},[76,88467,88468],{"class":119},"-2",[76,88470,53524],{"class":82},[76,88472,3415],{"class":90},[76,88474,88475,88477,88479,88481],{"class":78,"line":1847},[76,88476,64053],{"class":119},[76,88478,53469],{"class":90},[76,88480,64058],{"class":119},[76,88482,3415],{"class":90},[76,88484,88485],{"class":78,"line":1852},[76,88486,4283],{"class":90},[76,88488,88489],{"class":78,"line":1862},[76,88490,149],{"emptyLinePlaceholder":148},[76,88492,88493,88495,88498],{"class":78,"line":1874},[76,88494,88174],{"class":86},[76,88496,88497],{"class":86}," .body",[76,88499,17623],{"class":90},[76,88501,88502,88504,88506,88508],{"class":78,"line":1879},[76,88503,59316],{"class":119},[76,88505,53469],{"class":90},[76,88507,53624],{"class":119},[76,88509,3415],{"class":90},[76,88511,88512,88514,88516,88518,88520],{"class":78,"line":1884},[76,88513,56726],{"class":119},[76,88515,53469],{"class":90},[76,88517,402],{"class":119},[76,88519,53524],{"class":82},[76,88521,3415],{"class":90},[76,88523,88524],{"class":78,"line":1889},[76,88525,4283],{"class":90},[76,88527,88528],{"class":78,"line":1900},[76,88529,149],{"emptyLinePlaceholder":148},[76,88531,88532,88534,88537],{"class":78,"line":1906},[76,88533,88174],{"class":86},[76,88535,88536],{"class":86}," .footer",[76,88538,17623],{"class":90},[76,88540,88541,88543,88545,88547],{"class":78,"line":1924},[76,88542,57040],{"class":119},[76,88544,53469],{"class":90},[76,88546,53509],{"class":119},[76,88548,3415],{"class":90},[76,88550,88551,88553,88555,88557],{"class":78,"line":1929},[76,88552,57051],{"class":119},[76,88554,53469],{"class":90},[76,88556,53612],{"class":119},[76,88558,3415],{"class":90},[76,88560,88561,88563,88565,88567,88569],{"class":78,"line":1944},[76,88562,56726],{"class":119},[76,88564,53469],{"class":90},[76,88566,402],{"class":119},[76,88568,53524],{"class":82},[76,88570,3415],{"class":90},[76,88572,88573],{"class":78,"line":1950},[76,88574,4283],{"class":90},[76,88576,88577],{"class":78,"line":1965},[76,88578,149],{"emptyLinePlaceholder":148},[76,88580,88581,88583,88585,88587],{"class":78,"line":1971},[76,88582,88174],{"class":86},[76,88584,88536],{"class":86},[76,88586,3519],{"class":53332},[76,88588,17623],{"class":90},[76,88590,88591,88593,88595,88597,88599,88601,88603],{"class":78,"line":1985},[76,88592,56726],{"class":119},[76,88594,53469],{"class":90},[76,88596,2339],{"class":119},[76,88598,53524],{"class":82},[76,88600,4179],{"class":119},[76,88602,53524],{"class":82},[76,88604,3415],{"class":90},[76,88606,88607,88609,88611,88614],{"class":78,"line":1991},[76,88608,63749],{"class":119},[76,88610,53469],{"class":90},[76,88612,88613],{"class":119},"#ccc",[76,88615,3415],{"class":90},[76,88617,88618,88620,88622,88624],{"class":78,"line":2005},[76,88619,65998],{"class":119},[76,88621,53469],{"class":90},[76,88623,56768],{"class":119},[76,88625,3415],{"class":90},[76,88627,88628,88630,88632,88634],{"class":78,"line":2017},[76,88629,59446],{"class":119},[76,88631,53469],{"class":90},[76,88633,62870],{"class":119},[76,88635,3415],{"class":90},[76,88637,88638,88640,88642,88644,88646],{"class":78,"line":2023},[76,88639,57165],{"class":119},[76,88641,53469],{"class":90},[76,88643,2345],{"class":119},[76,88645,53524],{"class":82},[76,88647,3415],{"class":90},[76,88649,88650,88652,88654,88656,88658],{"class":78,"line":2031},[76,88651,63778],{"class":119},[76,88653,53469],{"class":90},[76,88655,402],{"class":119},[76,88657,53524],{"class":82},[76,88659,3415],{"class":90},[76,88661,88662,88664,88666,88668,88670],{"class":78,"line":11880},[76,88663,56953],{"class":119},[76,88665,53469],{"class":90},[76,88667,2810],{"class":119},[76,88669,53524],{"class":82},[76,88671,3415],{"class":90},[76,88673,88674],{"class":78,"line":11901},[76,88675,4283],{"class":90},[76,88677,88678],{"class":78,"line":11907},[76,88679,149],{"emptyLinePlaceholder":148},[76,88681,88682,88684,88686,88688,88691],{"class":78,"line":11921},[76,88683,88174],{"class":86},[76,88685,88536],{"class":86},[76,88687,3519],{"class":53332},[76,88689,88690],{"class":86},".submit",[76,88692,17623],{"class":90},[76,88694,88695,88697,88699,88702],{"class":78,"line":11927},[76,88696,56915],{"class":119},[76,88698,53469],{"class":90},[76,88700,88701],{"class":119},"#369",[76,88703,3415],{"class":90},[76,88705,88706],{"class":78,"line":11954},[76,88707,4283],{"class":90},[76,88709,88710,88712,88714],{"class":78,"line":11963},[76,88711,54449],{"class":90},[76,88713,2178],{"class":53332},[76,88715,53339],{"class":90},[76,88717,88718,88720,88722],{"class":78,"line":11969},[76,88719,53817],{"class":90},[76,88721,53366],{"class":53332},[76,88723,53339],{"class":90},[76,88725,88726],{"class":78,"line":11977},[76,88727,149],{"emptyLinePlaceholder":148},[76,88729,88730,88732,88734],{"class":78,"line":11982},[76,88731,584],{"class":90},[76,88733,53832],{"class":53332},[76,88735,53339],{"class":90},[76,88737,88738,88740,88742,88744,88746,88749,88752,88754],{"class":78,"line":18654},[76,88739,54176],{"class":90},[76,88741,55918],{"class":53332},[76,88743,17011],{"class":86},[76,88745,370],{"class":90},[76,88747,88748],{"class":126},"\"delete\"",[76,88750,88751],{"class":90},">删除\u003C\u002F",[76,88753,55918],{"class":53332},[76,88755,53339],{"class":90},[76,88757,88758,88760,88762,88764,88766,88769,88772,88774],{"class":78,"line":18660},[76,88759,54176],{"class":90},[76,88761,55918],{"class":53332},[76,88763,17011],{"class":86},[76,88765,370],{"class":90},[76,88767,88768],{"class":126},"\"login\"",[76,88770,88771],{"class":90},">登录\u003C\u002F",[76,88773,55918],{"class":53332},[76,88775,53339],{"class":90},[76,88777,88778,88780,88782],{"class":78,"line":18683},[76,88779,54176],{"class":90},[76,88781,53845],{"class":53332},[76,88783,53339],{"class":90},[76,88785,88786],{"class":78,"line":18689},[76,88787,88788],{"class":540},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[76,88790,88791,88793,88796,88798,88800,88802,88804,88806,88809,88811,88813],{"class":78,"line":18712},[76,88792,72112],{"class":82},[76,88794,88795],{"class":86}," Modal",[76,88797,123],{"class":90},[76,88799,53439],{"class":7296},[76,88801,15617],{"class":82},[76,88803,71958],{"class":126},[76,88805,405],{"class":90},[76,88807,88808],{"class":7296},"message",[76,88810,15617],{"class":82},[76,88812,71958],{"class":126},[76,88814,14495],{"class":90},[76,88816,88817],{"class":78,"line":18726},[76,88818,88819],{"class":540},"      \u002F\u002F 创建Model 模态框盒子\n",[76,88821,88822],{"class":78,"line":18746},[76,88823,88824],{"class":540},"      \u002F\u002F 1.1 创建div标签\n",[76,88826,88827,88829,88832,88834,88836,88838,88840,88842],{"class":78,"line":18752},[76,88828,72079],{"class":119},[76,88830,88831],{"class":90},".modalBox ",[76,88833,370],{"class":82},[76,88835,56427],{"class":90},[76,88837,72179],{"class":86},[76,88839,123],{"class":90},[76,88841,83955],{"class":126},[76,88843,130],{"class":90},[76,88845,88846],{"class":78,"line":18763},[76,88847,88848],{"class":540},"      \u002F\u002F 1.2 给div 添加类名为model\n",[76,88850,88851,88853,88856,88858],{"class":78,"line":18786},[76,88852,72079],{"class":119},[76,88854,88855],{"class":90},".modalBox.className ",[76,88857,370],{"class":82},[76,88859,88860],{"class":126}," 'modal'\n",[76,88862,88863],{"class":78,"line":18808},[76,88864,88865],{"class":540},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[76,88867,88868,88870,88873,88875],{"class":78,"line":18813},[76,88869,72079],{"class":119},[76,88871,88872],{"class":90},".modalBox.innerHTML ",[76,88874,370],{"class":82},[76,88876,72196],{"class":126},[76,88878,88879,88882,88884],{"class":78,"line":18819},[76,88880,88881],{"class":126},"        \u003Cdiv class=\"header\">${",[76,88883,53439],{"class":90},[76,88885,88886],{"class":126},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[76,88888,88889,88892,88894],{"class":78,"line":18833},[76,88890,88891],{"class":126},"        \u003Cdiv class=\"body\">${",[76,88893,88808],{"class":90},[76,88895,88896],{"class":126},"}\u003C\u002Fdiv>\n",[76,88898,88899],{"class":78,"line":18846},[76,88900,88901],{"class":126},"      `\n",[76,88903,88904],{"class":78,"line":18851},[76,88905,88906],{"class":540},"      \u002F\u002F console.log(this.modalBox)\n",[76,88908,88909],{"class":78,"line":18865},[76,88910,4283],{"class":90},[76,88912,88913],{"class":78,"line":18870},[76,88914,88915],{"class":540},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[76,88917,88918],{"class":78,"line":18876},[76,88919,88920],{"class":540},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[76,88922,88923],{"class":78,"line":18881},[76,88924,88925],{"class":540},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[76,88927,88928,88931,88933,88935,88937,88940,88942,88944],{"class":78,"line":18895},[76,88929,88930],{"class":119},"    Modal",[76,88932,2819],{"class":90},[76,88934,87603],{"class":119},[76,88936,2819],{"class":90},[76,88938,88939],{"class":86},"open",[76,88941,15617],{"class":82},[76,88943,60947],{"class":82},[76,88945,56483],{"class":90},[76,88947,88948],{"class":78,"line":18900},[76,88949,88950],{"class":540},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[76,88952,88953,88955,88958,88960,88962,88964,88966,88969],{"class":78,"line":18905},[76,88954,60258],{"class":82},[76,88956,88957],{"class":119}," box",[76,88959,15617],{"class":82},[76,88961,56427],{"class":90},[76,88963,56430],{"class":86},[76,88965,123],{"class":90},[76,88967,88968],{"class":126},"'.modal'",[76,88970,130],{"class":90},[76,88972,88973],{"class":78,"line":18919},[76,88974,88975],{"class":540},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[76,88977,88978,88981,88983,88986,88988],{"class":78,"line":18931},[76,88979,88980],{"class":90},"      box ",[76,88982,3821],{"class":82},[76,88984,88985],{"class":90}," box.",[76,88987,59036],{"class":86},[76,88989,4072],{"class":90},[76,88991,88992],{"class":78,"line":18936},[76,88993,88994],{"class":540},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[76,88996,88997],{"class":78,"line":18949},[76,88998,88999],{"class":540},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[76,89001,89002],{"class":78,"line":18954},[76,89003,89004],{"class":540},"      \u002F\u002F append可以增加对象\n",[76,89006,89007,89010,89013,89015,89018],{"class":78,"line":18959},[76,89008,89009],{"class":90},"      document.body.",[76,89011,89012],{"class":86},"append",[76,89014,123],{"class":90},[76,89016,89017],{"class":119},"this",[76,89019,89020],{"class":90},".modalBox)\n",[76,89022,89023],{"class":78,"line":18964},[76,89024,149],{"emptyLinePlaceholder":148},[76,89026,89027],{"class":78,"line":18977},[76,89028,89029],{"class":540},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[76,89031,89032,89034,89037,89039,89041,89044,89046,89048,89050,89052,89055,89057],{"class":78,"line":18982},[76,89033,72079],{"class":119},[76,89035,89036],{"class":90},".modalBox.",[76,89038,56430],{"class":86},[76,89040,123],{"class":90},[76,89042,89043],{"class":126},"'i'",[76,89045,32870],{"class":90},[76,89047,59843],{"class":86},[76,89049,123],{"class":90},[76,89051,59848],{"class":126},[76,89053,89054],{"class":90},", () ",[76,89056,86746],{"class":82},[76,89058,17623],{"class":90},[76,89060,89061],{"class":78,"line":34671},[76,89062,89063],{"class":540},"        \u002F\u002F 这个地方需要用到箭头函数\n",[76,89065,89066],{"class":78,"line":34677},[76,89067,89068],{"class":540},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[76,89070,89071],{"class":78,"line":34683},[76,89072,89073],{"class":540},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[76,89075,89076,89078,89080,89083],{"class":78,"line":34689},[76,89077,66754],{"class":119},[76,89079,2819],{"class":90},[76,89081,89082],{"class":86},"close",[76,89084,4072],{"class":90},[76,89086,89087],{"class":78,"line":34695},[76,89088,66843],{"class":90},[76,89090,89091],{"class":78,"line":34706},[76,89092,4283],{"class":90},[76,89094,89095],{"class":78,"line":34712},[76,89096,149],{"emptyLinePlaceholder":148},[76,89098,89099],{"class":78,"line":34732},[76,89100,89101],{"class":540},"    \u002F\u002F 测试一下 点击 删除按钮\n",[76,89103,89104,89106,89108,89110,89113,89115,89117,89119,89121,89123,89125],{"class":78,"line":34738},[76,89105,54439],{"class":90},[76,89107,56430],{"class":86},[76,89109,123],{"class":90},[76,89111,89112],{"class":126},"'#delete'",[76,89114,32870],{"class":90},[76,89116,59843],{"class":86},[76,89118,123],{"class":90},[76,89120,59848],{"class":126},[76,89122,89054],{"class":90},[76,89124,86746],{"class":82},[76,89126,17623],{"class":90},[76,89128,89129],{"class":78,"line":34749},[76,89130,89131],{"class":540},"      \u002F\u002F 先调用Model构造函数\n",[76,89133,89134,89136,89139,89141,89143,89145,89147,89150,89152,89155],{"class":78,"line":34755},[76,89135,60258],{"class":82},[76,89137,89138],{"class":119}," del",[76,89140,15617],{"class":82},[76,89142,13632],{"class":82},[76,89144,88795],{"class":86},[76,89146,123],{"class":90},[76,89148,89149],{"class":126},"'温馨的提示'",[76,89151,405],{"class":90},[76,89153,89154],{"class":126},"'您没有删除权限操作'",[76,89156,130],{"class":90},[76,89158,89159],{"class":78,"line":34761},[76,89160,89161],{"class":540},"      \u002F\u002F 实例对象调用open方法\n",[76,89163,89164,89167,89169],{"class":78,"line":34767},[76,89165,89166],{"class":90},"      del.",[76,89168,88939],{"class":86},[76,89170,4072],{"class":90},[76,89172,89173],{"class":78,"line":34773},[76,89174,35499],{"class":90},[76,89176,89177],{"class":78,"line":34779},[76,89178,89179],{"class":540},"    \u002F\u002F 测试一下 点击 登录按钮\n",[76,89181,89182,89184,89186,89188,89191,89193,89195,89197,89199,89201,89203],{"class":78,"line":34785},[76,89183,54439],{"class":90},[76,89185,56430],{"class":86},[76,89187,123],{"class":90},[76,89189,89190],{"class":126},"'#login'",[76,89192,32870],{"class":90},[76,89194,59843],{"class":86},[76,89196,123],{"class":90},[76,89198,59848],{"class":126},[76,89200,89054],{"class":90},[76,89202,86746],{"class":82},[76,89204,17623],{"class":90},[76,89206,89207],{"class":78,"line":34791},[76,89208,89131],{"class":540},[76,89210,89211,89213,89216,89218,89220,89222,89224,89227,89229,89232],{"class":78,"line":34811},[76,89212,60258],{"class":82},[76,89214,89215],{"class":119}," log",[76,89217,15617],{"class":82},[76,89219,13632],{"class":82},[76,89221,88795],{"class":86},[76,89223,123],{"class":90},[76,89225,89226],{"class":126},"'友情提示'",[76,89228,405],{"class":90},[76,89230,89231],{"class":126},"'您还没有登录呢'",[76,89233,130],{"class":90},[76,89235,89236],{"class":78,"line":34817},[76,89237,89161],{"class":540},[76,89239,89240,89243,89245],{"class":78,"line":34833},[76,89241,89242],{"class":90},"      log.",[76,89244,88939],{"class":86},[76,89246,4072],{"class":90},[76,89248,89249],{"class":78,"line":34839},[76,89250,35499],{"class":90},[76,89252,89253],{"class":78,"line":34853},[76,89254,89255],{"class":540},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[76,89257,89258,89260,89262,89264,89266,89268,89270,89272],{"class":78,"line":34859},[76,89259,88930],{"class":119},[76,89261,2819],{"class":90},[76,89263,87603],{"class":119},[76,89265,2819],{"class":90},[76,89267,89082],{"class":86},[76,89269,15617],{"class":82},[76,89271,60947],{"class":82},[76,89273,56483],{"class":90},[76,89275,89276,89278,89280,89282],{"class":78,"line":34874},[76,89277,72079],{"class":119},[76,89279,89036],{"class":90},[76,89281,59036],{"class":86},[76,89283,4072],{"class":90},[76,89285,89286],{"class":78,"line":34880},[76,89287,4283],{"class":90},[76,89289,89290,89292,89294],{"class":78,"line":34889},[76,89291,54449],{"class":90},[76,89293,53845],{"class":53332},[76,89295,53339],{"class":90},[76,89297,89298,89300,89302],{"class":78,"line":34895},[76,89299,53817],{"class":90},[76,89301,53832],{"class":53332},[76,89303,53339],{"class":90},[76,89305,89306],{"class":78,"line":34904},[76,89307,149],{"emptyLinePlaceholder":148},[76,89309,89310,89312,89314],{"class":78,"line":34910},[76,89311,53817],{"class":90},[76,89313,52667],{"class":53332},[76,89315,53339],{"class":90},[19,89317,89318],{},[3583,89319],{"alt":71,"src":89320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89322,89324],{"id":89323},"_414-深浅拷贝","4.14 深浅拷贝",[889,89326,89328],{"id":89327},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89330,89331],{},[3583,89332],{"alt":71,"src":89333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89335,89336],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89338,89339],{},[3583,89340],{"alt":71,"src":89341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89343,89344],{},[3583,89345],{"alt":71,"src":89346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89348,89349],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89351,89352],{},[3583,89353],{"alt":71,"src":89354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89356,13386],{},[19,89358,89359],{},[3583,89360],{"alt":71,"src":89361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[889,89363,89365],{"id":89364},"_4142-深拷贝","4.14.2 深拷贝",[19,89367,89368],{},"深拷贝：拷贝的是对象，不是地址",[19,89370,89371],{},"常用的三种方法：",[26,89373,89374,89377,89380],{},[29,89375,89376],{},"通过递归实现深拷贝",[29,89378,89379],{},"lodash\u002FcloneDeep",[29,89381,89382],{},"通过JSON.stringify()实现",[24047,89384,89386],{"id":89385},"_41421-递归函数","4.14.2.1 递归函数",[19,89388,89389],{},[3583,89390],{"alt":71,"src":89391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89393,89394],{},[29,89395,89396],{},"死递归占溢出：",[66,89398,89400],{"className":55099,"code":89399,"language":55101,"meta":71,"style":71},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,89401,89402,89410,89418,89422,89427,89431,89436,89444],{"__ignoreMap":71},[76,89403,89404,89406,89408],{"class":78,"line":79},[76,89405,584],{"class":90},[76,89407,53832],{"class":53332},[76,89409,53339],{"class":90},[76,89411,89412,89414,89416],{"class":78,"line":94},[76,89413,54176],{"class":90},[76,89415,53845],{"class":53332},[76,89417,53339],{"class":90},[76,89419,89420],{"class":78,"line":133},[76,89421,79169],{"class":90},[76,89423,89424],{"class":78,"line":145},[76,89425,89426],{"class":90},"      fn()\n",[76,89428,89429],{"class":78,"line":152},[76,89430,4283],{"class":90},[76,89432,89433],{"class":78,"line":157},[76,89434,89435],{"class":90},"    fn()\n",[76,89437,89438,89440,89442],{"class":78,"line":246},[76,89439,54449],{"class":90},[76,89441,53845],{"class":53332},[76,89443,53339],{"class":90},[76,89445,89446,89448,89450],{"class":78,"line":251},[76,89447,53817],{"class":90},[76,89449,53832],{"class":53332},[76,89451,53339],{"class":90},[26,89453,89454],{"start":94},[29,89455,89456],{},"递归函数要加判断条件：",[19,89458,89459],{},[3583,89460],{"alt":71,"src":89461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89463,89464],{"start":133},[29,89465,89466],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[66,89468,89470],{"className":52665,"code":89469,"language":52667,"meta":71,"style":71},"\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",[73,89471,89472,89482,89496,89500,89508,89522,89542,89554,89562,89566,89574,89586,89594,89602,89627,89639,89643,89650,89658,89666,89670],{"__ignoreMap":71},[76,89473,89474,89476,89478,89480],{"class":78,"line":79},[76,89475,53329],{"class":90},[76,89477,53333],{"class":53332},[76,89479,53336],{"class":86},[76,89481,53339],{"class":90},[76,89483,89484,89486,89488,89490,89492,89494],{"class":78,"line":94},[76,89485,584],{"class":90},[76,89487,52667],{"class":53332},[76,89489,53348],{"class":86},[76,89491,370],{"class":90},[76,89493,53353],{"class":126},[76,89495,53339],{"class":90},[76,89497,89498],{"class":78,"line":133},[76,89499,149],{"emptyLinePlaceholder":148},[76,89501,89502,89504,89506],{"class":78,"line":145},[76,89503,584],{"class":90},[76,89505,53366],{"class":53332},[76,89507,53339],{"class":90},[76,89509,89510,89512,89514,89516,89518,89520],{"class":78,"line":152},[76,89511,54176],{"class":90},[76,89513,53376],{"class":53332},[76,89515,53379],{"class":86},[76,89517,370],{"class":90},[76,89519,53384],{"class":126},[76,89521,53339],{"class":90},[76,89523,89524,89526,89528,89530,89532,89534,89536,89538,89540],{"class":78,"line":157},[76,89525,54176],{"class":90},[76,89527,53376],{"class":53332},[76,89529,16972],{"class":86},[76,89531,370],{"class":90},[76,89533,53423],{"class":126},[76,89535,53403],{"class":86},[76,89537,370],{"class":90},[76,89539,53430],{"class":126},[76,89541,53339],{"class":90},[76,89543,89544,89546,89548,89550,89552],{"class":78,"line":246},[76,89545,54176],{"class":90},[76,89547,53439],{"class":53332},[76,89549,53442],{"class":90},[76,89551,53439],{"class":53332},[76,89553,53339],{"class":90},[76,89555,89556,89558,89560],{"class":78,"line":251},[76,89557,53817],{"class":90},[76,89559,53366],{"class":53332},[76,89561,53339],{"class":90},[76,89563,89564],{"class":78,"line":257},[76,89565,149],{"emptyLinePlaceholder":148},[76,89567,89568,89570,89572],{"class":78,"line":641},[76,89569,584],{"class":90},[76,89571,53832],{"class":53332},[76,89573,53339],{"class":90},[76,89575,89576,89578,89580,89582,89584],{"class":78,"line":646},[76,89577,54176],{"class":90},[76,89579,53643],{"class":53332},[76,89581,57345],{"class":90},[76,89583,53643],{"class":53332},[76,89585,53339],{"class":90},[76,89587,89588,89590,89592],{"class":78,"line":659},[76,89589,54176],{"class":90},[76,89591,53845],{"class":53332},[76,89593,53339],{"class":90},[76,89595,89596,89598,89600],{"class":78,"line":1608},[76,89597,72112],{"class":82},[76,89599,75800],{"class":86},[76,89601,12909],{"class":90},[76,89603,89604,89606,89608,89610,89612,89614,89616,89618,89620,89622,89625],{"class":78,"line":1632},[76,89605,57801],{"class":90},[76,89607,56430],{"class":86},[76,89609,123],{"class":90},[76,89611,83955],{"class":126},[76,89613,76276],{"class":90},[76,89615,370],{"class":82},[76,89617,13632],{"class":82},[76,89619,75816],{"class":86},[76,89621,19310],{"class":90},[76,89623,89624],{"class":86},"toLocaleString",[76,89626,4072],{"class":90},[76,89628,89629,89632,89635,89637],{"class":78,"line":1637},[76,89630,89631],{"class":86},"      setTimeout",[76,89633,89634],{"class":90},"(getTime, ",[76,89636,8489],{"class":119},[76,89638,130],{"class":90},[76,89640,89641],{"class":78,"line":1642},[76,89642,4283],{"class":90},[76,89644,89645,89648],{"class":78,"line":1652},[76,89646,89647],{"class":86},"    getTime",[76,89649,4072],{"class":90},[76,89651,89652,89654,89656],{"class":78,"line":1660},[76,89653,54449],{"class":90},[76,89655,53845],{"class":53332},[76,89657,53339],{"class":90},[76,89659,89660,89662,89664],{"class":78,"line":1683},[76,89661,53817],{"class":90},[76,89663,53832],{"class":53332},[76,89665,53339],{"class":90},[76,89667,89668],{"class":78,"line":1698},[76,89669,149],{"emptyLinePlaceholder":148},[76,89671,89672,89674,89676],{"class":78,"line":1711},[76,89673,53817],{"class":90},[76,89675,52667],{"class":53332},[76,89677,53339],{"class":90},[19,89679,89680],{},[3583,89681],{"alt":71,"src":89682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89684,89685],{"start":145},[29,89686,89376],{},[19,89688,89689],{},[3583,89690],{"alt":71,"src":89691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89693,89694],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89696,41225],{},[19,89698,89699],{},"这个是简易版的递归函数深拷贝",[19,89701,89702],{},"一定要注意先数组再对象，因为万物皆可对象",[66,89704,89706],{"className":52665,"code":89705,"language":52667,"meta":71,"style":71},"\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",[73,89707,89708,89718,89732,89736,89744,89758,89778,89790,89798,89802,89810,89818,89828,89837,89845,89861,89865,89873,89877,89881,89893,89898,89917,89933,89938,89943,89948,89963,89968,89973,89982,89990,90007,90015,90021,90029,90034,90039,90048,90052,90056,90060,90071,90080,90090,90104,90114,90122,90130,90138,90142],{"__ignoreMap":71},[76,89709,89710,89712,89714,89716],{"class":78,"line":79},[76,89711,53329],{"class":90},[76,89713,53333],{"class":53332},[76,89715,53336],{"class":86},[76,89717,53339],{"class":90},[76,89719,89720,89722,89724,89726,89728,89730],{"class":78,"line":94},[76,89721,584],{"class":90},[76,89723,52667],{"class":53332},[76,89725,53348],{"class":86},[76,89727,370],{"class":90},[76,89729,53353],{"class":126},[76,89731,53339],{"class":90},[76,89733,89734],{"class":78,"line":133},[76,89735,149],{"emptyLinePlaceholder":148},[76,89737,89738,89740,89742],{"class":78,"line":145},[76,89739,584],{"class":90},[76,89741,53366],{"class":53332},[76,89743,53339],{"class":90},[76,89745,89746,89748,89750,89752,89754,89756],{"class":78,"line":152},[76,89747,54176],{"class":90},[76,89749,53376],{"class":53332},[76,89751,53379],{"class":86},[76,89753,370],{"class":90},[76,89755,53384],{"class":126},[76,89757,53339],{"class":90},[76,89759,89760,89762,89764,89766,89768,89770,89772,89774,89776],{"class":78,"line":157},[76,89761,54176],{"class":90},[76,89763,53376],{"class":53332},[76,89765,16972],{"class":86},[76,89767,370],{"class":90},[76,89769,53423],{"class":126},[76,89771,53403],{"class":86},[76,89773,370],{"class":90},[76,89775,53430],{"class":126},[76,89777,53339],{"class":90},[76,89779,89780,89782,89784,89786,89788],{"class":78,"line":246},[76,89781,54176],{"class":90},[76,89783,53439],{"class":53332},[76,89785,53442],{"class":90},[76,89787,53439],{"class":53332},[76,89789,53339],{"class":90},[76,89791,89792,89794,89796],{"class":78,"line":251},[76,89793,53817],{"class":90},[76,89795,53366],{"class":53332},[76,89797,53339],{"class":90},[76,89799,89800],{"class":78,"line":257},[76,89801,149],{"emptyLinePlaceholder":148},[76,89803,89804,89806,89808],{"class":78,"line":641},[76,89805,584],{"class":90},[76,89807,53832],{"class":53332},[76,89809,53339],{"class":90},[76,89811,89812,89814,89816],{"class":78,"line":646},[76,89813,54176],{"class":90},[76,89815,53845],{"class":53332},[76,89817,53339],{"class":90},[76,89819,89820,89822,89824,89826],{"class":78,"line":659},[76,89821,13275],{"class":82},[76,89823,71999],{"class":119},[76,89825,15617],{"class":82},[76,89827,17623],{"class":90},[76,89829,89830,89832,89835],{"class":78,"line":1608},[76,89831,73643],{"class":90},[76,89833,89834],{"class":126},"'pink'",[76,89836,33509],{"class":90},[76,89838,89839,89841,89843],{"class":78,"line":1632},[76,89840,73653],{"class":90},[76,89842,1214],{"class":119},[76,89844,33509],{"class":90},[76,89846,89847,89850,89853,89855,89858],{"class":78,"line":1637},[76,89848,89849],{"class":90},"      hobby: [",[76,89851,89852],{"class":126},"'乒乓球'",[76,89854,405],{"class":90},[76,89856,89857],{"class":126},"'足球'",[76,89859,89860],{"class":90},"],\n",[76,89862,89863],{"class":78,"line":1642},[76,89864,79898],{"class":90},[76,89866,89867,89870],{"class":78,"line":1652},[76,89868,89869],{"class":90},"        baby: ",[76,89871,89872],{"class":126},"'小pink'\n",[76,89874,89875],{"class":78,"line":1660},[76,89876,54430],{"class":90},[76,89878,89879],{"class":78,"line":1683},[76,89880,4283],{"class":90},[76,89882,89883,89885,89888,89890],{"class":78,"line":1698},[76,89884,13275],{"class":82},[76,89886,89887],{"class":119}," o",[76,89889,15617],{"class":82},[76,89891,89892],{"class":90}," {}\n",[76,89894,89895],{"class":78,"line":1711},[76,89896,89897],{"class":540},"    \u002F\u002F 拷贝函数\n",[76,89899,89900,89902,89905,89907,89910,89912,89915],{"class":78,"line":1717},[76,89901,72112],{"class":82},[76,89903,89904],{"class":86}," deepCopy",[76,89906,123],{"class":90},[76,89908,89909],{"class":7296},"newObj",[76,89911,405],{"class":90},[76,89913,89914],{"class":7296},"oldObj",[76,89916,14495],{"class":90},[76,89918,89919,89921,89923,89925,89928,89930],{"class":78,"line":1728},[76,89920,54316],{"class":82},[76,89922,3770],{"class":90},[76,89924,53879],{"class":82},[76,89926,89927],{"class":90}," k ",[76,89929,1475],{"class":82},[76,89931,89932],{"class":90}," oldObj) {\n",[76,89934,89935],{"class":78,"line":1740},[76,89936,89937],{"class":540},"        \u002F\u002F 处理数组的问题\n",[76,89939,89940],{"class":78,"line":1746},[76,89941,89942],{"class":540},"        \u002F\u002F 判断是否属于数组\n",[76,89944,89945],{"class":78,"line":1751},[76,89946,89947],{"class":540},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[76,89949,89950,89952,89955,89958,89961],{"class":78,"line":1756},[76,89951,4592],{"class":82},[76,89953,89954],{"class":90}," (oldObj[k] ",[76,89956,89957],{"class":82},"instanceof",[76,89959,89960],{"class":86}," Array",[76,89962,14495],{"class":90},[76,89964,89965],{"class":78,"line":1766},[76,89966,89967],{"class":540},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[76,89969,89970],{"class":78,"line":1773},[76,89971,89972],{"class":540},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[76,89974,89975,89978,89980],{"class":78,"line":1793},[76,89976,89977],{"class":90},"          newObj[k] ",[76,89979,370],{"class":82},[76,89981,53870],{"class":90},[76,89983,89984,89987],{"class":78,"line":1806},[76,89985,89986],{"class":86},"          deepCopy",[76,89988,89989],{"class":90},"(newObj[k], oldObj[k])\n",[76,89991,89992,89994,89996,89998,90000,90002,90005],{"class":78,"line":1817},[76,89993,82104],{"class":90},[76,89995,1328],{"class":82},[76,89997,3811],{"class":82},[76,89999,89954],{"class":90},[76,90001,89957],{"class":82},[76,90003,90004],{"class":86}," Object",[76,90006,14495],{"class":90},[76,90008,90009,90011,90013],{"class":78,"line":1822},[76,90010,89977],{"class":90},[76,90012,370],{"class":82},[76,90014,89892],{"class":90},[76,90016,90017,90019],{"class":78,"line":1835},[76,90018,89986],{"class":86},[76,90020,89989],{"class":90},[76,90022,90023,90025,90027],{"class":78,"line":1847},[76,90024,82104],{"class":90},[76,90026,1328],{"class":82},[76,90028,17623],{"class":90},[76,90030,90031],{"class":78,"line":1852},[76,90032,90033],{"class":540},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[76,90035,90036],{"class":78,"line":1862},[76,90037,90038],{"class":540},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[76,90040,90041,90043,90045],{"class":78,"line":1874},[76,90042,89977],{"class":90},[76,90044,370],{"class":82},[76,90046,90047],{"class":90}," oldObj[k]\n",[76,90049,90050],{"class":78,"line":1879},[76,90051,4624],{"class":90},[76,90053,90054],{"class":78,"line":1884},[76,90055,54430],{"class":90},[76,90057,90058],{"class":78,"line":1889},[76,90059,4283],{"class":90},[76,90061,90062,90065,90068],{"class":78,"line":1900},[76,90063,90064],{"class":86},"    deepCopy",[76,90066,90067],{"class":90},"(o, obj) ",[76,90069,90070],{"class":540},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[76,90072,90073,90075,90077],{"class":78,"line":1906},[76,90074,75780],{"class":90},[76,90076,60277],{"class":86},[76,90078,90079],{"class":90},"(o)\n",[76,90081,90082,90085,90087],{"class":78,"line":1924},[76,90083,90084],{"class":90},"    o.age ",[76,90086,370],{"class":82},[76,90088,90089],{"class":119}," 20\n",[76,90091,90092,90095,90097,90099,90101],{"class":78,"line":1929},[76,90093,90094],{"class":90},"    o.hobby[",[76,90096,1294],{"class":119},[76,90098,6525],{"class":90},[76,90100,370],{"class":82},[76,90102,90103],{"class":126}," '篮球'\n",[76,90105,90106,90109,90111],{"class":78,"line":1944},[76,90107,90108],{"class":90},"    o.family ",[76,90110,370],{"class":82},[76,90112,90113],{"class":126}," '老pink'\n",[76,90115,90116,90118,90120],{"class":78,"line":1950},[76,90117,75780],{"class":90},[76,90119,60277],{"class":86},[76,90121,72064],{"class":90},[76,90123,90124,90126,90128],{"class":78,"line":1965},[76,90125,54449],{"class":90},[76,90127,53845],{"class":53332},[76,90129,53339],{"class":90},[76,90131,90132,90134,90136],{"class":78,"line":1971},[76,90133,53817],{"class":90},[76,90135,53832],{"class":53332},[76,90137,53339],{"class":90},[76,90139,90140],{"class":78,"line":1985},[76,90141,149],{"emptyLinePlaceholder":148},[76,90143,90144,90146,90148],{"class":78,"line":1991},[76,90145,53817],{"class":90},[76,90147,52667],{"class":53332},[76,90149,53339],{"class":90},[19,90151,90152],{},[3583,90153],{"alt":71,"src":90154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24047,90156,90158,90159],{"id":90157},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2416,90160,90161],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90163,90164],{},[2503,90165,90166],{"href":90166,"rel":90167},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25914],[19,90169,90170],{},"lodash里边的方法都要加上一个下划线_",[19,90172,90173],{},"_.cloneDeep()",[66,90175,90177],{"className":52665,"code":90176,"language":52667,"meta":71,"style":71},"\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",[73,90178,90179,90189,90203,90207,90215,90229,90249,90261,90269,90273,90281,90286,90305,90313,90323,90331,90339,90351,90355,90361,90365,90369,90385,90393,90402,90410,90418,90426,90430],{"__ignoreMap":71},[76,90180,90181,90183,90185,90187],{"class":78,"line":79},[76,90182,53329],{"class":90},[76,90184,53333],{"class":53332},[76,90186,53336],{"class":86},[76,90188,53339],{"class":90},[76,90190,90191,90193,90195,90197,90199,90201],{"class":78,"line":94},[76,90192,584],{"class":90},[76,90194,52667],{"class":53332},[76,90196,53348],{"class":86},[76,90198,370],{"class":90},[76,90200,53353],{"class":126},[76,90202,53339],{"class":90},[76,90204,90205],{"class":78,"line":133},[76,90206,149],{"emptyLinePlaceholder":148},[76,90208,90209,90211,90213],{"class":78,"line":145},[76,90210,584],{"class":90},[76,90212,53366],{"class":53332},[76,90214,53339],{"class":90},[76,90216,90217,90219,90221,90223,90225,90227],{"class":78,"line":152},[76,90218,54176],{"class":90},[76,90220,53376],{"class":53332},[76,90222,53379],{"class":86},[76,90224,370],{"class":90},[76,90226,53384],{"class":126},[76,90228,53339],{"class":90},[76,90230,90231,90233,90235,90237,90239,90241,90243,90245,90247],{"class":78,"line":157},[76,90232,54176],{"class":90},[76,90234,53376],{"class":53332},[76,90236,16972],{"class":86},[76,90238,370],{"class":90},[76,90240,53423],{"class":126},[76,90242,53403],{"class":86},[76,90244,370],{"class":90},[76,90246,53430],{"class":126},[76,90248,53339],{"class":90},[76,90250,90251,90253,90255,90257,90259],{"class":78,"line":246},[76,90252,54176],{"class":90},[76,90254,53439],{"class":53332},[76,90256,53442],{"class":90},[76,90258,53439],{"class":53332},[76,90260,53339],{"class":90},[76,90262,90263,90265,90267],{"class":78,"line":251},[76,90264,53817],{"class":90},[76,90266,53366],{"class":53332},[76,90268,53339],{"class":90},[76,90270,90271],{"class":78,"line":257},[76,90272,149],{"emptyLinePlaceholder":148},[76,90274,90275,90277,90279],{"class":78,"line":641},[76,90276,584],{"class":90},[76,90278,53832],{"class":53332},[76,90280,53339],{"class":90},[76,90282,90283],{"class":78,"line":646},[76,90284,90285],{"class":540},"  \u003C!-- 先引用这个库 -->\n",[76,90287,90288,90290,90292,90294,90296,90299,90301,90303],{"class":78,"line":659},[76,90289,54176],{"class":90},[76,90291,53845],{"class":53332},[76,90293,57270],{"class":86},[76,90295,370],{"class":90},[76,90297,90298],{"class":126},"\"lodash.min.js\"",[76,90300,57345],{"class":90},[76,90302,53845],{"class":53332},[76,90304,53339],{"class":90},[76,90306,90307,90309,90311],{"class":78,"line":1608},[76,90308,54176],{"class":90},[76,90310,53845],{"class":53332},[76,90312,53339],{"class":90},[76,90314,90315,90317,90319,90321],{"class":78,"line":1632},[76,90316,13275],{"class":82},[76,90318,71999],{"class":119},[76,90320,15617],{"class":82},[76,90322,17623],{"class":90},[76,90324,90325,90327,90329],{"class":78,"line":1637},[76,90326,73643],{"class":90},[76,90328,89834],{"class":126},[76,90330,33509],{"class":90},[76,90332,90333,90335,90337],{"class":78,"line":1642},[76,90334,73653],{"class":90},[76,90336,1214],{"class":119},[76,90338,33509],{"class":90},[76,90340,90341,90343,90345,90347,90349],{"class":78,"line":1652},[76,90342,89849],{"class":90},[76,90344,89852],{"class":126},[76,90346,405],{"class":90},[76,90348,89857],{"class":126},[76,90350,89860],{"class":90},[76,90352,90353],{"class":78,"line":1660},[76,90354,79898],{"class":90},[76,90356,90357,90359],{"class":78,"line":1683},[76,90358,89869],{"class":90},[76,90360,89872],{"class":126},[76,90362,90363],{"class":78,"line":1698},[76,90364,54430],{"class":90},[76,90366,90367],{"class":78,"line":1711},[76,90368,4283],{"class":90},[76,90370,90371,90373,90375,90377,90380,90383],{"class":78,"line":1717},[76,90372,13275],{"class":82},[76,90374,89887],{"class":119},[76,90376,15617],{"class":82},[76,90378,90379],{"class":90}," _.",[76,90381,90382],{"class":86},"cloneDeep",[76,90384,72064],{"class":90},[76,90386,90387,90389,90391],{"class":78,"line":1728},[76,90388,75780],{"class":90},[76,90390,60277],{"class":86},[76,90392,90079],{"class":90},[76,90394,90395,90398,90400],{"class":78,"line":1740},[76,90396,90397],{"class":90},"    o.family.baby ",[76,90399,370],{"class":82},[76,90401,90113],{"class":126},[76,90403,90404,90406,90408],{"class":78,"line":1746},[76,90405,75780],{"class":90},[76,90407,60277],{"class":86},[76,90409,72064],{"class":90},[76,90411,90412,90414,90416],{"class":78,"line":1751},[76,90413,54449],{"class":90},[76,90415,53845],{"class":53332},[76,90417,53339],{"class":90},[76,90419,90420,90422,90424],{"class":78,"line":1756},[76,90421,53817],{"class":90},[76,90423,53832],{"class":53332},[76,90425,53339],{"class":90},[76,90427,90428],{"class":78,"line":1766},[76,90429,149],{"emptyLinePlaceholder":148},[76,90431,90432,90434,90436],{"class":78,"line":1773},[76,90433,53817],{"class":90},[76,90435,52667],{"class":53332},[76,90437,53339],{"class":90},[19,90439,90440],{},[3583,90441],{"alt":71,"src":90442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24047,90444,90446],{"id":90445},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[66,90448,90450],{"className":52665,"code":90449,"language":52667,"meta":71,"style":71},"\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",[73,90451,90452,90462,90476,90480,90488,90502,90522,90534,90542,90546,90554,90562,90572,90580,90588,90600,90604,90610,90614,90618,90623,90628,90633,90659,90667,90676,90684,90692,90700,90704],{"__ignoreMap":71},[76,90453,90454,90456,90458,90460],{"class":78,"line":79},[76,90455,53329],{"class":90},[76,90457,53333],{"class":53332},[76,90459,53336],{"class":86},[76,90461,53339],{"class":90},[76,90463,90464,90466,90468,90470,90472,90474],{"class":78,"line":94},[76,90465,584],{"class":90},[76,90467,52667],{"class":53332},[76,90469,53348],{"class":86},[76,90471,370],{"class":90},[76,90473,53353],{"class":126},[76,90475,53339],{"class":90},[76,90477,90478],{"class":78,"line":133},[76,90479,149],{"emptyLinePlaceholder":148},[76,90481,90482,90484,90486],{"class":78,"line":145},[76,90483,584],{"class":90},[76,90485,53366],{"class":53332},[76,90487,53339],{"class":90},[76,90489,90490,90492,90494,90496,90498,90500],{"class":78,"line":152},[76,90491,54176],{"class":90},[76,90493,53376],{"class":53332},[76,90495,53379],{"class":86},[76,90497,370],{"class":90},[76,90499,53384],{"class":126},[76,90501,53339],{"class":90},[76,90503,90504,90506,90508,90510,90512,90514,90516,90518,90520],{"class":78,"line":157},[76,90505,54176],{"class":90},[76,90507,53376],{"class":53332},[76,90509,16972],{"class":86},[76,90511,370],{"class":90},[76,90513,53423],{"class":126},[76,90515,53403],{"class":86},[76,90517,370],{"class":90},[76,90519,53430],{"class":126},[76,90521,53339],{"class":90},[76,90523,90524,90526,90528,90530,90532],{"class":78,"line":246},[76,90525,54176],{"class":90},[76,90527,53439],{"class":53332},[76,90529,53442],{"class":90},[76,90531,53439],{"class":53332},[76,90533,53339],{"class":90},[76,90535,90536,90538,90540],{"class":78,"line":251},[76,90537,53817],{"class":90},[76,90539,53366],{"class":53332},[76,90541,53339],{"class":90},[76,90543,90544],{"class":78,"line":257},[76,90545,149],{"emptyLinePlaceholder":148},[76,90547,90548,90550,90552],{"class":78,"line":641},[76,90549,584],{"class":90},[76,90551,53832],{"class":53332},[76,90553,53339],{"class":90},[76,90555,90556,90558,90560],{"class":78,"line":646},[76,90557,54176],{"class":90},[76,90559,53845],{"class":53332},[76,90561,53339],{"class":90},[76,90563,90564,90566,90568,90570],{"class":78,"line":659},[76,90565,13275],{"class":82},[76,90567,71999],{"class":119},[76,90569,15617],{"class":82},[76,90571,17623],{"class":90},[76,90573,90574,90576,90578],{"class":78,"line":1608},[76,90575,73643],{"class":90},[76,90577,89834],{"class":126},[76,90579,33509],{"class":90},[76,90581,90582,90584,90586],{"class":78,"line":1632},[76,90583,73653],{"class":90},[76,90585,1214],{"class":119},[76,90587,33509],{"class":90},[76,90589,90590,90592,90594,90596,90598],{"class":78,"line":1637},[76,90591,89849],{"class":90},[76,90593,89852],{"class":126},[76,90595,405],{"class":90},[76,90597,89857],{"class":126},[76,90599,89860],{"class":90},[76,90601,90602],{"class":78,"line":1642},[76,90603,79898],{"class":90},[76,90605,90606,90608],{"class":78,"line":1652},[76,90607,89869],{"class":90},[76,90609,89872],{"class":126},[76,90611,90612],{"class":78,"line":1660},[76,90613,54430],{"class":90},[76,90615,90616],{"class":78,"line":1683},[76,90617,4283],{"class":90},[76,90619,90620],{"class":78,"line":1698},[76,90621,90622],{"class":540},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[76,90624,90625],{"class":78,"line":1711},[76,90626,90627],{"class":540},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[76,90629,90630],{"class":78,"line":1717},[76,90631,90632],{"class":540},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[76,90634,90635,90637,90639,90641,90644,90646,90649,90651,90653,90655,90657],{"class":78,"line":1728},[76,90636,13275],{"class":82},[76,90638,89887],{"class":119},[76,90640,15617],{"class":82},[76,90642,90643],{"class":119}," JSON",[76,90645,2819],{"class":90},[76,90647,90648],{"class":86},"parse",[76,90650,123],{"class":90},[76,90652,73691],{"class":119},[76,90654,2819],{"class":90},[76,90656,73696],{"class":86},[76,90658,73699],{"class":90},[76,90660,90661,90663,90665],{"class":78,"line":1740},[76,90662,75780],{"class":90},[76,90664,60277],{"class":86},[76,90666,90079],{"class":90},[76,90668,90669,90671,90673],{"class":78,"line":1746},[76,90670,90397],{"class":90},[76,90672,370],{"class":82},[76,90674,90675],{"class":126}," '123'\n",[76,90677,90678,90680,90682],{"class":78,"line":1751},[76,90679,75780],{"class":90},[76,90681,60277],{"class":86},[76,90683,72064],{"class":90},[76,90685,90686,90688,90690],{"class":78,"line":1756},[76,90687,54449],{"class":90},[76,90689,53845],{"class":53332},[76,90691,53339],{"class":90},[76,90693,90694,90696,90698],{"class":78,"line":1766},[76,90695,53817],{"class":90},[76,90697,53832],{"class":53332},[76,90699,53339],{"class":90},[76,90701,90702],{"class":78,"line":1773},[76,90703,149],{"emptyLinePlaceholder":148},[76,90705,90706,90708,90710],{"class":78,"line":1793},[76,90707,53817],{"class":90},[76,90709,52667],{"class":53332},[76,90711,53339],{"class":90},[19,90713,90714],{},[3583,90715],{"alt":71,"src":90716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90718,90720],{"id":90719},"_415-异常处理","4.15 异常处理",[26,90722,90723],{},[29,90724,90725],{},"throw抛异常",[19,90727,90728],{},[3583,90729],{"alt":71,"src":90730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90732,90733],{"start":94},[29,90734,90735],{},"try\u002Fcatch 捕获错误信息",[19,90737,90738],{},[3583,90739],{"alt":71,"src":90740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[66,90742,90744],{"className":52665,"code":90743,"language":52667,"meta":71,"style":71},"\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",[73,90745,90746,90756,90770,90774,90782,90796,90816,90828,90836,90840,90848,90860,90868,90877,90884,90889,90908,90917,90928,90933,90943,90948,90953,90958,90975,90979,90984,90991,91003,91007,91019,91023,91027,91032,91037,91044,91052,91060,91064],{"__ignoreMap":71},[76,90747,90748,90750,90752,90754],{"class":78,"line":79},[76,90749,53329],{"class":90},[76,90751,53333],{"class":53332},[76,90753,53336],{"class":86},[76,90755,53339],{"class":90},[76,90757,90758,90760,90762,90764,90766,90768],{"class":78,"line":94},[76,90759,584],{"class":90},[76,90761,52667],{"class":53332},[76,90763,53348],{"class":86},[76,90765,370],{"class":90},[76,90767,53353],{"class":126},[76,90769,53339],{"class":90},[76,90771,90772],{"class":78,"line":133},[76,90773,149],{"emptyLinePlaceholder":148},[76,90775,90776,90778,90780],{"class":78,"line":145},[76,90777,584],{"class":90},[76,90779,53366],{"class":53332},[76,90781,53339],{"class":90},[76,90783,90784,90786,90788,90790,90792,90794],{"class":78,"line":152},[76,90785,54176],{"class":90},[76,90787,53376],{"class":53332},[76,90789,53379],{"class":86},[76,90791,370],{"class":90},[76,90793,53384],{"class":126},[76,90795,53339],{"class":90},[76,90797,90798,90800,90802,90804,90806,90808,90810,90812,90814],{"class":78,"line":157},[76,90799,54176],{"class":90},[76,90801,53376],{"class":53332},[76,90803,16972],{"class":86},[76,90805,370],{"class":90},[76,90807,53423],{"class":126},[76,90809,53403],{"class":86},[76,90811,370],{"class":90},[76,90813,53430],{"class":126},[76,90815,53339],{"class":90},[76,90817,90818,90820,90822,90824,90826],{"class":78,"line":246},[76,90819,54176],{"class":90},[76,90821,53439],{"class":53332},[76,90823,53442],{"class":90},[76,90825,53439],{"class":53332},[76,90827,53339],{"class":90},[76,90829,90830,90832,90834],{"class":78,"line":251},[76,90831,53817],{"class":90},[76,90833,53366],{"class":53332},[76,90835,53339],{"class":90},[76,90837,90838],{"class":78,"line":257},[76,90839,149],{"emptyLinePlaceholder":148},[76,90841,90842,90844,90846],{"class":78,"line":641},[76,90843,584],{"class":90},[76,90845,53832],{"class":53332},[76,90847,53339],{"class":90},[76,90849,90850,90852,90854,90856,90858],{"class":78,"line":646},[76,90851,54176],{"class":90},[76,90853,19],{"class":53332},[76,90855,55526],{"class":90},[76,90857,19],{"class":53332},[76,90859,53339],{"class":90},[76,90861,90862,90864,90866],{"class":78,"line":659},[76,90863,54176],{"class":90},[76,90865,53845],{"class":53332},[76,90867,53339],{"class":90},[76,90869,90870,90872,90875],{"class":78,"line":1608},[76,90871,72112],{"class":82},[76,90873,90874],{"class":86}," fn",[76,90876,12909],{"class":90},[76,90878,90879,90882],{"class":78,"line":1632},[76,90880,90881],{"class":82},"      try",[76,90883,17623],{"class":90},[76,90885,90886],{"class":78,"line":1637},[76,90887,90888],{"class":540},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[76,90890,90891,90893,90895,90897,90899,90901,90903,90906],{"class":78,"line":1642},[76,90892,63298],{"class":82},[76,90894,8903],{"class":119},[76,90896,15617],{"class":82},[76,90898,56427],{"class":90},[76,90900,56430],{"class":86},[76,90902,123],{"class":90},[76,90904,90905],{"class":126},"'.p'",[76,90907,130],{"class":90},[76,90909,90910,90913,90915],{"class":78,"line":1652},[76,90911,90912],{"class":90},"        p.style.color ",[76,90914,370],{"class":82},[76,90916,69079],{"class":126},[76,90918,90919,90922,90925],{"class":78,"line":1660},[76,90920,90921],{"class":90},"      } ",[76,90923,90924],{"class":82},"catch",[76,90926,90927],{"class":90}," (err) {\n",[76,90929,90930],{"class":78,"line":1683},[76,90931,90932],{"class":540},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[76,90934,90935,90938,90940],{"class":78,"line":1698},[76,90936,90937],{"class":90},"        console.",[76,90939,60277],{"class":86},[76,90941,90942],{"class":90},"(err.message)\n",[76,90944,90945],{"class":78,"line":1711},[76,90946,90947],{"class":540},"        \u002F\u002F 想要中断程序，需要加return\n",[76,90949,90950],{"class":78,"line":1717},[76,90951,90952],{"class":540},"        \u002F\u002F return\n",[76,90954,90955],{"class":78,"line":1728},[76,90956,90957],{"class":540},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[76,90959,90960,90963,90965,90968,90970,90973],{"class":78,"line":1740},[76,90961,90962],{"class":82},"        throw",[76,90964,13632],{"class":82},[76,90966,90967],{"class":86}," Error",[76,90969,123],{"class":90},[76,90971,90972],{"class":126},"'你看看，选择器错误了吧'",[76,90974,130],{"class":90},[76,90976,90977],{"class":78,"line":1746},[76,90978,54430],{"class":90},[76,90980,90981],{"class":78,"line":1751},[76,90982,90983],{"class":540},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[76,90985,90986,90989],{"class":78,"line":1756},[76,90987,90988],{"class":82},"      finally",[76,90990,17623],{"class":90},[76,90992,90993,90996,90998,91001],{"class":78,"line":1766},[76,90994,90995],{"class":86},"        alert",[76,90997,123],{"class":90},[76,90999,91000],{"class":126},"'弹出对话框'",[76,91002,130],{"class":90},[76,91004,91005],{"class":78,"line":1773},[76,91006,54430],{"class":90},[76,91008,91009,91011,91013,91015,91017],{"class":78,"line":1793},[76,91010,60274],{"class":90},[76,91012,60277],{"class":86},[76,91014,123],{"class":90},[76,91016,2735],{"class":119},[76,91018,130],{"class":90},[76,91020,91021],{"class":78,"line":1806},[76,91022,149],{"emptyLinePlaceholder":148},[76,91024,91025],{"class":78,"line":1817},[76,91026,4283],{"class":90},[76,91028,91029],{"class":78,"line":1822},[76,91030,91031],{"class":540},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[76,91033,91034],{"class":78,"line":1835},[76,91035,91036],{"class":540},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[76,91038,91039,91042],{"class":78,"line":1847},[76,91040,91041],{"class":86},"    fn",[76,91043,4072],{"class":90},[76,91045,91046,91048,91050],{"class":78,"line":1852},[76,91047,54449],{"class":90},[76,91049,53845],{"class":53332},[76,91051,53339],{"class":90},[76,91053,91054,91056,91058],{"class":78,"line":1862},[76,91055,53817],{"class":90},[76,91057,53832],{"class":53332},[76,91059,53339],{"class":90},[76,91061,91062],{"class":78,"line":1874},[76,91063,149],{"emptyLinePlaceholder":148},[76,91065,91066,91068,91070],{"class":78,"line":1879},[76,91067,53817],{"class":90},[76,91069,52667],{"class":53332},[76,91071,53339],{"class":90},[19,91073,91074],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,91076,91077],{"start":133},[29,91078,91079],{},"debugger",[19,91081,91082],{},[3583,91083],{"alt":71,"src":91084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91086,91087],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91089,91091],{"id":91090},"_416-处理this","4.16 处理this",[889,91093,91095],{"id":91094},"_4161-this的指向","4.16.1 this的指向",[26,91097,91098],{},[29,91099,91100],{},"普通函数的this",[19,91102,91103],{},[3583,91104],{"alt":71,"src":91105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,91107,91108],{"start":94},[29,91109,91110],{},"箭头函数的this",[19,91112,91113],{},[3583,91114],{"alt":71,"src":91115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91117,91118],{},[3583,91119],{"alt":71,"src":91120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91122,91123],{},[3583,91124],{"alt":71,"src":91125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[889,91127,91129],{"id":91128},"_4162-this的改变","4.16.2 this的改变",[19,91131,91132],{},"call() apply() bind()",[26,91134,91135],{},[29,91136,91137],{},"call()",[19,91139,91140],{},[3583,91141],{"alt":71,"src":91142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91144,91145],{},"两个作用：①调用函数；②改变this指向",[66,91147,91149],{"className":55099,"code":91148,"language":55101,"meta":71,"style":71},"\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",[73,91150,91151,91159,91167,91171,91176,91180,91185,91190,91195,91199,91204,91212],{"__ignoreMap":71},[76,91152,91153,91155,91157],{"class":78,"line":79},[76,91154,584],{"class":90},[76,91156,53832],{"class":53332},[76,91158,53339],{"class":90},[76,91160,91161,91163,91165],{"class":78,"line":94},[76,91162,54176],{"class":90},[76,91164,53845],{"class":53332},[76,91166,53339],{"class":90},[76,91168,91169],{"class":78,"line":133},[76,91170,73550],{"class":90},[76,91172,91173],{"class":78,"line":145},[76,91174,91175],{"class":90},"      uname: 'pink'\n",[76,91177,91178],{"class":78,"line":152},[76,91179,4283],{"class":90},[76,91181,91182],{"class":78,"line":157},[76,91183,91184],{"class":90},"    function fn(x, y) {\n",[76,91186,91187],{"class":78,"line":246},[76,91188,91189],{"class":90},"      console.log(this)  \u002F\u002Fwindow\n",[76,91191,91192],{"class":78,"line":251},[76,91193,91194],{"class":90},"      console.log(x + y)\n",[76,91196,91197],{"class":78,"line":257},[76,91198,4283],{"class":90},[76,91200,91201],{"class":78,"line":641},[76,91202,91203],{"class":90},"    fn.call(obj, 1, 2)\n",[76,91205,91206,91208,91210],{"class":78,"line":646},[76,91207,54449],{"class":90},[76,91209,53845],{"class":53332},[76,91211,53339],{"class":90},[76,91213,91214,91216,91218],{"class":78,"line":659},[76,91215,53817],{"class":90},[76,91217,53832],{"class":53332},[76,91219,53339],{"class":90},[19,91221,91222],{},[3583,91223],{"alt":71,"src":91224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,91226,91227],{"start":94},[29,91228,91229],{},"apply()",[19,91231,91232],{},[3583,91233],{"alt":71,"src":91234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91236,91145],{},[19,91238,91239],{},"call传递的是普通参数，而apply必须传递的是数组",[66,91241,91243],{"className":52665,"code":91242,"language":52667,"meta":71,"style":71},"\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",[73,91244,91245,91255,91269,91273,91281,91295,91315,91327,91335,91339,91347,91355,91365,91372,91376,91381,91397,91409,91423,91427,91432,91451,91456,91460,91465,91470,91478,91483,91505,91510,91526,91542,91554,91558,91563,91582,91590,91598,91602],{"__ignoreMap":71},[76,91246,91247,91249,91251,91253],{"class":78,"line":79},[76,91248,53329],{"class":90},[76,91250,53333],{"class":53332},[76,91252,53336],{"class":86},[76,91254,53339],{"class":90},[76,91256,91257,91259,91261,91263,91265,91267],{"class":78,"line":94},[76,91258,584],{"class":90},[76,91260,52667],{"class":53332},[76,91262,53348],{"class":86},[76,91264,370],{"class":90},[76,91266,53353],{"class":126},[76,91268,53339],{"class":90},[76,91270,91271],{"class":78,"line":133},[76,91272,149],{"emptyLinePlaceholder":148},[76,91274,91275,91277,91279],{"class":78,"line":145},[76,91276,584],{"class":90},[76,91278,53366],{"class":53332},[76,91280,53339],{"class":90},[76,91282,91283,91285,91287,91289,91291,91293],{"class":78,"line":152},[76,91284,54176],{"class":90},[76,91286,53376],{"class":53332},[76,91288,53379],{"class":86},[76,91290,370],{"class":90},[76,91292,53384],{"class":126},[76,91294,53339],{"class":90},[76,91296,91297,91299,91301,91303,91305,91307,91309,91311,91313],{"class":78,"line":157},[76,91298,54176],{"class":90},[76,91300,53376],{"class":53332},[76,91302,16972],{"class":86},[76,91304,370],{"class":90},[76,91306,53423],{"class":126},[76,91308,53403],{"class":86},[76,91310,370],{"class":90},[76,91312,53430],{"class":126},[76,91314,53339],{"class":90},[76,91316,91317,91319,91321,91323,91325],{"class":78,"line":246},[76,91318,54176],{"class":90},[76,91320,53439],{"class":53332},[76,91322,53442],{"class":90},[76,91324,53439],{"class":53332},[76,91326,53339],{"class":90},[76,91328,91329,91331,91333],{"class":78,"line":251},[76,91330,53817],{"class":90},[76,91332,53366],{"class":53332},[76,91334,53339],{"class":90},[76,91336,91337],{"class":78,"line":257},[76,91338,149],{"emptyLinePlaceholder":148},[76,91340,91341,91343,91345],{"class":78,"line":641},[76,91342,584],{"class":90},[76,91344,53832],{"class":53332},[76,91346,53339],{"class":90},[76,91348,91349,91351,91353],{"class":78,"line":646},[76,91350,54176],{"class":90},[76,91352,53845],{"class":53332},[76,91354,53339],{"class":90},[76,91356,91357,91359,91361,91363],{"class":78,"line":659},[76,91358,13275],{"class":82},[76,91360,71999],{"class":119},[76,91362,15617],{"class":82},[76,91364,17623],{"class":90},[76,91366,91367,91369],{"class":78,"line":1608},[76,91368,73653],{"class":90},[76,91370,91371],{"class":119},"18\n",[76,91373,91374],{"class":78,"line":1632},[76,91375,4283],{"class":90},[76,91377,91378],{"class":78,"line":1637},[76,91379,91380],{"class":540},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[76,91382,91383,91385,91387,91389,91391,91393,91395],{"class":78,"line":1642},[76,91384,72112],{"class":82},[76,91386,90874],{"class":86},[76,91388,123],{"class":90},[76,91390,3078],{"class":7296},[76,91392,405],{"class":90},[76,91394,3103],{"class":7296},[76,91396,14495],{"class":90},[76,91398,91399,91401,91403,91405,91407],{"class":78,"line":1652},[76,91400,60274],{"class":90},[76,91402,60277],{"class":86},[76,91404,123],{"class":90},[76,91406,89017],{"class":119},[76,91408,130],{"class":90},[76,91410,91411,91413,91415,91418,91420],{"class":78,"line":1660},[76,91412,60274],{"class":90},[76,91414,60277],{"class":86},[76,91416,91417],{"class":90},"(x ",[76,91419,376],{"class":82},[76,91421,91422],{"class":90}," y)\n",[76,91424,91425],{"class":78,"line":1683},[76,91426,4283],{"class":90},[76,91428,91429],{"class":78,"line":1698},[76,91430,91431],{"class":540},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[76,91433,91434,91437,91440,91443,91445,91447,91449],{"class":78,"line":1711},[76,91435,91436],{"class":90},"    fn.",[76,91438,91439],{"class":86},"apply",[76,91441,91442],{"class":90},"(obj, [",[76,91444,669],{"class":119},[76,91446,405],{"class":90},[76,91448,2345],{"class":119},[76,91450,6739],{"class":90},[76,91452,91453],{"class":78,"line":1717},[76,91454,91455],{"class":540},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[76,91457,91458],{"class":78,"line":1728},[76,91459,149],{"emptyLinePlaceholder":148},[76,91461,91462],{"class":78,"line":1740},[76,91463,91464],{"class":540},"    \u002F\u002F 使用场景：求数组最大值\n",[76,91466,91467],{"class":78,"line":1746},[76,91468,91469],{"class":540},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[76,91471,91472,91475],{"class":78,"line":1751},[76,91473,91474],{"class":540},"    \u002F\u002F console.log(max)",[76,91476,91477],{"class":540},"   \u002F\u002F3\n",[76,91479,91480],{"class":78,"line":1756},[76,91481,91482],{"class":540},"    \u002F\u002F 指向空或者Math都是可以的\n",[76,91484,91485,91487,91489,91491,91493,91495,91497,91499,91501,91503],{"class":78,"line":1766},[76,91486,13275],{"class":82},[76,91488,59725],{"class":119},[76,91490,15617],{"class":82},[76,91492,54258],{"class":90},[76,91494,2575],{"class":119},[76,91496,405],{"class":90},[76,91498,2766],{"class":119},[76,91500,405],{"class":90},[76,91502,2796],{"class":119},[76,91504,35284],{"class":90},[76,91506,91507],{"class":78,"line":1773},[76,91508,91509],{"class":540},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[76,91511,91512,91514,91516,91518,91521,91523],{"class":78,"line":1793},[76,91513,13275],{"class":82},[76,91515,8030],{"class":119},[76,91517,15617],{"class":82},[76,91519,91520],{"class":90}," Math.max.",[76,91522,91439],{"class":86},[76,91524,91525],{"class":90},"(Math, arr)\n",[76,91527,91528,91530,91533,91535,91538,91540],{"class":78,"line":1806},[76,91529,13275],{"class":82},[76,91531,91532],{"class":119}," min",[76,91534,15617],{"class":82},[76,91536,91537],{"class":90}," Math.min.",[76,91539,91439],{"class":86},[76,91541,91525],{"class":90},[76,91543,91544,91546,91548,91551],{"class":78,"line":1817},[76,91545,75780],{"class":90},[76,91547,60277],{"class":86},[76,91549,91550],{"class":90},"(max, min)     ",[76,91552,91553],{"class":540},"\u002F\u002F100,4\n",[76,91555,91556],{"class":78,"line":1822},[76,91557,149],{"emptyLinePlaceholder":148},[76,91559,91560],{"class":78,"line":1835},[76,91561,91562],{"class":540},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[76,91564,91565,91567,91569,91572,91574,91576,91579],{"class":78,"line":1847},[76,91566,75780],{"class":90},[76,91568,60277],{"class":86},[76,91570,91571],{"class":90},"(Max.",[76,91573,8094],{"class":86},[76,91575,123],{"class":90},[76,91577,91578],{"class":82},"...",[76,91580,91581],{"class":90},"arr))\n",[76,91583,91584,91586,91588],{"class":78,"line":1852},[76,91585,54449],{"class":90},[76,91587,53845],{"class":53332},[76,91589,53339],{"class":90},[76,91591,91592,91594,91596],{"class":78,"line":1862},[76,91593,53817],{"class":90},[76,91595,53832],{"class":53332},[76,91597,53339],{"class":90},[76,91599,91600],{"class":78,"line":1874},[76,91601,149],{"emptyLinePlaceholder":148},[76,91603,91604,91606,91608],{"class":78,"line":1879},[76,91605,53817],{"class":90},[76,91607,52667],{"class":53332},[76,91609,53339],{"class":90},[19,91611,91612],{},[3583,91613],{"alt":71,"src":91614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91616,91617],{"start":133},[29,91618,91619],{},"bind()",[19,91621,91622],{},[3583,91623],{"alt":71,"src":91624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91626,91627],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91629,91630],{},"bind的语法跟call很相似",[66,91632,91634],{"className":55099,"code":91633,"language":55101,"meta":71,"style":71},"\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",[73,91635,91636,91644,91652,91656,91661,91665,91669,91674,91678,91683,91688,91693,91698,91703,91708,91713,91717,91725],{"__ignoreMap":71},[76,91637,91638,91640,91642],{"class":78,"line":79},[76,91639,584],{"class":90},[76,91641,53832],{"class":53332},[76,91643,53339],{"class":90},[76,91645,91646,91648,91650],{"class":78,"line":94},[76,91647,54176],{"class":90},[76,91649,53845],{"class":53332},[76,91651,53339],{"class":90},[76,91653,91654],{"class":78,"line":133},[76,91655,73550],{"class":90},[76,91657,91658],{"class":78,"line":145},[76,91659,91660],{"class":90},"      age: 18\n",[76,91662,91663],{"class":78,"line":152},[76,91664,4283],{"class":90},[76,91666,91667],{"class":78,"line":157},[76,91668,79169],{"class":90},[76,91670,91671],{"class":78,"line":246},[76,91672,91673],{"class":90},"      console.log(this)\n",[76,91675,91676],{"class":78,"line":251},[76,91677,4283],{"class":90},[76,91679,91680],{"class":78,"line":257},[76,91681,91682],{"class":90},"    \u002F\u002F 1.bind 不会调用函数\n",[76,91684,91685],{"class":78,"line":641},[76,91686,91687],{"class":90},"    \u002F\u002F 2.bind能改变this的指向\n",[76,91689,91690],{"class":78,"line":646},[76,91691,91692],{"class":90},"    fn.bind()\n",[76,91694,91695],{"class":78,"line":659},[76,91696,91697],{"class":90},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[76,91699,91700],{"class":78,"line":1608},[76,91701,91702],{"class":90},"    const fun = fn.bind(obj)\n",[76,91704,91705],{"class":78,"line":1632},[76,91706,91707],{"class":90},"    \u002F\u002F console.log(fun)\n",[76,91709,91710],{"class":78,"line":1637},[76,91711,91712],{"class":90},"    \u002F\u002F 调用,查看this的指向\n",[76,91714,91715],{"class":78,"line":1642},[76,91716,54683],{"class":90},[76,91718,91719,91721,91723],{"class":78,"line":1652},[76,91720,54449],{"class":90},[76,91722,53845],{"class":53332},[76,91724,53339],{"class":90},[76,91726,91727,91729,91731],{"class":78,"line":1660},[76,91728,53817],{"class":90},[76,91730,53832],{"class":53332},[76,91732,53339],{"class":90},[19,91734,91735],{},[3583,91736],{"alt":71,"src":91737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91739,91740],{"start":145},[29,91741,91742],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[66,91744,91746],{"className":55099,"code":91745,"language":55101,"meta":71,"style":71},"\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",[73,91747,91748,91756,91769,91777,91782,91786,91791,91796,91801,91806,91811,91816,91821,91826,91830,91838],{"__ignoreMap":71},[76,91749,91750,91752,91754],{"class":78,"line":79},[76,91751,584],{"class":90},[76,91753,53832],{"class":53332},[76,91755,53339],{"class":90},[76,91757,91758,91760,91762,91765,91767],{"class":78,"line":94},[76,91759,54176],{"class":90},[76,91761,55918],{"class":53332},[76,91763,91764],{"class":90},">禁用\u003C\u002F",[76,91766,55918],{"class":53332},[76,91768,53339],{"class":90},[76,91770,91771,91773,91775],{"class":78,"line":133},[76,91772,54176],{"class":90},[76,91774,53845],{"class":53332},[76,91776,53339],{"class":90},[76,91778,91779],{"class":78,"line":145},[76,91780,91781],{"class":90},"    const btn = document.querySelector('button')\n",[76,91783,91784],{"class":78,"line":152},[76,91785,61045],{"class":90},[76,91787,91788],{"class":78,"line":157},[76,91789,91790],{"class":90},"      this.disabled = true\n",[76,91792,91793],{"class":78,"line":246},[76,91794,91795],{"class":90},"      \u002F\u002F 定时器是window进行调用的\n",[76,91797,91798],{"class":78,"line":251},[76,91799,91800],{"class":90},"      setTimeout(function () {\n",[76,91802,91803],{"class":78,"line":257},[76,91804,91805],{"class":90},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[76,91807,91808],{"class":78,"line":641},[76,91809,91810],{"class":90},"        this.disabled = false\n",[76,91812,91813],{"class":78,"line":646},[76,91814,91815],{"class":90},"      }.bind(this), 2000)\n",[76,91817,91818],{"class":78,"line":659},[76,91819,91820],{"class":90},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[76,91822,91823],{"class":78,"line":1608},[76,91824,91825],{"class":90},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[76,91827,91828],{"class":78,"line":1632},[76,91829,35499],{"class":90},[76,91831,91832,91834,91836],{"class":78,"line":1637},[76,91833,54449],{"class":90},[76,91835,53845],{"class":53332},[76,91837,53339],{"class":90},[76,91839,91840,91842,91844],{"class":78,"line":1642},[76,91841,53817],{"class":90},[76,91843,53832],{"class":53332},[76,91845,53339],{"class":90},[26,91847,91848],{"start":152},[29,91849,24002],{},[19,91851,91852],{},[3583,91853],{"alt":71,"src":91854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91856,91858],{"id":91857},"_417-性能优化","4.17 性能优化",[889,91860,91862],{"id":91861},"_4171-防抖","4.17.1 防抖",[19,91864,91865],{},[3583,91866],{"alt":71,"src":91867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91869,91870],{},[2416,91871,91872],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91874,91875],{},"防抖实现方式：",[3261,91877,91878],{},[29,91879,91880],{},"lodash 提供了防抖处理",[19,91882,91883],{},"_.debounce(func,[wait=0],[options={}])",[19,91885,91886],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[66,91888,91890],{"className":52665,"code":91889,"language":52667,"meta":71,"style":71},"\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",[73,91891,91892,91902,91916,91920,91928,91942,91962,91974,91982,91988,91998,92010,92022,92033,92045,92055,92065,92078,92082,92090,92098,92102,92110,92128,92146,92154,92173,92183,92192,92203,92208,92212,92217,92222,92227,92252,92260,92268,92272],{"__ignoreMap":71},[76,91893,91894,91896,91898,91900],{"class":78,"line":79},[76,91895,53329],{"class":90},[76,91897,53333],{"class":53332},[76,91899,53336],{"class":86},[76,91901,53339],{"class":90},[76,91903,91904,91906,91908,91910,91912,91914],{"class":78,"line":94},[76,91905,584],{"class":90},[76,91907,52667],{"class":53332},[76,91909,53348],{"class":86},[76,91911,370],{"class":90},[76,91913,53353],{"class":126},[76,91915,53339],{"class":90},[76,91917,91918],{"class":78,"line":133},[76,91919,149],{"emptyLinePlaceholder":148},[76,91921,91922,91924,91926],{"class":78,"line":145},[76,91923,584],{"class":90},[76,91925,53366],{"class":53332},[76,91927,53339],{"class":90},[76,91929,91930,91932,91934,91936,91938,91940],{"class":78,"line":152},[76,91931,54176],{"class":90},[76,91933,53376],{"class":53332},[76,91935,53379],{"class":86},[76,91937,370],{"class":90},[76,91939,53384],{"class":126},[76,91941,53339],{"class":90},[76,91943,91944,91946,91948,91950,91952,91954,91956,91958,91960],{"class":78,"line":157},[76,91945,54176],{"class":90},[76,91947,53376],{"class":53332},[76,91949,16972],{"class":86},[76,91951,370],{"class":90},[76,91953,53423],{"class":126},[76,91955,53403],{"class":86},[76,91957,370],{"class":90},[76,91959,53430],{"class":126},[76,91961,53339],{"class":90},[76,91963,91964,91966,91968,91970,91972],{"class":78,"line":246},[76,91965,54176],{"class":90},[76,91967,53439],{"class":53332},[76,91969,53442],{"class":90},[76,91971,53439],{"class":53332},[76,91973,53339],{"class":90},[76,91975,91976,91978,91980],{"class":78,"line":251},[76,91977,54176],{"class":90},[76,91979,2178],{"class":53332},[76,91981,53339],{"class":90},[76,91983,91984,91986],{"class":78,"line":257},[76,91985,56783],{"class":86},[76,91987,17623],{"class":90},[76,91989,91990,91992,91994,91996],{"class":78,"line":641},[76,91991,74623],{"class":119},[76,91993,53469],{"class":90},[76,91995,62534],{"class":119},[76,91997,3415],{"class":90},[76,91999,92000,92002,92004,92006,92008],{"class":78,"line":646},[76,92001,56802],{"class":119},[76,92003,53469],{"class":90},[76,92005,2133],{"class":119},[76,92007,53524],{"class":82},[76,92009,3415],{"class":90},[76,92011,92012,92014,92016,92018,92020],{"class":78,"line":659},[76,92013,56816],{"class":119},[76,92015,53469],{"class":90},[76,92017,2133],{"class":119},[76,92019,53524],{"class":82},[76,92021,3415],{"class":90},[76,92023,92024,92026,92028,92031],{"class":78,"line":1608},[76,92025,56915],{"class":119},[76,92027,53469],{"class":90},[76,92029,92030],{"class":119},"gray",[76,92032,3415],{"class":90},[76,92034,92035,92037,92039,92041,92043],{"class":78,"line":1632},[76,92036,56953],{"class":119},[76,92038,53469],{"class":90},[76,92040,3083],{"class":119},[76,92042,53524],{"class":82},[76,92044,3415],{"class":90},[76,92046,92047,92049,92051,92053],{"class":78,"line":1637},[76,92048,59446],{"class":119},[76,92050,53469],{"class":90},[76,92052,62870],{"class":119},[76,92054,3415],{"class":90},[76,92056,92057,92059,92061,92063],{"class":78,"line":1642},[76,92058,59316],{"class":119},[76,92060,53469],{"class":90},[76,92062,53624],{"class":119},[76,92064,3415],{"class":90},[76,92066,92067,92070,92072,92074,92076],{"class":78,"line":1652},[76,92068,92069],{"class":119},"      padding-top",[76,92071,53469],{"class":90},[76,92073,2583],{"class":119},[76,92075,53524],{"class":82},[76,92077,3415],{"class":90},[76,92079,92080],{"class":78,"line":1660},[76,92081,4283],{"class":90},[76,92083,92084,92086,92088],{"class":78,"line":1683},[76,92085,54449],{"class":90},[76,92087,2178],{"class":53332},[76,92089,53339],{"class":90},[76,92091,92092,92094,92096],{"class":78,"line":1698},[76,92093,53817],{"class":90},[76,92095,53366],{"class":53332},[76,92097,53339],{"class":90},[76,92099,92100],{"class":78,"line":1711},[76,92101,149],{"emptyLinePlaceholder":148},[76,92103,92104,92106,92108],{"class":78,"line":1717},[76,92105,584],{"class":90},[76,92107,53832],{"class":53332},[76,92109,53339],{"class":90},[76,92111,92112,92114,92116,92118,92120,92122,92124,92126],{"class":78,"line":1728},[76,92113,54176],{"class":90},[76,92115,53643],{"class":53332},[76,92117,55518],{"class":86},[76,92119,370],{"class":90},[76,92121,55523],{"class":126},[76,92123,57345],{"class":90},[76,92125,53643],{"class":53332},[76,92127,53339],{"class":90},[76,92129,92130,92132,92134,92136,92138,92140,92142,92144],{"class":78,"line":1740},[76,92131,54176],{"class":90},[76,92133,53845],{"class":53332},[76,92135,57270],{"class":86},[76,92137,370],{"class":90},[76,92139,90298],{"class":126},[76,92141,57345],{"class":90},[76,92143,53845],{"class":53332},[76,92145,53339],{"class":90},[76,92147,92148,92150,92152],{"class":78,"line":1746},[76,92149,54176],{"class":90},[76,92151,53845],{"class":53332},[76,92153,53339],{"class":90},[76,92155,92156,92158,92160,92162,92164,92166,92168,92171],{"class":78,"line":1751},[76,92157,13275],{"class":82},[76,92159,88957],{"class":119},[76,92161,15617],{"class":82},[76,92163,56427],{"class":90},[76,92165,56430],{"class":86},[76,92167,123],{"class":90},[76,92169,92170],{"class":126},"'.box'",[76,92172,130],{"class":90},[76,92174,92175,92177,92179,92181],{"class":78,"line":1756},[76,92176,54251],{"class":82},[76,92178,11505],{"class":90},[76,92180,370],{"class":82},[76,92182,1027],{"class":119},[76,92184,92185,92187,92190],{"class":78,"line":1766},[76,92186,72112],{"class":82},[76,92188,92189],{"class":86}," mouseMove",[76,92191,12909],{"class":90},[76,92193,92194,92197,92199,92201],{"class":78,"line":1773},[76,92195,92196],{"class":90},"      box.innerHTML ",[76,92198,370],{"class":82},[76,92200,5119],{"class":90},[76,92202,4790],{"class":82},[76,92204,92205],{"class":78,"line":1793},[76,92206,92207],{"class":540},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[76,92209,92210],{"class":78,"line":1806},[76,92211,4283],{"class":90},[76,92213,92214],{"class":78,"line":1817},[76,92215,92216],{"class":540},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[76,92218,92219],{"class":78,"line":1822},[76,92220,92221],{"class":540},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[76,92223,92224],{"class":78,"line":1835},[76,92225,92226],{"class":540},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[76,92228,92229,92232,92234,92236,92239,92242,92245,92248,92250],{"class":78,"line":1847},[76,92230,92231],{"class":90},"    box.",[76,92233,59843],{"class":86},[76,92235,123],{"class":90},[76,92237,92238],{"class":126},"'mousemove'",[76,92240,92241],{"class":90},", _.",[76,92243,92244],{"class":86},"debounce",[76,92246,92247],{"class":90},"(mouseMove, ",[76,92249,67102],{"class":119},[76,92251,656],{"class":90},[76,92253,92254,92256,92258],{"class":78,"line":1852},[76,92255,54449],{"class":90},[76,92257,53845],{"class":53332},[76,92259,53339],{"class":90},[76,92261,92262,92264,92266],{"class":78,"line":1862},[76,92263,53817],{"class":90},[76,92265,53832],{"class":53332},[76,92267,53339],{"class":90},[76,92269,92270],{"class":78,"line":1874},[76,92271,149],{"emptyLinePlaceholder":148},[76,92273,92274,92276,92278],{"class":78,"line":1879},[76,92275,53817],{"class":90},[76,92277,52667],{"class":53332},[76,92279,53339],{"class":90},[3261,92281,92282],{},[29,92283,92284],{},"手写一个防抖函数来处理",[19,92286,92287],{},"防抖的核心就是利用定时器来实现的：",[19,92289,92290],{},"①声明一个定时器变量",[19,92292,92293],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92295,92296],{},"③如果没有定时器则开启定时器，记得存到变量里面",[66,92298,92300],{"className":52665,"code":92299,"language":52667,"meta":71,"style":71},"\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",[73,92301,92302,92312,92326,92330,92338,92352,92372,92384,92392,92398,92408,92420,92432,92442,92454,92464,92474,92486,92490,92498,92506,92510,92518,92536,92554,92562,92580,92590,92598,92608,92612,92616,92620,92625,92630,92635,92640,92645,92650,92668,92675,92680,92688,92693,92706,92722,92732,92737,92741,92745,92765,92769,92774,92779,92784,92789,92797,92805,92809],{"__ignoreMap":71},[76,92303,92304,92306,92308,92310],{"class":78,"line":79},[76,92305,53329],{"class":90},[76,92307,53333],{"class":53332},[76,92309,53336],{"class":86},[76,92311,53339],{"class":90},[76,92313,92314,92316,92318,92320,92322,92324],{"class":78,"line":94},[76,92315,584],{"class":90},[76,92317,52667],{"class":53332},[76,92319,53348],{"class":86},[76,92321,370],{"class":90},[76,92323,53353],{"class":126},[76,92325,53339],{"class":90},[76,92327,92328],{"class":78,"line":133},[76,92329,149],{"emptyLinePlaceholder":148},[76,92331,92332,92334,92336],{"class":78,"line":145},[76,92333,584],{"class":90},[76,92335,53366],{"class":53332},[76,92337,53339],{"class":90},[76,92339,92340,92342,92344,92346,92348,92350],{"class":78,"line":152},[76,92341,54176],{"class":90},[76,92343,53376],{"class":53332},[76,92345,53379],{"class":86},[76,92347,370],{"class":90},[76,92349,53384],{"class":126},[76,92351,53339],{"class":90},[76,92353,92354,92356,92358,92360,92362,92364,92366,92368,92370],{"class":78,"line":157},[76,92355,54176],{"class":90},[76,92357,53376],{"class":53332},[76,92359,16972],{"class":86},[76,92361,370],{"class":90},[76,92363,53423],{"class":126},[76,92365,53403],{"class":86},[76,92367,370],{"class":90},[76,92369,53430],{"class":126},[76,92371,53339],{"class":90},[76,92373,92374,92376,92378,92380,92382],{"class":78,"line":246},[76,92375,54176],{"class":90},[76,92377,53439],{"class":53332},[76,92379,53442],{"class":90},[76,92381,53439],{"class":53332},[76,92383,53339],{"class":90},[76,92385,92386,92388,92390],{"class":78,"line":251},[76,92387,54176],{"class":90},[76,92389,2178],{"class":53332},[76,92391,53339],{"class":90},[76,92393,92394,92396],{"class":78,"line":257},[76,92395,56783],{"class":86},[76,92397,17623],{"class":90},[76,92399,92400,92402,92404,92406],{"class":78,"line":641},[76,92401,74623],{"class":119},[76,92403,53469],{"class":90},[76,92405,62534],{"class":119},[76,92407,3415],{"class":90},[76,92409,92410,92412,92414,92416,92418],{"class":78,"line":646},[76,92411,56802],{"class":119},[76,92413,53469],{"class":90},[76,92415,2133],{"class":119},[76,92417,53524],{"class":82},[76,92419,3415],{"class":90},[76,92421,92422,92424,92426,92428,92430],{"class":78,"line":659},[76,92423,56816],{"class":119},[76,92425,53469],{"class":90},[76,92427,2133],{"class":119},[76,92429,53524],{"class":82},[76,92431,3415],{"class":90},[76,92433,92434,92436,92438,92440],{"class":78,"line":1608},[76,92435,56915],{"class":119},[76,92437,53469],{"class":90},[76,92439,92030],{"class":119},[76,92441,3415],{"class":90},[76,92443,92444,92446,92448,92450,92452],{"class":78,"line":1632},[76,92445,56953],{"class":119},[76,92447,53469],{"class":90},[76,92449,3083],{"class":119},[76,92451,53524],{"class":82},[76,92453,3415],{"class":90},[76,92455,92456,92458,92460,92462],{"class":78,"line":1637},[76,92457,59446],{"class":119},[76,92459,53469],{"class":90},[76,92461,62870],{"class":119},[76,92463,3415],{"class":90},[76,92465,92466,92468,92470,92472],{"class":78,"line":1642},[76,92467,59316],{"class":119},[76,92469,53469],{"class":90},[76,92471,53624],{"class":119},[76,92473,3415],{"class":90},[76,92475,92476,92478,92480,92482,92484],{"class":78,"line":1652},[76,92477,92069],{"class":119},[76,92479,53469],{"class":90},[76,92481,2583],{"class":119},[76,92483,53524],{"class":82},[76,92485,3415],{"class":90},[76,92487,92488],{"class":78,"line":1660},[76,92489,4283],{"class":90},[76,92491,92492,92494,92496],{"class":78,"line":1683},[76,92493,54449],{"class":90},[76,92495,2178],{"class":53332},[76,92497,53339],{"class":90},[76,92499,92500,92502,92504],{"class":78,"line":1698},[76,92501,53817],{"class":90},[76,92503,53366],{"class":53332},[76,92505,53339],{"class":90},[76,92507,92508],{"class":78,"line":1711},[76,92509,149],{"emptyLinePlaceholder":148},[76,92511,92512,92514,92516],{"class":78,"line":1717},[76,92513,584],{"class":90},[76,92515,53832],{"class":53332},[76,92517,53339],{"class":90},[76,92519,92520,92522,92524,92526,92528,92530,92532,92534],{"class":78,"line":1728},[76,92521,54176],{"class":90},[76,92523,53643],{"class":53332},[76,92525,55518],{"class":86},[76,92527,370],{"class":90},[76,92529,55523],{"class":126},[76,92531,57345],{"class":90},[76,92533,53643],{"class":53332},[76,92535,53339],{"class":90},[76,92537,92538,92540,92542,92544,92546,92548,92550,92552],{"class":78,"line":1740},[76,92539,54176],{"class":90},[76,92541,53845],{"class":53332},[76,92543,57270],{"class":86},[76,92545,370],{"class":90},[76,92547,90298],{"class":126},[76,92549,57345],{"class":90},[76,92551,53845],{"class":53332},[76,92553,53339],{"class":90},[76,92555,92556,92558,92560],{"class":78,"line":1746},[76,92557,54176],{"class":90},[76,92559,53845],{"class":53332},[76,92561,53339],{"class":90},[76,92563,92564,92566,92568,92570,92572,92574,92576,92578],{"class":78,"line":1751},[76,92565,13275],{"class":82},[76,92567,88957],{"class":119},[76,92569,15617],{"class":82},[76,92571,56427],{"class":90},[76,92573,56430],{"class":86},[76,92575,123],{"class":90},[76,92577,92170],{"class":126},[76,92579,130],{"class":90},[76,92581,92582,92584,92586,92588],{"class":78,"line":1756},[76,92583,54251],{"class":82},[76,92585,11505],{"class":90},[76,92587,370],{"class":82},[76,92589,1027],{"class":119},[76,92591,92592,92594,92596],{"class":78,"line":1766},[76,92593,72112],{"class":82},[76,92595,92189],{"class":86},[76,92597,12909],{"class":90},[76,92599,92600,92602,92604,92606],{"class":78,"line":1773},[76,92601,92196],{"class":90},[76,92603,370],{"class":82},[76,92605,5119],{"class":90},[76,92607,4790],{"class":82},[76,92609,92610],{"class":78,"line":1793},[76,92611,92207],{"class":540},[76,92613,92614],{"class":78,"line":1806},[76,92615,4283],{"class":90},[76,92617,92618],{"class":78,"line":1817},[76,92619,92216],{"class":540},[76,92621,92622],{"class":78,"line":1822},[76,92623,92624],{"class":540},"    \u002F\u002F 手写防抖函数\n",[76,92626,92627],{"class":78,"line":1835},[76,92628,92629],{"class":540},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[76,92631,92632],{"class":78,"line":1847},[76,92633,92634],{"class":540},"    \u002F\u002F 1.声明定时器变量\n",[76,92636,92637],{"class":78,"line":1852},[76,92638,92639],{"class":540},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[76,92641,92642],{"class":78,"line":1862},[76,92643,92644],{"class":540},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[76,92646,92647],{"class":78,"line":1874},[76,92648,92649],{"class":540},"    \u002F\u002F 4.定时器里面写函数调用\n",[76,92651,92652,92654,92657,92659,92662,92664,92666],{"class":78,"line":1879},[76,92653,72112],{"class":82},[76,92655,92656],{"class":86}," debounce",[76,92658,123],{"class":90},[76,92660,92661],{"class":7296},"fn",[76,92663,405],{"class":90},[76,92665,2978],{"class":7296},[76,92667,14495],{"class":90},[76,92669,92670,92672],{"class":78,"line":1884},[76,92671,81797],{"class":82},[76,92673,92674],{"class":90}," timer\n",[76,92676,92677],{"class":78,"line":1889},[76,92678,92679],{"class":540},"      \u002F\u002F return 返回一个匿名函数\n",[76,92681,92682,92684,92686],{"class":78,"line":1900},[76,92683,76009],{"class":82},[76,92685,60947],{"class":82},[76,92687,56483],{"class":90},[76,92689,92690],{"class":78,"line":1906},[76,92691,92692],{"class":540},"        \u002F\u002F 这里边写第二三四步\n",[76,92694,92695,92697,92700,92703],{"class":78,"line":1924},[76,92696,4592],{"class":82},[76,92698,92699],{"class":90}," (timer) ",[76,92701,92702],{"class":86},"clearTimeout",[76,92704,92705],{"class":90},"(timer)\n",[76,92707,92708,92711,92713,92716,92718,92720],{"class":78,"line":1929},[76,92709,92710],{"class":90},"        timer ",[76,92712,370],{"class":82},[76,92714,92715],{"class":86}," setTimeout",[76,92717,123],{"class":90},[76,92719,56480],{"class":82},[76,92721,56483],{"class":90},[76,92723,92724,92727,92729],{"class":78,"line":1944},[76,92725,92726],{"class":86},"          fn",[76,92728,15103],{"class":90},[76,92730,92731],{"class":540},"\u002F\u002F加小括号调用fn }, t)\n",[76,92733,92734],{"class":78,"line":1950},[76,92735,92736],{"class":90},"        }, t)\n",[76,92738,92739],{"class":78,"line":1965},[76,92740,54430],{"class":90},[76,92742,92743],{"class":78,"line":1971},[76,92744,4283],{"class":90},[76,92746,92747,92749,92751,92753,92755,92757,92759,92761,92763],{"class":78,"line":1985},[76,92748,92231],{"class":90},[76,92750,59843],{"class":86},[76,92752,123],{"class":90},[76,92754,92238],{"class":126},[76,92756,405],{"class":90},[76,92758,92244],{"class":86},[76,92760,92247],{"class":90},[76,92762,67102],{"class":119},[76,92764,656],{"class":90},[76,92766,92767],{"class":78,"line":1991},[76,92768,149],{"emptyLinePlaceholder":148},[76,92770,92771],{"class":78,"line":2005},[76,92772,92773],{"class":540},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[76,92775,92776],{"class":78,"line":2017},[76,92777,92778],{"class":540},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[76,92780,92781],{"class":78,"line":2023},[76,92782,92783],{"class":540},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[76,92785,92786],{"class":78,"line":2031},[76,92787,92788],{"class":540},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[76,92790,92791,92793,92795],{"class":78,"line":11880},[76,92792,54449],{"class":90},[76,92794,53845],{"class":53332},[76,92796,53339],{"class":90},[76,92798,92799,92801,92803],{"class":78,"line":11901},[76,92800,53817],{"class":90},[76,92802,53832],{"class":53332},[76,92804,53339],{"class":90},[76,92806,92807],{"class":78,"line":11907},[76,92808,149],{"emptyLinePlaceholder":148},[76,92810,92811,92813,92815],{"class":78,"line":11921},[76,92812,53817],{"class":90},[76,92814,52667],{"class":53332},[76,92816,53339],{"class":90},[889,92818,92820],{"id":92819},"_4172-节流","4.17.2 节流",[19,92822,92823],{},[3583,92824],{"alt":71,"src":92825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92827,92828],{},[3583,92829],{"alt":71,"src":92830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92832,92833],{},[2416,92834,92835],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92837,92838],{},"实现方式：",[3261,92840,92841],{},[29,92842,92843],{},"lodash 提供的节流函数来处理",[19,92845,92846],{},"_.throttle(func,[wait=0],[options=])",[19,92848,92849],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[66,92851,92853],{"className":52665,"code":92852,"language":52667,"meta":71,"style":71},"\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",[73,92854,92855,92865,92879,92883,92891,92905,92925,92937,92945,92951,92961,92973,92985,92995,93007,93017,93027,93039,93043,93051,93059,93063,93071,93089,93107,93115,93133,93143,93151,93161,93165,93169,93173,93178,93183,93204,93212,93220,93224],{"__ignoreMap":71},[76,92856,92857,92859,92861,92863],{"class":78,"line":79},[76,92858,53329],{"class":90},[76,92860,53333],{"class":53332},[76,92862,53336],{"class":86},[76,92864,53339],{"class":90},[76,92866,92867,92869,92871,92873,92875,92877],{"class":78,"line":94},[76,92868,584],{"class":90},[76,92870,52667],{"class":53332},[76,92872,53348],{"class":86},[76,92874,370],{"class":90},[76,92876,53353],{"class":126},[76,92878,53339],{"class":90},[76,92880,92881],{"class":78,"line":133},[76,92882,149],{"emptyLinePlaceholder":148},[76,92884,92885,92887,92889],{"class":78,"line":145},[76,92886,584],{"class":90},[76,92888,53366],{"class":53332},[76,92890,53339],{"class":90},[76,92892,92893,92895,92897,92899,92901,92903],{"class":78,"line":152},[76,92894,54176],{"class":90},[76,92896,53376],{"class":53332},[76,92898,53379],{"class":86},[76,92900,370],{"class":90},[76,92902,53384],{"class":126},[76,92904,53339],{"class":90},[76,92906,92907,92909,92911,92913,92915,92917,92919,92921,92923],{"class":78,"line":157},[76,92908,54176],{"class":90},[76,92910,53376],{"class":53332},[76,92912,16972],{"class":86},[76,92914,370],{"class":90},[76,92916,53423],{"class":126},[76,92918,53403],{"class":86},[76,92920,370],{"class":90},[76,92922,53430],{"class":126},[76,92924,53339],{"class":90},[76,92926,92927,92929,92931,92933,92935],{"class":78,"line":246},[76,92928,54176],{"class":90},[76,92930,53439],{"class":53332},[76,92932,53442],{"class":90},[76,92934,53439],{"class":53332},[76,92936,53339],{"class":90},[76,92938,92939,92941,92943],{"class":78,"line":251},[76,92940,54176],{"class":90},[76,92942,2178],{"class":53332},[76,92944,53339],{"class":90},[76,92946,92947,92949],{"class":78,"line":257},[76,92948,56783],{"class":86},[76,92950,17623],{"class":90},[76,92952,92953,92955,92957,92959],{"class":78,"line":641},[76,92954,74623],{"class":119},[76,92956,53469],{"class":90},[76,92958,62534],{"class":119},[76,92960,3415],{"class":90},[76,92962,92963,92965,92967,92969,92971],{"class":78,"line":646},[76,92964,56802],{"class":119},[76,92966,53469],{"class":90},[76,92968,2133],{"class":119},[76,92970,53524],{"class":82},[76,92972,3415],{"class":90},[76,92974,92975,92977,92979,92981,92983],{"class":78,"line":659},[76,92976,56816],{"class":119},[76,92978,53469],{"class":90},[76,92980,2133],{"class":119},[76,92982,53524],{"class":82},[76,92984,3415],{"class":90},[76,92986,92987,92989,92991,92993],{"class":78,"line":1608},[76,92988,56915],{"class":119},[76,92990,53469],{"class":90},[76,92992,92030],{"class":119},[76,92994,3415],{"class":90},[76,92996,92997,92999,93001,93003,93005],{"class":78,"line":1632},[76,92998,56953],{"class":119},[76,93000,53469],{"class":90},[76,93002,3083],{"class":119},[76,93004,53524],{"class":82},[76,93006,3415],{"class":90},[76,93008,93009,93011,93013,93015],{"class":78,"line":1637},[76,93010,59446],{"class":119},[76,93012,53469],{"class":90},[76,93014,62870],{"class":119},[76,93016,3415],{"class":90},[76,93018,93019,93021,93023,93025],{"class":78,"line":1642},[76,93020,59316],{"class":119},[76,93022,53469],{"class":90},[76,93024,53624],{"class":119},[76,93026,3415],{"class":90},[76,93028,93029,93031,93033,93035,93037],{"class":78,"line":1652},[76,93030,92069],{"class":119},[76,93032,53469],{"class":90},[76,93034,2583],{"class":119},[76,93036,53524],{"class":82},[76,93038,3415],{"class":90},[76,93040,93041],{"class":78,"line":1660},[76,93042,4283],{"class":90},[76,93044,93045,93047,93049],{"class":78,"line":1683},[76,93046,54449],{"class":90},[76,93048,2178],{"class":53332},[76,93050,53339],{"class":90},[76,93052,93053,93055,93057],{"class":78,"line":1698},[76,93054,53817],{"class":90},[76,93056,53366],{"class":53332},[76,93058,53339],{"class":90},[76,93060,93061],{"class":78,"line":1711},[76,93062,149],{"emptyLinePlaceholder":148},[76,93064,93065,93067,93069],{"class":78,"line":1717},[76,93066,584],{"class":90},[76,93068,53832],{"class":53332},[76,93070,53339],{"class":90},[76,93072,93073,93075,93077,93079,93081,93083,93085,93087],{"class":78,"line":1728},[76,93074,54176],{"class":90},[76,93076,53643],{"class":53332},[76,93078,55518],{"class":86},[76,93080,370],{"class":90},[76,93082,55523],{"class":126},[76,93084,57345],{"class":90},[76,93086,53643],{"class":53332},[76,93088,53339],{"class":90},[76,93090,93091,93093,93095,93097,93099,93101,93103,93105],{"class":78,"line":1740},[76,93092,54176],{"class":90},[76,93094,53845],{"class":53332},[76,93096,57270],{"class":86},[76,93098,370],{"class":90},[76,93100,90298],{"class":126},[76,93102,57345],{"class":90},[76,93104,53845],{"class":53332},[76,93106,53339],{"class":90},[76,93108,93109,93111,93113],{"class":78,"line":1746},[76,93110,54176],{"class":90},[76,93112,53845],{"class":53332},[76,93114,53339],{"class":90},[76,93116,93117,93119,93121,93123,93125,93127,93129,93131],{"class":78,"line":1751},[76,93118,13275],{"class":82},[76,93120,88957],{"class":119},[76,93122,15617],{"class":82},[76,93124,56427],{"class":90},[76,93126,56430],{"class":86},[76,93128,123],{"class":90},[76,93130,92170],{"class":126},[76,93132,130],{"class":90},[76,93134,93135,93137,93139,93141],{"class":78,"line":1756},[76,93136,54251],{"class":82},[76,93138,11505],{"class":90},[76,93140,370],{"class":82},[76,93142,1027],{"class":119},[76,93144,93145,93147,93149],{"class":78,"line":1766},[76,93146,72112],{"class":82},[76,93148,92189],{"class":86},[76,93150,12909],{"class":90},[76,93152,93153,93155,93157,93159],{"class":78,"line":1773},[76,93154,92196],{"class":90},[76,93156,370],{"class":82},[76,93158,5119],{"class":90},[76,93160,4790],{"class":82},[76,93162,93163],{"class":78,"line":1793},[76,93164,92207],{"class":540},[76,93166,93167],{"class":78,"line":1806},[76,93168,4283],{"class":90},[76,93170,93171],{"class":78,"line":1817},[76,93172,92216],{"class":540},[76,93174,93175],{"class":78,"line":1822},[76,93176,93177],{"class":540},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[76,93179,93180],{"class":78,"line":1835},[76,93181,93182],{"class":540},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[76,93184,93185,93187,93189,93191,93193,93195,93198,93200,93202],{"class":78,"line":1847},[76,93186,92231],{"class":90},[76,93188,59843],{"class":86},[76,93190,123],{"class":90},[76,93192,92238],{"class":126},[76,93194,92241],{"class":90},[76,93196,93197],{"class":86},"throttle",[76,93199,92247],{"class":90},[76,93201,67102],{"class":119},[76,93203,656],{"class":90},[76,93205,93206,93208,93210],{"class":78,"line":1852},[76,93207,54449],{"class":90},[76,93209,53845],{"class":53332},[76,93211,53339],{"class":90},[76,93213,93214,93216,93218],{"class":78,"line":1862},[76,93215,53817],{"class":90},[76,93217,53832],{"class":53332},[76,93219,53339],{"class":90},[76,93221,93222],{"class":78,"line":1874},[76,93223,149],{"emptyLinePlaceholder":148},[76,93225,93226,93228,93230],{"class":78,"line":1879},[76,93227,53817],{"class":90},[76,93229,52667],{"class":53332},[76,93231,53339],{"class":90},[3261,93233,93234],{},[29,93235,93236],{},"手写一个节流函数来处理",[19,93238,72979],{},[19,93240,92290],{},[19,93242,93243],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93245,93246],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[66,93248,93250],{"className":52665,"code":93249,"language":52667,"meta":71,"style":71},"\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",[73,93251,93252,93262,93276,93280,93288,93302,93322,93334,93342,93348,93358,93370,93382,93392,93404,93414,93424,93436,93440,93448,93456,93460,93468,93486,93504,93512,93530,93540,93548,93558,93562,93566,93570,93575,93580,93585,93590,93595,93600,93617,93623,93631,93642,93657,93664,93669,93674,93684,93689,93694,93699,93703,93707,93711,93731,93739,93747,93751],{"__ignoreMap":71},[76,93253,93254,93256,93258,93260],{"class":78,"line":79},[76,93255,53329],{"class":90},[76,93257,53333],{"class":53332},[76,93259,53336],{"class":86},[76,93261,53339],{"class":90},[76,93263,93264,93266,93268,93270,93272,93274],{"class":78,"line":94},[76,93265,584],{"class":90},[76,93267,52667],{"class":53332},[76,93269,53348],{"class":86},[76,93271,370],{"class":90},[76,93273,53353],{"class":126},[76,93275,53339],{"class":90},[76,93277,93278],{"class":78,"line":133},[76,93279,149],{"emptyLinePlaceholder":148},[76,93281,93282,93284,93286],{"class":78,"line":145},[76,93283,584],{"class":90},[76,93285,53366],{"class":53332},[76,93287,53339],{"class":90},[76,93289,93290,93292,93294,93296,93298,93300],{"class":78,"line":152},[76,93291,54176],{"class":90},[76,93293,53376],{"class":53332},[76,93295,53379],{"class":86},[76,93297,370],{"class":90},[76,93299,53384],{"class":126},[76,93301,53339],{"class":90},[76,93303,93304,93306,93308,93310,93312,93314,93316,93318,93320],{"class":78,"line":157},[76,93305,54176],{"class":90},[76,93307,53376],{"class":53332},[76,93309,16972],{"class":86},[76,93311,370],{"class":90},[76,93313,53423],{"class":126},[76,93315,53403],{"class":86},[76,93317,370],{"class":90},[76,93319,53430],{"class":126},[76,93321,53339],{"class":90},[76,93323,93324,93326,93328,93330,93332],{"class":78,"line":246},[76,93325,54176],{"class":90},[76,93327,53439],{"class":53332},[76,93329,53442],{"class":90},[76,93331,53439],{"class":53332},[76,93333,53339],{"class":90},[76,93335,93336,93338,93340],{"class":78,"line":251},[76,93337,54176],{"class":90},[76,93339,2178],{"class":53332},[76,93341,53339],{"class":90},[76,93343,93344,93346],{"class":78,"line":257},[76,93345,56783],{"class":86},[76,93347,17623],{"class":90},[76,93349,93350,93352,93354,93356],{"class":78,"line":641},[76,93351,74623],{"class":119},[76,93353,53469],{"class":90},[76,93355,62534],{"class":119},[76,93357,3415],{"class":90},[76,93359,93360,93362,93364,93366,93368],{"class":78,"line":646},[76,93361,56802],{"class":119},[76,93363,53469],{"class":90},[76,93365,2133],{"class":119},[76,93367,53524],{"class":82},[76,93369,3415],{"class":90},[76,93371,93372,93374,93376,93378,93380],{"class":78,"line":659},[76,93373,56816],{"class":119},[76,93375,53469],{"class":90},[76,93377,2133],{"class":119},[76,93379,53524],{"class":82},[76,93381,3415],{"class":90},[76,93383,93384,93386,93388,93390],{"class":78,"line":1608},[76,93385,56915],{"class":119},[76,93387,53469],{"class":90},[76,93389,92030],{"class":119},[76,93391,3415],{"class":90},[76,93393,93394,93396,93398,93400,93402],{"class":78,"line":1632},[76,93395,56953],{"class":119},[76,93397,53469],{"class":90},[76,93399,3083],{"class":119},[76,93401,53524],{"class":82},[76,93403,3415],{"class":90},[76,93405,93406,93408,93410,93412],{"class":78,"line":1637},[76,93407,59446],{"class":119},[76,93409,53469],{"class":90},[76,93411,62870],{"class":119},[76,93413,3415],{"class":90},[76,93415,93416,93418,93420,93422],{"class":78,"line":1642},[76,93417,59316],{"class":119},[76,93419,53469],{"class":90},[76,93421,53624],{"class":119},[76,93423,3415],{"class":90},[76,93425,93426,93428,93430,93432,93434],{"class":78,"line":1652},[76,93427,92069],{"class":119},[76,93429,53469],{"class":90},[76,93431,2583],{"class":119},[76,93433,53524],{"class":82},[76,93435,3415],{"class":90},[76,93437,93438],{"class":78,"line":1660},[76,93439,4283],{"class":90},[76,93441,93442,93444,93446],{"class":78,"line":1683},[76,93443,54449],{"class":90},[76,93445,2178],{"class":53332},[76,93447,53339],{"class":90},[76,93449,93450,93452,93454],{"class":78,"line":1698},[76,93451,53817],{"class":90},[76,93453,53366],{"class":53332},[76,93455,53339],{"class":90},[76,93457,93458],{"class":78,"line":1711},[76,93459,149],{"emptyLinePlaceholder":148},[76,93461,93462,93464,93466],{"class":78,"line":1717},[76,93463,584],{"class":90},[76,93465,53832],{"class":53332},[76,93467,53339],{"class":90},[76,93469,93470,93472,93474,93476,93478,93480,93482,93484],{"class":78,"line":1728},[76,93471,54176],{"class":90},[76,93473,53643],{"class":53332},[76,93475,55518],{"class":86},[76,93477,370],{"class":90},[76,93479,55523],{"class":126},[76,93481,57345],{"class":90},[76,93483,53643],{"class":53332},[76,93485,53339],{"class":90},[76,93487,93488,93490,93492,93494,93496,93498,93500,93502],{"class":78,"line":1740},[76,93489,54176],{"class":90},[76,93491,53845],{"class":53332},[76,93493,57270],{"class":86},[76,93495,370],{"class":90},[76,93497,90298],{"class":126},[76,93499,57345],{"class":90},[76,93501,53845],{"class":53332},[76,93503,53339],{"class":90},[76,93505,93506,93508,93510],{"class":78,"line":1746},[76,93507,54176],{"class":90},[76,93509,53845],{"class":53332},[76,93511,53339],{"class":90},[76,93513,93514,93516,93518,93520,93522,93524,93526,93528],{"class":78,"line":1751},[76,93515,13275],{"class":82},[76,93517,88957],{"class":119},[76,93519,15617],{"class":82},[76,93521,56427],{"class":90},[76,93523,56430],{"class":86},[76,93525,123],{"class":90},[76,93527,92170],{"class":126},[76,93529,130],{"class":90},[76,93531,93532,93534,93536,93538],{"class":78,"line":1756},[76,93533,54251],{"class":82},[76,93535,11505],{"class":90},[76,93537,370],{"class":82},[76,93539,1027],{"class":119},[76,93541,93542,93544,93546],{"class":78,"line":1766},[76,93543,72112],{"class":82},[76,93545,92189],{"class":86},[76,93547,12909],{"class":90},[76,93549,93550,93552,93554,93556],{"class":78,"line":1773},[76,93551,92196],{"class":90},[76,93553,370],{"class":82},[76,93555,5119],{"class":90},[76,93557,4790],{"class":82},[76,93559,93560],{"class":78,"line":1793},[76,93561,92207],{"class":540},[76,93563,93564],{"class":78,"line":1806},[76,93565,4283],{"class":90},[76,93567,93568],{"class":78,"line":1817},[76,93569,92216],{"class":540},[76,93571,93572],{"class":78,"line":1822},[76,93573,93574],{"class":540},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[76,93576,93577],{"class":78,"line":1835},[76,93578,93579],{"class":540},"    \u002F\u002F 1.声明一个定时器变量\n",[76,93581,93582],{"class":78,"line":1847},[76,93583,93584],{"class":540},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[76,93586,93587],{"class":78,"line":1852},[76,93588,93589],{"class":540},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[76,93591,93592],{"class":78,"line":1862},[76,93593,93594],{"class":540},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[76,93596,93597],{"class":78,"line":1874},[76,93598,93599],{"class":540},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[76,93601,93602,93604,93607,93609,93611,93613,93615],{"class":78,"line":1879},[76,93603,72112],{"class":82},[76,93605,93606],{"class":86}," throttle",[76,93608,123],{"class":90},[76,93610,92661],{"class":7296},[76,93612,405],{"class":90},[76,93614,2978],{"class":7296},[76,93616,14495],{"class":90},[76,93618,93619,93621],{"class":78,"line":1884},[76,93620,81797],{"class":82},[76,93622,92674],{"class":90},[76,93624,93625,93627,93629],{"class":78,"line":1889},[76,93626,76009],{"class":82},[76,93628,60947],{"class":82},[76,93630,56483],{"class":90},[76,93632,93633,93635,93637,93639],{"class":78,"line":1900},[76,93634,4592],{"class":82},[76,93636,3770],{"class":90},[76,93638,2491],{"class":82},[76,93640,93641],{"class":90},"timer) {\n",[76,93643,93644,93647,93649,93651,93653,93655],{"class":78,"line":1906},[76,93645,93646],{"class":90},"          timer ",[76,93648,370],{"class":82},[76,93650,92715],{"class":86},[76,93652,123],{"class":90},[76,93654,56480],{"class":82},[76,93656,56483],{"class":90},[76,93658,93659,93662],{"class":78,"line":1924},[76,93660,93661],{"class":86},"            fn",[76,93663,4072],{"class":90},[76,93665,93666],{"class":78,"line":1929},[76,93667,93668],{"class":540},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[76,93670,93671],{"class":78,"line":1944},[76,93672,93673],{"class":540},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[76,93675,93676,93679,93681],{"class":78,"line":1950},[76,93677,93678],{"class":90},"            timer ",[76,93680,370],{"class":82},[76,93682,93683],{"class":119}," null\n",[76,93685,93686],{"class":78,"line":1965},[76,93687,93688],{"class":540},"            \u002F\u002F 不能用clearTimeout(timer)\n",[76,93690,93691],{"class":78,"line":1971},[76,93692,93693],{"class":540},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[76,93695,93696],{"class":78,"line":1985},[76,93697,93698],{"class":90},"          }, t)\n",[76,93700,93701],{"class":78,"line":1991},[76,93702,4624],{"class":90},[76,93704,93705],{"class":78,"line":2005},[76,93706,54430],{"class":90},[76,93708,93709],{"class":78,"line":2017},[76,93710,4283],{"class":90},[76,93712,93713,93715,93717,93719,93721,93723,93725,93727,93729],{"class":78,"line":2023},[76,93714,92231],{"class":90},[76,93716,59843],{"class":86},[76,93718,123],{"class":90},[76,93720,92238],{"class":126},[76,93722,405],{"class":90},[76,93724,93197],{"class":86},[76,93726,92247],{"class":90},[76,93728,67102],{"class":119},[76,93730,656],{"class":90},[76,93732,93733,93735,93737],{"class":78,"line":2031},[76,93734,54449],{"class":90},[76,93736,53845],{"class":53332},[76,93738,53339],{"class":90},[76,93740,93741,93743,93745],{"class":78,"line":11880},[76,93742,53817],{"class":90},[76,93744,53832],{"class":53332},[76,93746,53339],{"class":90},[76,93748,93749],{"class":78,"line":11901},[76,93750,149],{"emptyLinePlaceholder":148},[76,93752,93753,93755,93757],{"class":78,"line":11907},[76,93754,53817],{"class":90},[76,93756,52667],{"class":53332},[76,93758,53339],{"class":90},[889,93760,93762],{"id":93761},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[66,93764,93766],{"className":55099,"code":93765,"language":55101,"meta":71,"style":71},"\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",[73,93767,93768,93776,93784,93789,93794,93799,93804,93808,93816],{"__ignoreMap":71},[76,93769,93770,93772,93774],{"class":78,"line":79},[76,93771,584],{"class":90},[76,93773,53832],{"class":53332},[76,93775,53339],{"class":90},[76,93777,93778,93780,93782],{"class":78,"line":94},[76,93779,54176],{"class":90},[76,93781,53845],{"class":53332},[76,93783,53339],{"class":90},[76,93785,93786],{"class":78,"line":133},[76,93787,93788],{"class":90},"    let timer = null\n",[76,93790,93791],{"class":78,"line":145},[76,93792,93793],{"class":90},"    timer = setTimeout(() => {\n",[76,93795,93796],{"class":78,"line":152},[76,93797,93798],{"class":90},"      clearTimeout(timer)\n",[76,93800,93801],{"class":78,"line":157},[76,93802,93803],{"class":90},"      console.log(timer)\n",[76,93805,93806],{"class":78,"line":246},[76,93807,62254],{"class":90},[76,93809,93810,93812,93814],{"class":78,"line":251},[76,93811,54449],{"class":90},[76,93813,53845],{"class":53332},[76,93815,53339],{"class":90},[76,93817,93818,93820,93822],{"class":78,"line":257},[76,93819,53817],{"class":90},[76,93821,53832],{"class":53332},[76,93823,53339],{"class":90},[19,93825,93826],{},"输出为1",[19,93828,93829],{},"在开启的定时器里边写清除定时器",[19,93831,93832],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[889,93834,93836],{"id":93835},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93838,93839],{},"页面打开，可以记录上一次的视频播放位置",[19,93841,93842],{},[3583,93843],{"alt":71,"src":93844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93846,93847],{},[3583,93848],{"alt":71,"src":93849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[66,93851,93853],{"className":52665,"code":93852,"language":52667,"meta":71,"style":71},"\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",[73,93854,93855,93865,93879,93883,93891,93905,93925,93945,93967,93980,93988,93994,94004,94014,94024,94028,94032,94039,94052,94064,94068,94072,94082,94094,94108,94112,94116,94123,94133,94146,94158,94168,94178,94194,94206,94210,94214,94222,94232,94244,94254,94264,94274,94278,94282,94292,94303,94307,94315,94323,94327,94335,94350,94365,94380,94401,94409,94417,94432,94454,94462,94477,94503,94529,94555,94563,94571,94590,94598,94603,94622,94627,94645,94650,94655,94663,94668,94682,94690,94695,94712,94716,94721,94743,94747,94755,94763,94767],{"__ignoreMap":71},[76,93856,93857,93859,93861,93863],{"class":78,"line":79},[76,93858,53329],{"class":90},[76,93860,53333],{"class":53332},[76,93862,53336],{"class":86},[76,93864,53339],{"class":90},[76,93866,93867,93869,93871,93873,93875,93877],{"class":78,"line":94},[76,93868,584],{"class":90},[76,93870,52667],{"class":53332},[76,93872,53348],{"class":86},[76,93874,370],{"class":90},[76,93876,53353],{"class":126},[76,93878,53339],{"class":90},[76,93880,93881],{"class":78,"line":133},[76,93882,149],{"emptyLinePlaceholder":148},[76,93884,93885,93887,93889],{"class":78,"line":145},[76,93886,584],{"class":90},[76,93888,53366],{"class":53332},[76,93890,53339],{"class":90},[76,93892,93893,93895,93897,93899,93901,93903],{"class":78,"line":152},[76,93894,54176],{"class":90},[76,93896,53376],{"class":53332},[76,93898,53379],{"class":86},[76,93900,370],{"class":90},[76,93902,53384],{"class":126},[76,93904,61156],{"class":90},[76,93906,93907,93909,93911,93913,93915,93917,93919,93921,93923],{"class":78,"line":157},[76,93908,54176],{"class":90},[76,93910,53376],{"class":53332},[76,93912,53395],{"class":86},[76,93914,370],{"class":90},[76,93916,53400],{"class":126},[76,93918,53403],{"class":86},[76,93920,370],{"class":90},[76,93922,53408],{"class":126},[76,93924,61156],{"class":90},[76,93926,93927,93929,93931,93933,93935,93937,93939,93941,93943],{"class":78,"line":246},[76,93928,54176],{"class":90},[76,93930,53376],{"class":53332},[76,93932,16972],{"class":86},[76,93934,370],{"class":90},[76,93936,53423],{"class":126},[76,93938,53403],{"class":86},[76,93940,370],{"class":90},[76,93942,53430],{"class":126},[76,93944,61156],{"class":90},[76,93946,93947,93949,93951,93953,93955,93958,93960,93962,93965],{"class":78,"line":251},[76,93948,54176],{"class":90},[76,93950,53376],{"class":53332},[76,93952,16972],{"class":86},[76,93954,370],{"class":90},[76,93956,93957],{"class":126},"\"referrer\"",[76,93959,53403],{"class":86},[76,93961,370],{"class":90},[76,93963,93964],{"class":126},"\"never\"",[76,93966,61156],{"class":90},[76,93968,93969,93971,93973,93976,93978],{"class":78,"line":257},[76,93970,54176],{"class":90},[76,93972,53439],{"class":53332},[76,93974,93975],{"class":90},">综合案例\u003C\u002F",[76,93977,53439],{"class":53332},[76,93979,53339],{"class":90},[76,93981,93982,93984,93986],{"class":78,"line":641},[76,93983,54176],{"class":90},[76,93985,2178],{"class":53332},[76,93987,53339],{"class":90},[76,93989,93990,93992],{"class":78,"line":646},[76,93991,8482],{"class":53332},[76,93993,17623],{"class":90},[76,93995,93996,93998,94000,94002],{"class":78,"line":659},[76,93997,56726],{"class":119},[76,93999,53469],{"class":90},[76,94001,1294],{"class":119},[76,94003,3415],{"class":90},[76,94005,94006,94008,94010,94012],{"class":78,"line":1608},[76,94007,56737],{"class":119},[76,94009,53469],{"class":90},[76,94011,1294],{"class":119},[76,94013,3415],{"class":90},[76,94015,94016,94018,94020,94022],{"class":78,"line":1632},[76,94017,74623],{"class":119},[76,94019,53469],{"class":90},[76,94021,62534],{"class":119},[76,94023,3415],{"class":90},[76,94025,94026],{"class":78,"line":1637},[76,94027,4283],{"class":90},[76,94029,94030],{"class":78,"line":1642},[76,94031,149],{"emptyLinePlaceholder":148},[76,94033,94034,94037],{"class":78,"line":1652},[76,94035,94036],{"class":86},"    .container",[76,94038,17623],{"class":90},[76,94040,94041,94043,94045,94048,94050],{"class":78,"line":1660},[76,94042,56802],{"class":119},[76,94044,53469],{"class":90},[76,94046,94047],{"class":119},"1200",[76,94049,53524],{"class":82},[76,94051,3415],{"class":90},[76,94053,94054,94056,94058,94060,94062],{"class":78,"line":1683},[76,94055,56737],{"class":119},[76,94057,53469],{"class":90},[76,94059,1294],{"class":119},[76,94061,53588],{"class":119},[76,94063,3415],{"class":90},[76,94065,94066],{"class":78,"line":1698},[76,94067,4283],{"class":90},[76,94069,94070],{"class":78,"line":1711},[76,94071,149],{"emptyLinePlaceholder":148},[76,94073,94074,94077,94080],{"class":78,"line":1717},[76,94075,94076],{"class":86},"    .video",[76,94078,94079],{"class":53332}," video",[76,94081,17623],{"class":90},[76,94083,94084,94086,94088,94090,94092],{"class":78,"line":1728},[76,94085,56802],{"class":119},[76,94087,53469],{"class":90},[76,94089,2575],{"class":119},[76,94091,2592],{"class":82},[76,94093,3415],{"class":90},[76,94095,94096,94098,94100,94102,94104,94106],{"class":78,"line":1740},[76,94097,56726],{"class":119},[76,94099,53469],{"class":90},[76,94101,408],{"class":119},[76,94103,53524],{"class":82},[76,94105,587],{"class":119},[76,94107,3415],{"class":90},[76,94109,94110],{"class":78,"line":1746},[76,94111,4283],{"class":90},[76,94113,94114],{"class":78,"line":1751},[76,94115,149],{"emptyLinePlaceholder":148},[76,94117,94118,94121],{"class":78,"line":1756},[76,94119,94120],{"class":86},"    .elevator",[76,94122,17623],{"class":90},[76,94124,94125,94127,94129,94131],{"class":78,"line":1766},[76,94126,56790],{"class":119},[76,94128,53469],{"class":90},[76,94130,88257],{"class":119},[76,94132,3415],{"class":90},[76,94134,94135,94137,94139,94142,94144],{"class":78,"line":1773},[76,94136,56978],{"class":119},[76,94138,53469],{"class":90},[76,94140,94141],{"class":119},"280",[76,94143,53524],{"class":82},[76,94145,3415],{"class":90},[76,94147,94148,94150,94152,94154,94156],{"class":78,"line":1793},[76,94149,88451],{"class":119},[76,94151,53469],{"class":90},[76,94153,408],{"class":119},[76,94155,53524],{"class":82},[76,94157,3415],{"class":90},[76,94159,94160,94162,94164,94166],{"class":78,"line":1806},[76,94161,88264],{"class":119},[76,94163,53469],{"class":90},[76,94165,88269],{"class":119},[76,94167,3415],{"class":90},[76,94169,94170,94172,94174,94176],{"class":78,"line":1817},[76,94171,63749],{"class":119},[76,94173,53469],{"class":90},[76,94175,62870],{"class":119},[76,94177,3415],{"class":90},[76,94179,94180,94182,94184,94186,94188,94190,94192],{"class":78,"line":1822},[76,94181,64005],{"class":119},[76,94183,53469],{"class":90},[76,94185,669],{"class":119},[76,94187,53524],{"class":82},[76,94189,53553],{"class":119},[76,94191,64272],{"class":119},[76,94193,3415],{"class":90},[76,94195,94196,94198,94200,94202,94204],{"class":78,"line":1835},[76,94197,56802],{"class":119},[76,94199,53469],{"class":90},[76,94201,3164],{"class":119},[76,94203,53524],{"class":82},[76,94205,3415],{"class":90},[76,94207,94208],{"class":78,"line":1847},[76,94209,4283],{"class":90},[76,94211,94212],{"class":78,"line":1852},[76,94213,149],{"emptyLinePlaceholder":148},[76,94215,94216,94218,94220],{"class":78,"line":1862},[76,94217,94120],{"class":86},[76,94219,3519],{"class":53332},[76,94221,17623],{"class":90},[76,94223,94224,94226,94228,94230],{"class":78,"line":1874},[76,94225,57040],{"class":119},[76,94227,53469],{"class":90},[76,94229,62897],{"class":119},[76,94231,3415],{"class":90},[76,94233,94234,94236,94238,94240,94242],{"class":78,"line":1879},[76,94235,56726],{"class":119},[76,94237,53469],{"class":90},[76,94239,402],{"class":119},[76,94241,53524],{"class":82},[76,94243,3415],{"class":90},[76,94245,94246,94248,94250,94252],{"class":78,"line":1884},[76,94247,65998],{"class":119},[76,94249,53469],{"class":90},[76,94251,56768],{"class":119},[76,94253,3415],{"class":90},[76,94255,94256,94258,94260,94262],{"class":78,"line":1889},[76,94257,59316],{"class":119},[76,94259,53469],{"class":90},[76,94261,53624],{"class":119},[76,94263,3415],{"class":90},[76,94265,94266,94268,94270,94272],{"class":78,"line":1900},[76,94267,59446],{"class":119},[76,94269,53469],{"class":90},[76,94271,64098],{"class":119},[76,94273,3415],{"class":90},[76,94275,94276],{"class":78,"line":1906},[76,94277,4283],{"class":90},[76,94279,94280],{"class":78,"line":1924},[76,94281,149],{"emptyLinePlaceholder":148},[76,94283,94284,94286,94288,94290],{"class":78,"line":1929},[76,94285,94120],{"class":86},[76,94287,3519],{"class":53332},[76,94289,66052],{"class":86},[76,94291,17623],{"class":90},[76,94293,94294,94296,94298,94301],{"class":78,"line":1944},[76,94295,59446],{"class":119},[76,94297,53469],{"class":90},[76,94299,94300],{"class":119},"#1286ff",[76,94302,3415],{"class":90},[76,94304,94305],{"class":78,"line":1950},[76,94306,4283],{"class":90},[76,94308,94309,94311,94313],{"class":78,"line":1965},[76,94310,54449],{"class":90},[76,94312,2178],{"class":53332},[76,94314,53339],{"class":90},[76,94316,94317,94319,94321],{"class":78,"line":1971},[76,94318,53817],{"class":90},[76,94320,53366],{"class":53332},[76,94322,53339],{"class":90},[76,94324,94325],{"class":78,"line":1985},[76,94326,149],{"emptyLinePlaceholder":148},[76,94328,94329,94331,94333],{"class":78,"line":1991},[76,94330,584],{"class":90},[76,94332,53832],{"class":53332},[76,94334,53339],{"class":90},[76,94336,94337,94339,94341,94343,94345,94348],{"class":78,"line":2005},[76,94338,54176],{"class":90},[76,94340,53643],{"class":53332},[76,94342,55518],{"class":86},[76,94344,370],{"class":90},[76,94346,94347],{"class":126},"\"container\"",[76,94349,53339],{"class":90},[76,94351,94352,94354,94356,94358,94360,94363],{"class":78,"line":2017},[76,94353,53373],{"class":90},[76,94355,53643],{"class":53332},[76,94357,55518],{"class":86},[76,94359,370],{"class":90},[76,94361,94362],{"class":126},"\"header\"",[76,94364,53339],{"class":90},[76,94366,94367,94369,94371,94373,94375,94378],{"class":78,"line":2023},[76,94368,57265],{"class":90},[76,94370,2503],{"class":53332},[76,94372,63085],{"class":86},[76,94374,370],{"class":90},[76,94376,94377],{"class":126},"\"http:\u002F\u002Fpip.itcast.cn\"",[76,94379,53339],{"class":90},[76,94381,94382,94384,94386,94388,94390,94393,94395,94397,94399],{"class":78,"line":2031},[76,94383,57333],{"class":90},[76,94385,3583],{"class":53332},[76,94387,57270],{"class":86},[76,94389,370],{"class":90},[76,94391,94392],{"class":126},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[76,94394,57278],{"class":86},[76,94396,370],{"class":90},[76,94398,9730],{"class":126},[76,94400,61156],{"class":90},[76,94402,94403,94405,94407],{"class":78,"line":11880},[76,94404,57438],{"class":90},[76,94406,2503],{"class":53332},[76,94408,53339],{"class":90},[76,94410,94411,94413,94415],{"class":78,"line":11901},[76,94412,53808],{"class":90},[76,94414,53643],{"class":53332},[76,94416,53339],{"class":90},[76,94418,94419,94421,94423,94425,94427,94430],{"class":78,"line":11907},[76,94420,53373],{"class":90},[76,94422,53643],{"class":53332},[76,94424,55518],{"class":86},[76,94426,370],{"class":90},[76,94428,94429],{"class":126},"\"video\"",[76,94431,53339],{"class":90},[76,94433,94434,94436,94438,94440,94442,94445,94448,94450,94452],{"class":78,"line":11921},[76,94435,57265],{"class":90},[76,94437,30232],{"class":53332},[76,94439,57270],{"class":86},[76,94441,370],{"class":90},[76,94443,94444],{"class":126},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[76,94446,94447],{"class":86}," controls",[76,94449,57345],{"class":90},[76,94451,30232],{"class":53332},[76,94453,53339],{"class":90},[76,94455,94456,94458,94460],{"class":78,"line":11927},[76,94457,53808],{"class":90},[76,94459,53643],{"class":53332},[76,94461,53339],{"class":90},[76,94463,94464,94466,94468,94470,94472,94475],{"class":78,"line":11954},[76,94465,53373],{"class":90},[76,94467,53643],{"class":53332},[76,94469,55518],{"class":86},[76,94471,370],{"class":90},[76,94473,94474],{"class":126},"\"elevator\"",[76,94476,53339],{"class":90},[76,94478,94479,94481,94483,94485,94487,94489,94492,94494,94496,94499,94501],{"class":78,"line":11963},[76,94480,57265],{"class":90},[76,94482,2503],{"class":53332},[76,94484,63085],{"class":86},[76,94486,370],{"class":90},[76,94488,66264],{"class":126},[76,94490,94491],{"class":86}," data-ref",[76,94493,370],{"class":90},[76,94495,94429],{"class":126},[76,94497,94498],{"class":90},">视频介绍\u003C\u002F",[76,94500,2503],{"class":53332},[76,94502,53339],{"class":90},[76,94504,94505,94507,94509,94511,94513,94515,94517,94519,94522,94525,94527],{"class":78,"line":11969},[76,94506,57265],{"class":90},[76,94508,2503],{"class":53332},[76,94510,63085],{"class":86},[76,94512,370],{"class":90},[76,94514,66264],{"class":126},[76,94516,94491],{"class":86},[76,94518,370],{"class":90},[76,94520,94521],{"class":126},"\"intro\"",[76,94523,94524],{"class":90},">课程简介\u003C\u002F",[76,94526,2503],{"class":53332},[76,94528,53339],{"class":90},[76,94530,94531,94533,94535,94537,94539,94541,94543,94545,94548,94551,94553],{"class":78,"line":11977},[76,94532,57265],{"class":90},[76,94534,2503],{"class":53332},[76,94536,63085],{"class":86},[76,94538,370],{"class":90},[76,94540,66264],{"class":126},[76,94542,94491],{"class":86},[76,94544,370],{"class":90},[76,94546,94547],{"class":126},"\"outline\"",[76,94549,94550],{"class":90},">评论列表\u003C\u002F",[76,94552,2503],{"class":53332},[76,94554,53339],{"class":90},[76,94556,94557,94559,94561],{"class":78,"line":11982},[76,94558,53808],{"class":90},[76,94560,53643],{"class":53332},[76,94562,53339],{"class":90},[76,94564,94565,94567,94569],{"class":78,"line":18654},[76,94566,54449],{"class":90},[76,94568,53643],{"class":53332},[76,94570,53339],{"class":90},[76,94572,94573,94575,94577,94579,94581,94584,94586,94588],{"class":78,"line":18660},[76,94574,54176],{"class":90},[76,94576,53845],{"class":53332},[76,94578,57270],{"class":86},[76,94580,370],{"class":90},[76,94582,94583],{"class":126},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[76,94585,57345],{"class":90},[76,94587,53845],{"class":53332},[76,94589,53339],{"class":90},[76,94591,94592,94594,94596],{"class":78,"line":18683},[76,94593,54176],{"class":90},[76,94595,53845],{"class":53332},[76,94597,53339],{"class":90},[76,94599,94600],{"class":78,"line":18689},[76,94601,94602],{"class":540},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[76,94604,94605,94607,94609,94611,94613,94615,94617,94620],{"class":78,"line":18712},[76,94606,13275],{"class":82},[76,94608,94079],{"class":119},[76,94610,15617],{"class":82},[76,94612,56427],{"class":90},[76,94614,56430],{"class":86},[76,94616,123],{"class":90},[76,94618,94619],{"class":126},"'video'",[76,94621,130],{"class":90},[76,94623,94624],{"class":78,"line":18726},[76,94625,94626],{"class":540},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[76,94628,94629,94632,94634,94636,94638,94641,94643],{"class":78,"line":18746},[76,94630,94631],{"class":90},"    video.ontimeupdate ",[76,94633,370],{"class":82},[76,94635,90379],{"class":90},[76,94637,93197],{"class":86},[76,94639,94640],{"class":90},"(() ",[76,94642,86746],{"class":82},[76,94644,17623],{"class":90},[76,94646,94647],{"class":78,"line":18752},[76,94648,94649],{"class":540},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[76,94651,94652],{"class":78,"line":18763},[76,94653,94654],{"class":540},"      \u002F\u002F 控制台输出当前的时间\n",[76,94656,94657,94660],{"class":78,"line":18786},[76,94658,94659],{"class":540},"      \u002F\u002F console.log(video.currentTime)",[76,94661,94662],{"class":540},"  \u002F\u002F获得当前的视频时间\n",[76,94664,94665],{"class":78,"line":18808},[76,94666,94667],{"class":540},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[76,94669,94670,94672,94674,94676,94679],{"class":78,"line":18813},[76,94671,76710],{"class":90},[76,94673,73681],{"class":86},[76,94675,123],{"class":90},[76,94677,94678],{"class":126},"'currentTime'",[76,94680,94681],{"class":90},", video.currentTime)\n",[76,94683,94684,94686,94688],{"class":78,"line":18819},[76,94685,56566],{"class":90},[76,94687,8489],{"class":119},[76,94689,130],{"class":90},[76,94691,94692],{"class":78,"line":18833},[76,94693,94694],{"class":540},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[76,94696,94697,94700,94703,94705,94708,94710],{"class":78,"line":18846},[76,94698,94699],{"class":90},"    video.",[76,94701,94702],{"class":86},"onloadeddata",[76,94704,15617],{"class":82},[76,94706,94707],{"class":90}," () ",[76,94709,86746],{"class":82},[76,94711,17623],{"class":90},[76,94713,94714],{"class":78,"line":18851},[76,94715,62041],{"class":540},[76,94717,94718],{"class":78,"line":18865},[76,94719,94720],{"class":540},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[76,94722,94723,94726,94728,94731,94733,94735,94737,94739,94741],{"class":78,"line":18870},[76,94724,94725],{"class":90},"      video.currentTime ",[76,94727,370],{"class":82},[76,94729,94730],{"class":90}," localStorage.",[76,94732,73712],{"class":86},[76,94734,123],{"class":90},[76,94736,94678],{"class":126},[76,94738,15767],{"class":90},[76,94740,73384],{"class":82},[76,94742,1027],{"class":119},[76,94744,94745],{"class":78,"line":18876},[76,94746,4283],{"class":90},[76,94748,94749,94751,94753],{"class":78,"line":18881},[76,94750,54449],{"class":90},[76,94752,53845],{"class":53332},[76,94754,53339],{"class":90},[76,94756,94757,94759,94761],{"class":78,"line":18895},[76,94758,53817],{"class":90},[76,94760,53832],{"class":53332},[76,94762,53339],{"class":90},[76,94764,94765],{"class":78,"line":18900},[76,94766,149],{"emptyLinePlaceholder":148},[76,94768,94769,94771,94773],{"class":78,"line":18905},[76,94770,53817],{"class":90},[76,94772,52667],{"class":53332},[76,94774,53339],{"class":90},[2178,94776,94777],{},"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":71,"searchDepth":94,"depth":94,"links":94779},[94780,94785,94789,94790,94791,94796,94801,94802,94803,94804,94811,94816,94817,94827,94831,94832,94836],{"id":78717,"depth":94,"text":78718,"children":94781},[94782,94783,94784],{"id":78721,"depth":133,"text":78722},{"id":78746,"depth":133,"text":78747},{"id":78758,"depth":133,"text":78759},{"id":78770,"depth":94,"text":78771,"children":94786},[94787,94788],{"id":78774,"depth":133,"text":78775},{"id":78789,"depth":133,"text":78790},{"id":78841,"depth":94,"text":78842},{"id":78885,"depth":94,"text":78886},{"id":78902,"depth":94,"text":78903,"children":94792},[94793,94794,94795],{"id":78906,"depth":133,"text":78907},{"id":78919,"depth":133,"text":78920},{"id":79024,"depth":133,"text":79025},{"id":79313,"depth":94,"text":79314,"children":94797},[94798,94799,94800],{"id":79317,"depth":133,"text":79318},{"id":79760,"depth":133,"text":79761},{"id":80171,"depth":133,"text":80172},{"id":80234,"depth":94,"text":80235},{"id":80313,"depth":94,"text":80314},{"id":80406,"depth":94,"text":80407},{"id":82249,"depth":94,"text":82250,"children":94805},[94806,94807,94808,94809,94810],{"id":82253,"depth":133,"text":82254},{"id":82265,"depth":133,"text":82266},{"id":82484,"depth":133,"text":82485},{"id":82502,"depth":133,"text":82503},{"id":82562,"depth":133,"text":82563},{"id":86830,"depth":94,"text":86831,"children":94812},[94813,94814,94815],{"id":86834,"depth":133,"text":86835},{"id":86852,"depth":133,"text":86853},{"id":86878,"depth":133,"text":86879},{"id":86887,"depth":94,"text":86888},{"id":86909,"depth":94,"text":86910,"children":94818},[94819,94820,94821,94822,94823,94824,94825,94826],{"id":86913,"depth":133,"text":86914},{"id":87174,"depth":133,"text":87175},{"id":87360,"depth":133,"text":87361},{"id":87727,"depth":133,"text":87728},{"id":87843,"depth":133,"text":87844},{"id":87879,"depth":133,"text":87880},{"id":87926,"depth":133,"text":87927},{"id":87960,"depth":133,"text":87961},{"id":89323,"depth":94,"text":89324,"children":94828},[94829,94830],{"id":89327,"depth":133,"text":89328},{"id":89364,"depth":133,"text":89365},{"id":90719,"depth":94,"text":90720},{"id":91090,"depth":94,"text":91091,"children":94833},[94834,94835],{"id":91094,"depth":133,"text":91095},{"id":91128,"depth":133,"text":91129},{"id":91857,"depth":94,"text":91858,"children":94837},[94838,94839,94840,94841],{"id":91861,"depth":133,"text":91862},{"id":92819,"depth":133,"text":92820},{"id":93761,"depth":133,"text":93762},{"id":93835,"depth":133,"text":93836},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78706,"description":2201},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94848,"title":94849,"body":94850,"description":94861,"extension":2202,"meta":94862,"navigation":148,"path":94864,"seo":94865,"stem":94866,"__hash__":94867},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94851,"toc":94859},[94852],[19,94853,94854,94855],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2503,94856,94857],{"href":94857,"rel":94858},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25914],{"title":71,"searchDepth":94,"depth":94,"links":94860},[],"三件套第三套学习",{"category":94863},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94849,"description":94861},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94869,"title":94870,"body":94871,"description":2201,"extension":2202,"meta":94976,"navigation":148,"path":94977,"seo":94978,"stem":94979,"__hash__":94980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94872,"toc":94971},[94873,94880,94883,94886,94889,94893,94902,94905,94908,94912,94921,94924,94928,94931,94951,94954,94968],[19,94874,94875],{},[2503,94876,94879],{"href":94877,"rel":94878},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25914],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94881,94870],{"id":94882},"_1安装",[19,94884,94885],{},"numpy是科学计算基础库,底层是C语言",[19,94887,94888],{},"三种方式：",[14,94890,94892],{"id":94891},"_11-通过pip安装","1.1 通过pip安装",[66,94894,94896],{"className":68,"code":94895,"language":70,"meta":71,"style":71},"pip install numpy\n",[73,94897,94898],{"__ignoreMap":71},[76,94899,94900],{"class":78,"line":79},[76,94901,94895],{"class":90},[19,94903,94904],{},"首选方式，自动处理依赖项",[19,94906,94907],{},"在提示系统命令符中使用cmd",[14,94909,94911],{"id":94910},"_12-通过anaconda安装","1.2 通过Anaconda安装",[66,94913,94915],{"className":68,"code":94914,"language":70,"meta":71,"style":71},"conda install numpy\n",[73,94916,94917],{"__ignoreMap":71},[76,94918,94919],{"class":78,"line":79},[76,94920,94914],{"class":90},[19,94922,94923],{},"自动解决环境依赖",[14,94925,94927],{"id":94926},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94929,94930],{},"对于Debian\u002FUbuntu",[66,94932,94934],{"className":68,"code":94933,"language":70,"meta":71,"style":71},"sudo apt-get install python3-numpy\n",[73,94935,94936],{"__ignoreMap":71},[76,94937,94938,94941,94943,94946,94948],{"class":78,"line":79},[76,94939,94940],{"class":90},"sudo apt",[76,94942,666],{"class":82},[76,94944,94945],{"class":90},"get install python3",[76,94947,666],{"class":82},[76,94949,94950],{"class":90},"numpy\n",[19,94952,94953],{},"对于Fedora:",[66,94955,94957],{"className":68,"code":94956,"language":70,"meta":71,"style":71},"sudo dnf install python3-numpy\n",[73,94958,94959],{"__ignoreMap":71},[76,94960,94961,94964,94966],{"class":78,"line":79},[76,94962,94963],{"class":90},"sudo dnf install python3",[76,94965,666],{"class":82},[76,94967,94950],{"class":90},[2178,94969,94970],{},"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":71,"searchDepth":94,"depth":94,"links":94972},[94973,94974,94975],{"id":94891,"depth":94,"text":94892},{"id":94910,"depth":94,"text":94911},{"id":94926,"depth":94,"text":94927},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94870,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94982,"title":94983,"body":94984,"description":2201,"extension":2202,"meta":95097,"navigation":148,"path":95098,"seo":95099,"stem":95100,"__hash__":95101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94985,"toc":95095},[94986,94989,94992,94995,94998,95001,95004,95007,95010,95013,95089,95092],[10,94987,94983],{"id":94988},"_10算数函数",[19,94990,94991],{},"加减乘除运算跟python基础语法没区别",[19,94993,94994],{},"除了python那种方法外还可以使用函数",[19,94996,94997],{},"加：np.add(a,b)",[19,94999,95000],{},"减：np.subtract(a,b)",[19,95002,95003],{},"乘：np.multiply(a,b)",[19,95005,95006],{},"除：np.divide(a,b) == a\u002Fb",[19,95008,95009],{},"取余：np.mod(a,b) == a%b",[19,95011,95012],{},"必须会的用法：",[66,95014,95016],{"className":68,"code":95015,"language":70,"meta":71,"style":71},"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",[73,95017,95018,95040,95061,95071,95084],{"__ignoreMap":71},[76,95019,95020,95022,95024,95027,95029,95032,95034,95036,95038],{"class":78,"line":79},[76,95021,2503],{"class":90},[76,95023,370],{"class":82},[76,95025,95026],{"class":90},"np.arange(",[76,95028,2684],{"class":119},[76,95030,95031],{"class":90},").reshape(",[76,95033,2339],{"class":119},[76,95035,2642],{"class":90},[76,95037,2339],{"class":119},[76,95039,130],{"class":90},[76,95041,95042,95044,95046,95049,95051,95053,95055,95057,95059],{"class":78,"line":94},[76,95043,2527],{"class":90},[76,95045,370],{"class":82},[76,95047,95048],{"class":90},"np.array([",[76,95050,402],{"class":119},[76,95052,2642],{"class":90},[76,95054,402],{"class":119},[76,95056,2642],{"class":90},[76,95058,402],{"class":119},[76,95060,6739],{"class":90},[76,95062,95063,95066,95068],{"class":78,"line":133},[76,95064,95065],{"class":90},"result",[76,95067,370],{"class":82},[76,95069,95070],{"class":90},"np.empty_like(a)\n",[76,95072,95073,95076,95079,95081],{"class":78,"line":145},[76,95074,95075],{"class":90},"np.add(a,b,",[76,95077,95078],{"class":7296},"out",[76,95080,370],{"class":82},[76,95082,95083],{"class":90},"result)\n",[76,95085,95086],{"class":78,"line":152},[76,95087,95088],{"class":90},"result\n",[19,95090,95091],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2178,95093,95094],{},"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":71,"searchDepth":94,"depth":94,"links":95096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94983,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95103,"title":95104,"body":95105,"description":2201,"extension":2202,"meta":95867,"navigation":148,"path":95868,"seo":95869,"stem":95870,"__hash__":95871},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95106,"toc":95854},[95107,95110,95113,95116,95120,95159,95163,95207,95267,95271,95274,95313,95316,95361,95365,95401,95405,95474,95478,95542,95546,95549,95552,95555,95558,95594,95598,95638,95642,95714,95717,95721,95784,95788,95851],[10,95108,95104],{"id":95109},"_11统计函数",[19,95111,95112],{},"sum max min mean",[19,95114,95115],{},"这些有axis参数，可以指定方向",[14,95117,95119],{"id":95118},"_111-sum求和函数","11.1 sum()求和函数",[66,95121,95123],{"className":68,"code":95122,"language":70,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[73,95124,95125,95130,95151],{"__ignoreMap":71},[76,95126,95127],{"class":78,"line":79},[76,95128,95129],{"class":540},"#创建一维数组\n",[76,95131,95132,95134,95136,95139,95141,95143,95145,95147,95149],{"class":78,"line":94},[76,95133,2503],{"class":90},[76,95135,370],{"class":82},[76,95137,95138],{"class":90},"np.random.randint(",[76,95140,669],{"class":119},[76,95142,2642],{"class":90},[76,95144,2575],{"class":119},[76,95146,2642],{"class":90},[76,95148,408],{"class":119},[76,95150,130],{"class":90},[76,95152,95153,95156],{"class":78,"line":133},[76,95154,95155],{"class":90},"np.sum(a)",[76,95157,95158],{"class":540},"#求和\n",[14,95160,95162],{"id":95161},"_112-max求最大值函数","11.2 max()求最大值函数",[66,95164,95166],{"className":68,"code":95165,"language":70,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[73,95167,95168,95172,95192,95197,95202],{"__ignoreMap":71},[76,95169,95170],{"class":78,"line":79},[76,95171,95129],{"class":540},[76,95173,95174,95176,95178,95180,95182,95184,95186,95188,95190],{"class":78,"line":94},[76,95175,2503],{"class":90},[76,95177,370],{"class":82},[76,95179,95138],{"class":90},[76,95181,669],{"class":119},[76,95183,2642],{"class":90},[76,95185,2575],{"class":119},[76,95187,2642],{"class":90},[76,95189,408],{"class":119},[76,95191,130],{"class":90},[76,95193,95194],{"class":78,"line":133},[76,95195,95196],{"class":90},"np.max(a)\n",[76,95198,95199],{"class":78,"line":145},[76,95200,95201],{"class":540},"#最大索引(求最大元素的索引)arg\n",[76,95203,95204],{"class":78,"line":152},[76,95205,95206],{"class":90},"np.argmax(a)\n",[66,95208,95210],{"className":68,"code":95209,"language":70,"meta":71,"style":71},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[73,95211,95212,95233,95253,95257],{"__ignoreMap":71},[76,95213,95214,95216,95218,95221,95223,95225,95227,95229,95231],{"class":78,"line":79},[76,95215,12973],{"class":90},[76,95217,370],{"class":82},[76,95219,95220],{"class":90}," np.array([",[76,95222,669],{"class":119},[76,95224,405],{"class":90},[76,95226,2583],{"class":119},[76,95228,405],{"class":90},[76,95230,2339],{"class":119},[76,95232,6739],{"class":90},[76,95234,95235,95237,95239,95241,95243,95245,95247,95249,95251],{"class":78,"line":94},[76,95236,12999],{"class":90},[76,95238,370],{"class":82},[76,95240,95220],{"class":90},[76,95242,2339],{"class":119},[76,95244,405],{"class":90},[76,95246,2345],{"class":119},[76,95248,405],{"class":90},[76,95250,2557],{"class":119},[76,95252,6739],{"class":90},[76,95254,95255],{"class":78,"line":133},[76,95256,149],{"emptyLinePlaceholder":148},[76,95258,95259,95261,95264],{"class":78,"line":145},[76,95260,478],{"class":119},[76,95262,95263],{"class":90},"(np.maximum(a, b))   ",[76,95265,95266],{"class":540},"# [3 5 4]，每个位置上取较大值\n",[14,95268,95270],{"id":95269},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95272,95273],{},"①一维数组：",[66,95275,95277],{"className":68,"code":95276,"language":70,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[73,95278,95279,95283,95303,95308],{"__ignoreMap":71},[76,95280,95281],{"class":78,"line":79},[76,95282,95129],{"class":540},[76,95284,95285,95287,95289,95291,95293,95295,95297,95299,95301],{"class":78,"line":94},[76,95286,2503],{"class":90},[76,95288,370],{"class":82},[76,95290,95138],{"class":90},[76,95292,669],{"class":119},[76,95294,2642],{"class":90},[76,95296,2575],{"class":119},[76,95298,2642],{"class":90},[76,95300,408],{"class":119},[76,95302,130],{"class":90},[76,95304,95305],{"class":78,"line":133},[76,95306,95307],{"class":540},"#求平均值\n",[76,95309,95310],{"class":78,"line":145},[76,95311,95312],{"class":90},"np.mean(a)\n",[19,95314,95315],{},"②二维数组",[66,95317,95319],{"className":68,"code":95318,"language":70,"meta":71,"style":71},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[73,95320,95321,95326,95351,95356],{"__ignoreMap":71},[76,95322,95323],{"class":78,"line":79},[76,95324,95325],{"class":540},"#二维数组\n",[76,95327,95328,95331,95333,95335,95337,95339,95341,95343,95345,95347,95349],{"class":78,"line":94},[76,95329,95330],{"class":90},"aa",[76,95332,370],{"class":82},[76,95334,95026],{"class":90},[76,95336,669],{"class":119},[76,95338,2642],{"class":90},[76,95340,2785],{"class":119},[76,95342,95031],{"class":90},[76,95344,2339],{"class":119},[76,95346,2642],{"class":90},[76,95348,2557],{"class":119},[76,95350,130],{"class":90},[76,95352,95353],{"class":78,"line":133},[76,95354,95355],{"class":540},"#对数组中的所有数求平均\n",[76,95357,95358],{"class":78,"line":145},[76,95359,95360],{"class":90},"np.mean(aa)\n",[14,95362,95364],{"id":95363},"_114-median求中位数函数","11.4 median()求中位数函数",[66,95366,95368],{"className":68,"code":95367,"language":70,"meta":71,"style":71},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[73,95369,95370,95375,95391,95396],{"__ignoreMap":71},[76,95371,95372],{"class":78,"line":79},[76,95373,95374],{"class":540},"#求中位数\n",[76,95376,95377,95379,95381,95383,95385,95387,95389],{"class":78,"line":94},[76,95378,2527],{"class":90},[76,95380,370],{"class":82},[76,95382,95026],{"class":90},[76,95384,669],{"class":119},[76,95386,2642],{"class":90},[76,95388,402],{"class":119},[76,95390,130],{"class":90},[76,95392,95393],{"class":78,"line":133},[76,95394,95395],{"class":90},"np.median(b)\n",[76,95397,95398],{"class":78,"line":145},[76,95399,95400],{"class":540},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95402,95404],{"id":95403},"_115-power求幂运算函数","11.5 power()求幂运算函数",[66,95406,95408],{"className":68,"code":95407,"language":70,"meta":71,"style":71},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[73,95409,95410,95426,95431,95436,95445,95450,95459],{"__ignoreMap":71},[76,95411,95412,95414,95416,95418,95420,95422,95424],{"class":78,"line":79},[76,95413,2527],{"class":90},[76,95415,370],{"class":82},[76,95417,95026],{"class":90},[76,95419,669],{"class":119},[76,95421,2642],{"class":90},[76,95423,402],{"class":119},[76,95425,130],{"class":90},[76,95427,95428],{"class":78,"line":94},[76,95429,95430],{"class":540},"#幂运算\n",[76,95432,95433],{"class":78,"line":133},[76,95434,95435],{"class":540},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[76,95437,95438,95441,95443],{"class":78,"line":145},[76,95439,95440],{"class":90},"np.power(b,",[76,95442,2345],{"class":119},[76,95444,130],{"class":90},[76,95446,95447],{"class":78,"line":152},[76,95448,95449],{"class":540},"#或者以下代码，将数据存储起来\n",[76,95451,95452,95454,95456],{"class":78,"line":157},[76,95453,3103],{"class":90},[76,95455,370],{"class":82},[76,95457,95458],{"class":90},"np.empty_like(b)\n",[76,95460,95461,95463,95465,95467,95469,95471],{"class":78,"line":246},[76,95462,95440],{"class":90},[76,95464,2345],{"class":119},[76,95466,2642],{"class":90},[76,95468,95078],{"class":7296},[76,95470,370],{"class":82},[76,95472,95473],{"class":90},"y)\n",[14,95475,95477],{"id":95476},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[66,95479,95481],{"className":68,"code":95480,"language":70,"meta":71,"style":71},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[73,95482,95483,95499,95504,95509,95513,95531],{"__ignoreMap":71},[76,95484,95485,95487,95489,95491,95493,95495,95497],{"class":78,"line":79},[76,95486,2527],{"class":90},[76,95488,370],{"class":82},[76,95490,95026],{"class":90},[76,95492,669],{"class":119},[76,95494,2642],{"class":90},[76,95496,402],{"class":119},[76,95498,130],{"class":90},[76,95500,95501],{"class":78,"line":94},[76,95502,95503],{"class":540},"#开方\n",[76,95505,95506],{"class":78,"line":133},[76,95507,95508],{"class":90},"np.sqrt(b)\n",[76,95510,95511],{"class":78,"line":145},[76,95512,95449],{"class":540},[76,95514,95515,95517,95519,95522,95525,95527,95529],{"class":78,"line":152},[76,95516,3103],{"class":90},[76,95518,370],{"class":82},[76,95520,95521],{"class":90},"np.empty_like(b,",[76,95523,95524],{"class":7296},"dtype",[76,95526,370],{"class":82},[76,95528,2311],{"class":119},[76,95530,130],{"class":90},[76,95532,95533,95536,95538,95540],{"class":78,"line":157},[76,95534,95535],{"class":90},"np.sqrt(b,",[76,95537,95078],{"class":7296},[76,95539,370],{"class":82},[76,95541,95473],{"class":90},[14,95543,95545],{"id":95544},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95547,95548],{},"对数组中的元素累计求和，可指定轴",[19,95550,95551],{},"#累计求和的意思是：",[19,95553,95554],{},"a = np.array([1, 2, 3, 4])",[19,95556,95557],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[66,95559,95561],{"className":68,"code":95560,"language":70,"meta":71,"style":71},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[73,95562,95563,95579,95584,95589],{"__ignoreMap":71},[76,95564,95565,95567,95569,95571,95573,95575,95577],{"class":78,"line":79},[76,95566,2527],{"class":90},[76,95568,370],{"class":82},[76,95570,95026],{"class":90},[76,95572,669],{"class":119},[76,95574,2642],{"class":90},[76,95576,402],{"class":119},[76,95578,130],{"class":90},[76,95580,95581],{"class":78,"line":94},[76,95582,95583],{"class":90},"np.cumsum(b)\n",[76,95585,95586],{"class":78,"line":133},[76,95587,95588],{"class":540},"#结果：\n",[76,95590,95591],{"class":78,"line":145},[76,95592,95593],{"class":540},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95595,95597],{"id":95596},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[66,95599,95601],{"className":68,"code":95600,"language":70,"meta":71,"style":71},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[73,95602,95603,95619,95624,95629,95633],{"__ignoreMap":71},[76,95604,95605,95607,95609,95611,95613,95615,95617],{"class":78,"line":79},[76,95606,2527],{"class":90},[76,95608,370],{"class":82},[76,95610,95026],{"class":90},[76,95612,669],{"class":119},[76,95614,2642],{"class":90},[76,95616,402],{"class":119},[76,95618,130],{"class":90},[76,95620,95621],{"class":78,"line":94},[76,95622,95623],{"class":540},"#对数组中的元素累计求积，可指定轴\n",[76,95625,95626],{"class":78,"line":133},[76,95627,95628],{"class":90},"np.cumprod(b)\n",[76,95630,95631],{"class":78,"line":145},[76,95632,95588],{"class":540},[76,95634,95635],{"class":78,"line":152},[76,95636,95637],{"class":540},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95639,95641],{"id":95640},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[66,95643,95645],{"className":68,"code":95644,"language":70,"meta":71,"style":71},"#删除数组中的重复数据，并对数据进行排序\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",[73,95646,95647,95652,95700,95705,95709],{"__ignoreMap":71},[76,95648,95649],{"class":78,"line":79},[76,95650,95651],{"class":540},"#删除数组中的重复数据，并对数据进行排序\n",[76,95653,95654,95656,95658,95660,95662,95664,95666,95668,95670,95672,95674,95676,95678,95680,95682,95684,95686,95688,95690,95692,95694,95696,95698],{"class":78,"line":94},[76,95655,2503],{"class":90},[76,95657,370],{"class":82},[76,95659,95048],{"class":90},[76,95661,669],{"class":119},[76,95663,2642],{"class":90},[76,95665,2345],{"class":119},[76,95667,2642],{"class":90},[76,95669,2339],{"class":119},[76,95671,2642],{"class":90},[76,95673,2760],{"class":119},[76,95675,2642],{"class":90},[76,95677,2339],{"class":119},[76,95679,2642],{"class":90},[76,95681,402],{"class":119},[76,95683,2642],{"class":90},[76,95685,2463],{"class":119},[76,95687,2642],{"class":90},[76,95689,1294],{"class":119},[76,95691,2642],{"class":90},[76,95693,3033],{"class":119},[76,95695,2642],{"class":90},[76,95697,2557],{"class":119},[76,95699,6739],{"class":90},[76,95701,95702],{"class":78,"line":133},[76,95703,95704],{"class":90},"np.unique(a)\n",[76,95706,95707],{"class":78,"line":145},[76,95708,95588],{"class":540},[76,95710,95711],{"class":78,"line":152},[76,95712,95713],{"class":540},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95715,95716],{},"升序形式排序",[14,95718,95720],{"id":95719},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[66,95722,95724],{"className":68,"code":95723,"language":70,"meta":71,"style":71},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[73,95725,95726,95774,95779],{"__ignoreMap":71},[76,95727,95728,95730,95732,95734,95736,95738,95740,95742,95744,95746,95748,95750,95752,95754,95756,95758,95760,95762,95764,95766,95768,95770,95772],{"class":78,"line":79},[76,95729,2503],{"class":90},[76,95731,370],{"class":82},[76,95733,95048],{"class":90},[76,95735,669],{"class":119},[76,95737,2642],{"class":90},[76,95739,2345],{"class":119},[76,95741,2642],{"class":90},[76,95743,2339],{"class":119},[76,95745,2642],{"class":90},[76,95747,2760],{"class":119},[76,95749,2642],{"class":90},[76,95751,2339],{"class":119},[76,95753,2642],{"class":90},[76,95755,402],{"class":119},[76,95757,2642],{"class":90},[76,95759,2463],{"class":119},[76,95761,2642],{"class":90},[76,95763,1294],{"class":119},[76,95765,2642],{"class":90},[76,95767,3033],{"class":119},[76,95769,2642],{"class":90},[76,95771,2557],{"class":119},[76,95773,6739],{"class":90},[76,95775,95776],{"class":78,"line":94},[76,95777,95778],{"class":540},"#返回数组中非零元素的索引\n",[76,95780,95781],{"class":78,"line":133},[76,95782,95783],{"class":90},"np.nonzero(a)\n",[14,95785,95787],{"id":95786},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[66,95789,95791],{"className":68,"code":95790,"language":70,"meta":71,"style":71},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[73,95792,95793,95841,95846],{"__ignoreMap":71},[76,95794,95795,95797,95799,95801,95803,95805,95807,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827,95829,95831,95833,95835,95837,95839],{"class":78,"line":79},[76,95796,2503],{"class":90},[76,95798,370],{"class":82},[76,95800,95048],{"class":90},[76,95802,669],{"class":119},[76,95804,2642],{"class":90},[76,95806,2345],{"class":119},[76,95808,2642],{"class":90},[76,95810,2339],{"class":119},[76,95812,2642],{"class":90},[76,95814,2760],{"class":119},[76,95816,2642],{"class":90},[76,95818,2339],{"class":119},[76,95820,2642],{"class":90},[76,95822,402],{"class":119},[76,95824,2642],{"class":90},[76,95826,2463],{"class":119},[76,95828,2642],{"class":90},[76,95830,1294],{"class":119},[76,95832,2642],{"class":90},[76,95834,3033],{"class":119},[76,95836,2642],{"class":90},[76,95838,2557],{"class":119},[76,95840,6739],{"class":90},[76,95842,95843],{"class":78,"line":94},[76,95844,95845],{"class":540},"#计算一组数中最大值与最小值的差，可指定轴\n",[76,95847,95848],{"class":78,"line":133},[76,95849,95850],{"class":90},"np.ptp(a)\n",[2178,95852,95853],{},"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":71,"searchDepth":94,"depth":94,"links":95855},[95856,95857,95858,95859,95860,95861,95862,95863,95864,95865,95866],{"id":95118,"depth":94,"text":95119},{"id":95161,"depth":94,"text":95162},{"id":95269,"depth":94,"text":95270},{"id":95363,"depth":94,"text":95364},{"id":95403,"depth":94,"text":95404},{"id":95476,"depth":94,"text":95477},{"id":95544,"depth":94,"text":95545},{"id":95596,"depth":94,"text":95597},{"id":95640,"depth":94,"text":95641},{"id":95719,"depth":94,"text":95720},{"id":95786,"depth":94,"text":95787},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95104,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95873,"title":95874,"body":95875,"description":2201,"extension":2202,"meta":96530,"navigation":148,"path":96531,"seo":96532,"stem":96533,"__hash__":96534},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95876,"toc":96518},[95877,95880,95884,95887,96103,96107,96110,96319,96323,96389,96394,96398,96401,96404,96442,96446,96449,96454,96458,96461,96464,96469,96473,96476,96480,96483,96486,96491,96495,96498,96501,96506,96510,96515],[10,95878,95874],{"id":95879},"_12其他常用函数",[14,95881,95883],{"id":95882},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95885,95886],{},"将数组的数据按照行列复制扩展",[66,95888,95890],{"className":68,"code":95889,"language":70,"meta":71,"style":71},"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",[73,95891,95892,95908,95917,95921,95926,95931,95944,95948,95953,95958,95963,95967,95972,95996,96008,96012,96016,96021,96026,96031,96036,96040,96053,96057,96061,96066,96071,96076,96081,96086,96090,96094,96099],{"__ignoreMap":71},[76,95893,95894,95896,95898,95900,95902,95904,95906],{"class":78,"line":79},[76,95895,2503],{"class":90},[76,95897,370],{"class":82},[76,95899,95026],{"class":90},[76,95901,669],{"class":119},[76,95903,2642],{"class":90},[76,95905,2583],{"class":119},[76,95907,130],{"class":90},[76,95909,95910,95913,95915],{"class":78,"line":94},[76,95911,95912],{"class":90},"np.tile(a,",[76,95914,2345],{"class":119},[76,95916,130],{"class":90},[76,95918,95919],{"class":78,"line":133},[76,95920,95588],{"class":540},[76,95922,95923],{"class":78,"line":145},[76,95924,95925],{"class":540},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[76,95927,95928],{"class":78,"line":152},[76,95929,95930],{"class":540},"#行复制两次，列复制三次\n",[76,95932,95933,95936,95938,95940,95942],{"class":78,"line":157},[76,95934,95935],{"class":90},"np.tile(a,(",[76,95937,2345],{"class":119},[76,95939,2642],{"class":90},[76,95941,2339],{"class":119},[76,95943,656],{"class":90},[76,95945,95946],{"class":78,"line":246},[76,95947,95588],{"class":540},[76,95949,95950],{"class":78,"line":251},[76,95951,95952],{"class":126},"'''\n",[76,95954,95955],{"class":78,"line":257},[76,95956,95957],{"class":126},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[76,95959,95960],{"class":78,"line":641},[76,95961,95962],{"class":126},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[76,95964,95965],{"class":78,"line":646},[76,95966,95952],{"class":126},[76,95968,95969],{"class":78,"line":659},[76,95970,95971],{"class":540},"#创建二维数组\n",[76,95973,95974,95976,95978,95980,95982,95984,95986,95988,95990,95992,95994],{"class":78,"line":1608},[76,95975,95330],{"class":90},[76,95977,370],{"class":82},[76,95979,95026],{"class":90},[76,95981,669],{"class":119},[76,95983,2642],{"class":90},[76,95985,2785],{"class":119},[76,95987,95031],{"class":90},[76,95989,2557],{"class":119},[76,95991,2642],{"class":90},[76,95993,2339],{"class":119},[76,95995,130],{"class":90},[76,95997,95998,96001,96003,96005],{"class":78,"line":1632},[76,95999,96000],{"class":90},"np.tile(aa,",[76,96002,2345],{"class":119},[76,96004,2693],{"class":90},[76,96006,96007],{"class":540},"#一个数的时候就是行\n",[76,96009,96010],{"class":78,"line":1637},[76,96011,95588],{"class":540},[76,96013,96014],{"class":78,"line":1642},[76,96015,95952],{"class":126},[76,96017,96018],{"class":78,"line":1652},[76,96019,96020],{"class":126},"array([[ 1,  2,  3,  1,  2,  3],\n",[76,96022,96023],{"class":78,"line":1660},[76,96024,96025],{"class":126},"       [ 4,  5,  6,  4,  5,  6],\n",[76,96027,96028],{"class":78,"line":1683},[76,96029,96030],{"class":126},"       [ 7,  8,  9,  7,  8,  9],\n",[76,96032,96033],{"class":78,"line":1698},[76,96034,96035],{"class":126},"       [10, 11, 12, 10, 11, 12]])\n",[76,96037,96038],{"class":78,"line":1711},[76,96039,95952],{"class":126},[76,96041,96042,96045,96047,96049,96051],{"class":78,"line":1717},[76,96043,96044],{"class":90},"np.tile(aa,(",[76,96046,2345],{"class":119},[76,96048,2642],{"class":90},[76,96050,2339],{"class":119},[76,96052,656],{"class":90},[76,96054,96055],{"class":78,"line":1728},[76,96056,95588],{"class":540},[76,96058,96059],{"class":78,"line":1740},[76,96060,95952],{"class":126},[76,96062,96063],{"class":78,"line":1746},[76,96064,96065],{"class":126},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,96067,96068],{"class":78,"line":1751},[76,96069,96070],{"class":126},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[76,96072,96073],{"class":78,"line":1756},[76,96074,96075],{"class":126},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[76,96077,96078],{"class":78,"line":1766},[76,96079,96080],{"class":126},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[76,96082,96083],{"class":78,"line":1773},[76,96084,96085],{"class":126},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,96087,96088],{"class":78,"line":1793},[76,96089,96070],{"class":126},[76,96091,96092],{"class":78,"line":1806},[76,96093,96075],{"class":126},[76,96095,96096],{"class":78,"line":1817},[76,96097,96098],{"class":126},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[76,96100,96101],{"class":78,"line":1822},[76,96102,95952],{"class":126},[14,96104,96106],{"id":96105},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96108,96109],{},"repeat()将数组中的每个元素重复若干次",[66,96111,96113],{"className":68,"code":96112,"language":70,"meta":71,"style":71},"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",[73,96114,96115,96131,96140,96144,96149,96173,96178,96187,96191,96196,96200,96205,96221,96225,96229,96234,96239,96244,96248,96253,96257,96262,96267,96271,96287,96291,96295,96300,96305,96310,96315],{"__ignoreMap":71},[76,96116,96117,96119,96121,96123,96125,96127,96129],{"class":78,"line":79},[76,96118,2503],{"class":90},[76,96120,370],{"class":82},[76,96122,95026],{"class":90},[76,96124,669],{"class":119},[76,96126,2642],{"class":90},[76,96128,2583],{"class":119},[76,96130,130],{"class":90},[76,96132,96133,96136,96138],{"class":78,"line":94},[76,96134,96135],{"class":90},"np.repeat(a,",[76,96137,2339],{"class":119},[76,96139,130],{"class":90},[76,96141,96142],{"class":78,"line":133},[76,96143,95588],{"class":540},[76,96145,96146],{"class":78,"line":145},[76,96147,96148],{"class":540},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[76,96150,96151,96153,96155,96157,96159,96161,96163,96165,96167,96169,96171],{"class":78,"line":152},[76,96152,95330],{"class":90},[76,96154,370],{"class":82},[76,96156,95026],{"class":90},[76,96158,669],{"class":119},[76,96160,2642],{"class":90},[76,96162,2785],{"class":119},[76,96164,95031],{"class":90},[76,96166,2557],{"class":119},[76,96168,2642],{"class":90},[76,96170,2339],{"class":119},[76,96172,130],{"class":90},[76,96174,96175],{"class":78,"line":157},[76,96176,96177],{"class":540},"#这个重复之后二维变成一维\n",[76,96179,96180,96183,96185],{"class":78,"line":246},[76,96181,96182],{"class":90},"np.repeat(aa,",[76,96184,2345],{"class":119},[76,96186,130],{"class":90},[76,96188,96189],{"class":78,"line":251},[76,96190,95952],{"class":126},[76,96192,96193],{"class":78,"line":257},[76,96194,96195],{"class":126},"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",[76,96197,96198],{"class":78,"line":641},[76,96199,95952],{"class":126},[76,96201,96202],{"class":78,"line":646},[76,96203,96204],{"class":540},"#指定axis\n",[76,96206,96207,96209,96211,96213,96215,96217,96219],{"class":78,"line":659},[76,96208,96182],{"class":90},[76,96210,2345],{"class":119},[76,96212,2642],{"class":90},[76,96214,49547],{"class":7296},[76,96216,370],{"class":82},[76,96218,1294],{"class":119},[76,96220,130],{"class":90},[76,96222,96223],{"class":78,"line":1608},[76,96224,95588],{"class":540},[76,96226,96227],{"class":78,"line":1632},[76,96228,95952],{"class":126},[76,96230,96231],{"class":78,"line":1637},[76,96232,96233],{"class":126},"array([[ 1,  2,  3],\n",[76,96235,96236],{"class":78,"line":1642},[76,96237,96238],{"class":126},"       [ 1,  2,  3],\n",[76,96240,96241],{"class":78,"line":1652},[76,96242,96243],{"class":126},"       [ 4,  5,  6],\n",[76,96245,96246],{"class":78,"line":1660},[76,96247,96243],{"class":126},[76,96249,96250],{"class":78,"line":1683},[76,96251,96252],{"class":126},"       [ 7,  8,  9],\n",[76,96254,96255],{"class":78,"line":1698},[76,96256,96252],{"class":126},[76,96258,96259],{"class":78,"line":1711},[76,96260,96261],{"class":126},"       [10, 11, 12],\n",[76,96263,96264],{"class":78,"line":1717},[76,96265,96266],{"class":126},"       [10, 11, 12]])\n",[76,96268,96269],{"class":78,"line":1728},[76,96270,95952],{"class":126},[76,96272,96273,96275,96277,96279,96281,96283,96285],{"class":78,"line":1740},[76,96274,96182],{"class":90},[76,96276,2345],{"class":119},[76,96278,2642],{"class":90},[76,96280,49547],{"class":7296},[76,96282,370],{"class":82},[76,96284,669],{"class":119},[76,96286,130],{"class":90},[76,96288,96289],{"class":78,"line":1746},[76,96290,95588],{"class":540},[76,96292,96293],{"class":78,"line":1751},[76,96294,95952],{"class":126},[76,96296,96297],{"class":78,"line":1756},[76,96298,96299],{"class":126},"array([[ 1,  1,  2,  2,  3,  3],\n",[76,96301,96302],{"class":78,"line":1766},[76,96303,96304],{"class":126},"       [ 4,  4,  5,  5,  6,  6],\n",[76,96306,96307],{"class":78,"line":1773},[76,96308,96309],{"class":126},"       [ 7,  7,  8,  8,  9,  9],\n",[76,96311,96312],{"class":78,"line":1793},[76,96313,96314],{"class":126},"       [10, 10, 11, 11, 12, 12]])\n",[76,96316,96317],{"class":78,"line":1806},[76,96318,95952],{"class":126},[14,96320,96322],{"id":96321},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[66,96324,96326],{"className":68,"code":96325,"language":70,"meta":71,"style":71},"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",[73,96327,96328,96344,96349,96361,96365,96370,96380,96384],{"__ignoreMap":71},[76,96329,96330,96332,96334,96336,96338,96340,96342],{"class":78,"line":79},[76,96331,2503],{"class":90},[76,96333,370],{"class":82},[76,96335,95026],{"class":90},[76,96337,669],{"class":119},[76,96339,2642],{"class":90},[76,96341,2583],{"class":119},[76,96343,130],{"class":90},[76,96345,96346],{"class":78,"line":94},[76,96347,96348],{"class":540},"#array([，2，3，4])\n",[76,96350,96351,96354,96356,96358],{"class":78,"line":133},[76,96352,96353],{"class":90},"np.roll(a,",[76,96355,2345],{"class":119},[76,96357,2693],{"class":90},[76,96359,96360],{"class":540},"#传正数向后调多少位，传负数向前调多少位\n",[76,96362,96363],{"class":78,"line":145},[76,96364,95588],{"class":540},[76,96366,96367],{"class":78,"line":152},[76,96368,96369],{"class":540},"#array([3, 4, 1, 2])\n",[76,96371,96372,96374,96376,96378],{"class":78,"line":157},[76,96373,96353],{"class":90},[76,96375,666],{"class":82},[76,96377,669],{"class":119},[76,96379,130],{"class":90},[76,96381,96382],{"class":78,"line":246},[76,96383,95588],{"class":540},[76,96385,96386],{"class":78,"line":251},[76,96387,96388],{"class":540},"#array([2, 3, 4, 1])\n",[19,96390,96391],{},[3583,96392],{"alt":71,"src":96393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96395,96397],{"id":96396},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96399,96400],{},"resize()重新调整数组的大小",[19,96402,96403],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[66,96405,96407],{"className":68,"code":96406,"language":70,"meta":71,"style":71},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[73,96408,96409,96414,96427],{"__ignoreMap":71},[76,96410,96411],{"class":78,"line":79},[76,96412,96413],{"class":540},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[76,96415,96416,96419,96421,96423,96425],{"class":78,"line":94},[76,96417,96418],{"class":90},"np.resize(aa,(",[76,96420,2345],{"class":119},[76,96422,2642],{"class":90},[76,96424,2608],{"class":119},[76,96426,656],{"class":90},[76,96428,96429,96431,96433,96435,96437,96439],{"class":78,"line":133},[76,96430,96418],{"class":90},[76,96432,2345],{"class":119},[76,96434,2642],{"class":90},[76,96436,2684],{"class":119},[76,96438,84795],{"class":90},[76,96440,96441],{"class":540},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96443,96445],{"id":96444},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96447,96448],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96450,96451],{},[3583,96452],{"alt":71,"src":96453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96455,96457],{"id":96456},"_126-保存加载文件","12.6 保存加载文件",[19,96459,96460],{},"savetxt():将数据保存到txt文件中",[19,96462,96463],{},"loadtxt():从文件加载数据",[19,96465,96466],{},[3583,96467],{"alt":71,"src":96468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96470,96472],{"id":96471},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96474,96475],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96477,96479],{"id":96478},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96481,96482],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96484,96485],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96487,96488],{},[3583,96489],{"alt":71,"src":96490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96492,96494],{"id":96493},"_129-where语句","12.9 where语句",[19,96496,96497],{},"np.where(条件,x,y)",[19,96499,96500],{},"如果条件为True,对应值为x,否则对应值为y",[19,96502,96503],{},[3583,96504],{"alt":71,"src":96505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96507,96509],{"id":96508},"_1210-dot矩阵","12.10 dot()矩阵",[19,96511,96512],{},[3583,96513],{"alt":71,"src":96514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2178,96516,96517],{},"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":71,"searchDepth":94,"depth":94,"links":96519},[96520,96521,96522,96523,96524,96525,96526,96527,96528,96529],{"id":95882,"depth":94,"text":95883},{"id":96105,"depth":94,"text":96106},{"id":96321,"depth":94,"text":96322},{"id":96396,"depth":94,"text":96397},{"id":96444,"depth":94,"text":96445},{"id":96456,"depth":94,"text":96457},{"id":96471,"depth":94,"text":96472},{"id":96478,"depth":94,"text":96479},{"id":96493,"depth":94,"text":96494},{"id":96508,"depth":94,"text":96509},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95874,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96536,"title":96537,"body":96538,"description":2201,"extension":2202,"meta":96891,"navigation":148,"path":96892,"seo":96893,"stem":96894,"__hash__":96895},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96539,"toc":96889},[96540,96543,96546,96549,96552,96555,96620,96622,96886],[10,96541,96537],{"id":96542},"_13数组排序",[19,96544,96545],{},"排序主要用到的方法是np.sort和np.argsort",[19,96547,96548],{},"其中np.sort()对数组直接排序",[19,96550,96551],{},"而np.argsort()是返回排序后的原始索引",[19,96553,96554],{},"①一维数组",[66,96556,96558],{"className":68,"code":96557,"language":70,"meta":71,"style":71},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[73,96559,96560,96564,96604,96612],{"__ignoreMap":71},[76,96561,96562],{"class":78,"line":79},[76,96563,95129],{"class":540},[76,96565,96566,96568,96570,96572,96574,96576,96578,96580,96582,96584,96586,96588,96590,96592,96594,96596,96598,96600,96602],{"class":78,"line":94},[76,96567,2503],{"class":90},[76,96569,370],{"class":82},[76,96571,95048],{"class":90},[76,96573,2339],{"class":119},[76,96575,2642],{"class":90},[76,96577,2760],{"class":119},[76,96579,2642],{"class":90},[76,96581,2659],{"class":119},[76,96583,2642],{"class":90},[76,96585,3033],{"class":119},[76,96587,2642],{"class":90},[76,96589,2543],{"class":119},[76,96591,2642],{"class":90},[76,96593,3151],{"class":119},[76,96595,2642],{"class":90},[76,96597,2608],{"class":119},[76,96599,2642],{"class":90},[76,96601,402],{"class":119},[76,96603,6739],{"class":90},[76,96605,96606,96609],{"class":78,"line":133},[76,96607,96608],{"class":90},"np.sort(a)",[76,96610,96611],{"class":540},"#升序排序\n",[76,96613,96614,96617],{"class":78,"line":145},[76,96615,96616],{"class":90},"np.argsort(a)",[76,96618,96619],{"class":540},"#按照元素大小来索引排序\n",[19,96621,95315],{},[66,96623,96625],{"className":68,"code":96624,"language":70,"meta":71,"style":71},"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",[73,96626,96627,96639,96665,96670,96674,96679,96684,96689,96694,96698,96706,96710,96715,96720,96725,96730,96734,96739,96752,96756,96761,96766,96771,96776,96780,96785,96797,96801,96805,96809,96813,96817,96821,96826,96841,96846,96855,96860,96864,96868,96873,96877,96882],{"__ignoreMap":71},[76,96628,96629,96632,96634,96636],{"class":78,"line":79},[76,96630,96631],{"class":90},"np.random.seed(",[76,96633,1294],{"class":119},[76,96635,2693],{"class":90},[76,96637,96638],{"class":540},"#保证每次值一样\n",[76,96640,96641,96643,96645,96647,96649,96651,96653,96655,96657,96659,96661,96663],{"class":78,"line":94},[76,96642,95330],{"class":90},[76,96644,370],{"class":82},[76,96646,95138],{"class":90},[76,96648,2575],{"class":119},[76,96650,2642],{"class":90},[76,96652,33539],{"class":7296},[76,96654,370],{"class":82},[76,96656,123],{"class":90},[76,96658,2557],{"class":119},[76,96660,2642],{"class":90},[76,96662,2608],{"class":119},[76,96664,656],{"class":90},[76,96666,96667],{"class":78,"line":133},[76,96668,96669],{"class":540},"#原数组：\n",[76,96671,96672],{"class":78,"line":145},[76,96673,95952],{"class":126},[76,96675,96676],{"class":78,"line":152},[76,96677,96678],{"class":126},"array([[44, 47, 64, 67, 67,  9],\n",[76,96680,96681],{"class":78,"line":157},[76,96682,96683],{"class":126},"       [83, 21, 36, 87, 70, 88],\n",[76,96685,96686],{"class":78,"line":246},[76,96687,96688],{"class":126},"       [88, 12, 58, 65, 39, 87],\n",[76,96690,96691],{"class":78,"line":251},[76,96692,96693],{"class":126},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[76,96695,96696],{"class":78,"line":257},[76,96697,95952],{"class":126},[76,96699,96700,96703],{"class":78,"line":641},[76,96701,96702],{"class":90},"np.sort(aa)",[76,96704,96705],{"class":540},"#每行进行了排序\n",[76,96707,96708],{"class":78,"line":646},[76,96709,95952],{"class":126},[76,96711,96712],{"class":78,"line":659},[76,96713,96714],{"class":126},"array([[ 9, 44, 47, 64, 67, 67],\n",[76,96716,96717],{"class":78,"line":1608},[76,96718,96719],{"class":126},"       [21, 36, 70, 83, 87, 88],\n",[76,96721,96722],{"class":78,"line":1632},[76,96723,96724],{"class":126},"       [12, 39, 58, 65, 87, 88],\n",[76,96726,96727],{"class":78,"line":1637},[76,96728,96729],{"class":126},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[76,96731,96732],{"class":78,"line":1642},[76,96733,95952],{"class":126},[76,96735,96736],{"class":78,"line":1652},[76,96737,96738],{"class":540},"#axis=0时\n",[76,96740,96741,96744,96746,96748,96750],{"class":78,"line":1660},[76,96742,96743],{"class":90},"np.sort(aa,",[76,96745,49547],{"class":7296},[76,96747,370],{"class":82},[76,96749,1294],{"class":119},[76,96751,130],{"class":90},[76,96753,96754],{"class":78,"line":1683},[76,96755,95952],{"class":126},[76,96757,96758],{"class":78,"line":1698},[76,96759,96760],{"class":126},"array([[44, 12, 36, 37, 25,  9],\n",[76,96762,96763],{"class":78,"line":1711},[76,96764,96765],{"class":126},"       [46, 21, 58, 65, 39, 77],\n",[76,96767,96768],{"class":78,"line":1717},[76,96769,96770],{"class":126},"       [83, 47, 64, 67, 67, 87],\n",[76,96772,96773],{"class":78,"line":1728},[76,96774,96775],{"class":126},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[76,96777,96778],{"class":78,"line":1740},[76,96779,95952],{"class":126},[76,96781,96782],{"class":78,"line":1746},[76,96783,96784],{"class":540},"#axis=1时,为默认值\n",[76,96786,96787,96789,96791,96793,96795],{"class":78,"line":1751},[76,96788,96743],{"class":90},[76,96790,49547],{"class":7296},[76,96792,370],{"class":82},[76,96794,669],{"class":119},[76,96796,130],{"class":90},[76,96798,96799],{"class":78,"line":1756},[76,96800,95952],{"class":126},[76,96802,96803],{"class":78,"line":1766},[76,96804,96714],{"class":126},[76,96806,96807],{"class":78,"line":1773},[76,96808,96719],{"class":126},[76,96810,96811],{"class":78,"line":1793},[76,96812,96724],{"class":126},[76,96814,96815],{"class":78,"line":1806},[76,96816,96729],{"class":126},[76,96818,96819],{"class":78,"line":1817},[76,96820,95952],{"class":126},[76,96822,96823],{"class":78,"line":1822},[76,96824,96825],{"class":540},"#按最后一列排序\n",[76,96827,96828,96830,96832,96835,96837,96839],{"class":78,"line":1835},[76,96829,2527],{"class":90},[76,96831,370],{"class":82},[76,96833,96834],{"class":90},"aa[:,",[76,96836,666],{"class":82},[76,96838,669],{"class":119},[76,96840,35284],{"class":90},[76,96842,96843],{"class":78,"line":1847},[76,96844,96845],{"class":540},"#获取最后一列排好序的索引\n",[76,96847,96848,96850,96852],{"class":78,"line":1852},[76,96849,76085],{"class":90},[76,96851,370],{"class":82},[76,96853,96854],{"class":90},"np.argsort(b)\n",[76,96856,96857],{"class":78,"line":1862},[76,96858,96859],{"class":90},"aa[index]\n",[76,96861,96862],{"class":78,"line":1874},[76,96863,95952],{"class":126},[76,96865,96866],{"class":78,"line":1879},[76,96867,96678],{"class":126},[76,96869,96870],{"class":78,"line":1884},[76,96871,96872],{"class":126},"       [46, 88, 81, 37, 25, 77],\n",[76,96874,96875],{"class":78,"line":1889},[76,96876,96688],{"class":126},[76,96878,96879],{"class":78,"line":1900},[76,96880,96881],{"class":126},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[76,96883,96884],{"class":78,"line":1906},[76,96885,95952],{"class":126},[2178,96887,96888],{},"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":71,"searchDepth":94,"depth":94,"links":96890},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96537,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96897,"title":96898,"body":96899,"description":2201,"extension":2202,"meta":96929,"navigation":148,"path":96930,"seo":96931,"stem":96932,"__hash__":96933},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96900,"toc":96927},[96901,96904,96907,96910,96913,96916,96919,96922],[10,96902,96898],{"id":96903},"_14广播机制",[19,96905,96906],{},"广播的规则：",[19,96908,96909],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96911,96912],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96914,96915],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96917,96918],{},"3.如果没有维度形状为1，则会引发异常",[19,96920,96921],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96923,96924],{},[3583,96925],{"alt":71,"src":96926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":71,"searchDepth":94,"depth":94,"links":96928},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96898,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96935,"title":96936,"body":96937,"description":2201,"extension":2202,"meta":97035,"navigation":148,"path":97036,"seo":97037,"stem":97038,"__hash__":97039},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96938,"toc":97033},[96939,96942,96945,97030],[10,96940,96936],{"id":96941},"_15比较掩码",[19,96943,96944],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[66,96946,96948],{"className":68,"code":96947,"language":70,"meta":71,"style":71},"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",[73,96949,96950,96996,97007,97021,97025],{"__ignoreMap":71},[76,96951,96952,96954,96956,96959,96961,96963,96965,96967,96969,96971,96973,96975,96977,96979,96981,96983,96985,96987,96989,96991,96993],{"class":78,"line":79},[76,96953,2503],{"class":90},[76,96955,370],{"class":82},[76,96957,96958],{"class":90},"np.array([[",[76,96960,669],{"class":119},[76,96962,2642],{"class":90},[76,96964,2345],{"class":119},[76,96966,2642],{"class":90},[76,96968,2339],{"class":119},[76,96970,50062],{"class":90},[76,96972,2735],{"class":119},[76,96974,2642],{"class":90},[76,96976,2760],{"class":119},[76,96978,2642],{"class":90},[76,96980,2785],{"class":119},[76,96982,50062],{"class":90},[76,96984,2983],{"class":119},[76,96986,2642],{"class":90},[76,96988,3008],{"class":119},[76,96990,2642],{"class":90},[76,96992,3033],{"class":119},[76,96994,96995],{"class":90},"]])\n",[76,96997,96998,97000,97002,97004],{"class":78,"line":94},[76,96999,2503],{"class":90},[76,97001,584],{"class":82},[76,97003,408],{"class":119},[76,97005,97006],{"class":540},"#结果是一个由True,False组成的数组\n",[76,97008,97009,97012,97014,97016,97018],{"class":78,"line":133},[76,97010,97011],{"class":90},"a[a",[76,97013,584],{"class":82},[76,97015,408],{"class":119},[76,97017,3196],{"class":90},[76,97019,97020],{"class":540},"#小于20的元素会存到这个数组中\n",[76,97022,97023],{"class":78,"line":145},[76,97024,95588],{"class":540},[76,97026,97027],{"class":78,"line":152},[76,97028,97029],{"class":540},"#array([ 1,  2,  3, 11, 12, 13])\n",[2178,97031,97032],{},"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":71,"searchDepth":94,"depth":94,"links":97034},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96936,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97041,"title":97042,"body":97043,"description":2201,"extension":2202,"meta":97135,"navigation":148,"path":97136,"seo":97137,"stem":97138,"__hash__":97139},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97044,"toc":97133},[97045,97048,97051,97054,97057,97060,97125,97130],[10,97046,97042],{"id":97047},"_16魔法命令time",[19,97049,97050],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97052,97053],{},"%:行模式",[19,97055,97056],{},"%%:单元格模式",[19,97058,97059],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[66,97061,97063],{"className":68,"code":97062,"language":70,"meta":71,"style":71},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[73,97064,97065,97070,97077,97082,97091,97104,97108,97116],{"__ignoreMap":71},[76,97066,97067],{"class":78,"line":79},[76,97068,97069],{"class":540},"#程序执行时间\n",[76,97071,97072,97074],{"class":78,"line":94},[76,97073,32438],{"class":82},[76,97075,97076],{"class":90}," time \n",[76,97078,97079],{"class":78,"line":133},[76,97080,97081],{"class":540},"#获取时间\n",[76,97083,97084,97087,97089],{"class":78,"line":145},[76,97085,97086],{"class":90},"start",[76,97088,370],{"class":82},[76,97090,34458],{"class":90},[76,97092,97093,97096,97099,97101],{"class":78,"line":152},[76,97094,97095],{"class":90},"time.sleep(",[76,97097,97098],{"class":119},"0.4",[76,97100,2693],{"class":90},[76,97102,97103],{"class":540},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[76,97105,97106],{"class":78,"line":157},[76,97107,97081],{"class":540},[76,97109,97110,97112,97114],{"class":78,"line":246},[76,97111,47835],{"class":90},[76,97113,370],{"class":82},[76,97115,34458],{"class":90},[76,97117,97118,97120,97122],{"class":78,"line":251},[76,97119,47835],{"class":90},[76,97121,666],{"class":82},[76,97123,97124],{"class":90},"start\n",[19,97126,97127],{},[3583,97128],{"alt":71,"src":97129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2178,97131,97132],{},"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":71,"searchDepth":94,"depth":94,"links":97134},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97042,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97141,"title":97142,"body":97143,"description":2201,"extension":2202,"meta":97178,"navigation":148,"path":97179,"seo":97180,"stem":97181,"__hash__":97182},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97144,"toc":97176},[97145,97148,97151,97154,97157,97160,97163,97166,97171],[10,97146,97142],{"id":97147},"_17魔法命令timeit",[19,97149,97150],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97152,97153],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97155,97156],{},"单元格模式：",[19,97158,97159],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97161,97162],{},"初始化语句执行次数由轮数来决定",[19,97164,97165],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97167,97168],{},[3583,97169],{"alt":71,"src":97170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97172,97173],{},[3583,97174],{"alt":71,"src":97175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":71,"searchDepth":94,"depth":94,"links":97177},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97142,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97184,"title":97185,"body":97186,"description":2201,"extension":2202,"meta":97204,"navigation":148,"path":97205,"seo":97206,"stem":97207,"__hash__":97208},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97187,"toc":97202},[97188,97191,97194,97197],[10,97189,97185],{"id":97190},"_18魔法命令writefile和run",[19,97192,97193],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97195,97196],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97198,97199],{},[3583,97200],{"alt":71,"src":97201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":71,"searchDepth":94,"depth":94,"links":97203},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97185,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97210,"title":97211,"body":97212,"description":2201,"extension":2202,"meta":97265,"navigation":148,"path":97266,"seo":97267,"stem":97268,"__hash__":97269},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97213,"toc":97263},[97214,97217,97220,97222,97225,97228,97233,97236,97239,97242,97245,97248,97251,97254,97257,97260],[10,97215,97211],{"id":97216},"_19魔法命令memit",[19,97218,97219],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97221,26649],{},[19,97223,97224],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97226,97227],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97229,97230],{},[3583,97231],{"alt":71,"src":97232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97234,97235],{},"补充：",[19,97237,97238],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97240,97241],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97243,97244],{},"解决方法：",[19,97246,97247],{},"1.cmd",[19,97249,97250],{},"2.依次输入以下代码：",[19,97252,97253],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97255,97256],{},"pip install --upgrade ipython",[19,97258,97259],{},"#升级 memory_profiler 和 setuptools",[19,97261,97262],{},"pip install --upgrade memory_profiler setuptools",{"title":71,"searchDepth":94,"depth":94,"links":97264},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97211,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97271,"title":97272,"body":97273,"description":2201,"extension":2202,"meta":98917,"navigation":148,"path":98918,"seo":98919,"stem":98920,"__hash__":98921},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97274,"toc":98887},[97275,97278,97282,97286,97346,97349,97354,97358,97363,97368,97373,97378,97381,97386,97390,97394,97427,97430,97433,97436,97488,97491,97527,97530,97572,97576,97597,97599,97636,97638,97643,97645,97650,97654,97657,97685,97689,97693,97745,97749,97841,97845,97849,97852,97857,97861,97886,97891,97895,97898,97901,97904,97907,97910,97913,97916,97928,97932,97936,97939,97971,97974,97997,98000,98026,98029,98055,98058,98092,98095,98157,98161,98164,98168,98171,98197,98200,98203,98208,98211,98280,98282,98287,98348,98351,98362,98368,98373,98377,98380,98393,98397,98412,98414,98437,98439,98465,98468,98471,98474,98522,98524,98529,98533,98537,98564,98568,98595,98598,98603,98608,98698,98702,98760,98765,98768,98771,98813,98817,98873,98878,98881,98884],[10,97276,97272],{"id":97277},"_2创建数组",[14,97279,97281],{"id":97280},"_21-array函数创建数组","2.1 array()函数创建数组",[889,97283,97285],{"id":97284},"_221-函数语句","2.2.1 函数语句",[66,97287,97289],{"className":68,"code":97288,"language":70,"meta":71,"style":71},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[73,97290,97291],{"__ignoreMap":71},[76,97292,97293,97296,97299,97301,97303,97305,97307,97309,97312,97314,97316,97318,97321,97323,97325,97327,97330,97332,97335,97337,97340,97342,97344],{"class":78,"line":79},[76,97294,97295],{"class":90},"numpy.array(",[76,97297,97298],{"class":119},"object",[76,97300,405],{"class":90},[76,97302,95524],{"class":7296},[76,97304,15617],{"class":82},[76,97306,732],{"class":119},[76,97308,405],{"class":90},[76,97310,97311],{"class":7296},"copy",[76,97313,15617],{"class":82},[76,97315,1895],{"class":119},[76,97317,405],{"class":90},[76,97319,97320],{"class":7296},"order",[76,97322,15617],{"class":82},[76,97324,732],{"class":119},[76,97326,405],{"class":90},[76,97328,97329],{"class":7296},"subok",[76,97331,15617],{"class":82},[76,97333,97334],{"class":119}," False",[76,97336,405],{"class":90},[76,97338,97339],{"class":7296},"ndmin",[76,97341,15617],{"class":82},[76,97343,587],{"class":119},[76,97345,130],{"class":90},[19,97347,97348],{},"参数：",[19,97350,97351],{},[3583,97352],{"alt":71,"src":97353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[889,97355,97357],{"id":97356},"_222-实例","2.2.2 实例",[19,97359,97360],{},[3583,97361],{"alt":71,"src":97362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97364,97365],{},[3583,97366],{"alt":71,"src":97367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97369,97370],{},[3583,97371],{"alt":71,"src":97372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97374,97375],{},[3583,97376],{"alt":71,"src":97377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97379,97380],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97382,97383],{},[3583,97384],{"alt":71,"src":97385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97387,97389],{"id":97388},"_22-随机数创建数组","2.2 随机数创建数组",[889,97391,97393],{"id":97392},"_221-random语句","2.2.1 random语句",[66,97395,97397],{"className":68,"code":97396,"language":70,"meta":71,"style":71},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[73,97398,97399,97404,97409,97417,97422],{"__ignoreMap":71},[76,97400,97401],{"class":78,"line":79},[76,97402,97403],{"class":540},"#random.random()\n",[76,97405,97406],{"class":78,"line":94},[76,97407,97408],{"class":540},"#确定随机种子,就是每次运行结果是相同的\n",[76,97410,97411,97413,97415],{"class":78,"line":133},[76,97412,96631],{"class":90},[76,97414,1294],{"class":119},[76,97416,130],{"class":90},[76,97418,97419],{"class":78,"line":145},[76,97420,97421],{"class":90},"np.random.random()\n",[76,97423,97424],{"class":78,"line":152},[76,97425,97426],{"class":540},"#生成一个随机的数目\n",[19,97428,97429],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97431,97432],{},"可以指定数组形状 size",[19,97434,97435],{},"①生成一维数组",[66,97437,97439],{"className":68,"code":97438,"language":70,"meta":71,"style":71},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[73,97440,97441,97446,97459,97464,97480],{"__ignoreMap":71},[76,97442,97443],{"class":78,"line":79},[76,97444,97445],{"class":540},"#random.random(size())\n",[76,97447,97448,97451,97453,97455,97457],{"class":78,"line":94},[76,97449,97450],{"class":90},"np.random.random(",[76,97452,33539],{"class":7296},[76,97454,370],{"class":82},[76,97456,2583],{"class":119},[76,97458,130],{"class":90},[76,97460,97461],{"class":78,"line":133},[76,97462,97463],{"class":540},"#生成一位的五个元素\n",[76,97465,97466,97468,97470,97472,97474,97476,97478],{"class":78,"line":145},[76,97467,2503],{"class":90},[76,97469,370],{"class":82},[76,97471,97450],{"class":90},[76,97473,33539],{"class":7296},[76,97475,370],{"class":82},[76,97477,2557],{"class":119},[76,97479,130],{"class":90},[76,97481,97482,97485],{"class":78,"line":152},[76,97483,97484],{"class":90},"a.shape ",[76,97486,97487],{"class":540},"#输出数组形状\n",[19,97489,97490],{},"②生成二维数组",[66,97492,97494],{"className":68,"code":97493,"language":70,"meta":71,"style":71},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[73,97495,97496,97500,97522],{"__ignoreMap":71},[76,97497,97498],{"class":78,"line":79},[76,97499,95325],{"class":540},[76,97501,97502,97504,97506,97508,97510,97512,97514,97516,97518,97520],{"class":78,"line":94},[76,97503,95330],{"class":90},[76,97505,370],{"class":82},[76,97507,97450],{"class":90},[76,97509,33539],{"class":7296},[76,97511,370],{"class":82},[76,97513,123],{"class":90},[76,97515,2557],{"class":119},[76,97517,2642],{"class":90},[76,97519,2583],{"class":119},[76,97521,656],{"class":90},[76,97523,97524],{"class":78,"line":133},[76,97525,97526],{"class":540},"#生成四行五列的数组\n",[19,97528,97529],{},"③生成三维数组",[66,97531,97533],{"className":68,"code":97532,"language":70,"meta":71,"style":71},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[73,97534,97535,97540,97567],{"__ignoreMap":71},[76,97536,97537],{"class":78,"line":79},[76,97538,97539],{"class":540},"#三维数组\n",[76,97541,97542,97545,97547,97549,97551,97553,97555,97557,97559,97561,97563,97565],{"class":78,"line":94},[76,97543,97544],{"class":90},"aaa",[76,97546,370],{"class":82},[76,97548,97450],{"class":90},[76,97550,33539],{"class":7296},[76,97552,370],{"class":82},[76,97554,123],{"class":90},[76,97556,2345],{"class":119},[76,97558,2642],{"class":90},[76,97560,2339],{"class":119},[76,97562,2642],{"class":90},[76,97564,2557],{"class":119},[76,97566,656],{"class":90},[76,97568,97569],{"class":78,"line":133},[76,97570,97571],{"class":90},"aaa.shape\n",[889,97573,97575],{"id":97574},"_222-randint语句","2.2.2 randint语句",[66,97577,97579],{"className":68,"code":97578,"language":70,"meta":71,"style":71},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[73,97580,97581,97586],{"__ignoreMap":71},[76,97582,97583],{"class":78,"line":79},[76,97584,97585],{"class":540},"#生成随机的整数 random.randint(low,high,size)\n",[76,97587,97588,97590,97592,97594],{"class":78,"line":94},[76,97589,95138],{"class":90},[76,97591,2583],{"class":119},[76,97593,15767],{"class":90},[76,97595,97596],{"class":540},"#0~5中的随机一个数\n",[19,97598,97435],{},[66,97600,97602],{"className":68,"code":97601,"language":70,"meta":71,"style":71},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[73,97603,97604,97609,97631],{"__ignoreMap":71},[76,97605,97606],{"class":78,"line":79},[76,97607,97608],{"class":540},"#一维\n",[76,97610,97611,97613,97615,97617,97619,97621,97623,97625,97627,97629],{"class":78,"line":94},[76,97612,95138],{"class":90},[76,97614,669],{"class":119},[76,97616,2642],{"class":90},[76,97618,2735],{"class":119},[76,97620,2642],{"class":90},[76,97622,33539],{"class":7296},[76,97624,370],{"class":82},[76,97626,123],{"class":90},[76,97628,402],{"class":119},[76,97630,656],{"class":90},[76,97632,97633],{"class":78,"line":133},[76,97634,97635],{"class":540},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97637,97490],{},[19,97639,97640],{},[3583,97641],{"alt":71,"src":97642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97644,97529],{},[19,97646,97647],{},[3583,97648],{"alt":71,"src":97649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[889,97651,97653],{"id":97652},"_222-rand语句","2.2.2 rand语句",[19,97655,97656],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[66,97658,97660],{"className":68,"code":97659,"language":70,"meta":71,"style":71},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[73,97661,97662,97675,97680],{"__ignoreMap":71},[76,97663,97664,97667,97669,97671,97673],{"class":78,"line":79},[76,97665,97666],{"class":90},"np.random.rand(",[76,97668,2575],{"class":119},[76,97670,2642],{"class":90},[76,97672,402],{"class":119},[76,97674,130],{"class":90},[76,97676,97677],{"class":78,"line":94},[76,97678,97679],{"class":540},"#第一个参数100：行数，表示有100个样本\n",[76,97681,97682],{"class":78,"line":133},[76,97683,97684],{"class":540},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97686,97688],{"id":97687},"_23-arange创建数组","2.3 arange()创建数组",[889,97690,97692],{"id":97691},"_231-函数语句","2.3.1 函数语句",[66,97694,97696],{"className":68,"code":97695,"language":70,"meta":71,"style":71},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[73,97697,97698,97711,97716,97721,97726,97731,97736,97741],{"__ignoreMap":71},[76,97699,97700,97703,97705,97707,97709],{"class":78,"line":79},[76,97701,97702],{"class":90},"numpy.arange([start,] stop[, step], ",[76,97704,95524],{"class":7296},[76,97706,370],{"class":82},[76,97708,489],{"class":119},[76,97710,130],{"class":90},[76,97712,97713],{"class":78,"line":94},[76,97714,97715],{"class":540},"#参数\n",[76,97717,97718],{"class":78,"line":133},[76,97719,97720],{"class":126},"\"\"\"\n",[76,97722,97723],{"class":78,"line":145},[76,97724,97725],{"class":126},"start:起始值，可选，默认从 0 开始。\n",[76,97727,97728],{"class":78,"line":152},[76,97729,97730],{"class":126},"stop:结束值（不包含该值）。\n",[76,97732,97733],{"class":78,"line":157},[76,97734,97735],{"class":126},"step:步长，可选，默认是 1。可以为浮点数。\n",[76,97737,97738],{"class":78,"line":246},[76,97739,97740],{"class":126},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[76,97742,97743],{"class":78,"line":251},[76,97744,97720],{"class":126},[889,97746,97748],{"id":97747},"_232-实例","2.3.2 实例",[66,97750,97752],{"className":68,"code":97751,"language":70,"meta":71,"style":71},"#创建一维数组\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",[73,97753,97754,97758,97782,97787,97792,97796,97819,97823,97827,97832,97837],{"__ignoreMap":71},[76,97755,97756],{"class":78,"line":79},[76,97757,95129],{"class":540},[76,97759,97760,97762,97764,97766,97768,97770,97772,97774,97776,97778,97780],{"class":78,"line":94},[76,97761,95026],{"class":90},[76,97763,669],{"class":119},[76,97765,2642],{"class":90},[76,97767,2983],{"class":119},[76,97769,2642],{"class":90},[76,97771,669],{"class":119},[76,97773,2642],{"class":90},[76,97775,95524],{"class":7296},[76,97777,370],{"class":82},[76,97779,1360],{"class":119},[76,97781,130],{"class":90},[76,97783,97784],{"class":78,"line":133},[76,97785,97786],{"class":540},"#输出结果：\n",[76,97788,97789],{"class":78,"line":145},[76,97790,97791],{"class":540},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[76,97793,97794],{"class":78,"line":152},[76,97795,95971],{"class":540},[76,97797,97798,97801,97803,97805,97807,97810,97812,97814,97816],{"class":78,"line":157},[76,97799,97800],{"class":90},"np.array([np.arange(",[76,97802,669],{"class":119},[76,97804,2642],{"class":90},[76,97806,2557],{"class":119},[76,97808,97809],{"class":90},"),np.arange(",[76,97811,2557],{"class":119},[76,97813,2642],{"class":90},[76,97815,2633],{"class":119},[76,97817,97818],{"class":90},")])\n",[76,97820,97821],{"class":78,"line":246},[76,97822,95588],{"class":540},[76,97824,97825],{"class":78,"line":251},[76,97826,97720],{"class":126},[76,97828,97829],{"class":78,"line":257},[76,97830,97831],{"class":126},"array([[1, 2, 3],\n",[76,97833,97834],{"class":78,"line":641},[76,97835,97836],{"class":126},"       [4, 5, 6]])\n",[76,97838,97839],{"class":78,"line":646},[76,97840,97720],{"class":126},[14,97842,97844],{"id":97843},"_24-生态分布","2.4 生态分布",[889,97846,97848],{"id":97847},"_241-标准正态分布","2.4.1 标准正态分布",[19,97850,97851],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97853,97854],{},[3583,97855],{"alt":71,"src":97856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[889,97858,97860],{"id":97859},"_242-常规正态分布","2.4.2 常规正态分布",[66,97862,97864],{"className":68,"code":97863,"language":70,"meta":71,"style":71},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[73,97865,97866,97871,97876,97881],{"__ignoreMap":71},[76,97867,97868],{"class":78,"line":79},[76,97869,97870],{"class":90},"random.normal(loc,scale,size)也可以生成正态分布\n",[76,97872,97873],{"class":78,"line":94},[76,97874,97875],{"class":540},"#loc:期望\n",[76,97877,97878],{"class":78,"line":133},[76,97879,97880],{"class":540},"#scale:方差\n",[76,97882,97883],{"class":78,"line":145},[76,97884,97885],{"class":540},"#size:用于确定是几维的数列\n",[19,97887,97888],{},[3583,97889],{"alt":71,"src":97890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97892,97894],{"id":97893},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97896,97897],{},"ndim:秩，维度个数",[19,97899,97900],{},"size:数组元素的个数",[19,97902,97903],{},"shape:数组的形状",[19,97905,97906],{},"dtype:数组元素的类型",[19,97908,97909],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97911,97912],{},"他们都是属性，通过数组.属性的形式来确定",[19,97914,97915],{},"如果需要输出多个可以通过以下方式：",[66,97917,97919],{"className":68,"code":97918,"language":70,"meta":71,"style":71},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[73,97920,97921],{"__ignoreMap":71},[76,97922,97923,97925],{"class":78,"line":79},[76,97924,478],{"class":119},[76,97926,97927],{"class":90},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97929,97931],{"id":97930},"_26-其他方式创建数组","2.6 其他方式创建数组",[889,97933,97935],{"id":97934},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97937,97938],{},"①创建一维数组",[66,97940,97942],{"className":68,"code":97941,"language":70,"meta":71,"style":71},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[73,97943,97944,97953,97957,97962,97967],{"__ignoreMap":71},[76,97945,97946,97949,97951],{"class":78,"line":79},[76,97947,97948],{"class":90},"np.zeros(",[76,97950,402],{"class":119},[76,97952,130],{"class":90},[76,97954,97955],{"class":78,"line":94},[76,97956,97720],{"class":126},[76,97958,97959],{"class":78,"line":133},[76,97960,97961],{"class":126},"输出结果：\n",[76,97963,97964],{"class":78,"line":145},[76,97965,97966],{"class":126},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[76,97968,97969],{"class":78,"line":152},[76,97970,97720],{"class":126},[19,97972,97973],{},"上方代码等价于：",[66,97975,97977],{"className":68,"code":97976,"language":70,"meta":71,"style":71},"np.zeros(shape=(10))#创建10个元素的0数组\n",[73,97978,97979],{"__ignoreMap":71},[76,97980,97981,97983,97986,97988,97990,97992,97994],{"class":78,"line":79},[76,97982,97948],{"class":90},[76,97984,97985],{"class":7296},"shape",[76,97987,370],{"class":82},[76,97989,123],{"class":90},[76,97991,402],{"class":119},[76,97993,84795],{"class":90},[76,97995,97996],{"class":540},"#创建10个元素的0数组\n",[19,97998,97999],{},"也可以指定类型",[66,98001,98003],{"className":68,"code":98002,"language":70,"meta":71,"style":71},"#指定类型\nnp.zeros(5,dtype=int)\n",[73,98004,98005,98010],{"__ignoreMap":71},[76,98006,98007],{"class":78,"line":79},[76,98008,98009],{"class":540},"#指定类型\n",[76,98011,98012,98014,98016,98018,98020,98022,98024],{"class":78,"line":94},[76,98013,97948],{"class":90},[76,98015,2583],{"class":119},[76,98017,2642],{"class":90},[76,98019,95524],{"class":7296},[76,98021,370],{"class":82},[76,98023,1360],{"class":119},[76,98025,130],{"class":90},[19,98027,98028],{},"②创建二维数组",[66,98030,98032],{"className":68,"code":98031,"language":70,"meta":71,"style":71},"np.zeros((3,4),dtype=int)\n",[73,98033,98034],{"__ignoreMap":71},[76,98035,98036,98039,98041,98043,98045,98047,98049,98051,98053],{"class":78,"line":79},[76,98037,98038],{"class":90},"np.zeros((",[76,98040,2339],{"class":119},[76,98042,2642],{"class":90},[76,98044,2557],{"class":119},[76,98046,44291],{"class":90},[76,98048,95524],{"class":7296},[76,98050,370],{"class":82},[76,98052,1360],{"class":119},[76,98054,130],{"class":90},[19,98056,98057],{},"③创建三维数组",[66,98059,98061],{"className":68,"code":98060,"language":70,"meta":71,"style":71},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[73,98062,98063,98068],{"__ignoreMap":71},[76,98064,98065],{"class":78,"line":79},[76,98066,98067],{"class":540},"#创建三维数组\n",[76,98069,98070,98072,98074,98076,98078,98080,98082,98084,98086,98088,98090],{"class":78,"line":94},[76,98071,98038],{"class":90},[76,98073,2339],{"class":119},[76,98075,2642],{"class":90},[76,98077,2557],{"class":119},[76,98079,2642],{"class":90},[76,98081,2583],{"class":119},[76,98083,44291],{"class":90},[76,98085,95524],{"class":7296},[76,98087,370],{"class":82},[76,98089,1360],{"class":119},[76,98091,130],{"class":90},[19,98093,98094],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[66,98096,98098],{"className":68,"code":98097,"language":70,"meta":71,"style":71},"#使用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",[73,98099,98100,98105,98120,98125,98130,98152],{"__ignoreMap":71},[76,98101,98102],{"class":78,"line":79},[76,98103,98104],{"class":540},"#使用zeros_like将创建的一维数组变成全0的数组\n",[76,98106,98107,98109,98111,98113,98115,98117],{"class":78,"line":94},[76,98108,2503],{"class":90},[76,98110,370],{"class":82},[76,98112,95026],{"class":90},[76,98114,2557],{"class":119},[76,98116,2693],{"class":90},[76,98118,98119],{"class":540},"#这个得到的结果：一维数组0，1，2，3\n",[76,98121,98122],{"class":78,"line":133},[76,98123,98124],{"class":90},"np.zeros_like(a)\n",[76,98126,98127],{"class":78,"line":145},[76,98128,98129],{"class":540},"#使用zeros_like将创建的二维数组变成全0的数组\n",[76,98131,98132,98134,98136,98138,98140,98142,98144,98146,98148,98150],{"class":78,"line":152},[76,98133,95330],{"class":90},[76,98135,370],{"class":82},[76,98137,97450],{"class":90},[76,98139,33539],{"class":7296},[76,98141,370],{"class":82},[76,98143,123],{"class":90},[76,98145,2557],{"class":119},[76,98147,2642],{"class":90},[76,98149,2583],{"class":119},[76,98151,656],{"class":90},[76,98153,98154],{"class":78,"line":157},[76,98155,98156],{"class":90},"np.zeros_like(aa)\n",[889,98158,98160],{"id":98159},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98162,98163],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[889,98165,98167],{"id":98166},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98169,98170],{},"①empty()用法",[66,98172,98174],{"className":68,"code":98173,"language":70,"meta":71,"style":71},"numpy.empty(shape,dtype=float,order='c')\n",[73,98175,98176],{"__ignoreMap":71},[76,98177,98178,98181,98183,98185,98187,98189,98191,98193,98195],{"class":78,"line":79},[76,98179,98180],{"class":90},"numpy.empty(shape,",[76,98182,95524],{"class":7296},[76,98184,370],{"class":82},[76,98186,2311],{"class":119},[76,98188,2642],{"class":90},[76,98190,97320],{"class":7296},[76,98192,370],{"class":82},[76,98194,78055],{"class":126},[76,98196,130],{"class":90},[19,98198,98199],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98201,98202],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98204,98205],{},[3583,98206],{"alt":71,"src":98207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98209,98210],{},"②empty()用法",[66,98212,98214],{"className":68,"code":98213,"language":70,"meta":71,"style":71},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[73,98215,98216,98237,98249,98270,98275],{"__ignoreMap":71},[76,98217,98218,98220,98222,98225,98227,98229,98231,98233,98235],{"class":78,"line":79},[76,98219,3103],{"class":90},[76,98221,370],{"class":82},[76,98223,98224],{"class":90},"np.empty(",[76,98226,402],{"class":119},[76,98228,2642],{"class":90},[76,98230,95524],{"class":7296},[76,98232,370],{"class":82},[76,98234,1360],{"class":119},[76,98236,130],{"class":90},[76,98238,98239,98241,98243,98245,98247],{"class":78,"line":94},[76,98240,3078],{"class":90},[76,98242,370],{"class":82},[76,98244,95026],{"class":90},[76,98246,2583],{"class":119},[76,98248,130],{"class":90},[76,98250,98251,98254,98256,98259,98261,98263,98266,98268],{"class":78,"line":133},[76,98252,98253],{"class":90},"np.add(",[76,98255,2345],{"class":119},[76,98257,98258],{"class":90},",x,",[76,98260,95078],{"class":7296},[76,98262,370],{"class":82},[76,98264,98265],{"class":90},"y[:",[76,98267,2583],{"class":119},[76,98269,6739],{"class":90},[76,98271,98272],{"class":78,"line":145},[76,98273,98274],{"class":540},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[76,98276,98277],{"class":78,"line":152},[76,98278,98279],{"class":90},"y\n",[19,98281,13568],{},[19,98283,98284],{},[3583,98285],{"alt":71,"src":98286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[66,98288,98290],{"className":68,"code":98289,"language":70,"meta":71,"style":71},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[73,98291,98292,98308,98328,98343],{"__ignoreMap":71},[76,98293,98294,98296,98298,98300,98302,98304,98306],{"class":78,"line":79},[76,98295,3078],{"class":90},[76,98297,370],{"class":82},[76,98299,95026],{"class":90},[76,98301,669],{"class":119},[76,98303,2642],{"class":90},[76,98305,2608],{"class":119},[76,98307,130],{"class":90},[76,98309,98310,98312,98314,98316,98318,98320,98322,98324,98326],{"class":78,"line":94},[76,98311,3103],{"class":90},[76,98313,370],{"class":82},[76,98315,98224],{"class":90},[76,98317,2583],{"class":119},[76,98319,2642],{"class":90},[76,98321,95524],{"class":7296},[76,98323,370],{"class":82},[76,98325,1360],{"class":119},[76,98327,130],{"class":90},[76,98329,98330,98333,98335,98337,98339,98341],{"class":78,"line":133},[76,98331,98332],{"class":90},"np.add(x,",[76,98334,2345],{"class":119},[76,98336,2642],{"class":90},[76,98338,95078],{"class":7296},[76,98340,370],{"class":82},[76,98342,95473],{"class":90},[76,98344,98345],{"class":78,"line":145},[76,98346,98347],{"class":540},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98349,98350],{},"③empty_like()",[19,98352,98353],{},[2416,98354,98355,98356,98361],{},"创建一个",[2416,98357,98358],{},[2416,98359,98360],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98363,98364,98367],{},[73,98365,98366],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98369,98370],{},[3583,98371],{"alt":71,"src":98372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[889,98374,98376],{"id":98375},"_264-用法","2.6.4 ？？用法",[19,98378,98379],{},"当想查看一个函数的参数时，可以通过？？来实现",[66,98381,98383],{"className":68,"code":98382,"language":70,"meta":71,"style":71},"np.full??\n",[73,98384,98385],{"__ignoreMap":71},[76,98386,98387,98390],{"class":78,"line":79},[76,98388,98389],{"class":90},"np.full",[76,98391,98392],{"class":79429},"??\n",[889,98394,98396],{"id":98395},"_265-full创建数组","2.6.5 full()创建数组",[66,98398,98400],{"className":68,"code":98399,"language":70,"meta":71,"style":71},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[73,98401,98402,98407],{"__ignoreMap":71},[76,98403,98404],{"class":78,"line":79},[76,98405,98406],{"class":90},"full(shape,fill_value)\n",[76,98408,98409],{"class":78,"line":94},[76,98410,98411],{"class":90},"创建全为某个指定值的数组\n",[19,98413,96554],{},[66,98415,98417],{"className":68,"code":98416,"language":70,"meta":71,"style":71},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[73,98418,98419,98424],{"__ignoreMap":71},[76,98420,98421],{"class":78,"line":79},[76,98422,98423],{"class":540},"#创建一个一维数组,以20进行填充\n",[76,98425,98426,98429,98431,98433,98435],{"class":78,"line":94},[76,98427,98428],{"class":90},"np.full(",[76,98430,402],{"class":119},[76,98432,2642],{"class":90},[76,98434,408],{"class":119},[76,98436,130],{"class":90},[19,98438,95315],{},[66,98440,98442],{"className":68,"code":98441,"language":70,"meta":71,"style":71},"#创建二维数组\nnp.full((3,5),11)\n",[73,98443,98444,98448],{"__ignoreMap":71},[76,98445,98446],{"class":78,"line":79},[76,98447,95971],{"class":540},[76,98449,98450,98453,98455,98457,98459,98461,98463],{"class":78,"line":94},[76,98451,98452],{"class":90},"np.full((",[76,98454,2339],{"class":119},[76,98456,2642],{"class":90},[76,98458,2583],{"class":119},[76,98460,44291],{"class":90},[76,98462,2735],{"class":119},[76,98464,130],{"class":90},[19,98466,98467],{},"③full_like用法",[19,98469,98470],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98472,98473],{},"这里是指定填充而已",[66,98475,98477],{"className":68,"code":98476,"language":70,"meta":71,"style":71},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[73,98478,98479,98484,98508,98513],{"__ignoreMap":71},[76,98480,98481],{"class":78,"line":79},[76,98482,98483],{"class":540},"#创建一个指定形状数组\n",[76,98485,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506],{"class":78,"line":94},[76,98487,2503],{"class":90},[76,98489,370],{"class":82},[76,98491,95026],{"class":90},[76,98493,669],{"class":119},[76,98495,2642],{"class":90},[76,98497,2589],{"class":119},[76,98499,95031],{"class":90},[76,98501,2557],{"class":119},[76,98503,2642],{"class":90},[76,98505,2684],{"class":119},[76,98507,130],{"class":90},[76,98509,98510],{"class":78,"line":133},[76,98511,98512],{"class":540},"#进行指定填充\n",[76,98514,98515,98518,98520],{"class":78,"line":145},[76,98516,98517],{"class":90},"np.full_like(a,",[76,98519,402],{"class":119},[76,98521,130],{"class":90},[19,98523,13568],{},[19,98525,98526],{},[3583,98527],{"alt":71,"src":98528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[889,98530,98532],{"id":98531},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24047,98534,98536],{"id":98535},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[66,98538,98540],{"className":68,"code":98539,"language":70,"meta":71,"style":71},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[73,98541,98542,98559],{"__ignoreMap":71},[76,98543,98544,98547,98549,98551,98553,98555,98557],{"class":78,"line":79},[76,98545,98546],{"class":90},"np.eye(",[76,98548,2557],{"class":119},[76,98550,2642],{"class":90},[76,98552,95524],{"class":7296},[76,98554,370],{"class":82},[76,98556,1360],{"class":119},[76,98558,130],{"class":90},[76,98560,98561],{"class":78,"line":94},[76,98562,98563],{"class":540},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24047,98565,98567],{"id":98566},"_2662-法2identity","2.6.6.2 法2：identity()",[66,98569,98571],{"className":68,"code":98570,"language":70,"meta":71,"style":71},"#identity()\nnp.identity(5,dtype=int)\n",[73,98572,98573,98578],{"__ignoreMap":71},[76,98574,98575],{"class":78,"line":79},[76,98576,98577],{"class":540},"#identity()\n",[76,98579,98580,98583,98585,98587,98589,98591,98593],{"class":78,"line":94},[76,98581,98582],{"class":90},"np.identity(",[76,98584,2583],{"class":119},[76,98586,2642],{"class":90},[76,98588,95524],{"class":7296},[76,98590,370],{"class":82},[76,98592,1360],{"class":119},[76,98594,130],{"class":90},[19,98596,98597],{},"两个函数是有区别的",[19,98599,98600],{},[3583,98601],{"alt":71,"src":98602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98604,98605],{},[3583,98606],{"alt":71,"src":98607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[66,98609,98611],{"className":68,"code":98610,"language":70,"meta":71,"style":71},"# 创建一个 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",[73,98612,98613,98618,98630,98635,98640,98645,98650,98654,98659,98679,98683,98688,98693],{"__ignoreMap":71},[76,98614,98615],{"class":78,"line":79},[76,98616,98617],{"class":540},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[76,98619,98620,98622,98624,98626,98628],{"class":78,"line":94},[76,98621,98546],{"class":90},[76,98623,2339],{"class":119},[76,98625,405],{"class":90},[76,98627,2557],{"class":119},[76,98629,130],{"class":90},[76,98631,98632],{"class":78,"line":133},[76,98633,98634],{"class":540},"# 输出:\n",[76,98636,98637],{"class":78,"line":145},[76,98638,98639],{"class":540},"# [[1. 0. 0. 0.]\n",[76,98641,98642],{"class":78,"line":152},[76,98643,98644],{"class":540},"#  [0. 1. 0. 0.]\n",[76,98646,98647],{"class":78,"line":157},[76,98648,98649],{"class":540},"#  [0. 0. 1. 0.]]\n",[76,98651,98652],{"class":78,"line":246},[76,98653,149],{"emptyLinePlaceholder":148},[76,98655,98656],{"class":78,"line":251},[76,98657,98658],{"class":540},"# 对角线向上偏移1\n",[76,98660,98661,98663,98665,98667,98669,98671,98673,98675,98677],{"class":78,"line":257},[76,98662,98546],{"class":90},[76,98664,2339],{"class":119},[76,98666,405],{"class":90},[76,98668,2557],{"class":119},[76,98670,405],{"class":90},[76,98672,2755],{"class":7296},[76,98674,370],{"class":82},[76,98676,669],{"class":119},[76,98678,130],{"class":90},[76,98680,98681],{"class":78,"line":641},[76,98682,98634],{"class":540},[76,98684,98685],{"class":78,"line":646},[76,98686,98687],{"class":540},"# [[0. 1. 0. 0.]\n",[76,98689,98690],{"class":78,"line":659},[76,98691,98692],{"class":540},"#  [0. 0. 1. 0.]\n",[76,98694,98695],{"class":78,"line":1608},[76,98696,98697],{"class":540},"#  [0. 0. 0. 1.]]\n",[889,98699,98701],{"id":98700},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[66,98703,98705],{"className":68,"code":98704,"language":70,"meta":71,"style":71},"#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",[73,98706,98707,98712,98716,98721,98726,98731,98736,98741,98746,98751,98756],{"__ignoreMap":71},[76,98708,98709],{"class":78,"line":79},[76,98710,98711],{"class":540},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[76,98713,98714],{"class":78,"line":94},[76,98715,97720],{"class":126},[76,98717,98718],{"class":78,"line":133},[76,98719,98720],{"class":126},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[76,98722,98723],{"class":78,"line":145},[76,98724,98725],{"class":126},"参数介绍：\n",[76,98727,98728],{"class":78,"line":152},[76,98729,98730],{"class":126},"start：序列的起始值\n",[76,98732,98733],{"class":78,"line":157},[76,98734,98735],{"class":126},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[76,98737,98738],{"class":78,"line":246},[76,98739,98740],{"class":126},"num：要生长的等步长的样本数量，默认为50\n",[76,98742,98743],{"class":78,"line":251},[76,98744,98745],{"class":126},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[76,98747,98748],{"class":78,"line":257},[76,98749,98750],{"class":126},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[76,98752,98753],{"class":78,"line":641},[76,98754,98755],{"class":126},"dtype：ndarry的数据类型\n",[76,98757,98758],{"class":78,"line":646},[76,98759,97720],{"class":126},[19,98761,98762],{},[3583,98763],{"alt":71,"src":98764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98766,98767],{},"这里num=是可以省略的",[19,98769,98770],{},"也就是下方两行代码结果是一模一样的",[66,98772,98774],{"className":68,"code":98773,"language":70,"meta":71,"style":71},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[73,98775,98776,98793],{"__ignoreMap":71},[76,98777,98778,98781,98783,98785,98787,98789,98791],{"class":78,"line":79},[76,98779,98780],{"class":90},"np.linspace(",[76,98782,669],{"class":119},[76,98784,2642],{"class":90},[76,98786,2583],{"class":119},[76,98788,2642],{"class":90},[76,98790,2583],{"class":119},[76,98792,130],{"class":90},[76,98794,98795,98797,98799,98801,98803,98805,98807,98809,98811],{"class":78,"line":94},[76,98796,98780],{"class":90},[76,98798,669],{"class":119},[76,98800,2642],{"class":90},[76,98802,2583],{"class":119},[76,98804,2642],{"class":90},[76,98806,3777],{"class":7296},[76,98808,370],{"class":82},[76,98810,2583],{"class":119},[76,98812,130],{"class":90},[889,98814,98816],{"id":98815},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[66,98818,98820],{"className":68,"code":98819,"language":70,"meta":71,"style":71},"#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",[73,98821,98822,98827,98831,98836,98841,98846,98851,98855,98860,98865,98869],{"__ignoreMap":71},[76,98823,98824],{"class":78,"line":79},[76,98825,98826],{"class":540},"#logspace函数用于创建一个等比数列，格式如下：\n",[76,98828,98829],{"class":78,"line":94},[76,98830,97720],{"class":126},[76,98832,98833],{"class":78,"line":133},[76,98834,98835],{"class":126},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[76,98837,98838],{"class":78,"line":145},[76,98839,98840],{"class":126},"参数为：\n",[76,98842,98843],{"class":78,"line":152},[76,98844,98845],{"class":126},"start:序列的起始位置为：base**start\n",[76,98847,98848],{"class":78,"line":157},[76,98849,98850],{"class":126},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[76,98852,98853],{"class":78,"line":246},[76,98854,98740],{"class":126},[76,98856,98857],{"class":78,"line":251},[76,98858,98859],{"class":126},"endpoint：是否包含 stop 这个值，默认是 True\n",[76,98861,98862],{"class":78,"line":257},[76,98863,98864],{"class":126},"base：对数的底数，默认是 10（常见对数）\n",[76,98866,98867],{"class":78,"line":641},[76,98868,98755],{"class":126},[76,98870,98871],{"class":78,"line":646},[76,98872,97720],{"class":126},[19,98874,98875],{},[3583,98876],{"alt":71,"src":98877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98879,98880],{},"logspace()函数中的num参数也是可以不写num=的",[19,98882,98883],{},"endpoint是不可以省略的",[2178,98885,98886],{},"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":71,"searchDepth":94,"depth":94,"links":98888},[98889,98893,98898,98902,98906,98907],{"id":97280,"depth":94,"text":97281,"children":98890},[98891,98892],{"id":97284,"depth":133,"text":97285},{"id":97356,"depth":133,"text":97357},{"id":97388,"depth":94,"text":97389,"children":98894},[98895,98896,98897],{"id":97392,"depth":133,"text":97393},{"id":97574,"depth":133,"text":97575},{"id":97652,"depth":133,"text":97653},{"id":97687,"depth":94,"text":97688,"children":98899},[98900,98901],{"id":97691,"depth":133,"text":97692},{"id":97747,"depth":133,"text":97748},{"id":97843,"depth":94,"text":97844,"children":98903},[98904,98905],{"id":97847,"depth":133,"text":97848},{"id":97859,"depth":133,"text":97860},{"id":97893,"depth":94,"text":97894},{"id":97930,"depth":94,"text":97931,"children":98908},[98909,98910,98911,98912,98913,98914,98915,98916],{"id":97934,"depth":133,"text":97935},{"id":98159,"depth":133,"text":98160},{"id":98166,"depth":133,"text":98167},{"id":98375,"depth":133,"text":98376},{"id":98395,"depth":133,"text":98396},{"id":98531,"depth":133,"text":98532},{"id":98700,"depth":133,"text":98701},{"id":98815,"depth":133,"text":98816},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97272,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98923,"title":98924,"body":98925,"description":2201,"extension":2202,"meta":99018,"navigation":148,"path":99019,"seo":99020,"stem":99021,"__hash__":99022},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98926,"toc":99016},[98927,98930,98933,98936,98939,98942,98945,98948,98951,98954,98957,98960,98962,98965,98968,98973,98976,98979,99013],[10,98928,98924],{"id":98929},"_20魔法命令mprun",[19,98931,98932],{},"逐行分析数据内存的使用情况",[19,98934,98935],{},"语法格式：",[19,98937,98938],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98940,98941],{},"分析结果列如下：",[19,98943,98944],{},"Line行号",[19,98946,98947],{},"Mem usage内存使用大小",[19,98949,98950],{},"increment内存增量",[19,98952,98953],{},"Line content代码内容",[19,98955,98956],{},"补充说明：",[19,98958,98959],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98961,97227],{},[19,98963,98964],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98966,98967],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98969,98970],{},[3583,98971],{"alt":71,"src":98972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98974,98975],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98977,98978],{},"这时候需要重新加载模块",[66,98980,98982],{"className":68,"code":98981,"language":70,"meta":71,"style":71},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[73,98983,98984,98989,98996,99001],{"__ignoreMap":71},[76,98985,98986],{"class":78,"line":79},[76,98987,98988],{"class":540},"#重新加载模块\n",[76,98990,98991,98993],{"class":78,"line":94},[76,98992,32438],{"class":82},[76,98994,98995],{"class":90}," importlib\n",[76,98997,98998],{"class":78,"line":133},[76,98999,99000],{"class":90},"importlib.reload(mprun_test)\n",[76,99002,99003,99005,99008,99010],{"class":78,"line":145},[76,99004,2592],{"class":82},[76,99006,99007],{"class":90},"mprun ",[76,99009,666],{"class":82},[76,99011,99012],{"class":90},"f mprun_test.fun_test mprun_test.fun_test()\n",[2178,99014,99015],{},"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":71,"searchDepth":94,"depth":94,"links":99017},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98924,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99024,"title":99025,"body":99026,"description":2201,"extension":2202,"meta":99043,"navigation":148,"path":99044,"seo":99045,"stem":99046,"__hash__":99047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99027,"toc":99041},[99028,99031,99036],[10,99029,99025],{"id":99030},"_3一维数组的索引和切片",[19,99032,99033],{},[3583,99034],{"alt":71,"src":99035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99037,99038],{},[3583,99039],{"alt":71,"src":99040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":71,"searchDepth":94,"depth":94,"links":99042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99025,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99049,"title":99050,"body":99051,"description":2201,"extension":2202,"meta":99534,"navigation":148,"path":99535,"seo":99536,"stem":99537,"__hash__":99538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99052,"toc":99532},[99053,99056,99059,99064,99097,99100,99138,99141,99175,99178,99283,99286,99323,99326,99427,99430,99481,99484,99526,99529],[10,99054,99050],{"id":99055},"_4二维数组的索引与切片",[19,99057,99058],{},"①获取指定单个元素",[19,99060,99061],{},[3583,99062],{"alt":71,"src":99063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[66,99065,99067],{"className":68,"code":99066,"language":70,"meta":71,"style":71},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[73,99068,99069,99074,99079,99084],{"__ignoreMap":71},[76,99070,99071],{"class":78,"line":79},[76,99072,99073],{"class":540},"#获取元素9\n",[76,99075,99076],{"class":78,"line":94},[76,99077,99078],{"class":540},"#先获取所在行，再获取所在列\n",[76,99080,99081],{"class":78,"line":133},[76,99082,99083],{"class":540},"#数组[行索引号，列索引号]\n",[76,99085,99086,99089,99091,99093,99095],{"class":78,"line":145},[76,99087,99088],{"class":90},"a[",[76,99090,669],{"class":119},[76,99092,2642],{"class":90},[76,99094,2345],{"class":119},[76,99096,35284],{"class":90},[19,99098,99099],{},"②获取整行元素",[66,99101,99103],{"className":68,"code":99102,"language":70,"meta":71,"style":71},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[73,99104,99105,99110,99115,99123,99128],{"__ignoreMap":71},[76,99106,99107],{"class":78,"line":79},[76,99108,99109],{"class":540},"#获取整行 数组[行索引号]\n",[76,99111,99112],{"class":78,"line":94},[76,99113,99114],{"class":540},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[76,99116,99117,99119,99121],{"class":78,"line":133},[76,99118,99088],{"class":90},[76,99120,2345],{"class":119},[76,99122,35284],{"class":90},[76,99124,99125],{"class":78,"line":145},[76,99126,99127],{"class":540},"#也可以负索引获取一行\n",[76,99129,99130,99132,99134,99136],{"class":78,"line":152},[76,99131,99088],{"class":90},[76,99133,666],{"class":82},[76,99135,669],{"class":119},[76,99137,35284],{"class":90},[19,99139,99140],{},"③获取整列元素",[66,99142,99144],{"className":68,"code":99143,"language":70,"meta":71,"style":71},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[73,99145,99146,99151,99160,99165],{"__ignoreMap":71},[76,99147,99148],{"class":78,"line":79},[76,99149,99150],{"class":540},"#获取整列 数组名[:,列索引]\n",[76,99152,99153,99156,99158],{"class":78,"line":94},[76,99154,99155],{"class":90},"a[:,",[76,99157,2345],{"class":119},[76,99159,35284],{"class":90},[76,99161,99162],{"class":78,"line":133},[76,99163,99164],{"class":540},"#也可以负索引获取一列\n",[76,99166,99167,99169,99171,99173],{"class":78,"line":145},[76,99168,99155],{"class":90},[76,99170,666],{"class":82},[76,99172,669],{"class":119},[76,99174,35284],{"class":90},[19,99176,99177],{},"④部分行部分列的元素",[66,99179,99181],{"className":68,"code":99180,"language":70,"meta":71,"style":71},"#部分行部分列 数组名[行切片，列切片]\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",[73,99182,99183,99188,99198,99202,99206,99211,99216,99220,99232,99236,99240,99245,99250,99255,99260,99264,99269],{"__ignoreMap":71},[76,99184,99185],{"class":78,"line":79},[76,99186,99187],{"class":540},"#部分行部分列 数组名[行切片，列切片]\n",[76,99189,99190,99193,99195],{"class":78,"line":94},[76,99191,99192],{"class":90},"a[:",[76,99194,2345],{"class":119},[76,99196,99197],{"class":90},",:]\n",[76,99199,99200],{"class":78,"line":133},[76,99201,95588],{"class":540},[76,99203,99204],{"class":78,"line":145},[76,99205,95952],{"class":126},[76,99207,99208],{"class":78,"line":152},[76,99209,99210],{"class":126},"array([[ 1,  2,  3,  4,  5,  6],\n",[76,99212,99213],{"class":78,"line":157},[76,99214,99215],{"class":126},"       [ 7,  8,  9, 10, 11, 12]])\n",[76,99217,99218],{"class":78,"line":246},[76,99219,95952],{"class":126},[76,99221,99222,99224,99226,99228,99230],{"class":78,"line":251},[76,99223,99155],{"class":90},[76,99225,669],{"class":119},[76,99227,3117],{"class":90},[76,99229,2557],{"class":119},[76,99231,35284],{"class":90},[76,99233,99234],{"class":78,"line":257},[76,99235,95588],{"class":540},[76,99237,99238],{"class":78,"line":641},[76,99239,95952],{"class":126},[76,99241,99242],{"class":78,"line":646},[76,99243,99244],{"class":126},"array([[ 2,  3,  4],\n",[76,99246,99247],{"class":78,"line":659},[76,99248,99249],{"class":126},"       [ 8,  9, 10],\n",[76,99251,99252],{"class":78,"line":1608},[76,99253,99254],{"class":126},"       [14, 15, 16],\n",[76,99256,99257],{"class":78,"line":1632},[76,99258,99259],{"class":126},"       [20, 21, 22]])\n",[76,99261,99262],{"class":78,"line":1637},[76,99263,95952],{"class":126},[76,99265,99266],{"class":78,"line":1642},[76,99267,99268],{"class":540},"#对列行同时进行切片，使用了step参数\n",[76,99270,99271,99274,99276,99279,99281],{"class":78,"line":1652},[76,99272,99273],{"class":90},"a[::",[76,99275,2345],{"class":119},[76,99277,99278],{"class":90},",::",[76,99280,2345],{"class":119},[76,99282,35284],{"class":90},[19,99284,99285],{},"⑤同时获取两个元素",[66,99287,99289],{"className":68,"code":99288,"language":70,"meta":71,"style":71},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[73,99290,99291,99296,99301],{"__ignoreMap":71},[76,99292,99293],{"class":78,"line":79},[76,99294,99295],{"class":540},"#同时获取第三行第二列，第四行第一列\n",[76,99297,99298],{"class":78,"line":94},[76,99299,99300],{"class":540},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[76,99302,99303,99306,99308,99310,99312,99314,99316,99318,99320],{"class":78,"line":133},[76,99304,99305],{"class":90},"a[(",[76,99307,2345],{"class":119},[76,99309,2642],{"class":90},[76,99311,2339],{"class":119},[76,99313,44282],{"class":90},[76,99315,669],{"class":119},[76,99317,2642],{"class":90},[76,99319,1294],{"class":119},[76,99321,99322],{"class":90},")]\n",[19,99324,99325],{},"⑥切片，对行进行反向获取",[66,99327,99329],{"className":68,"code":99328,"language":70,"meta":71,"style":71},"#切片 对所有行进行反向获取\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",[73,99330,99331,99336,99346,99350,99354,99359,99364,99369,99374,99378,99383,99399,99403,99408,99413,99418,99423],{"__ignoreMap":71},[76,99332,99333],{"class":78,"line":79},[76,99334,99335],{"class":540},"#切片 对所有行进行反向获取\n",[76,99337,99338,99340,99342,99344],{"class":78,"line":94},[76,99339,99273],{"class":90},[76,99341,666],{"class":82},[76,99343,669],{"class":119},[76,99345,35284],{"class":90},[76,99347,99348],{"class":78,"line":133},[76,99349,95588],{"class":540},[76,99351,99352],{"class":78,"line":145},[76,99353,95952],{"class":126},[76,99355,99356],{"class":78,"line":152},[76,99357,99358],{"class":126},"array([[19, 20, 21, 22, 23, 24],\n",[76,99360,99361],{"class":78,"line":157},[76,99362,99363],{"class":126},"       [13, 14, 15, 16, 17, 18],\n",[76,99365,99366],{"class":78,"line":246},[76,99367,99368],{"class":126},"       [ 7,  8,  9, 10, 11, 12],\n",[76,99370,99371],{"class":78,"line":251},[76,99372,99373],{"class":126},"       [ 1,  2,  3,  4,  5,  6]])\n",[76,99375,99376],{"class":78,"line":257},[76,99377,95952],{"class":126},[76,99379,99380],{"class":78,"line":641},[76,99381,99382],{"class":540},"#对行列都进行反向切片获取\n",[76,99384,99385,99387,99389,99391,99393,99395,99397],{"class":78,"line":646},[76,99386,99273],{"class":90},[76,99388,666],{"class":82},[76,99390,669],{"class":119},[76,99392,99278],{"class":90},[76,99394,666],{"class":82},[76,99396,669],{"class":119},[76,99398,35284],{"class":90},[76,99400,99401],{"class":78,"line":659},[76,99402,95952],{"class":126},[76,99404,99405],{"class":78,"line":1608},[76,99406,99407],{"class":126},"array([[24, 23, 22, 21, 20, 19],\n",[76,99409,99410],{"class":78,"line":1632},[76,99411,99412],{"class":126},"       [18, 17, 16, 15, 14, 13],\n",[76,99414,99415],{"class":78,"line":1637},[76,99416,99417],{"class":126},"       [12, 11, 10,  9,  8,  7],\n",[76,99419,99420],{"class":78,"line":1642},[76,99421,99422],{"class":126},"       [ 6,  5,  4,  3,  2,  1]])\n",[76,99424,99425],{"class":78,"line":1652},[76,99426,95952],{"class":126},[19,99428,99429],{},"⑦修改元素",[66,99431,99433],{"className":68,"code":99432,"language":70,"meta":71,"style":71},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[73,99434,99435,99440,99458,99463],{"__ignoreMap":71},[76,99436,99437],{"class":78,"line":79},[76,99438,99439],{"class":540},"#获取前两行和前两列\n",[76,99441,99442,99445,99447,99449,99451,99454,99456],{"class":78,"line":94},[76,99443,99444],{"class":90},"sub_a",[76,99446,370],{"class":82},[76,99448,99192],{"class":90},[76,99450,2345],{"class":119},[76,99452,99453],{"class":90},",:",[76,99455,2345],{"class":119},[76,99457,35284],{"class":90},[76,99459,99460],{"class":78,"line":133},[76,99461,99462],{"class":540},"#修改sub_a第一个元素的值\n",[76,99464,99465,99468,99470,99472,99474,99476,99478],{"class":78,"line":145},[76,99466,99467],{"class":90},"sub_a[",[76,99469,1294],{"class":119},[76,99471,2642],{"class":90},[76,99473,1294],{"class":119},[76,99475,3196],{"class":90},[76,99477,370],{"class":82},[76,99479,99480],{"class":119},"100\n",[19,99482,99483],{},"⑧数组复制copy()",[66,99485,99487],{"className":68,"code":99486,"language":70,"meta":71,"style":71},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[73,99488,99489,99494,99504,99509],{"__ignoreMap":71},[76,99490,99491],{"class":78,"line":79},[76,99492,99493],{"class":540},"#数组复制\n",[76,99495,99496,99499,99501],{"class":78,"line":94},[76,99497,99498],{"class":90},"copy_a",[76,99500,370],{"class":82},[76,99502,99503],{"class":90},"np.copy(sub_a)\n",[76,99505,99506],{"class":78,"line":133},[76,99507,99508],{"class":540},"#修改copy_a后不影响原数组\n",[76,99510,99511,99514,99516,99518,99520,99522,99524],{"class":78,"line":145},[76,99512,99513],{"class":90},"copy_a[",[76,99515,1294],{"class":119},[76,99517,2642],{"class":90},[76,99519,1294],{"class":119},[76,99521,3196],{"class":90},[76,99523,370],{"class":82},[76,99525,99480],{"class":119},[19,99527,99528],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2178,99530,99531],{},"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":71,"searchDepth":94,"depth":94,"links":99533},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99050,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99540,"title":99541,"body":99542,"description":2201,"extension":2202,"meta":100034,"navigation":148,"path":100035,"seo":100036,"stem":100037,"__hash__":100038},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99543,"toc":100026},[99544,99547,99551,99554,99557,99610,99613,99638,99641,99660,99680,99683,99699,99703,99749,99753,99795,99799,99802,99805,99808,99811,99814,99876,99936,99940,99943,100000,100004,100009,100018,100023],[10,99545,99541],{"id":99546},"_5改变数组的维度",[14,99548,99550],{"id":99549},"_51-使用reshape","5.1 使用reshape()",[19,99552,99553],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99555,99556],{},"①一维数组转换为二维数组",[66,99558,99560],{"className":68,"code":99559,"language":70,"meta":71,"style":71},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[73,99561,99562,99578,99583,99588,99593],{"__ignoreMap":71},[76,99563,99564,99566,99568,99570,99572,99574,99576],{"class":78,"line":79},[76,99565,2503],{"class":90},[76,99567,370],{"class":82},[76,99569,95026],{"class":90},[76,99571,669],{"class":119},[76,99573,2642],{"class":90},[76,99575,2785],{"class":119},[76,99577,130],{"class":90},[76,99579,99580],{"class":78,"line":94},[76,99581,99582],{"class":540},"#将一维数组进行转换\n",[76,99584,99585],{"class":78,"line":133},[76,99586,99587],{"class":540},"#注意点：元素个数不可以变\n",[76,99589,99590],{"class":78,"line":145},[76,99591,99592],{"class":540},"#转换维度要保持一致，不一致就异常！！！\n",[76,99594,99595,99597,99599,99602,99604,99606,99608],{"class":78,"line":152},[76,99596,95330],{"class":90},[76,99598,370],{"class":82},[76,99600,99601],{"class":90},"a.reshape(",[76,99603,2345],{"class":119},[76,99605,2642],{"class":90},[76,99607,2608],{"class":119},[76,99609,130],{"class":90},[19,99611,99612],{},"②一维数组转换为三维数组",[66,99614,99616],{"className":68,"code":99615,"language":70,"meta":71,"style":71},"aaa=a.reshape(2,3,2)\n",[73,99617,99618],{"__ignoreMap":71},[76,99619,99620,99622,99624,99626,99628,99630,99632,99634,99636],{"class":78,"line":79},[76,99621,97544],{"class":90},[76,99623,370],{"class":82},[76,99625,99601],{"class":90},[76,99627,2345],{"class":119},[76,99629,2642],{"class":90},[76,99631,2339],{"class":119},[76,99633,2642],{"class":90},[76,99635,2345],{"class":119},[76,99637,130],{"class":90},[19,99639,99640],{},"③二维数组转化为一维数组",[66,99642,99644],{"className":68,"code":99643,"language":70,"meta":71,"style":71},"#知道元素个数：\naa.reshape(12)\n",[73,99645,99646,99651],{"__ignoreMap":71},[76,99647,99648],{"class":78,"line":79},[76,99649,99650],{"class":540},"#知道元素个数：\n",[76,99652,99653,99656,99658],{"class":78,"line":94},[76,99654,99655],{"class":90},"aa.reshape(",[76,99657,2760],{"class":119},[76,99659,130],{"class":90},[66,99661,99663],{"className":68,"code":99662,"language":70,"meta":71,"style":71},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[73,99664,99665,99670],{"__ignoreMap":71},[76,99666,99667],{"class":78,"line":79},[76,99668,99669],{"class":540},"#不知道元素个数，参数传递-1\n",[76,99671,99672,99674,99676,99678],{"class":78,"line":94},[76,99673,99655],{"class":90},[76,99675,666],{"class":82},[76,99677,669],{"class":119},[76,99679,130],{"class":90},[19,99681,99682],{},"④三维数组转换为一维数组",[66,99684,99686],{"className":68,"code":99685,"language":70,"meta":71,"style":71},"aaa.reshape(-1)\n",[73,99687,99688],{"__ignoreMap":71},[76,99689,99690,99693,99695,99697],{"class":78,"line":79},[76,99691,99692],{"class":90},"aaa.reshape(",[76,99694,666],{"class":82},[76,99696,669],{"class":119},[76,99698,130],{"class":90},[14,99700,99702],{"id":99701},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[66,99704,99706],{"className":68,"code":99705,"language":70,"meta":71,"style":71},"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",[73,99707,99708,99735,99740,99744],{"__ignoreMap":71},[76,99709,99710,99712,99714,99716,99718,99720,99722,99724,99726,99728,99730,99732],{"class":78,"line":79},[76,99711,95330],{"class":90},[76,99713,370],{"class":82},[76,99715,95026],{"class":90},[76,99717,669],{"class":119},[76,99719,2642],{"class":90},[76,99721,2785],{"class":119},[76,99723,95031],{"class":90},[76,99725,2345],{"class":119},[76,99727,2642],{"class":90},[76,99729,2608],{"class":119},[76,99731,2693],{"class":90},[76,99733,99734],{"class":540},"#转换为2行6列的数组\n",[76,99736,99737],{"class":78,"line":94},[76,99738,99739],{"class":90},"aa.revel()\n",[76,99741,99742],{"class":78,"line":133},[76,99743,95588],{"class":540},[76,99745,99746],{"class":78,"line":145},[76,99747,99748],{"class":540},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99750,99752],{"id":99751},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[66,99754,99756],{"className":68,"code":99755,"language":70,"meta":71,"style":71},"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",[73,99757,99758,99782,99787,99791],{"__ignoreMap":71},[76,99759,99760,99762,99764,99766,99768,99770,99772,99774,99776,99778,99780],{"class":78,"line":79},[76,99761,95330],{"class":90},[76,99763,370],{"class":82},[76,99765,95026],{"class":90},[76,99767,669],{"class":119},[76,99769,2642],{"class":90},[76,99771,2785],{"class":119},[76,99773,95031],{"class":90},[76,99775,2345],{"class":119},[76,99777,2642],{"class":90},[76,99779,2608],{"class":119},[76,99781,130],{"class":90},[76,99783,99784],{"class":78,"line":94},[76,99785,99786],{"class":90},"aa.flatten()\n",[76,99788,99789],{"class":78,"line":133},[76,99790,95588],{"class":540},[76,99792,99793],{"class":78,"line":145},[76,99794,99748],{"class":540},[14,99796,99798],{"id":99797},"_54-使用resize","5.4 使用resize()",[19,99800,99801],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99803,99804],{},"通过resize方法可以改变数组的维度",[19,99806,99807],{},"#resize修改数组维度",[19,99809,99810],{},"#以元组的形式指定形状",[19,99812,99813],{},"#改变的是原数组",[66,99815,99817],{"className":68,"code":99816,"language":70,"meta":71,"style":71},"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",[73,99818,99819,99835,99855,99868,99872],{"__ignoreMap":71},[76,99820,99821,99823,99825,99827,99829,99831,99833],{"class":78,"line":79},[76,99822,2503],{"class":90},[76,99824,370],{"class":82},[76,99826,95026],{"class":90},[76,99828,669],{"class":119},[76,99830,2642],{"class":90},[76,99832,2785],{"class":119},[76,99834,130],{"class":90},[76,99836,99837,99840,99842,99844,99846,99848,99850,99852],{"class":78,"line":94},[76,99838,99839],{"class":90},"a.shape",[76,99841,370],{"class":82},[76,99843,123],{"class":90},[76,99845,2345],{"class":119},[76,99847,2642],{"class":90},[76,99849,2608],{"class":119},[76,99851,2693],{"class":90},[76,99853,99854],{"class":540},"#改变了原数组\n",[76,99856,99857,99859,99861,99864,99866],{"class":78,"line":133},[76,99858,2503],{"class":90},[76,99860,370],{"class":82},[76,99862,99863],{"class":90},"resize((",[76,99865,2760],{"class":119},[76,99867,656],{"class":90},[76,99869,99870],{"class":78,"line":145},[76,99871,95588],{"class":540},[76,99873,99874],{"class":78,"line":152},[76,99875,99748],{"class":540},[66,99877,99879],{"className":68,"code":99878,"language":70,"meta":71,"style":71},"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",[73,99880,99881,99894,99898,99902,99907,99912,99917,99922,99927,99932],{"__ignoreMap":71},[76,99882,99883,99886,99888,99890,99892],{"class":78,"line":79},[76,99884,99885],{"class":90},"a.resize((",[76,99887,2608],{"class":119},[76,99889,2642],{"class":90},[76,99891,2345],{"class":119},[76,99893,656],{"class":90},[76,99895,99896],{"class":78,"line":94},[76,99897,95588],{"class":540},[76,99899,99900],{"class":78,"line":133},[76,99901,95952],{"class":126},[76,99903,99904],{"class":78,"line":145},[76,99905,99906],{"class":126},"array([[ 1,  2],\n",[76,99908,99909],{"class":78,"line":152},[76,99910,99911],{"class":126},"       [ 3,  4],\n",[76,99913,99914],{"class":78,"line":157},[76,99915,99916],{"class":126},"       [ 5,  6],\n",[76,99918,99919],{"class":78,"line":246},[76,99920,99921],{"class":126},"       [ 7,  8],\n",[76,99923,99924],{"class":78,"line":251},[76,99925,99926],{"class":126},"       [ 9, 10],\n",[76,99928,99929],{"class":78,"line":257},[76,99930,99931],{"class":126},"       [11, 12]])\n",[76,99933,99934],{"class":78,"line":641},[76,99935,95952],{"class":126},[14,99937,99939],{"id":99938},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99941,99942],{},"改变了原数组",[66,99944,99946],{"className":68,"code":99945,"language":70,"meta":71,"style":71},"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",[73,99947,99948,99964,99980,99984,99988,99992,99996],{"__ignoreMap":71},[76,99949,99950,99952,99954,99956,99958,99960,99962],{"class":78,"line":79},[76,99951,2503],{"class":90},[76,99953,370],{"class":82},[76,99955,95026],{"class":90},[76,99957,669],{"class":119},[76,99959,2642],{"class":90},[76,99961,2785],{"class":119},[76,99963,130],{"class":90},[76,99965,99966,99968,99970,99972,99974,99976,99978],{"class":78,"line":94},[76,99967,99839],{"class":90},[76,99969,370],{"class":82},[76,99971,123],{"class":90},[76,99973,2345],{"class":119},[76,99975,2642],{"class":90},[76,99977,2608],{"class":119},[76,99979,130],{"class":90},[76,99981,99982],{"class":78,"line":133},[76,99983,95588],{"class":540},[76,99985,99986],{"class":78,"line":145},[76,99987,95952],{"class":126},[76,99989,99990],{"class":78,"line":152},[76,99991,99210],{"class":126},[76,99993,99994],{"class":78,"line":157},[76,99995,99215],{"class":126},[76,99997,99998],{"class":78,"line":246},[76,99999,95952],{"class":126},[14,100001,100003],{"id":100002},"_56-重要比较","5.6 重要比较：",[19,100005,100006],{},[3583,100007],{"alt":71,"src":100008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100010,100011,100012,100014,100015,100017],{},"口诀：NumPy 函数要么用 ",[73,100013,97985],{},"，要么用 ",[73,100016,33539],{},"，创建结构用 shape，造数据用 size",[19,100019,100020],{},[3583,100021],{"alt":71,"src":100022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2178,100024,100025],{},"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":71,"searchDepth":94,"depth":94,"links":100027},[100028,100029,100030,100031,100032,100033],{"id":99549,"depth":94,"text":99550},{"id":99701,"depth":94,"text":99702},{"id":99751,"depth":94,"text":99752},{"id":99797,"depth":94,"text":99798},{"id":99938,"depth":94,"text":99939},{"id":100002,"depth":94,"text":100003},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99541,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100040,"title":100041,"body":100042,"description":2201,"extension":2202,"meta":101114,"navigation":148,"path":101115,"seo":101116,"stem":101117,"__hash__":101118},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100043,"toc":101108},[100044,100047,100051,100054,100057,100060,100125,100128,100168,100171,100253,100256,100261,100283,100285,100290,100295,100298,100301,100456,100459,100661,100665,100668,100671,100739,100741,100746,100749,100752,100832,100836,100839,100841,100914,100916,100921,100923,101003,101007,101010,101013,101016,101019,101022,101025,101105],[10,100045,100041],{"id":100046},"_6数组的拼接",[14,100048,100050],{"id":100049},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100052,100053],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100055,100056],{},"函数内部传两个数列构成的数列或者元组",[19,100058,100059],{},"①一维数组的拼接",[66,100061,100063],{"className":68,"code":100062,"language":70,"meta":71,"style":71},"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",[73,100064,100065,100085,100105,100110,100115,100120],{"__ignoreMap":71},[76,100066,100067,100069,100071,100073,100075,100077,100079,100081,100083],{"class":78,"line":79},[76,100068,2503],{"class":90},[76,100070,370],{"class":82},[76,100072,95048],{"class":90},[76,100074,669],{"class":119},[76,100076,2642],{"class":90},[76,100078,2345],{"class":119},[76,100080,2642],{"class":90},[76,100082,2339],{"class":119},[76,100084,6739],{"class":90},[76,100086,100087,100089,100091,100093,100095,100097,100099,100101,100103],{"class":78,"line":94},[76,100088,2527],{"class":90},[76,100090,370],{"class":82},[76,100092,95048],{"class":90},[76,100094,2557],{"class":119},[76,100096,2642],{"class":90},[76,100098,2583],{"class":119},[76,100100,2642],{"class":90},[76,100102,2608],{"class":119},[76,100104,6739],{"class":90},[76,100106,100107],{"class":78,"line":133},[76,100108,100109],{"class":540},"#调用concatenate进行数组拼接\n",[76,100111,100112],{"class":78,"line":145},[76,100113,100114],{"class":90},"np.concatenate((a,b))\n",[76,100116,100117],{"class":78,"line":152},[76,100118,100119],{"class":540},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[76,100121,100122],{"class":78,"line":157},[76,100123,100124],{"class":540},"#np.concatenate([a,b])\n",[19,100126,100127],{},"②一维多个数组拼接",[66,100129,100131],{"className":68,"code":100130,"language":70,"meta":71,"style":71},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[73,100132,100133,100138,100158,100163],{"__ignoreMap":71},[76,100134,100135],{"class":78,"line":79},[76,100136,100137],{"class":540},"#也可以多个数组进行拼接\n",[76,100139,100140,100142,100144,100146,100148,100150,100152,100154,100156],{"class":78,"line":94},[76,100141,2552],{"class":90},[76,100143,370],{"class":82},[76,100145,95048],{"class":90},[76,100147,402],{"class":119},[76,100149,2642],{"class":90},[76,100151,2735],{"class":119},[76,100153,2642],{"class":90},[76,100155,2785],{"class":119},[76,100157,6739],{"class":90},[76,100159,100160],{"class":78,"line":133},[76,100161,100162],{"class":90},"c\n",[76,100164,100165],{"class":78,"line":145},[76,100166,100167],{"class":90},"np.concatenate((a,b,c))\n",[19,100169,100170],{},"③二维数组拼接",[66,100172,100174],{"className":68,"code":100173,"language":70,"meta":71,"style":71},"#二维数组使用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",[73,100175,100176,100181,100205,100230,100235,100240],{"__ignoreMap":71},[76,100177,100178],{"class":78,"line":79},[76,100179,100180],{"class":540},"#二维数组使用concatenate进行拼接\n",[76,100182,100183,100185,100187,100189,100191,100193,100195,100197,100199,100201,100203],{"class":78,"line":94},[76,100184,95330],{"class":90},[76,100186,370],{"class":82},[76,100188,95026],{"class":90},[76,100190,669],{"class":119},[76,100192,2642],{"class":90},[76,100194,2785],{"class":119},[76,100196,95031],{"class":90},[76,100198,2339],{"class":119},[76,100200,2642],{"class":90},[76,100202,2557],{"class":119},[76,100204,130],{"class":90},[76,100206,100207,100210,100212,100214,100216,100218,100220,100222,100224,100226,100228],{"class":78,"line":133},[76,100208,100209],{"class":90},"bb",[76,100211,370],{"class":82},[76,100213,95026],{"class":90},[76,100215,2601],{"class":119},[76,100217,2642],{"class":90},[76,100219,2902],{"class":119},[76,100221,95031],{"class":90},[76,100223,2339],{"class":119},[76,100225,2642],{"class":90},[76,100227,2557],{"class":119},[76,100229,130],{"class":90},[76,100231,100232],{"class":78,"line":145},[76,100233,100234],{"class":540},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[76,100236,100237],{"class":78,"line":152},[76,100238,100239],{"class":540},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[76,100241,100242,100245,100247,100249,100251],{"class":78,"line":157},[76,100243,100244],{"class":90},"np.concatenate((aa,bb),",[76,100246,49547],{"class":7296},[76,100248,370],{"class":82},[76,100250,1294],{"class":119},[76,100252,130],{"class":90},[19,100254,100255],{},"结果：",[19,100257,100258],{},[3583,100259],{"alt":71,"src":100260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[66,100262,100264],{"className":68,"code":100263,"language":70,"meta":71,"style":71},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[73,100265,100266,100271],{"__ignoreMap":71},[76,100267,100268],{"class":78,"line":79},[76,100269,100270],{"class":540},"#指定axis为1进行拼接\n",[76,100272,100273,100275,100277,100279,100281],{"class":78,"line":94},[76,100274,100244],{"class":90},[76,100276,49547],{"class":7296},[76,100278,370],{"class":82},[76,100280,669],{"class":119},[76,100282,130],{"class":90},[19,100284,100255],{},[19,100286,100287],{},[3583,100288],{"alt":71,"src":100289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100291,100292],{},[2416,100293,100294],{},"二维数组总结：0竖着方向，1横着方向",[19,100296,100297],{},"④三维数组拼接",[19,100299,100300],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[66,100302,100304],{"className":68,"code":100303,"language":70,"meta":71,"style":71},"#两个三行六列\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",[73,100305,100306,100311,100339,100369,100374,100391,100396,100401,100406,100423,100428,100433,100438,100451],{"__ignoreMap":71},[76,100307,100308],{"class":78,"line":79},[76,100309,100310],{"class":540},"#两个三行六列\n",[76,100312,100313,100315,100317,100319,100321,100323,100325,100327,100329,100331,100333,100335,100337],{"class":78,"line":94},[76,100314,97544],{"class":90},[76,100316,370],{"class":82},[76,100318,95026],{"class":90},[76,100320,669],{"class":119},[76,100322,2642],{"class":90},[76,100324,2589],{"class":119},[76,100326,95031],{"class":90},[76,100328,2345],{"class":119},[76,100330,2642],{"class":90},[76,100332,2339],{"class":119},[76,100334,2642],{"class":90},[76,100336,2608],{"class":119},[76,100338,130],{"class":90},[76,100340,100341,100344,100346,100348,100350,100352,100355,100357,100359,100361,100363,100365,100367],{"class":78,"line":133},[76,100342,100343],{"class":90},"bbb",[76,100345,370],{"class":82},[76,100347,95026],{"class":90},[76,100349,2601],{"class":119},[76,100351,2642],{"class":90},[76,100353,100354],{"class":119},"137",[76,100356,95031],{"class":90},[76,100358,2345],{"class":119},[76,100360,2642],{"class":90},[76,100362,2339],{"class":119},[76,100364,2642],{"class":90},[76,100366,2608],{"class":119},[76,100368,130],{"class":90},[76,100370,100371],{"class":78,"line":145},[76,100372,100373],{"class":540},"#axis=0\n",[76,100375,100376,100378,100380,100383,100385,100387,100389],{"class":78,"line":152},[76,100377,2954],{"class":90},[76,100379,370],{"class":82},[76,100381,100382],{"class":90},"np.concatenate((aaa,bbb),",[76,100384,49547],{"class":7296},[76,100386,370],{"class":82},[76,100388,1294],{"class":119},[76,100390,130],{"class":90},[76,100392,100393],{"class":78,"line":157},[76,100394,100395],{"class":90},"s.shape\n",[76,100397,100398],{"class":78,"line":246},[76,100399,100400],{"class":540},"#输出：(4,3,6)\n",[76,100402,100403],{"class":78,"line":251},[76,100404,100405],{"class":540},"#axis=1\n",[76,100407,100408,100411,100413,100415,100417,100419,100421],{"class":78,"line":257},[76,100409,100410],{"class":90},"ss",[76,100412,370],{"class":82},[76,100414,100382],{"class":90},[76,100416,49547],{"class":7296},[76,100418,370],{"class":82},[76,100420,669],{"class":119},[76,100422,130],{"class":90},[76,100424,100425],{"class":78,"line":641},[76,100426,100427],{"class":90},"ss.shape\n",[76,100429,100430],{"class":78,"line":646},[76,100431,100432],{"class":540},"#输出：(2,6,6)\n",[76,100434,100435],{"class":78,"line":659},[76,100436,100437],{"class":540},"#axis=2\n",[76,100439,100440,100442,100444,100446,100448],{"class":78,"line":1608},[76,100441,100382],{"class":90},[76,100443,49547],{"class":7296},[76,100445,370],{"class":82},[76,100447,2345],{"class":119},[76,100449,100450],{"class":90},").shape\n",[76,100452,100453],{"class":78,"line":1632},[76,100454,100455],{"class":540},"#输出：（2，3，12）\n",[19,100457,100458],{},"⑤四维数组拼接",[66,100460,100462],{"className":68,"code":100461,"language":70,"meta":71,"style":71},"#两个三行六列\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",[73,100463,100464,100468,100496,100524,100549,100575,100579,100592,100597,100601,100613,100618,100622,100634,100639,100644,100656],{"__ignoreMap":71},[76,100465,100466],{"class":78,"line":79},[76,100467,100310],{"class":540},[76,100469,100470,100472,100474,100476,100478,100480,100482,100484,100486,100488,100490,100492,100494],{"class":78,"line":94},[76,100471,97544],{"class":90},[76,100473,370],{"class":82},[76,100475,95026],{"class":90},[76,100477,669],{"class":119},[76,100479,2642],{"class":90},[76,100481,2589],{"class":119},[76,100483,95031],{"class":90},[76,100485,2345],{"class":119},[76,100487,2642],{"class":90},[76,100489,2339],{"class":119},[76,100491,2642],{"class":90},[76,100493,2608],{"class":119},[76,100495,130],{"class":90},[76,100497,100498,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522],{"class":78,"line":133},[76,100499,100343],{"class":90},[76,100501,370],{"class":82},[76,100503,95026],{"class":90},[76,100505,2601],{"class":119},[76,100507,2642],{"class":90},[76,100509,100354],{"class":119},[76,100511,95031],{"class":90},[76,100513,2345],{"class":119},[76,100515,2642],{"class":90},[76,100517,2339],{"class":119},[76,100519,2642],{"class":90},[76,100521,2608],{"class":119},[76,100523,130],{"class":90},[76,100525,100526,100529,100531,100533,100535,100537,100539,100541,100543,100545,100547],{"class":78,"line":145},[76,100527,100528],{"class":90},"aaaa",[76,100530,370],{"class":82},[76,100532,99692],{"class":90},[76,100534,2345],{"class":119},[76,100536,2642],{"class":90},[76,100538,2339],{"class":119},[76,100540,2642],{"class":90},[76,100542,2339],{"class":119},[76,100544,2642],{"class":90},[76,100546,2345],{"class":119},[76,100548,130],{"class":90},[76,100550,100551,100554,100556,100559,100561,100563,100565,100567,100569,100571,100573],{"class":78,"line":152},[76,100552,100553],{"class":90},"bbbb",[76,100555,370],{"class":82},[76,100557,100558],{"class":90},"bbb.reshape(",[76,100560,2345],{"class":119},[76,100562,2642],{"class":90},[76,100564,2339],{"class":119},[76,100566,2642],{"class":90},[76,100568,2339],{"class":119},[76,100570,2642],{"class":90},[76,100572,2345],{"class":119},[76,100574,130],{"class":90},[76,100576,100577],{"class":78,"line":157},[76,100578,100373],{"class":540},[76,100580,100581,100584,100586,100588,100590],{"class":78,"line":246},[76,100582,100583],{"class":90},"np.concatenate((aaaa,bbbb),",[76,100585,49547],{"class":7296},[76,100587,370],{"class":82},[76,100589,1294],{"class":119},[76,100591,100450],{"class":90},[76,100593,100594],{"class":78,"line":251},[76,100595,100596],{"class":540},"#结果：（4，3，3，2）\n",[76,100598,100599],{"class":78,"line":257},[76,100600,100405],{"class":540},[76,100602,100603,100605,100607,100609,100611],{"class":78,"line":641},[76,100604,100583],{"class":90},[76,100606,49547],{"class":7296},[76,100608,370],{"class":82},[76,100610,669],{"class":119},[76,100612,100450],{"class":90},[76,100614,100615],{"class":78,"line":646},[76,100616,100617],{"class":540},"#结果：（2，6，3，2）\n",[76,100619,100620],{"class":78,"line":659},[76,100621,100437],{"class":540},[76,100623,100624,100626,100628,100630,100632],{"class":78,"line":1608},[76,100625,100583],{"class":90},[76,100627,49547],{"class":7296},[76,100629,370],{"class":82},[76,100631,2345],{"class":119},[76,100633,100450],{"class":90},[76,100635,100636],{"class":78,"line":1632},[76,100637,100638],{"class":540},"#结果：（2，3，6，2）\n",[76,100640,100641],{"class":78,"line":1637},[76,100642,100643],{"class":540},"#axis=3\n",[76,100645,100646,100648,100650,100652,100654],{"class":78,"line":1642},[76,100647,100583],{"class":90},[76,100649,49547],{"class":7296},[76,100651,370],{"class":82},[76,100653,2339],{"class":119},[76,100655,100450],{"class":90},[76,100657,100658],{"class":78,"line":1652},[76,100659,100660],{"class":540},"#结果：（2，3，3，4）\n",[14,100662,100664],{"id":100663},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100666,100667],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100669,100670],{},"①二维数组",[66,100672,100674],{"className":68,"code":100673,"language":70,"meta":71,"style":71},"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",[73,100675,100676,100700,100724,100729,100734],{"__ignoreMap":71},[76,100677,100678,100680,100682,100684,100686,100688,100690,100692,100694,100696,100698],{"class":78,"line":79},[76,100679,95330],{"class":90},[76,100681,370],{"class":82},[76,100683,95026],{"class":90},[76,100685,669],{"class":119},[76,100687,2642],{"class":90},[76,100689,2785],{"class":119},[76,100691,95031],{"class":90},[76,100693,2339],{"class":119},[76,100695,2642],{"class":90},[76,100697,2557],{"class":119},[76,100699,130],{"class":90},[76,100701,100702,100704,100706,100708,100710,100712,100714,100716,100718,100720,100722],{"class":78,"line":94},[76,100703,100209],{"class":90},[76,100705,370],{"class":82},[76,100707,95026],{"class":90},[76,100709,2601],{"class":119},[76,100711,2642],{"class":90},[76,100713,2902],{"class":119},[76,100715,95031],{"class":90},[76,100717,2339],{"class":119},[76,100719,2642],{"class":90},[76,100721,2557],{"class":119},[76,100723,130],{"class":90},[76,100725,100726],{"class":78,"line":133},[76,100727,100728],{"class":90},"np.hstack((aa,bb))\n",[76,100730,100731],{"class":78,"line":145},[76,100732,100733],{"class":540},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[76,100735,100736],{"class":78,"line":152},[76,100737,100738],{"class":540},"#np.hstack([aa,bb])\n",[19,100740,100255],{},[19,100742,100743],{},[3583,100744],{"alt":71,"src":100745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100747,100748],{},"等效于concatenate()函数中axis=1时的情况",[19,100750,100751],{},"②三维数组",[66,100753,100755],{"className":68,"code":100754,"language":70,"meta":71,"style":71},"#两个三行六列\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",[73,100756,100757,100761,100789,100817,100822,100827],{"__ignoreMap":71},[76,100758,100759],{"class":78,"line":79},[76,100760,100310],{"class":540},[76,100762,100763,100765,100767,100769,100771,100773,100775,100777,100779,100781,100783,100785,100787],{"class":78,"line":94},[76,100764,97544],{"class":90},[76,100766,370],{"class":82},[76,100768,95026],{"class":90},[76,100770,669],{"class":119},[76,100772,2642],{"class":90},[76,100774,2589],{"class":119},[76,100776,95031],{"class":90},[76,100778,2345],{"class":119},[76,100780,2642],{"class":90},[76,100782,2339],{"class":119},[76,100784,2642],{"class":90},[76,100786,2608],{"class":119},[76,100788,130],{"class":90},[76,100790,100791,100793,100795,100797,100799,100801,100803,100805,100807,100809,100811,100813,100815],{"class":78,"line":133},[76,100792,100343],{"class":90},[76,100794,370],{"class":82},[76,100796,95026],{"class":90},[76,100798,2601],{"class":119},[76,100800,2642],{"class":90},[76,100802,100354],{"class":119},[76,100804,95031],{"class":90},[76,100806,2345],{"class":119},[76,100808,2642],{"class":90},[76,100810,2339],{"class":119},[76,100812,2642],{"class":90},[76,100814,2608],{"class":119},[76,100816,130],{"class":90},[76,100818,100819],{"class":78,"line":145},[76,100820,100821],{"class":540},"#使用hstack\n",[76,100823,100824],{"class":78,"line":152},[76,100825,100826],{"class":90},"np.hstack((aaa,bbb)).shape\n",[76,100828,100829],{"class":78,"line":157},[76,100830,100831],{"class":540},"#输出：（2，6，6）\n",[14,100833,100835],{"id":100834},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100837,100838],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100840,100670],{},[66,100842,100844],{"className":68,"code":100843,"language":70,"meta":71,"style":71},"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",[73,100845,100846,100870,100894,100899,100904,100909],{"__ignoreMap":71},[76,100847,100848,100850,100852,100854,100856,100858,100860,100862,100864,100866,100868],{"class":78,"line":79},[76,100849,95330],{"class":90},[76,100851,370],{"class":82},[76,100853,95026],{"class":90},[76,100855,669],{"class":119},[76,100857,2642],{"class":90},[76,100859,2785],{"class":119},[76,100861,95031],{"class":90},[76,100863,2339],{"class":119},[76,100865,2642],{"class":90},[76,100867,2557],{"class":119},[76,100869,130],{"class":90},[76,100871,100872,100874,100876,100878,100880,100882,100884,100886,100888,100890,100892],{"class":78,"line":94},[76,100873,100209],{"class":90},[76,100875,370],{"class":82},[76,100877,95026],{"class":90},[76,100879,2601],{"class":119},[76,100881,2642],{"class":90},[76,100883,2902],{"class":119},[76,100885,95031],{"class":90},[76,100887,2339],{"class":119},[76,100889,2642],{"class":90},[76,100891,2557],{"class":119},[76,100893,130],{"class":90},[76,100895,100896],{"class":78,"line":133},[76,100897,100898],{"class":540},"#vstack 垂直方向进行堆叠\n",[76,100900,100901],{"class":78,"line":145},[76,100902,100903],{"class":90},"np.vstack((aa,bb))\n",[76,100905,100906],{"class":78,"line":152},[76,100907,100908],{"class":540},"#与hstack传的参数类似，等价于：\n",[76,100910,100911],{"class":78,"line":157},[76,100912,100913],{"class":90},"np.vstack([aa,bb])\n",[19,100915,100255],{},[19,100917,100918],{},[3583,100919],{"alt":71,"src":100920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100922,100751],{},[66,100924,100926],{"className":68,"code":100925,"language":70,"meta":71,"style":71},"#两个三行六列\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",[73,100927,100928,100932,100960,100988,100993,100998],{"__ignoreMap":71},[76,100929,100930],{"class":78,"line":79},[76,100931,100310],{"class":540},[76,100933,100934,100936,100938,100940,100942,100944,100946,100948,100950,100952,100954,100956,100958],{"class":78,"line":94},[76,100935,97544],{"class":90},[76,100937,370],{"class":82},[76,100939,95026],{"class":90},[76,100941,669],{"class":119},[76,100943,2642],{"class":90},[76,100945,2589],{"class":119},[76,100947,95031],{"class":90},[76,100949,2345],{"class":119},[76,100951,2642],{"class":90},[76,100953,2339],{"class":119},[76,100955,2642],{"class":90},[76,100957,2608],{"class":119},[76,100959,130],{"class":90},[76,100961,100962,100964,100966,100968,100970,100972,100974,100976,100978,100980,100982,100984,100986],{"class":78,"line":133},[76,100963,100343],{"class":90},[76,100965,370],{"class":82},[76,100967,95026],{"class":90},[76,100969,2601],{"class":119},[76,100971,2642],{"class":90},[76,100973,100354],{"class":119},[76,100975,95031],{"class":90},[76,100977,2345],{"class":119},[76,100979,2642],{"class":90},[76,100981,2339],{"class":119},[76,100983,2642],{"class":90},[76,100985,2608],{"class":119},[76,100987,130],{"class":90},[76,100989,100990],{"class":78,"line":145},[76,100991,100992],{"class":540},"#使用vstack\n",[76,100994,100995],{"class":78,"line":152},[76,100996,100997],{"class":90},"np.vstack((aaa,bbb)).shape\n",[76,100999,101000],{"class":78,"line":157},[76,101001,101002],{"class":540},"#输出：（4，3，6）\n",[14,101004,101006],{"id":101005},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101008,101009],{},"该方法是三维数组特有的方法",[19,101011,101012],{},"也就是说",[19,101014,101015],{},"一维数组拼接方法用：concatenate()",[19,101017,101018],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101020,101021],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101023,101024],{},"四维数组及多维数组只能用concatenate进行拼接",[66,101026,101028],{"className":68,"code":101027,"language":70,"meta":71,"style":71},"#两个三行六列\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",[73,101029,101030,101034,101062,101090,101095,101100],{"__ignoreMap":71},[76,101031,101032],{"class":78,"line":79},[76,101033,100310],{"class":540},[76,101035,101036,101038,101040,101042,101044,101046,101048,101050,101052,101054,101056,101058,101060],{"class":78,"line":94},[76,101037,97544],{"class":90},[76,101039,370],{"class":82},[76,101041,95026],{"class":90},[76,101043,669],{"class":119},[76,101045,2642],{"class":90},[76,101047,2589],{"class":119},[76,101049,95031],{"class":90},[76,101051,2345],{"class":119},[76,101053,2642],{"class":90},[76,101055,2339],{"class":119},[76,101057,2642],{"class":90},[76,101059,2608],{"class":119},[76,101061,130],{"class":90},[76,101063,101064,101066,101068,101070,101072,101074,101076,101078,101080,101082,101084,101086,101088],{"class":78,"line":133},[76,101065,100343],{"class":90},[76,101067,370],{"class":82},[76,101069,95026],{"class":90},[76,101071,2601],{"class":119},[76,101073,2642],{"class":90},[76,101075,100354],{"class":119},[76,101077,95031],{"class":90},[76,101079,2345],{"class":119},[76,101081,2642],{"class":90},[76,101083,2339],{"class":119},[76,101085,2642],{"class":90},[76,101087,2608],{"class":119},[76,101089,130],{"class":90},[76,101091,101092],{"class":78,"line":145},[76,101093,101094],{"class":540},"#使用dstack\n",[76,101096,101097],{"class":78,"line":152},[76,101098,101099],{"class":90},"np.dstack((aaa,bbb)).shape\n",[76,101101,101102],{"class":78,"line":157},[76,101103,101104],{"class":540},"#结果：（2，3，12）\n",[2178,101106,101107],{},"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":71,"searchDepth":94,"depth":94,"links":101109},[101110,101111,101112,101113],{"id":100049,"depth":94,"text":100050},{"id":100663,"depth":94,"text":100664},{"id":100834,"depth":94,"text":100835},{"id":101005,"depth":94,"text":101006},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100041,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101120,"title":101121,"body":101122,"description":2201,"extension":2202,"meta":101397,"navigation":148,"path":101398,"seo":101399,"stem":101400,"__hash__":101401},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101123,"toc":101395},[101124,101127,101130,101224,101227,101230,101233,101236,101239,101242,101245,101248,101392],[10,101125,101121],{"id":101126},"_7数组转置",[19,101128,101129],{},"使用transpose()函数",[66,101131,101133],{"className":68,"code":101132,"language":70,"meta":71,"style":71},"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",[73,101134,101135,101145,101169,101174,101179,101184,101189,101197,101201,101205,101210,101215,101220],{"__ignoreMap":71},[76,101136,101137,101139,101141,101143],{"class":78,"line":79},[76,101138,32438],{"class":82},[76,101140,33423],{"class":90},[76,101142,33426],{"class":82},[76,101144,33429],{"class":90},[76,101146,101147,101149,101151,101153,101155,101157,101159,101161,101163,101165,101167],{"class":78,"line":94},[76,101148,2503],{"class":90},[76,101150,370],{"class":82},[76,101152,33759],{"class":90},[76,101154,669],{"class":119},[76,101156,2642],{"class":90},[76,101158,2785],{"class":119},[76,101160,95031],{"class":90},[76,101162,2557],{"class":119},[76,101164,2642],{"class":90},[76,101166,2339],{"class":119},[76,101168,130],{"class":90},[76,101170,101171],{"class":78,"line":133},[76,101172,101173],{"class":540},"#二维数组转置\n",[76,101175,101176],{"class":78,"line":145},[76,101177,101178],{"class":540},"#调用transpose()函数\n",[76,101180,101181],{"class":78,"line":152},[76,101182,101183],{"class":90},"a.transpose()\n",[76,101185,101186],{"class":78,"line":157},[76,101187,101188],{"class":540},"#对于二维数组也可以采用.T来实现\n",[76,101190,101191,101194],{"class":78,"line":246},[76,101192,101193],{"class":90},"a.T",[76,101195,101196],{"class":540},"#与上述代码一样\n",[76,101198,101199],{"class":78,"line":251},[76,101200,95588],{"class":540},[76,101202,101203],{"class":78,"line":257},[76,101204,95952],{"class":126},[76,101206,101207],{"class":78,"line":641},[76,101208,101209],{"class":126},"array([[ 1,  4,  7, 10],\n",[76,101211,101212],{"class":78,"line":646},[76,101213,101214],{"class":126},"       [ 2,  5,  8, 11],\n",[76,101216,101217],{"class":78,"line":659},[76,101218,101219],{"class":126},"       [ 3,  6,  9, 12]])\n",[76,101221,101222],{"class":78,"line":1608},[76,101223,95952],{"class":126},[19,101225,101226],{},"也可以使用np.transpose()的形式",[19,101228,101229],{},"#多维数组进行转置 np.transpose()",[19,101231,101232],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101234,101235],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101237,101238],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101240,101241],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101243,101244],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101246,101247],{},"四维及以上的数组也是一样的道理",[66,101249,101251],{"className":68,"code":101250,"language":70,"meta":71,"style":71},"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",[73,101252,101253,101281,101286,101291,101296,101314,101319,101351,101356,101361,101366,101387],{"__ignoreMap":71},[76,101254,101255,101257,101259,101261,101263,101265,101267,101269,101271,101273,101275,101277,101279],{"class":78,"line":79},[76,101256,3078],{"class":90},[76,101258,370],{"class":82},[76,101260,95026],{"class":90},[76,101262,669],{"class":119},[76,101264,2642],{"class":90},[76,101266,2589],{"class":119},[76,101268,95031],{"class":90},[76,101270,2339],{"class":119},[76,101272,2642],{"class":90},[76,101274,2608],{"class":119},[76,101276,2642],{"class":90},[76,101278,2345],{"class":119},[76,101280,130],{"class":90},[76,101282,101283],{"class":78,"line":94},[76,101284,101285],{"class":90},"x.shape\n",[76,101287,101288],{"class":78,"line":133},[76,101289,101290],{"class":540},"#结果：（3,6,2）\n",[76,101292,101293],{"class":78,"line":145},[76,101294,101295],{"class":540},"#使用np.transpose()进行转置 变为(2,6,3)\n",[76,101297,101298,101301,101303,101305,101307,101309,101311],{"class":78,"line":152},[76,101299,101300],{"class":90},"np.transpose(x,(",[76,101302,2345],{"class":119},[76,101304,2642],{"class":90},[76,101306,669],{"class":119},[76,101308,2642],{"class":90},[76,101310,1294],{"class":119},[76,101312,101313],{"class":90},")).shape\n",[76,101315,101316],{"class":78,"line":157},[76,101317,101318],{"class":540},"#结果：(2,6,3)\n",[76,101320,101321,101323,101325,101327,101329,101331,101333,101335,101337,101339,101341,101343,101345,101347,101349],{"class":78,"line":246},[76,101322,100528],{"class":90},[76,101324,370],{"class":82},[76,101326,95026],{"class":90},[76,101328,669],{"class":119},[76,101330,2642],{"class":90},[76,101332,2589],{"class":119},[76,101334,95031],{"class":90},[76,101336,2339],{"class":119},[76,101338,2642],{"class":90},[76,101340,2345],{"class":119},[76,101342,2642],{"class":90},[76,101344,669],{"class":119},[76,101346,2642],{"class":90},[76,101348,2608],{"class":119},[76,101350,130],{"class":90},[76,101352,101353],{"class":78,"line":251},[76,101354,101355],{"class":90},"aaaa.shape\n",[76,101357,101358],{"class":78,"line":257},[76,101359,101360],{"class":540},"#结果：（3，2，1，6）\n",[76,101362,101363],{"class":78,"line":641},[76,101364,101365],{"class":540},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[76,101367,101368,101371,101373,101375,101377,101379,101381,101383,101385],{"class":78,"line":646},[76,101369,101370],{"class":90},"np.transpose(aaaa,(",[76,101372,669],{"class":119},[76,101374,2642],{"class":90},[76,101376,2345],{"class":119},[76,101378,2642],{"class":90},[76,101380,1294],{"class":119},[76,101382,2642],{"class":90},[76,101384,2339],{"class":119},[76,101386,101313],{"class":90},[76,101388,101389],{"class":78,"line":659},[76,101390,101391],{"class":540},"#结果：(2,1,3,6)\n",[2178,101393,101394],{},"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":71,"searchDepth":94,"depth":94,"links":101396},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101121,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101403,"title":101404,"body":101405,"description":2201,"extension":2202,"meta":102139,"navigation":148,"path":102140,"seo":102141,"stem":102142,"__hash__":102143},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101406,"toc":102137},[101407,101410,101413,101416,101419,101422,101425,101428,101431,101540,101543,101546,102134],[10,101408,101404],{"id":101409},"_8数组分割",[19,101411,101412],{},"split分割",[19,101414,101415],{},"numpy.split(ary,indics_or_sections,axis)",[19,101417,101418],{},"解释：",[19,101420,101421],{},"ary:被分割的数组",[19,101423,101424],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101426,101427],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101429,101430],{},"①一维数组的分割",[66,101432,101434],{"className":68,"code":101433,"language":70,"meta":71,"style":71},"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",[73,101435,101436,101452,101457,101466,101470,101475,101483,101487,101492,101497,101510,101514,101519,101531,101535],{"__ignoreMap":71},[76,101437,101438,101440,101442,101444,101446,101448,101450],{"class":78,"line":79},[76,101439,2503],{"class":90},[76,101441,370],{"class":82},[76,101443,95026],{"class":90},[76,101445,669],{"class":119},[76,101447,2642],{"class":90},[76,101449,2684],{"class":119},[76,101451,130],{"class":90},[76,101453,101454],{"class":78,"line":94},[76,101455,101456],{"class":540},"#如果传入整数，必须能够平分，否则会报错\n",[76,101458,101459,101462,101464],{"class":78,"line":133},[76,101460,101461],{"class":90},"np.split(a,",[76,101463,2345],{"class":119},[76,101465,130],{"class":90},[76,101467,101468],{"class":78,"line":145},[76,101469,95588],{"class":540},[76,101471,101472],{"class":78,"line":152},[76,101473,101474],{"class":540},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[76,101476,101477,101479,101481],{"class":78,"line":157},[76,101478,101461],{"class":90},[76,101480,2557],{"class":119},[76,101482,130],{"class":90},[76,101484,101485],{"class":78,"line":246},[76,101486,95588],{"class":540},[76,101488,101489],{"class":78,"line":251},[76,101490,101491],{"class":540},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[76,101493,101494],{"class":78,"line":257},[76,101495,101496],{"class":540},"#传入数组\n",[76,101498,101499,101502,101504,101506,101508],{"class":78,"line":641},[76,101500,101501],{"class":90},"np.split(a,[",[76,101503,2339],{"class":119},[76,101505,2642],{"class":90},[76,101507,2583],{"class":119},[76,101509,6739],{"class":90},[76,101511,101512],{"class":78,"line":646},[76,101513,95588],{"class":540},[76,101515,101516],{"class":78,"line":659},[76,101517,101518],{"class":540},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[76,101520,101521,101523,101525,101527,101529],{"class":78,"line":1608},[76,101522,101501],{"class":90},[76,101524,2583],{"class":119},[76,101526,2642],{"class":90},[76,101528,2633],{"class":119},[76,101530,6739],{"class":90},[76,101532,101533],{"class":78,"line":1632},[76,101534,95588],{"class":540},[76,101536,101537],{"class":78,"line":1637},[76,101538,101539],{"class":540},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101541,101542],{},"②二维数组的分割",[19,101544,101545],{},"使用split()",[66,101547,101549],{"className":68,"code":101548,"language":70,"meta":71,"style":71},"#二维数组分割\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",[73,101550,101551,101556,101580,101585,101594,101598,101602,101607,101612,101617,101622,101627,101632,101637,101641,101654,101658,101662,101666,101670,101674,101679,101684,101689,101693,101698,101714,101718,101722,101727,101732,101737,101742,101747,101752,101757,101762,101767,101772,101777,101782,101787,101792,101797,101802,101807,101812,101816,101820,101840,101844,101848,101853,101858,101863,101868,101873,101878,101883,101888,101893,101898,101903,101908,101913,101918,101923,101928,101933,101938,101942,101947,101956,101960,101964,101968,101972,101976,101980,101984,101988,101992,102001,102005,102009,102013,102017,102021,102025,102029,102033,102037,102041,102045,102049,102053,102057,102061,102065,102069,102073,102077,102081,102085,102098,102102,102106,102110,102114,102118,102122,102126,102130],{"__ignoreMap":71},[76,101552,101553],{"class":78,"line":79},[76,101554,101555],{"class":540},"#二维数组分割\n",[76,101557,101558,101560,101562,101564,101566,101568,101570,101572,101574,101576,101578],{"class":78,"line":94},[76,101559,95330],{"class":90},[76,101561,370],{"class":82},[76,101563,95026],{"class":90},[76,101565,669],{"class":119},[76,101567,2642],{"class":90},[76,101569,2589],{"class":119},[76,101571,95031],{"class":90},[76,101573,2608],{"class":119},[76,101575,2642],{"class":90},[76,101577,2608],{"class":119},[76,101579,130],{"class":90},[76,101581,101582],{"class":78,"line":133},[76,101583,101584],{"class":540},"#默认axis=0  传入整数平均分,按行来的\n",[76,101586,101587,101590,101592],{"class":78,"line":145},[76,101588,101589],{"class":90},"np.split(aa,",[76,101591,2339],{"class":119},[76,101593,130],{"class":90},[76,101595,101596],{"class":78,"line":152},[76,101597,97786],{"class":540},[76,101599,101600],{"class":78,"line":157},[76,101601,95952],{"class":126},[76,101603,101604],{"class":78,"line":246},[76,101605,101606],{"class":126},"[array([[ 1,  2,  3,  4,  5,  6],\n",[76,101608,101609],{"class":78,"line":251},[76,101610,101611],{"class":126},"        [ 7,  8,  9, 10, 11, 12]]),\n",[76,101613,101614],{"class":78,"line":257},[76,101615,101616],{"class":126}," array([[13, 14, 15, 16, 17, 18],\n",[76,101618,101619],{"class":78,"line":641},[76,101620,101621],{"class":126},"        [19, 20, 21, 22, 23, 24]]),\n",[76,101623,101624],{"class":78,"line":646},[76,101625,101626],{"class":126}," array([[25, 26, 27, 28, 29, 30],\n",[76,101628,101629],{"class":78,"line":659},[76,101630,101631],{"class":126},"        [31, 32, 33, 34, 35, 36]])]\n",[76,101633,101634],{"class":78,"line":1608},[76,101635,101636],{"class":126}," '''\n",[76,101638,101639],{"class":78,"line":1632},[76,101640,101496],{"class":540},[76,101642,101643,101646,101648,101650,101652],{"class":78,"line":1637},[76,101644,101645],{"class":90},"np.split(aa,[",[76,101647,2345],{"class":119},[76,101649,2642],{"class":90},[76,101651,2583],{"class":119},[76,101653,6739],{"class":90},[76,101655,101656],{"class":78,"line":1642},[76,101657,97786],{"class":540},[76,101659,101660],{"class":78,"line":1652},[76,101661,95952],{"class":126},[76,101663,101664],{"class":78,"line":1660},[76,101665,101606],{"class":126},[76,101667,101668],{"class":78,"line":1683},[76,101669,101611],{"class":126},[76,101671,101672],{"class":78,"line":1698},[76,101673,101616],{"class":126},[76,101675,101676],{"class":78,"line":1711},[76,101677,101678],{"class":126},"        [19, 20, 21, 22, 23, 24],\n",[76,101680,101681],{"class":78,"line":1717},[76,101682,101683],{"class":126},"        [25, 26, 27, 28, 29, 30]]),\n",[76,101685,101686],{"class":78,"line":1728},[76,101687,101688],{"class":126}," array([[31, 32, 33, 34, 35, 36]])]\n",[76,101690,101691],{"class":78,"line":1740},[76,101692,95952],{"class":126},[76,101694,101695],{"class":78,"line":1746},[76,101696,101697],{"class":540},"#axis=1 按照列来分\n",[76,101699,101700,101702,101704,101706,101708,101710,101712],{"class":78,"line":1751},[76,101701,101589],{"class":90},[76,101703,2339],{"class":119},[76,101705,2642],{"class":90},[76,101707,49547],{"class":7296},[76,101709,370],{"class":82},[76,101711,669],{"class":119},[76,101713,130],{"class":90},[76,101715,101716],{"class":78,"line":1756},[76,101717,97786],{"class":540},[76,101719,101720],{"class":78,"line":1766},[76,101721,95952],{"class":126},[76,101723,101724],{"class":78,"line":1773},[76,101725,101726],{"class":126},"[array([[ 1,  2],\n",[76,101728,101729],{"class":78,"line":1793},[76,101730,101731],{"class":126},"        [ 7,  8],\n",[76,101733,101734],{"class":78,"line":1806},[76,101735,101736],{"class":126},"        [13, 14],\n",[76,101738,101739],{"class":78,"line":1817},[76,101740,101741],{"class":126},"        [19, 20],\n",[76,101743,101744],{"class":78,"line":1822},[76,101745,101746],{"class":126},"        [25, 26],\n",[76,101748,101749],{"class":78,"line":1835},[76,101750,101751],{"class":126},"        [31, 32]]),\n",[76,101753,101754],{"class":78,"line":1847},[76,101755,101756],{"class":126}," array([[ 3,  4],\n",[76,101758,101759],{"class":78,"line":1852},[76,101760,101761],{"class":126},"        [ 9, 10],\n",[76,101763,101764],{"class":78,"line":1862},[76,101765,101766],{"class":126},"        [15, 16],\n",[76,101768,101769],{"class":78,"line":1874},[76,101770,101771],{"class":126},"        [21, 22],\n",[76,101773,101774],{"class":78,"line":1879},[76,101775,101776],{"class":126},"        [27, 28],\n",[76,101778,101779],{"class":78,"line":1884},[76,101780,101781],{"class":126},"        [33, 34]]),\n",[76,101783,101784],{"class":78,"line":1889},[76,101785,101786],{"class":126}," array([[ 5,  6],\n",[76,101788,101789],{"class":78,"line":1900},[76,101790,101791],{"class":126},"        [11, 12],\n",[76,101793,101794],{"class":78,"line":1906},[76,101795,101796],{"class":126},"        [17, 18],\n",[76,101798,101799],{"class":78,"line":1924},[76,101800,101801],{"class":126},"        [23, 24],\n",[76,101803,101804],{"class":78,"line":1929},[76,101805,101806],{"class":126},"        [29, 30],\n",[76,101808,101809],{"class":78,"line":1944},[76,101810,101811],{"class":126},"        [35, 36]])]\n",[76,101813,101814],{"class":78,"line":1950},[76,101815,101636],{"class":126},[76,101817,101818],{"class":78,"line":1965},[76,101819,101496],{"class":540},[76,101821,101822,101824,101826,101828,101830,101832,101834,101836,101838],{"class":78,"line":1971},[76,101823,101645],{"class":90},[76,101825,669],{"class":119},[76,101827,2642],{"class":90},[76,101829,2345],{"class":119},[76,101831,43644],{"class":90},[76,101833,49547],{"class":7296},[76,101835,370],{"class":82},[76,101837,669],{"class":119},[76,101839,130],{"class":90},[76,101841,101842],{"class":78,"line":1985},[76,101843,95588],{"class":540},[76,101845,101846],{"class":78,"line":1991},[76,101847,95952],{"class":126},[76,101849,101850],{"class":78,"line":2005},[76,101851,101852],{"class":126},"[array([[ 1],\n",[76,101854,101855],{"class":78,"line":2017},[76,101856,101857],{"class":126},"        [ 7],\n",[76,101859,101860],{"class":78,"line":2023},[76,101861,101862],{"class":126},"        [13],\n",[76,101864,101865],{"class":78,"line":2031},[76,101866,101867],{"class":126},"        [19],\n",[76,101869,101870],{"class":78,"line":11880},[76,101871,101872],{"class":126},"        [25],\n",[76,101874,101875],{"class":78,"line":11901},[76,101876,101877],{"class":126},"        [31]]),\n",[76,101879,101880],{"class":78,"line":11907},[76,101881,101882],{"class":126}," array([[ 2],\n",[76,101884,101885],{"class":78,"line":11921},[76,101886,101887],{"class":126},"        [ 8],\n",[76,101889,101890],{"class":78,"line":11927},[76,101891,101892],{"class":126},"        [14],\n",[76,101894,101895],{"class":78,"line":11954},[76,101896,101897],{"class":126},"        [20],\n",[76,101899,101900],{"class":78,"line":11963},[76,101901,101902],{"class":126},"        [26],\n",[76,101904,101905],{"class":78,"line":11969},[76,101906,101907],{"class":126},"        [32]]),\n",[76,101909,101910],{"class":78,"line":11977},[76,101911,101912],{"class":126}," array([[ 3,  4,  5,  6],\n",[76,101914,101915],{"class":78,"line":11982},[76,101916,101917],{"class":126},"        [ 9, 10, 11, 12],\n",[76,101919,101920],{"class":78,"line":18654},[76,101921,101922],{"class":126},"        [15, 16, 17, 18],\n",[76,101924,101925],{"class":78,"line":18660},[76,101926,101927],{"class":126},"        [21, 22, 23, 24],\n",[76,101929,101930],{"class":78,"line":18683},[76,101931,101932],{"class":126},"        [27, 28, 29, 30],\n",[76,101934,101935],{"class":78,"line":18689},[76,101936,101937],{"class":126},"        [33, 34, 35, 36]])]\n",[76,101939,101940],{"class":78,"line":18712},[76,101941,95952],{"class":126},[76,101943,101944],{"class":78,"line":18726},[76,101945,101946],{"class":540},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[76,101948,101949,101952,101954],{"class":78,"line":18746},[76,101950,101951],{"class":90},"np.vsplit(aa,",[76,101953,2339],{"class":119},[76,101955,130],{"class":90},[76,101957,101958],{"class":78,"line":18752},[76,101959,95588],{"class":540},[76,101961,101962],{"class":78,"line":18763},[76,101963,95952],{"class":126},[76,101965,101966],{"class":78,"line":18786},[76,101967,101606],{"class":126},[76,101969,101970],{"class":78,"line":18808},[76,101971,101611],{"class":126},[76,101973,101974],{"class":78,"line":18813},[76,101975,101616],{"class":126},[76,101977,101978],{"class":78,"line":18819},[76,101979,101621],{"class":126},[76,101981,101982],{"class":78,"line":18833},[76,101983,101626],{"class":126},[76,101985,101986],{"class":78,"line":18846},[76,101987,101631],{"class":126},[76,101989,101990],{"class":78,"line":18851},[76,101991,95952],{"class":126},[76,101993,101994,101997,101999],{"class":78,"line":18865},[76,101995,101996],{"class":90},"np.hsplit(aa,",[76,101998,2339],{"class":119},[76,102000,130],{"class":90},[76,102002,102003],{"class":78,"line":18870},[76,102004,95588],{"class":540},[76,102006,102007],{"class":78,"line":18876},[76,102008,95952],{"class":126},[76,102010,102011],{"class":78,"line":18881},[76,102012,101726],{"class":126},[76,102014,102015],{"class":78,"line":18895},[76,102016,101731],{"class":126},[76,102018,102019],{"class":78,"line":18900},[76,102020,101736],{"class":126},[76,102022,102023],{"class":78,"line":18905},[76,102024,101741],{"class":126},[76,102026,102027],{"class":78,"line":18919},[76,102028,101746],{"class":126},[76,102030,102031],{"class":78,"line":18931},[76,102032,101751],{"class":126},[76,102034,102035],{"class":78,"line":18936},[76,102036,101756],{"class":126},[76,102038,102039],{"class":78,"line":18949},[76,102040,101761],{"class":126},[76,102042,102043],{"class":78,"line":18954},[76,102044,101766],{"class":126},[76,102046,102047],{"class":78,"line":18959},[76,102048,101771],{"class":126},[76,102050,102051],{"class":78,"line":18964},[76,102052,101776],{"class":126},[76,102054,102055],{"class":78,"line":18977},[76,102056,101781],{"class":126},[76,102058,102059],{"class":78,"line":18982},[76,102060,101786],{"class":126},[76,102062,102063],{"class":78,"line":34671},[76,102064,101791],{"class":126},[76,102066,102067],{"class":78,"line":34677},[76,102068,101796],{"class":126},[76,102070,102071],{"class":78,"line":34683},[76,102072,101801],{"class":126},[76,102074,102075],{"class":78,"line":34689},[76,102076,101806],{"class":126},[76,102078,102079],{"class":78,"line":34695},[76,102080,101811],{"class":126},[76,102082,102083],{"class":78,"line":34706},[76,102084,95952],{"class":126},[76,102086,102087,102090,102092,102094,102096],{"class":78,"line":34712},[76,102088,102089],{"class":90},"np.vsplit(aa,[",[76,102091,2345],{"class":119},[76,102093,2642],{"class":90},[76,102095,2583],{"class":119},[76,102097,6739],{"class":90},[76,102099,102100],{"class":78,"line":34732},[76,102101,95588],{"class":540},[76,102103,102104],{"class":78,"line":34738},[76,102105,95952],{"class":126},[76,102107,102108],{"class":78,"line":34749},[76,102109,101606],{"class":126},[76,102111,102112],{"class":78,"line":34755},[76,102113,101611],{"class":126},[76,102115,102116],{"class":78,"line":34761},[76,102117,101616],{"class":126},[76,102119,102120],{"class":78,"line":34767},[76,102121,101678],{"class":126},[76,102123,102124],{"class":78,"line":34773},[76,102125,101683],{"class":126},[76,102127,102128],{"class":78,"line":34779},[76,102129,101688],{"class":126},[76,102131,102132],{"class":78,"line":34785},[76,102133,101636],{"class":126},[2178,102135,102136],{},"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":71,"searchDepth":94,"depth":94,"links":102138},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101404,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102145,"title":102146,"body":102147,"description":2201,"extension":2202,"meta":102641,"navigation":148,"path":102642,"seo":102643,"stem":102644,"__hash__":102645},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102148,"toc":102632},[102149,102152,102155,102180,102184,102243,102295,102299,102301,102337,102391,102393,102431,102502,102506,102511,102515,102518,102551,102554,102558,102561,102564,102567,102570,102575,102579,102582,102585,102588,102591,102596,102600,102605,102608,102629],[10,102150,102146],{"id":102151},"_9数学函数",[19,102153,102154],{},"补充回顾：python的列表推导式",[66,102156,102158],{"className":68,"code":102157,"language":70,"meta":71,"style":71},"[1\u002Fi for i in a]\n",[73,102159,102160],{"__ignoreMap":71},[76,102161,102162,102164,102166,102168,102171,102173,102175,102177],{"class":78,"line":79},[76,102163,3148],{"class":90},[76,102165,669],{"class":119},[76,102167,795],{"class":82},[76,102169,102170],{"class":90},"i ",[76,102172,5112],{"class":82},[76,102174,11505],{"class":90},[76,102176,1475],{"class":82},[76,102178,102179],{"class":90}," a]\n",[14,102181,102183],{"id":102182},"_91-求倒数","9.1 求倒数",[66,102185,102187],{"className":68,"code":102186,"language":70,"meta":71,"style":71},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[73,102188,102189,102194,102222,102234],{"__ignoreMap":71},[76,102190,102191],{"class":78,"line":79},[76,102192,102193],{"class":540},"#数组求倒数\n",[76,102195,102196,102198,102200,102202,102204,102206,102208,102210,102212,102214,102216,102218,102220],{"class":78,"line":94},[76,102197,2503],{"class":90},[76,102199,370],{"class":82},[76,102201,3148],{"class":90},[76,102203,669],{"class":119},[76,102205,2642],{"class":90},[76,102207,2345],{"class":119},[76,102209,2642],{"class":90},[76,102211,2339],{"class":119},[76,102213,2642],{"class":90},[76,102215,2557],{"class":119},[76,102217,2642],{"class":90},[76,102219,2583],{"class":119},[76,102221,35284],{"class":90},[76,102223,102224,102226,102228,102231],{"class":78,"line":133},[76,102225,2527],{"class":90},[76,102227,370],{"class":82},[76,102229,102230],{"class":90},"np.array(a)",[76,102232,102233],{"class":540},"#将列表转换为数组\n",[76,102235,102236,102238,102240],{"class":78,"line":145},[76,102237,669],{"class":119},[76,102239,795],{"class":82},[76,102241,102242],{"class":90},"b\n",[66,102244,102246],{"className":68,"code":102245,"language":70,"meta":71,"style":71},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[73,102247,102248,102276,102285,102290],{"__ignoreMap":71},[76,102249,102250,102252,102254,102256,102258,102260,102262,102264,102266,102268,102270,102272,102274],{"class":78,"line":79},[76,102251,2503],{"class":90},[76,102253,370],{"class":82},[76,102255,3148],{"class":90},[76,102257,669],{"class":119},[76,102259,2642],{"class":90},[76,102261,2345],{"class":119},[76,102263,2642],{"class":90},[76,102265,2339],{"class":119},[76,102267,2642],{"class":90},[76,102269,2557],{"class":119},[76,102271,2642],{"class":90},[76,102273,2583],{"class":119},[76,102275,35284],{"class":90},[76,102277,102278,102280,102282],{"class":78,"line":94},[76,102279,2527],{"class":90},[76,102281,370],{"class":82},[76,102283,102284],{"class":90},"np.array(a)\n",[76,102286,102287],{"class":78,"line":133},[76,102288,102289],{"class":540},"#调用numpy中的函数reciprocal()\n",[76,102291,102292],{"class":78,"line":145},[76,102293,102294],{"class":90},"np.reciprocal(b)\n",[14,102296,102298],{"id":102297},"_92-求平方","9.2 求平方",[19,102300,96554],{},[66,102302,102304],{"className":68,"code":102303,"language":70,"meta":71,"style":71},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[73,102305,102306,102311,102316,102332],{"__ignoreMap":71},[76,102307,102308],{"class":78,"line":79},[76,102309,102310],{"class":540},"#square()，求平方\n",[76,102312,102313],{"class":78,"line":94},[76,102314,102315],{"class":540},"#一维数组\n",[76,102317,102318,102320,102322,102324,102326,102328,102330],{"class":78,"line":133},[76,102319,2503],{"class":90},[76,102321,370],{"class":82},[76,102323,95026],{"class":90},[76,102325,669],{"class":119},[76,102327,2642],{"class":90},[76,102329,402],{"class":119},[76,102331,130],{"class":90},[76,102333,102334],{"class":78,"line":145},[76,102335,102336],{"class":90},"np.square(a)\n",[66,102338,102340],{"className":68,"code":102339,"language":70,"meta":71,"style":71},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[73,102341,102342,102347,102352,102373],{"__ignoreMap":71},[76,102343,102344],{"class":78,"line":79},[76,102345,102346],{"class":540},"#或者通过循环遍历的形式来计算\n",[76,102348,102349],{"class":78,"line":94},[76,102350,102351],{"class":540},"#这是一个列表\n",[76,102353,102354,102357,102359,102361,102363,102365,102367,102370],{"class":78,"line":133},[76,102355,102356],{"class":90},"[i",[76,102358,2718],{"class":82},[76,102360,102170],{"class":90},[76,102362,5112],{"class":82},[76,102364,11505],{"class":90},[76,102366,1475],{"class":82},[76,102368,102369],{"class":90}," a]",[76,102371,102372],{"class":540},"#这个求完之后在数列当中\n",[76,102374,102375,102378,102380,102382,102384,102386,102388],{"class":78,"line":145},[76,102376,102377],{"class":90},"np.array([i",[76,102379,2718],{"class":82},[76,102381,102170],{"class":90},[76,102383,5112],{"class":82},[76,102385,11505],{"class":90},[76,102387,1475],{"class":82},[76,102389,102390],{"class":90}," a])\n",[19,102392,95315],{},[66,102394,102396],{"className":68,"code":102395,"language":70,"meta":71,"style":71},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[73,102397,102398,102402,102426],{"__ignoreMap":71},[76,102399,102400],{"class":78,"line":79},[76,102401,95325],{"class":540},[76,102403,102404,102406,102408,102410,102412,102414,102416,102418,102420,102422,102424],{"class":78,"line":94},[76,102405,95330],{"class":90},[76,102407,370],{"class":82},[76,102409,95026],{"class":90},[76,102411,669],{"class":119},[76,102413,2642],{"class":90},[76,102415,2785],{"class":119},[76,102417,95031],{"class":90},[76,102419,2557],{"class":119},[76,102421,2642],{"class":90},[76,102423,2339],{"class":119},[76,102425,130],{"class":90},[76,102427,102428],{"class":78,"line":133},[76,102429,102430],{"class":90},"np.square(aa)\n",[66,102432,102434],{"className":68,"code":102433,"language":70,"meta":71,"style":71},"#传统的方式\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",[73,102435,102436,102441,102450,102466,102482,102497],{"__ignoreMap":71},[76,102437,102438],{"class":78,"line":79},[76,102439,102440],{"class":540},"#传统的方式\n",[76,102442,102443,102445,102447],{"class":78,"line":94},[76,102444,100209],{"class":90},[76,102446,370],{"class":82},[76,102448,102449],{"class":90},"np.empty_like(aa)\n",[76,102451,102452,102454,102456,102458,102460,102462,102464],{"class":78,"line":133},[76,102453,5112],{"class":82},[76,102455,11505],{"class":90},[76,102457,1475],{"class":82},[76,102459,34483],{"class":119},[76,102461,123],{"class":90},[76,102463,2557],{"class":119},[76,102465,32830],{"class":90},[76,102467,102468,102470,102472,102474,102476,102478,102480],{"class":78,"line":145},[76,102469,1469],{"class":82},[76,102471,11566],{"class":90},[76,102473,1475],{"class":82},[76,102475,34483],{"class":119},[76,102477,123],{"class":90},[76,102479,2339],{"class":119},[76,102481,32830],{"class":90},[76,102483,102484,102487,102489,102492,102494],{"class":78,"line":152},[76,102485,102486],{"class":90},"        bb[i,j]",[76,102488,370],{"class":82},[76,102490,102491],{"class":90},"aa[i,j]",[76,102493,2718],{"class":82},[76,102495,102496],{"class":90},"aa[i,j]\n",[76,102498,102499],{"class":78,"line":157},[76,102500,102501],{"class":90},"bb\n",[14,102503,102505],{"id":102504},"_93-求各元素的符号","9.3 求各元素的符号",[19,102507,102508],{},[3583,102509],{"alt":71,"src":102510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102512,102514],{"id":102513},"_94-modf函数","9.4 modf函数",[19,102516,102517],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[66,102519,102521],{"className":68,"code":102520,"language":70,"meta":71,"style":71},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[73,102522,102523,102546],{"__ignoreMap":71},[76,102524,102525,102527,102529,102531,102533,102535,102537,102539,102541,102544],{"class":78,"line":79},[76,102526,2503],{"class":90},[76,102528,370],{"class":82},[76,102530,95026],{"class":90},[76,102532,666],{"class":82},[76,102534,402],{"class":119},[76,102536,2642],{"class":90},[76,102538,402],{"class":119},[76,102540,2642],{"class":90},[76,102542,102543],{"class":119},"0.3",[76,102545,130],{"class":90},[76,102547,102548],{"class":78,"line":94},[76,102549,102550],{"class":90},"np.modf(a)\n",[19,102552,102553],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102555,102557],{"id":102556},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102559,102560],{},"np.cell()",[19,102562,102563],{},"np.floor()",[19,102565,102566],{},"np.rint()",[19,102568,102569],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102571,102572],{},[3583,102573],{"alt":71,"src":102574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102576,102578],{"id":102577},"_96-around函数","9.6 around()函数",[19,102580,102581],{},"around()函数也可以实现对数的小数位数进行操作",[19,102583,102584],{},"其中的参数：",[19,102586,102587],{},"1.要传的数组",[19,102589,102590],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102592,102593],{},[3583,102594],{"alt":71,"src":102595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102597,102599],{"id":102598},"_97-三角函数","9.7 三角函数",[19,102601,102602],{},[3583,102603],{"alt":71,"src":102604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102606,102607],{},"引入图像模块非常重要",[66,102609,102611],{"className":68,"code":102610,"language":70,"meta":71,"style":71},"from matplotlib import pyplot as plt\n",[73,102612,102613],{"__ignoreMap":71},[76,102614,102615,102617,102620,102622,102625,102627],{"class":78,"line":79},[76,102616,32781],{"class":82},[76,102618,102619],{"class":90}," matplotlib ",[76,102621,32438],{"class":82},[76,102623,102624],{"class":90}," pyplot ",[76,102626,33426],{"class":82},[76,102628,33480],{"class":90},[2178,102630,102631],{},"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":71,"searchDepth":94,"depth":94,"links":102633},[102634,102635,102636,102637,102638,102639,102640],{"id":102182,"depth":94,"text":102183},{"id":102297,"depth":94,"text":102298},{"id":102504,"depth":94,"text":102505},{"id":102513,"depth":94,"text":102514},{"id":102556,"depth":94,"text":102557},{"id":102577,"depth":94,"text":102578},{"id":102598,"depth":94,"text":102599},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102146,"description":2201},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102647,"title":102648,"body":102649,"description":2201,"extension":2202,"meta":102653,"navigation":148,"path":102654,"seo":102655,"stem":102656,"__hash__":102657},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102650,"toc":102651},[],{"title":71,"searchDepth":94,"depth":94,"links":102652},[],{"category":52452},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102648,"description":2201},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102659,"title":102660,"body":102661,"description":71,"extension":2202,"meta":104669,"navigation":148,"path":104670,"seo":104671,"stem":104672,"__hash__":104673},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102662,"toc":104645},[102663,102666,102670,102673,102676,102682,102685,102708,102711,102745,102748,102789,102793,102796,102889,102892,102936,102939,102956,102959,102973,102976,102979,103024,103027,103064,103068,103071,103077,103082,103102,103106,103109,103175,103178,103196,103200,103203,103232,103242,103248,103252,103255,103261,103272,103276,103279,103309,103312,103592,103595,103598,103609,103612,103615,103637,103644,103647,103665,103668,103671,103685,103693,103696,103722,103728,103731,103734,103744,103756,103776,103785,103805,103815,103839,103852,103866,103871,103912,103929,103954,103966,103986,103992,104037,104056,104073,104086,104102,104109,104121,104130,104165,104186,104211,104224,104248,104263,104288,104291,104312,104321,104324,104335,104339,104342,104348,104360,104367,104371,104374,104386,104389,104403,104406,104416,104426,104429,104469,104472,104476,104482,104485,104499,104503,104506,104539,104543,104546,104569,104577,104580,104586,104592,104595,104598,104626,104630,104633,104639,104642],[10,102664,102660],{"id":102665},"_1环境安装与第一个-mujoco-程序",[14,102667,102669],{"id":102668},"_1目标说明","1.目标说明",[19,102671,102672],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102674,102675],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[66,102677,102680],{"className":102678,"code":102679,"language":7268,"meta":71},[7266],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[73,102681,102679],{"__ignoreMap":71},[19,102683,102684],{},"需要掌握:",[26,102686,102687,102690,102693,102698,102703],{},[29,102688,102689],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102691,102692],{},"Python 虚拟环境创建",[29,102694,102695],{},[73,102696,102697],{},"mujoco.MjModel",[29,102699,102700],{},[73,102701,102702],{},"mujoco.MjData",[29,102704,102705],{},[73,102706,102707],{},"mujoco.mj_step(model, data)",[19,102709,102710],{},"MuJoCo 中最重要的两个对象:",[2404,102712,102713,102723],{},[2407,102714,102715],{},[2410,102716,102717,102720],{},[2413,102718,102719],{"align":25785},"对象",[2413,102721,102722],{"align":25785},"含义",[2451,102724,102725,102735],{},[2410,102726,102727,102732],{},[2456,102728,102729],{"align":25785},[73,102730,102731],{},"MjModel",[2456,102733,102734],{"align":25785},"模型结构，来自 XML，基本不随时间变化",[2410,102736,102737,102742],{},[2456,102738,102739],{"align":25785},[73,102740,102741],{},"MjData",[2456,102743,102744],{"align":25785},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102746,102747],{},"可以先用一个类比理解：",[2404,102749,102750,102760],{},[2407,102751,102752],{},[2410,102753,102754,102757],{},[2413,102755,102756],{"align":25785},"类比",[2413,102758,102759],{"align":25785},"MuJoCo 对象",[2451,102761,102762,102771,102780],{},[2410,102763,102764,102767],{},[2456,102765,102766],{"align":25785},"游戏地图和角色配置",[2456,102768,102769],{"align":25785},[73,102770,102731],{},[2410,102772,102773,102776],{},[2456,102774,102775],{"align":25785},"游戏运行到当前帧的状态",[2456,102777,102778],{"align":25785},[73,102779,102741],{},[2410,102781,102782,102785],{},[2456,102783,102784],{"align":25785},"前进一帧",[2456,102786,102787],{"align":25785},[73,102788,102707],{},[14,102790,102792],{"id":102791},"_2环境与依赖安装","2.环境与依赖安装",[19,102794,102795],{},"Fedora 44 系统依赖:",[66,102797,102799],{"className":25871,"code":102798,"language":25873,"meta":71,"style":71},"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",[73,102800,102801,102813,102826,102839,102849,102859,102878],{"__ignoreMap":71},[76,102802,102803,102805,102807,102809,102811],{"class":78,"line":79},[76,102804,26626],{"class":86},[76,102806,28364],{"class":126},[76,102808,25883],{"class":126},[76,102810,28449],{"class":119},[76,102812,26728],{"class":119},[76,102814,102815,102818,102821,102824],{"class":78,"line":94},[76,102816,102817],{"class":126},"  python3",[76,102819,102820],{"class":126}," python3-pip",[76,102822,102823],{"class":126}," python3-virtualenv",[76,102825,26728],{"class":119},[76,102827,102828,102831,102834,102837],{"class":78,"line":133},[76,102829,102830],{"class":126},"  mesa-libGL",[76,102832,102833],{"class":126}," mesa-libGLU",[76,102835,102836],{"class":126}," mesa-dri-drivers",[76,102838,26728],{"class":119},[76,102840,102841,102844,102847],{"class":78,"line":145},[76,102842,102843],{"class":126},"  libglvnd-glx",[76,102845,102846],{"class":126}," libglvnd-opengl",[76,102848,26728],{"class":119},[76,102850,102851,102854,102857],{"class":78,"line":152},[76,102852,102853],{"class":126},"  glfw",[76,102855,102856],{"class":126}," glfw-devel",[76,102858,26728],{"class":119},[76,102860,102861,102864,102867,102870,102873,102876],{"class":78,"line":157},[76,102862,102863],{"class":126},"  libX11",[76,102865,102866],{"class":126}," libXcursor",[76,102868,102869],{"class":126}," libXi",[76,102871,102872],{"class":126}," libXinerama",[76,102874,102875],{"class":126}," libXrandr",[76,102877,26728],{"class":119},[76,102879,102880,102883,102886],{"class":78,"line":246},[76,102881,102882],{"class":126},"  gcc",[76,102884,102885],{"class":126}," gcc-c++",[76,102887,102888],{"class":126}," make\n",[19,102890,102891],{},"创建 Python 环境:",[66,102893,102895],{"className":25871,"code":102894,"language":25873,"meta":71,"style":71},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[73,102896,102897,102911,102919],{"__ignoreMap":71},[76,102898,102899,102902,102905,102908],{"class":78,"line":79},[76,102900,102901],{"class":86},"python3",[76,102903,102904],{"class":119}," -m",[76,102906,102907],{"class":126}," venv",[76,102909,102910],{"class":126}," .venv\n",[76,102912,102913,102916],{"class":78,"line":94},[76,102914,102915],{"class":119},"source",[76,102917,102918],{"class":126}," .venv\u002Fbin\u002Factivate\n",[76,102920,102921,102923,102925,102928,102930,102933],{"class":78,"line":133},[76,102922,70],{"class":86},[76,102924,102904],{"class":119},[76,102926,102927],{"class":126}," pip",[76,102929,25883],{"class":126},[76,102931,102932],{"class":119}," --upgrade",[76,102934,102935],{"class":126}," pip\n",[19,102937,102938],{},"pip 安装:",[66,102940,102942],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy\n",[73,102943,102944],{"__ignoreMap":71},[76,102945,102946,102948,102950,102953],{"class":78,"line":79},[76,102947,25880],{"class":86},[76,102949,25883],{"class":126},[76,102951,102952],{"class":126}," \"mujoco>=2.3\"",[76,102954,102955],{"class":126}," numpy\n",[19,102957,102958],{},"安装完成后，先做最小检查：",[66,102960,102962],{"className":25871,"code":102961,"language":25873,"meta":71,"style":71},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[73,102963,102964],{"__ignoreMap":71},[76,102965,102966,102968,102970],{"class":78,"line":79},[76,102967,70],{"class":86},[76,102969,32406],{"class":119},[76,102971,102972],{"class":126}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102974,102975],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102977,102978],{},"conda 安装:",[66,102980,102982],{"className":25871,"code":102981,"language":25873,"meta":71,"style":71},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[73,102983,102984,103004,103014],{"__ignoreMap":71},[76,102985,102986,102988,102990,102992,102995,102998,103001],{"class":78,"line":79},[76,102987,32378],{"class":86},[76,102989,31224],{"class":126},[76,102991,27165],{"class":119},[76,102993,102994],{"class":126}," mujoco-study",[76,102996,102997],{"class":126}," python=",[76,102999,103000],{"class":119},"3.10",[76,103002,103003],{"class":119}," -y\n",[76,103005,103006,103008,103011],{"class":78,"line":94},[76,103007,32378],{"class":86},[76,103009,103010],{"class":126}," activate",[76,103012,103013],{"class":126}," mujoco-study\n",[76,103015,103016,103018,103020,103022],{"class":78,"line":133},[76,103017,25880],{"class":86},[76,103019,25883],{"class":126},[76,103021,102952],{"class":126},[76,103023,102955],{"class":126},[19,103025,103026],{},"版本冲突说明:",[26,103028,103029,103035,103045,103054],{},[29,103030,103031,103032,490],{},"不要安装 ",[73,103033,103034],{},"mujoco-py",[29,103036,103037,103038,103040,103041,103044],{},"如果旧项目里同时安装了 ",[73,103039,103034],{}," 和 ",[73,103042,103043],{},"mujoco","，建议新建干净虚拟环境。",[29,103046,103047,103050,103051,490],{},[73,103048,103049],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[73,103052,103053],{},"~\u002F.mujoco\u002Fmujoco210",[29,103055,103056,103057,84563,103060,103063],{},"离屏渲染可能涉及 OpenGL 后端，",[73,103058,103059],{},"MUJOCO_GL=egl",[73,103061,103062],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103065,103067],{"id":103066},"_3核心概念解释","3.核心概念解释",[19,103069,103070],{},"MuJoCo 的基本执行流程:",[66,103072,103075],{"className":103073,"code":103074,"language":7268,"meta":71},[7266],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[73,103076,103074],{"__ignoreMap":71},[19,103078,103079,103081],{},[73,103080,102731],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103083,103084,103086,103087,2478,103090,2478,103093,2478,103096,2478,103099,490],{},[73,103085,102741],{}," 存放仿真运行时状态，例如 ",[73,103088,103089],{},"data.time",[73,103091,103092],{},"data.qpos",[73,103094,103095],{},"data.qvel",[73,103097,103098],{},"data.ctrl",[73,103100,103101],{},"data.xpos",[889,103103,103105],{"id":103104},"xml-是什么","XML 是什么",[19,103107,103108],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[66,103110,103112],{"className":55099,"code":103111,"language":55101,"meta":71,"style":71},"\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",[73,103113,103114,103136,103167],{"__ignoreMap":71},[76,103115,103116,103118,103120,103122,103124,103126,103129,103131,103134],{"class":78,"line":79},[76,103117,584],{"class":90},[76,103119,53832],{"class":53332},[76,103121,16972],{"class":86},[76,103123,370],{"class":90},[76,103125,55523],{"class":126},[76,103127,103128],{"class":86}," pos",[76,103130,370],{"class":90},[76,103132,103133],{"class":126},"\"0 0 1\"",[76,103135,53339],{"class":90},[76,103137,103138,103140,103143,103145,103147,103150,103152,103154,103156,103159,103161,103164],{"class":78,"line":94},[76,103139,54176],{"class":90},[76,103141,103142],{"class":53332},"geom",[76,103144,16972],{"class":86},[76,103146,370],{"class":90},[76,103148,103149],{"class":126},"\"box_geom\"",[76,103151,55855],{"class":86},[76,103153,370],{"class":90},[76,103155,55523],{"class":126},[76,103157,103158],{"class":86}," size",[76,103160,370],{"class":90},[76,103162,103163],{"class":126},"\"0.1 0.1 0.1\"",[76,103165,103166],{"class":90},"\u002F>\n",[76,103168,103169,103171,103173],{"class":78,"line":133},[76,103170,53817],{"class":90},[76,103172,53832],{"class":53332},[76,103174,53339],{"class":90},[19,103176,103177],{},"这段意思是：",[26,103179,103180,103186,103193],{},[29,103181,103182,103183,103185],{},"创建一个叫 ",[73,103184,55746],{}," 的刚体。",[29,103187,103188,103189,103192],{},"它初始放在 ",[73,103190,103191],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,103194,103195],{},"它里面有一个盒子形状的几何体。",[889,103197,103199],{"id":103198},"timestep-是什么","timestep 是什么",[19,103201,103202],{},"XML 里的：",[66,103204,103206],{"className":55099,"code":103205,"language":55101,"meta":71,"style":71},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[73,103207,103208],{"__ignoreMap":71},[76,103209,103210,103212,103214,103217,103219,103222,103225,103227,103230],{"class":78,"line":79},[76,103211,584],{"class":90},[76,103213,71194],{"class":53332},[76,103215,103216],{"class":86}," timestep",[76,103218,370],{"class":90},[76,103220,103221],{"class":126},"\"0.01\"",[76,103223,103224],{"class":86}," gravity",[76,103226,370],{"class":90},[76,103228,103229],{"class":126},"\"0 0 -9.81\"",[76,103231,103166],{"class":90},[19,103233,103234,103235,103238,103239,103241],{},"表示每调用一次 ",[73,103236,103237],{},"mj_step","，仿真时间前进 ",[73,103240,41022],{}," 秒。循环 100 次，大约就是 1 秒：",[66,103243,103246],{"className":103244,"code":103245,"language":7268,"meta":71},[7266],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[73,103247,103245],{"__ignoreMap":71},[889,103249,103251],{"id":103250},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103253,103254],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[66,103256,103259],{"className":103257,"code":103258,"language":7268,"meta":71},[7266],"x y z qw qx qy qz\n",[73,103260,103258],{"__ignoreMap":71},[19,103262,103263,103264,103267,103268,103271],{},"表示一个自由刚体的位置和姿态。其中 ",[73,103265,103266],{},"x y z"," 是位置，",[73,103269,103270],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103273,103275],{"id":103274},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103277,103278],{},"新建文件:",[66,103280,103282],{"className":25871,"code":103281,"language":25873,"meta":71,"style":71},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[73,103283,103284,103294,103301],{"__ignoreMap":71},[76,103285,103286,103289,103291],{"class":78,"line":79},[76,103287,103288],{"class":86},"mkdir",[76,103290,31264],{"class":119},[76,103292,103293],{"class":126}," mujoco_tutorial\n",[76,103295,103296,103299],{"class":78,"line":94},[76,103297,103298],{"class":119},"cd",[76,103300,103293],{"class":126},[76,103302,103303,103306],{"class":78,"line":133},[76,103304,103305],{"class":86},"touch",[76,103307,103308],{"class":126}," ch1_first_sim.py\n",[19,103310,103311],{},"写入:",[66,103313,103315],{"className":68,"code":103314,"language":70,"meta":71,"style":71},"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",[73,103316,103317,103324,103328,103332,103342,103347,103352,103356,103361,103366,103370,103375,103380,103385,103390,103395,103400,103404,103408,103412,103425,103439,103449,103453,103465,103477,103489,103501,103513,103517,103534,103539,103543,103554,103565,103569,103573,103587],{"__ignoreMap":71},[76,103318,103319,103321],{"class":78,"line":79},[76,103320,32438],{"class":82},[76,103322,103323],{"class":90}," mujoco\n",[76,103325,103326],{"class":78,"line":94},[76,103327,149],{"emptyLinePlaceholder":148},[76,103329,103330],{"class":78,"line":133},[76,103331,149],{"emptyLinePlaceholder":148},[76,103333,103334,103337,103339],{"class":78,"line":145},[76,103335,103336],{"class":119},"XML",[76,103338,15617],{"class":82},[76,103340,103341],{"class":126}," \"\"\"\n",[76,103343,103344],{"class":78,"line":152},[76,103345,103346],{"class":126},"\u003Cmujoco model=\"first_sim\">\n",[76,103348,103349],{"class":78,"line":157},[76,103350,103351],{"class":126},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[76,103353,103354],{"class":78,"line":246},[76,103355,149],{"emptyLinePlaceholder":148},[76,103357,103358],{"class":78,"line":251},[76,103359,103360],{"class":126},"  \u003Cworldbody>\n",[76,103362,103363],{"class":78,"line":257},[76,103364,103365],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,103367,103368],{"class":78,"line":641},[76,103369,149],{"emptyLinePlaceholder":148},[76,103371,103372],{"class":78,"line":646},[76,103373,103374],{"class":126},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[76,103376,103377],{"class":78,"line":659},[76,103378,103379],{"class":126},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[76,103381,103382],{"class":78,"line":1608},[76,103383,103384],{"class":126},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,103386,103387],{"class":78,"line":1632},[76,103388,103389],{"class":126},"    \u003C\u002Fbody>\n",[76,103391,103392],{"class":78,"line":1637},[76,103393,103394],{"class":126},"  \u003C\u002Fworldbody>\n",[76,103396,103397],{"class":78,"line":1642},[76,103398,103399],{"class":126},"\u003C\u002Fmujoco>\n",[76,103401,103402],{"class":78,"line":1652},[76,103403,97720],{"class":126},[76,103405,103406],{"class":78,"line":1660},[76,103407,149],{"emptyLinePlaceholder":148},[76,103409,103410],{"class":78,"line":1683},[76,103411,149],{"emptyLinePlaceholder":148},[76,103413,103414,103416,103418,103421,103423],{"class":78,"line":1698},[76,103415,83],{"class":82},[76,103417,4069],{"class":86},[76,103419,103420],{"class":90},"() -> ",[76,103422,489],{"class":119},[76,103424,590],{"class":90},[76,103426,103427,103430,103432,103435,103437],{"class":78,"line":1711},[76,103428,103429],{"class":90},"    model ",[76,103431,370],{"class":82},[76,103433,103434],{"class":90}," mujoco.MjModel.from_xml_string(",[76,103436,103336],{"class":119},[76,103438,130],{"class":90},[76,103440,103441,103444,103446],{"class":78,"line":1717},[76,103442,103443],{"class":90},"    data ",[76,103445,370],{"class":82},[76,103447,103448],{"class":90}," mujoco.MjData(model)\n",[76,103450,103451],{"class":78,"line":1728},[76,103452,149],{"emptyLinePlaceholder":148},[76,103454,103455,103457,103459,103462],{"class":78,"line":1740},[76,103456,120],{"class":119},[76,103458,123],{"class":90},[76,103460,103461],{"class":126},"\"nq:\"",[76,103463,103464],{"class":90},", model.nq)\n",[76,103466,103467,103469,103471,103474],{"class":78,"line":1746},[76,103468,120],{"class":119},[76,103470,123],{"class":90},[76,103472,103473],{"class":126},"\"nv:\"",[76,103475,103476],{"class":90},", model.nv)\n",[76,103478,103479,103481,103483,103486],{"class":78,"line":1751},[76,103480,120],{"class":119},[76,103482,123],{"class":90},[76,103484,103485],{"class":126},"\"nu:\"",[76,103487,103488],{"class":90},", model.nu)\n",[76,103490,103491,103493,103495,103498],{"class":78,"line":1756},[76,103492,120],{"class":119},[76,103494,123],{"class":90},[76,103496,103497],{"class":126},"\"initial time:\"",[76,103499,103500],{"class":90},", data.time)\n",[76,103502,103503,103505,103507,103510],{"class":78,"line":1766},[76,103504,120],{"class":119},[76,103506,123],{"class":90},[76,103508,103509],{"class":126},"\"initial qpos:\"",[76,103511,103512],{"class":90},", data.qpos.copy())\n",[76,103514,103515],{"class":78,"line":1773},[76,103516,149],{"emptyLinePlaceholder":148},[76,103518,103519,103521,103524,103526,103528,103530,103532],{"class":78,"line":1793},[76,103520,1469],{"class":82},[76,103522,103523],{"class":90}," _ ",[76,103525,1475],{"class":82},[76,103527,34483],{"class":119},[76,103529,123],{"class":90},[76,103531,2575],{"class":119},[76,103533,32830],{"class":90},[76,103535,103536],{"class":78,"line":1806},[76,103537,103538],{"class":90},"        mujoco.mj_step(model, data)\n",[76,103540,103541],{"class":78,"line":1817},[76,103542,149],{"emptyLinePlaceholder":148},[76,103544,103545,103547,103549,103552],{"class":78,"line":1822},[76,103546,120],{"class":119},[76,103548,123],{"class":90},[76,103550,103551],{"class":126},"\"final time:\"",[76,103553,103500],{"class":90},[76,103555,103556,103558,103560,103563],{"class":78,"line":1835},[76,103557,120],{"class":119},[76,103559,123],{"class":90},[76,103561,103562],{"class":126},"\"final qpos:\"",[76,103564,103512],{"class":90},[76,103566,103567],{"class":78,"line":1847},[76,103568,149],{"emptyLinePlaceholder":148},[76,103570,103571],{"class":78,"line":1852},[76,103572,149],{"emptyLinePlaceholder":148},[76,103574,103575,103577,103579,103582,103585],{"class":78,"line":1862},[76,103576,723],{"class":82},[76,103578,33264],{"class":119},[76,103580,103581],{"class":82}," ==",[76,103583,103584],{"class":126}," \"__main__\"",[76,103586,590],{"class":90},[76,103588,103589],{"class":78,"line":1874},[76,103590,103591],{"class":90},"    main()\n",[889,103593,103594],{"id":103594},"代码逐段解释",[19,103596,103597],{},"导入库：",[66,103599,103601],{"className":68,"code":103600,"language":70,"meta":71,"style":71},"import mujoco\n",[73,103602,103603],{"__ignoreMap":71},[76,103604,103605,103607],{"class":78,"line":79},[76,103606,32438],{"class":82},[76,103608,103323],{"class":90},[19,103610,103611],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103613,103614],{},"定义 XML：",[66,103616,103618],{"className":68,"code":103617,"language":70,"meta":71,"style":71},"XML = \"\"\"\n...\n\"\"\"\n",[73,103619,103620,103628,103633],{"__ignoreMap":71},[76,103621,103622,103624,103626],{"class":78,"line":79},[76,103623,103336],{"class":119},[76,103625,15617],{"class":82},[76,103627,103341],{"class":126},[76,103629,103630],{"class":78,"line":94},[76,103631,103632],{"class":126},"...\n",[76,103634,103635],{"class":78,"line":133},[76,103636,97720],{"class":126},[19,103638,103639,103640,103643],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[73,103641,103642],{},"freejoint"," 的方块。",[19,103645,103646],{},"编译模型：",[66,103648,103650],{"className":68,"code":103649,"language":70,"meta":71,"style":71},"model = mujoco.MjModel.from_xml_string(XML)\n",[73,103651,103652],{"__ignoreMap":71},[76,103653,103654,103657,103659,103661,103663],{"class":78,"line":79},[76,103655,103656],{"class":90},"model ",[76,103658,370],{"class":82},[76,103660,103434],{"class":90},[76,103662,103336],{"class":119},[76,103664,130],{"class":90},[19,103666,103667],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103669,103670],{},"创建数据：",[66,103672,103674],{"className":68,"code":103673,"language":70,"meta":71,"style":71},"data = mujoco.MjData(model)\n",[73,103675,103676],{"__ignoreMap":71},[76,103677,103678,103681,103683],{"class":78,"line":79},[76,103679,103680],{"class":90},"data ",[76,103682,370],{"class":82},[76,103684,103448],{"class":90},[19,103686,103687,103689,103690,103692],{},[73,103688,35439],{}," 会保存仿真当前状态。刚创建时，时间是 ",[73,103691,1294],{},"，方块还在初始位置。",[19,103694,103695],{},"推进仿真：",[66,103697,103699],{"className":68,"code":103698,"language":70,"meta":71,"style":71},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[73,103700,103701,103717],{"__ignoreMap":71},[76,103702,103703,103705,103707,103709,103711,103713,103715],{"class":78,"line":79},[76,103704,5112],{"class":82},[76,103706,103523],{"class":90},[76,103708,1475],{"class":82},[76,103710,34483],{"class":119},[76,103712,123],{"class":90},[76,103714,2575],{"class":119},[76,103716,32830],{"class":90},[76,103718,103719],{"class":78,"line":94},[76,103720,103721],{"class":90},"    mujoco.mj_step(model, data)\n",[19,103723,103724,103725,103727],{},"每次 ",[73,103726,103237],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[889,103729,103730],{"id":103730},"代码逐行细讲",[19,103732,103733],{},"下面把完整代码按新手视角拆开讲。",[66,103735,103736],{"className":68,"code":103600,"language":70,"meta":71,"style":71},[73,103737,103738],{"__ignoreMap":71},[76,103739,103740,103742],{"class":78,"line":79},[76,103741,32438],{"class":82},[76,103743,103323],{"class":90},[19,103745,103746,103748,103749,2478,103751,2478,103753,490],{},[73,103747,32438],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[73,103750,102697],{},[73,103752,102702],{},[73,103754,103755],{},"mujoco.mj_step",[66,103757,103758],{"className":68,"code":103617,"language":70,"meta":71,"style":71},[73,103759,103760,103768,103772],{"__ignoreMap":71},[76,103761,103762,103764,103766],{"class":78,"line":79},[76,103763,103336],{"class":119},[76,103765,15617],{"class":82},[76,103767,103341],{"class":126},[76,103769,103770],{"class":78,"line":94},[76,103771,103632],{"class":126},[76,103773,103774],{"class":78,"line":133},[76,103775,97720],{"class":126},[19,103777,103778,103780,103781,103784],{},[73,103779,103336],{}," 是一个变量名。右边的三引号 ",[73,103782,103783],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[66,103786,103787],{"className":55099,"code":103346,"language":55101,"meta":71,"style":71},[73,103788,103789],{"__ignoreMap":71},[76,103790,103791,103793,103795,103798,103800,103803],{"class":78,"line":79},[76,103792,584],{"class":90},[76,103794,103043],{"class":53332},[76,103796,103797],{"class":86}," model",[76,103799,370],{"class":90},[76,103801,103802],{"class":126},"\"first_sim\"",[76,103804,53339],{"class":90},[19,103806,103807,103808,103811,103812,490],{},"这是 XML 的根标签。",[73,103809,103810],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[73,103813,103814],{},"first_sim",[66,103816,103817],{"className":55099,"code":103205,"language":55101,"meta":71,"style":71},[73,103818,103819],{"__ignoreMap":71},[76,103820,103821,103823,103825,103827,103829,103831,103833,103835,103837],{"class":78,"line":79},[76,103822,584],{"class":90},[76,103824,71194],{"class":53332},[76,103826,103216],{"class":86},[76,103828,370],{"class":90},[76,103830,103221],{"class":126},[76,103832,103224],{"class":86},[76,103834,370],{"class":90},[76,103836,103229],{"class":126},[76,103838,103166],{"class":90},[19,103840,103841,103843,103844,103847,103848,103851],{},[73,103842,71194],{}," 用来设置仿真参数。",[73,103845,103846],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[73,103849,103850],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[66,103853,103855],{"className":55099,"code":103854,"language":55101,"meta":71,"style":71},"\u003Cworldbody>\n",[73,103856,103857],{"__ignoreMap":71},[76,103858,103859,103861,103864],{"class":78,"line":79},[76,103860,584],{"class":90},[76,103862,103863],{"class":53332},"worldbody",[76,103865,53339],{"class":90},[19,103867,103868,103870],{},[73,103869,103863],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[66,103872,103874],{"className":55099,"code":103873,"language":55101,"meta":71,"style":71},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[73,103875,103876],{"__ignoreMap":71},[76,103877,103878,103880,103882,103884,103886,103889,103891,103893,103896,103898,103900,103903,103905,103907,103910],{"class":78,"line":79},[76,103879,584],{"class":90},[76,103881,103142],{"class":53332},[76,103883,16972],{"class":86},[76,103885,370],{"class":90},[76,103887,103888],{"class":126},"\"floor\"",[76,103890,55855],{"class":86},[76,103892,370],{"class":90},[76,103894,103895],{"class":126},"\"plane\"",[76,103897,103158],{"class":86},[76,103899,370],{"class":90},[76,103901,103902],{"class":126},"\"2 2 0.1\"",[76,103904,80792],{"class":86},[76,103906,370],{"class":90},[76,103908,103909],{"class":126},"\"0.8 0.8 0.8 1\"",[76,103911,103166],{"class":90},[19,103913,103914,103915,103917,103918,103921,103922,103925,103926,103928],{},"这行创建地面。",[73,103916,103142],{}," 是几何体。",[73,103919,103920],{},"name=\"floor\""," 是名字。",[73,103923,103924],{},"type=\"plane\""," 表示平面。",[73,103927,57141],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[66,103930,103932],{"className":55099,"code":103931,"language":55101,"meta":71,"style":71},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[73,103933,103934],{"__ignoreMap":71},[76,103935,103936,103938,103940,103942,103944,103946,103948,103950,103952],{"class":78,"line":79},[76,103937,584],{"class":90},[76,103939,53832],{"class":53332},[76,103941,16972],{"class":86},[76,103943,370],{"class":90},[76,103945,55523],{"class":126},[76,103947,103128],{"class":86},[76,103949,370],{"class":90},[76,103951,103133],{"class":126},[76,103953,53339],{"class":90},[19,103955,103956,103957,490,103959,103962,103963,103965],{},"这行创建一个刚体，名字叫 ",[73,103958,55746],{},[73,103960,103961],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[73,103964,103191],{},"，也就是离地面 1 米高。",[66,103967,103969],{"className":55099,"code":103968,"language":55101,"meta":71,"style":71},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[73,103970,103971],{"__ignoreMap":71},[76,103972,103973,103975,103977,103979,103981,103984],{"class":78,"line":79},[76,103974,584],{"class":90},[76,103976,103642],{"class":53332},[76,103978,16972],{"class":86},[76,103980,370],{"class":90},[76,103982,103983],{"class":126},"\"box_free\"",[76,103985,103166],{"class":90},[19,103987,103988,103989,103991],{},"这行很重要。",[73,103990,103642],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[66,103993,103995],{"className":55099,"code":103994,"language":55101,"meta":71,"style":71},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[73,103996,103997],{"__ignoreMap":71},[76,103998,103999,104001,104003,104005,104007,104009,104011,104013,104015,104017,104019,104021,104024,104026,104028,104030,104032,104035],{"class":78,"line":79},[76,104000,584],{"class":90},[76,104002,103142],{"class":53332},[76,104004,16972],{"class":86},[76,104006,370],{"class":90},[76,104008,103149],{"class":126},[76,104010,55855],{"class":86},[76,104012,370],{"class":90},[76,104014,55523],{"class":126},[76,104016,103158],{"class":86},[76,104018,370],{"class":90},[76,104020,103163],{"class":126},[76,104022,104023],{"class":86}," mass",[76,104025,370],{"class":90},[76,104027,5763],{"class":126},[76,104029,80792],{"class":86},[76,104031,370],{"class":90},[76,104033,104034],{"class":126},"\"1 0 0 1\"",[76,104036,103166],{"class":90},[19,104038,104039,104040,104043,104044,104047,104048,104051,104052,104055],{},"这行给 box body 添加一个盒子形状。",[73,104041,104042],{},"type=\"box\""," 表示形状是盒子。",[73,104045,104046],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[73,104049,104050],{},"mass=\"1\""," 表示质量是 1。",[73,104053,104054],{},"rgba=\"1 0 0 1\""," 表示红色。",[66,104057,104059],{"className":68,"code":104058,"language":70,"meta":71,"style":71},"def main() -> None:\n",[73,104060,104061],{"__ignoreMap":71},[76,104062,104063,104065,104067,104069,104071],{"class":78,"line":79},[76,104064,83],{"class":82},[76,104066,4069],{"class":86},[76,104068,103420],{"class":90},[76,104070,489],{"class":119},[76,104072,590],{"class":90},[19,104074,104075,104077,104078,104081,104082,104085],{},[73,104076,83],{}," 用来定义函数。这里定义了一个叫 ",[73,104079,104080],{},"main"," 的函数。",[73,104083,104084],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[66,104087,104088],{"className":68,"code":103649,"language":70,"meta":71,"style":71},[73,104089,104090],{"__ignoreMap":71},[76,104091,104092,104094,104096,104098,104100],{"class":78,"line":79},[76,104093,103656],{"class":90},[76,104095,370],{"class":82},[76,104097,103434],{"class":90},[76,104099,103336],{"class":119},[76,104101,130],{"class":90},[19,104103,104104,104105,104108],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[73,104106,104107],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[66,104110,104111],{"className":68,"code":103673,"language":70,"meta":71,"style":71},[73,104112,104113],{"__ignoreMap":71},[76,104114,104115,104117,104119],{"class":78,"line":79},[76,104116,103680],{"class":90},[76,104118,370],{"class":82},[76,104120,103448],{"class":90},[19,104122,104123,104124,104126,104127,104129],{},"这行创建仿真数据。",[73,104125,35439],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[73,104128,35439],{}," 都会变化。",[66,104131,104133],{"className":68,"code":104132,"language":70,"meta":71,"style":71},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[73,104134,104135,104145,104155],{"__ignoreMap":71},[76,104136,104137,104139,104141,104143],{"class":78,"line":79},[76,104138,478],{"class":119},[76,104140,123],{"class":90},[76,104142,103461],{"class":126},[76,104144,103464],{"class":90},[76,104146,104147,104149,104151,104153],{"class":78,"line":94},[76,104148,478],{"class":119},[76,104150,123],{"class":90},[76,104152,103473],{"class":126},[76,104154,103476],{"class":90},[76,104156,104157,104159,104161,104163],{"class":78,"line":133},[76,104158,478],{"class":119},[76,104160,123],{"class":90},[76,104162,103485],{"class":126},[76,104164,103488],{"class":90},[19,104166,104167,104169,104170,104173,104174,104177,104178,104181,104182,104185],{},[73,104168,478],{}," 用来输出信息。",[73,104171,104172],{},"model.nq"," 是位置变量数量，",[73,104175,104176],{},"model.nv"," 是速度变量数量，",[73,104179,104180],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[73,104183,104184],{},"nu"," 是 0。",[66,104187,104189],{"className":68,"code":104188,"language":70,"meta":71,"style":71},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[73,104190,104191,104201],{"__ignoreMap":71},[76,104192,104193,104195,104197,104199],{"class":78,"line":79},[76,104194,478],{"class":119},[76,104196,123],{"class":90},[76,104198,103497],{"class":126},[76,104200,103500],{"class":90},[76,104202,104203,104205,104207,104209],{"class":78,"line":94},[76,104204,478],{"class":119},[76,104206,123],{"class":90},[76,104208,103509],{"class":126},[76,104210,103512],{"class":90},[19,104212,104213,104214,104216,104217,104219,104220,104223],{},"这里打印初始时间和初始位置。",[73,104215,103089],{}," 一开始是 0。",[73,104218,103092],{}," 是位置数组。",[73,104221,104222],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[66,104225,104226],{"className":68,"code":103698,"language":70,"meta":71,"style":71},[73,104227,104228,104244],{"__ignoreMap":71},[76,104229,104230,104232,104234,104236,104238,104240,104242],{"class":78,"line":79},[76,104231,5112],{"class":82},[76,104233,103523],{"class":90},[76,104235,1475],{"class":82},[76,104237,34483],{"class":119},[76,104239,123],{"class":90},[76,104241,2575],{"class":119},[76,104243,32830],{"class":90},[76,104245,104246],{"class":78,"line":94},[76,104247,103721],{"class":90},[19,104249,104250,104252,104253,104256,104257,104259,104260,104262],{},[73,104251,5112],{}," 是循环。",[73,104254,104255],{},"range(100)"," 表示循环 100 次。",[73,104258,3246],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[73,104261,103237],{},"，仿真就前进一步。",[66,104264,104266],{"className":68,"code":104265,"language":70,"meta":71,"style":71},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[73,104267,104268,104278],{"__ignoreMap":71},[76,104269,104270,104272,104274,104276],{"class":78,"line":79},[76,104271,478],{"class":119},[76,104273,123],{"class":90},[76,104275,103551],{"class":126},[76,104277,103500],{"class":90},[76,104279,104280,104282,104284,104286],{"class":78,"line":94},[76,104281,478],{"class":119},[76,104283,123],{"class":90},[76,104285,103562],{"class":126},[76,104287,103512],{"class":90},[19,104289,104290],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[66,104292,104294],{"className":68,"code":104293,"language":70,"meta":71,"style":71},"if __name__ == \"__main__\":\n    main()\n",[73,104295,104296,104308],{"__ignoreMap":71},[76,104297,104298,104300,104302,104304,104306],{"class":78,"line":79},[76,104299,723],{"class":82},[76,104301,33264],{"class":119},[76,104303,103581],{"class":82},[76,104305,103584],{"class":126},[76,104307,590],{"class":90},[76,104309,104310],{"class":78,"line":94},[76,104311,103591],{"class":90},[19,104313,104314,104315,104318,104319,490],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[73,104316,104317],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[73,104320,104317],{},[19,104322,104323],{},"运行:",[66,104325,104327],{"className":25871,"code":104326,"language":25873,"meta":71,"style":71},"python ch1_first_sim.py\n",[73,104328,104329],{"__ignoreMap":71},[76,104330,104331,104333],{"class":78,"line":79},[76,104332,70],{"class":86},[76,104334,103308],{"class":126},[14,104336,104338],{"id":104337},"_5运行结果说明","5.运行结果说明",[19,104340,104341],{},"你应该看到类似输出:",[66,104343,104346],{"className":104344,"code":104345,"language":7268,"meta":71},[7266],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[73,104347,104345],{"__ignoreMap":71},[19,104349,104350,104352,104353,104356,104357,490],{},[73,104351,103642],{}," 有 7 个位置变量: ",[73,104354,104355],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[73,104358,104359],{},"vx vy vz wx wy wz",[19,104361,104362,104363,104366],{},"你还会看到 ",[73,104364,104365],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104368,104370],{"id":104369},"_6验证步骤","6.验证步骤",[19,104372,104373],{},"确认版本:",[66,104375,104376],{"className":25871,"code":102961,"language":25873,"meta":71,"style":71},[73,104377,104378],{"__ignoreMap":71},[76,104379,104380,104382,104384],{"class":78,"line":79},[76,104381,70],{"class":86},[76,104383,32406],{"class":119},[76,104385,102972],{"class":126},[19,104387,104388],{},"确认导入的是官方 bindings:",[66,104390,104392],{"className":25871,"code":104391,"language":25873,"meta":71,"style":71},"python -c \"import mujoco; print(mujoco)\"\n",[73,104393,104394],{"__ignoreMap":71},[76,104395,104396,104398,104400],{"class":78,"line":79},[76,104397,70],{"class":86},[76,104399,32406],{"class":119},[76,104401,104402],{"class":126}," \"import mujoco; print(mujoco)\"\n",[19,104404,104405],{},"运行程序:",[66,104407,104408],{"className":25871,"code":104326,"language":25873,"meta":71,"style":71},[73,104409,104410],{"__ignoreMap":71},[76,104411,104412,104414],{"class":78,"line":79},[76,104413,70],{"class":86},[76,104415,103308],{"class":126},[19,104417,104418,104419,104422,104423,490],{},"检查 ",[73,104420,104421],{},"final time"," 是否约等于 ",[73,104424,104425],{},"1.0",[19,104427,104428],{},"再做几个小实验：",[26,104430,104431,104441,104449,104462],{},[29,104432,104433,104434,104436,104437,104440],{},"把 ",[73,104435,103961],{}," 改成 ",[73,104438,104439],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104442,104433,104443,104436,104445,104448],{},[73,104444,103850],{},[73,104446,104447],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104450,104433,104451,104436,104453,104456,104457,104459,104460,490],{},[73,104452,103846],{},[73,104454,104455],{},"timestep=\"0.005\"","，观察 100 步后的 ",[73,104458,104421],{}," 是否变成约 ",[73,104461,37367],{},[29,104463,104464,104465,104468],{},"删除 ",[73,104466,104467],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104470,104471],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104473,104475],{"id":104474},"_7常见错误与解决方案","7.常见错误与解决方案",[889,104477,104479],{"id":104478},"modulenotfounderror-no-module-named-mujoco",[73,104480,104481],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104483,104484],{},"解决:",[66,104486,104488],{"className":25871,"code":104487,"language":25873,"meta":71,"style":71},"pip install \"mujoco>=2.3\"\n",[73,104489,104490],{"__ignoreMap":71},[76,104491,104492,104494,104496],{"class":78,"line":79},[76,104493,25880],{"class":86},[76,104495,25883],{"class":126},[76,104497,104498],{"class":126}," \"mujoco>=2.3\"\n",[889,104500,104502],{"id":104501},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104504,104505],{},"先安装系统依赖:",[66,104507,104509],{"className":25871,"code":104508,"language":25873,"meta":71,"style":71},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[73,104510,104511],{"__ignoreMap":71},[76,104512,104513,104515,104517,104519,104521,104524,104526,104529,104531,104534,104536],{"class":78,"line":79},[76,104514,26626],{"class":86},[76,104516,28364],{"class":126},[76,104518,25883],{"class":126},[76,104520,28449],{"class":119},[76,104522,104523],{"class":126}," mesa-libGL",[76,104525,102836],{"class":126},[76,104527,104528],{"class":126}," glfw",[76,104530,102856],{"class":126},[76,104532,104533],{"class":126}," libX11",[76,104535,102869],{"class":126},[76,104537,104538],{"class":126}," libXrandr\n",[889,104540,104542],{"id":104541},"xml-解析失败","XML 解析失败",[19,104544,104545],{},"检查:",[26,104547,104548,104551,104554,104560],{},[29,104549,104550],{},"标签是否闭合",[29,104552,104553],{},"属性是否带引号",[29,104555,104556,104557],{},"根节点是否是 ",[73,104558,104559],{},"\u003Cmujoco>",[29,104561,104562,104564,104565,104568],{},[73,104563,53832],{}," 是否放在 ",[73,104566,104567],{},"\u003Cworldbody>"," 内部",[889,104570,104572,104574,104575],{"id":104571},"final-time-不是严格等于-10",[73,104573,104421],{}," 不是严格等于 ",[73,104576,104425],{},[19,104578,104579],{},"这通常不是错误。浮点数计算可能得到：",[66,104581,104584],{"className":104582,"code":104583,"language":7268,"meta":71},[7266],"1.0000000000000007\n",[73,104585,104583],{"__ignoreMap":71},[19,104587,104588,104589,104591],{},"只要接近 ",[73,104590,104425],{}," 就正常。",[889,104593,104594],{"id":104594},"方块没有掉下来",[19,104596,104597],{},"检查：",[26,104599,104600,104606,104612,104617],{},[29,104601,104602,104603],{},"方块 body 里是否有 ",[73,104604,104605],{},"\u003Cfreejoint\u002F>",[29,104607,104608,104609],{},"重力是否是 ",[73,104610,104611],{},"0 0 -9.81",[29,104613,104614,104615],{},"是否真的调用了 ",[73,104616,102707],{},[29,104618,104619,104620,104622,104623],{},"你看的是否是 ",[73,104621,104365],{},"，不是 ",[73,104624,104625],{},"initial qpos",[14,104627,104629],{"id":104628},"_8本章小结","8.本章小结",[19,104631,104632],{},"本章你已经完成了 MuJoCo 的最小闭环：",[66,104634,104637],{"className":104635,"code":104636,"language":7268,"meta":71},[7266],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[73,104638,104636],{"__ignoreMap":71},[19,104640,104641],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2178,104643,104644],{},"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":71,"searchDepth":94,"depth":94,"links":104646},[104647,104648,104649,104654,104658,104659,104660,104668],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":104650},[104651,104652,104653],{"id":103104,"depth":133,"text":103105},{"id":103198,"depth":133,"text":103199},{"id":103250,"depth":133,"text":103251},{"id":103274,"depth":94,"text":103275,"children":104655},[104656,104657],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":104661},[104662,104663,104664,104665,104667],{"id":104478,"depth":133,"text":104481},{"id":104501,"depth":133,"text":104502},{"id":104541,"depth":133,"text":104542},{"id":104571,"depth":133,"text":104666},"final time 不是严格等于 1.0",{"id":104594,"depth":133,"text":104594},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102660,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104675,"title":104676,"body":104677,"description":71,"extension":2202,"meta":106333,"navigation":148,"path":106334,"seo":106335,"stem":106336,"__hash__":106337},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104678,"toc":106309},[104679,104682,104684,104687,104690,104707,104802,104805,104811,104813,104815,104839,104842,104856,104859,104900,104902,104915,104917,104920,104968,104980,104983,104986,104992,105005,105072,105075,105094,105097,105100,105106,105108,105117,105120,105124,105133,105215,105224,105228,105234,105248,105258,105260,105590,105593,105605,105607,105618,105620,105623,105641,105644,105647,105665,105676,105679,105694,105704,105706,105727,105744,105764,105770,105810,105826,105842,105848,105851,105875,105891,105896,105926,105943,105968,105971,105986,105995,106010,106019,106034,106041,106043,106053,106066,106073,106076,106115,106122,106124,106176,106178,106184,106187,106194,106201,106204,106206,106224,106227,106230,106264,106276,106278,106281,106303,106306],[10,104680,104676],{"id":104681},"_2xml-与-mjcf-物理建模基础",[14,104683,102669],{"id":102668},[19,104685,104686],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104688,104689],{},"本章结束后，你应该能看懂一个简单模型里：",[26,104691,104692,104695,104698,104701,104704],{},[29,104693,104694],{},"地面在哪里。",[29,104696,104697],{},"物体初始位置在哪里。",[29,104699,104700],{},"几何体是什么形状。",[29,104702,104703],{},"哪些 body 可以自由运动。",[29,104705,104706],{},"如何用名字在 Python 里找到 XML 中的对象。",[2404,104708,104709,104719],{},[2407,104710,104711],{},[2410,104712,104713,104716],{},[2413,104714,104715],{"align":25785},"标签",[2413,104717,104718],{"align":25785},"作用",[2451,104720,104721,104730,104740,104749,104759,104769,104782,104792],{},[2410,104722,104723,104727],{},[2456,104724,104725],{"align":25785},[73,104726,104559],{},[2456,104728,104729],{"align":25785},"根节点",[2410,104731,104732,104737],{},[2456,104733,104734],{"align":25785},[73,104735,104736],{},"\u003Coption>",[2456,104738,104739],{"align":25785},"仿真参数",[2410,104741,104742,104746],{},[2456,104743,104744],{"align":25785},[73,104745,104567],{},[2456,104747,104748],{"align":25785},"世界中的物体",[2410,104750,104751,104756],{},[2456,104752,104753],{"align":25785},[73,104754,104755],{},"\u003Cbody>",[2456,104757,104758],{"align":25785},"刚体",[2410,104760,104761,104766],{},[2456,104762,104763],{"align":25785},[73,104764,104765],{},"\u003Cgeom>",[2456,104767,104768],{"align":25785},"几何体、碰撞体、可视体",[2410,104770,104771,104779],{},[2456,104772,104773,27028,104776],{"align":25785},[73,104774,104775],{},"\u003Cjoint>",[73,104777,104778],{},"\u003Cfreejoint>",[2456,104780,104781],{"align":25785},"关节",[2410,104783,104784,104789],{},[2456,104785,104786],{"align":25785},[73,104787,104788],{},"\u003Csite>",[2456,104790,104791],{"align":25785},"标记点",[2410,104793,104794,104799],{},[2456,104795,104796],{"align":25785},[73,104797,104798],{},"\u003Cactuator>",[2456,104800,104801],{"align":25785},"控制器",[19,104803,104804],{},"初学时可以先记住：",[66,104806,104809],{"className":104807,"code":104808,"language":7268,"meta":71},[7266],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[73,104810,104808],{"__ignoreMap":71},[14,104812,102792],{"id":102791},[19,104814,102795],{},[66,104816,104818],{"className":25871,"code":104817,"language":25873,"meta":71,"style":71},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[73,104819,104820],{"__ignoreMap":71},[76,104821,104822,104824,104826,104828,104830,104832,104834,104836],{"class":78,"line":79},[76,104823,26626],{"class":86},[76,104825,28364],{"class":126},[76,104827,25883],{"class":126},[76,104829,28449],{"class":119},[76,104831,104523],{"class":126},[76,104833,102836],{"class":126},[76,104835,104528],{"class":126},[76,104837,104838],{"class":126}," glfw-devel\n",[19,104840,104841],{},"pip:",[66,104843,104844],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},[73,104845,104846],{"__ignoreMap":71},[76,104847,104848,104850,104852,104854],{"class":78,"line":79},[76,104849,25880],{"class":86},[76,104851,25883],{"class":126},[76,104853,102952],{"class":126},[76,104855,102955],{"class":126},[19,104857,104858],{},"conda:",[66,104860,104862],{"className":25871,"code":104861,"language":25873,"meta":71,"style":71},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[73,104863,104864,104881,104890],{"__ignoreMap":71},[76,104865,104866,104868,104870,104872,104875,104877,104879],{"class":78,"line":79},[76,104867,32378],{"class":86},[76,104869,31224],{"class":126},[76,104871,27165],{"class":119},[76,104873,104874],{"class":126}," mujoco-xml",[76,104876,102997],{"class":126},[76,104878,103000],{"class":119},[76,104880,103003],{"class":119},[76,104882,104883,104885,104887],{"class":78,"line":94},[76,104884,32378],{"class":86},[76,104886,103010],{"class":126},[76,104888,104889],{"class":126}," mujoco-xml\n",[76,104891,104892,104894,104896,104898],{"class":78,"line":133},[76,104893,25880],{"class":86},[76,104895,25883],{"class":126},[76,104897,102952],{"class":126},[76,104899,102955],{"class":126},[19,104901,103026],{},[26,104903,104904,104907,104912],{},[29,104905,104906],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104908,104909,104910,490],{},"本章使用基础标签，适用于 ",[73,104911,103049],{},[29,104913,104914],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104916,103067],{"id":103066},[19,104918,104919],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[66,104921,104923],{"className":55099,"code":104922,"language":55101,"meta":71,"style":71},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[73,104924,104925,104939,104947,104952,104960],{"__ignoreMap":71},[76,104926,104927,104929,104931,104933,104935,104937],{"class":78,"line":79},[76,104928,584],{"class":90},[76,104930,103043],{"class":53332},[76,104932,103797],{"class":86},[76,104934,370],{"class":90},[76,104936,64707],{"class":126},[76,104938,53339],{"class":90},[76,104940,104941,104943,104945],{"class":78,"line":94},[76,104942,54176],{"class":90},[76,104944,103863],{"class":53332},[76,104946,53339],{"class":90},[76,104948,104949],{"class":78,"line":133},[76,104950,104951],{"class":90},"    ...\n",[76,104953,104954,104956,104958],{"class":78,"line":145},[76,104955,54449],{"class":90},[76,104957,103863],{"class":53332},[76,104959,53339],{"class":90},[76,104961,104962,104964,104966],{"class":78,"line":152},[76,104963,53817],{"class":90},[76,104965,103043],{"class":53332},[76,104967,53339],{"class":90},[19,104969,104970,104972,104973,104975,104976,104979],{},[73,104971,53832],{}," 表示刚体。",[73,104974,103142],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[73,104977,104978],{},"joint"," 表示刚体相对父刚体如何运动。",[889,104981,104982],{"id":104982},"层级结构非常重要",[19,104984,104985],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[66,104987,104990],{"className":104988,"code":104989,"language":7268,"meta":71},[7266],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[73,104991,104989],{"__ignoreMap":71},[19,104993,104994,103040,104997,105000,105001,105004],{},[73,104995,104996],{},"red_box_geom",[73,104998,104999],{},"box_center"," 都属于 ",[73,105002,105003],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[66,105006,105008],{"className":55099,"code":105007,"language":55101,"meta":71,"style":71},"\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",[73,105009,105010,105030,105044,105064],{"__ignoreMap":71},[76,105011,105012,105014,105016,105018,105020,105022,105024,105026,105028],{"class":78,"line":79},[76,105013,584],{"class":90},[76,105015,53832],{"class":53332},[76,105017,16972],{"class":86},[76,105019,370],{"class":90},[76,105021,55523],{"class":126},[76,105023,103128],{"class":86},[76,105025,370],{"class":90},[76,105027,103133],{"class":126},[76,105029,53339],{"class":90},[76,105031,105032,105034,105036,105038,105040,105042],{"class":78,"line":94},[76,105033,54176],{"class":90},[76,105035,103642],{"class":53332},[76,105037,16972],{"class":86},[76,105039,370],{"class":90},[76,105041,103983],{"class":126},[76,105043,103166],{"class":90},[76,105045,105046,105048,105050,105052,105054,105056,105058,105060,105062],{"class":78,"line":133},[76,105047,54176],{"class":90},[76,105049,103142],{"class":53332},[76,105051,55855],{"class":86},[76,105053,370],{"class":90},[76,105055,55523],{"class":126},[76,105057,103158],{"class":86},[76,105059,370],{"class":90},[76,105061,103163],{"class":126},[76,105063,103166],{"class":90},[76,105065,105066,105068,105070],{"class":78,"line":145},[76,105067,53817],{"class":90},[76,105069,53832],{"class":53332},[76,105071,53339],{"class":90},[19,105073,105074],{},"含义:",[26,105076,105077,105083,105088,105091],{},[29,105078,105079,105080,105082],{},"创建名为 ",[73,105081,55746],{}," 的刚体",[29,105084,105085,105086],{},"初始位置在世界坐标 ",[73,105087,103191],{},[29,105089,105090],{},"它有一个自由关节",[29,105092,105093],{},"它有一个盒子几何体",[889,105095,105096],{"id":105096},"坐标怎么理解",[19,105098,105099],{},"MuJoCo 默认使用三维坐标：",[66,105101,105104],{"className":105102,"code":105103,"language":7268,"meta":71},[7266],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[73,105105,105103],{"__ignoreMap":71},[19,105107,16686],{},[66,105109,105111],{"className":55099,"code":105110,"language":55101,"meta":71,"style":71},"pos=\"0 0 1\"\n",[73,105112,105113],{"__ignoreMap":71},[76,105114,105115],{"class":78,"line":79},[76,105116,105110],{"class":90},[19,105118,105119],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[889,105121,105123],{"id":105122},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105125,105126,105127,84554,105130,105132],{},"不同 ",[73,105128,105129],{},"type",[73,105131,33539],{}," 含义不同：",[2404,105134,105135,105150],{},[2407,105136,105137],{},[2410,105138,105139,105143,105148],{},[2413,105140,105141],{"align":25785},[73,105142,105129],{},[2413,105144,105145,105147],{"align":25785},[73,105146,33539],{}," 示例",[2413,105149,102722],{"align":25785},[2451,105151,105152,105166,105181,105200],{},[2410,105153,105154,105158,105163],{},[2456,105155,105156],{"align":25785},[73,105157,55746],{},[2456,105159,105160],{"align":25785},[73,105161,105162],{},"size=\"0.1 0.2 0.3\"",[2456,105164,105165],{"align":25785},"x\u002Fy\u002Fz 半边长，不是完整长度",[2410,105167,105168,105173,105178],{},[2456,105169,105170],{"align":25785},[73,105171,105172],{},"sphere",[2456,105174,105175],{"align":25785},[73,105176,105177],{},"size=\"0.1\"",[2456,105179,105180],{"align":25785},"球半径",[2410,105182,105183,105188,105193],{},[2456,105184,105185],{"align":25785},[73,105186,105187],{},"capsule",[2456,105189,105190],{"align":25785},[73,105191,105192],{},"size=\"0.03\"",[2456,105194,105195,105196,105199],{"align":25785},"胶囊半径，长度常用 ",[73,105197,105198],{},"fromto"," 指定",[2410,105201,105202,105207,105212],{},[2456,105203,105204],{"align":25785},[73,105205,105206],{},"plane",[2456,105208,105209],{"align":25785},[73,105210,105211],{},"size=\"3 3 0.1\"",[2456,105213,105214],{"align":25785},"可视平面大小，通常当地面",[19,105216,105217,105218,105220,105221,105223],{},"最容易踩坑的是 box：",[73,105219,104046],{}," 表示边长大约是 ",[73,105222,34077],{},"，因为 MuJoCo 用的是半边长。",[889,105225,105227],{"id":105226},"site-是什么","site 是什么",[19,105229,105230,105233],{},[73,105231,105232],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,105235,105236,105239,105242,105245],{},[29,105237,105238],{},"标记机械臂末端。",[29,105240,105241],{},"标记目标位置。",[29,105243,105244],{},"放传感器或相机参考点。",[29,105246,105247],{},"在 Python 中读取某个关键点的世界坐标。",[19,105249,105250,105251,103040,105254,105257],{},"在后面的 Reacher 任务中，",[73,105252,105253],{},"tip",[73,105255,105256],{},"target"," 就会用 site 表示。",[14,105259,103275],{"id":103274},[66,105261,105263],{"className":68,"code":105262,"language":70,"meta":71,"style":71},"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",[73,105264,105265,105271,105281,105285,105289,105297,105302,105306,105310,105314,105319,105323,105328,105333,105338,105343,105347,105351,105355,105359,105363,105367,105379,105391,105399,105403,105418,105433,105437,105450,105465,105478,105491,105495,105511,105515,105519,105530,105542,105554,105566,105570,105574,105586],{"__ignoreMap":71},[76,105266,105267,105269],{"class":78,"line":79},[76,105268,32438],{"class":82},[76,105270,103323],{"class":90},[76,105272,105273,105275,105277,105279],{"class":78,"line":94},[76,105274,32438],{"class":82},[76,105276,33423],{"class":90},[76,105278,33426],{"class":82},[76,105280,33429],{"class":90},[76,105282,105283],{"class":78,"line":133},[76,105284,149],{"emptyLinePlaceholder":148},[76,105286,105287],{"class":78,"line":145},[76,105288,149],{"emptyLinePlaceholder":148},[76,105290,105291,105293,105295],{"class":78,"line":152},[76,105292,103336],{"class":119},[76,105294,15617],{"class":82},[76,105296,103341],{"class":126},[76,105298,105299],{"class":78,"line":157},[76,105300,105301],{"class":126},"\u003Cmujoco model=\"xml_basic\">\n",[76,105303,105304],{"class":78,"line":246},[76,105305,103351],{"class":126},[76,105307,105308],{"class":78,"line":251},[76,105309,149],{"emptyLinePlaceholder":148},[76,105311,105312],{"class":78,"line":257},[76,105313,103360],{"class":126},[76,105315,105316],{"class":78,"line":641},[76,105317,105318],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[76,105320,105321],{"class":78,"line":646},[76,105322,149],{"emptyLinePlaceholder":148},[76,105324,105325],{"class":78,"line":659},[76,105326,105327],{"class":126},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[76,105329,105330],{"class":78,"line":1608},[76,105331,105332],{"class":126},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[76,105334,105335],{"class":78,"line":1632},[76,105336,105337],{"class":126},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,105339,105340],{"class":78,"line":1637},[76,105341,105342],{"class":126},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[76,105344,105345],{"class":78,"line":1642},[76,105346,103389],{"class":126},[76,105348,105349],{"class":78,"line":1652},[76,105350,103394],{"class":126},[76,105352,105353],{"class":78,"line":1660},[76,105354,103399],{"class":126},[76,105356,105357],{"class":78,"line":1683},[76,105358,97720],{"class":126},[76,105360,105361],{"class":78,"line":1698},[76,105362,149],{"emptyLinePlaceholder":148},[76,105364,105365],{"class":78,"line":1711},[76,105366,149],{"emptyLinePlaceholder":148},[76,105368,105369,105371,105373,105375,105377],{"class":78,"line":1717},[76,105370,83],{"class":82},[76,105372,4069],{"class":86},[76,105374,103420],{"class":90},[76,105376,489],{"class":119},[76,105378,590],{"class":90},[76,105380,105381,105383,105385,105387,105389],{"class":78,"line":1728},[76,105382,103429],{"class":90},[76,105384,370],{"class":82},[76,105386,103434],{"class":90},[76,105388,103336],{"class":119},[76,105390,130],{"class":90},[76,105392,105393,105395,105397],{"class":78,"line":1740},[76,105394,103443],{"class":90},[76,105396,370],{"class":82},[76,105398,103448],{"class":90},[76,105400,105401],{"class":78,"line":1746},[76,105402,149],{"emptyLinePlaceholder":148},[76,105404,105405,105408,105410,105413,105416],{"class":78,"line":1751},[76,105406,105407],{"class":90},"    box_body_id ",[76,105409,370],{"class":82},[76,105411,105412],{"class":90}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[76,105414,105415],{"class":126},"\"red_box\"",[76,105417,130],{"class":90},[76,105419,105420,105423,105425,105428,105431],{"class":78,"line":1756},[76,105421,105422],{"class":90},"    site_id ",[76,105424,370],{"class":82},[76,105426,105427],{"class":90}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[76,105429,105430],{"class":126},"\"box_center\"",[76,105432,130],{"class":90},[76,105434,105435],{"class":78,"line":1766},[76,105436,149],{"emptyLinePlaceholder":148},[76,105438,105439,105441,105444,105446,105448],{"class":78,"line":1773},[76,105440,578],{"class":82},[76,105442,105443],{"class":90}," box_body_id ",[76,105445,584],{"class":82},[76,105447,587],{"class":119},[76,105449,590],{"class":90},[76,105451,105452,105455,105458,105460,105463],{"class":78,"line":1793},[76,105453,105454],{"class":82},"        raise",[76,105456,105457],{"class":119}," RuntimeError",[76,105459,123],{"class":90},[76,105461,105462],{"class":126},"\"body red_box not found\"",[76,105464,130],{"class":90},[76,105466,105467,105469,105472,105474,105476],{"class":78,"line":1806},[76,105468,578],{"class":82},[76,105470,105471],{"class":90}," site_id ",[76,105473,584],{"class":82},[76,105475,587],{"class":119},[76,105477,590],{"class":90},[76,105479,105480,105482,105484,105486,105489],{"class":78,"line":1817},[76,105481,105454],{"class":82},[76,105483,105457],{"class":119},[76,105485,123],{"class":90},[76,105487,105488],{"class":126},"\"site box_center not found\"",[76,105490,130],{"class":90},[76,105492,105493],{"class":78,"line":1822},[76,105494,149],{"emptyLinePlaceholder":148},[76,105496,105497,105499,105501,105503,105505,105507,105509],{"class":78,"line":1835},[76,105498,1469],{"class":82},[76,105500,103523],{"class":90},[76,105502,1475],{"class":82},[76,105504,34483],{"class":119},[76,105506,123],{"class":90},[76,105508,2133],{"class":119},[76,105510,32830],{"class":90},[76,105512,105513],{"class":78,"line":1847},[76,105514,103538],{"class":90},[76,105516,105517],{"class":78,"line":1852},[76,105518,149],{"emptyLinePlaceholder":148},[76,105520,105521,105523,105525,105528],{"class":78,"line":1862},[76,105522,120],{"class":119},[76,105524,123],{"class":90},[76,105526,105527],{"class":126},"\"simulation time:\"",[76,105529,103500],{"class":90},[76,105531,105532,105534,105536,105539],{"class":78,"line":1874},[76,105533,120],{"class":119},[76,105535,123],{"class":90},[76,105537,105538],{"class":126},"\"box body position:\"",[76,105540,105541],{"class":90},", data.xpos[box_body_id].copy())\n",[76,105543,105544,105546,105548,105551],{"class":78,"line":1879},[76,105545,120],{"class":119},[76,105547,123],{"class":90},[76,105549,105550],{"class":126},"\"site position:\"",[76,105552,105553],{"class":90},", data.site_xpos[site_id].copy())\n",[76,105555,105556,105558,105560,105563],{"class":78,"line":1884},[76,105557,120],{"class":119},[76,105559,123],{"class":90},[76,105561,105562],{"class":126},"\"box qpos:\"",[76,105564,105565],{"class":90},", np.array(data.qpos))\n",[76,105567,105568],{"class":78,"line":1889},[76,105569,149],{"emptyLinePlaceholder":148},[76,105571,105572],{"class":78,"line":1900},[76,105573,149],{"emptyLinePlaceholder":148},[76,105575,105576,105578,105580,105582,105584],{"class":78,"line":1906},[76,105577,723],{"class":82},[76,105579,33264],{"class":119},[76,105581,103581],{"class":82},[76,105583,103584],{"class":126},[76,105585,590],{"class":90},[76,105587,105588],{"class":78,"line":1924},[76,105589,103591],{"class":90},[19,105591,105592],{},"保存为：",[66,105594,105596],{"className":25871,"code":105595,"language":25873,"meta":71,"style":71},"touch ch2_xml_basic.py\n",[73,105597,105598],{"__ignoreMap":71},[76,105599,105600,105602],{"class":78,"line":79},[76,105601,103305],{"class":86},[76,105603,105604],{"class":126}," ch2_xml_basic.py\n",[19,105606,104323],{},[66,105608,105610],{"className":25871,"code":105609,"language":25873,"meta":71,"style":71},"python ch2_xml_basic.py\n",[73,105611,105612],{"__ignoreMap":71},[76,105613,105614,105616],{"class":78,"line":79},[76,105615,70],{"class":86},[76,105617,105604],{"class":126},[889,105619,103594],{"id":103594},[19,105621,105622],{},"用名字查找 body：",[66,105624,105626],{"className":68,"code":105625,"language":70,"meta":71,"style":71},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[73,105627,105628],{"__ignoreMap":71},[76,105629,105630,105633,105635,105637,105639],{"class":78,"line":79},[76,105631,105632],{"class":90},"box_body_id ",[76,105634,370],{"class":82},[76,105636,105412],{"class":90},[76,105638,105415],{"class":126},[76,105640,130],{"class":90},[19,105642,105643],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105645,105646],{},"用名字查找 site：",[66,105648,105650],{"className":68,"code":105649,"language":70,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[73,105651,105652],{"__ignoreMap":71},[76,105653,105654,105657,105659,105661,105663],{"class":78,"line":79},[76,105655,105656],{"class":90},"site_id ",[76,105658,370],{"class":82},[76,105660,105427],{"class":90},[76,105662,105430],{"class":126},[76,105664,130],{"class":90},[19,105666,105667,105668,105671,105672,105675],{},"注意第二个参数是对象类型。查 body 就用 ",[73,105669,105670],{},"mjOBJ_BODY","，查 site 就用 ",[73,105673,105674],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105677,105678],{},"读取世界坐标：",[66,105680,105682],{"className":68,"code":105681,"language":70,"meta":71,"style":71},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[73,105683,105684,105689],{"__ignoreMap":71},[76,105685,105686],{"class":78,"line":79},[76,105687,105688],{"class":90},"data.xpos[box_body_id]\n",[76,105690,105691],{"class":78,"line":94},[76,105692,105693],{"class":90},"data.site_xpos[site_id]\n",[19,105695,105696,105699,105700,105703],{},[73,105697,105698],{},"xpos"," 是 body 的世界坐标，",[73,105701,105702],{},"site_xpos"," 是 site 的世界坐标。",[889,105705,103730],{"id":103730},[66,105707,105709],{"className":68,"code":105708,"language":70,"meta":71,"style":71},"import mujoco\nimport numpy as np\n",[73,105710,105711,105717],{"__ignoreMap":71},[76,105712,105713,105715],{"class":78,"line":79},[76,105714,32438],{"class":82},[76,105716,103323],{"class":90},[76,105718,105719,105721,105723,105725],{"class":78,"line":94},[76,105720,32438],{"class":82},[76,105722,33423],{"class":90},[76,105724,33426],{"class":82},[76,105726,33429],{"class":90},[19,105728,105729,105730,105733,105734,105737,105738,2478,105741,490],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[73,105731,105732],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[73,105735,105736],{},"as np"," 是习惯写法，后面就可以写 ",[73,105739,105740],{},"np.array(...)",[73,105742,105743],{},"np.round(...)",[66,105745,105746],{"className":68,"code":103617,"language":70,"meta":71,"style":71},[73,105747,105748,105756,105760],{"__ignoreMap":71},[76,105749,105750,105752,105754],{"class":78,"line":79},[76,105751,103336],{"class":119},[76,105753,15617],{"class":82},[76,105755,103341],{"class":126},[76,105757,105758],{"class":78,"line":94},[76,105759,103632],{"class":126},[76,105761,105762],{"class":78,"line":133},[76,105763,97720],{"class":126},[19,105765,105766,105767,490],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[73,105768,105769],{},"mujoco.MjModel.from_xml_string(XML)",[66,105771,105773],{"className":55099,"code":105772,"language":55101,"meta":71,"style":71},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,105774,105775],{"__ignoreMap":71},[76,105776,105777,105779,105781,105783,105785,105787,105789,105791,105794,105796,105798,105801,105803,105805,105808],{"class":78,"line":79},[76,105778,584],{"class":90},[76,105780,105232],{"class":53332},[76,105782,16972],{"class":86},[76,105784,370],{"class":90},[76,105786,105430],{"class":126},[76,105788,103128],{"class":86},[76,105790,370],{"class":90},[76,105792,105793],{"class":126},"\"0 0 0\"",[76,105795,103158],{"class":86},[76,105797,370],{"class":90},[76,105799,105800],{"class":126},"\"0.03\"",[76,105802,80792],{"class":86},[76,105804,370],{"class":90},[76,105806,105807],{"class":126},"\"0 1 0 1\"",[76,105809,103166],{"class":90},[19,105811,105812,105814,105815,105818,105819,105821,105822,105825],{},[73,105813,105232],{}," 是标记点。",[73,105816,105817],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[73,105820,105192],{}," 表示显示出来的小球大小。",[73,105823,105824],{},"rgba=\"0 1 0 1\""," 表示绿色。",[66,105827,105828],{"className":68,"code":105625,"language":70,"meta":71,"style":71},[73,105829,105830],{"__ignoreMap":71},[76,105831,105832,105834,105836,105838,105840],{"class":78,"line":79},[76,105833,105632],{"class":90},[76,105835,370],{"class":82},[76,105837,105412],{"class":90},[76,105839,105415],{"class":126},[76,105841,130],{"class":90},[19,105843,105844,105845,105847],{},"这行的作用是：根据名字 ",[73,105846,105415],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105849,105850],{},"拆开看：",[26,105852,105853,105859,105864,105870],{},[29,105854,105855,105858],{},[73,105856,105857],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,105860,105861,105863],{},[73,105862,104107],{}," 是被查询的模型。",[29,105865,105866,105869],{},[73,105867,105868],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,105871,105872,105874],{},[73,105873,105415],{}," 是 XML 里写的名字。",[66,105876,105877],{"className":68,"code":105649,"language":70,"meta":71,"style":71},[73,105878,105879],{"__ignoreMap":71},[76,105880,105881,105883,105885,105887,105889],{"class":78,"line":79},[76,105882,105656],{"class":90},[76,105884,370],{"class":82},[76,105886,105427],{"class":90},[76,105888,105430],{"class":126},[76,105890,130],{"class":90},[19,105892,105893,105894,490],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[73,105895,105430],{},[66,105897,105899],{"className":68,"code":105898,"language":70,"meta":71,"style":71},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[73,105900,105901,105913],{"__ignoreMap":71},[76,105902,105903,105905,105907,105909,105911],{"class":78,"line":79},[76,105904,723],{"class":82},[76,105906,105443],{"class":90},[76,105908,584],{"class":82},[76,105910,587],{"class":119},[76,105912,590],{"class":90},[76,105914,105915,105918,105920,105922,105924],{"class":78,"line":94},[76,105916,105917],{"class":82},"    raise",[76,105919,105457],{"class":119},[76,105921,123],{"class":90},[76,105923,105462],{"class":126},[76,105925,130],{"class":90},[19,105927,105928,105930,105931,105934,105935,105938,105939,105942],{},[73,105929,723],{}," 是条件判断。",[73,105932,105933],{},"mj_name2id"," 找不到对象时会返回 ",[73,105936,105937],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[73,105940,105941],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[66,105944,105946],{"className":68,"code":105945,"language":70,"meta":71,"style":71},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[73,105947,105948,105964],{"__ignoreMap":71},[76,105949,105950,105952,105954,105956,105958,105960,105962],{"class":78,"line":79},[76,105951,5112],{"class":82},[76,105953,103523],{"class":90},[76,105955,1475],{"class":82},[76,105957,34483],{"class":119},[76,105959,123],{"class":90},[76,105961,2133],{"class":119},[76,105963,32830],{"class":90},[76,105965,105966],{"class":78,"line":94},[76,105967,103721],{"class":90},[19,105969,105970],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[66,105972,105974],{"className":68,"code":105973,"language":70,"meta":71,"style":71},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[73,105975,105976],{"__ignoreMap":71},[76,105977,105978,105980,105982,105984],{"class":78,"line":79},[76,105979,478],{"class":119},[76,105981,123],{"class":90},[76,105983,105538],{"class":126},[76,105985,105541],{"class":90},[19,105987,105988,105990,105991,105994],{},[73,105989,103101],{}," 保存所有 body 的世界坐标。",[73,105992,105993],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[66,105996,105998],{"className":68,"code":105997,"language":70,"meta":71,"style":71},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[73,105999,106000],{"__ignoreMap":71},[76,106001,106002,106004,106006,106008],{"class":78,"line":79},[76,106003,478],{"class":119},[76,106005,123],{"class":90},[76,106007,105550],{"class":126},[76,106009,105553],{"class":90},[19,106011,106012,106015,106016,106018],{},[73,106013,106014],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[73,106017,104999],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[66,106020,106022],{"className":68,"code":106021,"language":70,"meta":71,"style":71},"print(\"box qpos:\", np.array(data.qpos))\n",[73,106023,106024],{"__ignoreMap":71},[76,106025,106026,106028,106030,106032],{"class":78,"line":79},[76,106027,478],{"class":119},[76,106029,123],{"class":90},[76,106031,105562],{"class":126},[76,106033,105565],{"class":90},[19,106035,106036,106037,106040],{},"这里打印广义位置数组。",[73,106038,106039],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106042,104338],{"id":104337},[19,106044,106045,106046,106049,106050,490],{},"程序会输出 ",[73,106047,106048],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[73,106051,106052],{},"qpos",[19,106054,106055,106057,106058,106061,106062,106065],{},[73,106056,105993],{}," 是 body 的世界坐标位置。",[73,106059,106060],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[73,106063,106064],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106067,84246,106068,84554,106070,106072],{},[73,106069,104999],{},[73,106071,105817],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106074,106075],{},"如果你把 site 改成：",[66,106077,106079],{"className":55099,"code":106078,"language":55101,"meta":71,"style":71},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,106080,106081],{"__ignoreMap":71},[76,106082,106083,106085,106087,106089,106091,106094,106096,106098,106101,106103,106105,106107,106109,106111,106113],{"class":78,"line":79},[76,106084,584],{"class":90},[76,106086,105232],{"class":53332},[76,106088,16972],{"class":86},[76,106090,370],{"class":90},[76,106092,106093],{"class":126},"\"box_top\"",[76,106095,103128],{"class":86},[76,106097,370],{"class":90},[76,106099,106100],{"class":126},"\"0 0 0.15\"",[76,106102,103158],{"class":86},[76,106104,370],{"class":90},[76,106106,105800],{"class":126},[76,106108,80792],{"class":86},[76,106110,370],{"class":90},[76,106112,105807],{"class":126},[76,106114,103166],{"class":90},[19,106116,106117,106118,106121],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[73,106119,106120],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106123,104370],{"id":104369},[26,106125,106126,106135,106138,106145,106151,106162],{},[29,106127,104433,106128,106130,106131,104436,106133,490],{},[73,106129,105003],{}," 的初始高度从 ",[73,106132,669],{},[73,106134,2345],{},[29,106136,106137],{},"重新运行程序。",[29,106139,106140,106141,106144],{},"观察 ",[73,106142,106143],{},"box qpos"," 和最终位置是否变化。",[29,106146,106147,106148,106150],{},"故意把 ",[73,106149,105232],{}," 名称改错，确认程序能报错。",[29,106152,104433,106153,106155,106156,104436,106158,106161],{},[73,106154,103142],{}," 的颜色 ",[73,106157,104054],{},[73,106159,106160],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,106163,104433,106164,84554,106166,104436,106169,106172,106173,106175],{},[73,106165,104999],{},[73,106167,106168],{},"pos",[73,106170,106171],{},"0 0 0.2","，观察 ",[73,106174,106120],{}," 如何变化。",[14,106177,104475],{"id":104474},[889,106179,106181],{"id":106180},"xml-error-schema-violation",[73,106182,106183],{},"XML Error: Schema violation",[19,106185,106186],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[889,106188,106190,83314,106192],{"id":106189},"mj_name2id-返回-1",[73,106191,105933],{},[73,106193,105937],{},[19,106195,106196,106197,106200],{},"说明名字没有找到。检查 XML 中 ",[73,106198,106199],{},"name=\"...\"","，并确认对象类型正确。",[889,106202,106203],{"id":106203},"物体不下落",[19,106205,104545],{},[26,106207,106208,106213,106218],{},[29,106209,106210,106211],{},"body 是否有 ",[73,106212,103642],{},[29,106214,106215,106216],{},"gravity 是否为 ",[73,106217,104611],{},[29,106219,106220,106221,106223],{},"body 是否被固定在 ",[73,106222,103863],{}," 中",[889,106225,106226],{"id":106226},"坐标看起来不符合预期",[19,106228,106229],{},"先区分两种坐标：",[2404,106231,106232,106241],{},[2407,106233,106234],{},[2410,106235,106236,106239],{},[2413,106237,106238],{"align":25785},"坐标",[2413,106240,102722],{"align":25785},[2451,106242,106243,106253],{},[2410,106244,106245,106250],{},[2456,106246,106247,106248],{"align":25785},"XML 里的 ",[73,106249,106168],{},[2456,106251,106252],{"align":25785},"相对父 body 的局部坐标",[2410,106254,106255,106261],{},[2456,106256,106257,27028,106259],{"align":25785},[73,106258,103101],{},[73,106260,106014],{},[2456,106262,106263],{"align":25785},"仿真更新后的世界坐标",[19,106265,106266,106267,106269,106270,84563,106273,106275],{},"如果你修改了 ",[73,106268,103092],{},"，但还没调用 ",[73,106271,106272],{},"mj_forward",[73,106274,103237],{},"，世界坐标可能还没有更新。",[14,106277,104629],{"id":104628},[19,106279,106280],{},"MJCF 建模先掌握四件事：",[26,106282,106283,106288,106293,106298],{},[29,106284,106285,106287],{},[73,106286,53832],{}," 表示刚体层级。",[29,106289,106290,106292],{},[73,106291,103142],{}," 表示形状、碰撞和质量。",[29,106294,106295,106297],{},[73,106296,104978],{}," 决定 body 能不能动、怎么动。",[29,106299,106300,106302],{},[73,106301,105232],{}," 用来标记关键点，方便 Python 读取位置。",[19,106304,106305],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2178,106307,106308],{},"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":71,"searchDepth":94,"depth":94,"links":106310},[106311,106312,106313,106319,106323,106324,106325,106332],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":106314},[106315,106316,106317,106318],{"id":104982,"depth":133,"text":104982},{"id":105096,"depth":133,"text":105096},{"id":105122,"depth":133,"text":105123},{"id":105226,"depth":133,"text":105227},{"id":103274,"depth":94,"text":103275,"children":106320},[106321,106322],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":106326},[106327,106328,106330,106331],{"id":106180,"depth":133,"text":106183},{"id":106189,"depth":133,"text":106329},"mj_name2id 返回 -1",{"id":106203,"depth":133,"text":106203},{"id":106226,"depth":133,"text":106226},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104676,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106339,"title":106340,"body":106341,"description":71,"extension":2202,"meta":107836,"navigation":148,"path":107837,"seo":107838,"stem":107839,"__hash__":107840},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106342,"toc":107808},[106343,106346,106348,106351,106354,106392,106395,106401,106404,106406,106408,106435,106437,106451,106453,106494,106496,106520,106522,106525,106534,106543,106546,106555,106563,106572,106575,106585,106588,106640,106647,106653,106661,106709,106712,106731,106734,106742,106746,106755,106788,106790,107138,107140,107152,107154,107165,107167,107170,107191,107197,107200,107225,107235,107238,107246,107249,107252,107273,107284,107286,107306,107309,107330,107339,107358,107364,107389,107392,107406,107413,107437,107440,107448,107457,107473,107485,107493,107502,107504,107507,107531,107536,107539,107561,107563,107602,107604,107611,107613,107621,107624,107627,107639,107680,107687,107698,107705,107708,107757,107760,107763,107769,107771,107776,107802,107805],[10,106344,106340],{"id":106345},"_3python-控制接口读取状态与推进仿真",[14,106347,102669],{"id":102668},[19,106349,106350],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106352,106353],{},"你将学习:",[26,106355,106356,106361,106366,106370,106375,106386],{},[29,106357,106358],{},[73,106359,106360],{},"MjModel.from_xml_string",[29,106362,106363],{},[73,106364,106365],{},"MjData(model)",[29,106367,106368],{},[73,106369,103237],{},[29,106371,106372],{},[73,106373,106374],{},"mj_resetData",[29,106376,106377,106378,2478,106380,2478,106383],{},"读取 ",[73,106379,106052],{},[73,106381,106382],{},"qvel",[73,106384,106385],{},"ctrl",[29,106387,106388,106389],{},"使用 ",[73,106390,106391],{},"model.opt.timestep",[19,106393,106394],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[66,106396,106399],{"className":106397,"code":106398,"language":7268,"meta":71},[7266],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[73,106400,106398],{"__ignoreMap":71},[19,106402,106403],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106405,102792],{"id":102791},[19,106407,102795],{},[66,106409,106411],{"className":25871,"code":106410,"language":25873,"meta":71,"style":71},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[73,106412,106413],{"__ignoreMap":71},[76,106414,106415,106417,106419,106421,106423,106426,106428,106430,106432],{"class":78,"line":79},[76,106416,26626],{"class":86},[76,106418,28364],{"class":126},[76,106420,25883],{"class":126},[76,106422,28449],{"class":119},[76,106424,106425],{"class":126}," python3",[76,106427,102820],{"class":126},[76,106429,104523],{"class":126},[76,106431,102836],{"class":126},[76,106433,106434],{"class":126}," glfw\n",[19,106436,104841],{},[66,106438,106439],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},[73,106440,106441],{"__ignoreMap":71},[76,106442,106443,106445,106447,106449],{"class":78,"line":79},[76,106444,25880],{"class":86},[76,106446,25883],{"class":126},[76,106448,102952],{"class":126},[76,106450,102955],{"class":126},[19,106452,104858],{},[66,106454,106456],{"className":25871,"code":106455,"language":25873,"meta":71,"style":71},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[73,106457,106458,106475,106484],{"__ignoreMap":71},[76,106459,106460,106462,106464,106466,106469,106471,106473],{"class":78,"line":79},[76,106461,32378],{"class":86},[76,106463,31224],{"class":126},[76,106465,27165],{"class":119},[76,106467,106468],{"class":126}," mujoco-python-api",[76,106470,102997],{"class":126},[76,106472,103000],{"class":119},[76,106474,103003],{"class":119},[76,106476,106477,106479,106481],{"class":78,"line":94},[76,106478,32378],{"class":86},[76,106480,103010],{"class":126},[76,106482,106483],{"class":126}," mujoco-python-api\n",[76,106485,106486,106488,106490,106492],{"class":78,"line":133},[76,106487,25880],{"class":86},[76,106489,25883],{"class":126},[76,106491,102952],{"class":126},[76,106493,102955],{"class":126},[19,106495,103026],{},[26,106497,106498,106505,106514],{},[29,106499,106500,103040,106502,106504],{},[73,106501,102697],{},[73,106503,102702],{}," 是官方 Python bindings 的类名。",[29,106506,106507,106508,106511,106512,490],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[73,106509,106510],{},"mjModel"," 在 Python 中是 ",[73,106513,102731],{},[29,106515,106516,106517,490],{},"不要使用 ",[73,106518,106519],{},"sim = mujoco_py.MjSim(...)",[14,106521,103067],{"id":103066},[19,106523,106524],{},"仿真推进核心代码:",[66,106526,106528],{"className":68,"code":106527,"language":70,"meta":71,"style":71},"mujoco.mj_step(model, data)\n",[73,106529,106530],{"__ignoreMap":71},[76,106531,106532],{"class":78,"line":79},[76,106533,106527],{"class":90},[19,106535,106536,106537,2478,106539,2478,106541,490],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[73,106538,103092],{},[73,106540,103095],{},[73,106542,103089],{},[19,106544,106545],{},"重置仿真:",[66,106547,106549],{"className":68,"code":106548,"language":70,"meta":71,"style":71},"mujoco.mj_resetData(model, data)\n",[73,106550,106551],{"__ignoreMap":71},[76,106552,106553],{"class":78,"line":79},[76,106554,106548],{"class":90},[19,106556,106557,106558,84563,106560,106562],{},"如果手动修改了 ",[73,106559,103092],{},[73,106561,103095],{},"，通常应调用:",[66,106564,106566],{"className":68,"code":106565,"language":70,"meta":71,"style":71},"mujoco.mj_forward(model, data)\n",[73,106567,106568],{"__ignoreMap":71},[76,106569,106570],{"class":78,"line":79},[76,106571,106565],{"class":90},[19,106573,106574],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[889,106576,106578,2478,106580,2478,106582,106584],{"id":106577},"qposqvelctrl-是什么",[73,106579,106052],{},[73,106581,106382],{},[73,106583,106385],{}," 是什么",[19,106586,106587],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2404,106589,106590,106602],{},[2407,106591,106592],{},[2410,106593,106594,106597,106599],{},[2413,106595,106596],{"align":25785},"字段",[2413,106598,102722],{"align":25785},[2413,106600,106601],{"align":25785},"谁来修改",[2451,106603,106604,106616,106628],{},[2410,106605,106606,106610,106613],{},[2456,106607,106608],{"align":25785},[73,106609,103092],{},[2456,106611,106612],{"align":25785},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2456,106614,106615],{"align":25785},"MuJoCo 更新，也可以手动设置初始状态",[2410,106617,106618,106622,106625],{},[2456,106619,106620],{"align":25785},[73,106621,103095],{},[2456,106623,106624],{"align":25785},"广义速度，例如小车速度、关节角速度",[2456,106626,106627],{"align":25785},"MuJoCo 更新，也可以手动清零",[2410,106629,106630,106634,106637],{},[2456,106631,106632],{"align":25785},[73,106633,103098],{},[2456,106635,106636],{"align":25785},"actuator 的控制输入",[2456,106638,106639],{"align":25785},"主要由你的控制代码写入",[19,106641,163,106642,103040,106644,106646],{},[73,106643,106052],{},[73,106645,106382],{}," 不一定同维。自由刚体就是典型例子：",[66,106648,106651],{"className":106649,"code":106650,"language":7268,"meta":71},[7266],"freejoint: qpos 7 维，qvel 6 维\n",[73,106652,106650],{"__ignoreMap":71},[889,106654,106656,103040,106658,106660],{"id":106655},"mj_step-和-mj_forward-的区别",[73,106657,103237],{},[73,106659,106272],{}," 的区别",[2404,106662,106663,106676],{},[2407,106664,106665],{},[2410,106666,106667,106670,106673],{},[2413,106668,106669],{"align":25785},"函数",[2413,106671,106672],{"align":25785},"是否推进时间",[2413,106674,106675],{"align":25785},"什么时候用",[2451,106677,106678,106691],{},[2410,106679,106680,106685,106688],{},[2456,106681,106682],{"align":25785},[73,106683,106684],{},"mj_step(model, data)",[2456,106686,106687],{"align":25785},"是",[2456,106689,106690],{"align":25785},"正常仿真循环，每调用一次前进一步",[2410,106692,106693,106698,106701],{},[2456,106694,106695],{"align":25785},[73,106696,106697],{},"mj_forward(model, data)",[2456,106699,106700],{"align":25785},"否",[2456,106702,106703,106704,2478,106706,106708],{"align":25785},"手动改了 ",[73,106705,106052],{},[73,106707,106382],{}," 后，刷新派生量",[19,106710,106711],{},"例如你写：",[66,106713,106715],{"className":68,"code":106714,"language":70,"meta":71,"style":71},"data.qpos[2] = 2.0\n",[73,106716,106717],{"__ignoreMap":71},[76,106718,106719,106722,106724,106726,106728],{"class":78,"line":79},[76,106720,106721],{"class":90},"data.qpos[",[76,106723,2345],{"class":119},[76,106725,6525],{"class":90},[76,106727,370],{"class":82},[76,106729,106730],{"class":119}," 2.0\n",[19,106732,106733],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[66,106735,106736],{"className":68,"code":106565,"language":70,"meta":71,"style":71},[73,106737,106738],{"__ignoreMap":71},[76,106739,106740],{"class":78,"line":79},[76,106741,106565],{"class":90},[889,106743,106745],{"id":106744},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106747,106748,106751,106752,106754],{},[73,106749,106750],{},"mujoco.mj_resetData(model, data)"," 会把 ",[73,106753,35439],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[66,106756,106758],{"className":68,"code":106757,"language":70,"meta":71,"style":71},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[73,106759,106760,106764,106774,106784],{"__ignoreMap":71},[76,106761,106762],{"class":78,"line":79},[76,106763,106548],{"class":90},[76,106765,106766,106769,106771],{"class":78,"line":94},[76,106767,106768],{"class":90},"data.qpos[:] ",[76,106770,370],{"class":82},[76,106772,106773],{"class":90}," random_qpos\n",[76,106775,106776,106779,106781],{"class":78,"line":133},[76,106777,106778],{"class":90},"data.qvel[:] ",[76,106780,370],{"class":82},[76,106782,106783],{"class":119}," 0.0\n",[76,106785,106786],{"class":78,"line":145},[76,106787,106565],{"class":90},[14,106789,103275],{"id":103274},[66,106791,106793],{"className":68,"code":106792,"language":70,"meta":71,"style":71},"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",[73,106794,106795,106801,106811,106815,106819,106827,106832,106836,106840,106844,106849,106853,106858,106863,106868,106872,106876,106880,106884,106888,106892,106911,106918,106930,106941,106957,106973,106977,106981,106993,107005,107013,107017,107028,107032,107048,107052,107056,107065,107069,107074,107083,107087,107100,107105,107114,107118,107122,107134],{"__ignoreMap":71},[76,106796,106797,106799],{"class":78,"line":79},[76,106798,32438],{"class":82},[76,106800,103323],{"class":90},[76,106802,106803,106805,106807,106809],{"class":78,"line":94},[76,106804,32438],{"class":82},[76,106806,33423],{"class":90},[76,106808,33426],{"class":82},[76,106810,33429],{"class":90},[76,106812,106813],{"class":78,"line":133},[76,106814,149],{"emptyLinePlaceholder":148},[76,106816,106817],{"class":78,"line":145},[76,106818,149],{"emptyLinePlaceholder":148},[76,106820,106821,106823,106825],{"class":78,"line":152},[76,106822,103336],{"class":119},[76,106824,15617],{"class":82},[76,106826,103341],{"class":126},[76,106828,106829],{"class":78,"line":157},[76,106830,106831],{"class":126},"\u003Cmujoco model=\"state_api\">\n",[76,106833,106834],{"class":78,"line":246},[76,106835,103351],{"class":126},[76,106837,106838],{"class":78,"line":251},[76,106839,149],{"emptyLinePlaceholder":148},[76,106841,106842],{"class":78,"line":257},[76,106843,103360],{"class":126},[76,106845,106846],{"class":78,"line":641},[76,106847,106848],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[76,106850,106851],{"class":78,"line":646},[76,106852,149],{"emptyLinePlaceholder":148},[76,106854,106855],{"class":78,"line":659},[76,106856,106857],{"class":126},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[76,106859,106860],{"class":78,"line":1608},[76,106861,106862],{"class":126},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[76,106864,106865],{"class":78,"line":1632},[76,106866,106867],{"class":126},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[76,106869,106870],{"class":78,"line":1637},[76,106871,103389],{"class":126},[76,106873,106874],{"class":78,"line":1642},[76,106875,103394],{"class":126},[76,106877,106878],{"class":78,"line":1652},[76,106879,103399],{"class":126},[76,106881,106882],{"class":78,"line":1660},[76,106883,97720],{"class":126},[76,106885,106886],{"class":78,"line":1683},[76,106887,149],{"emptyLinePlaceholder":148},[76,106889,106890],{"class":78,"line":1698},[76,106891,149],{"emptyLinePlaceholder":148},[76,106893,106894,106896,106899,106902,106904,106907,106909],{"class":78,"line":1711},[76,106895,83],{"class":82},[76,106897,106898],{"class":86}," print_state",[76,106900,106901],{"class":90},"(prefix: ",[76,106903,1402],{"class":119},[76,106905,106906],{"class":90},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,106908,489],{"class":119},[76,106910,590],{"class":90},[76,106912,106913,106915],{"class":78,"line":1717},[76,106914,120],{"class":119},[76,106916,106917],{"class":90},"(prefix)\n",[76,106919,106920,106922,106924,106927],{"class":78,"line":1728},[76,106921,120],{"class":119},[76,106923,123],{"class":90},[76,106925,106926],{"class":126},"\"  timestep:\"",[76,106928,106929],{"class":90},", model.opt.timestep)\n",[76,106931,106932,106934,106936,106939],{"class":78,"line":1740},[76,106933,120],{"class":119},[76,106935,123],{"class":90},[76,106937,106938],{"class":126},"\"  time:\"",[76,106940,103500],{"class":90},[76,106942,106943,106945,106947,106950,106953,106955],{"class":78,"line":1746},[76,106944,120],{"class":119},[76,106946,123],{"class":90},[76,106948,106949],{"class":126},"\"  qpos:\"",[76,106951,106952],{"class":90},", np.round(data.qpos.copy(), ",[76,106954,2557],{"class":119},[76,106956,656],{"class":90},[76,106958,106959,106961,106963,106966,106969,106971],{"class":78,"line":1751},[76,106960,120],{"class":119},[76,106962,123],{"class":90},[76,106964,106965],{"class":126},"\"  qvel:\"",[76,106967,106968],{"class":90},", np.round(data.qvel.copy(), ",[76,106970,2557],{"class":119},[76,106972,656],{"class":90},[76,106974,106975],{"class":78,"line":1756},[76,106976,149],{"emptyLinePlaceholder":148},[76,106978,106979],{"class":78,"line":1766},[76,106980,149],{"emptyLinePlaceholder":148},[76,106982,106983,106985,106987,106989,106991],{"class":78,"line":1773},[76,106984,83],{"class":82},[76,106986,4069],{"class":86},[76,106988,103420],{"class":90},[76,106990,489],{"class":119},[76,106992,590],{"class":90},[76,106994,106995,106997,106999,107001,107003],{"class":78,"line":1793},[76,106996,103429],{"class":90},[76,106998,370],{"class":82},[76,107000,103434],{"class":90},[76,107002,103336],{"class":119},[76,107004,130],{"class":90},[76,107006,107007,107009,107011],{"class":78,"line":1806},[76,107008,103443],{"class":90},[76,107010,370],{"class":82},[76,107012,103448],{"class":90},[76,107014,107015],{"class":78,"line":1817},[76,107016,149],{"emptyLinePlaceholder":148},[76,107018,107019,107022,107025],{"class":78,"line":1822},[76,107020,107021],{"class":90},"    print_state(",[76,107023,107024],{"class":126},"\"initial\"",[76,107026,107027],{"class":90},", model, data)\n",[76,107029,107030],{"class":78,"line":1835},[76,107031,149],{"emptyLinePlaceholder":148},[76,107033,107034,107036,107038,107040,107042,107044,107046],{"class":78,"line":1847},[76,107035,1469],{"class":82},[76,107037,103523],{"class":90},[76,107039,1475],{"class":82},[76,107041,34483],{"class":119},[76,107043,123],{"class":90},[76,107045,2915],{"class":119},[76,107047,32830],{"class":90},[76,107049,107050],{"class":78,"line":1852},[76,107051,103538],{"class":90},[76,107053,107054],{"class":78,"line":1862},[76,107055,149],{"emptyLinePlaceholder":148},[76,107057,107058,107060,107063],{"class":78,"line":1874},[76,107059,107021],{"class":90},[76,107061,107062],{"class":126},"\"after 50 steps\"",[76,107064,107027],{"class":90},[76,107066,107067],{"class":78,"line":1879},[76,107068,149],{"emptyLinePlaceholder":148},[76,107070,107071],{"class":78,"line":1884},[76,107072,107073],{"class":90},"    mujoco.mj_resetData(model, data)\n",[76,107075,107076,107078,107081],{"class":78,"line":1889},[76,107077,107021],{"class":90},[76,107079,107080],{"class":126},"\"after reset\"",[76,107082,107027],{"class":90},[76,107084,107085],{"class":78,"line":1900},[76,107086,149],{"emptyLinePlaceholder":148},[76,107088,107089,107092,107094,107096,107098],{"class":78,"line":1906},[76,107090,107091],{"class":90},"    data.qpos[",[76,107093,2345],{"class":119},[76,107095,6525],{"class":90},[76,107097,370],{"class":82},[76,107099,106730],{"class":119},[76,107101,107102],{"class":78,"line":1924},[76,107103,107104],{"class":90},"    mujoco.mj_forward(model, data)\n",[76,107106,107107,107109,107112],{"class":78,"line":1929},[76,107108,107021],{"class":90},[76,107110,107111],{"class":126},"\"after manual qpos edit\"",[76,107113,107027],{"class":90},[76,107115,107116],{"class":78,"line":1944},[76,107117,149],{"emptyLinePlaceholder":148},[76,107119,107120],{"class":78,"line":1950},[76,107121,149],{"emptyLinePlaceholder":148},[76,107123,107124,107126,107128,107130,107132],{"class":78,"line":1965},[76,107125,723],{"class":82},[76,107127,33264],{"class":119},[76,107129,103581],{"class":82},[76,107131,103584],{"class":126},[76,107133,590],{"class":90},[76,107135,107136],{"class":78,"line":1971},[76,107137,103591],{"class":90},[19,107139,105592],{},[66,107141,107143],{"className":25871,"code":107142,"language":25873,"meta":71,"style":71},"touch ch3_python_state.py\n",[73,107144,107145],{"__ignoreMap":71},[76,107146,107147,107149],{"class":78,"line":79},[76,107148,103305],{"class":86},[76,107150,107151],{"class":126}," ch3_python_state.py\n",[19,107153,104323],{},[66,107155,107157],{"className":25871,"code":107156,"language":25873,"meta":71,"style":71},"python ch3_python_state.py\n",[73,107158,107159],{"__ignoreMap":71},[76,107160,107161,107163],{"class":78,"line":79},[76,107162,70],{"class":86},[76,107164,107151],{"class":126},[889,107166,103594],{"id":103594},[19,107168,107169],{},"打印状态的函数：",[66,107171,107173],{"className":68,"code":107172,"language":70,"meta":71,"style":71},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[73,107174,107175],{"__ignoreMap":71},[76,107176,107177,107179,107181,107183,107185,107187,107189],{"class":78,"line":79},[76,107178,83],{"class":82},[76,107180,106898],{"class":86},[76,107182,106901],{"class":90},[76,107184,1402],{"class":119},[76,107186,106906],{"class":90},[76,107188,489],{"class":119},[76,107190,590],{"class":90},[19,107192,107193,107194,107196],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[73,107195,35439],{}," 里发生了什么。",[19,107198,107199],{},"推进 50 步：",[66,107201,107203],{"className":68,"code":107202,"language":70,"meta":71,"style":71},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[73,107204,107205,107221],{"__ignoreMap":71},[76,107206,107207,107209,107211,107213,107215,107217,107219],{"class":78,"line":79},[76,107208,5112],{"class":82},[76,107210,103523],{"class":90},[76,107212,1475],{"class":82},[76,107214,34483],{"class":119},[76,107216,123],{"class":90},[76,107218,2915],{"class":119},[76,107220,32830],{"class":90},[76,107222,107223],{"class":78,"line":94},[76,107224,103721],{"class":90},[19,107226,107227,107228,107231,107232,107234],{},"由于 ",[73,107229,107230],{},"timestep=0.01","，所以 50 步后时间约为 ",[73,107233,37367],{}," 秒。",[19,107236,107237],{},"重置：",[66,107239,107240],{"className":68,"code":106548,"language":70,"meta":71,"style":71},[73,107241,107242],{"__ignoreMap":71},[76,107243,107244],{"class":78,"line":79},[76,107245,106548],{"class":90},[19,107247,107248],{},"这会把时间、位置、速度恢复到初始状态。",[19,107250,107251],{},"手动改高度：",[66,107253,107255],{"className":68,"code":107254,"language":70,"meta":71,"style":71},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[73,107256,107257,107269],{"__ignoreMap":71},[76,107258,107259,107261,107263,107265,107267],{"class":78,"line":79},[76,107260,106721],{"class":90},[76,107262,2345],{"class":119},[76,107264,6525],{"class":90},[76,107266,370],{"class":82},[76,107268,106730],{"class":119},[76,107270,107271],{"class":78,"line":94},[76,107272,106565],{"class":90},[19,107274,107275,107276,107279,107280,107283],{},"这个例子里 ",[73,107277,107278],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[73,107281,107282],{},"2.0"," 表示把小球放到更高的位置。",[889,107285,103730],{"id":103730},[66,107287,107288],{"className":68,"code":107172,"language":70,"meta":71,"style":71},[73,107289,107290],{"__ignoreMap":71},[76,107291,107292,107294,107296,107298,107300,107302,107304],{"class":78,"line":79},[76,107293,83],{"class":82},[76,107295,106898],{"class":86},[76,107297,106901],{"class":90},[76,107299,1402],{"class":119},[76,107301,106906],{"class":90},[76,107303,489],{"class":119},[76,107305,590],{"class":90},[19,107307,107308],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,107310,107311,107320,107325],{},[29,107312,107313,107316,107317,107319],{},[73,107314,107315],{},"prefix","：一段文字，比如 ",[73,107318,107024],{},"，用来说明现在打印的是哪个阶段。",[29,107321,107322,107324],{},[73,107323,104107],{},"：MuJoCo 模型。",[29,107326,107327,107329],{},[73,107328,35439],{},"：MuJoCo 当前状态。",[19,107331,107332,2478,107335,107338],{},[73,107333,107334],{},"prefix: str",[73,107336,107337],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[66,107340,107342],{"className":68,"code":107341,"language":70,"meta":71,"style":71},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[73,107343,107344],{"__ignoreMap":71},[76,107345,107346,107348,107350,107352,107354,107356],{"class":78,"line":79},[76,107347,478],{"class":119},[76,107349,123],{"class":90},[76,107351,106949],{"class":126},[76,107353,106952],{"class":90},[76,107355,2557],{"class":119},[76,107357,656],{"class":90},[19,107359,107360,107363],{},[73,107361,107362],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[66,107365,107367],{"className":68,"code":107366,"language":70,"meta":71,"style":71},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[73,107368,107369,107381],{"__ignoreMap":71},[76,107370,107371,107373,107375,107377,107379],{"class":78,"line":79},[76,107372,103656],{"class":90},[76,107374,370],{"class":82},[76,107376,103434],{"class":90},[76,107378,103336],{"class":119},[76,107380,130],{"class":90},[76,107382,107383,107385,107387],{"class":78,"line":94},[76,107384,103680],{"class":90},[76,107386,370],{"class":82},[76,107388,103448],{"class":90},[19,107390,107391],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[66,107393,107395],{"className":68,"code":107394,"language":70,"meta":71,"style":71},"print_state(\"initial\", model, data)\n",[73,107396,107397],{"__ignoreMap":71},[76,107398,107399,107402,107404],{"class":78,"line":79},[76,107400,107401],{"class":90},"print_state(",[76,107403,107024],{"class":126},[76,107405,107027],{"class":90},[19,107407,107408,107409,107412],{},"调用刚才定义的 ",[73,107410,107411],{},"print_state"," 函数，打印初始状态。",[66,107414,107415],{"className":68,"code":107202,"language":70,"meta":71,"style":71},[73,107416,107417,107433],{"__ignoreMap":71},[76,107418,107419,107421,107423,107425,107427,107429,107431],{"class":78,"line":79},[76,107420,5112],{"class":82},[76,107422,103523],{"class":90},[76,107424,1475],{"class":82},[76,107426,34483],{"class":119},[76,107428,123],{"class":90},[76,107430,2915],{"class":119},[76,107432,32830],{"class":90},[76,107434,107435],{"class":78,"line":94},[76,107436,103721],{"class":90},[19,107438,107439],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[66,107441,107442],{"className":68,"code":106548,"language":70,"meta":71,"style":71},[73,107443,107444],{"__ignoreMap":71},[76,107445,107446],{"class":78,"line":79},[76,107447,106548],{"class":90},[19,107449,107450,107451,107453,107454,107456],{},"重置 ",[73,107452,35439],{},"。注意它不会重新创建 ",[73,107455,104107],{},"，因为模型结构没有变，只是状态回到初始值。",[66,107458,107459],{"className":68,"code":106714,"language":70,"meta":71,"style":71},[73,107460,107461],{"__ignoreMap":71},[76,107462,107463,107465,107467,107469,107471],{"class":78,"line":79},[76,107464,106721],{"class":90},[76,107466,2345],{"class":119},[76,107468,6525],{"class":90},[76,107470,370],{"class":82},[76,107472,106730],{"class":119},[19,107474,107475,107476,2478,107479,2478,107482,107484],{},"这行是“手动改状态”。在 freejoint 中，",[73,107477,107478],{},"qpos[0]",[73,107480,107481],{},"qpos[1]",[73,107483,107278],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[66,107486,107487],{"className":68,"code":106565,"language":70,"meta":71,"style":71},[73,107488,107489],{"__ignoreMap":71},[76,107490,107491],{"class":78,"line":79},[76,107492,106565],{"class":90},[19,107494,107495,107496,107498,107499,107501],{},"手动改完 ",[73,107497,106052],{}," 后，调用 ",[73,107500,106272],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107503,104338],{"id":104337},[19,107505,107506],{},"你会看到:",[26,107508,107509,107514,107519,107522],{},[29,107510,107511,107512],{},"初始时间为 ",[73,107513,1294],{},[29,107515,107516,107517],{},"50 步后时间约为 ",[73,107518,37367],{},[29,107520,107521],{},"reset 后状态恢复",[29,107523,107524,107525,107528,107529],{},"手动修改 ",[73,107526,107527],{},"data.qpos[2]"," 后，小球高度变为 ",[73,107530,107282],{},[19,107532,107533,107535],{},[73,107534,107278],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107537,107538],{},"输出里可以重点看三件事：",[26,107540,107541,107549,107554],{},[29,107542,107543,107545,107546,107548],{},[73,107544,4483],{}," 是否随着 ",[73,107547,103237],{}," 增加。",[29,107550,107551,107553],{},[73,107552,106052],{}," 的 z 坐标是否因为下落而变化。",[29,107555,107556,107558,107559,490],{},[73,107557,106374],{}," 后时间是否回到 ",[73,107560,1294],{},[14,107562,104370],{"id":104369},[26,107564,107565,107571,107577,107583,107586,107595],{},[29,107566,107567,107568,490],{},"修改 timestep 为 ",[73,107569,107570],{},"0.005",[29,107572,107573,107574,490],{},"重新运行，检查 50 步后时间是否约为 ",[73,107575,107576],{},"0.25",[29,107578,107579,107580,490],{},"修改重力为 ",[73,107581,107582],{},"0 0 -1.0",[29,107584,107585],{},"观察小球下降速度是否变慢。",[29,107587,104433,107588,104436,107591,107594],{},[73,107589,107590],{},"data.qpos[2] = 2.0",[73,107592,107593],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,107596,107597,107598,107601],{},"注释掉 ",[73,107599,107600],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107603,104475],{"id":104474},[889,107605,107607,107608,107610],{"id":107606},"修改-dataqpos-后位置没有更新","修改 ",[73,107609,103092],{}," 后位置没有更新",[19,107612,104484],{},[66,107614,107615],{"className":68,"code":106565,"language":70,"meta":71,"style":71},[73,107616,107617],{"__ignoreMap":71},[76,107618,107619],{"class":78,"line":79},[76,107620,106565],{"class":90},[889,107622,107623],{"id":107623},"数组维度看不懂",[19,107625,107626],{},"打印模型维度:",[66,107628,107630],{"className":68,"code":107629,"language":70,"meta":71,"style":71},"print(model.nq, model.nv, model.nu)\n",[73,107631,107632],{"__ignoreMap":71},[76,107633,107634,107636],{"class":78,"line":79},[76,107635,478],{"class":119},[76,107637,107638],{"class":90},"(model.nq, model.nv, model.nu)\n",[2404,107640,107641,107649],{},[2407,107642,107643],{},[2410,107644,107645,107647],{},[2413,107646,106596],{"align":25785},[2413,107648,102722],{"align":25785},[2451,107650,107651,107661,107671],{},[2410,107652,107653,107658],{},[2456,107654,107655],{"align":25785},[73,107656,107657],{},"nq",[2456,107659,107660],{"align":25785},"位置变量数量",[2410,107662,107663,107668],{},[2456,107664,107665],{"align":25785},[73,107666,107667],{},"nv",[2456,107669,107670],{"align":25785},"速度变量数量",[2410,107672,107673,107677],{},[2456,107674,107675],{"align":25785},[73,107676,104184],{},[2456,107678,107679],{"align":25785},"控制输入数量",[889,107681,107683,107684,107686],{"id":107682},"误以为-qpos-一定等于关节数","误以为 ",[73,107685,106052],{}," 一定等于关节数",[19,107688,107689,107690,84554,107692,107694,107695,107697],{},"不是。例如 ",[73,107691,103642],{},[73,107693,106052],{}," 是 7 维，但 ",[73,107696,106382],{}," 是 6 维。",[889,107699,107701,107702,107704],{"id":107700},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[73,107703,106052],{}," 的第几位",[19,107706,107707],{},"初学时可以先打印：",[66,107709,107711],{"className":68,"code":107710,"language":70,"meta":71,"style":71},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[73,107712,107713,107723,107733,107745],{"__ignoreMap":71},[76,107714,107715,107717,107719,107721],{"class":78,"line":79},[76,107716,478],{"class":119},[76,107718,123],{"class":90},[76,107720,103461],{"class":126},[76,107722,103464],{"class":90},[76,107724,107725,107727,107729,107731],{"class":78,"line":94},[76,107726,478],{"class":119},[76,107728,123],{"class":90},[76,107730,103473],{"class":126},[76,107732,103476],{"class":90},[76,107734,107735,107737,107739,107742],{"class":78,"line":133},[76,107736,478],{"class":119},[76,107738,123],{"class":90},[76,107740,107741],{"class":126},"\"qpos:\"",[76,107743,107744],{"class":90},", data.qpos)\n",[76,107746,107747,107749,107751,107754],{"class":78,"line":145},[76,107748,478],{"class":119},[76,107750,123],{"class":90},[76,107752,107753],{"class":126},"\"qvel:\"",[76,107755,107756],{"class":90},", data.qvel)\n",[19,107758,107759],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[889,107761,107762],{"id":107762},"仿真结果每次都一样",[19,107764,107765,107766,107768],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[73,107767,106052],{},"、目标点或控制输入。",[14,107770,104629],{"id":104628},[19,107772,107773,107774,26668],{},"Python 控制 MuJoCo 的核心就是读写 ",[73,107775,35439],{},[26,107777,107778,107786,107791,107796],{},[29,107779,107780,107781,103040,107783,107785],{},"用 ",[73,107782,103092],{},[73,107784,103095],{}," 读取状态。",[29,107787,107780,107788,107790],{},[73,107789,103098],{}," 写入控制。",[29,107792,107780,107793,107795],{},[73,107794,103237],{}," 推进时间。",[29,107797,107798,107799,107801],{},"手动改状态后用 ",[73,107800,106272],{}," 刷新派生量。",[19,107803,107804],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2178,107806,107807],{},"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":71,"searchDepth":94,"depth":94,"links":107809},[107810,107811,107812,107819,107823,107824,107825,107835],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":107813},[107814,107816,107818],{"id":106577,"depth":133,"text":107815},"qpos、qvel、ctrl 是什么",{"id":106655,"depth":133,"text":107817},"mj_step 和 mj_forward 的区别",{"id":106744,"depth":133,"text":106745},{"id":103274,"depth":94,"text":103275,"children":107820},[107821,107822],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":107826},[107827,107829,107830,107832,107834],{"id":107606,"depth":133,"text":107828},"修改 data.qpos 后位置没有更新",{"id":107623,"depth":133,"text":107623},{"id":107682,"depth":133,"text":107831},"误以为 qpos 一定等于关节数",{"id":107700,"depth":133,"text":107833},"不知道某个元素在 qpos 的第几位",{"id":107762,"depth":133,"text":107762},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106340,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107842,"title":107843,"body":107844,"description":71,"extension":2202,"meta":109534,"navigation":148,"path":109535,"seo":109536,"stem":109537,"__hash__":109538},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107845,"toc":109510},[107846,107849,107851,107854,107856,107881,107884,107903,107906,107908,107910,107934,107936,107950,107952,107993,107995,108019,108021,108024,108058,108060,108073,108076,108144,108153,108157,108160,108194,108200,108203,108207,108246,108249,108269,108273,108316,108318,108347,108350,108356,108359,108361,108755,108757,108769,108771,108782,108784,108787,108816,108824,108827,108862,108865,108867,108875,108878,108880,108891,108901,108921,108924,108960,108972,109020,109039,109081,109094,109122,109127,109148,109158,109176,109179,109213,109216,109236,109239,109258,109264,109266,109269,109275,109281,109291,109294,109300,109309,109311,109357,109359,109365,109371,109374,109377,109397,109400,109406,109412,109414,109437,109440,109443,109452,109455,109493,109495,109498,109504,109507],[10,107847,107843],{"id":107848},"_4关节actuator-与力控制",[14,107850,102669],{"id":102668},[19,107852,107853],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107855,106353],{},[26,107857,107858,107864,107869,107873,107878],{},[29,107859,107860,107863],{},[73,107861,107862],{},"hinge"," 关节",[29,107865,107866],{},[73,107867,107868],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,107870,107871],{},[73,107872,103098],{},[29,107874,107875],{},[73,107876,107877],{},"ctrlrange",[29,107879,107880],{},"读取关节角和角速度",[19,107882,107883],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[66,107885,107887],{"className":68,"code":107886,"language":70,"meta":71,"style":71},"data.ctrl[0] = ...\n",[73,107888,107889],{"__ignoreMap":71},[76,107890,107891,107894,107896,107898,107900],{"class":78,"line":79},[76,107892,107893],{"class":90},"data.ctrl[",[76,107895,1294],{"class":119},[76,107897,6525],{"class":90},[76,107899,370],{"class":82},[76,107901,107902],{"class":119}," ...\n",[19,107904,107905],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107907,102792],{"id":102791},[19,107909,102795],{},[66,107911,107912],{"className":25871,"code":106410,"language":25873,"meta":71,"style":71},[73,107913,107914],{"__ignoreMap":71},[76,107915,107916,107918,107920,107922,107924,107926,107928,107930,107932],{"class":78,"line":79},[76,107917,26626],{"class":86},[76,107919,28364],{"class":126},[76,107921,25883],{"class":126},[76,107923,28449],{"class":119},[76,107925,106425],{"class":126},[76,107927,102820],{"class":126},[76,107929,104523],{"class":126},[76,107931,102836],{"class":126},[76,107933,106434],{"class":126},[19,107935,104841],{},[66,107937,107938],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},[73,107939,107940],{"__ignoreMap":71},[76,107941,107942,107944,107946,107948],{"class":78,"line":79},[76,107943,25880],{"class":86},[76,107945,25883],{"class":126},[76,107947,102952],{"class":126},[76,107949,102955],{"class":126},[19,107951,104858],{},[66,107953,107955],{"className":25871,"code":107954,"language":25873,"meta":71,"style":71},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[73,107956,107957,107974,107983],{"__ignoreMap":71},[76,107958,107959,107961,107963,107965,107968,107970,107972],{"class":78,"line":79},[76,107960,32378],{"class":86},[76,107962,31224],{"class":126},[76,107964,27165],{"class":119},[76,107966,107967],{"class":126}," mujoco-control",[76,107969,102997],{"class":126},[76,107971,103000],{"class":119},[76,107973,103003],{"class":119},[76,107975,107976,107978,107980],{"class":78,"line":94},[76,107977,32378],{"class":86},[76,107979,103010],{"class":126},[76,107981,107982],{"class":126}," mujoco-control\n",[76,107984,107985,107987,107989,107991],{"class":78,"line":133},[76,107986,25880],{"class":86},[76,107988,25883],{"class":126},[76,107990,102952],{"class":126},[76,107992,102955],{"class":126},[19,107994,103026],{},[26,107996,107997,108003,108010,108016],{},[29,107998,107999,108002],{},[73,108000,108001],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,108004,108005,108007,108008,490],{},[73,108006,103098],{}," 长度等于 ",[73,108009,104180],{},[29,108011,84246,108012,108015],{},[73,108013,108014],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,108017,108018],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108020,103067],{"id":103066},[19,108022,108023],{},"关节决定 body 如何运动:",[66,108025,108027],{"className":55099,"code":108026,"language":55101,"meta":71,"style":71},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,108028,108029],{"__ignoreMap":71},[76,108030,108031,108033,108035,108037,108039,108042,108044,108046,108048,108051,108053,108056],{"class":78,"line":79},[76,108032,584],{"class":90},[76,108034,104978],{"class":53332},[76,108036,16972],{"class":86},[76,108038,370],{"class":90},[76,108040,108041],{"class":126},"\"hinge\"",[76,108043,55855],{"class":86},[76,108045,370],{"class":90},[76,108047,108041],{"class":126},[76,108049,108050],{"class":86}," axis",[76,108052,370],{"class":90},[76,108054,108055],{"class":126},"\"0 1 0\"",[76,108057,103166],{"class":90},[19,108059,105074],{},[26,108061,108062,108067,108070],{},[29,108063,108064,108065],{},"名字是 ",[73,108066,107862],{},[29,108068,108069],{},"类型是旋转关节",[29,108071,108072],{},"绕 y 轴旋转",[19,108074,108075],{},"actuator 决定如何施加控制:",[66,108077,108079],{"className":55099,"code":108078,"language":55101,"meta":71,"style":71},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[73,108080,108081,108090,108136],{"__ignoreMap":71},[76,108082,108083,108085,108088],{"class":78,"line":79},[76,108084,584],{"class":90},[76,108086,108087],{"class":53332},"actuator",[76,108089,53339],{"class":90},[76,108091,108092,108094,108097,108099,108101,108104,108107,108109,108111,108114,108116,108118,108121,108123,108126,108129,108131,108134],{"class":78,"line":94},[76,108093,54176],{"class":90},[76,108095,108096],{"class":53332},"motor",[76,108098,16972],{"class":86},[76,108100,370],{"class":90},[76,108102,108103],{"class":126},"\"hinge_motor\"",[76,108105,108106],{"class":86}," joint",[76,108108,370],{"class":90},[76,108110,108041],{"class":126},[76,108112,108113],{"class":86}," gear",[76,108115,370],{"class":90},[76,108117,5763],{"class":126},[76,108119,108120],{"class":86}," ctrlrange",[76,108122,370],{"class":90},[76,108124,108125],{"class":126},"\"-2 2\"",[76,108127,108128],{"class":86}," ctrllimited",[76,108130,370],{"class":90},[76,108132,108133],{"class":126},"\"true\"",[76,108135,103166],{"class":90},[76,108137,108138,108140,108142],{"class":78,"line":133},[76,108139,53817],{"class":90},[76,108141,108087],{"class":53332},[76,108143,53339],{"class":90},[19,108145,108146,108149,108150,490],{},[73,108147,108148],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[73,108151,108152],{},"[-2, 2]",[889,108154,108156],{"id":108155},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108158,108159],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2404,108161,108162,108172],{},[2407,108163,108164],{},[2410,108165,108166,108168,108170],{},[2413,108167,27803],{"align":25785},[2413,108169,104718],{"align":25785},[2413,108171,102756],{"align":25785},[2451,108173,108174,108184],{},[2410,108175,108176,108178,108181],{},[2456,108177,104978],{"align":25785},[2456,108179,108180],{"align":25785},"定义能怎么动",[2456,108182,108183],{"align":25785},"门轴允许门旋转",[2410,108185,108186,108188,108191],{},[2456,108187,108087],{"align":25785},[2456,108189,108190],{"align":25785},"定义怎么施力或控制",[2456,108192,108193],{"align":25785},"人推门、马达带动门",[19,108195,108196,108197,108199],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[73,108198,103098],{}," 主动控制它。",[19,108201,108202],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[889,108204,108206],{"id":108205},"hinge-joint","hinge joint",[66,108208,108210],{"className":55099,"code":108209,"language":55101,"meta":71,"style":71},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[73,108211,108212],{"__ignoreMap":71},[76,108213,108214,108216,108218,108220,108222,108224,108226,108228,108230,108232,108234,108236,108239,108241,108244],{"class":78,"line":79},[76,108215,584],{"class":90},[76,108217,104978],{"class":53332},[76,108219,16972],{"class":86},[76,108221,370],{"class":90},[76,108223,108041],{"class":126},[76,108225,55855],{"class":86},[76,108227,370],{"class":90},[76,108229,108041],{"class":126},[76,108231,108050],{"class":86},[76,108233,370],{"class":90},[76,108235,108055],{"class":126},[76,108237,108238],{"class":86}," damping",[76,108240,370],{"class":90},[76,108242,108243],{"class":126},"\"0.1\"",[76,108245,103166],{"class":90},[19,108247,108248],{},"含义：",[26,108250,108251,108257,108263],{},[29,108252,108253,108256],{},[73,108254,108255],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,108258,108259,108262],{},[73,108260,108261],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,108264,108265,108268],{},[73,108266,108267],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[889,108270,108272],{"id":108271},"motor-actuator","motor actuator",[66,108274,108276],{"className":55099,"code":108275,"language":55101,"meta":71,"style":71},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[73,108277,108278],{"__ignoreMap":71},[76,108279,108280,108282,108284,108286,108288,108290,108292,108294,108296,108298,108300,108302,108304,108306,108308,108310,108312,108314],{"class":78,"line":79},[76,108281,584],{"class":90},[76,108283,108096],{"class":53332},[76,108285,16972],{"class":86},[76,108287,370],{"class":90},[76,108289,108103],{"class":126},[76,108291,108106],{"class":86},[76,108293,370],{"class":90},[76,108295,108041],{"class":126},[76,108297,108113],{"class":86},[76,108299,370],{"class":90},[76,108301,5763],{"class":126},[76,108303,108120],{"class":86},[76,108305,370],{"class":90},[76,108307,108125],{"class":126},[76,108309,108128],{"class":86},[76,108311,370],{"class":90},[76,108313,108133],{"class":126},[76,108315,103166],{"class":90},[19,108317,108248],{},[26,108319,108320,108329,108335,108341],{},[29,108321,108322,108325,108326,108328],{},[73,108323,108324],{},"joint=\"hinge\"","：这个电机作用在名为 ",[73,108327,107862],{}," 的关节上。",[29,108330,108331,108334],{},[73,108332,108333],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,108336,108337,108340],{},[73,108338,108339],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,108342,108343,108346],{},[73,108344,108345],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108348,108349],{},"简单理解：",[66,108351,108354],{"className":108352,"code":108353,"language":7268,"meta":71},[7266],"实际施加效果 ≈ data.ctrl[0] * gear\n",[73,108355,108353],{"__ignoreMap":71},[19,108357,108358],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108360,103275],{"id":103274},[66,108362,108364],{"className":68,"code":108363,"language":70,"meta":71,"style":71},"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",[73,108365,108366,108373,108377,108383,108393,108397,108401,108409,108414,108419,108423,108427,108432,108437,108441,108446,108451,108456,108461,108465,108469,108473,108478,108483,108488,108492,108496,108500,108504,108516,108528,108536,108540,108550,108560,108570,108574,108587,108600,108604,108621,108635,108670,108674,108678,108689,108704,108719,108731,108735,108739,108751],{"__ignoreMap":71},[76,108367,108368,108370],{"class":78,"line":79},[76,108369,32438],{"class":82},[76,108371,108372],{"class":90}," math\n",[76,108374,108375],{"class":78,"line":94},[76,108376,149],{"emptyLinePlaceholder":148},[76,108378,108379,108381],{"class":78,"line":133},[76,108380,32438],{"class":82},[76,108382,103323],{"class":90},[76,108384,108385,108387,108389,108391],{"class":78,"line":145},[76,108386,32438],{"class":82},[76,108388,33423],{"class":90},[76,108390,33426],{"class":82},[76,108392,33429],{"class":90},[76,108394,108395],{"class":78,"line":152},[76,108396,149],{"emptyLinePlaceholder":148},[76,108398,108399],{"class":78,"line":157},[76,108400,149],{"emptyLinePlaceholder":148},[76,108402,108403,108405,108407],{"class":78,"line":246},[76,108404,103336],{"class":119},[76,108406,15617],{"class":82},[76,108408,103341],{"class":126},[76,108410,108411],{"class":78,"line":251},[76,108412,108413],{"class":126},"\u003Cmujoco model=\"one_link_motor\">\n",[76,108415,108416],{"class":78,"line":257},[76,108417,108418],{"class":126},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[76,108420,108421],{"class":78,"line":641},[76,108422,149],{"emptyLinePlaceholder":148},[76,108424,108425],{"class":78,"line":646},[76,108426,103360],{"class":126},[76,108428,108429],{"class":78,"line":659},[76,108430,108431],{"class":126},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[76,108433,108434],{"class":78,"line":1608},[76,108435,108436],{"class":126},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[76,108438,108439],{"class":78,"line":1632},[76,108440,149],{"emptyLinePlaceholder":148},[76,108442,108443],{"class":78,"line":1637},[76,108444,108445],{"class":126},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[76,108447,108448],{"class":78,"line":1642},[76,108449,108450],{"class":126},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,108452,108453],{"class":78,"line":1652},[76,108454,108455],{"class":126},"        \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",[76,108457,108458],{"class":78,"line":1660},[76,108459,108460],{"class":126},"      \u003C\u002Fbody>\n",[76,108462,108463],{"class":78,"line":1683},[76,108464,103389],{"class":126},[76,108466,108467],{"class":78,"line":1698},[76,108468,103394],{"class":126},[76,108470,108471],{"class":78,"line":1711},[76,108472,149],{"emptyLinePlaceholder":148},[76,108474,108475],{"class":78,"line":1717},[76,108476,108477],{"class":126},"  \u003Cactuator>\n",[76,108479,108480],{"class":78,"line":1728},[76,108481,108482],{"class":126},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[76,108484,108485],{"class":78,"line":1740},[76,108486,108487],{"class":126},"  \u003C\u002Factuator>\n",[76,108489,108490],{"class":78,"line":1746},[76,108491,103399],{"class":126},[76,108493,108494],{"class":78,"line":1751},[76,108495,97720],{"class":126},[76,108497,108498],{"class":78,"line":1756},[76,108499,149],{"emptyLinePlaceholder":148},[76,108501,108502],{"class":78,"line":1766},[76,108503,149],{"emptyLinePlaceholder":148},[76,108505,108506,108508,108510,108512,108514],{"class":78,"line":1773},[76,108507,83],{"class":82},[76,108509,4069],{"class":86},[76,108511,103420],{"class":90},[76,108513,489],{"class":119},[76,108515,590],{"class":90},[76,108517,108518,108520,108522,108524,108526],{"class":78,"line":1793},[76,108519,103429],{"class":90},[76,108521,370],{"class":82},[76,108523,103434],{"class":90},[76,108525,103336],{"class":119},[76,108527,130],{"class":90},[76,108529,108530,108532,108534],{"class":78,"line":1806},[76,108531,103443],{"class":90},[76,108533,370],{"class":82},[76,108535,103448],{"class":90},[76,108537,108538],{"class":78,"line":1817},[76,108539,149],{"emptyLinePlaceholder":148},[76,108541,108542,108544,108546,108548],{"class":78,"line":1822},[76,108543,120],{"class":119},[76,108545,123],{"class":90},[76,108547,103461],{"class":126},[76,108549,103464],{"class":90},[76,108551,108552,108554,108556,108558],{"class":78,"line":1835},[76,108553,120],{"class":119},[76,108555,123],{"class":90},[76,108557,103473],{"class":126},[76,108559,103476],{"class":90},[76,108561,108562,108564,108566,108568],{"class":78,"line":1847},[76,108563,120],{"class":119},[76,108565,123],{"class":90},[76,108567,103485],{"class":126},[76,108569,103488],{"class":90},[76,108571,108572],{"class":78,"line":1852},[76,108573,149],{"emptyLinePlaceholder":148},[76,108575,108576,108578,108581,108583,108585],{"class":78,"line":1862},[76,108577,578],{"class":82},[76,108579,108580],{"class":90}," model.nu ",[76,108582,22997],{"class":82},[76,108584,27168],{"class":119},[76,108586,590],{"class":90},[76,108588,108589,108591,108593,108595,108598],{"class":78,"line":1874},[76,108590,105454],{"class":82},[76,108592,105457],{"class":119},[76,108594,123],{"class":90},[76,108596,108597],{"class":126},"\"expected exactly one actuator\"",[76,108599,130],{"class":90},[76,108601,108602],{"class":78,"line":1879},[76,108603,149],{"emptyLinePlaceholder":148},[76,108605,108606,108608,108610,108612,108614,108616,108619],{"class":78,"line":1884},[76,108607,1469],{"class":82},[76,108609,33659],{"class":90},[76,108611,1475],{"class":82},[76,108613,34483],{"class":119},[76,108615,123],{"class":90},[76,108617,108618],{"class":119},"2000",[76,108620,32830],{"class":90},[76,108622,108623,108626,108628,108630,108632],{"class":78,"line":1889},[76,108624,108625],{"class":90},"        t ",[76,108627,370],{"class":82},[76,108629,33659],{"class":90},[76,108631,2718],{"class":82},[76,108633,108634],{"class":90}," model.opt.timestep\n",[76,108636,108637,108640,108642,108644,108646,108649,108651,108654,108656,108658,108661,108663,108665,108667],{"class":78,"line":1900},[76,108638,108639],{"class":90},"        data.ctrl[",[76,108641,1294],{"class":119},[76,108643,6525],{"class":90},[76,108645,370],{"class":82},[76,108647,108648],{"class":119}," 1.5",[76,108650,1119],{"class":82},[76,108652,108653],{"class":90}," math.sin(",[76,108655,107282],{"class":119},[76,108657,1119],{"class":82},[76,108659,108660],{"class":90}," math.pi ",[76,108662,2718],{"class":82},[76,108664,63895],{"class":119},[76,108666,1119],{"class":82},[76,108668,108669],{"class":90}," t)\n",[76,108671,108672],{"class":78,"line":1906},[76,108673,103538],{"class":90},[76,108675,108676],{"class":78,"line":1924},[76,108677,149],{"emptyLinePlaceholder":148},[76,108679,108680,108682,108684,108687],{"class":78,"line":1929},[76,108681,120],{"class":119},[76,108683,123],{"class":90},[76,108685,108686],{"class":126},"\"time:\"",[76,108688,103500],{"class":90},[76,108690,108691,108693,108695,108698,108700,108702],{"class":78,"line":1944},[76,108692,120],{"class":119},[76,108694,123],{"class":90},[76,108696,108697],{"class":126},"\"joint qpos:\"",[76,108699,106952],{"class":90},[76,108701,2557],{"class":119},[76,108703,656],{"class":90},[76,108705,108706,108708,108710,108713,108715,108717],{"class":78,"line":1950},[76,108707,120],{"class":119},[76,108709,123],{"class":90},[76,108711,108712],{"class":126},"\"joint qvel:\"",[76,108714,106968],{"class":90},[76,108716,2557],{"class":119},[76,108718,656],{"class":90},[76,108720,108721,108723,108725,108728],{"class":78,"line":1965},[76,108722,120],{"class":119},[76,108724,123],{"class":90},[76,108726,108727],{"class":126},"\"last ctrl:\"",[76,108729,108730],{"class":90},", data.ctrl.copy())\n",[76,108732,108733],{"class":78,"line":1971},[76,108734,149],{"emptyLinePlaceholder":148},[76,108736,108737],{"class":78,"line":1985},[76,108738,149],{"emptyLinePlaceholder":148},[76,108740,108741,108743,108745,108747,108749],{"class":78,"line":1991},[76,108742,723],{"class":82},[76,108744,33264],{"class":119},[76,108746,103581],{"class":82},[76,108748,103584],{"class":126},[76,108750,590],{"class":90},[76,108752,108753],{"class":78,"line":2005},[76,108754,103591],{"class":90},[19,108756,105592],{},[66,108758,108760],{"className":25871,"code":108759,"language":25873,"meta":71,"style":71},"touch ch4_joint_motor.py\n",[73,108761,108762],{"__ignoreMap":71},[76,108763,108764,108766],{"class":78,"line":79},[76,108765,103305],{"class":86},[76,108767,108768],{"class":126}," ch4_joint_motor.py\n",[19,108770,104323],{},[66,108772,108774],{"className":25871,"code":108773,"language":25873,"meta":71,"style":71},"python ch4_joint_motor.py\n",[73,108775,108776],{"__ignoreMap":71},[76,108777,108778,108780],{"class":78,"line":79},[76,108779,70],{"class":86},[76,108781,108768],{"class":126},[889,108783,103594],{"id":103594},[19,108785,108786],{},"检查 actuator 数量：",[66,108788,108790],{"className":68,"code":108789,"language":70,"meta":71,"style":71},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[73,108791,108792,108804],{"__ignoreMap":71},[76,108793,108794,108796,108798,108800,108802],{"class":78,"line":79},[76,108795,723],{"class":82},[76,108797,108580],{"class":90},[76,108799,22997],{"class":82},[76,108801,27168],{"class":119},[76,108803,590],{"class":90},[76,108805,108806,108808,108810,108812,108814],{"class":78,"line":94},[76,108807,105917],{"class":82},[76,108809,105457],{"class":119},[76,108811,123],{"class":90},[76,108813,108597],{"class":126},[76,108815,130],{"class":90},[19,108817,108818,108820,108821,108823],{},[73,108819,104180],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[73,108822,103098],{}," 长度应该是 1。",[19,108825,108826],{},"产生正弦控制信号：",[66,108828,108830],{"className":68,"code":108829,"language":70,"meta":71,"style":71},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[73,108831,108832],{"__ignoreMap":71},[76,108833,108834,108836,108838,108840,108842,108844,108846,108848,108850,108852,108854,108856,108858,108860],{"class":78,"line":79},[76,108835,107893],{"class":90},[76,108837,1294],{"class":119},[76,108839,6525],{"class":90},[76,108841,370],{"class":82},[76,108843,108648],{"class":119},[76,108845,1119],{"class":82},[76,108847,108653],{"class":90},[76,108849,107282],{"class":119},[76,108851,1119],{"class":82},[76,108853,108660],{"class":90},[76,108855,2718],{"class":82},[76,108857,63895],{"class":119},[76,108859,1119],{"class":82},[76,108861,108669],{"class":90},[19,108863,108864],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108866,103695],{},[66,108868,108869],{"className":68,"code":106527,"language":70,"meta":71,"style":71},[73,108870,108871],{"__ignoreMap":71},[76,108872,108873],{"class":78,"line":79},[76,108874,106527],{"class":90},[19,108876,108877],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[889,108879,103730],{"id":103730},[66,108881,108883],{"className":68,"code":108882,"language":70,"meta":71,"style":71},"import math\n",[73,108884,108885],{"__ignoreMap":71},[76,108886,108887,108889],{"class":78,"line":79},[76,108888,32438],{"class":82},[76,108890,108372],{"class":90},[19,108892,108893,108894,103040,108897,108900],{},"导入 Python 标准库里的数学模块。后面要用 ",[73,108895,108896],{},"math.sin",[73,108898,108899],{},"math.pi"," 生成周期变化的控制信号。",[66,108902,108903],{"className":68,"code":105708,"language":70,"meta":71,"style":71},[73,108904,108905,108911],{"__ignoreMap":71},[76,108906,108907,108909],{"class":78,"line":79},[76,108908,32438],{"class":82},[76,108910,103323],{"class":90},[76,108912,108913,108915,108917,108919],{"class":78,"line":94},[76,108914,32438],{"class":82},[76,108916,33423],{"class":90},[76,108918,33426],{"class":82},[76,108920,33429],{"class":90},[19,108922,108923],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[66,108925,108926],{"className":55099,"code":108209,"language":55101,"meta":71,"style":71},[73,108927,108928],{"__ignoreMap":71},[76,108929,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954,108956,108958],{"class":78,"line":79},[76,108931,584],{"class":90},[76,108933,104978],{"class":53332},[76,108935,16972],{"class":86},[76,108937,370],{"class":90},[76,108939,108041],{"class":126},[76,108941,55855],{"class":86},[76,108943,370],{"class":90},[76,108945,108041],{"class":126},[76,108947,108050],{"class":86},[76,108949,370],{"class":90},[76,108951,108055],{"class":126},[76,108953,108238],{"class":86},[76,108955,370],{"class":90},[76,108957,108243],{"class":126},[76,108959,103166],{"class":90},[19,108961,108962,108963,108965,108966,108968,108969,108971],{},"这行定义关节。",[73,108964,107862],{}," 表示旋转关节。",[73,108967,108261],{}," 表示绕 y 轴旋转。",[73,108970,108267],{}," 表示有一点阻尼，运动不会完全无损耗。",[66,108973,108975],{"className":55099,"code":108974,"language":55101,"meta":71,"style":71},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[73,108976,108977],{"__ignoreMap":71},[76,108978,108979,108981,108983,108985,108987,108990,108992,108994,108997,109000,109002,109005,109007,109009,109011,109013,109015,109018],{"class":78,"line":79},[76,108980,584],{"class":90},[76,108982,103142],{"class":53332},[76,108984,16972],{"class":86},[76,108986,370],{"class":90},[76,108988,108989],{"class":126},"\"link_geom\"",[76,108991,55855],{"class":86},[76,108993,370],{"class":90},[76,108995,108996],{"class":126},"\"capsule\"",[76,108998,108999],{"class":86}," fromto",[76,109001,370],{"class":90},[76,109003,109004],{"class":126},"\"0 0 0 0 0 0.5\"",[76,109006,103158],{"class":86},[76,109008,370],{"class":90},[76,109010,105800],{"class":126},[76,109012,104023],{"class":86},[76,109014,370],{"class":90},[76,109016,109017],{"class":126},"\"0.5\"",[76,109019,103166],{"class":90},[19,109021,109022,109023,109025,109026,109028,109029,109032,109033,490,109036,109038],{},"这行定义摆杆的形状。",[73,109024,105187],{}," 是胶囊体，适合表示杆子。",[73,109027,105198],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[73,109030,109031],{},"(0,0,0)"," 延伸到 ",[73,109034,109035],{},"(0,0,0.5)",[73,109037,105192],{}," 是半径。",[66,109040,109041],{"className":55099,"code":108275,"language":55101,"meta":71,"style":71},[73,109042,109043],{"__ignoreMap":71},[76,109044,109045,109047,109049,109051,109053,109055,109057,109059,109061,109063,109065,109067,109069,109071,109073,109075,109077,109079],{"class":78,"line":79},[76,109046,584],{"class":90},[76,109048,108096],{"class":53332},[76,109050,16972],{"class":86},[76,109052,370],{"class":90},[76,109054,108103],{"class":126},[76,109056,108106],{"class":86},[76,109058,370],{"class":90},[76,109060,108041],{"class":126},[76,109062,108113],{"class":86},[76,109064,370],{"class":90},[76,109066,5763],{"class":126},[76,109068,108120],{"class":86},[76,109070,370],{"class":90},[76,109072,108125],{"class":126},[76,109074,108128],{"class":86},[76,109076,370],{"class":90},[76,109078,108133],{"class":126},[76,109080,103166],{"class":90},[19,109082,109083,109084,109086,109087,109090,109091,109093],{},"这行定义电机。它作用在 ",[73,109085,107862],{}," 关节上。",[73,109088,109089],{},"gear"," 可以理解成放大倍数。",[73,109092,107877],{}," 限制控制输入范围。",[66,109095,109096],{"className":68,"code":108789,"language":70,"meta":71,"style":71},[73,109097,109098,109110],{"__ignoreMap":71},[76,109099,109100,109102,109104,109106,109108],{"class":78,"line":79},[76,109101,723],{"class":82},[76,109103,108580],{"class":90},[76,109105,22997],{"class":82},[76,109107,27168],{"class":119},[76,109109,590],{"class":90},[76,109111,109112,109114,109116,109118,109120],{"class":78,"line":94},[76,109113,105917],{"class":82},[76,109115,105457],{"class":119},[76,109117,123],{"class":90},[76,109119,108597],{"class":126},[76,109121,130],{"class":90},[19,109123,109124,109126],{},[73,109125,104180],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[66,109128,109130],{"className":68,"code":109129,"language":70,"meta":71,"style":71},"for step in range(2000):\n",[73,109131,109132],{"__ignoreMap":71},[76,109133,109134,109136,109138,109140,109142,109144,109146],{"class":78,"line":79},[76,109135,5112],{"class":82},[76,109137,33659],{"class":90},[76,109139,1475],{"class":82},[76,109141,34483],{"class":119},[76,109143,123],{"class":90},[76,109145,108618],{"class":119},[76,109147,32830],{"class":90},[19,109149,109150,109151,109153,109154,109157],{},"循环 2000 步。这里没有用 ",[73,109152,3246],{},"，而是用 ",[73,109155,109156],{},"step","，因为后面要用当前步数计算时间。",[66,109159,109161],{"className":68,"code":109160,"language":70,"meta":71,"style":71},"t = step * model.opt.timestep\n",[73,109162,109163],{"__ignoreMap":71},[76,109164,109165,109168,109170,109172,109174],{"class":78,"line":79},[76,109166,109167],{"class":90},"t ",[76,109169,370],{"class":82},[76,109171,33659],{"class":90},[76,109173,2718],{"class":82},[76,109175,108634],{"class":90},[19,109177,109178],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[66,109180,109181],{"className":68,"code":108829,"language":70,"meta":71,"style":71},[73,109182,109183],{"__ignoreMap":71},[76,109184,109185,109187,109189,109191,109193,109195,109197,109199,109201,109203,109205,109207,109209,109211],{"class":78,"line":79},[76,109186,107893],{"class":90},[76,109188,1294],{"class":119},[76,109190,6525],{"class":90},[76,109192,370],{"class":82},[76,109194,108648],{"class":119},[76,109196,1119],{"class":82},[76,109198,108653],{"class":90},[76,109200,107282],{"class":119},[76,109202,1119],{"class":82},[76,109204,108660],{"class":90},[76,109206,2718],{"class":82},[76,109208,63895],{"class":119},[76,109210,1119],{"class":82},[76,109212,108669],{"class":90},[19,109214,109215],{},"这行给电机输入一个正弦波。拆开看：",[26,109217,109218,109224,109230],{},[29,109219,109220,109223],{},[73,109221,109222],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,109225,109226,109229],{},[73,109227,109228],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,109231,109232,109235],{},[73,109233,109234],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109237,109238],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[66,109240,109242],{"className":68,"code":109241,"language":70,"meta":71,"style":71},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[73,109243,109244],{"__ignoreMap":71},[76,109245,109246,109248,109250,109252,109254,109256],{"class":78,"line":79},[76,109247,478],{"class":119},[76,109249,123],{"class":90},[76,109251,108697],{"class":126},[76,109253,106952],{"class":90},[76,109255,2557],{"class":119},[76,109257,656],{"class":90},[19,109259,109260,109261,109263],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[73,109262,103092],{}," 只有一个数。",[14,109265,104338],{"id":104337},[19,109267,109268],{},"输出类似:",[66,109270,109273],{"className":109271,"code":109272,"language":7268,"meta":71},[7266],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[73,109274,109272],{"__ignoreMap":71},[19,109276,109277,109278,109280],{},"这里 ",[73,109279,108148],{}," 是电机输入。",[19,109282,109283,109286,109287,109290],{},[73,109284,109285],{},"joint qpos"," 是关节角度，单位通常是弧度。",[73,109288,109289],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109292,109293],{},"角度单位提示：",[66,109295,109298],{"className":109296,"code":109297,"language":7268,"meta":71},[7266],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[73,109299,109297],{"__ignoreMap":71},[19,109301,109302,109303,109305,109306,109308],{},"如果你看到 ",[73,109304,106052],{}," 是 ",[73,109307,37367],{},"，大约就是 28.6 度。",[14,109310,104370],{"id":104369},[26,109312,109313,109320,109323,109330,109333,109341,109349],{},[29,109314,104433,109315,104436,109317,490],{},[73,109316,108333],{},[73,109318,109319],{},"gear=\"5\"",[29,109321,109322],{},"重新运行，观察关节运动是否更剧烈。",[29,109324,104433,109325,104436,109327,490],{},[73,109326,107877],{},[73,109328,109329],{},"-0.2 0.2",[29,109331,109332],{},"重新运行，观察控制能力是否变弱。",[29,109334,109335,109336,109338,109339,490],{},"去掉 actuator，确认 ",[73,109337,104180],{}," 变成 ",[73,109340,1294],{},[29,109342,104433,109343,104436,109345,109348],{},[73,109344,108267],{},[73,109346,109347],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,109350,104433,109351,104436,109353,109356],{},[73,109352,108261],{},[73,109354,109355],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109358,104475],{"id":104474},[889,109360,109362],{"id":109361},"indexerror-index-0-is-out-of-bounds",[73,109363,109364],{},"IndexError: index 0 is out of bounds",[19,109366,109367,109368,109370],{},"原因是 ",[73,109369,108014],{},"，没有 actuator。",[889,109372,109373],{"id":109373},"关节几乎不动",[19,109375,109376],{},"可能原因:",[26,109378,109379,109384,109388,109394],{},[29,109380,109381,109383],{},[73,109382,109089],{}," 太小",[29,109385,109386,109383],{},[73,109387,107877],{},[29,109389,109390,109393],{},[73,109391,109392],{},"damping"," 太大",[29,109395,109396],{},"重力方向导致运动不明显",[889,109398,109399],{"id":109399},"模型编译失败",[19,109401,109402,109403,109405],{},"检查 actuator 引用的 ",[73,109404,108324],{}," 是否存在，joint 名称是否拼写一致。",[889,109407,109409,109411],{"id":109408},"datactrl0-写了但没有效果",[73,109410,108148],{}," 写了但没有效果",[19,109413,104597],{},[26,109415,109416,109421,109424,109429,109434],{},[29,109417,109418,109420],{},[73,109419,104180],{}," 是否大于 0。",[29,109422,109423],{},"motor 是否引用了正确 joint。",[29,109425,109426,109428],{},[73,109427,109089],{}," 是否太小。",[29,109430,109431,109433],{},[73,109432,107877],{}," 是否把输入限制得太小。",[29,109435,109436],{},"body 是否真的有可动 joint。",[889,109438,109439],{"id":109439},"控制输入超过范围会怎样",[19,109441,109442],{},"如果设置了：",[66,109444,109446],{"className":55099,"code":109445,"language":55101,"meta":71,"style":71},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[73,109447,109448],{"__ignoreMap":71},[76,109449,109450],{"class":78,"line":79},[76,109451,109445],{"class":90},[19,109453,109454],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[66,109456,109458],{"className":68,"code":109457,"language":70,"meta":71,"style":71},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[73,109459,109460,109480],{"__ignoreMap":71},[76,109461,109462,109465,109467,109470,109472,109474,109476,109478],{"class":78,"line":79},[76,109463,109464],{"class":90},"action ",[76,109466,370],{"class":82},[76,109468,109469],{"class":90}," np.clip(action, ",[76,109471,666],{"class":82},[76,109473,107282],{"class":119},[76,109475,405],{"class":90},[76,109477,107282],{"class":119},[76,109479,130],{"class":90},[76,109481,109482,109484,109486,109488,109490],{"class":78,"line":94},[76,109483,107893],{"class":90},[76,109485,1294],{"class":119},[76,109487,6525],{"class":90},[76,109489,370],{"class":82},[76,109491,109492],{"class":90}," action\n",[14,109494,104629],{"id":104628},[19,109496,109497],{},"这一章建立了控制任务的基本形式：",[66,109499,109502],{"className":109500,"code":109501,"language":7268,"meta":71},[7266],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[73,109503,109501],{"__ignoreMap":71},[19,109505,109506],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2178,109508,109509],{},"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":71,"searchDepth":94,"depth":94,"links":109511},[109512,109513,109514,109519,109523,109524,109525,109533],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":109515},[109516,109517,109518],{"id":108155,"depth":133,"text":108156},{"id":108205,"depth":133,"text":108206},{"id":108271,"depth":133,"text":108272},{"id":103274,"depth":94,"text":103275,"children":109520},[109521,109522],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":109526},[109527,109528,109529,109530,109532],{"id":109361,"depth":133,"text":109364},{"id":109373,"depth":133,"text":109373},{"id":109399,"depth":133,"text":109399},{"id":109408,"depth":133,"text":109531},"data.ctrl[0] 写了但没有效果",{"id":109439,"depth":133,"text":109439},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107843,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109540,"title":109541,"body":109542,"description":71,"extension":2202,"meta":111450,"navigation":148,"path":111451,"seo":111452,"stem":111453,"__hash__":111454},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109543,"toc":111426},[109544,109547,109549,109552,109560,109563,109580,109583,109608,109611,109657,109659,109661,109716,109718,109737,109739,109782,109785,109802,109805,109821,109831,109838,109840,109843,109846,109880,109883,109931,109935,109938,109952,109961,109965,109968,109993,109996,110000,110013,110016,110022,110025,110040,110042,110045,110305,110307,110319,110322,110634,110636,110648,110650,110653,110668,110673,110676,110697,110700,110703,110737,110740,110744,110755,110758,110775,110778,110792,110799,110819,110826,110840,110843,110855,110870,110890,110893,110915,110918,110922,110937,110948,110963,110966,110996,111012,111041,111049,111073,111076,111094,111104,111116,111123,111132,111138,111147,111150,111152,111161,111164,111179,111181,111184,111195,111198,111209,111212,111230,111232,111249,111252,111280,111282,111286,111289,111319,111325,111328,111332,111340,111343,111345,111366,111369,111372,111388,111391,111407,111409,111412,111423],[10,109545,109541],{"id":109546},"_5viewer-可视化与-renderer-离屏渲染",[14,109548,102669],{"id":102668},[19,109550,109551],{},"本章掌握两类可视化方式:",[26,109553,109554,109557],{},[29,109555,109556],{},"交互式 viewer: 适合人工观察仿真",[29,109558,109559],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109561,109562],{},"使用官方接口:",[66,109564,109566],{"className":68,"code":109565,"language":70,"meta":71,"style":71},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[73,109567,109568,109575],{"__ignoreMap":71},[76,109569,109570,109572],{"class":78,"line":79},[76,109571,32438],{"class":82},[76,109573,109574],{"class":90}," mujoco.viewer\n",[76,109576,109577],{"class":78,"line":94},[76,109578,109579],{"class":90},"mujoco.viewer.launch_passive(model, data)\n",[19,109581,109582],{},"以及:",[66,109584,109586],{"className":68,"code":109585,"language":70,"meta":71,"style":71},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[73,109587,109588,109598],{"__ignoreMap":71},[76,109589,109590,109593,109595],{"class":78,"line":79},[76,109591,109592],{"class":90},"renderer ",[76,109594,370],{"class":82},[76,109596,109597],{"class":90}," mujoco.Renderer(model)\n",[76,109599,109600,109603,109605],{"class":78,"line":94},[76,109601,109602],{"class":90},"image ",[76,109604,370],{"class":82},[76,109606,109607],{"class":90}," renderer.render()\n",[19,109609,109610],{},"新手建议先理解二者区别：",[2404,109612,109613,109629],{},[2407,109614,109615],{},[2410,109616,109617,109620,109623,109626],{},[2413,109618,109619],{"align":25785},"工具",[2413,109621,109622],{"align":25785},"用途",[2413,109624,109625],{"align":25785},"是否打开窗口",[2413,109627,109628],{"align":25785},"常见场景",[2451,109630,109631,109644],{},[2410,109632,109633,109636,109639,109641],{},[2456,109634,109635],{"align":25785},"Viewer",[2456,109637,109638],{"align":25785},"人眼实时观察仿真",[2456,109640,106687],{"align":25785},[2456,109642,109643],{"align":25785},"调试模型、看控制效果",[2410,109645,109646,109649,109652,109654],{},[2456,109647,109648],{"align":25785},"Renderer",[2456,109650,109651],{"align":25785},"生成图像数组",[2456,109653,106700],{"align":25785},[2456,109655,109656],{"align":25785},"保存图片、训练视觉策略、服务器批量采集",[14,109658,102792],{"id":102791},[19,109660,102795],{},[66,109662,109664],{"className":25871,"code":109663,"language":25873,"meta":71,"style":71},"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",[73,109665,109666,109678,109688,109696,109704],{"__ignoreMap":71},[76,109667,109668,109670,109672,109674,109676],{"class":78,"line":79},[76,109669,26626],{"class":86},[76,109671,28364],{"class":126},[76,109673,25883],{"class":126},[76,109675,28449],{"class":119},[76,109677,26728],{"class":119},[76,109679,109680,109682,109684,109686],{"class":78,"line":94},[76,109681,102830],{"class":126},[76,109683,102833],{"class":126},[76,109685,102836],{"class":126},[76,109687,26728],{"class":119},[76,109689,109690,109692,109694],{"class":78,"line":133},[76,109691,102843],{"class":126},[76,109693,102846],{"class":126},[76,109695,26728],{"class":119},[76,109697,109698,109700,109702],{"class":78,"line":145},[76,109699,102853],{"class":126},[76,109701,102856],{"class":126},[76,109703,26728],{"class":119},[76,109705,109706,109708,109710,109712,109714],{"class":78,"line":152},[76,109707,102863],{"class":126},[76,109709,102866],{"class":126},[76,109711,102869],{"class":126},[76,109713,102872],{"class":126},[76,109715,104538],{"class":126},[19,109717,104841],{},[66,109719,109721],{"className":25871,"code":109720,"language":25873,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy pillow\n",[73,109722,109723],{"__ignoreMap":71},[76,109724,109725,109727,109729,109731,109734],{"class":78,"line":79},[76,109726,25880],{"class":86},[76,109728,25883],{"class":126},[76,109730,102952],{"class":126},[76,109732,109733],{"class":126}," numpy",[76,109735,109736],{"class":126}," pillow\n",[19,109738,104858],{},[66,109740,109742],{"className":25871,"code":109741,"language":25873,"meta":71,"style":71},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[73,109743,109744,109761,109770],{"__ignoreMap":71},[76,109745,109746,109748,109750,109752,109755,109757,109759],{"class":78,"line":79},[76,109747,32378],{"class":86},[76,109749,31224],{"class":126},[76,109751,27165],{"class":119},[76,109753,109754],{"class":126}," mujoco-render",[76,109756,102997],{"class":126},[76,109758,103000],{"class":119},[76,109760,103003],{"class":119},[76,109762,109763,109765,109767],{"class":78,"line":94},[76,109764,32378],{"class":86},[76,109766,103010],{"class":126},[76,109768,109769],{"class":126}," mujoco-render\n",[76,109771,109772,109774,109776,109778,109780],{"class":78,"line":133},[76,109773,25880],{"class":86},[76,109775,25883],{"class":126},[76,109777,102952],{"class":126},[76,109779,109733],{"class":126},[76,109781,109736],{"class":126},[19,109783,109784],{},"离屏渲染后端:",[66,109786,109788],{"className":25871,"code":109787,"language":25873,"meta":71,"style":71},"export MUJOCO_GL=egl\n",[73,109789,109790],{"__ignoreMap":71},[76,109791,109792,109794,109797,109799],{"class":78,"line":79},[76,109793,27092],{"class":82},[76,109795,109796],{"class":90}," MUJOCO_GL",[76,109798,370],{"class":82},[76,109800,109801],{"class":90},"egl\n",[19,109803,109804],{},"或:",[66,109806,109808],{"className":25871,"code":109807,"language":25873,"meta":71,"style":71},"export MUJOCO_GL=osmesa\n",[73,109809,109810],{"__ignoreMap":71},[76,109811,109812,109814,109816,109818],{"class":78,"line":79},[76,109813,27092],{"class":82},[76,109815,109796],{"class":90},[76,109817,370],{"class":82},[76,109819,109820],{"class":90},"osmesa\n",[19,109822,109823,109824,109827,109828,490],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[73,109825,109826],{},"egl"," 失败，再尝试 ",[73,109829,109830],{},"osmesa",[19,109832,109833,109834,109837],{},"如果你在本机桌面环境运行，通常先不要设置 ",[73,109835,109836],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109839,103067],{"id":103066},[19,109841,109842],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109844,109845],{},"典型 viewer 流程:",[66,109847,109849],{"className":68,"code":109848,"language":70,"meta":71,"style":71},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[73,109850,109851,109864,109871,109875],{"__ignoreMap":71},[76,109852,109853,109856,109859,109861],{"class":78,"line":79},[76,109854,109855],{"class":82},"with",[76,109857,109858],{"class":90}," mujoco.viewer.launch_passive(model, data) ",[76,109860,33426],{"class":82},[76,109862,109863],{"class":90}," viewer:\n",[76,109865,109866,109868],{"class":78,"line":94},[76,109867,4347],{"class":82},[76,109869,109870],{"class":90}," viewer.is_running():\n",[76,109872,109873],{"class":78,"line":133},[76,109874,103538],{"class":90},[76,109876,109877],{"class":78,"line":145},[76,109878,109879],{"class":90},"        viewer.sync()\n",[19,109881,109882],{},"典型 renderer 流程:",[66,109884,109886],{"className":68,"code":109885,"language":70,"meta":71,"style":71},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[73,109887,109888,109914,109918,109923],{"__ignoreMap":71},[76,109889,109890,109892,109894,109897,109899,109901,109903,109905,109907,109909,109912],{"class":78,"line":79},[76,109891,109592],{"class":90},[76,109893,370],{"class":82},[76,109895,109896],{"class":90}," mujoco.Renderer(model, ",[76,109898,27031],{"class":7296},[76,109900,370],{"class":82},[76,109902,44377],{"class":119},[76,109904,405],{"class":90},[76,109906,27027],{"class":7296},[76,109908,370],{"class":82},[76,109910,109911],{"class":119},"640",[76,109913,130],{"class":90},[76,109915,109916],{"class":78,"line":94},[76,109917,106527],{"class":90},[76,109919,109920],{"class":78,"line":133},[76,109921,109922],{"class":90},"renderer.update_scene(data)\n",[76,109924,109925,109927,109929],{"class":78,"line":145},[76,109926,109602],{"class":90},[76,109928,370],{"class":82},[76,109930,109607],{"class":90},[889,109932,109934],{"id":109933},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109936,109937],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[66,109939,109941],{"className":68,"code":109940,"language":70,"meta":71,"style":71},"mujoco.mj_step(model, data)\nviewer.sync()\n",[73,109942,109943,109947],{"__ignoreMap":71},[76,109944,109945],{"class":78,"line":79},[76,109946,106527],{"class":90},[76,109948,109949],{"class":78,"line":94},[76,109950,109951],{"class":90},"viewer.sync()\n",[19,109953,109954,109956,109957,109960],{},[73,109955,103237],{}," 负责算物理，",[73,109958,109959],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[889,109962,109964],{"id":109963},"为什么要-sleep","为什么要 sleep",[19,109966,109967],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[66,109969,109971],{"className":68,"code":109970,"language":70,"meta":71,"style":71},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[73,109972,109973],{"__ignoreMap":71},[76,109974,109975,109978,109980,109983,109985,109988,109990],{"class":78,"line":79},[76,109976,109977],{"class":90},"sleep_time ",[76,109979,370],{"class":82},[76,109981,109982],{"class":90}," model.opt.timestep ",[76,109984,666],{"class":82},[76,109986,109987],{"class":90}," (time.time() ",[76,109989,666],{"class":82},[76,109991,109992],{"class":90}," step_start)\n",[19,109994,109995],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[889,109997,109999],{"id":109998},"renderer-输出是什么","renderer 输出是什么",[66,110001,110003],{"className":68,"code":110002,"language":70,"meta":71,"style":71},"image = renderer.render()\n",[73,110004,110005],{"__ignoreMap":71},[76,110006,110007,110009,110011],{"class":78,"line":79},[76,110008,109602],{"class":90},[76,110010,370],{"class":82},[76,110012,109607],{"class":90},[19,110014,110015],{},"得到的是 NumPy 数组，形状通常是：",[66,110017,110020],{"className":110018,"code":110019,"language":7268,"meta":71},[7266],"(height, width, 3)\n",[73,110021,110019],{"__ignoreMap":71},[19,110023,110024],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[66,110026,110028],{"className":68,"code":110027,"language":70,"meta":71,"style":71},"Image.fromarray(image).save(\"render_output.png\")\n",[73,110029,110030],{"__ignoreMap":71},[76,110031,110032,110035,110038],{"class":78,"line":79},[76,110033,110034],{"class":90},"Image.fromarray(image).save(",[76,110036,110037],{"class":126},"\"render_output.png\"",[76,110039,130],{"class":90},[14,110041,103275],{"id":103274},[19,110043,110044],{},"交互式 Viewer:",[66,110046,110048],{"className":68,"code":110047,"language":70,"meta":71,"style":71},"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",[73,110049,110050,110056,110060,110066,110072,110076,110080,110088,110093,110097,110101,110105,110110,110115,110119,110123,110127,110132,110136,110140,110144,110148,110152,110156,110168,110180,110188,110192,110202,110222,110232,110237,110242,110246,110263,110276,110281,110285,110289,110301],{"__ignoreMap":71},[76,110051,110052,110054],{"class":78,"line":79},[76,110053,32438],{"class":82},[76,110055,33871],{"class":90},[76,110057,110058],{"class":78,"line":94},[76,110059,149],{"emptyLinePlaceholder":148},[76,110061,110062,110064],{"class":78,"line":133},[76,110063,32438],{"class":82},[76,110065,103323],{"class":90},[76,110067,110068,110070],{"class":78,"line":145},[76,110069,32438],{"class":82},[76,110071,109574],{"class":90},[76,110073,110074],{"class":78,"line":152},[76,110075,149],{"emptyLinePlaceholder":148},[76,110077,110078],{"class":78,"line":157},[76,110079,149],{"emptyLinePlaceholder":148},[76,110081,110082,110084,110086],{"class":78,"line":246},[76,110083,103336],{"class":119},[76,110085,15617],{"class":82},[76,110087,103341],{"class":126},[76,110089,110090],{"class":78,"line":251},[76,110091,110092],{"class":126},"\u003Cmujoco model=\"viewer_demo\">\n",[76,110094,110095],{"class":78,"line":257},[76,110096,103351],{"class":126},[76,110098,110099],{"class":78,"line":641},[76,110100,149],{"emptyLinePlaceholder":148},[76,110102,110103],{"class":78,"line":646},[76,110104,103360],{"class":126},[76,110106,110107],{"class":78,"line":659},[76,110108,110109],{"class":126},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[76,110111,110112],{"class":78,"line":1608},[76,110113,110114],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,110116,110117],{"class":78,"line":1632},[76,110118,149],{"emptyLinePlaceholder":148},[76,110120,110121],{"class":78,"line":1637},[76,110122,103374],{"class":126},[76,110124,110125],{"class":78,"line":1642},[76,110126,103379],{"class":126},[76,110128,110129],{"class":78,"line":1652},[76,110130,110131],{"class":126},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,110133,110134],{"class":78,"line":1660},[76,110135,103389],{"class":126},[76,110137,110138],{"class":78,"line":1683},[76,110139,103394],{"class":126},[76,110141,110142],{"class":78,"line":1698},[76,110143,103399],{"class":126},[76,110145,110146],{"class":78,"line":1711},[76,110147,97720],{"class":126},[76,110149,110150],{"class":78,"line":1717},[76,110151,149],{"emptyLinePlaceholder":148},[76,110153,110154],{"class":78,"line":1728},[76,110155,149],{"emptyLinePlaceholder":148},[76,110157,110158,110160,110162,110164,110166],{"class":78,"line":1740},[76,110159,83],{"class":82},[76,110161,4069],{"class":86},[76,110163,103420],{"class":90},[76,110165,489],{"class":119},[76,110167,590],{"class":90},[76,110169,110170,110172,110174,110176,110178],{"class":78,"line":1746},[76,110171,103429],{"class":90},[76,110173,370],{"class":82},[76,110175,103434],{"class":90},[76,110177,103336],{"class":119},[76,110179,130],{"class":90},[76,110181,110182,110184,110186],{"class":78,"line":1751},[76,110183,103443],{"class":90},[76,110185,370],{"class":82},[76,110187,103448],{"class":90},[76,110189,110190],{"class":78,"line":1756},[76,110191,149],{"emptyLinePlaceholder":148},[76,110193,110194,110196,110198,110200],{"class":78,"line":1766},[76,110195,36216],{"class":82},[76,110197,109858],{"class":90},[76,110199,33426],{"class":82},[76,110201,109863],{"class":90},[76,110203,110204,110207,110210,110212,110215,110217,110220],{"class":78,"line":1773},[76,110205,110206],{"class":82},"        while",[76,110208,110209],{"class":90}," viewer.is_running() ",[76,110211,32507],{"class":82},[76,110213,110214],{"class":90}," data.time ",[76,110216,584],{"class":82},[76,110218,110219],{"class":119}," 5.0",[76,110221,590],{"class":90},[76,110223,110224,110227,110229],{"class":78,"line":1793},[76,110225,110226],{"class":90},"            step_start ",[76,110228,370],{"class":82},[76,110230,110231],{"class":90}," time.time()\n",[76,110233,110234],{"class":78,"line":1806},[76,110235,110236],{"class":90},"            mujoco.mj_step(model, data)\n",[76,110238,110239],{"class":78,"line":1817},[76,110240,110241],{"class":90},"            viewer.sync()\n",[76,110243,110244],{"class":78,"line":1822},[76,110245,149],{"emptyLinePlaceholder":148},[76,110247,110248,110251,110253,110255,110257,110259,110261],{"class":78,"line":1835},[76,110249,110250],{"class":90},"            sleep_time ",[76,110252,370],{"class":82},[76,110254,109982],{"class":90},[76,110256,666],{"class":82},[76,110258,109987],{"class":90},[76,110260,666],{"class":82},[76,110262,109992],{"class":90},[76,110264,110265,110267,110270,110272,110274],{"class":78,"line":1847},[76,110266,6724],{"class":82},[76,110268,110269],{"class":90}," sleep_time ",[76,110271,1829],{"class":82},[76,110273,587],{"class":119},[76,110275,590],{"class":90},[76,110277,110278],{"class":78,"line":1852},[76,110279,110280],{"class":90},"                time.sleep(sleep_time)\n",[76,110282,110283],{"class":78,"line":1862},[76,110284,149],{"emptyLinePlaceholder":148},[76,110286,110287],{"class":78,"line":1874},[76,110288,149],{"emptyLinePlaceholder":148},[76,110290,110291,110293,110295,110297,110299],{"class":78,"line":1879},[76,110292,723],{"class":82},[76,110294,33264],{"class":119},[76,110296,103581],{"class":82},[76,110298,103584],{"class":126},[76,110300,590],{"class":90},[76,110302,110303],{"class":78,"line":1884},[76,110304,103591],{"class":90},[19,110306,105592],{},[66,110308,110310],{"className":25871,"code":110309,"language":25873,"meta":71,"style":71},"touch ch5_viewer.py\n",[73,110311,110312],{"__ignoreMap":71},[76,110313,110314,110316],{"class":78,"line":79},[76,110315,103305],{"class":86},[76,110317,110318],{"class":126}," ch5_viewer.py\n",[19,110320,110321],{},"离屏 Renderer 保存图片:",[66,110323,110325],{"className":68,"code":110324,"language":70,"meta":71,"style":71},"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",[73,110326,110327,110339,110343,110349,110359,110363,110367,110375,110380,110384,110388,110392,110396,110401,110405,110409,110413,110417,110421,110425,110429,110433,110437,110441,110445,110457,110469,110477,110502,110506,110522,110526,110530,110545,110554,110558,110572,110577,110582,110586,110598,110610,110614,110618,110630],{"__ignoreMap":71},[76,110328,110329,110331,110334,110336],{"class":78,"line":79},[76,110330,32781],{"class":82},[76,110332,110333],{"class":90}," pathlib ",[76,110335,32438],{"class":82},[76,110337,110338],{"class":90}," Path\n",[76,110340,110341],{"class":78,"line":94},[76,110342,149],{"emptyLinePlaceholder":148},[76,110344,110345,110347],{"class":78,"line":133},[76,110346,32438],{"class":82},[76,110348,103323],{"class":90},[76,110350,110351,110353,110355,110357],{"class":78,"line":145},[76,110352,32781],{"class":82},[76,110354,49297],{"class":119},[76,110356,49300],{"class":82},[76,110358,49303],{"class":90},[76,110360,110361],{"class":78,"line":152},[76,110362,149],{"emptyLinePlaceholder":148},[76,110364,110365],{"class":78,"line":157},[76,110366,149],{"emptyLinePlaceholder":148},[76,110368,110369,110371,110373],{"class":78,"line":246},[76,110370,103336],{"class":119},[76,110372,15617],{"class":82},[76,110374,103341],{"class":126},[76,110376,110377],{"class":78,"line":251},[76,110378,110379],{"class":126},"\u003Cmujoco model=\"renderer_demo\">\n",[76,110381,110382],{"class":78,"line":257},[76,110383,103351],{"class":126},[76,110385,110386],{"class":78,"line":641},[76,110387,149],{"emptyLinePlaceholder":148},[76,110389,110390],{"class":78,"line":646},[76,110391,103360],{"class":126},[76,110393,110394],{"class":78,"line":659},[76,110395,110109],{"class":126},[76,110397,110398],{"class":78,"line":1608},[76,110399,110400],{"class":126},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[76,110402,110403],{"class":78,"line":1632},[76,110404,110114],{"class":126},[76,110406,110407],{"class":78,"line":1637},[76,110408,149],{"emptyLinePlaceholder":148},[76,110410,110411],{"class":78,"line":1642},[76,110412,103374],{"class":126},[76,110414,110415],{"class":78,"line":1652},[76,110416,103379],{"class":126},[76,110418,110419],{"class":78,"line":1660},[76,110420,110131],{"class":126},[76,110422,110423],{"class":78,"line":1683},[76,110424,103389],{"class":126},[76,110426,110427],{"class":78,"line":1698},[76,110428,103394],{"class":126},[76,110430,110431],{"class":78,"line":1711},[76,110432,103399],{"class":126},[76,110434,110435],{"class":78,"line":1717},[76,110436,97720],{"class":126},[76,110438,110439],{"class":78,"line":1728},[76,110440,149],{"emptyLinePlaceholder":148},[76,110442,110443],{"class":78,"line":1740},[76,110444,149],{"emptyLinePlaceholder":148},[76,110446,110447,110449,110451,110453,110455],{"class":78,"line":1746},[76,110448,83],{"class":82},[76,110450,4069],{"class":86},[76,110452,103420],{"class":90},[76,110454,489],{"class":119},[76,110456,590],{"class":90},[76,110458,110459,110461,110463,110465,110467],{"class":78,"line":1751},[76,110460,103429],{"class":90},[76,110462,370],{"class":82},[76,110464,103434],{"class":90},[76,110466,103336],{"class":119},[76,110468,130],{"class":90},[76,110470,110471,110473,110475],{"class":78,"line":1756},[76,110472,103443],{"class":90},[76,110474,370],{"class":82},[76,110476,103448],{"class":90},[76,110478,110479,110482,110484,110486,110488,110490,110492,110494,110496,110498,110500],{"class":78,"line":1766},[76,110480,110481],{"class":90},"    renderer ",[76,110483,370],{"class":82},[76,110485,109896],{"class":90},[76,110487,27031],{"class":7296},[76,110489,370],{"class":82},[76,110491,44377],{"class":119},[76,110493,405],{"class":90},[76,110495,27027],{"class":7296},[76,110497,370],{"class":82},[76,110499,109911],{"class":119},[76,110501,130],{"class":90},[76,110503,110504],{"class":78,"line":1773},[76,110505,149],{"emptyLinePlaceholder":148},[76,110507,110508,110510,110512,110514,110516,110518,110520],{"class":78,"line":1793},[76,110509,1469],{"class":82},[76,110511,103523],{"class":90},[76,110513,1475],{"class":82},[76,110515,34483],{"class":119},[76,110517,123],{"class":90},[76,110519,2575],{"class":119},[76,110521,32830],{"class":90},[76,110523,110524],{"class":78,"line":1806},[76,110525,103538],{"class":90},[76,110527,110528],{"class":78,"line":1817},[76,110529,149],{"emptyLinePlaceholder":148},[76,110531,110532,110535,110538,110540,110543],{"class":78,"line":1822},[76,110533,110534],{"class":90},"    renderer.update_scene(data, ",[76,110536,110537],{"class":7296},"camera",[76,110539,370],{"class":82},[76,110541,110542],{"class":126},"\"fixed_camera\"",[76,110544,130],{"class":90},[76,110546,110547,110550,110552],{"class":78,"line":1835},[76,110548,110549],{"class":90},"    image ",[76,110551,370],{"class":82},[76,110553,109607],{"class":90},[76,110555,110556],{"class":78,"line":1847},[76,110557,149],{"emptyLinePlaceholder":148},[76,110559,110560,110563,110565,110568,110570],{"class":78,"line":1852},[76,110561,110562],{"class":90},"    output_path ",[76,110564,370],{"class":82},[76,110566,110567],{"class":90}," Path(",[76,110569,110037],{"class":126},[76,110571,130],{"class":90},[76,110573,110574],{"class":78,"line":1862},[76,110575,110576],{"class":90},"    Image.fromarray(image).save(output_path)\n",[76,110578,110579],{"class":78,"line":1874},[76,110580,110581],{"class":90},"    renderer.close()\n",[76,110583,110584],{"class":78,"line":1879},[76,110585,149],{"emptyLinePlaceholder":148},[76,110587,110588,110590,110592,110595],{"class":78,"line":1884},[76,110589,120],{"class":119},[76,110591,123],{"class":90},[76,110593,110594],{"class":126},"\"saved:\"",[76,110596,110597],{"class":90},", output_path.resolve())\n",[76,110599,110600,110602,110604,110607],{"class":78,"line":1889},[76,110601,120],{"class":119},[76,110603,123],{"class":90},[76,110605,110606],{"class":126},"\"image shape:\"",[76,110608,110609],{"class":90},", image.shape)\n",[76,110611,110612],{"class":78,"line":1900},[76,110613,149],{"emptyLinePlaceholder":148},[76,110615,110616],{"class":78,"line":1906},[76,110617,149],{"emptyLinePlaceholder":148},[76,110619,110620,110622,110624,110626,110628],{"class":78,"line":1924},[76,110621,723],{"class":82},[76,110623,33264],{"class":119},[76,110625,103581],{"class":82},[76,110627,103584],{"class":126},[76,110629,590],{"class":90},[76,110631,110632],{"class":78,"line":1929},[76,110633,103591],{"class":90},[19,110635,105592],{},[66,110637,110639],{"className":25871,"code":110638,"language":25873,"meta":71,"style":71},"touch ch5_renderer.py\n",[73,110640,110641],{"__ignoreMap":71},[76,110642,110643,110645],{"class":78,"line":79},[76,110644,103305],{"class":86},[76,110646,110647],{"class":126}," ch5_renderer.py\n",[889,110649,103594],{"id":103594},[19,110651,110652],{},"viewer 上下文：",[66,110654,110656],{"className":68,"code":110655,"language":70,"meta":71,"style":71},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[73,110657,110658],{"__ignoreMap":71},[76,110659,110660,110662,110664,110666],{"class":78,"line":79},[76,110661,109855],{"class":82},[76,110663,109858],{"class":90},[76,110665,33426],{"class":82},[76,110667,109863],{"class":90},[19,110669,110670,110672],{},[73,110671,109855],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110674,110675],{},"窗口循环：",[66,110677,110679],{"className":68,"code":110678,"language":70,"meta":71,"style":71},"while viewer.is_running() and data.time \u003C 5.0:\n",[73,110680,110681],{"__ignoreMap":71},[76,110682,110683,110685,110687,110689,110691,110693,110695],{"class":78,"line":79},[76,110684,1892],{"class":82},[76,110686,110209],{"class":90},[76,110688,32507],{"class":82},[76,110690,110214],{"class":90},[76,110692,584],{"class":82},[76,110694,110219],{"class":119},[76,110696,590],{"class":90},[19,110698,110699],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110701,110702],{},"固定相机：",[66,110704,110706],{"className":55099,"code":110705,"language":55101,"meta":71,"style":71},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[73,110707,110708],{"__ignoreMap":71},[76,110709,110710,110712,110714,110716,110718,110720,110722,110724,110727,110730,110732,110735],{"class":78,"line":79},[76,110711,584],{"class":90},[76,110713,110537],{"class":53332},[76,110715,16972],{"class":86},[76,110717,370],{"class":90},[76,110719,110542],{"class":126},[76,110721,103128],{"class":86},[76,110723,370],{"class":90},[76,110725,110726],{"class":126},"\"1.5 -2.0 1.2\"",[76,110728,110729],{"class":86}," xyaxes",[76,110731,370],{"class":90},[76,110733,110734],{"class":126},"\"1 0.75 0 0 0 1\"",[76,110736,103166],{"class":90},[19,110738,110739],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[889,110741,110743],{"id":110742},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[66,110745,110747],{"className":68,"code":110746,"language":70,"meta":71,"style":71},"import time\n",[73,110748,110749],{"__ignoreMap":71},[76,110750,110751,110753],{"class":78,"line":79},[76,110752,32438],{"class":82},[76,110754,33871],{"class":90},[19,110756,110757],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[66,110759,110761],{"className":68,"code":110760,"language":70,"meta":71,"style":71},"import mujoco\nimport mujoco.viewer\n",[73,110762,110763,110769],{"__ignoreMap":71},[76,110764,110765,110767],{"class":78,"line":79},[76,110766,32438],{"class":82},[76,110768,103323],{"class":90},[76,110770,110771,110773],{"class":78,"line":94},[76,110772,32438],{"class":82},[76,110774,109574],{"class":90},[19,110776,110777],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[66,110779,110780],{"className":68,"code":110655,"language":70,"meta":71,"style":71},[73,110781,110782],{"__ignoreMap":71},[76,110783,110784,110786,110788,110790],{"class":78,"line":79},[76,110785,109855],{"class":82},[76,110787,109858],{"class":90},[76,110789,33426],{"class":82},[76,110791,109863],{"class":90},[19,110793,110794,110795,110798],{},"打开一个 viewer 窗口。",[73,110796,110797],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[66,110800,110801],{"className":68,"code":110678,"language":70,"meta":71,"style":71},[73,110802,110803],{"__ignoreMap":71},[76,110804,110805,110807,110809,110811,110813,110815,110817],{"class":78,"line":79},[76,110806,1892],{"class":82},[76,110808,110209],{"class":90},[76,110810,32507],{"class":82},[76,110812,110214],{"class":90},[76,110814,584],{"class":82},[76,110816,110219],{"class":119},[76,110818,590],{"class":90},[19,110820,110821,110822,110825],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[73,110823,110824],{},"viewer.is_running()"," 会变成 false，循环结束。",[66,110827,110829],{"className":68,"code":110828,"language":70,"meta":71,"style":71},"step_start = time.time()\n",[73,110830,110831],{"__ignoreMap":71},[76,110832,110833,110836,110838],{"class":78,"line":79},[76,110834,110835],{"class":90},"step_start ",[76,110837,370],{"class":82},[76,110839,110231],{"class":90},[19,110841,110842],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[66,110844,110845],{"className":68,"code":109940,"language":70,"meta":71,"style":71},[73,110846,110847,110851],{"__ignoreMap":71},[76,110848,110849],{"class":78,"line":79},[76,110850,106527],{"class":90},[76,110852,110853],{"class":78,"line":94},[76,110854,109951],{"class":90},[19,110856,110857,110859,110860,110862,110863,110865,110866,110869],{},[73,110858,103237],{}," 推进物理仿真。",[73,110861,109959],{}," 把最新的 ",[73,110864,35439],{}," 同步到窗口里显示。没有 ",[73,110867,110868],{},"sync()","，窗口可能看不到最新状态。",[66,110871,110872],{"className":68,"code":109970,"language":70,"meta":71,"style":71},[73,110873,110874],{"__ignoreMap":71},[76,110875,110876,110878,110880,110882,110884,110886,110888],{"class":78,"line":79},[76,110877,109977],{"class":90},[76,110879,370],{"class":82},[76,110881,109982],{"class":90},[76,110883,666],{"class":82},[76,110885,109987],{"class":90},[76,110887,666],{"class":82},[76,110889,109992],{"class":90},[19,110891,110892],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[66,110894,110896],{"className":68,"code":110895,"language":70,"meta":71,"style":71},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[73,110897,110898,110910],{"__ignoreMap":71},[76,110899,110900,110902,110904,110906,110908],{"class":78,"line":79},[76,110901,723],{"class":82},[76,110903,110269],{"class":90},[76,110905,1829],{"class":82},[76,110907,587],{"class":119},[76,110909,590],{"class":90},[76,110911,110912],{"class":78,"line":94},[76,110913,110914],{"class":90},"    time.sleep(sleep_time)\n",[19,110916,110917],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[889,110919,110921],{"id":110920},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[66,110923,110925],{"className":68,"code":110924,"language":70,"meta":71,"style":71},"from pathlib import Path\n",[73,110926,110927],{"__ignoreMap":71},[76,110928,110929,110931,110933,110935],{"class":78,"line":79},[76,110930,32781],{"class":82},[76,110932,110333],{"class":90},[76,110934,32438],{"class":82},[76,110936,110338],{"class":90},[19,110938,110939,110940,110943,110944,110947],{},"导入 ",[73,110941,110942],{},"Path","，用来处理文件路径。相比直接写字符串，",[73,110945,110946],{},"Path(\"render_output.png\")"," 更清晰。",[66,110949,110951],{"className":68,"code":110950,"language":70,"meta":71,"style":71},"from PIL import Image\n",[73,110952,110953],{"__ignoreMap":71},[76,110954,110955,110957,110959,110961],{"class":78,"line":79},[76,110956,32781],{"class":82},[76,110958,49297],{"class":119},[76,110960,49300],{"class":82},[76,110962,49303],{"class":90},[19,110964,110965],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[66,110967,110968],{"className":55099,"code":110705,"language":55101,"meta":71,"style":71},[73,110969,110970],{"__ignoreMap":71},[76,110971,110972,110974,110976,110978,110980,110982,110984,110986,110988,110990,110992,110994],{"class":78,"line":79},[76,110973,584],{"class":90},[76,110975,110537],{"class":53332},[76,110977,16972],{"class":86},[76,110979,370],{"class":90},[76,110981,110542],{"class":126},[76,110983,103128],{"class":86},[76,110985,370],{"class":90},[76,110987,110726],{"class":126},[76,110989,110729],{"class":86},[76,110991,370],{"class":90},[76,110993,110734],{"class":126},[76,110995,103166],{"class":90},[19,110997,110998,110999,111001,111002,111004,111005,111008,111009,111011],{},"定义一个相机。",[73,111000,301],{}," 是相机名字。",[73,111003,106168],{}," 是相机在世界里的位置。",[73,111006,111007],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[73,111010,106168],{}," 来调视角。",[66,111013,111015],{"className":68,"code":111014,"language":70,"meta":71,"style":71},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[73,111016,111017],{"__ignoreMap":71},[76,111018,111019,111021,111023,111025,111027,111029,111031,111033,111035,111037,111039],{"class":78,"line":79},[76,111020,109592],{"class":90},[76,111022,370],{"class":82},[76,111024,109896],{"class":90},[76,111026,27031],{"class":7296},[76,111028,370],{"class":82},[76,111030,44377],{"class":119},[76,111032,405],{"class":90},[76,111034,27027],{"class":7296},[76,111036,370],{"class":82},[76,111038,109911],{"class":119},[76,111040,130],{"class":90},[19,111042,111043,111044,103040,111046,111048],{},"创建离屏渲染器。",[73,111045,27031],{},[73,111047,27027],{}," 决定输出图片大小。",[66,111050,111051],{"className":68,"code":103698,"language":70,"meta":71,"style":71},[73,111052,111053,111069],{"__ignoreMap":71},[76,111054,111055,111057,111059,111061,111063,111065,111067],{"class":78,"line":79},[76,111056,5112],{"class":82},[76,111058,103523],{"class":90},[76,111060,1475],{"class":82},[76,111062,34483],{"class":119},[76,111064,123],{"class":90},[76,111066,2575],{"class":119},[76,111068,32830],{"class":90},[76,111070,111071],{"class":78,"line":94},[76,111072,103721],{"class":90},[19,111074,111075],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[66,111077,111079],{"className":68,"code":111078,"language":70,"meta":71,"style":71},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[73,111080,111081],{"__ignoreMap":71},[76,111082,111083,111086,111088,111090,111092],{"class":78,"line":79},[76,111084,111085],{"class":90},"renderer.update_scene(data, ",[76,111087,110537],{"class":7296},[76,111089,370],{"class":82},[76,111091,110542],{"class":126},[76,111093,130],{"class":90},[19,111095,111096,111097,111099,111100,111103],{},"告诉 renderer：用当前 ",[73,111098,35439],{}," 的状态更新画面，并使用名为 ",[73,111101,111102],{},"fixed_camera"," 的相机视角。",[66,111105,111106],{"className":68,"code":110002,"language":70,"meta":71,"style":71},[73,111107,111108],{"__ignoreMap":71},[76,111109,111110,111112,111114],{"class":78,"line":79},[76,111111,109602],{"class":90},[76,111113,370],{"class":82},[76,111115,109607],{"class":90},[19,111117,111118,111119,111122],{},"真正渲染出图像。",[73,111120,111121],{},"image"," 是一个 NumPy 数组，不是文件。",[66,111124,111126],{"className":68,"code":111125,"language":70,"meta":71,"style":71},"Image.fromarray(image).save(output_path)\n",[73,111127,111128],{"__ignoreMap":71},[76,111129,111130],{"class":78,"line":79},[76,111131,111125],{"class":90},[19,111133,111134,111135,490],{},"把数组转换成图片，并保存到 ",[73,111136,111137],{},"render_output.png",[66,111139,111141],{"className":68,"code":111140,"language":70,"meta":71,"style":71},"renderer.close()\n",[73,111142,111143],{"__ignoreMap":71},[76,111144,111145],{"class":78,"line":79},[76,111146,111140],{"class":90},[19,111148,111149],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111151,104338],{"id":104337},[19,111153,111154,111155,111157,111158,490],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[73,111156,111137],{},"，并输出图像数组形状，例如 ",[73,111159,111160],{},"(480, 640, 3)",[19,111162,111163],{},"如果图片里看不到方块，先检查：",[26,111165,111166,111169,111172],{},[29,111167,111168],{},"方块是否掉到相机视野外。",[29,111170,111171],{},"camera 位置是否合理。",[29,111173,111174,111175,111178],{},"是否在 ",[73,111176,111177],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111180,104370],{"id":104369},[19,111182,111183],{},"运行 viewer:",[66,111185,111187],{"className":25871,"code":111186,"language":25873,"meta":71,"style":71},"python ch5_viewer.py\n",[73,111188,111189],{"__ignoreMap":71},[76,111190,111191,111193],{"class":78,"line":79},[76,111192,70],{"class":86},[76,111194,110318],{"class":126},[19,111196,111197],{},"运行 renderer:",[66,111199,111201],{"className":25871,"code":111200,"language":25873,"meta":71,"style":71},"python ch5_renderer.py\n",[73,111202,111203],{"__ignoreMap":71},[76,111204,111205,111207],{"class":78,"line":79},[76,111206,70],{"class":86},[76,111208,110647],{"class":126},[19,111210,111211],{},"如果在服务器上运行:",[66,111213,111215],{"className":25871,"code":111214,"language":25873,"meta":71,"style":71},"MUJOCO_GL=egl python ch5_renderer.py\n",[73,111216,111217],{"__ignoreMap":71},[76,111218,111219,111221,111223,111225,111228],{"class":78,"line":79},[76,111220,109836],{"class":90},[76,111222,370],{"class":82},[76,111224,109826],{"class":126},[76,111226,111227],{"class":86}," python",[76,111229,110647],{"class":126},[19,111231,109804],{},[66,111233,111235],{"className":25871,"code":111234,"language":25873,"meta":71,"style":71},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[73,111236,111237],{"__ignoreMap":71},[76,111238,111239,111241,111243,111245,111247],{"class":78,"line":79},[76,111240,109836],{"class":90},[76,111242,370],{"class":82},[76,111244,109830],{"class":126},[76,111246,111227],{"class":86},[76,111248,110647],{"class":126},[19,111250,111251],{},"再做几个练习：",[26,111253,111254,111261,111264,111270],{},[29,111255,111256,111257,111260],{},"把 renderer 分辨率改成 ",[73,111258,111259],{},"height=240, width=320","，观察输出 shape。",[29,111262,111263],{},"把方块颜色改成蓝色，重新保存图片。",[29,111265,111266,111267,111269],{},"把相机 ",[73,111268,106168],{}," 改远一点，观察画面中物体是否变小。",[29,111271,111272,111273,104436,111276,111279],{},"把 viewer 示例中的 ",[73,111274,111275],{},"data.time \u003C 5.0",[73,111277,111278],{},"data.time \u003C 20.0","，观察更长时间。",[14,111281,104475],{"id":104474},[889,111283,111285],{"id":111284},"viewer-窗口打不开","viewer 窗口打不开",[19,111287,111288],{},"安装:",[66,111290,111292],{"className":25871,"code":111291,"language":25873,"meta":71,"style":71},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[73,111293,111294],{"__ignoreMap":71},[76,111295,111296,111298,111300,111302,111304,111306,111308,111310,111312,111314,111316],{"class":78,"line":79},[76,111297,26626],{"class":86},[76,111299,28364],{"class":126},[76,111301,25883],{"class":126},[76,111303,28449],{"class":119},[76,111305,104528],{"class":126},[76,111307,102856],{"class":126},[76,111309,104533],{"class":126},[76,111311,102869],{"class":126},[76,111313,102875],{"class":126},[76,111315,102866],{"class":126},[76,111317,111318],{"class":126}," libXinerama\n",[889,111320,111322],{"id":111321},"glfwerror",[73,111323,111324],{},"GLFWError",[19,111326,111327],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[889,111329,111331],{"id":111330},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111333,111334,111335,84563,111337,111339],{},"尝试 ",[73,111336,103059],{},[73,111338,103062],{},"。可能存在版本差异。",[889,111341,111342],{"id":111342},"保存图片是黑的",[19,111344,104597],{},[26,111346,111347,111350,111353,111363],{},[29,111348,111349],{},"XML 里是否有 light。",[29,111351,111352],{},"相机是否对着模型。",[29,111354,111355,111356,111359,111360,490],{},"是否先 ",[73,111357,111358],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[73,111361,111362],{},"renderer.render()",[29,111364,111365],{},"物体是否已经掉出视野。",[889,111367,111368],{"id":111368},"远程服务器没有显示器",[19,111370,111371],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[66,111373,111374],{"className":25871,"code":111214,"language":25873,"meta":71,"style":71},[73,111375,111376],{"__ignoreMap":71},[76,111377,111378,111380,111382,111384,111386],{"class":78,"line":79},[76,111379,109836],{"class":90},[76,111381,370],{"class":82},[76,111383,109826],{"class":126},[76,111385,111227],{"class":86},[76,111387,110647],{"class":126},[19,111389,111390],{},"如果 EGL 不可用，再尝试：",[66,111392,111393],{"className":25871,"code":111234,"language":25873,"meta":71,"style":71},[73,111394,111395],{"__ignoreMap":71},[76,111396,111397,111399,111401,111403,111405],{"class":78,"line":79},[76,111398,109836],{"class":90},[76,111400,370],{"class":82},[76,111402,109830],{"class":126},[76,111404,111227],{"class":86},[76,111406,110647],{"class":126},[14,111408,104629],{"id":104628},[19,111410,111411],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,111413,111414,111417,111420],{},[29,111415,111416],{},"先用 viewer 看模型和控制是否正常。",[29,111418,111419],{},"再用 renderer 保存图片或构造视觉观测。",[29,111421,111422],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2178,111424,111425],{},"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":71,"searchDepth":94,"depth":94,"links":111427},[111428,111429,111430,111435,111440,111441,111442,111449],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":111431},[111432,111433,111434],{"id":109933,"depth":133,"text":109934},{"id":109963,"depth":133,"text":109964},{"id":109998,"depth":133,"text":109999},{"id":103274,"depth":94,"text":103275,"children":111436},[111437,111438,111439],{"id":103594,"depth":133,"text":103594},{"id":110742,"depth":133,"text":110743},{"id":110920,"depth":133,"text":110921},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":111443},[111444,111445,111446,111447,111448],{"id":111284,"depth":133,"text":111285},{"id":111321,"depth":133,"text":111324},{"id":111330,"depth":133,"text":111331},{"id":111342,"depth":133,"text":111342},{"id":111368,"depth":133,"text":111368},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109541,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111456,"title":111457,"body":111458,"description":71,"extension":2202,"meta":113368,"navigation":148,"path":113369,"seo":113370,"stem":113371,"__hash__":113372},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111459,"toc":113344},[111460,111463,111465,111468,111470,111489,111492,111498,111501,111503,111505,111529,111531,111545,111547,111588,111590,111601,111603,111606,111612,111615,111649,111652,111684,111687,111719,111723,111726,111766,111769,111775,111778,111784,111788,111791,111797,111800,111804,111807,111846,111848,111861,111864,111866,112448,112450,112462,112465,112476,112478,112481,112500,112512,112515,112536,112539,112542,112585,112588,112591,112611,112618,112620,112638,112653,112656,112662,112665,112671,112688,112695,112726,112737,112771,112782,112799,112808,112816,112821,112835,112838,112859,112865,112879,112884,112914,112924,112949,112957,112980,112983,112999,113002,113010,113016,113038,113051,113072,113081,113120,113131,113133,113136,113142,113145,113148,113154,113157,113177,113180,113182,113221,113223,113226,113234,113237,113240,113267,113270,113280,113286,113289,113295,113297,113303,113307,113310,113312,113315,113339,113342],[10,111461,111457],{"id":111462},"_6控制任务cartpole",[14,111464,102669],{"id":102668},[19,111466,111467],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111469,106353],{},[26,111471,111472,111475,111477,111480,111483,111486],{},[29,111473,111474],{},"slide joint",[29,111476,108206],{},[29,111478,111479],{},"cart force actuator",[29,111481,111482],{},"状态观测",[29,111484,111485],{},"简单控制循环",[29,111487,111488],{},"reward 设计雏形",[19,111490,111491],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[66,111493,111496],{"className":111494,"code":111495,"language":7268,"meta":71},[7266],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[73,111497,111495],{"__ignoreMap":71},[19,111499,111500],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111502,102792],{"id":102791},[19,111504,102795],{},[66,111506,111507],{"className":25871,"code":106410,"language":25873,"meta":71,"style":71},[73,111508,111509],{"__ignoreMap":71},[76,111510,111511,111513,111515,111517,111519,111521,111523,111525,111527],{"class":78,"line":79},[76,111512,26626],{"class":86},[76,111514,28364],{"class":126},[76,111516,25883],{"class":126},[76,111518,28449],{"class":119},[76,111520,106425],{"class":126},[76,111522,102820],{"class":126},[76,111524,104523],{"class":126},[76,111526,102836],{"class":126},[76,111528,106434],{"class":126},[19,111530,104841],{},[66,111532,111533],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},[73,111534,111535],{"__ignoreMap":71},[76,111536,111537,111539,111541,111543],{"class":78,"line":79},[76,111538,25880],{"class":86},[76,111540,25883],{"class":126},[76,111542,102952],{"class":126},[76,111544,102955],{"class":126},[19,111546,104858],{},[66,111548,111550],{"className":25871,"code":111549,"language":25873,"meta":71,"style":71},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[73,111551,111552,111569,111578],{"__ignoreMap":71},[76,111553,111554,111556,111558,111560,111563,111565,111567],{"class":78,"line":79},[76,111555,32378],{"class":86},[76,111557,31224],{"class":126},[76,111559,27165],{"class":119},[76,111561,111562],{"class":126}," mujoco-cartpole",[76,111564,102997],{"class":126},[76,111566,103000],{"class":119},[76,111568,103003],{"class":119},[76,111570,111571,111573,111575],{"class":78,"line":94},[76,111572,32378],{"class":86},[76,111574,103010],{"class":126},[76,111576,111577],{"class":126}," mujoco-cartpole\n",[76,111579,111580,111582,111584,111586],{"class":78,"line":133},[76,111581,25880],{"class":86},[76,111583,25883],{"class":126},[76,111585,102952],{"class":126},[76,111587,102955],{"class":126},[19,111589,103026],{},[26,111591,111592,111595,111598],{},[29,111593,111594],{},"本章不依赖 Gymnasium。",[29,111596,111597],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,111599,111600],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111602,103067],{"id":103066},[19,111604,111605],{},"Cartpole 的模型结构:",[66,111607,111610],{"className":111608,"code":111609,"language":7268,"meta":71},[7266],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[73,111611,111609],{"__ignoreMap":71},[19,111613,111614],{},"小车通过 slide joint 左右移动:",[66,111616,111618],{"className":55099,"code":111617,"language":55101,"meta":71,"style":71},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[73,111619,111620],{"__ignoreMap":71},[76,111621,111622,111624,111626,111628,111630,111633,111635,111637,111640,111642,111644,111647],{"class":78,"line":79},[76,111623,584],{"class":90},[76,111625,104978],{"class":53332},[76,111627,16972],{"class":86},[76,111629,370],{"class":90},[76,111631,111632],{"class":126},"\"cart_x\"",[76,111634,55855],{"class":86},[76,111636,370],{"class":90},[76,111638,111639],{"class":126},"\"slide\"",[76,111641,108050],{"class":86},[76,111643,370],{"class":90},[76,111645,111646],{"class":126},"\"1 0 0\"",[76,111648,103166],{"class":90},[19,111650,111651],{},"杆子通过 hinge joint 旋转:",[66,111653,111655],{"className":55099,"code":111654,"language":55101,"meta":71,"style":71},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,111656,111657],{"__ignoreMap":71},[76,111658,111659,111661,111663,111665,111667,111670,111672,111674,111676,111678,111680,111682],{"class":78,"line":79},[76,111660,584],{"class":90},[76,111662,104978],{"class":53332},[76,111664,16972],{"class":86},[76,111666,370],{"class":90},[76,111668,111669],{"class":126},"\"pole_hinge\"",[76,111671,55855],{"class":86},[76,111673,370],{"class":90},[76,111675,108041],{"class":126},[76,111677,108050],{"class":86},[76,111679,370],{"class":90},[76,111681,108055],{"class":126},[76,111683,103166],{"class":90},[19,111685,111686],{},"控制力作用在小车 slide joint 上:",[66,111688,111690],{"className":55099,"code":111689,"language":55101,"meta":71,"style":71},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[73,111691,111692],{"__ignoreMap":71},[76,111693,111694,111696,111698,111700,111702,111705,111707,111709,111711,111713,111715,111717],{"class":78,"line":79},[76,111695,584],{"class":90},[76,111697,108096],{"class":53332},[76,111699,16972],{"class":86},[76,111701,370],{"class":90},[76,111703,111704],{"class":126},"\"cart_motor\"",[76,111706,108106],{"class":86},[76,111708,370],{"class":90},[76,111710,111632],{"class":126},[76,111712,108113],{"class":86},[76,111714,370],{"class":90},[76,111716,56347],{"class":126},[76,111718,103166],{"class":90},[889,111720,111722],{"id":111721},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111724,111725],{},"这个简化模型有两个关节：",[2404,111727,111728,111739],{},[2407,111729,111730],{},[2410,111731,111732,111734,111736],{},[2413,111733,104781],{"align":25785},[2413,111735,25786],{"align":25785},[2413,111737,111738],{"align":25785},"对应状态",[2451,111740,111741,111754],{},[2410,111742,111743,111748,111751],{},[2456,111744,111745],{"align":25785},[73,111746,111747],{},"cart_x",[2456,111749,111750],{"align":25785},"slide",[2456,111752,111753],{"align":25785},"小车 x 位置",[2410,111755,111756,111761,111763],{},[2456,111757,111758],{"align":25785},[73,111759,111760],{},"pole_hinge",[2456,111762,107862],{"align":25785},[2456,111764,111765],{"align":25785},"杆子角度",[19,111767,111768],{},"所以：",[66,111770,111773],{"className":111771,"code":111772,"language":7268,"meta":71},[7266],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[73,111774,111772],{"__ignoreMap":71},[19,111776,111777],{},"把它们拼起来就是观测：",[66,111779,111782],{"className":111780,"code":111781,"language":7268,"meta":71},[7266],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,111783,111781],{"__ignoreMap":71},[889,111785,111787],{"id":111786},"action-是什么","action 是什么",[19,111789,111790],{},"本章只有一个 actuator：",[66,111792,111795],{"className":111793,"code":111794,"language":7268,"meta":71},[7266],"data.ctrl[0] = action\n",[73,111796,111794],{"__ignoreMap":71},[19,111798,111799],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[889,111801,111803],{"id":111802},"reward-是什么","reward 是什么",[19,111805,111806],{},"奖励函数：",[66,111808,111810],{"className":68,"code":111809,"language":70,"meta":71,"style":71},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[73,111811,111812],{"__ignoreMap":71},[76,111813,111814,111816,111818,111820,111822,111824,111827,111829,111832,111834,111836,111838,111841,111843],{"class":78,"line":79},[76,111815,422],{"class":82},[76,111817,1668],{"class":119},[76,111819,123],{"class":90},[76,111821,104425],{"class":119},[76,111823,54303],{"class":82},[76,111825,111826],{"class":119}," 0.1",[76,111828,1119],{"class":82},[76,111830,111831],{"class":90}," cart_x ",[76,111833,2718],{"class":82},[76,111835,111831],{"class":90},[76,111837,666],{"class":82},[76,111839,111840],{"class":90}," pole_angle ",[76,111842,2718],{"class":82},[76,111844,111845],{"class":90}," pole_angle)\n",[19,111847,108248],{},[26,111849,111850,111855,111858],{},[29,111851,111852,111853,490],{},"基础奖励是 ",[73,111854,104425],{},[29,111856,111857],{},"小车离中心越远，扣分越多。",[29,111859,111860],{},"杆子角度越大，扣分越多。",[19,111862,111863],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111865,103275],{"id":103274},[66,111867,111869],{"className":68,"code":111868,"language":70,"meta":71,"style":71},"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",[73,111870,111871,111877,111887,111891,111895,111903,111908,111912,111916,111920,111925,111929,111934,111939,111944,111948,111953,111958,111963,111967,111971,111975,111979,111983,111988,111992,111996,112000,112004,112008,112018,112025,112029,112033,112047,112061,112074,112104,112108,112112,112124,112136,112144,112148,112161,112165,112169,112178,112182,112198,112208,112221,112234,112238,112261,112279,112283,112295,112299,112303,112313,112323,112327,112343,112384,112388,112408,112424,112428,112432,112444],{"__ignoreMap":71},[76,111872,111873,111875],{"class":78,"line":79},[76,111874,32438],{"class":82},[76,111876,103323],{"class":90},[76,111878,111879,111881,111883,111885],{"class":78,"line":94},[76,111880,32438],{"class":82},[76,111882,33423],{"class":90},[76,111884,33426],{"class":82},[76,111886,33429],{"class":90},[76,111888,111889],{"class":78,"line":133},[76,111890,149],{"emptyLinePlaceholder":148},[76,111892,111893],{"class":78,"line":145},[76,111894,149],{"emptyLinePlaceholder":148},[76,111896,111897,111899,111901],{"class":78,"line":152},[76,111898,103336],{"class":119},[76,111900,15617],{"class":82},[76,111902,103341],{"class":126},[76,111904,111905],{"class":78,"line":157},[76,111906,111907],{"class":126},"\u003Cmujoco model=\"cartpole\">\n",[76,111909,111910],{"class":78,"line":246},[76,111911,103351],{"class":126},[76,111913,111914],{"class":78,"line":251},[76,111915,149],{"emptyLinePlaceholder":148},[76,111917,111918],{"class":78,"line":257},[76,111919,103360],{"class":126},[76,111921,111922],{"class":78,"line":641},[76,111923,111924],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,111926,111927],{"class":78,"line":646},[76,111928,149],{"emptyLinePlaceholder":148},[76,111930,111931],{"class":78,"line":659},[76,111932,111933],{"class":126},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[76,111935,111936],{"class":78,"line":1608},[76,111937,111938],{"class":126},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[76,111940,111941],{"class":78,"line":1632},[76,111942,111943],{"class":126},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[76,111945,111946],{"class":78,"line":1637},[76,111947,149],{"emptyLinePlaceholder":148},[76,111949,111950],{"class":78,"line":1642},[76,111951,111952],{"class":126},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[76,111954,111955],{"class":78,"line":1652},[76,111956,111957],{"class":126},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[76,111959,111960],{"class":78,"line":1660},[76,111961,111962],{"class":126},"        \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",[76,111964,111965],{"class":78,"line":1683},[76,111966,108460],{"class":126},[76,111968,111969],{"class":78,"line":1698},[76,111970,103389],{"class":126},[76,111972,111973],{"class":78,"line":1711},[76,111974,103394],{"class":126},[76,111976,111977],{"class":78,"line":1717},[76,111978,149],{"emptyLinePlaceholder":148},[76,111980,111981],{"class":78,"line":1728},[76,111982,108477],{"class":126},[76,111984,111985],{"class":78,"line":1740},[76,111986,111987],{"class":126},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,111989,111990],{"class":78,"line":1746},[76,111991,108487],{"class":126},[76,111993,111994],{"class":78,"line":1751},[76,111995,103399],{"class":126},[76,111997,111998],{"class":78,"line":1756},[76,111999,97720],{"class":126},[76,112001,112002],{"class":78,"line":1766},[76,112003,149],{"emptyLinePlaceholder":148},[76,112005,112006],{"class":78,"line":1773},[76,112007,149],{"emptyLinePlaceholder":148},[76,112009,112010,112012,112015],{"class":78,"line":1793},[76,112011,83],{"class":82},[76,112013,112014],{"class":86}," get_observation",[76,112016,112017],{"class":90},"(data: mujoco.MjData) -> np.ndarray:\n",[76,112019,112020,112022],{"class":78,"line":1806},[76,112021,441],{"class":82},[76,112023,112024],{"class":90}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[76,112026,112027],{"class":78,"line":1817},[76,112028,149],{"emptyLinePlaceholder":148},[76,112030,112031],{"class":78,"line":1822},[76,112032,149],{"emptyLinePlaceholder":148},[76,112034,112035,112037,112040,112043,112045],{"class":78,"line":1835},[76,112036,83],{"class":82},[76,112038,112039],{"class":86}," compute_reward",[76,112041,112042],{"class":90},"(obs: np.ndarray) -> ",[76,112044,2311],{"class":119},[76,112046,590],{"class":90},[76,112048,112049,112052,112054,112057,112059],{"class":78,"line":1847},[76,112050,112051],{"class":90},"    cart_x ",[76,112053,370],{"class":82},[76,112055,112056],{"class":90}," obs[",[76,112058,1294],{"class":119},[76,112060,35284],{"class":90},[76,112062,112063,112066,112068,112070,112072],{"class":78,"line":1852},[76,112064,112065],{"class":90},"    pole_angle ",[76,112067,370],{"class":82},[76,112069,112056],{"class":90},[76,112071,669],{"class":119},[76,112073,35284],{"class":90},[76,112075,112076,112078,112080,112082,112084,112086,112088,112090,112092,112094,112096,112098,112100,112102],{"class":78,"line":1862},[76,112077,441],{"class":82},[76,112079,1668],{"class":119},[76,112081,123],{"class":90},[76,112083,104425],{"class":119},[76,112085,54303],{"class":82},[76,112087,111826],{"class":119},[76,112089,1119],{"class":82},[76,112091,111831],{"class":90},[76,112093,2718],{"class":82},[76,112095,111831],{"class":90},[76,112097,666],{"class":82},[76,112099,111840],{"class":90},[76,112101,2718],{"class":82},[76,112103,111845],{"class":90},[76,112105,112106],{"class":78,"line":1874},[76,112107,149],{"emptyLinePlaceholder":148},[76,112109,112110],{"class":78,"line":1879},[76,112111,149],{"emptyLinePlaceholder":148},[76,112113,112114,112116,112118,112120,112122],{"class":78,"line":1884},[76,112115,83],{"class":82},[76,112117,4069],{"class":86},[76,112119,103420],{"class":90},[76,112121,489],{"class":119},[76,112123,590],{"class":90},[76,112125,112126,112128,112130,112132,112134],{"class":78,"line":1889},[76,112127,103429],{"class":90},[76,112129,370],{"class":82},[76,112131,103434],{"class":90},[76,112133,103336],{"class":119},[76,112135,130],{"class":90},[76,112137,112138,112140,112142],{"class":78,"line":1900},[76,112139,103443],{"class":90},[76,112141,370],{"class":82},[76,112143,103448],{"class":90},[76,112145,112146],{"class":78,"line":1906},[76,112147,149],{"emptyLinePlaceholder":148},[76,112149,112150,112152,112154,112156,112158],{"class":78,"line":1924},[76,112151,107091],{"class":90},[76,112153,669],{"class":119},[76,112155,6525],{"class":90},[76,112157,370],{"class":82},[76,112159,112160],{"class":119}," 0.1\n",[76,112162,112163],{"class":78,"line":1929},[76,112164,107104],{"class":90},[76,112166,112167],{"class":78,"line":1944},[76,112168,149],{"emptyLinePlaceholder":148},[76,112170,112171,112174,112176],{"class":78,"line":1950},[76,112172,112173],{"class":90},"    total_reward ",[76,112175,370],{"class":82},[76,112177,106783],{"class":119},[76,112179,112180],{"class":78,"line":1965},[76,112181,149],{"emptyLinePlaceholder":148},[76,112183,112184,112186,112188,112190,112192,112194,112196],{"class":78,"line":1971},[76,112185,1469],{"class":82},[76,112187,33659],{"class":90},[76,112189,1475],{"class":82},[76,112191,34483],{"class":119},[76,112193,123],{"class":90},[76,112195,8489],{"class":119},[76,112197,32830],{"class":90},[76,112199,112200,112203,112205],{"class":78,"line":1985},[76,112201,112202],{"class":90},"        obs ",[76,112204,370],{"class":82},[76,112206,112207],{"class":90}," get_observation(data)\n",[76,112209,112210,112213,112215,112217,112219],{"class":78,"line":1991},[76,112211,112212],{"class":90},"        pole_angle ",[76,112214,370],{"class":82},[76,112216,112056],{"class":90},[76,112218,669],{"class":119},[76,112220,35284],{"class":90},[76,112222,112223,112226,112228,112230,112232],{"class":78,"line":2005},[76,112224,112225],{"class":90},"        pole_angular_velocity ",[76,112227,370],{"class":82},[76,112229,112056],{"class":90},[76,112231,2339],{"class":119},[76,112233,35284],{"class":90},[76,112235,112236],{"class":78,"line":2017},[76,112237,149],{"emptyLinePlaceholder":148},[76,112239,112240,112243,112245,112248,112250,112252,112254,112256,112258],{"class":78,"line":2023},[76,112241,112242],{"class":90},"        action ",[76,112244,370],{"class":82},[76,112246,112247],{"class":119}," 2.0",[76,112249,1119],{"class":82},[76,112251,111840],{"class":90},[76,112253,376],{"class":82},[76,112255,63895],{"class":119},[76,112257,1119],{"class":82},[76,112259,112260],{"class":90}," pole_angular_velocity\n",[76,112262,112263,112265,112267,112269,112271,112273,112275,112277],{"class":78,"line":2031},[76,112264,112242],{"class":90},[76,112266,370],{"class":82},[76,112268,109469],{"class":90},[76,112270,666],{"class":82},[76,112272,104425],{"class":119},[76,112274,405],{"class":90},[76,112276,104425],{"class":119},[76,112278,130],{"class":90},[76,112280,112281],{"class":78,"line":11880},[76,112282,149],{"emptyLinePlaceholder":148},[76,112284,112285,112287,112289,112291,112293],{"class":78,"line":11901},[76,112286,108639],{"class":90},[76,112288,1294],{"class":119},[76,112290,6525],{"class":90},[76,112292,370],{"class":82},[76,112294,109492],{"class":90},[76,112296,112297],{"class":78,"line":11907},[76,112298,103538],{"class":90},[76,112300,112301],{"class":78,"line":11921},[76,112302,149],{"emptyLinePlaceholder":148},[76,112304,112305,112308,112310],{"class":78,"line":11927},[76,112306,112307],{"class":90},"        reward ",[76,112309,370],{"class":82},[76,112311,112312],{"class":90}," compute_reward(get_observation(data))\n",[76,112314,112315,112318,112320],{"class":78,"line":11954},[76,112316,112317],{"class":90},"        total_reward ",[76,112319,1060],{"class":82},[76,112321,112322],{"class":90}," reward\n",[76,112324,112325],{"class":78,"line":11963},[76,112326,149],{"emptyLinePlaceholder":148},[76,112328,112329,112331,112333,112335,112337,112339,112341],{"class":78,"line":11969},[76,112330,4592],{"class":82},[76,112332,33659],{"class":90},[76,112334,2592],{"class":82},[76,112336,7834],{"class":119},[76,112338,103581],{"class":82},[76,112340,587],{"class":119},[76,112342,590],{"class":90},[76,112344,112345,112347,112349,112352,112355,112358,112361,112363,112366,112369,112371,112373,112375,112377,112380,112382],{"class":78,"line":11977},[76,112346,36688],{"class":119},[76,112348,123],{"class":90},[76,112350,112351],{"class":126},"\"step:\"",[76,112353,112354],{"class":90},", step, ",[76,112356,112357],{"class":126},"\"obs:\"",[76,112359,112360],{"class":90},", np.round(obs, ",[76,112362,2339],{"class":119},[76,112364,112365],{"class":90},"), ",[76,112367,112368],{"class":126},"\"action:\"",[76,112370,405],{"class":90},[76,112372,34058],{"class":119},[76,112374,123],{"class":90},[76,112376,2311],{"class":119},[76,112378,112379],{"class":90},"(action), ",[76,112381,2339],{"class":119},[76,112383,656],{"class":90},[76,112385,112386],{"class":78,"line":11982},[76,112387,149],{"emptyLinePlaceholder":148},[76,112389,112390,112392,112394,112397,112399,112401,112404,112406],{"class":78,"line":18654},[76,112391,120],{"class":119},[76,112393,123],{"class":90},[76,112395,112396],{"class":126},"\"total_reward:\"",[76,112398,405],{"class":90},[76,112400,34058],{"class":119},[76,112402,112403],{"class":90},"(total_reward, ",[76,112405,2339],{"class":119},[76,112407,656],{"class":90},[76,112409,112410,112412,112414,112417,112420,112422],{"class":78,"line":18660},[76,112411,120],{"class":119},[76,112413,123],{"class":90},[76,112415,112416],{"class":126},"\"final obs:\"",[76,112418,112419],{"class":90},", np.round(get_observation(data), ",[76,112421,2339],{"class":119},[76,112423,656],{"class":90},[76,112425,112426],{"class":78,"line":18683},[76,112427,149],{"emptyLinePlaceholder":148},[76,112429,112430],{"class":78,"line":18689},[76,112431,149],{"emptyLinePlaceholder":148},[76,112433,112434,112436,112438,112440,112442],{"class":78,"line":18712},[76,112435,723],{"class":82},[76,112437,33264],{"class":119},[76,112439,103581],{"class":82},[76,112441,103584],{"class":126},[76,112443,590],{"class":90},[76,112445,112446],{"class":78,"line":18726},[76,112447,103591],{"class":90},[19,112449,105592],{},[66,112451,112453],{"className":25871,"code":112452,"language":25873,"meta":71,"style":71},"touch ch6_cartpole.py\n",[73,112454,112455],{"__ignoreMap":71},[76,112456,112457,112459],{"class":78,"line":79},[76,112458,103305],{"class":86},[76,112460,112461],{"class":126}," ch6_cartpole.py\n",[19,112463,112464],{},"运行：",[66,112466,112468],{"className":25871,"code":112467,"language":25873,"meta":71,"style":71},"python ch6_cartpole.py\n",[73,112469,112470],{"__ignoreMap":71},[76,112471,112472,112474],{"class":78,"line":79},[76,112473,70],{"class":86},[76,112475,112461],{"class":126},[889,112477,103594],{"id":103594},[19,112479,112480],{},"构造观测：",[66,112482,112484],{"className":68,"code":112483,"language":70,"meta":71,"style":71},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[73,112485,112486,112494],{"__ignoreMap":71},[76,112487,112488,112490,112492],{"class":78,"line":79},[76,112489,83],{"class":82},[76,112491,112014],{"class":86},[76,112493,112017],{"class":90},[76,112495,112496,112498],{"class":78,"line":94},[76,112497,441],{"class":82},[76,112499,112024],{"class":90},[19,112501,112502,112505,112506,112508,112509,112511],{},[73,112503,112504],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[73,112507,106052],{}," 2 维，",[73,112510,106382],{}," 2 维，所以 obs 是 4 维。",[19,112513,112514],{},"设置初始角度：",[66,112516,112518],{"className":68,"code":112517,"language":70,"meta":71,"style":71},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[73,112519,112520,112532],{"__ignoreMap":71},[76,112521,112522,112524,112526,112528,112530],{"class":78,"line":79},[76,112523,106721],{"class":90},[76,112525,669],{"class":119},[76,112527,6525],{"class":90},[76,112529,370],{"class":82},[76,112531,112160],{"class":119},[76,112533,112534],{"class":78,"line":94},[76,112535,106565],{"class":90},[19,112537,112538],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112540,112541],{},"简单反馈控制：",[66,112543,112545],{"className":68,"code":112544,"language":70,"meta":71,"style":71},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[73,112546,112547,112567],{"__ignoreMap":71},[76,112548,112549,112551,112553,112555,112557,112559,112561,112563,112565],{"class":78,"line":79},[76,112550,109464],{"class":90},[76,112552,370],{"class":82},[76,112554,112247],{"class":119},[76,112556,1119],{"class":82},[76,112558,111840],{"class":90},[76,112560,376],{"class":82},[76,112562,63895],{"class":119},[76,112564,1119],{"class":82},[76,112566,112260],{"class":90},[76,112568,112569,112571,112573,112575,112577,112579,112581,112583],{"class":78,"line":94},[76,112570,109464],{"class":90},[76,112572,370],{"class":82},[76,112574,109469],{"class":90},[76,112576,666],{"class":82},[76,112578,104425],{"class":119},[76,112580,405],{"class":90},[76,112582,104425],{"class":119},[76,112584,130],{"class":90},[19,112586,112587],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112589,112590],{},"限制动作：",[66,112592,112594],{"className":68,"code":112593,"language":70,"meta":71,"style":71},"np.clip(action, -1.0, 1.0)\n",[73,112595,112596],{"__ignoreMap":71},[76,112597,112598,112601,112603,112605,112607,112609],{"class":78,"line":79},[76,112599,112600],{"class":90},"np.clip(action, ",[76,112602,666],{"class":82},[76,112604,104425],{"class":119},[76,112606,405],{"class":90},[76,112608,104425],{"class":119},[76,112610,130],{"class":90},[19,112612,112613,112614,112617],{},"因为 XML 里 ",[73,112615,112616],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[889,112619,103730],{"id":103730},[66,112621,112622],{"className":68,"code":112483,"language":70,"meta":71,"style":71},[73,112623,112624,112632],{"__ignoreMap":71},[76,112625,112626,112628,112630],{"class":78,"line":79},[76,112627,83],{"class":82},[76,112629,112014],{"class":86},[76,112631,112017],{"class":90},[76,112633,112634,112636],{"class":78,"line":94},[76,112635,441],{"class":82},[76,112637,112024],{"class":90},[19,112639,112640,112641,112644,112645,112648,112649,112652],{},"这段定义了一个函数，用来获取当前观测。",[73,112642,112643],{},"data.qpos.copy()"," 是位置数组副本，",[73,112646,112647],{},"data.qvel.copy()"," 是速度数组副本。",[73,112650,112651],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112654,112655],{},"在本章模型里：",[66,112657,112660],{"className":112658,"code":112659,"language":7268,"meta":71},[7266],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[73,112661,112659],{"__ignoreMap":71},[19,112663,112664],{},"所以返回的 obs 是：",[66,112666,112669],{"className":112667,"code":112668,"language":7268,"meta":71},[7266],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[73,112670,112668],{"__ignoreMap":71},[66,112672,112674],{"className":68,"code":112673,"language":70,"meta":71,"style":71},"def compute_reward(obs: np.ndarray) -> float:\n",[73,112675,112676],{"__ignoreMap":71},[76,112677,112678,112680,112682,112684,112686],{"class":78,"line":79},[76,112679,83],{"class":82},[76,112681,112039],{"class":86},[76,112683,112042],{"class":90},[76,112685,2311],{"class":119},[76,112687,590],{"class":90},[19,112689,112690,112691,112694],{},"这行定义奖励函数。输入是观测 ",[73,112692,112693],{},"obs","，输出是一个浮点数奖励。",[66,112696,112698],{"className":68,"code":112697,"language":70,"meta":71,"style":71},"cart_x = obs[0]\npole_angle = obs[1]\n",[73,112699,112700,112713],{"__ignoreMap":71},[76,112701,112702,112705,112707,112709,112711],{"class":78,"line":79},[76,112703,112704],{"class":90},"cart_x ",[76,112706,370],{"class":82},[76,112708,112056],{"class":90},[76,112710,1294],{"class":119},[76,112712,35284],{"class":90},[76,112714,112715,112718,112720,112722,112724],{"class":78,"line":94},[76,112716,112717],{"class":90},"pole_angle ",[76,112719,370],{"class":82},[76,112721,112056],{"class":90},[76,112723,669],{"class":119},[76,112725,35284],{"class":90},[19,112727,112728,112729,112732,112733,112736],{},"数组索引从 0 开始。",[73,112730,112731],{},"obs[0]"," 是第一个元素，也就是小车位置。",[73,112734,112735],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[66,112738,112739],{"className":68,"code":111809,"language":70,"meta":71,"style":71},[73,112740,112741],{"__ignoreMap":71},[76,112742,112743,112745,112747,112749,112751,112753,112755,112757,112759,112761,112763,112765,112767,112769],{"class":78,"line":79},[76,112744,422],{"class":82},[76,112746,1668],{"class":119},[76,112748,123],{"class":90},[76,112750,104425],{"class":119},[76,112752,54303],{"class":82},[76,112754,111826],{"class":119},[76,112756,1119],{"class":82},[76,112758,111831],{"class":90},[76,112760,2718],{"class":82},[76,112762,111831],{"class":90},[76,112764,666],{"class":82},[76,112766,111840],{"class":90},[76,112768,2718],{"class":82},[76,112770,111845],{"class":90},[19,112772,112773,112774,112777,112778,112781],{},"这行计算奖励。",[73,112775,112776],{},"cart_x * cart_x"," 是小车位置的平方，",[73,112779,112780],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[66,112783,112785],{"className":68,"code":112784,"language":70,"meta":71,"style":71},"data.qpos[1] = 0.1\n",[73,112786,112787],{"__ignoreMap":71},[76,112788,112789,112791,112793,112795,112797],{"class":78,"line":79},[76,112790,106721],{"class":90},[76,112792,669],{"class":119},[76,112794,6525],{"class":90},[76,112796,370],{"class":82},[76,112798,112160],{"class":119},[19,112800,112801,112802,112804,112805,112807],{},"手动设置杆子的初始角度。因为 ",[73,112803,107478],{}," 是小车位置，",[73,112806,107481],{}," 是杆子角度，所以这里改的是杆子。",[66,112809,112810],{"className":68,"code":106565,"language":70,"meta":71,"style":71},[73,112811,112812],{"__ignoreMap":71},[76,112813,112814],{"class":78,"line":79},[76,112815,106565],{"class":90},[19,112817,107524,112818,112820],{},[73,112819,106052],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[66,112822,112824],{"className":68,"code":112823,"language":70,"meta":71,"style":71},"total_reward = 0.0\n",[73,112825,112826],{"__ignoreMap":71},[76,112827,112828,112831,112833],{"class":78,"line":79},[76,112829,112830],{"class":90},"total_reward ",[76,112832,370],{"class":82},[76,112834,106783],{"class":119},[19,112836,112837],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[66,112839,112841],{"className":68,"code":112840,"language":70,"meta":71,"style":71},"for step in range(1000):\n",[73,112842,112843],{"__ignoreMap":71},[76,112844,112845,112847,112849,112851,112853,112855,112857],{"class":78,"line":79},[76,112846,5112],{"class":82},[76,112848,33659],{"class":90},[76,112850,1475],{"class":82},[76,112852,34483],{"class":119},[76,112854,123],{"class":90},[76,112856,8489],{"class":119},[76,112858,32830],{"class":90},[19,112860,112861,112862,112864],{},"循环 1000 步。",[73,112863,109156],{}," 是当前步数，从 0 到 999。",[66,112866,112868],{"className":68,"code":112867,"language":70,"meta":71,"style":71},"obs = get_observation(data)\n",[73,112869,112870],{"__ignoreMap":71},[76,112871,112872,112875,112877],{"class":78,"line":79},[76,112873,112874],{"class":90},"obs ",[76,112876,370],{"class":82},[76,112878,112207],{"class":90},[19,112880,112881,112882,490],{},"读取当前状态，保存到 ",[73,112883,112693],{},[66,112885,112887],{"className":68,"code":112886,"language":70,"meta":71,"style":71},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[73,112888,112889,112901],{"__ignoreMap":71},[76,112890,112891,112893,112895,112897,112899],{"class":78,"line":79},[76,112892,112717],{"class":90},[76,112894,370],{"class":82},[76,112896,112056],{"class":90},[76,112898,669],{"class":119},[76,112900,35284],{"class":90},[76,112902,112903,112906,112908,112910,112912],{"class":78,"line":94},[76,112904,112905],{"class":90},"pole_angular_velocity ",[76,112907,370],{"class":82},[76,112909,112056],{"class":90},[76,112911,2339],{"class":119},[76,112913,35284],{"class":90},[19,112915,112916,112917,112920,112921,490],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[73,112918,112919],{},"obs[3]","？因为 obs 的顺序是 ",[73,112922,112923],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[66,112925,112927],{"className":68,"code":112926,"language":70,"meta":71,"style":71},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[73,112928,112929],{"__ignoreMap":71},[76,112930,112931,112933,112935,112937,112939,112941,112943,112945,112947],{"class":78,"line":79},[76,112932,109464],{"class":90},[76,112934,370],{"class":82},[76,112936,112247],{"class":119},[76,112938,1119],{"class":82},[76,112940,111840],{"class":90},[76,112942,376],{"class":82},[76,112944,63895],{"class":119},[76,112946,1119],{"class":82},[76,112948,112260],{"class":90},[19,112950,112951,112952,103040,112954,112956],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[73,112953,107282],{},[73,112955,37367],{}," 是人为设置的系数，不是固定公式。",[66,112958,112960],{"className":68,"code":112959,"language":70,"meta":71,"style":71},"action = np.clip(action, -1.0, 1.0)\n",[73,112961,112962],{"__ignoreMap":71},[76,112963,112964,112966,112968,112970,112972,112974,112976,112978],{"class":78,"line":79},[76,112965,109464],{"class":90},[76,112967,370],{"class":82},[76,112969,109469],{"class":90},[76,112971,666],{"class":82},[76,112973,104425],{"class":119},[76,112975,405],{"class":90},[76,112977,104425],{"class":119},[76,112979,130],{"class":90},[19,112981,112982],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[66,112984,112985],{"className":68,"code":111794,"language":70,"meta":71,"style":71},[73,112986,112987],{"__ignoreMap":71},[76,112988,112989,112991,112993,112995,112997],{"class":78,"line":79},[76,112990,107893],{"class":90},[76,112992,1294],{"class":119},[76,112994,6525],{"class":90},[76,112996,370],{"class":82},[76,112998,109492],{"class":90},[19,113000,113001],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[66,113003,113004],{"className":68,"code":106527,"language":70,"meta":71,"style":71},[73,113005,113006],{"__ignoreMap":71},[76,113007,113008],{"class":78,"line":79},[76,113009,106527],{"class":90},[19,113011,113012,113013,113015],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[73,113014,108148],{}," 计算小车和杆子的下一刻状态。",[66,113017,113019],{"className":68,"code":113018,"language":70,"meta":71,"style":71},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[73,113020,113021,113030],{"__ignoreMap":71},[76,113022,113023,113026,113028],{"class":78,"line":79},[76,113024,113025],{"class":90},"reward ",[76,113027,370],{"class":82},[76,113029,112312],{"class":90},[76,113031,113032,113034,113036],{"class":78,"line":94},[76,113033,112830],{"class":90},[76,113035,1060],{"class":82},[76,113037,112322],{"class":90},[19,113039,113040,113041,113043,113044,113047,113048,490],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[73,113042,1060],{}," 是简写，",[73,113045,113046],{},"total_reward += reward"," 等价于 ",[73,113049,113050],{},"total_reward = total_reward + reward",[66,113052,113054],{"className":68,"code":113053,"language":70,"meta":71,"style":71},"if step % 100 == 0:\n",[73,113055,113056],{"__ignoreMap":71},[76,113057,113058,113060,113062,113064,113066,113068,113070],{"class":78,"line":79},[76,113059,723],{"class":82},[76,113061,33659],{"class":90},[76,113063,2592],{"class":82},[76,113065,7834],{"class":119},[76,113067,103581],{"class":82},[76,113069,587],{"class":119},[76,113071,590],{"class":90},[19,113073,113074,113076,113077,113080],{},[73,113075,2592],{}," 是取余数。",[73,113078,113079],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[66,113082,113084],{"className":68,"code":113083,"language":70,"meta":71,"style":71},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[73,113085,113086],{"__ignoreMap":71},[76,113087,113088,113090,113092,113094,113096,113098,113100,113102,113104,113106,113108,113110,113112,113114,113116,113118],{"class":78,"line":79},[76,113089,478],{"class":119},[76,113091,123],{"class":90},[76,113093,112351],{"class":126},[76,113095,112354],{"class":90},[76,113097,112357],{"class":126},[76,113099,112360],{"class":90},[76,113101,2339],{"class":119},[76,113103,112365],{"class":90},[76,113105,112368],{"class":126},[76,113107,405],{"class":90},[76,113109,34058],{"class":119},[76,113111,123],{"class":90},[76,113113,2311],{"class":119},[76,113115,112379],{"class":90},[76,113117,2339],{"class":119},[76,113119,656],{"class":90},[19,113121,113122,113123,113126,113127,113130],{},"打印当前步数、观测和动作。",[73,113124,113125],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[73,113128,113129],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113132,104338],{"id":104337},[19,113134,113135],{},"观测向量:",[66,113137,113140],{"className":113138,"code":113139,"language":7268,"meta":71},[7266],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,113141,113139],{"__ignoreMap":71},[19,113143,113144],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113146,113147],{},"每隔 100 步会打印一次：",[66,113149,113152],{"className":113150,"code":113151,"language":7268,"meta":71},[7266],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[73,113153,113151],{"__ignoreMap":71},[19,113155,113156],{},"重点观察：",[26,113158,113159,113165,113170],{},[29,113160,113161,113164],{},[73,113162,113163],{},"pole_angle"," 是否越来越大。",[29,113166,113167,113169],{},[73,113168,111747],{}," 是否跑得太远。",[29,113171,113172,113173,84563,113175,490],{},"action 是否经常被 clip 到 ",[73,113174,105937],{},[73,113176,669],{},[19,113178,113179],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113181,104370],{"id":104369},[26,113183,113184,113190,113193,113199,113209,113215,113218],{},[29,113185,113186,113187,490],{},"把初始角度改为 ",[73,113188,113189],{},"data.qpos[1] = 0.3",[29,113191,113192],{},"重新运行，观察控制是否变差。",[29,113194,113195,113196,113198],{},"把 actuator ",[73,113197,109089],{}," 改小。",[29,113200,113201,113202,113205,113206,490],{},"打印 ",[73,113203,113204],{},"model.nq, model.nv, model.nu","，应为 ",[73,113207,113208],{},"2 2 1",[29,113210,113211,113212,113214],{},"把 reward 里的 ",[73,113213,112780],{}," 系数改大，观察总奖励变化。",[29,113216,113217],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,113219,113220],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113222,104475],{"id":104474},[889,113224,113225],{"id":113225},"杆子方向和预期不一致",[19,113227,104418,113228,113230,113231,113233],{},[73,113229,108261],{}," 和 capsule 的 ",[73,113232,105198],{},"，必要时用 viewer 可视化确认。",[889,113235,113236],{"id":113236},"控制器越控越倒",[19,113238,113239],{},"说明反馈符号可能反了，尝试:",[66,113241,113243],{"className":68,"code":113242,"language":70,"meta":71,"style":71},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[73,113244,113245],{"__ignoreMap":71},[76,113246,113247,113249,113251,113253,113255,113257,113259,113261,113263,113265],{"class":78,"line":79},[76,113248,109464],{"class":90},[76,113250,370],{"class":82},[76,113252,54303],{"class":82},[76,113254,107282],{"class":119},[76,113256,1119],{"class":82},[76,113258,111840],{"class":90},[76,113260,666],{"class":82},[76,113262,63895],{"class":119},[76,113264,1119],{"class":82},[76,113266,112260],{"class":90},[889,113268,113269],{"id":113269},"小车飞走",[19,113271,113272,113273,113275,113276,113279],{},"降低 ",[73,113274,109089],{}," 或缩小 ",[73,113277,113278],{},"action"," 的 clip 范围。",[889,113281,113283,113285],{"id":113282},"obs3-为什么是杆子角速度",[73,113284,112919],{}," 为什么是杆子角速度",[19,113287,113288],{},"因为这个模型里：",[66,113290,113293],{"className":113291,"code":113292,"language":7268,"meta":71},[7266],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[73,113294,113292],{"__ignoreMap":71},[19,113296,111768],{},[66,113298,113301],{"className":113299,"code":113300,"language":7268,"meta":71},[7266],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[73,113302,113300],{"__ignoreMap":71},[889,113304,113306],{"id":113305},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113308,113309],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113311,104629],{"id":104628},[19,113313,113314],{},"一个控制任务通常包含：",[26,113316,113317,113320,113328,113333,113336],{},[29,113318,113319],{},"模型：Cartpole 的 body、joint、actuator。",[29,113321,113322,113323,2478,113325,113327],{},"观测：从 ",[73,113324,106052],{},[73,113326,106382],{}," 里取状态。",[29,113329,113330,113331,490],{},"动作：写入 ",[73,113332,103098],{},[29,113334,113335],{},"奖励：根据任务目标打分。",[29,113337,113338],{},"循环：obs -> action -> step -> reward。",[19,113340,113341],{},"这就是后面 Gymnasium 环境的基本骨架。",[2178,113343,106308],{},{"title":71,"searchDepth":94,"depth":94,"links":113345},[113346,113347,113348,113353,113357,113358,113359,113367],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":113349},[113350,113351,113352],{"id":111721,"depth":133,"text":111722},{"id":111786,"depth":133,"text":111787},{"id":111802,"depth":133,"text":111803},{"id":103274,"depth":94,"text":103275,"children":113354},[113355,113356],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":113360},[113361,113362,113363,113364,113366],{"id":113225,"depth":133,"text":113225},{"id":113236,"depth":133,"text":113236},{"id":113269,"depth":133,"text":113269},{"id":113282,"depth":133,"text":113365},"obs[3] 为什么是杆子角速度",{"id":113305,"depth":133,"text":113306},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111457,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113374,"title":113375,"body":113376,"description":71,"extension":2202,"meta":115390,"navigation":148,"path":115391,"seo":115392,"stem":115393,"__hash__":115394},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113377,"toc":115366},[113378,113381,113383,113386,113388,113405,113408,113411,113417,113420,113422,113424,113448,113450,113464,113466,113507,113509,113527,113529,113532,113538,113541,113569,113573,113579,113604,113607,113638,113645,113648,113651,113657,113660,113666,113669,113675,113679,113682,113707,113710,113712,114472,114474,114486,114488,114499,114501,114504,114521,114524,114526,114537,114540,114542,114588,114591,114604,114607,114689,114692,114694,114710,114720,114733,114736,114775,114785,114796,114806,114819,114822,114851,114854,114864,114867,114873,114890,114901,114903,114909,114926,114937,114958,114961,114973,114976,114997,115000,115008,115016,115033,115036,115105,115112,115120,115123,115136,115143,115145,115148,115154,115157,115160,115166,115172,115174,115214,115216,115222,115231,115234,115236,115256,115259,115262,115268,115272,115274,115301,115304,115307,115334,115340,115343,115346,115348,115351,115354,115360,115363],[10,113379,113375],{"id":113380},"_7控制任务reacher-机械臂到达目标",[14,113382,102669],{"id":102668},[19,113384,113385],{},"本章搭建一个二维两关节 reacher 任务。",[19,113387,106353],{},[26,113389,113390,113393,113396,113399,113402],{},[29,113391,113392],{},"两个 hinge joint",[29,113394,113395],{},"两个 motor actuator",[29,113397,113398],{},"site 作为末端点和目标点",[29,113400,113401],{},"根据末端和目标距离设计 reward",[29,113403,113404],{},"构造机械臂任务的基本形式",[19,113406,113407],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113409,113410],{},"Reacher 任务可以理解为：",[66,113412,113415],{"className":113413,"code":113414,"language":7268,"meta":71},[7266],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[73,113416,113414],{"__ignoreMap":71},[19,113418,113419],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113421,102792],{"id":102791},[19,113423,102795],{},[66,113425,113426],{"className":25871,"code":106410,"language":25873,"meta":71,"style":71},[73,113427,113428],{"__ignoreMap":71},[76,113429,113430,113432,113434,113436,113438,113440,113442,113444,113446],{"class":78,"line":79},[76,113431,26626],{"class":86},[76,113433,28364],{"class":126},[76,113435,25883],{"class":126},[76,113437,28449],{"class":119},[76,113439,106425],{"class":126},[76,113441,102820],{"class":126},[76,113443,104523],{"class":126},[76,113445,102836],{"class":126},[76,113447,106434],{"class":126},[19,113449,104841],{},[66,113451,113452],{"className":25871,"code":102941,"language":25873,"meta":71,"style":71},[73,113453,113454],{"__ignoreMap":71},[76,113455,113456,113458,113460,113462],{"class":78,"line":79},[76,113457,25880],{"class":86},[76,113459,25883],{"class":126},[76,113461,102952],{"class":126},[76,113463,102955],{"class":126},[19,113465,104858],{},[66,113467,113469],{"className":25871,"code":113468,"language":25873,"meta":71,"style":71},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[73,113470,113471,113488,113497],{"__ignoreMap":71},[76,113472,113473,113475,113477,113479,113482,113484,113486],{"class":78,"line":79},[76,113474,32378],{"class":86},[76,113476,31224],{"class":126},[76,113478,27165],{"class":119},[76,113480,113481],{"class":126}," mujoco-reacher",[76,113483,102997],{"class":126},[76,113485,103000],{"class":119},[76,113487,103003],{"class":119},[76,113489,113490,113492,113494],{"class":78,"line":94},[76,113491,32378],{"class":86},[76,113493,103010],{"class":126},[76,113495,113496],{"class":126}," mujoco-reacher\n",[76,113498,113499,113501,113503,113505],{"class":78,"line":133},[76,113500,25880],{"class":86},[76,113502,25883],{"class":126},[76,113504,102952],{"class":126},[76,113506,102955],{"class":126},[19,113508,103026],{},[26,113510,113511,113514,113517],{},[29,113512,113513],{},"本章使用低维状态，不使用图像输入。",[29,113515,113516],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,113518,113519,113520,2478,113522,2478,113524,113526],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[73,113521,106052],{},[73,113523,106382],{},[73,113525,105702],{}," 的方法一致。",[14,113528,103067],{"id":103066},[19,113530,113531],{},"Reacher 任务核心:",[66,113533,113536],{"className":113534,"code":113535,"language":7268,"meta":71},[7266],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[73,113537,113535],{"__ignoreMap":71},[19,113539,113540],{},"读取 site 世界坐标:",[66,113542,113544],{"className":68,"code":113543,"language":70,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[73,113545,113546,113559],{"__ignoreMap":71},[76,113547,113548,113550,113552,113554,113557],{"class":78,"line":79},[76,113549,105656],{"class":90},[76,113551,370],{"class":82},[76,113553,105427],{"class":90},[76,113555,113556],{"class":126},"\"tip\"",[76,113558,130],{"class":90},[76,113560,113561,113564,113566],{"class":78,"line":94},[76,113562,113563],{"class":90},"tip_pos ",[76,113565,370],{"class":82},[76,113567,113568],{"class":90}," data.site_xpos[site_id]\n",[889,113570,113572],{"id":113571},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113574,113575,113576,113578],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[73,113577,106052],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[66,113580,113582],{"className":68,"code":113581,"language":70,"meta":71,"style":71},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[73,113583,113584,113594],{"__ignoreMap":71},[76,113585,113586,113589,113591],{"class":78,"line":79},[76,113587,113588],{"class":90},"tip ",[76,113590,370],{"class":82},[76,113592,113593],{"class":90}," data.site_xpos[tip_site_id]\n",[76,113595,113596,113599,113601],{"class":78,"line":94},[76,113597,113598],{"class":90},"target ",[76,113600,370],{"class":82},[76,113602,113603],{"class":90}," data.site_xpos[target_site_id]\n",[19,113605,113606],{},"这样 reward 就很容易写：",[66,113608,113610],{"className":68,"code":113609,"language":70,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[73,113611,113612,113627],{"__ignoreMap":71},[76,113613,113614,113617,113619,113622,113624],{"class":78,"line":79},[76,113615,113616],{"class":90},"dist ",[76,113618,370],{"class":82},[76,113620,113621],{"class":90}," np.linalg.norm(tip ",[76,113623,666],{"class":82},[76,113625,113626],{"class":90}," target)\n",[76,113628,113629,113631,113633,113635],{"class":78,"line":94},[76,113630,113025],{"class":90},[76,113632,370],{"class":82},[76,113634,54303],{"class":82},[76,113636,113637],{"class":90},"dist\n",[19,113639,113640,113641,113644],{},"距离越小，",[73,113642,113643],{},"-dist"," 越接近 0，奖励越高。",[889,113646,113647],{"id":113647},"两关节机械臂的状态",[19,113649,113650],{},"这个模型有两个 hinge joint：",[66,113652,113655],{"className":113653,"code":113654,"language":7268,"meta":71},[7266],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[73,113656,113654],{"__ignoreMap":71},[19,113658,113659],{},"再加上末端和目标位置：",[66,113661,113664],{"className":113662,"code":113663,"language":7268,"meta":71},[7266],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[73,113665,113663],{"__ignoreMap":71},[19,113667,113668],{},"总维度：",[66,113670,113673],{"className":113671,"code":113672,"language":7268,"meta":71},[7266],"2 + 2 + 3 + 3 = 10\n",[73,113674,113672],{"__ignoreMap":71},[889,113676,113678],{"id":113677},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113680,113681],{},"本章把重力设为：",[66,113683,113685],{"className":55099,"code":113684,"language":55101,"meta":71,"style":71},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[73,113686,113687],{"__ignoreMap":71},[76,113688,113689,113691,113693,113695,113697,113699,113701,113703,113705],{"class":78,"line":79},[76,113690,584],{"class":90},[76,113692,71194],{"class":53332},[76,113694,103216],{"class":86},[76,113696,370],{"class":90},[76,113698,103221],{"class":126},[76,113700,103224],{"class":86},[76,113702,370],{"class":90},[76,113704,105793],{"class":126},[76,113706,103166],{"class":90},[19,113708,113709],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113711,103275],{"id":103274},[66,113713,113715],{"className":68,"code":113714,"language":70,"meta":71,"style":71},"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",[73,113716,113717,113723,113733,113737,113741,113749,113754,113759,113763,113767,113772,113777,113781,113786,113791,113796,113800,113805,113810,113815,113820,113824,113828,113832,113836,113840,113845,113850,113854,113858,113862,113866,113870,113885,113894,113906,113929,113936,113940,113944,113954,113968,113982,113989,113993,113997,114011,114023,114035,114048,114063,114080,114084,114088,114100,114112,114120,114128,114132,114148,114153,114166,114179,114194,114198,114233,114265,114269,114273,114282,114286,114302,114312,114323,114339,114355,114371,114387,114391,114409,114429,114448,114452,114456,114468],{"__ignoreMap":71},[76,113718,113719,113721],{"class":78,"line":79},[76,113720,32438],{"class":82},[76,113722,103323],{"class":90},[76,113724,113725,113727,113729,113731],{"class":78,"line":94},[76,113726,32438],{"class":82},[76,113728,33423],{"class":90},[76,113730,33426],{"class":82},[76,113732,33429],{"class":90},[76,113734,113735],{"class":78,"line":133},[76,113736,149],{"emptyLinePlaceholder":148},[76,113738,113739],{"class":78,"line":145},[76,113740,149],{"emptyLinePlaceholder":148},[76,113742,113743,113745,113747],{"class":78,"line":152},[76,113744,103336],{"class":119},[76,113746,15617],{"class":82},[76,113748,103341],{"class":126},[76,113750,113751],{"class":78,"line":157},[76,113752,113753],{"class":126},"\u003Cmujoco model=\"two_link_reacher\">\n",[76,113755,113756],{"class":78,"line":246},[76,113757,113758],{"class":126},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[76,113760,113761],{"class":78,"line":251},[76,113762,149],{"emptyLinePlaceholder":148},[76,113764,113765],{"class":78,"line":257},[76,113766,103360],{"class":126},[76,113768,113769],{"class":78,"line":641},[76,113770,113771],{"class":126},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[76,113773,113774],{"class":78,"line":646},[76,113775,113776],{"class":126},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[76,113778,113779],{"class":78,"line":659},[76,113780,149],{"emptyLinePlaceholder":148},[76,113782,113783],{"class":78,"line":1608},[76,113784,113785],{"class":126},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[76,113787,113788],{"class":78,"line":1632},[76,113789,113790],{"class":126},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,113792,113793],{"class":78,"line":1637},[76,113794,113795],{"class":126},"      \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",[76,113797,113798],{"class":78,"line":1642},[76,113799,149],{"emptyLinePlaceholder":148},[76,113801,113802],{"class":78,"line":1652},[76,113803,113804],{"class":126},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[76,113806,113807],{"class":78,"line":1660},[76,113808,113809],{"class":126},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,113811,113812],{"class":78,"line":1683},[76,113813,113814],{"class":126},"        \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",[76,113816,113817],{"class":78,"line":1698},[76,113818,113819],{"class":126},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[76,113821,113822],{"class":78,"line":1711},[76,113823,108460],{"class":126},[76,113825,113826],{"class":78,"line":1717},[76,113827,103389],{"class":126},[76,113829,113830],{"class":78,"line":1728},[76,113831,103394],{"class":126},[76,113833,113834],{"class":78,"line":1740},[76,113835,149],{"emptyLinePlaceholder":148},[76,113837,113838],{"class":78,"line":1746},[76,113839,108477],{"class":126},[76,113841,113842],{"class":78,"line":1751},[76,113843,113844],{"class":126},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,113846,113847],{"class":78,"line":1756},[76,113848,113849],{"class":126},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,113851,113852],{"class":78,"line":1766},[76,113853,108487],{"class":126},[76,113855,113856],{"class":78,"line":1773},[76,113857,103399],{"class":126},[76,113859,113860],{"class":78,"line":1793},[76,113861,97720],{"class":126},[76,113863,113864],{"class":78,"line":1806},[76,113865,149],{"emptyLinePlaceholder":148},[76,113867,113868],{"class":78,"line":1817},[76,113869,149],{"emptyLinePlaceholder":148},[76,113871,113872,113874,113877,113880,113882],{"class":78,"line":1822},[76,113873,83],{"class":82},[76,113875,113876],{"class":86}," site_position",[76,113878,113879],{"class":90},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[76,113881,1402],{"class":119},[76,113883,113884],{"class":90},") -> np.ndarray:\n",[76,113886,113887,113889,113891],{"class":78,"line":1835},[76,113888,105422],{"class":90},[76,113890,370],{"class":82},[76,113892,113893],{"class":90}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[76,113895,113896,113898,113900,113902,113904],{"class":78,"line":1847},[76,113897,578],{"class":82},[76,113899,105471],{"class":90},[76,113901,584],{"class":82},[76,113903,587],{"class":119},[76,113905,590],{"class":90},[76,113907,113908,113910,113912,113914,113916,113919,113921,113923,113925,113927],{"class":78,"line":1852},[76,113909,105454],{"class":82},[76,113911,105457],{"class":119},[76,113913,123],{"class":90},[76,113915,292],{"class":82},[76,113917,113918],{"class":126},"\"site not found: ",[76,113920,298],{"class":119},[76,113922,301],{"class":90},[76,113924,304],{"class":119},[76,113926,307],{"class":126},[76,113928,130],{"class":90},[76,113930,113931,113933],{"class":78,"line":1862},[76,113932,441],{"class":82},[76,113934,113935],{"class":90}," data.site_xpos[site_id].copy()\n",[76,113937,113938],{"class":78,"line":1874},[76,113939,149],{"emptyLinePlaceholder":148},[76,113941,113942],{"class":78,"line":1879},[76,113943,149],{"emptyLinePlaceholder":148},[76,113945,113946,113948,113951],{"class":78,"line":1884},[76,113947,83],{"class":82},[76,113949,113950],{"class":86}," get_obs",[76,113952,113953],{"class":90},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[76,113955,113956,113959,113961,113964,113966],{"class":78,"line":1889},[76,113957,113958],{"class":90},"    tip ",[76,113960,370],{"class":82},[76,113962,113963],{"class":90}," site_position(model, data, ",[76,113965,113556],{"class":126},[76,113967,130],{"class":90},[76,113969,113970,113973,113975,113977,113980],{"class":78,"line":1900},[76,113971,113972],{"class":90},"    target ",[76,113974,370],{"class":82},[76,113976,113963],{"class":90},[76,113978,113979],{"class":126},"\"target\"",[76,113981,130],{"class":90},[76,113983,113984,113986],{"class":78,"line":1906},[76,113985,441],{"class":82},[76,113987,113988],{"class":90}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[76,113990,113991],{"class":78,"line":1924},[76,113992,149],{"emptyLinePlaceholder":148},[76,113994,113995],{"class":78,"line":1929},[76,113996,149],{"emptyLinePlaceholder":148},[76,113998,113999,114001,114004,114007,114009],{"class":78,"line":1944},[76,114000,83],{"class":82},[76,114002,114003],{"class":86}," reward",[76,114005,114006],{"class":90},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,114008,2311],{"class":119},[76,114010,590],{"class":90},[76,114012,114013,114015,114017,114019,114021],{"class":78,"line":1950},[76,114014,113958],{"class":90},[76,114016,370],{"class":82},[76,114018,113963],{"class":90},[76,114020,113556],{"class":126},[76,114022,130],{"class":90},[76,114024,114025,114027,114029,114031,114033],{"class":78,"line":1965},[76,114026,113972],{"class":90},[76,114028,370],{"class":82},[76,114030,113963],{"class":90},[76,114032,113979],{"class":126},[76,114034,130],{"class":90},[76,114036,114037,114040,114042,114044,114046],{"class":78,"line":1971},[76,114038,114039],{"class":90},"    dist ",[76,114041,370],{"class":82},[76,114043,113621],{"class":90},[76,114045,666],{"class":82},[76,114047,113626],{"class":90},[76,114049,114050,114053,114055,114058,114060],{"class":78,"line":1985},[76,114051,114052],{"class":90},"    control_cost ",[76,114054,370],{"class":82},[76,114056,114057],{"class":119}," 0.01",[76,114059,1119],{"class":82},[76,114061,114062],{"class":90}," np.sum(np.square(data.ctrl))\n",[76,114064,114065,114067,114069,114071,114073,114075,114077],{"class":78,"line":1991},[76,114066,441],{"class":82},[76,114068,1668],{"class":119},[76,114070,123],{"class":90},[76,114072,666],{"class":82},[76,114074,113616],{"class":90},[76,114076,666],{"class":82},[76,114078,114079],{"class":90}," control_cost)\n",[76,114081,114082],{"class":78,"line":2005},[76,114083,149],{"emptyLinePlaceholder":148},[76,114085,114086],{"class":78,"line":2017},[76,114087,149],{"emptyLinePlaceholder":148},[76,114089,114090,114092,114094,114096,114098],{"class":78,"line":2023},[76,114091,83],{"class":82},[76,114093,4069],{"class":86},[76,114095,103420],{"class":90},[76,114097,489],{"class":119},[76,114099,590],{"class":90},[76,114101,114102,114104,114106,114108,114110],{"class":78,"line":2031},[76,114103,103429],{"class":90},[76,114105,370],{"class":82},[76,114107,103434],{"class":90},[76,114109,103336],{"class":119},[76,114111,130],{"class":90},[76,114113,114114,114116,114118],{"class":78,"line":11880},[76,114115,103443],{"class":90},[76,114117,370],{"class":82},[76,114119,103448],{"class":90},[76,114121,114122,114124,114126],{"class":78,"line":11901},[76,114123,112173],{"class":90},[76,114125,370],{"class":82},[76,114127,106783],{"class":119},[76,114129,114130],{"class":78,"line":11907},[76,114131,149],{"emptyLinePlaceholder":148},[76,114133,114134,114136,114138,114140,114142,114144,114146],{"class":78,"line":11921},[76,114135,1469],{"class":82},[76,114137,33659],{"class":90},[76,114139,1475],{"class":82},[76,114141,34483],{"class":119},[76,114143,123],{"class":90},[76,114145,67102],{"class":119},[76,114147,32830],{"class":90},[76,114149,114150],{"class":78,"line":11927},[76,114151,114152],{"class":90},"        mujoco.mj_forward(model, data)\n",[76,114154,114155,114158,114160,114162,114164],{"class":78,"line":11954},[76,114156,114157],{"class":90},"        tip ",[76,114159,370],{"class":82},[76,114161,113963],{"class":90},[76,114163,113556],{"class":126},[76,114165,130],{"class":90},[76,114167,114168,114171,114173,114175,114177],{"class":78,"line":11963},[76,114169,114170],{"class":90},"        target ",[76,114172,370],{"class":82},[76,114174,113963],{"class":90},[76,114176,113979],{"class":126},[76,114178,130],{"class":90},[76,114180,114181,114184,114186,114189,114191],{"class":78,"line":11969},[76,114182,114183],{"class":90},"        error ",[76,114185,370],{"class":82},[76,114187,114188],{"class":90}," target ",[76,114190,666],{"class":82},[76,114192,114193],{"class":90}," tip\n",[76,114195,114196],{"class":78,"line":11977},[76,114197,149],{"emptyLinePlaceholder":148},[76,114199,114200,114202,114204,114206,114208,114211,114213,114215,114218,114220,114223,114225,114227,114229,114231],{"class":78,"line":11982},[76,114201,108639],{"class":90},[76,114203,1294],{"class":119},[76,114205,6525],{"class":90},[76,114207,370],{"class":82},[76,114209,114210],{"class":90}," np.clip(",[76,114212,107282],{"class":119},[76,114214,1119],{"class":82},[76,114216,114217],{"class":90}," error[",[76,114219,2345],{"class":119},[76,114221,114222],{"class":90},"], ",[76,114224,666],{"class":82},[76,114226,104425],{"class":119},[76,114228,405],{"class":90},[76,114230,104425],{"class":119},[76,114232,130],{"class":90},[76,114234,114235,114237,114239,114241,114243,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263],{"class":78,"line":18654},[76,114236,108639],{"class":90},[76,114238,669],{"class":119},[76,114240,6525],{"class":90},[76,114242,370],{"class":82},[76,114244,114210],{"class":90},[76,114246,107282],{"class":119},[76,114248,1119],{"class":82},[76,114250,114217],{"class":90},[76,114252,1294],{"class":119},[76,114254,114222],{"class":90},[76,114256,666],{"class":82},[76,114258,104425],{"class":119},[76,114260,405],{"class":90},[76,114262,104425],{"class":119},[76,114264,130],{"class":90},[76,114266,114267],{"class":78,"line":18660},[76,114268,149],{"emptyLinePlaceholder":148},[76,114270,114271],{"class":78,"line":18683},[76,114272,103538],{"class":90},[76,114274,114275,114277,114279],{"class":78,"line":18689},[76,114276,112317],{"class":90},[76,114278,1060],{"class":82},[76,114280,114281],{"class":90}," reward(model, data)\n",[76,114283,114284],{"class":78,"line":18712},[76,114285,149],{"emptyLinePlaceholder":148},[76,114287,114288,114290,114292,114294,114296,114298,114300],{"class":78,"line":18726},[76,114289,4592],{"class":82},[76,114291,33659],{"class":90},[76,114293,2592],{"class":82},[76,114295,7834],{"class":119},[76,114297,103581],{"class":82},[76,114299,587],{"class":119},[76,114301,590],{"class":90},[76,114303,114304,114307,114309],{"class":78,"line":18746},[76,114305,114306],{"class":90},"            obs ",[76,114308,370],{"class":82},[76,114310,114311],{"class":90}," get_obs(model, data)\n",[76,114313,114314,114316,114318,114320],{"class":78,"line":18752},[76,114315,36688],{"class":119},[76,114317,123],{"class":90},[76,114319,112351],{"class":126},[76,114321,114322],{"class":90},", step)\n",[76,114324,114325,114327,114329,114332,114335,114337],{"class":78,"line":18763},[76,114326,36688],{"class":119},[76,114328,123],{"class":90},[76,114330,114331],{"class":126},"\"  tip:\"",[76,114333,114334],{"class":90},", np.round(tip, ",[76,114336,2339],{"class":119},[76,114338,656],{"class":90},[76,114340,114341,114343,114345,114348,114351,114353],{"class":78,"line":18786},[76,114342,36688],{"class":119},[76,114344,123],{"class":90},[76,114346,114347],{"class":126},"\"  target:\"",[76,114349,114350],{"class":90},", np.round(target, ",[76,114352,2339],{"class":119},[76,114354,656],{"class":90},[76,114356,114357,114359,114361,114364,114367,114369],{"class":78,"line":18808},[76,114358,36688],{"class":119},[76,114360,123],{"class":90},[76,114362,114363],{"class":126},"\"  ctrl:\"",[76,114365,114366],{"class":90},", np.round(data.ctrl.copy(), ",[76,114368,2339],{"class":119},[76,114370,656],{"class":90},[76,114372,114373,114375,114377,114380,114383,114385],{"class":78,"line":18813},[76,114374,36688],{"class":119},[76,114376,123],{"class":90},[76,114378,114379],{"class":126},"\"  obs_dim:\"",[76,114381,114382],{"class":90},", obs.shape[",[76,114384,1294],{"class":119},[76,114386,6739],{"class":90},[76,114388,114389],{"class":78,"line":18819},[76,114390,149],{"emptyLinePlaceholder":148},[76,114392,114393,114395,114397,114399,114401,114403,114405,114407],{"class":78,"line":18833},[76,114394,120],{"class":119},[76,114396,123],{"class":90},[76,114398,112396],{"class":126},[76,114400,405],{"class":90},[76,114402,34058],{"class":119},[76,114404,112403],{"class":90},[76,114406,2339],{"class":119},[76,114408,656],{"class":90},[76,114410,114411,114413,114415,114418,114421,114423,114425,114427],{"class":78,"line":18846},[76,114412,120],{"class":119},[76,114414,123],{"class":90},[76,114416,114417],{"class":126},"\"final tip:\"",[76,114419,114420],{"class":90},", np.round(site_position(model, data, ",[76,114422,113556],{"class":126},[76,114424,112365],{"class":90},[76,114426,2339],{"class":119},[76,114428,656],{"class":90},[76,114430,114431,114433,114435,114438,114440,114442,114444,114446],{"class":78,"line":18851},[76,114432,120],{"class":119},[76,114434,123],{"class":90},[76,114436,114437],{"class":126},"\"target:\"",[76,114439,114420],{"class":90},[76,114441,113979],{"class":126},[76,114443,112365],{"class":90},[76,114445,2339],{"class":119},[76,114447,656],{"class":90},[76,114449,114450],{"class":78,"line":18865},[76,114451,149],{"emptyLinePlaceholder":148},[76,114453,114454],{"class":78,"line":18870},[76,114455,149],{"emptyLinePlaceholder":148},[76,114457,114458,114460,114462,114464,114466],{"class":78,"line":18876},[76,114459,723],{"class":82},[76,114461,33264],{"class":119},[76,114463,103581],{"class":82},[76,114465,103584],{"class":126},[76,114467,590],{"class":90},[76,114469,114470],{"class":78,"line":18881},[76,114471,103591],{"class":90},[19,114473,105592],{},[66,114475,114477],{"className":25871,"code":114476,"language":25873,"meta":71,"style":71},"touch ch7_reacher.py\n",[73,114478,114479],{"__ignoreMap":71},[76,114480,114481,114483],{"class":78,"line":79},[76,114482,103305],{"class":86},[76,114484,114485],{"class":126}," ch7_reacher.py\n",[19,114487,112464],{},[66,114489,114491],{"className":25871,"code":114490,"language":25873,"meta":71,"style":71},"python ch7_reacher.py\n",[73,114492,114493],{"__ignoreMap":71},[76,114494,114495,114497],{"class":78,"line":79},[76,114496,70],{"class":86},[76,114498,114485],{"class":126},[889,114500,103594],{"id":103594},[19,114502,114503],{},"读取 site 坐标：",[66,114505,114507],{"className":68,"code":114506,"language":70,"meta":71,"style":71},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[73,114508,114509],{"__ignoreMap":71},[76,114510,114511,114513,114515,114517,114519],{"class":78,"line":79},[76,114512,83],{"class":82},[76,114514,113876],{"class":86},[76,114516,113879],{"class":90},[76,114518,1402],{"class":119},[76,114520,113884],{"class":90},[19,114522,114523],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114525,112480],{},[66,114527,114529],{"className":68,"code":114528,"language":70,"meta":71,"style":71},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[73,114530,114531],{"__ignoreMap":71},[76,114532,114533,114535],{"class":78,"line":79},[76,114534,422],{"class":82},[76,114536,113988],{"class":90},[19,114538,114539],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114541,111806],{},[66,114543,114545],{"className":68,"code":114544,"language":70,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[73,114546,114547,114559,114572],{"__ignoreMap":71},[76,114548,114549,114551,114553,114555,114557],{"class":78,"line":79},[76,114550,113616],{"class":90},[76,114552,370],{"class":82},[76,114554,113621],{"class":90},[76,114556,666],{"class":82},[76,114558,113626],{"class":90},[76,114560,114561,114564,114566,114568,114570],{"class":78,"line":94},[76,114562,114563],{"class":90},"control_cost ",[76,114565,370],{"class":82},[76,114567,114057],{"class":119},[76,114569,1119],{"class":82},[76,114571,114062],{"class":90},[76,114573,114574,114576,114578,114580,114582,114584,114586],{"class":78,"line":133},[76,114575,422],{"class":82},[76,114577,1668],{"class":119},[76,114579,123],{"class":90},[76,114581,666],{"class":82},[76,114583,113616],{"class":90},[76,114585,666],{"class":82},[76,114587,114079],{"class":90},[19,114589,114590],{},"奖励由两部分组成：",[26,114592,114593,114598],{},[29,114594,114595,114597],{},[73,114596,113643],{},"：末端离目标越远，奖励越低。",[29,114599,114600,114603],{},[73,114601,114602],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114605,114606],{},"简单控制器：",[66,114608,114610],{"className":68,"code":114609,"language":70,"meta":71,"style":71},"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",[73,114611,114612,114625,114657],{"__ignoreMap":71},[76,114613,114614,114617,114619,114621,114623],{"class":78,"line":79},[76,114615,114616],{"class":90},"error ",[76,114618,370],{"class":82},[76,114620,114188],{"class":90},[76,114622,666],{"class":82},[76,114624,114193],{"class":90},[76,114626,114627,114629,114631,114633,114635,114637,114639,114641,114643,114645,114647,114649,114651,114653,114655],{"class":78,"line":94},[76,114628,107893],{"class":90},[76,114630,1294],{"class":119},[76,114632,6525],{"class":90},[76,114634,370],{"class":82},[76,114636,114210],{"class":90},[76,114638,107282],{"class":119},[76,114640,1119],{"class":82},[76,114642,114217],{"class":90},[76,114644,2345],{"class":119},[76,114646,114222],{"class":90},[76,114648,666],{"class":82},[76,114650,104425],{"class":119},[76,114652,405],{"class":90},[76,114654,104425],{"class":119},[76,114656,130],{"class":90},[76,114658,114659,114661,114663,114665,114667,114669,114671,114673,114675,114677,114679,114681,114683,114685,114687],{"class":78,"line":133},[76,114660,107893],{"class":90},[76,114662,669],{"class":119},[76,114664,6525],{"class":90},[76,114666,370],{"class":82},[76,114668,114210],{"class":90},[76,114670,107282],{"class":119},[76,114672,1119],{"class":82},[76,114674,114217],{"class":90},[76,114676,1294],{"class":119},[76,114678,114222],{"class":90},[76,114680,666],{"class":82},[76,114682,104425],{"class":119},[76,114684,405],{"class":90},[76,114686,104425],{"class":119},[76,114688,130],{"class":90},[19,114690,114691],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[889,114693,103730],{"id":103730},[66,114695,114696],{"className":68,"code":114506,"language":70,"meta":71,"style":71},[73,114697,114698],{"__ignoreMap":71},[76,114699,114700,114702,114704,114706,114708],{"class":78,"line":79},[76,114701,83],{"class":82},[76,114703,113876],{"class":86},[76,114705,113879],{"class":90},[76,114707,1402],{"class":119},[76,114709,113884],{"class":90},[19,114711,114712,114713,114715,114716,84563,114718,490],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[73,114714,301],{}," 是 site 的名字，比如 ",[73,114717,113556],{},[73,114719,113979],{},[66,114721,114723],{"className":68,"code":114722,"language":70,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[73,114724,114725],{"__ignoreMap":71},[76,114726,114727,114729,114731],{"class":78,"line":79},[76,114728,105656],{"class":90},[76,114730,370],{"class":82},[76,114732,113893],{"class":90},[19,114734,114735],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[66,114737,114739],{"className":68,"code":114738,"language":70,"meta":71,"style":71},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[73,114740,114741,114753],{"__ignoreMap":71},[76,114742,114743,114745,114747,114749,114751],{"class":78,"line":79},[76,114744,723],{"class":82},[76,114746,105471],{"class":90},[76,114748,584],{"class":82},[76,114750,587],{"class":119},[76,114752,590],{"class":90},[76,114754,114755,114757,114759,114761,114763,114765,114767,114769,114771,114773],{"class":78,"line":94},[76,114756,105917],{"class":82},[76,114758,105457],{"class":119},[76,114760,123],{"class":90},[76,114762,292],{"class":82},[76,114764,113918],{"class":126},[76,114766,298],{"class":119},[76,114768,301],{"class":90},[76,114770,304],{"class":119},[76,114772,307],{"class":126},[76,114774,130],{"class":90},[19,114776,114777,114778,114781,114782,114784],{},"如果 site 没找到，就主动报错。",[73,114779,114780],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[73,114783,301],{}," 的值放进字符串里。",[66,114786,114788],{"className":68,"code":114787,"language":70,"meta":71,"style":71},"return data.site_xpos[site_id].copy()\n",[73,114789,114790],{"__ignoreMap":71},[76,114791,114792,114794],{"class":78,"line":79},[76,114793,422],{"class":82},[76,114795,113935],{"class":90},[19,114797,114798,114799,114801,114802,114805],{},"返回这个 site 的世界坐标。",[73,114800,105702],{}," 里的每一行都是一个 site 的 ",[73,114803,114804],{},"(x, y, z)"," 坐标。",[66,114807,114809],{"className":68,"code":114808,"language":70,"meta":71,"style":71},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[73,114810,114811],{"__ignoreMap":71},[76,114812,114813,114815,114817],{"class":78,"line":79},[76,114814,83],{"class":82},[76,114816,113950],{"class":86},[76,114818,113953],{"class":90},[19,114820,114821],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[66,114823,114825],{"className":68,"code":114824,"language":70,"meta":71,"style":71},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[73,114826,114827,114839],{"__ignoreMap":71},[76,114828,114829,114831,114833,114835,114837],{"class":78,"line":79},[76,114830,113588],{"class":90},[76,114832,370],{"class":82},[76,114834,113963],{"class":90},[76,114836,113556],{"class":126},[76,114838,130],{"class":90},[76,114840,114841,114843,114845,114847,114849],{"class":78,"line":94},[76,114842,113598],{"class":90},[76,114844,370],{"class":82},[76,114846,113963],{"class":90},[76,114848,113979],{"class":126},[76,114850,130],{"class":90},[19,114852,114853],{},"分别读取末端点和目标点的世界坐标。",[66,114855,114856],{"className":68,"code":114528,"language":70,"meta":71,"style":71},[73,114857,114858],{"__ignoreMap":71},[76,114859,114860,114862],{"class":78,"line":79},[76,114861,422],{"class":82},[76,114863,113988],{"class":90},[19,114865,114866],{},"把四部分拼成一个观测数组：",[66,114868,114871],{"className":114869,"code":114870,"language":7268,"meta":71},[7266],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[73,114872,114870],{"__ignoreMap":71},[66,114874,114876],{"className":68,"code":114875,"language":70,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\n",[73,114877,114878],{"__ignoreMap":71},[76,114879,114880,114882,114884,114886,114888],{"class":78,"line":79},[76,114881,113616],{"class":90},[76,114883,370],{"class":82},[76,114885,113621],{"class":90},[76,114887,666],{"class":82},[76,114889,113626],{"class":90},[19,114891,114892,114893,114896,114897,114900],{},"计算 tip 到 target 的距离。",[73,114894,114895],{},"tip - target"," 得到一个三维向量，",[73,114898,114899],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114902,16686],{},[66,114904,114907],{"className":114905,"code":114906,"language":7268,"meta":71},[7266],"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",[73,114908,114906],{"__ignoreMap":71},[66,114910,114912],{"className":68,"code":114911,"language":70,"meta":71,"style":71},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[73,114913,114914],{"__ignoreMap":71},[76,114915,114916,114918,114920,114922,114924],{"class":78,"line":79},[76,114917,114563],{"class":90},[76,114919,370],{"class":82},[76,114921,114057],{"class":119},[76,114923,1119],{"class":82},[76,114925,114062],{"class":90},[19,114927,114928,114929,114932,114933,114936],{},"计算动作惩罚。",[73,114930,114931],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[73,114934,114935],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[66,114938,114940],{"className":68,"code":114939,"language":70,"meta":71,"style":71},"return float(-dist - control_cost)\n",[73,114941,114942],{"__ignoreMap":71},[76,114943,114944,114946,114948,114950,114952,114954,114956],{"class":78,"line":79},[76,114945,422],{"class":82},[76,114947,1668],{"class":119},[76,114949,123],{"class":90},[76,114951,666],{"class":82},[76,114953,113616],{"class":90},[76,114955,666],{"class":82},[76,114957,114079],{"class":90},[19,114959,114960],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[66,114962,114963],{"className":68,"code":112823,"language":70,"meta":71,"style":71},[73,114964,114965],{"__ignoreMap":71},[76,114966,114967,114969,114971],{"class":78,"line":79},[76,114968,112830],{"class":90},[76,114970,370],{"class":82},[76,114972,106783],{"class":119},[19,114974,114975],{},"累计奖励变量，记录整个运行过程的总分。",[66,114977,114979],{"className":68,"code":114978,"language":70,"meta":71,"style":71},"for step in range(500):\n",[73,114980,114981],{"__ignoreMap":71},[76,114982,114983,114985,114987,114989,114991,114993,114995],{"class":78,"line":79},[76,114984,5112],{"class":82},[76,114986,33659],{"class":90},[76,114988,1475],{"class":82},[76,114990,34483],{"class":119},[76,114992,123],{"class":90},[76,114994,67102],{"class":119},[76,114996,32830],{"class":90},[19,114998,114999],{},"运行 500 个控制步。",[66,115001,115002],{"className":68,"code":106565,"language":70,"meta":71,"style":71},[73,115003,115004],{"__ignoreMap":71},[76,115005,115006],{"class":78,"line":79},[76,115007,106565],{"class":90},[19,115009,115010,115011,103040,115013,115015],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[73,115012,105253],{},[73,115014,105256],{}," 是当前状态下的坐标。",[66,115017,115019],{"className":68,"code":115018,"language":70,"meta":71,"style":71},"error = target - tip\n",[73,115020,115021],{"__ignoreMap":71},[76,115022,115023,115025,115027,115029,115031],{"class":78,"line":79},[76,115024,114616],{"class":90},[76,115026,370],{"class":82},[76,115028,114188],{"class":90},[76,115030,666],{"class":82},[76,115032,114193],{"class":90},[19,115034,115035],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[66,115037,115039],{"className":68,"code":115038,"language":70,"meta":71,"style":71},"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",[73,115040,115041,115073],{"__ignoreMap":71},[76,115042,115043,115045,115047,115049,115051,115053,115055,115057,115059,115061,115063,115065,115067,115069,115071],{"class":78,"line":79},[76,115044,107893],{"class":90},[76,115046,1294],{"class":119},[76,115048,6525],{"class":90},[76,115050,370],{"class":82},[76,115052,114210],{"class":90},[76,115054,107282],{"class":119},[76,115056,1119],{"class":82},[76,115058,114217],{"class":90},[76,115060,2345],{"class":119},[76,115062,114222],{"class":90},[76,115064,666],{"class":82},[76,115066,104425],{"class":119},[76,115068,405],{"class":90},[76,115070,104425],{"class":119},[76,115072,130],{"class":90},[76,115074,115075,115077,115079,115081,115083,115085,115087,115089,115091,115093,115095,115097,115099,115101,115103],{"class":78,"line":94},[76,115076,107893],{"class":90},[76,115078,669],{"class":119},[76,115080,6525],{"class":90},[76,115082,370],{"class":82},[76,115084,114210],{"class":90},[76,115086,107282],{"class":119},[76,115088,1119],{"class":82},[76,115090,114217],{"class":90},[76,115092,1294],{"class":119},[76,115094,114222],{"class":90},[76,115096,666],{"class":82},[76,115098,104425],{"class":119},[76,115100,405],{"class":90},[76,115102,104425],{"class":119},[76,115104,130],{"class":90},[19,115106,115107,115108,115111],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[73,115109,115110],{},"error -> ctrl -> step"," 的流程。",[66,115113,115114],{"className":68,"code":106527,"language":70,"meta":71,"style":71},[73,115115,115116],{"__ignoreMap":71},[76,115117,115118],{"class":78,"line":79},[76,115119,106527],{"class":90},[19,115121,115122],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[66,115124,115126],{"className":68,"code":115125,"language":70,"meta":71,"style":71},"obs = get_obs(model, data)\n",[73,115127,115128],{"__ignoreMap":71},[76,115129,115130,115132,115134],{"class":78,"line":79},[76,115131,112874],{"class":90},[76,115133,370],{"class":82},[76,115135,114311],{"class":90},[19,115137,115138,115139,115142],{},"读取最新观测。后面打印 ",[73,115140,115141],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115144,104338],{"id":104337},[19,115146,115147],{},"观测维度为:",[66,115149,115152],{"className":115150,"code":115151,"language":7268,"meta":71},[7266],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[73,115153,115151],{"__ignoreMap":71},[19,115155,115156],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115158,115159],{},"程序每 100 步打印：",[66,115161,115164],{"className":115162,"code":115163,"language":7268,"meta":71},[7266],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[73,115165,115163],{"__ignoreMap":71},[19,115167,115168,115169,115171],{},"如果控制有效，你应该看到最终 ",[73,115170,105253],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115173,104370],{"id":104369},[26,115175,115176,115179,115182,115188,115194,115201,115211],{},[29,115177,115178],{},"修改目标点位置。",[29,115180,115181],{},"重新运行，观察最终 tip 是否变化。",[29,115183,115184,115185,115187],{},"把 gravity 改成 ",[73,115186,104611],{},"，观察控制是否变差。",[29,115189,113201,115190,113205,115192,490],{},[73,115191,104180],{},[73,115193,2345],{},[29,115195,104433,115196,104436,115198,115200],{},[73,115197,112616],{},[73,115199,109329],{},"，观察机械臂是否更难移动。",[29,115202,104433,115203,84554,115205,104436,115207,115210],{},[73,115204,105256],{},[73,115206,106168],{},[73,115208,115209],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,115212,115213],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115215,104475],{"id":104474},[889,115217,115219],{"id":115218},"site-not-found",[73,115220,115221],{},"site not found",[19,115223,115224,115225,103040,115228,490],{},"检查 XML 中是否有 ",[73,115226,115227],{},"site name=\"tip\"",[73,115229,115230],{},"site name=\"target\"",[889,115232,115233],{"id":115233},"机械臂完全不动",[19,115235,104545],{},[26,115237,115238,115243,115246,115251],{},[29,115239,115240,115242],{},[73,115241,104180],{}," 是否为 2",[29,115244,115245],{},"actuator 是否引用正确 joint",[29,115247,115248,115250],{},[73,115249,103098],{}," 是否被赋值",[29,115252,115253,115254],{},"是否执行了 ",[73,115255,102707],{},[889,115257,115258],{"id":115258},"控制效果不好",[19,115260,115261],{},"正常。本章重点不是控制器最优，而是任务结构:",[66,115263,115266],{"className":115264,"code":115265,"language":7268,"meta":71},[7266],"obs → action → mj_step → reward → next_obs\n",[73,115267,115265],{"__ignoreMap":71},[889,115269,115271],{"id":115270},"tip-坐标不变化","tip 坐标不变化",[19,115273,104597],{},[26,115275,115276,115281,115289,115298],{},[29,115277,115278,115279,490],{},"是否每步调用了 ",[73,115280,102707],{},[29,115282,115283,115284,103040,115286,490],{},"是否写入了 ",[73,115285,108148],{},[73,115287,115288],{},"data.ctrl[1]",[29,115290,115291,115292,2478,115295,490],{},"actuator 是否正确引用 ",[73,115293,115294],{},"joint1",[73,115296,115297],{},"joint2",[29,115299,115300],{},"控制输入是否太小。",[889,115302,115303],{"id":115303},"目标点不会动",[19,115305,115306],{},"本章的 target 是固定 site：",[66,115308,115310],{"className":55099,"code":115309,"language":55101,"meta":71,"style":71},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[73,115311,115312],{"__ignoreMap":71},[76,115313,115314,115316,115318,115320,115322,115324,115326,115328,115331],{"class":78,"line":79},[76,115315,584],{"class":90},[76,115317,105232],{"class":53332},[76,115319,16972],{"class":86},[76,115321,370],{"class":90},[76,115323,113979],{"class":126},[76,115325,103128],{"class":86},[76,115327,370],{"class":90},[76,115329,115330],{"class":126},"\"0.5 0 0.4\"",[76,115332,115333],{"class":90}," ...\u002F>\n",[19,115335,115336,115337,115339],{},"它直接挂在 ",[73,115338,103863],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[889,115341,115342],{"id":115342},"机械臂不像真实机械臂",[19,115344,115345],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115347,104629],{"id":104628},[19,115349,115350],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115352,115353],{},"核心公式：",[66,115355,115358],{"className":115356,"code":115357,"language":7268,"meta":71},[7266],"distance = ||tip - target||\nreward = -distance - action_cost\n",[73,115359,115357],{"__ignoreMap":71},[19,115361,115362],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2178,115364,115365],{},"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":71,"searchDepth":94,"depth":94,"links":115367},[115368,115369,115370,115375,115379,115380,115381,115389],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":115371},[115372,115373,115374],{"id":113571,"depth":133,"text":113572},{"id":113647,"depth":133,"text":113647},{"id":113677,"depth":133,"text":113678},{"id":103274,"depth":94,"text":103275,"children":115376},[115377,115378],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":115382},[115383,115384,115385,115386,115387,115388],{"id":115218,"depth":133,"text":115221},{"id":115233,"depth":133,"text":115233},{"id":115258,"depth":133,"text":115258},{"id":115270,"depth":133,"text":115271},{"id":115303,"depth":133,"text":115303},{"id":115342,"depth":133,"text":115342},{"id":104628,"depth":94,"text":104629},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113375,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115396,"title":115397,"body":115398,"description":71,"extension":2202,"meta":118860,"navigation":148,"path":118861,"seo":118862,"stem":118863,"__hash__":118864},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115399,"toc":118831},[115400,115403,115405,115408,115411,115436,115439,115445,115448,115454,115456,115458,115482,115484,115502,115504,115547,115549,115576,115578,115581,115633,115636,115642,115651,115654,115692,115695,115734,115737,115745,115752,115755,115761,115763,115817,115824,115869,115872,115876,115892,115902,115904,117165,117167,117179,117181,117192,117194,117197,117218,117221,117224,117257,117263,117266,117299,117302,117305,117346,117351,117365,117368,117381,117386,117409,117411,117426,117436,117451,117458,117478,117493,117511,117514,117531,117539,117555,117561,117593,117606,117638,117648,117683,117697,117743,117757,117799,117810,117823,117829,117862,117865,117892,117902,117942,117952,117969,117976,117994,117997,118038,118051,118066,118069,118092,118095,118107,118110,118129,118134,118155,118158,118173,118176,118210,118222,118237,118240,118265,118268,118287,118290,118322,118325,118349,118355,118385,118392,118405,118408,118410,118412,118418,118421,118424,118436,118439,118441,118495,118497,118501,118507,118516,118519,118526,118528,118551,118554,118558,118560,118578,118584,118586,118619,118622,118628,118632,118635,118655,118660,118664,118671,118691,118696,118700,118703,118723,118726,118812,118816,118819,118825,118828],[10,115401,115397],{"id":115402},"_8gymnasium-风格强化学习接口基础",[14,115404,102669],{"id":102668},[19,115406,115407],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115409,115410],{},"你将实现:",[66,115412,115414],{"className":68,"code":115413,"language":70,"meta":71,"style":71},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[73,115415,115416,115426],{"__ignoreMap":71},[76,115417,115418,115421,115423],{"class":78,"line":79},[76,115419,115420],{"class":90},"obs, info ",[76,115422,370],{"class":82},[76,115424,115425],{"class":90}," env.reset()\n",[76,115427,115428,115431,115433],{"class":78,"line":94},[76,115429,115430],{"class":90},"obs, reward, terminated, truncated, info ",[76,115432,370],{"class":82},[76,115434,115435],{"class":90}," env.step(action)\n",[19,115437,115438],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115440,115441,115442,115444],{},"前面章节的代码都是“脚本式”的：在 ",[73,115443,104317],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115446,115447],{},"可以先记住 Gymnasium 环境的核心交互：",[66,115449,115452],{"className":115450,"code":115451,"language":7268,"meta":71},[7266],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[73,115453,115451],{"__ignoreMap":71},[14,115455,102792],{"id":102791},[19,115457,102795],{},[66,115459,115460],{"className":25871,"code":106410,"language":25873,"meta":71,"style":71},[73,115461,115462],{"__ignoreMap":71},[76,115463,115464,115466,115468,115470,115472,115474,115476,115478,115480],{"class":78,"line":79},[76,115465,26626],{"class":86},[76,115467,28364],{"class":126},[76,115469,25883],{"class":126},[76,115471,28449],{"class":119},[76,115473,106425],{"class":126},[76,115475,102820],{"class":126},[76,115477,104523],{"class":126},[76,115479,102836],{"class":126},[76,115481,106434],{"class":126},[19,115483,104841],{},[66,115485,115487],{"className":25871,"code":115486,"language":25873,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[73,115488,115489],{"__ignoreMap":71},[76,115490,115491,115493,115495,115497,115499],{"class":78,"line":79},[76,115492,25880],{"class":86},[76,115494,25883],{"class":126},[76,115496,102952],{"class":126},[76,115498,109733],{"class":126},[76,115500,115501],{"class":126}," gymnasium\n",[19,115503,104858],{},[66,115505,115507],{"className":25871,"code":115506,"language":25873,"meta":71,"style":71},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[73,115508,115509,115526,115535],{"__ignoreMap":71},[76,115510,115511,115513,115515,115517,115520,115522,115524],{"class":78,"line":79},[76,115512,32378],{"class":86},[76,115514,31224],{"class":126},[76,115516,27165],{"class":119},[76,115518,115519],{"class":126}," mujoco-gym-api",[76,115521,102997],{"class":126},[76,115523,103000],{"class":119},[76,115525,103003],{"class":119},[76,115527,115528,115530,115532],{"class":78,"line":94},[76,115529,32378],{"class":86},[76,115531,103010],{"class":126},[76,115533,115534],{"class":126}," mujoco-gym-api\n",[76,115536,115537,115539,115541,115543,115545],{"class":78,"line":133},[76,115538,25880],{"class":86},[76,115540,25883],{"class":126},[76,115542,102952],{"class":126},[76,115544,109733],{"class":126},[76,115546,115501],{"class":126},[19,115548,103026],{},[26,115550,115551,115561,115564,115570],{},[29,115552,115553,115554,115557,115558,490],{},"本章使用 ",[73,115555,115556],{},"gymnasium","，不是旧版 ",[73,115559,115560],{},"gym",[29,115562,115563],{},"Gymnasium API 与旧 Gym API 有差异。",[29,115565,115566,115567,490],{},"旧 Gym 常见返回值是 4 个: ",[73,115568,115569],{},"obs, reward, done, info",[29,115571,115572,115573,490],{},"Gymnasium 返回值是 5 个: ",[73,115574,115575],{},"obs, reward, terminated, truncated, info",[14,115577,103067],{"id":103066},[19,115579,115580],{},"强化学习环境接口包含:",[2404,115582,115583,115592],{},[2407,115584,115585],{},[2410,115586,115587,115590],{},[2413,115588,115589],{"align":25785},"方法",[2413,115591,104718],{"align":25785},[2451,115593,115594,115604,115614,115624],{},[2410,115595,115596,115601],{},[2456,115597,115598],{"align":25785},[73,115599,115600],{},"reset()",[2456,115602,115603],{"align":25785},"重置环境",[2410,115605,115606,115611],{},[2456,115607,115608],{"align":25785},[73,115609,115610],{},"step(action)",[2456,115612,115613],{"align":25785},"执行动作",[2410,115615,115616,115621],{},[2456,115617,115618],{"align":25785},[73,115619,115620],{},"observation_space",[2456,115622,115623],{"align":25785},"观测空间",[2410,115625,115626,115631],{},[2456,115627,115628],{"align":25785},[73,115629,115630],{},"action_space",[2456,115632,25703],{"align":25785},[19,115634,115635],{},"一个最小环境需要完成:",[66,115637,115640],{"className":115638,"code":115639,"language":7268,"meta":71},[7266],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[73,115641,115639],{"__ignoreMap":71},[889,115643,115645,103040,115648,106660],{"id":115644},"terminated-和-truncated-的区别",[73,115646,115647],{},"terminated",[73,115649,115650],{},"truncated",[19,115652,115653],{},"Gymnasium 把“结束”拆成两个概念：",[2404,115655,115656,115666],{},[2407,115657,115658],{},[2410,115659,115660,115662,115664],{},[2413,115661,106596],{"align":25785},[2413,115663,102722],{"align":25785},[2413,115665,23236],{"align":25785},[2451,115667,115668,115680],{},[2410,115669,115670,115674,115677],{},[2456,115671,115672],{"align":25785},[73,115673,115647],{},[2456,115675,115676],{"align":25785},"任务自然结束",[2456,115678,115679],{"align":25785},"机械臂到达目标、机器人摔倒",[2410,115681,115682,115686,115689],{},[2456,115683,115684],{"align":25785},[73,115685,115650],{},[2456,115687,115688],{"align":25785},"因外部限制截断",[2456,115690,115691],{"align":25785},"达到最大步数、时间限制",[19,115693,115694],{},"本章中：",[66,115696,115698],{"className":68,"code":115697,"language":70,"meta":71,"style":71},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[73,115699,115700,115715],{"__ignoreMap":71},[76,115701,115702,115705,115707,115710,115712],{"class":78,"line":79},[76,115703,115704],{"class":90},"terminated ",[76,115706,370],{"class":82},[76,115708,115709],{"class":90}," dist ",[76,115711,584],{"class":82},[76,115713,115714],{"class":119}," 0.05\n",[76,115716,115717,115720,115722,115724,115727,115729,115731],{"class":78,"line":94},[76,115718,115719],{"class":90},"truncated ",[76,115721,370],{"class":82},[76,115723,40911],{"class":119},[76,115725,115726],{"class":90},".steps ",[76,115728,611],{"class":82},[76,115730,40911],{"class":119},[76,115732,115733],{"class":90},".max_steps\n",[19,115735,115736],{},"也就是：",[26,115738,115739,115742],{},[29,115740,115741],{},"末端距离目标小于 0.05，任务成功结束。",[29,115743,115744],{},"步数超过上限，episode 被截断。",[889,115746,115748,103040,115750],{"id":115747},"observation_space-和-action_space",[73,115749,115620],{},[73,115751,115630],{},[19,115753,115754],{},"这两个对象告诉算法：",[66,115756,115759],{"className":115757,"code":115758,"language":7268,"meta":71},[7266],"观测长什么样\n动作允许多大\n",[73,115760,115758],{"__ignoreMap":71},[19,115762,16686],{},[66,115764,115766],{"className":68,"code":115765,"language":70,"meta":71,"style":71},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[73,115767,115768],{"__ignoreMap":71},[76,115769,115770,115772,115775,115777,115780,115783,115786,115788,115790,115793,115795,115797,115799,115801,115803,115805,115807,115810,115812,115814],{"class":78,"line":79},[76,115771,32867],{"class":119},[76,115773,115774],{"class":90},".action_space ",[76,115776,370],{"class":82},[76,115778,115779],{"class":90}," spaces.Box(",[76,115781,115782],{"class":7296},"low",[76,115784,115785],{"class":82},"=-",[76,115787,104425],{"class":119},[76,115789,405],{"class":90},[76,115791,115792],{"class":7296},"high",[76,115794,370],{"class":82},[76,115796,104425],{"class":119},[76,115798,405],{"class":90},[76,115800,97985],{"class":7296},[76,115802,370],{"class":82},[76,115804,123],{"class":90},[76,115806,2345],{"class":119},[76,115808,115809],{"class":90},",), ",[76,115811,95524],{"class":7296},[76,115813,370],{"class":82},[76,115815,115816],{"class":90},"np.float32)\n",[19,115818,115819,115820,115823],{},"表示动作是 2 维数组，每个值都在 ",[73,115821,115822],{},"[-1, 1]"," 范围内。",[66,115825,115827],{"className":68,"code":115826,"language":70,"meta":71,"style":71},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[73,115828,115829],{"__ignoreMap":71},[76,115830,115831,115833,115836,115838,115840,115842,115844,115847,115849,115851,115853,115855,115857,115859,115861,115863,115865,115867],{"class":78,"line":79},[76,115832,32867],{"class":119},[76,115834,115835],{"class":90},".observation_space ",[76,115837,370],{"class":82},[76,115839,115779],{"class":90},[76,115841,115782],{"class":7296},[76,115843,115785],{"class":82},[76,115845,115846],{"class":90},"np.inf, ",[76,115848,115792],{"class":7296},[76,115850,370],{"class":82},[76,115852,115846],{"class":90},[76,115854,97985],{"class":7296},[76,115856,370],{"class":82},[76,115858,123],{"class":90},[76,115860,402],{"class":119},[76,115862,115809],{"class":90},[76,115864,95524],{"class":7296},[76,115866,370],{"class":82},[76,115868,115816],{"class":90},[19,115870,115871],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[889,115873,115875],{"id":115874},"frame_skip-是什么","frame_skip 是什么",[66,115877,115879],{"className":68,"code":115878,"language":70,"meta":71,"style":71},"self.frame_skip = 5\n",[73,115880,115881],{"__ignoreMap":71},[76,115882,115883,115885,115888,115890],{"class":78,"line":79},[76,115884,32867],{"class":119},[76,115886,115887],{"class":90},".frame_skip ",[76,115889,370],{"class":82},[76,115891,56458],{"class":119},[19,115893,115894,115895,115898,115899,115901],{},"表示外部调用一次 ",[73,115896,115897],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[73,115900,103237],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115903,103275],{"id":103274},[66,115905,115907],{"className":68,"code":115906,"language":70,"meta":71,"style":71},"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",[73,115908,115909,115921,115927,115937,115948,115952,115956,115964,115969,115973,115977,115981,115985,115989,115993,115997,116002,116006,116010,116014,116019,116023,116027,116031,116035,116039,116043,116047,116051,116055,116059,116063,116067,116071,116089,116104,116108,116121,116131,116146,116163,116167,116188,116207,116232,116246,116250,116260,116272,116282,116286,116328,116366,116370,116380,116396,116411,116430,116437,116441,116454,116469,116484,116497,116516,116532,116536,116577,116592,116607,116611,116650,116661,116674,116678,116688,116697,116701,116711,116726,116744,116748,116759,116776,116789,116793,116803,116807,116818,116829,116833,116847,116861,116877,116881,116894,116911,116926,116933,116937,116941,116953,116963,116981,116993,117005,117009,117017,117033,117042,117051,117059,117101,117114,117119,117123,117141,117145,117149,117161],{"__ignoreMap":71},[76,115910,115911,115913,115916,115918],{"class":78,"line":79},[76,115912,32438],{"class":82},[76,115914,115915],{"class":90}," gymnasium ",[76,115917,33426],{"class":82},[76,115919,115920],{"class":90}," gym\n",[76,115922,115923,115925],{"class":78,"line":94},[76,115924,32438],{"class":82},[76,115926,103323],{"class":90},[76,115928,115929,115931,115933,115935],{"class":78,"line":133},[76,115930,32438],{"class":82},[76,115932,33423],{"class":90},[76,115934,33426],{"class":82},[76,115936,33429],{"class":90},[76,115938,115939,115941,115943,115945],{"class":78,"line":145},[76,115940,32781],{"class":82},[76,115942,115915],{"class":90},[76,115944,32438],{"class":82},[76,115946,115947],{"class":90}," spaces\n",[76,115949,115950],{"class":78,"line":152},[76,115951,149],{"emptyLinePlaceholder":148},[76,115953,115954],{"class":78,"line":157},[76,115955,149],{"emptyLinePlaceholder":148},[76,115957,115958,115960,115962],{"class":78,"line":246},[76,115959,103336],{"class":119},[76,115961,15617],{"class":82},[76,115963,103341],{"class":126},[76,115965,115966],{"class":78,"line":251},[76,115967,115968],{"class":126},"\u003Cmujoco model=\"gym_reacher\">\n",[76,115970,115971],{"class":78,"line":257},[76,115972,113758],{"class":126},[76,115974,115975],{"class":78,"line":641},[76,115976,149],{"emptyLinePlaceholder":148},[76,115978,115979],{"class":78,"line":646},[76,115980,103360],{"class":126},[76,115982,115983],{"class":78,"line":659},[76,115984,113776],{"class":126},[76,115986,115987],{"class":78,"line":1608},[76,115988,149],{"emptyLinePlaceholder":148},[76,115990,115991],{"class":78,"line":1632},[76,115992,113785],{"class":126},[76,115994,115995],{"class":78,"line":1637},[76,115996,113790],{"class":126},[76,115998,115999],{"class":78,"line":1642},[76,116000,116001],{"class":126},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,116003,116004],{"class":78,"line":1652},[76,116005,149],{"emptyLinePlaceholder":148},[76,116007,116008],{"class":78,"line":1660},[76,116009,113804],{"class":126},[76,116011,116012],{"class":78,"line":1683},[76,116013,113809],{"class":126},[76,116015,116016],{"class":78,"line":1698},[76,116017,116018],{"class":126},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,116020,116021],{"class":78,"line":1711},[76,116022,113819],{"class":126},[76,116024,116025],{"class":78,"line":1717},[76,116026,108460],{"class":126},[76,116028,116029],{"class":78,"line":1728},[76,116030,103389],{"class":126},[76,116032,116033],{"class":78,"line":1740},[76,116034,103394],{"class":126},[76,116036,116037],{"class":78,"line":1746},[76,116038,149],{"emptyLinePlaceholder":148},[76,116040,116041],{"class":78,"line":1751},[76,116042,108477],{"class":126},[76,116044,116045],{"class":78,"line":1756},[76,116046,113844],{"class":126},[76,116048,116049],{"class":78,"line":1766},[76,116050,113849],{"class":126},[76,116052,116053],{"class":78,"line":1773},[76,116054,108487],{"class":126},[76,116056,116057],{"class":78,"line":1793},[76,116058,103399],{"class":126},[76,116060,116061],{"class":78,"line":1806},[76,116062,97720],{"class":126},[76,116064,116065],{"class":78,"line":1817},[76,116066,149],{"emptyLinePlaceholder":148},[76,116068,116069],{"class":78,"line":1822},[76,116070,149],{"emptyLinePlaceholder":148},[76,116072,116073,116075,116078,116080,116082,116084,116087],{"class":78,"line":1835},[76,116074,16747],{"class":82},[76,116076,116077],{"class":86}," ReacherEnv",[76,116079,123],{"class":90},[76,116081,115560],{"class":86},[76,116083,2819],{"class":90},[76,116085,116086],{"class":86},"Env",[76,116088,32830],{"class":90},[76,116090,116091,116094,116096,116098,116101],{"class":78,"line":1847},[76,116092,116093],{"class":90},"    metadata ",[76,116095,370],{"class":82},[76,116097,6530],{"class":90},[76,116099,116100],{"class":126},"\"render_modes\"",[76,116102,116103],{"class":90},": []}\n",[76,116105,116106],{"class":78,"line":1852},[76,116107,149],{"emptyLinePlaceholder":148},[76,116109,116110,116112,116114,116117,116119],{"class":78,"line":1862},[76,116111,32845],{"class":82},[76,116113,32848],{"class":119},[76,116115,116116],{"class":90},"(self) -> ",[76,116118,489],{"class":119},[76,116120,590],{"class":90},[76,116122,116123,116125,116127,116129],{"class":78,"line":1874},[76,116124,32861],{"class":119},[76,116126,19310],{"class":90},[76,116128,32873],{"class":119},[76,116130,4072],{"class":90},[76,116132,116133,116135,116138,116140,116142,116144],{"class":78,"line":1879},[76,116134,32889],{"class":119},[76,116136,116137],{"class":90},".model ",[76,116139,370],{"class":82},[76,116141,103434],{"class":90},[76,116143,103336],{"class":119},[76,116145,130],{"class":90},[76,116147,116148,116150,116153,116155,116158,116160],{"class":78,"line":1884},[76,116149,32889],{"class":119},[76,116151,116152],{"class":90},".data ",[76,116154,370],{"class":82},[76,116156,116157],{"class":90}," mujoco.MjData(",[76,116159,32867],{"class":119},[76,116161,116162],{"class":90},".model)\n",[76,116164,116165],{"class":78,"line":1889},[76,116166,149],{"emptyLinePlaceholder":148},[76,116168,116169,116171,116174,116176,116179,116181,116184,116186],{"class":78,"line":1900},[76,116170,32889],{"class":119},[76,116172,116173],{"class":90},".tip_site_id ",[76,116175,370],{"class":82},[76,116177,116178],{"class":90}," mujoco.mj_name2id(",[76,116180,32867],{"class":119},[76,116182,116183],{"class":90},".model, mujoco.mjtObj.mjOBJ_SITE, ",[76,116185,113556],{"class":126},[76,116187,130],{"class":90},[76,116189,116190,116192,116195,116197,116199,116201,116203,116205],{"class":78,"line":1906},[76,116191,32889],{"class":119},[76,116193,116194],{"class":90},".target_site_id ",[76,116196,370],{"class":82},[76,116198,116178],{"class":90},[76,116200,32867],{"class":119},[76,116202,116183],{"class":90},[76,116204,113979],{"class":126},[76,116206,130],{"class":90},[76,116208,116209,116211,116213,116215,116217,116219,116222,116224,116226,116228,116230],{"class":78,"line":1924},[76,116210,4592],{"class":82},[76,116212,40911],{"class":119},[76,116214,116173],{"class":90},[76,116216,584],{"class":82},[76,116218,587],{"class":119},[76,116220,116221],{"class":82}," or",[76,116223,40911],{"class":119},[76,116225,116194],{"class":90},[76,116227,584],{"class":82},[76,116229,587],{"class":119},[76,116231,590],{"class":90},[76,116233,116234,116237,116239,116241,116244],{"class":78,"line":1929},[76,116235,116236],{"class":82},"            raise",[76,116238,105457],{"class":119},[76,116240,123],{"class":90},[76,116242,116243],{"class":126},"\"required sites not found\"",[76,116245,130],{"class":90},[76,116247,116248],{"class":78,"line":1944},[76,116249,149],{"emptyLinePlaceholder":148},[76,116251,116252,116254,116256,116258],{"class":78,"line":1950},[76,116253,32889],{"class":119},[76,116255,115887],{"class":90},[76,116257,370],{"class":82},[76,116259,56458],{"class":119},[76,116261,116262,116264,116267,116269],{"class":78,"line":1965},[76,116263,32889],{"class":119},[76,116265,116266],{"class":90},".max_steps ",[76,116268,370],{"class":82},[76,116270,116271],{"class":119}," 200\n",[76,116273,116274,116276,116278,116280],{"class":78,"line":1971},[76,116275,32889],{"class":119},[76,116277,115726],{"class":90},[76,116279,370],{"class":82},[76,116281,1027],{"class":119},[76,116283,116284],{"class":78,"line":1985},[76,116285,149],{"emptyLinePlaceholder":148},[76,116287,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314,116316,116318,116320,116322,116324,116326],{"class":78,"line":1991},[76,116289,32889],{"class":119},[76,116291,115774],{"class":90},[76,116293,370],{"class":82},[76,116295,115779],{"class":90},[76,116297,115782],{"class":7296},[76,116299,115785],{"class":82},[76,116301,104425],{"class":119},[76,116303,405],{"class":90},[76,116305,115792],{"class":7296},[76,116307,370],{"class":82},[76,116309,104425],{"class":119},[76,116311,405],{"class":90},[76,116313,97985],{"class":7296},[76,116315,370],{"class":82},[76,116317,123],{"class":90},[76,116319,2345],{"class":119},[76,116321,115809],{"class":90},[76,116323,95524],{"class":7296},[76,116325,370],{"class":82},[76,116327,115816],{"class":90},[76,116329,116330,116332,116334,116336,116338,116340,116342,116344,116346,116348,116350,116352,116354,116356,116358,116360,116362,116364],{"class":78,"line":2005},[76,116331,32889],{"class":119},[76,116333,115835],{"class":90},[76,116335,370],{"class":82},[76,116337,115779],{"class":90},[76,116339,115782],{"class":7296},[76,116341,115785],{"class":82},[76,116343,115846],{"class":90},[76,116345,115792],{"class":7296},[76,116347,370],{"class":82},[76,116349,115846],{"class":90},[76,116351,97985],{"class":7296},[76,116353,370],{"class":82},[76,116355,123],{"class":90},[76,116357,402],{"class":119},[76,116359,115809],{"class":90},[76,116361,95524],{"class":7296},[76,116363,370],{"class":82},[76,116365,115816],{"class":90},[76,116367,116368],{"class":78,"line":2017},[76,116369,149],{"emptyLinePlaceholder":148},[76,116371,116372,116374,116377],{"class":78,"line":2023},[76,116373,32845],{"class":82},[76,116375,116376],{"class":86}," _get_obs",[76,116378,116379],{"class":90},"(self) -> np.ndarray:\n",[76,116381,116382,116384,116386,116388,116391,116393],{"class":78,"line":2031},[76,116383,114157],{"class":90},[76,116385,370],{"class":82},[76,116387,40911],{"class":119},[76,116389,116390],{"class":90},".data.site_xpos[",[76,116392,32867],{"class":119},[76,116394,116395],{"class":90},".tip_site_id].copy()\n",[76,116397,116398,116400,116402,116404,116406,116408],{"class":78,"line":11880},[76,116399,114170],{"class":90},[76,116401,370],{"class":82},[76,116403,40911],{"class":119},[76,116405,116390],{"class":90},[76,116407,32867],{"class":119},[76,116409,116410],{"class":90},".target_site_id].copy()\n",[76,116412,116413,116415,116417,116420,116422,116425,116427],{"class":78,"line":11901},[76,116414,112202],{"class":90},[76,116416,370],{"class":82},[76,116418,116419],{"class":90}," np.concatenate([",[76,116421,32867],{"class":119},[76,116423,116424],{"class":90},".data.qpos.copy(), ",[76,116426,32867],{"class":119},[76,116428,116429],{"class":90},".data.qvel.copy(), tip, target])\n",[76,116431,116432,116434],{"class":78,"line":11907},[76,116433,595],{"class":82},[76,116435,116436],{"class":90}," obs.astype(np.float32)\n",[76,116438,116439],{"class":78,"line":11921},[76,116440,149],{"emptyLinePlaceholder":148},[76,116442,116443,116445,116448,116450,116452],{"class":78,"line":11927},[76,116444,32845],{"class":82},[76,116446,116447],{"class":86}," _get_reward",[76,116449,116116],{"class":90},[76,116451,2311],{"class":119},[76,116453,590],{"class":90},[76,116455,116456,116458,116460,116462,116464,116466],{"class":78,"line":11954},[76,116457,114157],{"class":90},[76,116459,370],{"class":82},[76,116461,40911],{"class":119},[76,116463,116390],{"class":90},[76,116465,32867],{"class":119},[76,116467,116468],{"class":90},".tip_site_id]\n",[76,116470,116471,116473,116475,116477,116479,116481],{"class":78,"line":11963},[76,116472,114170],{"class":90},[76,116474,370],{"class":82},[76,116476,40911],{"class":119},[76,116478,116390],{"class":90},[76,116480,32867],{"class":119},[76,116482,116483],{"class":90},".target_site_id]\n",[76,116485,116486,116489,116491,116493,116495],{"class":78,"line":11969},[76,116487,116488],{"class":90},"        dist ",[76,116490,370],{"class":82},[76,116492,113621],{"class":90},[76,116494,666],{"class":82},[76,116496,113626],{"class":90},[76,116498,116499,116502,116504,116506,116508,116511,116513],{"class":78,"line":11977},[76,116500,116501],{"class":90},"        control_cost ",[76,116503,370],{"class":82},[76,116505,114057],{"class":119},[76,116507,1119],{"class":82},[76,116509,116510],{"class":90}," np.sum(np.square(",[76,116512,32867],{"class":119},[76,116514,116515],{"class":90},".data.ctrl))\n",[76,116517,116518,116520,116522,116524,116526,116528,116530],{"class":78,"line":11982},[76,116519,595],{"class":82},[76,116521,1668],{"class":119},[76,116523,123],{"class":90},[76,116525,666],{"class":82},[76,116527,113616],{"class":90},[76,116529,666],{"class":82},[76,116531,114079],{"class":90},[76,116533,116534],{"class":78,"line":18654},[76,116535,149],{"emptyLinePlaceholder":148},[76,116537,116538,116540,116543,116546,116548,116551,116553,116555,116557,116559,116561,116564,116567,116569,116571,116573,116575],{"class":78,"line":18660},[76,116539,32845],{"class":82},[76,116541,116542],{"class":86}," reset",[76,116544,116545],{"class":90},"(self, ",[76,116547,2718],{"class":82},[76,116549,116550],{"class":90},", seed: ",[76,116552,1360],{"class":119},[76,116554,27159],{"class":82},[76,116556,732],{"class":119},[76,116558,15617],{"class":82},[76,116560,732],{"class":119},[76,116562,116563],{"class":90},", options: ",[76,116565,116566],{"class":119},"dict",[76,116568,27159],{"class":82},[76,116570,732],{"class":119},[76,116572,15617],{"class":82},[76,116574,732],{"class":119},[76,116576,32830],{"class":90},[76,116578,116579,116581,116584,116587,116589],{"class":78,"line":18683},[76,116580,32861],{"class":119},[76,116582,116583],{"class":90},"().reset(",[76,116585,116586],{"class":7296},"seed",[76,116588,370],{"class":82},[76,116590,116591],{"class":90},"seed)\n",[76,116593,116594,116597,116599,116602,116604],{"class":78,"line":18689},[76,116595,116596],{"class":90},"        mujoco.mj_resetData(",[76,116598,32867],{"class":119},[76,116600,116601],{"class":90},".model, ",[76,116603,32867],{"class":119},[76,116605,116606],{"class":90},".data)\n",[76,116608,116609],{"class":78,"line":18712},[76,116610,149],{"emptyLinePlaceholder":148},[76,116612,116613,116615,116618,116620,116622,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645,116647],{"class":78,"line":18726},[76,116614,32889],{"class":119},[76,116616,116617],{"class":90},".data.qpos[:] ",[76,116619,370],{"class":82},[76,116621,40911],{"class":119},[76,116623,116624],{"class":90},".np_random.uniform(",[76,116626,115782],{"class":7296},[76,116628,115785],{"class":82},[76,116630,88234],{"class":119},[76,116632,405],{"class":90},[76,116634,115792],{"class":7296},[76,116636,370],{"class":82},[76,116638,88234],{"class":119},[76,116640,405],{"class":90},[76,116642,33539],{"class":7296},[76,116644,370],{"class":82},[76,116646,32867],{"class":119},[76,116648,116649],{"class":90},".model.nq)\n",[76,116651,116652,116654,116657,116659],{"class":78,"line":18746},[76,116653,32889],{"class":119},[76,116655,116656],{"class":90},".data.qvel[:] ",[76,116658,370],{"class":82},[76,116660,106783],{"class":119},[76,116662,116663,116666,116668,116670,116672],{"class":78,"line":18752},[76,116664,116665],{"class":90},"        mujoco.mj_forward(",[76,116667,32867],{"class":119},[76,116669,116601],{"class":90},[76,116671,32867],{"class":119},[76,116673,116606],{"class":90},[76,116675,116676],{"class":78,"line":18763},[76,116677,149],{"emptyLinePlaceholder":148},[76,116679,116680,116682,116684,116686],{"class":78,"line":18786},[76,116681,32889],{"class":119},[76,116683,115726],{"class":90},[76,116685,370],{"class":82},[76,116687,1027],{"class":119},[76,116689,116690,116692,116694],{"class":78,"line":18808},[76,116691,595],{"class":82},[76,116693,40911],{"class":119},[76,116695,116696],{"class":90},"._get_obs(), {}\n",[76,116698,116699],{"class":78,"line":18813},[76,116700,149],{"emptyLinePlaceholder":148},[76,116702,116703,116705,116708],{"class":78,"line":18819},[76,116704,32845],{"class":82},[76,116706,116707],{"class":86}," step",[76,116709,116710],{"class":90},"(self, action):\n",[76,116712,116713,116715,116717,116720,116722,116724],{"class":78,"line":18833},[76,116714,112242],{"class":90},[76,116716,370],{"class":82},[76,116718,116719],{"class":90}," np.asarray(action, ",[76,116721,95524],{"class":7296},[76,116723,370],{"class":82},[76,116725,115816],{"class":90},[76,116727,116728,116730,116732,116734,116736,116739,116741],{"class":78,"line":18846},[76,116729,112242],{"class":90},[76,116731,370],{"class":82},[76,116733,109469],{"class":90},[76,116735,32867],{"class":119},[76,116737,116738],{"class":90},".action_space.low, ",[76,116740,32867],{"class":119},[76,116742,116743],{"class":90},".action_space.high)\n",[76,116745,116746],{"class":78,"line":18851},[76,116747,149],{"emptyLinePlaceholder":148},[76,116749,116750,116752,116755,116757],{"class":78,"line":18865},[76,116751,32889],{"class":119},[76,116753,116754],{"class":90},".data.ctrl[:] ",[76,116756,370],{"class":82},[76,116758,109492],{"class":90},[76,116760,116761,116763,116765,116767,116769,116771,116773],{"class":78,"line":18870},[76,116762,5488],{"class":82},[76,116764,103523],{"class":90},[76,116766,1475],{"class":82},[76,116768,34483],{"class":119},[76,116770,123],{"class":90},[76,116772,32867],{"class":119},[76,116774,116775],{"class":90},".frame_skip):\n",[76,116777,116778,116781,116783,116785,116787],{"class":78,"line":18876},[76,116779,116780],{"class":90},"            mujoco.mj_step(",[76,116782,32867],{"class":119},[76,116784,116601],{"class":90},[76,116786,32867],{"class":119},[76,116788,116606],{"class":90},[76,116790,116791],{"class":78,"line":18881},[76,116792,149],{"emptyLinePlaceholder":148},[76,116794,116795,116797,116799,116801],{"class":78,"line":18895},[76,116796,32889],{"class":119},[76,116798,115726],{"class":90},[76,116800,1060],{"class":82},[76,116802,1063],{"class":119},[76,116804,116805],{"class":78,"line":18900},[76,116806,149],{"emptyLinePlaceholder":148},[76,116808,116809,116811,116813,116815],{"class":78,"line":18905},[76,116810,112202],{"class":90},[76,116812,370],{"class":82},[76,116814,40911],{"class":119},[76,116816,116817],{"class":90},"._get_obs()\n",[76,116819,116820,116822,116824,116826],{"class":78,"line":18919},[76,116821,112307],{"class":90},[76,116823,370],{"class":82},[76,116825,40911],{"class":119},[76,116827,116828],{"class":90},"._get_reward()\n",[76,116830,116831],{"class":78,"line":18931},[76,116832,149],{"emptyLinePlaceholder":148},[76,116834,116835,116837,116839,116841,116843,116845],{"class":78,"line":18936},[76,116836,114157],{"class":90},[76,116838,370],{"class":82},[76,116840,40911],{"class":119},[76,116842,116390],{"class":90},[76,116844,32867],{"class":119},[76,116846,116468],{"class":90},[76,116848,116849,116851,116853,116855,116857,116859],{"class":78,"line":18949},[76,116850,114170],{"class":90},[76,116852,370],{"class":82},[76,116854,40911],{"class":119},[76,116856,116390],{"class":90},[76,116858,32867],{"class":119},[76,116860,116483],{"class":90},[76,116862,116863,116865,116867,116869,116872,116874],{"class":78,"line":18954},[76,116864,116488],{"class":90},[76,116866,370],{"class":82},[76,116868,1668],{"class":119},[76,116870,116871],{"class":90},"(np.linalg.norm(tip ",[76,116873,666],{"class":82},[76,116875,116876],{"class":90}," target))\n",[76,116878,116879],{"class":78,"line":18959},[76,116880,149],{"emptyLinePlaceholder":148},[76,116882,116883,116886,116888,116890,116892],{"class":78,"line":18964},[76,116884,116885],{"class":90},"        terminated ",[76,116887,370],{"class":82},[76,116889,115709],{"class":90},[76,116891,584],{"class":82},[76,116893,115714],{"class":119},[76,116895,116896,116899,116901,116903,116905,116907,116909],{"class":78,"line":18977},[76,116897,116898],{"class":90},"        truncated ",[76,116900,370],{"class":82},[76,116902,40911],{"class":119},[76,116904,115726],{"class":90},[76,116906,611],{"class":82},[76,116908,40911],{"class":119},[76,116910,115733],{"class":90},[76,116912,116913,116916,116918,116920,116923],{"class":78,"line":18982},[76,116914,116915],{"class":90},"        info ",[76,116917,370],{"class":82},[76,116919,6530],{"class":90},[76,116921,116922],{"class":126},"\"distance\"",[76,116924,116925],{"class":90},": dist}\n",[76,116927,116928,116930],{"class":78,"line":34671},[76,116929,595],{"class":82},[76,116931,116932],{"class":90}," obs, reward, terminated, truncated, info\n",[76,116934,116935],{"class":78,"line":34677},[76,116936,149],{"emptyLinePlaceholder":148},[76,116938,116939],{"class":78,"line":34683},[76,116940,149],{"emptyLinePlaceholder":148},[76,116942,116943,116945,116947,116949,116951],{"class":78,"line":34689},[76,116944,83],{"class":82},[76,116946,4069],{"class":86},[76,116948,103420],{"class":90},[76,116950,489],{"class":119},[76,116952,590],{"class":90},[76,116954,116955,116958,116960],{"class":78,"line":34695},[76,116956,116957],{"class":90},"    env ",[76,116959,370],{"class":82},[76,116961,116962],{"class":90}," ReacherEnv()\n",[76,116964,116965,116968,116970,116973,116975,116977,116979],{"class":78,"line":34706},[76,116966,116967],{"class":90},"    obs, info ",[76,116969,370],{"class":82},[76,116971,116972],{"class":90}," env.reset(",[76,116974,116586],{"class":7296},[76,116976,370],{"class":82},[76,116978,1294],{"class":119},[76,116980,130],{"class":90},[76,116982,116983,116985,116987,116990],{"class":78,"line":34712},[76,116984,120],{"class":119},[76,116986,123],{"class":90},[76,116988,116989],{"class":126},"\"initial obs shape:\"",[76,116991,116992],{"class":90},", obs.shape)\n",[76,116994,116995,116997,116999,117002],{"class":78,"line":34732},[76,116996,120],{"class":119},[76,116998,123],{"class":90},[76,117000,117001],{"class":126},"\"initial info:\"",[76,117003,117004],{"class":90},", info)\n",[76,117006,117007],{"class":78,"line":34738},[76,117008,149],{"emptyLinePlaceholder":148},[76,117010,117011,117013,117015],{"class":78,"line":34749},[76,117012,112173],{"class":90},[76,117014,370],{"class":82},[76,117016,106783],{"class":119},[76,117018,117019,117021,117023,117025,117027,117029,117031],{"class":78,"line":34755},[76,117020,1469],{"class":82},[76,117022,33659],{"class":90},[76,117024,1475],{"class":82},[76,117026,34483],{"class":119},[76,117028,123],{"class":90},[76,117030,408],{"class":119},[76,117032,32830],{"class":90},[76,117034,117035,117037,117039],{"class":78,"line":34761},[76,117036,112242],{"class":90},[76,117038,370],{"class":82},[76,117040,117041],{"class":90}," env.action_space.sample()\n",[76,117043,117044,117047,117049],{"class":78,"line":34767},[76,117045,117046],{"class":90},"        obs, reward, terminated, truncated, info ",[76,117048,370],{"class":82},[76,117050,115435],{"class":90},[76,117052,117053,117055,117057],{"class":78,"line":34773},[76,117054,112317],{"class":90},[76,117056,1060],{"class":82},[76,117058,112322],{"class":90},[76,117060,117061,117063,117065,117067,117069,117072,117074,117076,117079,117081,117083,117086,117088,117090,117093,117095,117097,117099],{"class":78,"line":34779},[76,117062,1701],{"class":119},[76,117064,123],{"class":90},[76,117066,112351],{"class":126},[76,117068,112354],{"class":90},[76,117070,117071],{"class":126},"\"reward:\"",[76,117073,405],{"class":90},[76,117075,34058],{"class":119},[76,117077,117078],{"class":90},"(reward, ",[76,117080,2339],{"class":119},[76,117082,112365],{"class":90},[76,117084,117085],{"class":126},"\"distance:\"",[76,117087,405],{"class":90},[76,117089,34058],{"class":119},[76,117091,117092],{"class":90},"(info[",[76,117094,116922],{"class":126},[76,117096,114222],{"class":90},[76,117098,2339],{"class":119},[76,117100,656],{"class":90},[76,117102,117103,117105,117108,117111],{"class":78,"line":34785},[76,117104,4592],{"class":82},[76,117106,117107],{"class":90}," terminated ",[76,117109,117110],{"class":82},"or",[76,117112,117113],{"class":90}," truncated:\n",[76,117115,117116],{"class":78,"line":34791},[76,117117,117118],{"class":82},"            break\n",[76,117120,117121],{"class":78,"line":34811},[76,117122,149],{"emptyLinePlaceholder":148},[76,117124,117125,117127,117129,117131,117133,117135,117137,117139],{"class":78,"line":34817},[76,117126,120],{"class":119},[76,117128,123],{"class":90},[76,117130,112396],{"class":126},[76,117132,405],{"class":90},[76,117134,34058],{"class":119},[76,117136,112403],{"class":90},[76,117138,2339],{"class":119},[76,117140,656],{"class":90},[76,117142,117143],{"class":78,"line":34833},[76,117144,149],{"emptyLinePlaceholder":148},[76,117146,117147],{"class":78,"line":34839},[76,117148,149],{"emptyLinePlaceholder":148},[76,117150,117151,117153,117155,117157,117159],{"class":78,"line":34853},[76,117152,723],{"class":82},[76,117154,33264],{"class":119},[76,117156,103581],{"class":82},[76,117158,103584],{"class":126},[76,117160,590],{"class":90},[76,117162,117163],{"class":78,"line":34859},[76,117164,103591],{"class":90},[19,117166,105592],{},[66,117168,117170],{"className":25871,"code":117169,"language":25873,"meta":71,"style":71},"touch ch8_gym_env.py\n",[73,117171,117172],{"__ignoreMap":71},[76,117173,117174,117176],{"class":78,"line":79},[76,117175,103305],{"class":86},[76,117177,117178],{"class":126}," ch8_gym_env.py\n",[19,117180,112464],{},[66,117182,117184],{"className":25871,"code":117183,"language":25873,"meta":71,"style":71},"python ch8_gym_env.py\n",[73,117185,117186],{"__ignoreMap":71},[76,117187,117188,117190],{"class":78,"line":79},[76,117189,70],{"class":86},[76,117191,117178],{"class":126},[889,117193,103594],{"id":103594},[19,117195,117196],{},"继承 Gymnasium 环境：",[66,117198,117200],{"className":68,"code":117199,"language":70,"meta":71,"style":71},"class ReacherEnv(gym.Env):\n",[73,117201,117202],{"__ignoreMap":71},[76,117203,117204,117206,117208,117210,117212,117214,117216],{"class":78,"line":79},[76,117205,16747],{"class":82},[76,117207,116077],{"class":86},[76,117209,123],{"class":90},[76,117211,115560],{"class":86},[76,117213,2819],{"class":90},[76,117215,116086],{"class":86},[76,117217,32830],{"class":90},[19,117219,117220],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117222,117223],{},"初始化模型：",[66,117225,117227],{"className":68,"code":117226,"language":70,"meta":71,"style":71},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[73,117228,117229,117243],{"__ignoreMap":71},[76,117230,117231,117233,117235,117237,117239,117241],{"class":78,"line":79},[76,117232,32867],{"class":119},[76,117234,116137],{"class":90},[76,117236,370],{"class":82},[76,117238,103434],{"class":90},[76,117240,103336],{"class":119},[76,117242,130],{"class":90},[76,117244,117245,117247,117249,117251,117253,117255],{"class":78,"line":94},[76,117246,32867],{"class":119},[76,117248,116152],{"class":90},[76,117250,370],{"class":82},[76,117252,116157],{"class":90},[76,117254,32867],{"class":119},[76,117256,116162],{"class":90},[19,117258,117259,117260,117262],{},"这和前面章节一样，只是现在放到了类的 ",[73,117261,32873],{}," 里。",[19,117264,117265],{},"缓存 site ID：",[66,117267,117269],{"className":68,"code":117268,"language":70,"meta":71,"style":71},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[73,117270,117271,117285],{"__ignoreMap":71},[76,117272,117273,117275,117277,117279,117281,117283],{"class":78,"line":79},[76,117274,32867],{"class":119},[76,117276,116173],{"class":90},[76,117278,370],{"class":82},[76,117280,116178],{"class":90},[76,117282,91578],{"class":119},[76,117284,130],{"class":90},[76,117286,117287,117289,117291,117293,117295,117297],{"class":78,"line":94},[76,117288,32867],{"class":119},[76,117290,116194],{"class":90},[76,117292,370],{"class":82},[76,117294,116178],{"class":90},[76,117296,91578],{"class":119},[76,117298,130],{"class":90},[19,117300,117301],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117303,117304],{},"reset：",[66,117306,117308],{"className":68,"code":117307,"language":70,"meta":71,"style":71},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[73,117309,117310],{"__ignoreMap":71},[76,117311,117312,117314,117316,117318,117320,117322,117324,117326,117328,117330,117332,117334,117336,117338,117340,117342,117344],{"class":78,"line":79},[76,117313,83],{"class":82},[76,117315,116542],{"class":86},[76,117317,116545],{"class":90},[76,117319,2718],{"class":82},[76,117321,116550],{"class":90},[76,117323,1360],{"class":119},[76,117325,27159],{"class":82},[76,117327,732],{"class":119},[76,117329,15617],{"class":82},[76,117331,732],{"class":119},[76,117333,116563],{"class":90},[76,117335,116566],{"class":119},[76,117337,27159],{"class":82},[76,117339,732],{"class":119},[76,117341,15617],{"class":82},[76,117343,732],{"class":119},[76,117345,32830],{"class":90},[19,117347,117348,117350],{},[73,117349,72084],{}," 做四件事：",[26,117352,117353,117356,117359,117362],{},[29,117354,117355],{},"设置随机种子。",[29,117357,117358],{},"重置 MuJoCo data。",[29,117360,117361],{},"随机初始化关节角。",[29,117363,117364],{},"返回初始观测和 info。",[19,117366,117367],{},"step：",[66,117369,117371],{"className":68,"code":117370,"language":70,"meta":71,"style":71},"def step(self, action):\n",[73,117372,117373],{"__ignoreMap":71},[76,117374,117375,117377,117379],{"class":78,"line":79},[76,117376,83],{"class":82},[76,117378,116707],{"class":86},[76,117380,116710],{"class":90},[19,117382,117383,117385],{},[73,117384,109156],{}," 做六件事：",[26,117387,117388,117391,117397,117400,117403,117406],{},[29,117389,117390],{},"检查并裁剪 action。",[29,117392,117393,117394,490],{},"写入 ",[73,117395,117396],{},"self.data.ctrl",[29,117398,117399],{},"连续推进若干个 MuJoCo 物理步。",[29,117401,117402],{},"计算新观测。",[29,117404,117405],{},"计算奖励和结束条件。",[29,117407,117408],{},"返回 Gymnasium 标准五元组。",[889,117410,103730],{"id":103730},[66,117412,117414],{"className":68,"code":117413,"language":70,"meta":71,"style":71},"import gymnasium as gym\n",[73,117415,117416],{"__ignoreMap":71},[76,117417,117418,117420,117422,117424],{"class":78,"line":79},[76,117419,32438],{"class":82},[76,117421,115915],{"class":90},[76,117423,33426],{"class":82},[76,117425,115920],{"class":90},[19,117427,117428,117429,117431,117432,117435],{},"导入 Gymnasium，并起别名 ",[73,117430,115560],{},"。后面写 ",[73,117433,117434],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[66,117437,117439],{"className":68,"code":117438,"language":70,"meta":71,"style":71},"from gymnasium import spaces\n",[73,117440,117441],{"__ignoreMap":71},[76,117442,117443,117445,117447,117449],{"class":78,"line":79},[76,117444,32781],{"class":82},[76,117446,115915],{"class":90},[76,117448,32438],{"class":82},[76,117450,115947],{"class":90},[19,117452,117453,117454,117457],{},"导入空间定义工具。",[73,117455,117456],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[66,117459,117460],{"className":68,"code":117199,"language":70,"meta":71,"style":71},[73,117461,117462],{"__ignoreMap":71},[76,117463,117464,117466,117468,117470,117472,117474,117476],{"class":78,"line":79},[76,117465,16747],{"class":82},[76,117467,116077],{"class":86},[76,117469,123],{"class":90},[76,117471,115560],{"class":86},[76,117473,2819],{"class":90},[76,117475,116086],{"class":86},[76,117477,32830],{"class":90},[19,117479,117480,117481,117484,117485,117487,117488,103040,117490,117492],{},"定义一个类，名字叫 ",[73,117482,117483],{},"ReacherEnv","。括号里的 ",[73,117486,117434],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[73,117489,72084],{},[73,117491,109156],{}," 这两个核心方法。",[66,117494,117496],{"className":68,"code":117495,"language":70,"meta":71,"style":71},"metadata = {\"render_modes\": []}\n",[73,117497,117498],{"__ignoreMap":71},[76,117499,117500,117503,117505,117507,117509],{"class":78,"line":79},[76,117501,117502],{"class":90},"metadata ",[76,117504,370],{"class":82},[76,117506,6530],{"class":90},[76,117508,116100],{"class":126},[76,117510,116103],{"class":90},[19,117512,117513],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[66,117515,117517],{"className":68,"code":117516,"language":70,"meta":71,"style":71},"def __init__(self) -> None:\n",[73,117518,117519],{"__ignoreMap":71},[76,117520,117521,117523,117525,117527,117529],{"class":78,"line":79},[76,117522,83],{"class":82},[76,117524,32848],{"class":119},[76,117526,116116],{"class":90},[76,117528,489],{"class":119},[76,117530,590],{"class":90},[19,117532,117533,117535,117536,490],{},[73,117534,32873],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[73,117537,117538],{},"env = ReacherEnv()",[66,117540,117542],{"className":68,"code":117541,"language":70,"meta":71,"style":71},"super().__init__()\n",[73,117543,117544],{"__ignoreMap":71},[76,117545,117546,117549,117551,117553],{"class":78,"line":79},[76,117547,117548],{"class":119},"super",[76,117550,19310],{"class":90},[76,117552,32873],{"class":119},[76,117554,4072],{"class":90},[19,117556,117557,117558,117560],{},"调用父类 ",[73,117559,117434],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[66,117562,117563],{"className":68,"code":117226,"language":70,"meta":71,"style":71},[73,117564,117565,117579],{"__ignoreMap":71},[76,117566,117567,117569,117571,117573,117575,117577],{"class":78,"line":79},[76,117568,32867],{"class":119},[76,117570,116137],{"class":90},[76,117572,370],{"class":82},[76,117574,103434],{"class":90},[76,117576,103336],{"class":119},[76,117578,130],{"class":90},[76,117580,117581,117583,117585,117587,117589,117591],{"class":78,"line":94},[76,117582,32867],{"class":119},[76,117584,116152],{"class":90},[76,117586,370],{"class":82},[76,117588,116157],{"class":90},[76,117590,32867],{"class":119},[76,117592,116162],{"class":90},[19,117594,117595,117596,117598,117599,103040,117602,117605],{},"把 MuJoCo 模型和状态保存到 ",[73,117597,32867],{}," 上。",[73,117600,117601],{},"self.model",[73,117603,117604],{},"self.data"," 表示这个环境对象自己的模型和状态。",[66,117607,117608],{"className":68,"code":117268,"language":70,"meta":71,"style":71},[73,117609,117610,117624],{"__ignoreMap":71},[76,117611,117612,117614,117616,117618,117620,117622],{"class":78,"line":79},[76,117613,32867],{"class":119},[76,117615,116173],{"class":90},[76,117617,370],{"class":82},[76,117619,116178],{"class":90},[76,117621,91578],{"class":119},[76,117623,130],{"class":90},[76,117625,117626,117628,117630,117632,117634,117636],{"class":78,"line":94},[76,117627,32867],{"class":119},[76,117629,116194],{"class":90},[76,117631,370],{"class":82},[76,117633,116178],{"class":90},[76,117635,91578],{"class":119},[76,117637,130],{"class":90},[19,117639,117640,117641,103040,117644,117647],{},"提前查好 tip 和 target 的 site ID。这样 ",[73,117642,117643],{},"_get_obs",[73,117645,117646],{},"_get_reward"," 里就不用每次按名字查找。",[66,117649,117651],{"className":68,"code":117650,"language":70,"meta":71,"style":71},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[73,117652,117653,117663,117673],{"__ignoreMap":71},[76,117654,117655,117657,117659,117661],{"class":78,"line":79},[76,117656,32867],{"class":119},[76,117658,115887],{"class":90},[76,117660,370],{"class":82},[76,117662,56458],{"class":119},[76,117664,117665,117667,117669,117671],{"class":78,"line":94},[76,117666,32867],{"class":119},[76,117668,116266],{"class":90},[76,117670,370],{"class":82},[76,117672,116271],{"class":119},[76,117674,117675,117677,117679,117681],{"class":78,"line":133},[76,117676,32867],{"class":119},[76,117678,115726],{"class":90},[76,117680,370],{"class":82},[76,117682,1027],{"class":119},[19,117684,117685,117688,117689,117692,117693,117696],{},[73,117686,117687],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[73,117690,117691],{},"max_steps"," 是一个 episode 最多运行多少步。",[73,117694,117695],{},"steps"," 记录当前 episode 已经走了多少步。",[66,117698,117699],{"className":68,"code":115765,"language":70,"meta":71,"style":71},[73,117700,117701],{"__ignoreMap":71},[76,117702,117703,117705,117707,117709,117711,117713,117715,117717,117719,117721,117723,117725,117727,117729,117731,117733,117735,117737,117739,117741],{"class":78,"line":79},[76,117704,32867],{"class":119},[76,117706,115774],{"class":90},[76,117708,370],{"class":82},[76,117710,115779],{"class":90},[76,117712,115782],{"class":7296},[76,117714,115785],{"class":82},[76,117716,104425],{"class":119},[76,117718,405],{"class":90},[76,117720,115792],{"class":7296},[76,117722,370],{"class":82},[76,117724,104425],{"class":119},[76,117726,405],{"class":90},[76,117728,97985],{"class":7296},[76,117730,370],{"class":82},[76,117732,123],{"class":90},[76,117734,2345],{"class":119},[76,117736,115809],{"class":90},[76,117738,95524],{"class":7296},[76,117740,370],{"class":82},[76,117742,115816],{"class":90},[19,117744,117745,117746,117749,117750,103040,117753,117756],{},"定义动作空间。",[73,117747,117748],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[73,117751,117752],{},"low=-1.0",[73,117754,117755],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[66,117758,117759],{"className":68,"code":115826,"language":70,"meta":71,"style":71},[73,117760,117761],{"__ignoreMap":71},[76,117762,117763,117765,117767,117769,117771,117773,117775,117777,117779,117781,117783,117785,117787,117789,117791,117793,117795,117797],{"class":78,"line":79},[76,117764,32867],{"class":119},[76,117766,115835],{"class":90},[76,117768,370],{"class":82},[76,117770,115779],{"class":90},[76,117772,115782],{"class":7296},[76,117774,115785],{"class":82},[76,117776,115846],{"class":90},[76,117778,115792],{"class":7296},[76,117780,370],{"class":82},[76,117782,115846],{"class":90},[76,117784,97985],{"class":7296},[76,117786,370],{"class":82},[76,117788,123],{"class":90},[76,117790,402],{"class":119},[76,117792,115809],{"class":90},[76,117794,95524],{"class":7296},[76,117796,370],{"class":82},[76,117798,115816],{"class":90},[19,117800,117801,117802,117805,117806,117809],{},"定义观测空间。",[73,117803,117804],{},"shape=(10,)"," 表示观测是 10 个数。",[73,117807,117808],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[66,117811,117813],{"className":68,"code":117812,"language":70,"meta":71,"style":71},"def _get_obs(self) -> np.ndarray:\n",[73,117814,117815],{"__ignoreMap":71},[76,117816,117817,117819,117821],{"class":78,"line":79},[76,117818,83],{"class":82},[76,117820,116376],{"class":86},[76,117822,116379],{"class":90},[19,117824,117825,117826,117828],{},"定义内部函数，用来生成观测。函数名前面的 ",[73,117827,3246],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[66,117830,117832],{"className":68,"code":117831,"language":70,"meta":71,"style":71},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[73,117833,117834,117848],{"__ignoreMap":71},[76,117835,117836,117838,117840,117842,117844,117846],{"class":78,"line":79},[76,117837,113588],{"class":90},[76,117839,370],{"class":82},[76,117841,40911],{"class":119},[76,117843,116390],{"class":90},[76,117845,32867],{"class":119},[76,117847,116395],{"class":90},[76,117849,117850,117852,117854,117856,117858,117860],{"class":78,"line":94},[76,117851,113598],{"class":90},[76,117853,370],{"class":82},[76,117855,40911],{"class":119},[76,117857,116390],{"class":90},[76,117859,32867],{"class":119},[76,117861,116410],{"class":90},[19,117863,117864],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[66,117866,117868],{"className":68,"code":117867,"language":70,"meta":71,"style":71},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[73,117869,117870,117886],{"__ignoreMap":71},[76,117871,117872,117874,117876,117878,117880,117882,117884],{"class":78,"line":79},[76,117873,112874],{"class":90},[76,117875,370],{"class":82},[76,117877,116419],{"class":90},[76,117879,32867],{"class":119},[76,117881,116424],{"class":90},[76,117883,32867],{"class":119},[76,117885,116429],{"class":90},[76,117887,117888,117890],{"class":78,"line":94},[76,117889,422],{"class":82},[76,117891,116436],{"class":90},[19,117893,117894,117895,117898,117899,117901],{},"拼接观测，并转换成 ",[73,117896,117897],{},"float32","。很多强化学习库默认使用 ",[73,117900,117897],{},"，所以这里主动转换。",[66,117903,117904],{"className":68,"code":117307,"language":70,"meta":71,"style":71},[73,117905,117906],{"__ignoreMap":71},[76,117907,117908,117910,117912,117914,117916,117918,117920,117922,117924,117926,117928,117930,117932,117934,117936,117938,117940],{"class":78,"line":79},[76,117909,83],{"class":82},[76,117911,116542],{"class":86},[76,117913,116545],{"class":90},[76,117915,2718],{"class":82},[76,117917,116550],{"class":90},[76,117919,1360],{"class":119},[76,117921,27159],{"class":82},[76,117923,732],{"class":119},[76,117925,15617],{"class":82},[76,117927,732],{"class":119},[76,117929,116563],{"class":90},[76,117931,116566],{"class":119},[76,117933,27159],{"class":82},[76,117935,732],{"class":119},[76,117937,15617],{"class":82},[76,117939,732],{"class":119},[76,117941,32830],{"class":90},[19,117943,117944,117945,117947,117948,117951],{},"定义 reset。",[73,117946,116586],{}," 用来控制随机数，保证实验可以复现。",[73,117949,117950],{},"options"," 用来接收额外配置，本章暂时不用。",[66,117953,117955],{"className":68,"code":117954,"language":70,"meta":71,"style":71},"super().reset(seed=seed)\n",[73,117956,117957],{"__ignoreMap":71},[76,117958,117959,117961,117963,117965,117967],{"class":78,"line":79},[76,117960,117548],{"class":119},[76,117962,116583],{"class":90},[76,117964,116586],{"class":7296},[76,117966,370],{"class":82},[76,117968,116591],{"class":90},[19,117970,117971,117972,117975],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[73,117973,117974],{},"self.np_random"," 生成可复现的随机数。",[66,117977,117979],{"className":68,"code":117978,"language":70,"meta":71,"style":71},"mujoco.mj_resetData(self.model, self.data)\n",[73,117980,117981],{"__ignoreMap":71},[76,117982,117983,117986,117988,117990,117992],{"class":78,"line":79},[76,117984,117985],{"class":90},"mujoco.mj_resetData(",[76,117987,32867],{"class":119},[76,117989,116601],{"class":90},[76,117991,32867],{"class":119},[76,117993,116606],{"class":90},[19,117995,117996],{},"把 MuJoCo 状态重置到默认状态。",[66,117998,118000],{"className":68,"code":117999,"language":70,"meta":71,"style":71},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[73,118001,118002],{"__ignoreMap":71},[76,118003,118004,118006,118008,118010,118012,118014,118016,118018,118020,118022,118024,118026,118028,118030,118032,118034,118036],{"class":78,"line":79},[76,118005,32867],{"class":119},[76,118007,116617],{"class":90},[76,118009,370],{"class":82},[76,118011,40911],{"class":119},[76,118013,116624],{"class":90},[76,118015,115782],{"class":7296},[76,118017,115785],{"class":82},[76,118019,88234],{"class":119},[76,118021,405],{"class":90},[76,118023,115792],{"class":7296},[76,118025,370],{"class":82},[76,118027,88234],{"class":119},[76,118029,405],{"class":90},[76,118031,33539],{"class":7296},[76,118033,370],{"class":82},[76,118035,32867],{"class":119},[76,118037,116649],{"class":90},[19,118039,117361,118040,118043,118044,118047,118048,118050],{},[73,118041,118042],{},"[:]"," 表示修改整个数组。",[73,118045,118046],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[73,118049,104172],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[66,118052,118054],{"className":68,"code":118053,"language":70,"meta":71,"style":71},"self.data.qvel[:] = 0.0\n",[73,118055,118056],{"__ignoreMap":71},[76,118057,118058,118060,118062,118064],{"class":78,"line":79},[76,118059,32867],{"class":119},[76,118061,116656],{"class":90},[76,118063,370],{"class":82},[76,118065,106783],{"class":119},[19,118067,118068],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[66,118070,118072],{"className":68,"code":118071,"language":70,"meta":71,"style":71},"self.steps = 0\nreturn self._get_obs(), {}\n",[73,118073,118074,118084],{"__ignoreMap":71},[76,118075,118076,118078,118080,118082],{"class":78,"line":79},[76,118077,32867],{"class":119},[76,118079,115726],{"class":90},[76,118081,370],{"class":82},[76,118083,1027],{"class":119},[76,118085,118086,118088,118090],{"class":78,"line":94},[76,118087,422],{"class":82},[76,118089,40911],{"class":119},[76,118091,116696],{"class":90},[19,118093,118094],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[66,118096,118097],{"className":68,"code":117370,"language":70,"meta":71,"style":71},[73,118098,118099],{"__ignoreMap":71},[76,118100,118101,118103,118105],{"class":78,"line":79},[76,118102,83],{"class":82},[76,118104,116707],{"class":86},[76,118106,116710],{"class":90},[19,118108,118109],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[66,118111,118113],{"className":68,"code":118112,"language":70,"meta":71,"style":71},"action = np.asarray(action, dtype=np.float32)\n",[73,118114,118115],{"__ignoreMap":71},[76,118116,118117,118119,118121,118123,118125,118127],{"class":78,"line":79},[76,118118,109464],{"class":90},[76,118120,370],{"class":82},[76,118122,116719],{"class":90},[76,118124,95524],{"class":7296},[76,118126,370],{"class":82},[76,118128,115816],{"class":90},[19,118130,118131,118132,490],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[73,118133,117897],{},[66,118135,118137],{"className":68,"code":118136,"language":70,"meta":71,"style":71},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[73,118138,118139],{"__ignoreMap":71},[76,118140,118141,118143,118145,118147,118149,118151,118153],{"class":78,"line":79},[76,118142,109464],{"class":90},[76,118144,370],{"class":82},[76,118146,109469],{"class":90},[76,118148,32867],{"class":119},[76,118150,116738],{"class":90},[76,118152,32867],{"class":119},[76,118154,116743],{"class":90},[19,118156,118157],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[66,118159,118161],{"className":68,"code":118160,"language":70,"meta":71,"style":71},"self.data.ctrl[:] = action\n",[73,118162,118163],{"__ignoreMap":71},[76,118164,118165,118167,118169,118171],{"class":78,"line":79},[76,118166,32867],{"class":119},[76,118168,116754],{"class":90},[76,118170,370],{"class":82},[76,118172,109492],{"class":90},[19,118174,118175],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[66,118177,118179],{"className":68,"code":118178,"language":70,"meta":71,"style":71},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[73,118180,118181,118197],{"__ignoreMap":71},[76,118182,118183,118185,118187,118189,118191,118193,118195],{"class":78,"line":79},[76,118184,5112],{"class":82},[76,118186,103523],{"class":90},[76,118188,1475],{"class":82},[76,118190,34483],{"class":119},[76,118192,123],{"class":90},[76,118194,32867],{"class":119},[76,118196,116775],{"class":90},[76,118198,118199,118202,118204,118206,118208],{"class":78,"line":94},[76,118200,118201],{"class":90},"    mujoco.mj_step(",[76,118203,32867],{"class":119},[76,118205,116601],{"class":90},[76,118207,32867],{"class":119},[76,118209,116606],{"class":90},[19,118211,118212,118213,118216,118217,118219,118220,490],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[73,118214,118215],{},"frame_skip=5","，所以外部调用一次 ",[73,118218,115897],{},"，内部实际执行 5 次 ",[73,118221,103237],{},[66,118223,118225],{"className":68,"code":118224,"language":70,"meta":71,"style":71},"self.steps += 1\n",[73,118226,118227],{"__ignoreMap":71},[76,118228,118229,118231,118233,118235],{"class":78,"line":79},[76,118230,32867],{"class":119},[76,118232,115726],{"class":90},[76,118234,1060],{"class":82},[76,118236,1063],{"class":119},[19,118238,118239],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[66,118241,118243],{"className":68,"code":118242,"language":70,"meta":71,"style":71},"obs = self._get_obs()\nreward = self._get_reward()\n",[73,118244,118245,118255],{"__ignoreMap":71},[76,118246,118247,118249,118251,118253],{"class":78,"line":79},[76,118248,112874],{"class":90},[76,118250,370],{"class":82},[76,118252,40911],{"class":119},[76,118254,116817],{"class":90},[76,118256,118257,118259,118261,118263],{"class":78,"line":94},[76,118258,113025],{"class":90},[76,118260,370],{"class":82},[76,118262,40911],{"class":119},[76,118264,116828],{"class":90},[19,118266,118267],{},"计算新的观测和奖励。",[66,118269,118271],{"className":68,"code":118270,"language":70,"meta":71,"style":71},"dist = float(np.linalg.norm(tip - target))\n",[73,118272,118273],{"__ignoreMap":71},[76,118274,118275,118277,118279,118281,118283,118285],{"class":78,"line":79},[76,118276,113616],{"class":90},[76,118278,370],{"class":82},[76,118280,1668],{"class":119},[76,118282,116871],{"class":90},[76,118284,666],{"class":82},[76,118286,116876],{"class":90},[19,118288,118289],{},"计算末端到目标的距离，并转换成 Python float。",[66,118291,118292],{"className":68,"code":115697,"language":70,"meta":71,"style":71},[73,118293,118294,118306],{"__ignoreMap":71},[76,118295,118296,118298,118300,118302,118304],{"class":78,"line":79},[76,118297,115704],{"class":90},[76,118299,370],{"class":82},[76,118301,115709],{"class":90},[76,118303,584],{"class":82},[76,118305,115714],{"class":119},[76,118307,118308,118310,118312,118314,118316,118318,118320],{"class":78,"line":94},[76,118309,115719],{"class":90},[76,118311,370],{"class":82},[76,118313,40911],{"class":119},[76,118315,115726],{"class":90},[76,118317,611],{"class":82},[76,118319,40911],{"class":119},[76,118321,115733],{"class":90},[19,118323,118324],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[66,118326,118328],{"className":68,"code":118327,"language":70,"meta":71,"style":71},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[73,118329,118330,118343],{"__ignoreMap":71},[76,118331,118332,118335,118337,118339,118341],{"class":78,"line":79},[76,118333,118334],{"class":90},"info ",[76,118336,370],{"class":82},[76,118338,6530],{"class":90},[76,118340,116922],{"class":126},[76,118342,116925],{"class":90},[76,118344,118345,118347],{"class":78,"line":94},[76,118346,422],{"class":82},[76,118348,116932],{"class":90},[19,118350,118351,118354],{},[73,118352,118353],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[66,118356,118358],{"className":68,"code":118357,"language":70,"meta":71,"style":71},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[73,118359,118360,118369],{"__ignoreMap":71},[76,118361,118362,118365,118367],{"class":78,"line":79},[76,118363,118364],{"class":90},"env ",[76,118366,370],{"class":82},[76,118368,116962],{"class":90},[76,118370,118371,118373,118375,118377,118379,118381,118383],{"class":78,"line":94},[76,118372,115420],{"class":90},[76,118374,370],{"class":82},[76,118376,116972],{"class":90},[76,118378,116586],{"class":7296},[76,118380,370],{"class":82},[76,118382,1294],{"class":119},[76,118384,130],{"class":90},[19,118386,118387,118388,118391],{},"创建环境并重置。",[73,118389,118390],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[66,118393,118395],{"className":68,"code":118394,"language":70,"meta":71,"style":71},"action = env.action_space.sample()\n",[73,118396,118397],{"__ignoreMap":71},[76,118398,118399,118401,118403],{"class":78,"line":79},[76,118400,109464],{"class":90},[76,118402,370],{"class":82},[76,118404,117041],{"class":90},[19,118406,118407],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118409,104338],{"id":104337},[19,118411,107506],{},[66,118413,118416],{"className":118414,"code":118415,"language":7268,"meta":71},[7266],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[73,118417,118415],{"__ignoreMap":71},[19,118419,118420],{},"这个环境已经具备强化学习环境的基本结构。",[19,118422,118423],{},"主函数里使用随机动作：",[66,118425,118426],{"className":68,"code":118394,"language":70,"meta":71,"style":71},[73,118427,118428],{"__ignoreMap":71},[76,118429,118430,118432,118434],{"class":78,"line":79},[76,118431,109464],{"class":90},[76,118433,370],{"class":82},[76,118435,117041],{"class":90},[19,118437,118438],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118440,104370],{"id":104369},[26,118442,118443,118446,118452,118461,118470,118479,118485],{},[29,118444,118445],{},"运行程序。",[29,118447,118448,118449,490],{},"确认 ",[73,118450,118451],{},"obs.shape == (10,)",[29,118453,113201,118454,118457,118458,490],{},[73,118455,118456],{},"env.action_space","，应类似 ",[73,118459,118460],{},"Box(-1.0, 1.0, (2,), float32)",[29,118462,107607,118463,118466,118467,490],{},[73,118464,118465],{},"self.max_steps = 10","，确认环境会更快 ",[73,118468,118469],{},"truncated=True",[29,118471,104433,118472,104436,118475,118478],{},[73,118473,118474],{},"terminated = dist \u003C 0.05",[73,118476,118477],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,118480,104433,118481,118484],{},[73,118482,118483],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,118486,118487,118488,118490,118491,118494],{},"在 ",[73,118489,118353],{}," 里加入 ",[73,118492,118493],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118496,104475],{"id":104474},[889,118498,118500],{"id":118499},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118502,118503,118504,118506],{},"Gymnasium 的 ",[73,118505,109156],{}," 返回 5 个值:",[66,118508,118510],{"className":68,"code":118509,"language":70,"meta":71,"style":71},"obs, reward, terminated, truncated, info\n",[73,118511,118512],{"__ignoreMap":71},[76,118513,118514],{"class":78,"line":79},[76,118515,118509],{"class":90},[19,118517,118518],{},"不是旧 Gym 的 4 个值。",[889,118520,118522,118525],{"id":118521},"datactrl-action-维度错误",[73,118523,118524],{},"data.ctrl[:] = action"," 维度错误",[19,118527,104545],{},[66,118529,118531],{"className":68,"code":118530,"language":70,"meta":71,"style":71},"print(self.model.nu)\nprint(action.shape)\n",[73,118532,118533,118544],{"__ignoreMap":71},[76,118534,118535,118537,118539,118541],{"class":78,"line":79},[76,118536,478],{"class":119},[76,118538,123],{"class":90},[76,118540,32867],{"class":119},[76,118542,118543],{"class":90},".model.nu)\n",[76,118545,118546,118548],{"class":78,"line":94},[76,118547,478],{"class":119},[76,118549,118550],{"class":90},"(action.shape)\n",[19,118552,118553],{},"两者必须匹配。",[889,118555,118557],{"id":118556},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118559,104484],{},[66,118561,118563],{"className":68,"code":118562,"language":70,"meta":71,"style":71},"mujoco.mj_forward(self.model, self.data)\n",[73,118564,118565],{"__ignoreMap":71},[76,118566,118567,118570,118572,118574,118576],{"class":78,"line":79},[76,118568,118569],{"class":90},"mujoco.mj_forward(",[76,118571,32867],{"class":119},[76,118573,116601],{"class":90},[76,118575,32867],{"class":119},[76,118577,116606],{"class":90},[889,118579,118581,118583],{"id":118580},"observation_space-维度和-obs-不一致",[73,118582,115620],{}," 维度和 obs 不一致",[19,118585,104597],{},[66,118587,118589],{"className":68,"code":118588,"language":70,"meta":71,"style":71},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[73,118590,118591,118601,118608],{"__ignoreMap":71},[76,118592,118593,118595,118597,118599],{"class":78,"line":79},[76,118594,112874],{"class":90},[76,118596,370],{"class":82},[76,118598,40911],{"class":119},[76,118600,116817],{"class":90},[76,118602,118603,118605],{"class":78,"line":94},[76,118604,478],{"class":119},[76,118606,118607],{"class":90},"(obs.shape)\n",[76,118609,118610,118612,118614,118616],{"class":78,"line":133},[76,118611,478],{"class":119},[76,118613,123],{"class":90},[76,118615,32867],{"class":119},[76,118617,118618],{"class":90},".observation_space.shape)\n",[19,118620,118621],{},"两者必须一致。本章观测是：",[66,118623,118626],{"className":118624,"code":118625,"language":7268,"meta":71},[7266],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[73,118627,118625],{"__ignoreMap":71},[889,118629,118631],{"id":118630},"action-超过范围","action 超过范围",[19,118633,118634],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[66,118636,118637],{"className":68,"code":118136,"language":70,"meta":71,"style":71},[73,118638,118639],{"__ignoreMap":71},[76,118640,118641,118643,118645,118647,118649,118651,118653],{"class":78,"line":79},[76,118642,109464],{"class":90},[76,118644,370],{"class":82},[76,118646,109469],{"class":90},[76,118648,32867],{"class":119},[76,118650,116738],{"class":90},[76,118652,32867],{"class":119},[76,118654,116743],{"class":90},[19,118656,118657,118658,490],{},"这能避免无效动作直接写入 ",[73,118659,103098],{},[889,118661,118663],{"id":118662},"忘记返回-info","忘记返回 info",[19,118665,118503,118666,103040,118668,118670],{},[73,118667,72084],{},[73,118669,109156],{}," 都会返回 info：",[66,118672,118673],{"className":68,"code":115413,"language":70,"meta":71,"style":71},[73,118674,118675,118683],{"__ignoreMap":71},[76,118676,118677,118679,118681],{"class":78,"line":79},[76,118678,115420],{"class":90},[76,118680,370],{"class":82},[76,118682,115425],{"class":90},[76,118684,118685,118687,118689],{"class":78,"line":94},[76,118686,115430],{"class":90},[76,118688,370],{"class":82},[76,118690,115435],{"class":90},[19,118692,118693,118694,490],{},"即使暂时没有额外信息，也返回 ",[73,118695,34498],{},[14,118697,118699],{"id":118698},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118701,118702],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,118704,118705,118708,118711,118714,118717,118720],{},[29,118706,118707],{},"更稳定的 reward。",[29,118709,118710],{},"合理的 episode 长度。",[29,118712,118713],{},"可重复的随机目标采样。",[29,118715,118716],{},"render 接口。",[29,118718,118719],{},"环境注册代码。",[29,118721,118722],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118724,118725],{},"如果只是自己写训练循环，最小形式是：",[66,118727,118729],{"className":68,"code":118728,"language":70,"meta":71,"style":71},"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",[73,118730,118731,118739,118755,118759,118775,118784,118793,118803],{"__ignoreMap":71},[76,118732,118733,118735,118737],{"class":78,"line":79},[76,118734,118364],{"class":90},[76,118736,370],{"class":82},[76,118738,116962],{"class":90},[76,118740,118741,118743,118745,118747,118749,118751,118753],{"class":78,"line":94},[76,118742,115420],{"class":90},[76,118744,370],{"class":82},[76,118746,116972],{"class":90},[76,118748,116586],{"class":7296},[76,118750,370],{"class":82},[76,118752,1294],{"class":119},[76,118754,130],{"class":90},[76,118756,118757],{"class":78,"line":133},[76,118758,149],{"emptyLinePlaceholder":148},[76,118760,118761,118763,118765,118767,118769,118771,118773],{"class":78,"line":145},[76,118762,5112],{"class":82},[76,118764,103523],{"class":90},[76,118766,1475],{"class":82},[76,118768,34483],{"class":119},[76,118770,123],{"class":90},[76,118772,8489],{"class":119},[76,118774,32830],{"class":90},[76,118776,118777,118780,118782],{"class":78,"line":152},[76,118778,118779],{"class":90},"    action ",[76,118781,370],{"class":82},[76,118783,117041],{"class":90},[76,118785,118786,118789,118791],{"class":78,"line":157},[76,118787,118788],{"class":90},"    obs, reward, terminated, truncated, info ",[76,118790,370],{"class":82},[76,118792,115435],{"class":90},[76,118794,118795,118797,118799,118801],{"class":78,"line":246},[76,118796,578],{"class":82},[76,118798,117107],{"class":90},[76,118800,117110],{"class":82},[76,118802,117113],{"class":90},[76,118804,118805,118808,118810],{"class":78,"line":251},[76,118806,118807],{"class":90},"        obs, info ",[76,118809,370],{"class":82},[76,118811,115425],{"class":90},[14,118813,118815],{"id":118814},"_9本章小结","9.本章小结",[19,118817,118818],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[66,118820,118823],{"className":118821,"code":118822,"language":7268,"meta":71},[7266],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[73,118824,118822],{"__ignoreMap":71},[19,118826,118827],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2178,118829,118830],{},"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":71,"searchDepth":94,"depth":94,"links":118832},[118833,118834,118835,118842,118846,118847,118848,118858,118859],{"id":102668,"depth":94,"text":102669},{"id":102791,"depth":94,"text":102792},{"id":103066,"depth":94,"text":103067,"children":118836},[118837,118839,118841],{"id":115644,"depth":133,"text":118838},"terminated 和 truncated 的区别",{"id":115747,"depth":133,"text":118840},"observation_space 和 action_space",{"id":115874,"depth":133,"text":115875},{"id":103274,"depth":94,"text":103275,"children":118843},[118844,118845],{"id":103594,"depth":133,"text":103594},{"id":103730,"depth":133,"text":103730},{"id":104337,"depth":94,"text":104338},{"id":104369,"depth":94,"text":104370},{"id":104474,"depth":94,"text":104475,"children":118849},[118850,118851,118853,118854,118856,118857],{"id":118499,"depth":133,"text":118500},{"id":118521,"depth":133,"text":118852},"data.ctrl[:] = action 维度错误",{"id":118556,"depth":133,"text":118557},{"id":118580,"depth":133,"text":118855},"observation_space 维度和 obs 不一致",{"id":118630,"depth":133,"text":118631},{"id":118662,"depth":133,"text":118663},{"id":118698,"depth":94,"text":118699},{"id":118814,"depth":94,"text":118815},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115397,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118866,"title":118867,"body":118868,"description":119291,"extension":2202,"meta":119292,"navigation":148,"path":119293,"seo":119294,"stem":119295,"__hash__":119296},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118869,"toc":119281},[118870,118874,118877,118880,118900,118906,118912,118922,118925,118928,118948,118951,118955,118958,118964,118967,118981,118984,118987,119061,119064,119070,119073,119096,119099,119149,119152,119158,119161,119164,119167,119186,119189,119195,119198,119201,119204,119224,119227,119230,119233,119278],[10,118871,118873],{"id":118872},"mujoco-学习","MuJoCo 学习",[19,118875,118876],{},"初版",[19,118878,118879],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118881,118882,118885,118888,118897],{},[29,118883,118884],{},"MuJoCo 模型文件在描述什么。",[29,118886,118887],{},"Python 代码怎样读取和推进仿真。",[29,118889,118890,2478,118892,2478,118894,118896],{},[73,118891,106052],{},[73,118893,106382],{},[73,118895,106385],{}," 这些数组为什么重要。",[29,118898,118899],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118901,118902,118903,118905],{},"默认环境为 Fedora 44、Python >= 3.10、",[73,118904,103049],{}," 官方 Python bindings。",[19,118907,118908,118909,118911],{},"注意：本文禁止使用 ",[73,118910,103034],{},"。所有示例均使用：",[66,118913,118914],{"className":68,"code":103600,"language":70,"meta":71,"style":71},[73,118915,118916],{"__ignoreMap":71},[76,118917,118918,118920],{"class":78,"line":79},[76,118919,32438],{"class":82},[76,118921,103323],{"class":90},[14,118923,118924],{"id":118924},"适合谁阅读",[19,118926,118927],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118929,118930,118933,118936,118939],{},[29,118931,118932],{},"没学过 MuJoCo，只会一点 Python。",[29,118934,118935],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118937,118938],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118940,118941,118942,118944,118945,118947],{},"以前接触过 ",[73,118943,103034],{},"，现在想迁移到官方 ",[73,118946,103043],{}," Python bindings。",[19,118949,118950],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118952,118954],{"id":118953},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118956,118957],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[66,118959,118962],{"className":118960,"code":118961,"language":7268,"meta":71},[7266],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[73,118963,118961],{"__ignoreMap":71},[19,118965,118966],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118968,118969,118972,118975,118978],{},[29,118970,118971],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118973,118974],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118976,118977],{},"生成强化学习环境。",[29,118979,118980],{},"采集状态、动作、图像、奖励等训练数据。",[14,118982,118983],{"id":118983},"学习前的心智模型",[19,118985,118986],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2404,118988,118989,119001],{},[2407,118990,118991],{},[2410,118992,118993,118996,118999],{},[2413,118994,118995],{"align":25785},"部分",[2413,118997,118998],{"align":25785},"负责什么",[2413,119000,23236],{"align":25785},[2451,119002,119003,119014,119026,119038,119050],{},[2410,119004,119005,119008,119011],{},[2456,119006,119007],{"align":25785},"MJCF XML",[2456,119009,119010],{"align":25785},"定义世界和机器人结构",[2456,119012,119013],{"align":25785},"地面、盒子、关节、电机、摄像头",[2410,119015,119016,119020,119023],{},[2456,119017,119018],{"align":25785},[73,119019,102731],{},[2456,119021,119022],{"align":25785},"编译后的静态模型",[2456,119024,119025],{"align":25785},"有几个关节、有几个电机、时间步长是多少",[2410,119027,119028,119032,119035],{},[2456,119029,119030],{"align":25785},[73,119031,102741],{},[2456,119033,119034],{"align":25785},"运行中的动态状态",[2456,119036,119037],{"align":25785},"当前时间、位置、速度、电机输入",[2410,119039,119040,119044,119047],{},[2456,119041,119042],{"align":25785},[73,119043,103237],{},[2456,119045,119046],{"align":25785},"推进一步物理仿真",[2456,119048,119049],{"align":25785},"根据重力、力、碰撞更新状态",[2410,119051,119052,119055,119058],{},[2456,119053,119054],{"align":25785},"Viewer \u002F Renderer",[2456,119056,119057],{"align":25785},"把仿真显示出来",[2456,119059,119060],{"align":25785},"打开窗口或保存图片",[19,119062,119063],{},"一句话总结：",[66,119065,119068],{"className":119066,"code":119067,"language":7268,"meta":71},[7266],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[73,119069,119067],{"__ignoreMap":71},[19,119071,119072],{},"参考来源：",[3261,119074,119075,119082,119089],{},[29,119076,119077,119078],{},"MuJoCo Python 官方文档：",[2503,119079,119080],{"href":119080,"rel":119081},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25914],[29,119083,119084,119085],{},"MuJoCo XML Reference：",[2503,119086,119087],{"href":119087,"rel":119088},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25914],[29,119090,119091,119092],{},"MuJoCo Overview：",[2503,119093,119094],{"href":119094,"rel":119095},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25914],[14,119097,119098],{"id":119098},"章节目录",[26,119100,119101,119107,119113,119119,119125,119131,119137,119143],{},[29,119102,119103],{},[2503,119104,119106],{"href":119105},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,119108,119109],{},[2503,119110,119112],{"href":119111},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,119114,119115],{},[2503,119116,119118],{"href":119117},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,119120,119121],{},[2503,119122,119124],{"href":119123},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,119126,119127],{},[2503,119128,119130],{"href":119129},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,119132,119133],{},[2503,119134,119136],{"href":119135},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,119138,119139],{},[2503,119140,119142],{"href":119141},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,119144,119145],{},[2503,119146,119148],{"href":119147},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119150,119151],{"id":119151},"推荐学习路线",[66,119153,119156],{"className":119154,"code":119155,"language":7268,"meta":71},[7266],"环境安装\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",[73,119157,119155],{"__ignoreMap":71},[19,119159,119160],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119162,119163],{"id":119163},"建议的目录结构",[19,119165,119166],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[66,119168,119170],{"className":25871,"code":119169,"language":25873,"meta":71,"style":71},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[73,119171,119172,119180],{"__ignoreMap":71},[76,119173,119174,119176,119178],{"class":78,"line":79},[76,119175,103288],{"class":86},[76,119177,31264],{"class":119},[76,119179,103293],{"class":126},[76,119181,119182,119184],{"class":78,"line":94},[76,119183,103298],{"class":119},[76,119185,103293],{"class":126},[19,119187,119188],{},"每一章的代码都单独保存：",[66,119190,119193],{"className":119191,"code":119192,"language":7268,"meta":71},[7266],"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",[73,119194,119192],{"__ignoreMap":71},[19,119196,119197],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119199,119200],{"id":119200},"学习方法",[19,119202,119203],{},"每章建议按这个顺序操作：",[26,119205,119206,119209,119212,119215,119218,119221],{},[29,119207,119208],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,119210,119211],{},"复制最小可运行代码，保存成指定文件。",[29,119213,119214],{},"运行代码，确认没有报错。",[29,119216,119217],{},"对照“运行结果说明”理解输出。",[29,119219,119220],{},"做“验证步骤”，主动改一两个参数。",[29,119222,119223],{},"遇到报错先看“常见错误与解决方案”。",[19,119225,119226],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119228,119229],{"id":119229},"全局排错顺序",[19,119231,119232],{},"遇到问题时，按下面顺序查：",[26,119234,119235,119241,119247,119252,119255,119258,119265,119275],{},[29,119236,119237,119238],{},"Python 环境是否激活：",[73,119239,119240],{},"which python",[29,119242,119243,119244],{},"MuJoCo 是否能导入：",[73,119245,119246],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,119248,119249,119250],{},"是否误装了 ",[73,119251,103034],{},[29,119253,119254],{},"XML 标签是否闭合、属性是否拼写正确",[29,119256,119257],{},"actuator 引用的 joint 名字是否存在",[29,119259,119260,119262,119263],{},[73,119261,103098],{}," 的长度是否等于 ",[73,119264,104180],{},[29,119266,107607,119267,84563,119269,119271,119272],{},[73,119268,106052],{},[73,119270,106382],{}," 后是否调用了 ",[73,119273,119274],{},"mujoco.mj_forward",[29,119276,119277],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2178,119279,119280],{},"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":71,"searchDepth":94,"depth":94,"links":119282},[119283,119284,119285,119286,119287,119288,119289,119290],{"id":118924,"depth":94,"text":118924},{"id":118953,"depth":94,"text":118954},{"id":118983,"depth":94,"text":118983},{"id":119098,"depth":94,"text":119098},{"id":119151,"depth":94,"text":119151},{"id":119163,"depth":94,"text":119163},{"id":119200,"depth":94,"text":119200},{"id":119229,"depth":94,"text":119229},"仿真搭建。",{"category":25427},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118867,"description":119291},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119298,"title":119299,"body":119300,"description":2201,"extension":2202,"meta":119755,"navigation":148,"path":119756,"seo":119757,"stem":119758,"__hash__":119759},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119301,"toc":119753},[119302,119305,119308,119314,119750],[10,119303,119299],{"id":119304},"_1-最常用的基本操作更新",[19,119306,119307],{},"装linux系统教程：",[19,119309,119310],{},[2503,119311,119312],{"href":119312,"rel":119313},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25914],[66,119315,119319],{"className":119316,"code":119317,"language":119318,"meta":71,"style":71},"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",[73,119320,119321,119326,119331,119340,119345,119354,119359,119379,119384,119395,119400,119409,119414,119442,119447,119466,119471,119490,119494,119499,119515,119519,119524,119554,119558,119563,119579,119583,119588,119603,119607,119612,119628,119632,119637,119649,119661,119665,119670,119687,119691,119696,119714,119718,119723,119732,119736,119741],{"__ignoreMap":71},[76,119322,119323],{"class":78,"line":79},[76,119324,119325],{"class":540},"#更新相关的知识\n",[76,119327,119328],{"class":78,"line":94},[76,119329,119330],{"class":540},"# 更新软件包列表（从服务器获取最新软件信息）\n",[76,119332,119333,119335,119338],{"class":78,"line":133},[76,119334,26626],{"class":86},[76,119336,119337],{"class":126}," apt",[76,119339,28291],{"class":126},[76,119341,119342],{"class":78,"line":145},[76,119343,119344],{"class":540},"# 升级所有可更新的软件包（不删除旧包）\n",[76,119346,119347,119349,119351],{"class":78,"line":152},[76,119348,26626],{"class":86},[76,119350,119337],{"class":126},[76,119352,119353],{"class":126}," upgrade\n",[76,119355,119356],{"class":78,"line":157},[76,119357,119358],{"class":540},"#更新和升级软件包\n",[76,119360,119361,119363,119365,119368,119370,119372,119374,119377],{"class":78,"line":246},[76,119362,26626],{"class":86},[76,119364,119337],{"class":126},[76,119366,119367],{"class":126}," update",[76,119369,28239],{"class":90},[76,119371,26626],{"class":86},[76,119373,119337],{"class":126},[76,119375,119376],{"class":126}," upgrade",[76,119378,103003],{"class":119},[76,119380,119381],{"class":78,"line":251},[76,119382,119383],{"class":540},"#列出可更新的软件包及版本信息\n",[76,119385,119386,119389,119392],{"class":78,"line":257},[76,119387,119388],{"class":86},"apt",[76,119390,119391],{"class":126}," list",[76,119393,119394],{"class":119}," --upgradable\n",[76,119396,119397],{"class":78,"line":641},[76,119398,119399],{"class":540},"#彻底升级（处理依赖关系，可能删除旧包）\n",[76,119401,119402,119404,119406],{"class":78,"line":646},[76,119403,26626],{"class":86},[76,119405,119337],{"class":126},[76,119407,119408],{"class":126}," full-upgrade\n",[76,119410,119411],{"class":78,"line":659},[76,119412,119413],{"class":540},"#设置指定版本\n",[76,119415,119416,119418,119420,119422,119424,119427,119429,119431,119433,119435,119438,119440],{"class":78,"line":1608},[76,119417,26626],{"class":86},[76,119419,119337],{"class":126},[76,119421,25883],{"class":126},[76,119423,30950],{"class":82},[76,119425,119426],{"class":126},"package_nam",[76,119428,2342],{"class":90},[76,119430,1829],{"class":82},[76,119432,370],{"class":126},[76,119434,584],{"class":82},[76,119436,119437],{"class":126},"version_numbe",[76,119439,2929],{"class":90},[76,119441,53339],{"class":82},[76,119443,119444],{"class":78,"line":1632},[76,119445,119446],{"class":540},"#只安装软件包不升级\n",[76,119448,119449,119451,119453,119455,119457,119459,119461,119463],{"class":78,"line":1637},[76,119450,26626],{"class":86},[76,119452,119337],{"class":126},[76,119454,25883],{"class":126},[76,119456,30950],{"class":82},[76,119458,119426],{"class":126},[76,119460,2342],{"class":90},[76,119462,1829],{"class":82},[76,119464,119465],{"class":119}," --no-upgrade\n",[76,119467,119468],{"class":78,"line":1642},[76,119469,119470],{"class":540},"#只升级，不存在就不安装\n",[76,119472,119473,119475,119477,119479,119481,119483,119485,119487],{"class":78,"line":1652},[76,119474,26626],{"class":86},[76,119476,119337],{"class":126},[76,119478,25883],{"class":126},[76,119480,30950],{"class":82},[76,119482,119426],{"class":126},[76,119484,2342],{"class":90},[76,119486,1829],{"class":82},[76,119488,119489],{"class":119}," --only-upgrade\n",[76,119491,119492],{"class":78,"line":1660},[76,119493,149],{"emptyLinePlaceholder":148},[76,119495,119496],{"class":78,"line":1683},[76,119497,119498],{"class":540},"#安装指定的软件命令\n",[76,119500,119501,119503,119505,119507,119509,119511,119513],{"class":78,"line":1698},[76,119502,26626],{"class":86},[76,119504,119337],{"class":126},[76,119506,25883],{"class":126},[76,119508,30950],{"class":82},[76,119510,119426],{"class":126},[76,119512,2342],{"class":90},[76,119514,53339],{"class":82},[76,119516,119517],{"class":78,"line":1711},[76,119518,149],{"emptyLinePlaceholder":148},[76,119520,119521],{"class":78,"line":1717},[76,119522,119523],{"class":540},"#安装多个软件包\n",[76,119525,119526,119528,119530,119532,119534,119537,119540,119542,119544,119547,119549,119551],{"class":78,"line":1728},[76,119527,26626],{"class":86},[76,119529,119337],{"class":126},[76,119531,25883],{"class":126},[76,119533,30950],{"class":82},[76,119535,119536],{"class":126},"package_",[76,119538,119539],{"class":82},"1>",[76,119541,30950],{"class":82},[76,119543,119536],{"class":126},[76,119545,119546],{"class":82},"2>",[76,119548,30950],{"class":82},[76,119550,119536],{"class":126},[76,119552,119553],{"class":82},"3>\n",[76,119555,119556],{"class":78,"line":1740},[76,119557,149],{"emptyLinePlaceholder":148},[76,119559,119560],{"class":78,"line":1746},[76,119561,119562],{"class":540},"#更新指定的软件命令\n",[76,119564,119565,119567,119569,119571,119573,119575,119577],{"class":78,"line":1751},[76,119566,26626],{"class":86},[76,119568,119337],{"class":126},[76,119570,119367],{"class":126},[76,119572,30950],{"class":82},[76,119574,119426],{"class":126},[76,119576,2342],{"class":90},[76,119578,53339],{"class":82},[76,119580,119581],{"class":78,"line":1756},[76,119582,149],{"emptyLinePlaceholder":148},[76,119584,119585],{"class":78,"line":1766},[76,119586,119587],{"class":540},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[76,119589,119590,119592,119595,119597,119599,119601],{"class":78,"line":1773},[76,119591,119388],{"class":86},[76,119593,119594],{"class":126}," show",[76,119596,30950],{"class":82},[76,119598,119426],{"class":126},[76,119600,2342],{"class":90},[76,119602,53339],{"class":82},[76,119604,119605],{"class":78,"line":1793},[76,119606,149],{"emptyLinePlaceholder":148},[76,119608,119609],{"class":78,"line":1806},[76,119610,119611],{"class":540},"#删除软件包命令\n",[76,119613,119614,119616,119618,119620,119622,119624,119626],{"class":78,"line":1817},[76,119615,26626],{"class":86},[76,119617,119337],{"class":126},[76,119619,28128],{"class":126},[76,119621,30950],{"class":82},[76,119623,119426],{"class":126},[76,119625,2342],{"class":90},[76,119627,53339],{"class":82},[76,119629,119630],{"class":78,"line":1822},[76,119631,149],{"emptyLinePlaceholder":148},[76,119633,119634],{"class":78,"line":1835},[76,119635,119636],{"class":540},"# 清理旧版本和缓存（释放磁盘空间）\n",[76,119638,119639,119641,119643,119646],{"class":78,"line":1847},[76,119640,26626],{"class":86},[76,119642,119337],{"class":126},[76,119644,119645],{"class":126}," autoremove",[76,119647,119648],{"class":540},"  # 删除不再需要的依赖和库文件\n",[76,119650,119651,119653,119655,119658],{"class":78,"line":1852},[76,119652,26626],{"class":86},[76,119654,119337],{"class":126},[76,119656,119657],{"class":126}," clean",[76,119659,119660],{"class":540},"       # 清理下载的缓存包\n",[76,119662,119663],{"class":78,"line":1862},[76,119664,149],{"emptyLinePlaceholder":148},[76,119666,119667],{"class":78,"line":1874},[76,119668,119669],{"class":540},"#移除软件包及配置文件\n",[76,119671,119672,119674,119676,119679,119681,119683,119685],{"class":78,"line":1879},[76,119673,26626],{"class":86},[76,119675,119337],{"class":126},[76,119677,119678],{"class":126}," purge",[76,119680,30950],{"class":82},[76,119682,119426],{"class":126},[76,119684,2342],{"class":90},[76,119686,53339],{"class":82},[76,119688,119689],{"class":78,"line":1884},[76,119690,149],{"emptyLinePlaceholder":148},[76,119692,119693],{"class":78,"line":1889},[76,119694,119695],{"class":540},"#查找软件包命令\n",[76,119697,119698,119700,119702,119705,119707,119710,119712],{"class":78,"line":1900},[76,119699,26626],{"class":86},[76,119701,119337],{"class":126},[76,119703,119704],{"class":126}," search",[76,119706,30950],{"class":82},[76,119708,119709],{"class":126},"keywor",[76,119711,2578],{"class":90},[76,119713,53339],{"class":82},[76,119715,119716],{"class":78,"line":1906},[76,119717,149],{"emptyLinePlaceholder":148},[76,119719,119720],{"class":78,"line":1924},[76,119721,119722],{"class":540},"#列出所有已安装的包\n",[76,119724,119725,119727,119729],{"class":78,"line":1929},[76,119726,119388],{"class":86},[76,119728,119391],{"class":126},[76,119730,119731],{"class":119}," --installed\n",[76,119733,119734],{"class":78,"line":1944},[76,119735,149],{"emptyLinePlaceholder":148},[76,119737,119738],{"class":78,"line":1950},[76,119739,119740],{"class":540},"#列出所有已安装的包的版本信息\n",[76,119742,119743,119745,119747],{"class":78,"line":1965},[76,119744,119388],{"class":86},[76,119746,119391],{"class":126},[76,119748,119749],{"class":119}," --all-versions\n",[2178,119751,119752],{},"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":71,"searchDepth":94,"depth":94,"links":119754},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119299,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119761,"title":119762,"body":119763,"description":2201,"extension":2202,"meta":120504,"navigation":148,"path":120505,"seo":120506,"stem":120507,"__hash__":120508},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119764,"toc":120491},[119765,119768,119772,119775,119781,119785,119789,119795,119800,119805,119810,119815,119820,119823,119826,119829,119832,119836,119839,119844,119847,119852,119855,119860,119867,119870,119873,119876,119879,119882,119893,119897,119901,119906,119911,119915,119920,119924,119929,119933,119937,119942,119945,119990,119995,119999,120003,120008,120014,120019,120029,120034,120044,120049,120054,120081,120085,120088,120093,120096,120121,120125,120130,120133,120138,120143,120163,120168,120171,120186,120190,120243,120246,120251,120255,120258,120273,120276,120279,120284,120288,120292,120295,120299,120303,120306,120311,120316,120320,120327,120335,120338,120345,120350,120355,120358,120363,120370,120375,120382,120386,120388,120393,120397,120400,120403,120408,120411,120416,120419,120424,120429,120434,120438,120443,120447,120488],[10,119766,119762],{"id":119767},"_2-linux装机教程",[14,119769,119771],{"id":119770},"_21-实体机","2.1 实体机",[19,119773,119774],{},"使用清华源：（Ubuntu24.04）",[19,119776,119777],{},[2503,119778,119779],{"href":119779,"rel":119780},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25914],[14,119782,119784],{"id":119783},"_22-普通虚拟机","2.2 普通虚拟机",[889,119786,119788],{"id":119787},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119790,119791],{},[2503,119792,119793],{"href":119793,"rel":119794},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25914],[19,119796,119797],{},[3583,119798],{"alt":71,"src":119799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119801,119802],{},[3583,119803],{"alt":71,"src":119804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119806,119807],{},[3583,119808],{"alt":71,"src":119809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119811,119812],{},[3583,119813],{"alt":71,"src":119814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119816,119817],{},[3583,119818],{"alt":71,"src":119819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119821,119822],{},"内存4G（4096MB）；",[19,119824,119825],{},"CPU给4个核；",[19,119827,119828],{},"硬盘动态分配60G；",[19,119830,119831],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[889,119833,119835],{"id":119834},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119837,119838],{},"按照1.1的步骤下载Ubuntu",[19,119840,119841],{},[3583,119842],{"alt":71,"src":119843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119845,119846],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119848,119849],{},[3583,119850],{"alt":71,"src":119851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119853,119854],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119856,119857],{},[3583,119858],{"alt":71,"src":119859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119861,119862,119863,119866],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2416,119864,119865],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119868,119869],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119871,119872],{},"将改动写入磁盘吗 继续",[19,119874,119875],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119877,119878],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119880,119881],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119883,119884,119885,119888,119889,119892],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2416,119886,119887],{},"除了"," 选不发送系统信息与不升级之外， ",[2416,119890,119891],{},"其它"," 都跳过或前进）",[889,119894,119896],{"id":119895},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24047,119898,119900],{"id":119899},"_2231-全屏","2.2.3.1 全屏",[19,119902,119903],{},[3583,119904],{"alt":71,"src":119905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119907,119908],{},[3583,119909],{"alt":71,"src":119910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24047,119912,119914],{"id":119913},"_2232-文件交换","2.2.3.2 文件交换",[19,119916,119917],{},[3583,119918],{"alt":71,"src":119919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24047,119921,119923],{"id":119922},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119925,119926],{},[3583,119927],{"alt":71,"src":119928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119930,119932],{"id":119931},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[889,119934,119936],{"id":119935},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119938,119939],{},[29,119940,119941],{},"什么情况下推荐？",[19,119943,119944],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119946,119947],{"start":94},[29,119948,119949,119950],{},"优缺点：",[26,119951,119952,119982],{},[29,119953,119954,119955],{},"优点：",[26,119956,119957,119960,119967,119970,119973,119976,119979],{},[29,119958,119959],{},"WSL2是最好的Linux发行版;(bushi)",[29,119961,119962,119963,119966],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2416,119964,119965],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119968,119969],{},"非常方便调用USB设备，可以USB直通;",[29,119971,119972],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119974,119975],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119977,119978],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119980,119981],{},"非常方便使用Windows的VScode远程开发;",[29,119983,119984,119985],{},"缺点：",[26,119986,119987],{},[29,119988,119989],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119991,119992],{},[3583,119993],{"alt":71,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[889,119996,119998],{"id":119997},"_232-安装教程","2.3.2 安装教程",[24047,120000,120002],{"id":120001},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,120004,120005],{},[29,120006,120007],{},"方法一(图形界面)",[19,120009,120010,120011,26668],{},"用Win+R输入",[73,120012,120013],{},"appwiz.cpl",[19,120015,120016],{},[3583,120017],{"alt":71,"src":120018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120020,120021,120022,120025,120026,28522],{},"点击OK进入 ",[2416,120023,120024],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2416,120027,120028],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120030,120031],{},[3583,120032],{"alt":71,"src":120033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120035,120036,120037,103040,120040,120043],{},"选择 ",[2416,120038,120039],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2416,120041,120042],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120045,120046],{},[3583,120047],{"alt":71,"src":120048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,120050,120051],{"start":94},[29,120052,120053],{},"方法二(命令行)",[66,120055,120059],{"className":120056,"code":120057,"language":120058,"meta":71,"style":71},"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",[73,120060,120061,120066,120071,120076],{"__ignoreMap":71},[76,120062,120063],{"class":78,"line":79},[76,120064,120065],{},"# 开启 Linux 子系统\n",[76,120067,120068],{"class":78,"line":94},[76,120069,120070],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[76,120072,120073],{"class":78,"line":133},[76,120074,120075],{},"# 开启虚拟机平台\n",[76,120077,120078],{"class":78,"line":145},[76,120079,120080],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24047,120082,120084],{"id":120083},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120086,120087],{},"用管理员权限打开powershell",[19,120089,120090],{},[3583,120091],{"alt":71,"src":120092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120094,120095],{},"升级WSL并设置默认版本为WSL2",[66,120097,120099],{"className":120056,"code":120098,"language":120058,"meta":71,"style":71},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[73,120100,120101,120106,120111,120116],{"__ignoreMap":71},[76,120102,120103],{"class":78,"line":79},[76,120104,120105],{},"# 更新 wsl\n",[76,120107,120108],{"class":78,"line":94},[76,120109,120110],{},"wsl --update\n",[76,120112,120113],{"class":78,"line":133},[76,120114,120115],{},"# 将 wsl 版本设置为 wsl2\n",[76,120117,120118],{"class":78,"line":145},[76,120119,120120],{},"wsl --set-default-version 2\n",[24047,120122,120124],{"id":120123},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,120126,120127],{},[29,120128,120129],{},"方式一(商店下载)",[19,120131,120132],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120134,120135],{},[3583,120136],{"alt":71,"src":120137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,120139,120140],{"start":94},[29,120141,120142],{},"方式二(命令行安装)",[66,120144,120146],{"className":120056,"code":120145,"language":120058,"meta":71,"style":71},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[73,120147,120148,120153,120158],{"__ignoreMap":71},[76,120149,120150],{"class":78,"line":79},[76,120151,120152],{},"# 列出可安装的 Linux 版本\n",[76,120154,120155],{"class":78,"line":94},[76,120156,120157],{},"#（需要科学手段）\n",[76,120159,120160],{"class":78,"line":133},[76,120161,120162],{},"wsl --list --online\n",[19,120164,120165],{},[3583,120166],{"alt":71,"src":120167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120169,120170],{},"选择对应发行版并安装",[66,120172,120174],{"className":120056,"code":120173,"language":120058,"meta":71,"style":71},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[73,120175,120176,120181],{"__ignoreMap":71},[76,120177,120178],{"class":78,"line":79},[76,120179,120180],{},"# Ubuntu安装完毕后需要重启系统\n",[76,120182,120183],{"class":78,"line":94},[76,120184,120185],{},"wsl --install -d Ubuntu-24.04\n",[24047,120187,120189],{"id":120188},"_2324-查看系统状态","2.3.2.4 查看系统状态",[66,120191,120193],{"className":120056,"code":120192,"language":120058,"meta":71,"style":71},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[73,120194,120195,120200,120205,120210,120215,120219,120223,120228,120233,120238],{"__ignoreMap":71},[76,120196,120197],{"class":78,"line":79},[76,120198,120199],{},"# 查看 wsl\n",[76,120201,120202],{"class":78,"line":94},[76,120203,120204],{},"wsl -l\n",[76,120206,120207],{"class":78,"line":133},[76,120208,120209],{},"# 查看 wsl 运行版本或模式\n",[76,120211,120212],{"class":78,"line":145},[76,120213,120214],{},"wsl -l -v\n",[76,120216,120217],{"class":78,"line":152},[76,120218,149],{"emptyLinePlaceholder":148},[76,120220,120221],{"class":78,"line":157},[76,120222,149],{"emptyLinePlaceholder":148},[76,120224,120225],{"class":78,"line":246},[76,120226,120227],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[76,120229,120230],{"class":78,"line":251},[76,120231,120232],{},"wsl --set-version \u003Cdistro> 2\n",[76,120234,120235],{"class":78,"line":257},[76,120236,120237],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[76,120239,120240],{"class":78,"line":641},[76,120241,120242],{},"wsl --unregister \u003Cdistro>\n",[19,120244,120245],{},"输出Version为2即正常",[19,120247,120248],{},[3583,120249],{"alt":71,"src":120250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24047,120252,120254],{"id":120253},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120256,120257],{},"直接在Powershell里输入wsl命令进入子系统",[66,120259,120261],{"className":120056,"code":120260,"language":120058,"meta":71,"style":71},"# 进入子系统\nwsl\n",[73,120262,120263,120268],{"__ignoreMap":71},[76,120264,120265],{"class":78,"line":79},[76,120266,120267],{},"# 进入子系统\n",[76,120269,120270],{"class":78,"line":94},[76,120271,120272],{},"wsl\n",[19,120274,120275],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120277,120278],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120280,120281],{},[3583,120282],{"alt":71,"src":120283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[889,120285,120287],{"id":120286},"_233-配置各种环境","2.3.3 配置各种环境",[24047,120289,120291],{"id":120290},"_2331-换源","2.3.3.1 换源",[19,120293,120294],{},"(同实体机LINUX，往下找教程)",[24047,120296,120298],{"id":120297},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24959,120300,120302],{"id":120301},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120304,120305],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120307,120308],{},[3583,120309],{"alt":71,"src":120310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120312,120313],{},[3583,120314],{"alt":71,"src":120315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24959,120317,120319],{"id":120318},"_23322-cuda","2.3.3.2.2 CUDA",[19,120321,120322,120323],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2503,120324,120325],{"href":120325,"rel":120326},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25914],[19,120328,120329,120332],{},[3583,120330],{"alt":71,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3583,120333],{"alt":71,"src":120334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120336,120337],{},"在下方的网站，选择合适的版本。",[19,120339,120340,120341],{},"WSL2 专属 CUDA 指南：",[2503,120342,120343],{"href":120343,"rel":120344},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25914],[19,120346,120347],{},[2416,120348,120349],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120351,120352],{},[3583,120353],{"alt":71,"src":120354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120356,120357],{},"挨行敲一遍",[19,120359,120360],{},[3583,120361],{"alt":71,"src":120362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120364,120365,120366,120369],{},"敲完后，输入",[73,120367,120368],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120371,120372],{},[3583,120373],{"alt":71,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120376,120377,120378,120381],{},"（请详看下方教程的",[2416,120379,120380],{},"安装CUDA的配置环境来看","如何配置环境）",[24959,120383,120385],{"id":120384},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120387,120294],{},[19,120389,120390],{},[3583,120391],{"alt":71,"src":120392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24047,120394,120396],{"id":120395},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120398,120399],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120401,120402],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120404,120405],{},[3583,120406],{"alt":71,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120409,120410],{},"连接WSL2",[19,120412,120413],{},[3583,120414],{"alt":71,"src":120415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120417,120418],{},"远程开发成功。",[19,120420,120421],{},[3583,120422],{"alt":71,"src":120423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120425,120426],{},[3583,120427],{"alt":71,"src":120428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120430,120431],{},[3583,120432],{"alt":71,"src":120433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24047,120435,120437],{"id":120436},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120439,120440],{},[3583,120441],{"alt":71,"src":120442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24047,120444,120446],{"id":120445},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[66,120448,120450],{"className":119316,"code":120449,"language":119318,"meta":71,"style":71},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[73,120451,120452,120460,120468,120479,120483],{"__ignoreMap":71},[76,120453,120454,120456,120458],{"class":78,"line":79},[76,120455,26626],{"class":86},[76,120457,119337],{"class":126},[76,120459,28291],{"class":126},[76,120461,120462,120464,120466],{"class":78,"line":94},[76,120463,26626],{"class":86},[76,120465,119337],{"class":126},[76,120467,119353],{"class":126},[76,120469,120470,120472,120474,120476],{"class":78,"line":133},[76,120471,26626],{"class":86},[76,120473,119337],{"class":126},[76,120475,25883],{"class":126},[76,120477,120478],{"class":126}," mesa-utils\n",[76,120480,120481],{"class":78,"line":145},[76,120482,149],{"emptyLinePlaceholder":148},[76,120484,120485],{"class":78,"line":152},[76,120486,120487],{"class":540},"#然后重启wsl2即可\n",[2178,120489,120490],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":71,"searchDepth":94,"depth":94,"links":120492},[120493,120494,120499],{"id":119770,"depth":94,"text":119771},{"id":119783,"depth":94,"text":119784,"children":120495},[120496,120497,120498],{"id":119787,"depth":133,"text":119788},{"id":119834,"depth":133,"text":119835},{"id":119895,"depth":133,"text":119896},{"id":119931,"depth":94,"text":119932,"children":120500},[120501,120502,120503],{"id":119935,"depth":133,"text":119936},{"id":119997,"depth":133,"text":119998},{"id":120286,"depth":133,"text":120287},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119762,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120510,"title":120511,"body":120512,"description":2201,"extension":2202,"meta":123448,"navigation":148,"path":123449,"seo":123450,"stem":123451,"__hash__":123452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120513,"toc":123420},[120514,120517,120521,120527,120531,120537,120541,120729,120732,120737,120741,120745,120748,120751,120757,120762,120765,120768,120773,120806,120811,120815,120892,120895,120900,120904,120907,120946,120949,120958,120976,120981,120988,121105,121110,121113,121140,121145,121149,121158,121208,121215,121219,121222,121236,121243,121277,121282,121286,121309,121312,121317,121321,121324,121327,121330,121372,121376,121379,121382,121423,121427,121431,121434,121439,121444,121447,121470,121473,121481,121486,121489,121494,121499,121502,121507,121511,121516,121539,121544,121606,121614,121619,121624,121627,121632,121635,121640,121645,121663,121668,121674,121679,121693,121697,121700,121703,121706,121749,121752,121757,121858,121861,121866,121870,121874,121911,121915,121919,121923,121969,121973,122018,122022,122029,122037,122092,122095,122172,122175,122198,122202,122205,122210,122215,122223,122226,122231,122236,122241,122244,122249,122258,122261,122266,122269,122340,122345,122348,122353,122356,122361,122364,122369,122372,122377,122382,122385,122460,122463,122476,122481,122484,122498,122501,122530,122535,122564,122567,122572,122576,122581,122590,122593,122598,122601,122606,122609,122612,122617,122620,122625,122630,122633,122638,122641,122766,122771,122801,122804,122809,122814,122831,122834,122877,122880,122907,122912,122925,123068,123072,123077,123091,123094,123145,123148,123178,123181,123197,123202,123216,123219,123286,123291,123300,123305,123308,123320,123325,123332,123356,123359,123364,123367,123386,123391,123398,123410,123417],[10,120515,120511],{"id":120516},"_3-安装必备配置",[14,120518,120520],{"id":120519},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[66,120522,120525],{"className":120523,"code":120524,"language":7268},[7266],"  打开下方网站（注意，该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",[73,120526,120524],{"__ignoreMap":71},[889,120528,120530],{"id":120529},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[66,120532,120535],{"className":120533,"code":120534,"language":7268},[7266],"  输入以下命令\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",[73,120536,120534],{"__ignoreMap":71},[889,120538,120540],{"id":120539},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[66,120542,120546],{"className":120543,"code":120544,"language":120545,"meta":71,"style":71},"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",[73,120547,120548,120556,120567,120579,120593,120597,120607,120612,120616,120620,120625,120629,120641,120645,120650,120654,120665,120669,120685,120689,120700,120704,120709,120713,120721],{"__ignoreMap":71},[76,120549,120550,120552,120554],{"class":78,"line":79},[76,120551,26626],{"class":86},[76,120553,119337],{"class":126},[76,120555,28291],{"class":126},[76,120557,120558,120560,120562,120564],{"class":78,"line":94},[76,120559,26626],{"class":86},[76,120561,119337],{"class":126},[76,120563,25883],{"class":126},[76,120565,120566],{"class":126}," vim\n",[76,120568,120569,120571,120574,120576],{"class":78,"line":133},[76,120570,26626],{"class":86},[76,120572,120573],{"class":126}," rm",[76,120575,27375],{"class":119},[76,120577,120578],{"class":126}," \u002Fetc\u002Fapt\u002Fsources.list\n",[76,120580,120581,120583,120585,120587,120590],{"class":78,"line":145},[76,120582,26626],{"class":86},[76,120584,120573],{"class":126},[76,120586,27375],{"class":119},[76,120588,120589],{"class":126}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[76,120591,120592],{"class":119},"**\n",[76,120594,120595],{"class":78,"line":152},[76,120596,149],{"emptyLinePlaceholder":148},[76,120598,120599,120601,120604],{"class":78,"line":157},[76,120600,26626],{"class":86},[76,120602,120603],{"class":126}," vim",[76,120605,120606],{"class":126}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[76,120608,120609],{"class":78,"line":246},[76,120610,120611],{"class":126},"```\n",[76,120613,120614],{"class":78,"line":251},[76,120615,149],{"emptyLinePlaceholder":148},[76,120617,120618],{"class":78,"line":257},[76,120619,149],{"emptyLinePlaceholder":148},[76,120621,120622],{"class":78,"line":641},[76,120623,120624],{"class":86},"选择好Ubuntu版本后，复制下方的内容。\n",[76,120626,120627],{"class":78,"line":646},[76,120628,149],{"emptyLinePlaceholder":148},[76,120630,120631,120633,120636,120639],{"class":78,"line":659},[76,120632,2491],{"class":82},[76,120634,120635],{"class":126},"[](",[76,120637,120638],{"class":86},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[76,120640,130],{"class":126},[76,120642,120643],{"class":78,"line":1608},[76,120644,149],{"emptyLinePlaceholder":148},[76,120646,120647],{"class":78,"line":1632},[76,120648,120649],{"class":86},"粘贴进去\n",[76,120651,120652],{"class":78,"line":1637},[76,120653,149],{"emptyLinePlaceholder":148},[76,120655,120656,120658,120660,120663],{"class":78,"line":1642},[76,120657,2491],{"class":82},[76,120659,120635],{"class":126},[76,120661,120662],{"class":86},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[76,120664,130],{"class":126},[76,120666,120667],{"class":78,"line":1652},[76,120668,149],{"emptyLinePlaceholder":148},[76,120670,120671,120674,120677,120680,120682],{"class":78,"line":1660},[76,120672,120673],{"class":86},"按一下ESC，然后英文冒号，输入",[76,120675,120676],{"class":126}," `",[76,120678,120679],{"class":86},":wq!",[76,120681,3226],{"class":126},[76,120683,120684],{"class":86},"然后回车\n",[76,120686,120687],{"class":78,"line":1683},[76,120688,149],{"emptyLinePlaceholder":148},[76,120690,120691,120693,120695,120698],{"class":78,"line":1698},[76,120692,2491],{"class":82},[76,120694,120635],{"class":126},[76,120696,120697],{"class":86},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[76,120699,130],{"class":126},[76,120701,120702],{"class":78,"line":1711},[76,120703,149],{"emptyLinePlaceholder":148},[76,120705,120706],{"class":78,"line":1717},[76,120707,120708],{"class":86},"输入以下命令\n",[76,120710,120711],{"class":78,"line":1728},[76,120712,149],{"emptyLinePlaceholder":148},[76,120714,120715,120718],{"class":78,"line":1740},[76,120716,120717],{"class":126},"```",[76,120719,120720],{"class":86},"Bash\n",[76,120722,120723,120725,120727],{"class":78,"line":1746},[76,120724,26626],{"class":86},[76,120726,119337],{"class":126},[76,120728,28291],{"class":126},[19,120730,120731],{},"这里被替换成对应学校则成功",[19,120733,120734],{},[3583,120735],{"alt":71,"src":120736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120738,120740],{"id":120739},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[889,120742,120744],{"id":120743},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120746,120747],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120749,120750],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120752,120753],{},[2503,120754,120755],{"href":120755,"rel":120756},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25914],[19,120758,120759],{},[3583,120760],{"alt":71,"src":120761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120763,120764],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120766,120767],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120769,120770],{},[3583,120771],{"alt":71,"src":120772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[66,120774,120776],{"className":119316,"code":120775,"language":119318,"meta":71,"style":71},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[73,120777,120778,120783,120790,120795],{"__ignoreMap":71},[76,120779,120780],{"class":78,"line":79},[76,120781,120782],{"class":540},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[76,120784,120785,120787],{"class":78,"line":94},[76,120786,103298],{"class":119},[76,120788,120789],{"class":126}," ~\u002FDownloads\n",[76,120791,120792],{"class":78,"line":133},[76,120793,120794],{"class":540},"#下方chrome安装包名不一定是这个，根据名字来看\n",[76,120796,120797,120799,120801,120803],{"class":78,"line":145},[76,120798,26626],{"class":86},[76,120800,119337],{"class":126},[76,120802,25883],{"class":126},[76,120804,120805],{"class":126}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120807,120808],{},[3583,120809],{"alt":71,"src":120810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[889,120812,120814],{"id":120813},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[66,120816,120818],{"className":119316,"code":120817,"language":119318,"meta":71,"style":71},"# 老版\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",[73,120819,120820,120825,120833,120844,120849,120853,120858,120868,120876,120887],{"__ignoreMap":71},[76,120821,120822],{"class":78,"line":79},[76,120823,120824],{"class":540},"# 老版\n",[76,120826,120827,120829,120831],{"class":78,"line":94},[76,120828,26626],{"class":86},[76,120830,119337],{"class":126},[76,120832,28291],{"class":126},[76,120834,120835,120837,120839,120841],{"class":78,"line":133},[76,120836,26626],{"class":86},[76,120838,119337],{"class":126},[76,120840,25883],{"class":126},[76,120842,120843],{"class":126}," neofetch\n",[76,120845,120846],{"class":78,"line":145},[76,120847,120848],{"class":86},"neofetch\n",[76,120850,120851],{"class":78,"line":152},[76,120852,149],{"emptyLinePlaceholder":148},[76,120854,120855],{"class":78,"line":157},[76,120856,120857],{"class":540},"# 新版\n",[76,120859,120860,120862,120865],{"class":78,"line":246},[76,120861,26626],{"class":86},[76,120863,120864],{"class":126}," add-apt-repository",[76,120866,120867],{"class":126}," ppa:zhangsongcui3371\u002Ffastfetch\n",[76,120869,120870,120872,120874],{"class":78,"line":251},[76,120871,26626],{"class":86},[76,120873,119337],{"class":126},[76,120875,28291],{"class":126},[76,120877,120878,120880,120882,120884],{"class":78,"line":257},[76,120879,26626],{"class":86},[76,120881,119337],{"class":126},[76,120883,25883],{"class":126},[76,120885,120886],{"class":126}," fastfetch\n",[76,120888,120889],{"class":78,"line":641},[76,120890,120891],{"class":86},"fastfetch\n",[19,120893,120894],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120896,120897],{},[3583,120898],{"alt":71,"src":120899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[889,120901,120903],{"id":120902},"_323-移除snap应用","3.2.3 移除snap应用",[19,120905,120906],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[66,120908,120910],{"className":119316,"code":120909,"language":119318,"meta":71,"style":71},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[73,120911,120912,120924,120935],{"__ignoreMap":71},[76,120913,120914,120916,120918,120921],{"class":78,"line":79},[76,120915,26626],{"class":86},[76,120917,28562],{"class":126},[76,120919,120920],{"class":126}," disable",[76,120922,120923],{"class":126}," snapd.service\n",[76,120925,120926,120928,120930,120932],{"class":78,"line":94},[76,120927,26626],{"class":86},[76,120929,28562],{"class":126},[76,120931,120920],{"class":126},[76,120933,120934],{"class":126}," snapd.socket\n",[76,120936,120937,120939,120941,120943],{"class":78,"line":133},[76,120938,26626],{"class":86},[76,120940,28562],{"class":126},[76,120942,120920],{"class":126},[76,120944,120945],{"class":126}," snapd.seeded.service\n",[19,120947,120948],{},"然后查看snap应用列表",[19,120950,120951,120952,120957],{},"根据你安装的选择不同（最小安装或普通安装），有",[2503,120953,120956],{"href":120954,"rel":120955},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25914],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[66,120959,120961],{"className":119316,"code":120960,"language":119318,"meta":71,"style":71},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[73,120962,120963,120968],{"__ignoreMap":71},[76,120964,120965],{"class":78,"line":79},[76,120966,120967],{"class":540},"# 查询当前系统上snap安装了哪些app\n",[76,120969,120970,120973],{"class":78,"line":94},[76,120971,120972],{"class":86},"snap",[76,120974,120975],{"class":126}," list\n",[19,120977,120978],{},[3583,120979],{"alt":71,"src":120980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120982,120983,120984,120987],{},"卸载掉图中所有应用，按照 ",[2416,120985,120986],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[66,120989,120991],{"className":119316,"code":120990,"language":119318,"meta":71,"style":71},"#移除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",[73,120992,120993,120998,121010,121015,121026,121031,121042,121047,121058,121063,121067,121072,121083,121094],{"__ignoreMap":71},[76,120994,120995],{"class":78,"line":79},[76,120996,120997],{"class":540},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[76,120999,121000,121002,121005,121007],{"class":78,"line":94},[76,121001,26626],{"class":86},[76,121003,121004],{"class":126}," snap",[76,121006,28128],{"class":126},[76,121008,121009],{"class":126}," snap-store\n",[76,121011,121012],{"class":78,"line":133},[76,121013,121014],{"class":540},"#移除firefox浏览器\n",[76,121016,121017,121019,121021,121023],{"class":78,"line":145},[76,121018,26626],{"class":86},[76,121020,121004],{"class":126},[76,121022,28128],{"class":126},[76,121024,121025],{"class":126}," firefox\n",[76,121027,121028],{"class":78,"line":152},[76,121029,121030],{"class":540},"#移除gnome-42-2204\n",[76,121032,121033,121035,121037,121039],{"class":78,"line":157},[76,121034,26626],{"class":86},[76,121036,121004],{"class":126},[76,121038,28128],{"class":126},[76,121040,121041],{"class":126}," gnome-42-2204\n",[76,121043,121044],{"class":78,"line":246},[76,121045,121046],{"class":540},"#移除gtk-common-themes\n",[76,121048,121049,121051,121053,121055],{"class":78,"line":251},[76,121050,26626],{"class":86},[76,121052,121004],{"class":126},[76,121054,28128],{"class":126},[76,121056,121057],{"class":126}," gtk-common-themes\n",[76,121059,121060],{"class":78,"line":257},[76,121061,121062],{"class":540},"#移除其它...\n",[76,121064,121065],{"class":78,"line":641},[76,121066,4762],{"class":90},[76,121068,121069],{"class":78,"line":646},[76,121070,121071],{"class":540},"#移除core22,bare以及snapd\n",[76,121073,121074,121076,121078,121080],{"class":78,"line":659},[76,121075,26626],{"class":86},[76,121077,121004],{"class":126},[76,121079,28128],{"class":126},[76,121081,121082],{"class":126}," core22\n",[76,121084,121085,121087,121089,121091],{"class":78,"line":1608},[76,121086,26626],{"class":86},[76,121088,121004],{"class":126},[76,121090,28128],{"class":126},[76,121092,121093],{"class":126}," bare\n",[76,121095,121096,121098,121100,121102],{"class":78,"line":1632},[76,121097,26626],{"class":86},[76,121099,121004],{"class":126},[76,121101,28128],{"class":126},[76,121103,121104],{"class":126}," snapd\n",[19,121106,121107],{},[3583,121108],{"alt":71,"src":121109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121111,121112],{},"输入以下命令查看是否还有snap包",[66,121114,121116],{"className":119316,"code":121115,"language":119318,"meta":71,"style":71},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[73,121117,121118,121124,121128,121132,121136],{"__ignoreMap":71},[76,121119,121120,121122],{"class":78,"line":79},[76,121121,120972],{"class":86},[76,121123,120975],{"class":126},[76,121125,121126],{"class":78,"line":94},[76,121127,120824],{"class":540},[76,121129,121130],{"class":78,"line":133},[76,121131,120848],{"class":86},[76,121133,121134],{"class":78,"line":145},[76,121135,120857],{"class":540},[76,121137,121138],{"class":78,"line":152},[76,121139,120891],{"class":86},[19,121141,121142],{},[3583,121143],{"alt":71,"src":121144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[889,121146,121148],{"id":121147},"_324-移除snap","3.2.4 移除snap",[19,121150,121151,121152,121157],{},"在删除掉",[2503,121153,121156],{"href":121154,"rel":121155},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25914],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[66,121159,121161],{"className":119316,"code":121160,"language":119318,"meta":71,"style":71}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[73,121162,121163,121168,121181,121186,121197],{"__ignoreMap":71},[76,121164,121165],{"class":78,"line":79},[76,121166,121167],{"class":540}," #使用apt移除掉snap\n",[76,121169,121170,121172,121174,121176,121179],{"class":78,"line":94},[76,121171,26626],{"class":86},[76,121173,119337],{"class":126},[76,121175,119645],{"class":126},[76,121177,121178],{"class":119}," --purge",[76,121180,121104],{"class":126},[76,121182,121183],{"class":78,"line":133},[76,121184,121185],{"class":540},"#移除snapd的一些目录\n",[76,121187,121188,121190,121192,121194],{"class":78,"line":145},[76,121189,26626],{"class":86},[76,121191,120573],{"class":126},[76,121193,27375],{"class":119},[76,121195,121196],{"class":126}," \u002Fvar\u002Fcache\u002Fsnapd\n",[76,121198,121199,121201,121203,121205],{"class":78,"line":152},[76,121200,26626],{"class":86},[76,121202,120573],{"class":126},[76,121204,27375],{"class":119},[76,121206,121207],{"class":126}," ~\u002Fsnap\n",[19,121209,121210,121211,121214],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[73,121212,121213],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[889,121216,121218],{"id":121217},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121220,121221],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[66,121223,121225],{"className":119316,"code":121224,"language":119318,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[73,121226,121227],{"__ignoreMap":71},[76,121228,121229,121231,121233],{"class":78,"line":79},[76,121230,26626],{"class":86},[76,121232,120603],{"class":126},[76,121234,121235],{"class":126}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121237,121238,121239,121242],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[73,121240,121241],{},":wq"," 回车",[66,121244,121246],{"className":119316,"code":121245,"language":119318,"meta":71,"style":71},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[73,121247,121248,121255,121269],{"__ignoreMap":71},[76,121249,121250,121253],{"class":78,"line":79},[76,121251,121252],{"class":86},"Package:",[76,121254,121104],{"class":126},[76,121256,121257,121260,121263,121266],{"class":78,"line":94},[76,121258,121259],{"class":86},"Pin:",[76,121261,121262],{"class":126}," release",[76,121264,121265],{"class":126}," a=",[76,121267,121268],{"class":119},"*\n",[76,121270,121271,121274],{"class":78,"line":133},[76,121272,121273],{"class":86},"Pin-Priority:",[76,121275,121276],{"class":119}," -10\n",[19,121278,121279],{},[3583,121280],{"alt":71,"src":121281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[889,121283,121285],{"id":121284},"_326-测试是否成功","3.2.6 测试是否成功",[66,121287,121289],{"className":119316,"code":121288,"language":119318,"meta":71,"style":71},"sudo apt update\nsudo apt install firefox\n",[73,121290,121291,121299],{"__ignoreMap":71},[76,121292,121293,121295,121297],{"class":78,"line":79},[76,121294,26626],{"class":86},[76,121296,119337],{"class":126},[76,121298,28291],{"class":126},[76,121300,121301,121303,121305,121307],{"class":78,"line":94},[76,121302,26626],{"class":86},[76,121304,119337],{"class":126},[76,121306,25883],{"class":126},[76,121308,121025],{"class":126},[19,121310,121311],{},"这里提示snapd无法被安装，就证明成功了",[19,121313,121314],{},[3583,121315],{"alt":71,"src":121316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[889,121318,121320],{"id":121319},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121322,121323],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121325,121326],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121328,121329],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[66,121331,121333],{"className":119316,"code":121332,"language":119318,"meta":71,"style":71},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[73,121334,121335,121340,121349,121354,121362],{"__ignoreMap":71},[76,121336,121337],{"class":78,"line":79},[76,121338,121339],{"class":540},"# 添加Mozilla提供的源\n",[76,121341,121342,121344,121346],{"class":78,"line":94},[76,121343,26626],{"class":86},[76,121345,120864],{"class":126},[76,121347,121348],{"class":126}," ppa:mozillateam\u002Fppa\n",[76,121350,121351],{"class":78,"line":133},[76,121352,121353],{"class":540},"# 安装Firefox\n",[76,121355,121356,121358,121360],{"class":78,"line":145},[76,121357,26626],{"class":86},[76,121359,119337],{"class":126},[76,121361,28291],{"class":126},[76,121363,121364,121366,121368,121370],{"class":78,"line":152},[76,121365,26626],{"class":86},[76,121367,119337],{"class":126},[76,121369,25883],{"class":126},[76,121371,121025],{"class":126},[889,121373,121375],{"id":121374},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121377,121378],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121380,121381],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[66,121383,121385],{"className":119316,"code":121384,"language":119318,"meta":71,"style":71},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[73,121386,121387,121392,121402,121410,121414],{"__ignoreMap":71},[76,121388,121389],{"class":78,"line":79},[76,121390,121391],{"class":540},"#删掉禁止安装snap的配置文件\n",[76,121393,121394,121396,121398,121400],{"class":78,"line":94},[76,121395,26626],{"class":86},[76,121397,120573],{"class":126},[76,121399,27375],{"class":119},[76,121401,121235],{"class":126},[76,121403,121404,121406,121408],{"class":78,"line":133},[76,121405,26626],{"class":86},[76,121407,119337],{"class":126},[76,121409,28291],{"class":126},[76,121411,121412],{"class":78,"line":145},[76,121413,149],{"emptyLinePlaceholder":148},[76,121415,121416,121418,121420],{"class":78,"line":152},[76,121417,26626],{"class":86},[76,121419,119337],{"class":126},[76,121421,121422],{"class":126}," dist-update\n",[14,121424,121426],{"id":121425},"_33-中文输入法","3.3 中文输入法",[889,121428,121430],{"id":121429},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121432,121433],{},"官网下载搜狗输入法",[19,121435,121436],{},[3583,121437],{"alt":71,"src":121438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121440,121441],{},[3583,121442],{"alt":71,"src":121443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121445,121446],{},"打开终端输入如下",[66,121448,121450],{"className":119316,"code":121449,"language":119318,"meta":71,"style":71},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[73,121451,121452,121459],{"__ignoreMap":71},[76,121453,121454,121456],{"class":78,"line":79},[76,121455,103298],{"class":119},[76,121457,121458],{"class":126}," ~\u002FDownloads\u002F\n",[76,121460,121461,121463,121465,121467],{"class":78,"line":94},[76,121462,26626],{"class":86},[76,121464,119337],{"class":126},[76,121466,25883],{"class":126},[76,121468,121469],{"class":126}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121471,121472],{},"打开Fcitx",[19,121474,121475,121478],{},[3583,121476],{"alt":71,"src":121477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3583,121479],{"alt":71,"src":121480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121482,121483],{},[3583,121484],{"alt":71,"src":121485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121487,121488],{},"添加搜狗输入法",[19,121490,121491],{},[3583,121492],{"alt":71,"src":121493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121495,121496],{},[3583,121497],{"alt":71,"src":121498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121500,121501],{},"将搜狗输入法设置为唯一输入法",[19,121503,121504],{},[3583,121505],{"alt":71,"src":121506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[889,121508,121510],{"id":121509},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,121512,121513],{},[29,121514,121515],{},"卸载旧输入法",[66,121517,121519],{"className":120543,"code":121518,"language":120545,"meta":71,"style":71},"sudo apt purge fcitx* ibus*\n",[73,121520,121521],{"__ignoreMap":71},[76,121522,121523,121525,121527,121529,121532,121534,121537],{"class":78,"line":79},[76,121524,26626],{"class":86},[76,121526,119337],{"class":126},[76,121528,119678],{"class":126},[76,121530,121531],{"class":126}," fcitx",[76,121533,2718],{"class":119},[76,121535,121536],{"class":126}," ibus",[76,121538,121268],{"class":119},[26,121540,121541],{"start":94},[29,121542,121543],{},"安装Fcitx5",[66,121545,121547],{"className":119316,"code":121546,"language":119318,"meta":71,"style":71},"# 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",[73,121548,121549,121554,121568,121572,121577,121586,121594],{"__ignoreMap":71},[76,121550,121551],{"class":78,"line":79},[76,121552,121553],{"class":540},"# Ubuntu22.04及以上、Debian12及以上\n",[76,121555,121556,121558,121560,121562,121565],{"class":78,"line":94},[76,121557,26626],{"class":86},[76,121559,119337],{"class":126},[76,121561,25883],{"class":126},[76,121563,121564],{"class":126}," fcitx5",[76,121566,121567],{"class":126}," fcitx5-chinese-addons\n",[76,121569,121570],{"class":78,"line":133},[76,121571,149],{"emptyLinePlaceholder":148},[76,121573,121574],{"class":78,"line":145},[76,121575,121576],{"class":540},"# Ubuntu20.04\n",[76,121578,121579,121581,121583],{"class":78,"line":152},[76,121580,26626],{"class":86},[76,121582,120864],{"class":126},[76,121584,121585],{"class":126}," ppa:zhsj\u002Ffcitx5\n",[76,121587,121588,121590,121592],{"class":78,"line":157},[76,121589,26626],{"class":86},[76,121591,119337],{"class":126},[76,121593,28291],{"class":126},[76,121595,121596,121598,121600,121602,121604],{"class":78,"line":246},[76,121597,26626],{"class":86},[76,121599,119337],{"class":126},[76,121601,25883],{"class":126},[76,121603,121564],{"class":126},[76,121605,121567],{"class":126},[26,121607,121608,121611],{"start":133},[29,121609,121610],{},"Reboot System",[29,121612,121613],{},"启动Fcitx5",[19,121615,121616],{},[3583,121617],{"alt":71,"src":121618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,121620,121621],{"start":152},[29,121622,121623],{},"修改一些设置",[19,121625,121626],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121628,121629],{},[3583,121630],{"alt":71,"src":121631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121633,121634],{},"添加快捷键以便于更好切换中英文",[19,121636,121637],{},[3583,121638],{"alt":71,"src":121639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,121641,121642],{"start":157},[29,121643,121644],{},"重启",[66,121646,121648],{"className":120543,"code":121647,"language":120545,"meta":71,"style":71},"sudo shutdown -r now\n",[73,121649,121650],{"__ignoreMap":71},[76,121651,121652,121654,121657,121660],{"class":78,"line":79},[76,121653,26626],{"class":86},[76,121655,121656],{"class":126}," shutdown",[76,121658,121659],{"class":119}," -r",[76,121661,121662],{"class":126}," now\n",[26,121664,121665],{"start":246},[29,121666,121667],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121669,121670],{},[2503,121671,121672],{"href":121672,"rel":121673},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25914],[26,121675,121676],{"start":251},[29,121677,121678],{},"再重启",[66,121680,121681],{"className":120543,"code":121647,"language":120545,"meta":71,"style":71},[73,121682,121683],{"__ignoreMap":71},[76,121684,121685,121687,121689,121691],{"class":78,"line":79},[76,121686,26626],{"class":86},[76,121688,121656],{"class":126},[76,121690,121659],{"class":119},[76,121692,121662],{"class":126},[14,121694,121696],{"id":121695},"_34-pip3源替换","3.4 pip3源替换",[19,121698,121699],{},"非Debian系发行版需要做。",[19,121701,121702],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121704,121705],{},"使用dnf的系统也可能不用做。",[66,121707,121709],{"className":119316,"code":121708,"language":119318,"meta":71,"style":71},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,121710,121711,121716,121723,121728,121733],{"__ignoreMap":71},[76,121712,121713],{"class":78,"line":79},[76,121714,121715],{"class":540},"# 检查是否已安装 pip\n",[76,121717,121718,121721],{"class":78,"line":94},[76,121719,121720],{"class":86},"pip3",[76,121722,28342],{"class":119},[76,121724,121725],{"class":78,"line":133},[76,121726,121727],{"class":540},"# 如果未安装，先安装 pip3（见下方）\n",[76,121729,121730],{"class":78,"line":145},[76,121731,121732],{"class":540},"# 配置 pip 使用清华源\n",[76,121734,121735,121737,121740,121743,121746],{"class":78,"line":152},[76,121736,121720],{"class":86},[76,121738,121739],{"class":126}," config",[76,121741,121742],{"class":126}," set",[76,121744,121745],{"class":126}," global.index-url",[76,121747,121748],{"class":126}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121750,121751],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121753,121754],{},[3583,121755],{"alt":71,"src":121756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[66,121758,121760],{"className":119316,"code":121759,"language":119318,"meta":71,"style":71},"#安装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",[73,121761,121762,121767,121775,121786,121790,121795,121814,121818,121823,121835,121839,121844],{"__ignoreMap":71},[76,121763,121764],{"class":78,"line":79},[76,121765,121766],{"class":540},"#安装pip3\n",[76,121768,121769,121771,121773],{"class":78,"line":94},[76,121770,26626],{"class":86},[76,121772,119337],{"class":126},[76,121774,28291],{"class":126},[76,121776,121777,121779,121781,121783],{"class":78,"line":133},[76,121778,26626],{"class":86},[76,121780,28125],{"class":126},[76,121782,25883],{"class":126},[76,121784,121785],{"class":126}," python3-pip\n",[76,121787,121788],{"class":78,"line":145},[76,121789,149],{"emptyLinePlaceholder":148},[76,121791,121792],{"class":78,"line":152},[76,121793,121794],{"class":540},"#更新pip3\n",[76,121796,121797,121799,121801,121803,121805,121807,121810,121812],{"class":78,"line":157},[76,121798,102901],{"class":86},[76,121800,102904],{"class":119},[76,121802,102927],{"class":126},[76,121804,25883],{"class":126},[76,121806,28479],{"class":119},[76,121808,121809],{"class":126}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[76,121811,102932],{"class":119},[76,121813,102935],{"class":126},[76,121815,121816],{"class":78,"line":246},[76,121817,149],{"emptyLinePlaceholder":148},[76,121819,121820],{"class":78,"line":251},[76,121821,121822],{"class":540},"#设置pip源为清华源\n",[76,121824,121825,121827,121829,121831,121833],{"class":78,"line":257},[76,121826,121720],{"class":86},[76,121828,121739],{"class":126},[76,121830,121742],{"class":126},[76,121832,121745],{"class":126},[76,121834,121748],{"class":126},[76,121836,121837],{"class":78,"line":641},[76,121838,149],{"emptyLinePlaceholder":148},[76,121840,121841],{"class":78,"line":646},[76,121842,121843],{"class":540},"#测试\n",[76,121845,121846,121848,121850,121852,121854,121856],{"class":78,"line":659},[76,121847,102901],{"class":86},[76,121849,102904],{"class":119},[76,121851,102927],{"class":126},[76,121853,25883],{"class":126},[76,121855,102932],{"class":119},[76,121857,102935],{"class":126},[19,121859,121860],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121862,121863],{},[3583,121864],{"alt":71,"src":121865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121867,121869],{"id":121868},"_35-显卡驱动安装","3.5 显卡驱动安装",[889,121871,121873],{"id":121872},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[66,121875,121877],{"className":120543,"code":121876,"language":120545,"meta":71,"style":71},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[73,121878,121879,121884,121899,121904],{"__ignoreMap":71},[76,121880,121881],{"class":78,"line":79},[76,121882,121883],{"class":540},"# 如果是使用apt安装的驱动\n",[76,121885,121886,121888,121890,121892,121894,121897],{"class":78,"line":94},[76,121887,26626],{"class":86},[76,121889,28125],{"class":126},[76,121891,28128],{"class":126},[76,121893,121178],{"class":119},[76,121895,121896],{"class":126}," nvidia",[76,121898,121268],{"class":119},[76,121900,121901],{"class":78,"line":133},[76,121902,121903],{"class":540},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[76,121905,121906,121908],{"class":78,"line":145},[76,121907,26626],{"class":86},[76,121909,121910],{"class":126}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[889,121912,121914],{"id":121913},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24047,121916,121918],{"id":121917},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24959,121920,121922],{"id":121921},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[66,121924,121926],{"className":120543,"code":121925,"language":120545,"meta":71,"style":71},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,121927,121928,121933,121944,121949,121959,121964],{"__ignoreMap":71},[76,121929,121930],{"class":78,"line":79},[76,121931,121932],{"class":540},"# 安装英伟达驱动\n",[76,121934,121935,121937,121939,121941],{"class":78,"line":94},[76,121936,26626],{"class":86},[76,121938,119337],{"class":126},[76,121940,25883],{"class":126},[76,121942,121943],{"class":126}," nvidia-driver-版本号\n",[76,121945,121946],{"class":78,"line":133},[76,121947,121948],{"class":540},"# 重启 \n",[76,121950,121951,121953,121955,121957],{"class":78,"line":145},[76,121952,26626],{"class":86},[76,121954,121656],{"class":126},[76,121956,121659],{"class":119},[76,121958,121662],{"class":126},[76,121960,121961],{"class":78,"line":152},[76,121962,121963],{"class":540},"# 检查驱动是否安装成功\n",[76,121965,121966],{"class":78,"line":157},[76,121967,121968],{"class":86},"nvidia-smi\n",[24959,121970,121972],{"id":121971},"_35212-debian","3.5.2.1.2 Debian",[66,121974,121976],{"className":120543,"code":121975,"language":120545,"meta":71,"style":71},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,121977,121978,121982,121996,122000,122010,122014],{"__ignoreMap":71},[76,121979,121980],{"class":78,"line":79},[76,121981,121932],{"class":540},[76,121983,121984,121986,121988,121990,121993],{"class":78,"line":94},[76,121985,26626],{"class":86},[76,121987,119337],{"class":126},[76,121989,25883],{"class":126},[76,121991,121992],{"class":126}," nvidia-driver",[76,121994,121995],{"class":126}," nvidia-settings\n",[76,121997,121998],{"class":78,"line":133},[76,121999,121948],{"class":540},[76,122001,122002,122004,122006,122008],{"class":78,"line":145},[76,122003,26626],{"class":86},[76,122005,121656],{"class":126},[76,122007,121659],{"class":119},[76,122009,121662],{"class":126},[76,122011,122012],{"class":78,"line":152},[76,122013,121963],{"class":540},[76,122015,122016],{"class":78,"line":157},[76,122017,121968],{"class":86},[24047,122019,122021],{"id":122020},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122023,122024,122025,122028],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2416,122026,122027],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122030,122031,122032],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25602,122033,122034],{},[2416,122035,122036],{},"（也可以不禁用桌面环境，直接进行下一步。）",[66,122038,122040],{"className":120543,"code":122039,"language":120545,"meta":71,"style":71},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[73,122041,122042,122047,122057,122062,122075,122080],{"__ignoreMap":71},[76,122043,122044],{"class":78,"line":79},[76,122045,122046],{"class":540},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[76,122048,122049,122051,122054],{"class":78,"line":94},[76,122050,26626],{"class":86},[76,122052,122053],{"class":126}," telinit",[76,122055,122056],{"class":119}," 3\n",[76,122058,122059],{"class":78,"line":133},[76,122060,122061],{"class":540},"# ubuntu 使用下方命令\n",[76,122063,122064,122066,122069,122072],{"class":78,"line":145},[76,122065,26626],{"class":86},[76,122067,122068],{"class":126}," service",[76,122070,122071],{"class":126}," lightdm",[76,122073,122074],{"class":126}," stop\n",[76,122076,122077],{"class":78,"line":152},[76,122078,122079],{"class":540},"# Fedora 使用下方命令\n",[76,122081,122082,122084,122086,122089],{"class":78,"line":157},[76,122083,26626],{"class":86},[76,122085,28562],{"class":126},[76,122087,122088],{"class":126}," isolate",[76,122090,122091],{"class":126}," multi-user.target\n",[19,122093,122094],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[66,122096,122098],{"className":120543,"code":122097,"language":120545,"meta":71,"style":71},"# 编译环境+准备工作\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",[73,122099,122100,122105,122116,122121,122128,122133,122145,122150,122157,122162],{"__ignoreMap":71},[76,122101,122102],{"class":78,"line":79},[76,122103,122104],{"class":540},"# 编译环境+准备工作\n",[76,122106,122107,122109,122111,122113],{"class":78,"line":94},[76,122108,26626],{"class":86},[76,122110,119337],{"class":126},[76,122112,25883],{"class":126},[76,122114,122115],{"class":126}," build-essential\n",[76,122117,122118],{"class":78,"line":133},[76,122119,122120],{"class":540},"# 进入到.run目录中\n",[76,122122,122123,122125],{"class":78,"line":145},[76,122124,103298],{"class":119},[76,122126,122127],{"class":126}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[76,122129,122130],{"class":78,"line":152},[76,122131,122132],{"class":540},"# 给驱动文件增加可执行权限：\n",[76,122134,122135,122137,122139,122142],{"class":78,"line":157},[76,122136,26626],{"class":86},[76,122138,26629],{"class":126},[76,122140,122141],{"class":126}," a+x",[76,122143,122144],{"class":126}," NVIDIA-Linux-x86_64-550.107.02.run\n",[76,122146,122147],{"class":78,"line":246},[76,122148,122149],{"class":540},"# 然后执行安装：\n",[76,122151,122152,122154],{"class":78,"line":251},[76,122153,26626],{"class":86},[76,122155,122156],{"class":126}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[76,122158,122159],{"class":78,"line":257},[76,122160,122161],{"class":540},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[76,122163,122164,122166,122169],{"class":78,"line":641},[76,122165,26626],{"class":86},[76,122167,122168],{"class":126}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[76,122170,122171],{"class":119},"  --no-opengl-files\n",[19,122173,122174],{},"安装完毕重启即可",[66,122176,122178],{"className":120543,"code":122177,"language":120545,"meta":71,"style":71},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,122179,122180,122184,122190,122194],{"__ignoreMap":71},[76,122181,122182],{"class":78,"line":79},[76,122183,121948],{"class":540},[76,122185,122186,122188],{"class":78,"line":94},[76,122187,26626],{"class":86},[76,122189,28696],{"class":126},[76,122191,122192],{"class":78,"line":133},[76,122193,121963],{"class":540},[76,122195,122196],{"class":78,"line":145},[76,122197,121968],{"class":86},[889,122199,122201],{"id":122200},"_353-安装cuda","3.5.3 安装CUDA",[19,122203,122204],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122206,122207],{},[3583,122208],{"alt":71,"src":122209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,122211,122212],{},[29,122213,122214],{},"先查看显卡驱动所支持的最高CUDA版本",[66,122216,122217],{"className":120543,"code":121968,"language":120545,"meta":71,"style":71},[73,122218,122219],{"__ignoreMap":71},[76,122220,122221],{"class":78,"line":79},[76,122222,121968],{"class":86},[19,122224,122225],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122227,122228],{},[3583,122229],{"alt":71,"src":122230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,122232,122233],{"start":94},[29,122234,122235],{},"下载CUDA并安装CUDA",[19,122237,120322,122238],{},[2503,122239,120325],{"href":120325,"rel":122240},[25914],[19,122242,122243],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122245,122246],{},[3583,122247],{"alt":71,"src":122248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122250,122251,122252,122257],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2503,122253,122256],{"href":122254,"rel":122255},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25914],"Vinci机器人队单片机教程","）",[19,122259,122260],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122262,122263],{},[3583,122264],{"alt":71,"src":122265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122267,122268],{},"将最下方框框里的命令敲入终端",[66,122270,122272],{"className":120543,"code":122271,"language":120545,"meta":71,"style":71},"# 在当前文件夹下创建一个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",[73,122273,122274,122279,122288,122293,122300,122305,122313,122318,122329,122334],{"__ignoreMap":71},[76,122275,122276],{"class":78,"line":79},[76,122277,122278],{"class":540},"# 在当前文件夹下创建一个ttt的子文件夹\n",[76,122280,122281,122283,122285],{"class":78,"line":94},[76,122282,103288],{"class":86},[76,122284,31264],{"class":119},[76,122286,122287],{"class":126}," .\u002Fttt\n",[76,122289,122290],{"class":78,"line":133},[76,122291,122292],{"class":540},"# 进入ttt文件夹\n",[76,122294,122295,122297],{"class":78,"line":145},[76,122296,103298],{"class":119},[76,122298,122299],{"class":126}," ttt\n",[76,122301,122302],{"class":78,"line":152},[76,122303,122304],{"class":540},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[76,122306,122307,122310],{"class":78,"line":157},[76,122308,122309],{"class":86},"wget",[76,122311,122312],{"class":126}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,122314,122315],{"class":78,"line":246},[76,122316,122317],{"class":540},"# 给予权限\n",[76,122319,122320,122322,122324,122326],{"class":78,"line":251},[76,122321,26626],{"class":86},[76,122323,26629],{"class":126},[76,122325,122141],{"class":126},[76,122327,122328],{"class":126}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,122330,122331],{"class":78,"line":257},[76,122332,122333],{"class":540},"# 运行脚本\n",[76,122335,122336,122338],{"class":78,"line":641},[76,122337,26626],{"class":86},[76,122339,122328],{"class":126},[19,122341,122342],{},[3583,122343],{"alt":71,"src":122344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122346,122347],{},"正在安装中：",[19,122349,122350],{},[3583,122351],{"alt":71,"src":122352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122354,122355],{},"输入accept接受即可",[19,122357,122358],{},[3583,122359],{"alt":71,"src":122360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122362,122363],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122365,122366],{},[3583,122367],{"alt":71,"src":122368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122370,122371],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122373,122374],{},[3583,122375],{"alt":71,"src":122376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,122378,122379],{"start":133},[29,122380,122381],{},"配置环境",[19,122383,122384],{},"根据上方确认一下路径，比如我上面红色框起来的为",[66,122386,122388],{"className":120543,"code":122387,"language":120545,"meta":71,"style":71},"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",[73,122389,122390,122406,122421],{"__ignoreMap":71},[76,122391,122392,122395,122398,122401,122404],{"class":78,"line":79},[76,122393,122394],{"class":86},"Please",[76,122396,122397],{"class":126}," make",[76,122399,122400],{"class":126}," sure",[76,122402,122403],{"class":126}," that",[76,122405,4762],{"class":90},[76,122407,122408,122410,122413,122416,122419],{"class":78,"line":94},[76,122409,54303],{"class":86},[76,122411,122412],{"class":126},"   PATH",[76,122414,122415],{"class":126}," includes",[76,122417,122418],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[76,122420,4762],{"class":90},[76,122422,122423,122425,122428,122430,122433,122436,122438,122441,122444,122447,122450,122452,122455,122457],{"class":78,"line":133},[76,122424,54303],{"class":86},[76,122426,122427],{"class":126},"   LD_LIBRARY_PATH",[76,122429,122415],{"class":126},[76,122431,122432],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[76,122434,122435],{"class":126}," or,",[76,122437,359],{"class":126},[76,122439,122440],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[76,122442,122443],{"class":126}," to",[76,122445,122446],{"class":126}," \u002Fetc\u002Fld.so.conf",[76,122448,122449],{"class":126}," and",[76,122451,29279],{"class":126},[76,122453,122454],{"class":126}," ldconfig",[76,122456,66632],{"class":126},[76,122458,122459],{"class":126}," root\n",[19,122461,122462],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[66,122464,122466],{"className":120543,"code":122465,"language":120545,"meta":71,"style":71},"which nvcc\n",[73,122467,122468],{"__ignoreMap":71},[76,122469,122470,122473],{"class":78,"line":79},[76,122471,122472],{"class":119},"which",[76,122474,122475],{"class":126}," nvcc\n",[19,122477,122478],{},[3583,122479],{"alt":71,"src":122480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122482,122483],{},"所以我进行以下操作：",[66,122485,122487],{"className":120543,"code":122486,"language":120545,"meta":71,"style":71},"sudo vim ~\u002F.bashrc\n",[73,122488,122489],{"__ignoreMap":71},[76,122490,122491,122493,122495],{"class":78,"line":79},[76,122492,26626],{"class":86},[76,122494,120603],{"class":126},[76,122496,122497],{"class":126}," ~\u002F.bashrc\n",[19,122499,122500],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[66,122502,122504],{"className":120543,"code":122503,"language":120545,"meta":71,"style":71},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[73,122505,122506,122518],{"__ignoreMap":71},[76,122507,122508,122510,122513,122515],{"class":78,"line":79},[76,122509,27092],{"class":82},[76,122511,122512],{"class":90}," PATH",[76,122514,370],{"class":82},[76,122516,122517],{"class":90},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[76,122519,122520,122522,122525,122527],{"class":78,"line":94},[76,122521,27092],{"class":82},[76,122523,122524],{"class":90}," LD_LIBRARY_PATH",[76,122526,370],{"class":82},[76,122528,122529],{"class":90},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122531,122532],{},[3583,122533],{"alt":71,"src":122534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[66,122536,122538],{"className":120543,"code":122537,"language":120545,"meta":71,"style":71},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[73,122539,122540,122545,122551,122556],{"__ignoreMap":71},[76,122541,122542],{"class":78,"line":79},[76,122543,122544],{"class":540},"# 刷新当前终端的环境变量\n",[76,122546,122547,122549],{"class":78,"line":94},[76,122548,102915],{"class":119},[76,122550,122497],{"class":126},[76,122552,122553],{"class":78,"line":133},[76,122554,122555],{"class":540},"# 验证CUDA是否安装成功\n",[76,122557,122558,122561],{"class":78,"line":145},[76,122559,122560],{"class":86},"nvcc",[76,122562,122563],{"class":119}," -V\n",[19,122565,122566],{},"出现下图这种则安装成功。",[19,122568,122569],{},[3583,122570],{"alt":71,"src":122571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[889,122573,122575],{"id":122574},"_354-安装cudnn","3.5.4 安装cuDNN",[26,122577,122578],{},[29,122579,122580],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122582,122583,122584,122589],{},"前往 NVIDIA cuDNN 下载页面：",[2503,122585,122588],{"href":122586,"rel":122587},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25914],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122591,122592],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122594,122595],{},[3583,122596],{"alt":71,"src":122597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122599,122600],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122602,122603],{},[3583,122604],{"alt":71,"src":122605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122607,122608],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122610,122611],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122613,122614],{},[2416,122615,122616],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122618,122619],{},"下载好的：",[19,122621,122622],{},[3583,122623],{"alt":71,"src":122624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,122626,122627],{"start":94},[29,122628,122629],{},"安装cuDNN",[19,122631,122632],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122634,122635],{},[3583,122636],{"alt":71,"src":122637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122639,122640],{},"解压文件，并复制到对应位置完成安装",[66,122642,122644],{"className":120543,"code":122643,"language":120545,"meta":71,"style":71},"# 解压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",[73,122645,122646,122651,122662,122667,122674,122679,122695,122709,122714,122725,122734,122738,122754],{"__ignoreMap":71},[76,122647,122648],{"class":78,"line":79},[76,122649,122650],{"class":540},"# 解压cuDNN文件\n",[76,122652,122653,122656,122659],{"class":78,"line":94},[76,122654,122655],{"class":86},"tar",[76,122657,122658],{"class":119}," -xvf",[76,122660,122661],{"class":126}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[76,122663,122664],{"class":78,"line":133},[76,122665,122666],{"class":540},"# cd进文件夹\n",[76,122668,122669,122671],{"class":78,"line":145},[76,122670,103298],{"class":119},[76,122672,122673],{"class":126}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[76,122675,122676],{"class":78,"line":152},[76,122677,122678],{"class":540},"# 复制cuDNN文件到CUDA目录\n",[76,122680,122681,122683,122685,122688,122690,122693],{"class":78,"line":157},[76,122682,26626],{"class":86},[76,122684,29910],{"class":126},[76,122686,122687],{"class":126}," include\u002Fcudnn",[76,122689,2718],{"class":119},[76,122691,122692],{"class":126},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[76,122694,4762],{"class":90},[76,122696,122697,122699,122701,122704,122706],{"class":78,"line":246},[76,122698,26626],{"class":86},[76,122700,29910],{"class":126},[76,122702,122703],{"class":126}," lib\u002Flibcudnn",[76,122705,2718],{"class":119},[76,122707,122708],{"class":126},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[76,122710,122711],{"class":78,"line":251},[76,122712,122713],{"class":540},"# 对比一下有没有缺文件\n",[76,122715,122716,122718,122721,122723],{"class":78,"line":257},[76,122717,28810],{"class":86},[76,122719,122720],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[76,122722,2718],{"class":119},[76,122724,4762],{"class":90},[76,122726,122727,122729,122732],{"class":78,"line":641},[76,122728,28810],{"class":86},[76,122730,122731],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[76,122733,121268],{"class":119},[76,122735,122736],{"class":78,"line":646},[76,122737,122317],{"class":540},[76,122739,122740,122742,122744,122747,122749,122751],{"class":78,"line":659},[76,122741,26626],{"class":86},[76,122743,26629],{"class":126},[76,122745,122746],{"class":126}," a+r",[76,122748,122720],{"class":126},[76,122750,2718],{"class":119},[76,122752,122753],{"class":90},"   \n",[76,122755,122756,122758,122760,122762,122764],{"class":78,"line":1608},[76,122757,26626],{"class":86},[76,122759,26629],{"class":126},[76,122761,122746],{"class":126},[76,122763,122731],{"class":126},[76,122765,121268],{"class":119},[26,122767,122768],{"start":133},[29,122769,122770],{},"检查是否安装成功",[66,122772,122774],{"className":120543,"code":122773,"language":120545,"meta":71,"style":71},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[73,122775,122776,122781],{"__ignoreMap":71},[76,122777,122778],{"class":78,"line":79},[76,122779,122780],{"class":540},"# 检查cuDNN版本命令\n",[76,122782,122783,122786,122789,122791,122793,122796,122799],{"class":78,"line":94},[76,122784,122785],{"class":86},"cat",[76,122787,122788],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[76,122790,27159],{"class":82},[76,122792,32284],{"class":86},[76,122794,122795],{"class":126}," CUDNN_MAJOR",[76,122797,122798],{"class":119}," -A",[76,122800,804],{"class":119},[19,122802,122803],{},"出现下图这样的就是安装成功了",[19,122805,122806],{},[3583,122807],{"alt":71,"src":122808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122810,122811],{"start":145},[29,122812,122813],{},"软链接(一般不需要)",[66,122815,122817],{"className":120543,"code":122816,"language":120545,"meta":71,"style":71},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[73,122818,122819,122824],{"__ignoreMap":71},[76,122820,122821],{"class":78,"line":79},[76,122822,122823],{"class":540},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[76,122825,122826,122828],{"class":78,"line":94},[76,122827,26626],{"class":86},[76,122829,122830],{"class":126}," ldconfig\n",[19,122832,122833],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[66,122835,122840],{"className":122836,"code":122837,"language":122838,"meta":122839,"style":71},"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",[73,122841,122842,122847,122852,122857,122862,122867,122872],{"__ignoreMap":71},[76,122843,122844],{"class":78,"line":79},[76,122845,122846],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[76,122848,122849],{"class":78,"line":94},[76,122850,122851],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[76,122853,122854],{"class":78,"line":133},[76,122855,122856],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[76,122858,122859],{"class":78,"line":145},[76,122860,122861],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[76,122863,122864],{"class":78,"line":152},[76,122865,122866],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[76,122868,122869],{"class":78,"line":157},[76,122870,122871],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[76,122873,122874],{"class":78,"line":246},[76,122875,122876],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122878,122879],{},"运行下方的命令",[66,122881,122883],{"className":120543,"code":122882,"language":120545,"meta":71,"style":71},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[73,122884,122885,122890,122897,122902],{"__ignoreMap":71},[76,122886,122887],{"class":78,"line":79},[76,122888,122889],{"class":540},"# cd进入CUDA路径\n",[76,122891,122892,122894],{"class":78,"line":94},[76,122893,103298],{"class":119},[76,122895,122896],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[76,122898,122899],{"class":78,"line":133},[76,122900,122901],{"class":540}," # 查看本路径下的需要软链接的文件名\n",[76,122903,122904],{"class":78,"line":145},[76,122905,122906],{"class":86}," ls\n",[19,122908,122909],{},[3583,122910],{"alt":71,"src":122911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122913,122914,122915,20459,122918,20459,122921,122924],{},"如上图，我需要将",[73,122916,122917],{},"libcudnn_xxx_xxxxx.so.8.9.7",[73,122919,122920],{},"libcudnn_xxx_xxxxx.so.8",[73,122922,122923],{},"libcudnn_xxx_xxxxx.so","软链接",[66,122926,122928],{"className":120543,"code":122927,"language":120545,"meta":71,"style":71},"# 创建符号链接。对于每个 .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",[73,122929,122930,122935,122951,122965,122979,122993,123007,123021,123035,123040,123046,123051],{"__ignoreMap":71},[76,122931,122932],{"class":78,"line":79},[76,122933,122934],{"class":540},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[76,122936,122937,122939,122942,122945,122948],{"class":78,"line":94},[76,122938,26626],{"class":86},[76,122940,122941],{"class":126}," ln",[76,122943,122944],{"class":119}," -sf",[76,122946,122947],{"class":126}," libcudnn_cnn_train.so.8.9.7",[76,122949,122950],{"class":126}," libcudnn_cnn_train.so.8\n",[76,122952,122953,122955,122957,122959,122962],{"class":78,"line":133},[76,122954,26626],{"class":86},[76,122956,122941],{"class":126},[76,122958,122944],{"class":119},[76,122960,122961],{"class":126}," libcudnn_adv_infer.so.8.9.7",[76,122963,122964],{"class":126}," libcudnn_adv_infer.so.8\n",[76,122966,122967,122969,122971,122973,122976],{"class":78,"line":145},[76,122968,26626],{"class":86},[76,122970,122941],{"class":126},[76,122972,122944],{"class":119},[76,122974,122975],{"class":126}," libcudnn_adv_train.so.8.9.7",[76,122977,122978],{"class":126}," libcudnn_adv_train.so.8\n",[76,122980,122981,122983,122985,122987,122990],{"class":78,"line":152},[76,122982,26626],{"class":86},[76,122984,122941],{"class":126},[76,122986,122944],{"class":119},[76,122988,122989],{"class":126}," libcudnn_cnn_infer.so.8.9.7",[76,122991,122992],{"class":126}," libcudnn_cnn_infer.so.8\n",[76,122994,122995,122997,122999,123001,123004],{"class":78,"line":157},[76,122996,26626],{"class":86},[76,122998,122941],{"class":126},[76,123000,122944],{"class":119},[76,123002,123003],{"class":126}," libcudnn.so.8.9.7",[76,123005,123006],{"class":126}," libcudnn.so.8\n",[76,123008,123009,123011,123013,123015,123018],{"class":78,"line":246},[76,123010,26626],{"class":86},[76,123012,122941],{"class":126},[76,123014,122944],{"class":119},[76,123016,123017],{"class":126}," libcudnn_ops_infer.so.8.9.7",[76,123019,123020],{"class":126}," libcudnn_ops_infer.so.8\n",[76,123022,123023,123025,123027,123029,123032],{"class":78,"line":251},[76,123024,26626],{"class":86},[76,123026,122941],{"class":126},[76,123028,122944],{"class":119},[76,123030,123031],{"class":126}," libcudnn_ops_train.so.8.9.7",[76,123033,123034],{"class":126}," libcudnn_ops_train.so.8\n",[76,123036,123037],{"class":78,"line":257},[76,123038,123039],{"class":540},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[76,123041,123042,123044],{"class":78,"line":641},[76,123043,26626],{"class":86},[76,123045,122830],{"class":126},[76,123047,123048],{"class":78,"line":646},[76,123049,123050],{"class":540},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[76,123052,123053,123055,123058,123061,123063,123066],{"class":78,"line":659},[76,123054,28810],{"class":86},[76,123056,123057],{"class":119}," -l",[76,123059,123060],{"class":126}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[76,123062,2718],{"class":119},[76,123064,123065],{"class":126},".so",[76,123067,121268],{"class":119},[889,123069,123071],{"id":123070},"_355-常见问题","3.5.5 常见问题",[26,123073,123074],{},[29,123075,123076],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[66,123078,123080],{"className":120543,"code":123079,"language":120545,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[73,123081,123082],{"__ignoreMap":71},[76,123083,123084,123086,123088],{"class":78,"line":79},[76,123085,26626],{"class":86},[76,123087,120603],{"class":126},[76,123089,123090],{"class":126}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123092,123093],{},"blacklist-nouveau.conf文件内容如下：",[66,123095,123097],{"className":120543,"code":123096,"language":120545,"meta":71,"style":71},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[73,123098,123099,123107,123114,123126,123136],{"__ignoreMap":71},[76,123100,123101,123104],{"class":78,"line":79},[76,123102,123103],{"class":86},"blacklist",[76,123105,123106],{"class":126}," nouveau\n",[76,123108,123109,123111],{"class":78,"line":94},[76,123110,123103],{"class":86},[76,123112,123113],{"class":126}," lbm-nouveau\n",[76,123115,123116,123118,123121,123124],{"class":78,"line":133},[76,123117,117950],{"class":86},[76,123119,123120],{"class":126}," nouveau",[76,123122,123123],{"class":126}," modeset=",[76,123125,5172],{"class":119},[76,123127,123128,123131,123133],{"class":78,"line":145},[76,123129,123130],{"class":119},"alias",[76,123132,123120],{"class":126},[76,123134,123135],{"class":126}," off\n",[76,123137,123138,123140,123143],{"class":78,"line":152},[76,123139,123130],{"class":119},[76,123141,123142],{"class":126}," lbm-nouveau",[76,123144,123135],{"class":126},[19,123146,123147],{},"接着运行下方命令",[66,123149,123151],{"className":120543,"code":123150,"language":120545,"meta":71,"style":71},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[73,123152,123153,123163,123168],{"__ignoreMap":71},[76,123154,123155,123157,123160],{"class":78,"line":79},[76,123156,26626],{"class":86},[76,123158,123159],{"class":126}," update-initramfs",[76,123161,123162],{"class":119}," -u\n",[76,123164,123165],{"class":78,"line":94},[76,123166,123167],{"class":86},"或者\n",[76,123169,123170,123172,123175],{"class":78,"line":133},[76,123171,26626],{"class":86},[76,123173,123174],{"class":126}," dracut",[76,123176,123177],{"class":119}," --force\n",[19,123179,123180],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[66,123182,123184],{"className":120543,"code":123183,"language":120545,"meta":71,"style":71},"lsmod | grep nouveau\n",[73,123185,123186],{"__ignoreMap":71},[76,123187,123188,123191,123193,123195],{"class":78,"line":79},[76,123189,123190],{"class":86},"lsmod",[76,123192,27159],{"class":82},[76,123194,32284],{"class":86},[76,123196,123106],{"class":126},[26,123198,123199],{"start":94},[29,123200,123201],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[66,123203,123205],{"className":120543,"code":123204,"language":120545,"meta":71,"style":71},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[73,123206,123207],{"__ignoreMap":71},[76,123208,123209,123211,123213],{"class":78,"line":79},[76,123210,26626],{"class":86},[76,123212,120603],{"class":126},[76,123214,123215],{"class":126}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123217,123218],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[66,123220,123222],{"className":120543,"code":123221,"language":120545,"meta":71,"style":71},"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",[73,123223,123224,123232,123240,123248,123255,123263,123273,123281],{"__ignoreMap":71},[76,123225,123226,123229],{"class":78,"line":79},[76,123227,123228],{"class":86},"Section",[76,123230,123231],{"class":126}," \"OutputClass\"\n",[76,123233,123234,123237],{"class":78,"line":94},[76,123235,123236],{"class":86},"   Identifier",[76,123238,123239],{"class":126}," \"nvidia\"\n",[76,123241,123242,123245],{"class":78,"line":133},[76,123243,123244],{"class":86},"   MatchDriver",[76,123246,123247],{"class":126}," \"nvidia-drm\"\n",[76,123249,123250,123253],{"class":78,"line":145},[76,123251,123252],{"class":86},"   Driver",[76,123254,123239],{"class":126},[76,123256,123257,123260],{"class":78,"line":152},[76,123258,123259],{"class":86},"   Option",[76,123261,123262],{"class":126}," \"AllowEmptyInitialConfiguration\"\n",[76,123264,123265,123267,123270],{"class":78,"line":157},[76,123266,123259],{"class":86},[76,123268,123269],{"class":126}," \"PrimaryGPU\"",[76,123271,123272],{"class":126}," \"yes\"\n",[76,123274,123275,123278],{"class":78,"line":246},[76,123276,123277],{"class":86},"   ModulePath",[76,123279,123280],{"class":126}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[76,123282,123283],{"class":78,"line":251},[76,123284,123285],{"class":86},"EndSection\n",[26,123287,123288],{"start":133},[29,123289,123290],{},"安装N卡驱动提示错误",[66,123292,123294],{"className":122836,"code":123293,"language":122838,"meta":122839,"style":71},"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",[73,123295,123296],{"__ignoreMap":71},[76,123297,123298],{"class":78,"line":79},[76,123299,123293],{},[26,123301,123302],{},[29,123303,123304],{},"检查当前运行的内核版本：",[19,123306,123307],{},"运行以下命令以查看你当前正在使用的内核版本：",[66,123309,123311],{"className":119316,"code":123310,"language":119318,"meta":71,"style":71},"uname -r\n",[73,123312,123313],{"__ignoreMap":71},[76,123314,123315,123317],{"class":78,"line":79},[76,123316,72232],{"class":86},[76,123318,123319],{"class":119}," -r\n",[26,123321,123322],{"start":94},[29,123323,123324],{},"安装内核开发文件：",[19,123326,123327,123328,123331],{},"确保你已经安装了与当前内核版本相匹配的 ",[73,123329,123330],{},"kernel-devel"," 包。运行以下命令来安装：",[66,123333,123335],{"className":119316,"code":123334,"language":119318,"meta":71,"style":71},"sudo dnf install kernel-devel-$(uname -r)\n",[73,123336,123337],{"__ignoreMap":71},[76,123338,123339,123341,123343,123345,123348,123350,123352,123354],{"class":78,"line":79},[76,123340,26626],{"class":86},[76,123342,28364],{"class":126},[76,123344,25883],{"class":126},[76,123346,123347],{"class":126}," kernel-devel-",[76,123349,27149],{"class":90},[76,123351,72232],{"class":86},[76,123353,121659],{"class":119},[76,123355,130],{"class":90},[19,123357,123358],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,123360,123361],{"start":133},[29,123362,123363],{},"安装内核源代码（如果需要）：",[19,123365,123366],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[66,123368,123370],{"className":119316,"code":123369,"language":119318,"meta":71,"style":71},"sudo dnf install kernel-headers kernel-source\n",[73,123371,123372],{"__ignoreMap":71},[76,123373,123374,123376,123378,123380,123383],{"class":78,"line":79},[76,123375,26626],{"class":86},[76,123377,28364],{"class":126},[76,123379,25883],{"class":126},[76,123381,123382],{"class":126}," kernel-headers",[76,123384,123385],{"class":126}," kernel-source\n",[26,123387,123388],{"start":145},[29,123389,123390],{},"检查安装：",[19,123392,123393,123394,123397],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[73,123395,123396],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[66,123399,123401],{"className":119316,"code":123400,"language":119318,"meta":71,"style":71},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[73,123402,123403],{"__ignoreMap":71},[76,123404,123405,123407],{"class":78,"line":79},[76,123406,28810],{"class":86},[76,123408,123409],{"class":126}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123411,123412,123413,123416],{},"如果仍然遇到问题，可以通过 ",[73,123414,123415],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2178,123418,123419],{},"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":71,"searchDepth":94,"depth":94,"links":123421},[123422,123426,123436,123440,123441],{"id":120519,"depth":94,"text":120520,"children":123423},[123424,123425],{"id":120529,"depth":133,"text":120530},{"id":120539,"depth":133,"text":120540},{"id":120739,"depth":94,"text":120740,"children":123427},[123428,123429,123430,123431,123432,123433,123434,123435],{"id":120743,"depth":133,"text":120744},{"id":120813,"depth":133,"text":120814},{"id":120902,"depth":133,"text":120903},{"id":121147,"depth":133,"text":121148},{"id":121217,"depth":133,"text":121218},{"id":121284,"depth":133,"text":121285},{"id":121319,"depth":133,"text":121320},{"id":121374,"depth":133,"text":121375},{"id":121425,"depth":94,"text":121426,"children":123437},[123438,123439],{"id":121429,"depth":133,"text":121430},{"id":121509,"depth":133,"text":121510},{"id":121695,"depth":94,"text":121696},{"id":121868,"depth":94,"text":121869,"children":123442},[123443,123444,123445,123446,123447],{"id":121872,"depth":133,"text":121873},{"id":121913,"depth":133,"text":121914},{"id":122200,"depth":133,"text":122201},{"id":122574,"depth":133,"text":122575},{"id":123070,"depth":133,"text":123071},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120511,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123454,"title":123455,"body":123456,"description":2201,"extension":2202,"meta":123796,"navigation":148,"path":123797,"seo":123798,"stem":123799,"__hash__":123800},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123457,"toc":123794},[123458,123461,123466,123469,123715,123720,123723,123759,123762,123791],[10,123459,123455],{"id":123460},"_4-命令教程长期积累",[26,123462,123463],{},[29,123464,123465],{},"大多数命令",[19,123467,123468],{},"常用 Linux 命令速查：",[66,123470,123472],{"className":119316,"code":123471,"language":119318,"meta":71,"style":71},"# 文件与目录\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",[73,123473,123474,123479,123486,123493,123501,123508,123515,123523,123531,123538,123545,123553,123557,123562,123569,123577,123584,123588,123593,123600,123608,123616,123624,123632,123636,123641,123649,123656,123663,123671,123679,123683,123688,123697,123706],{"__ignoreMap":71},[76,123475,123476],{"class":78,"line":79},[76,123477,123478],{"class":540},"# 文件与目录\n",[76,123480,123481,123483],{"class":78,"line":94},[76,123482,28810],{"class":86},[76,123484,123485],{"class":540},"        # 列出目录内容\n",[76,123487,123488,123490],{"class":78,"line":133},[76,123489,103298],{"class":119},[76,123491,123492],{"class":540},"        # 切换目录\n",[76,123494,123495,123498],{"class":78,"line":145},[76,123496,123497],{"class":119},"pwd",[76,123499,123500],{"class":540},"       # 显示当前路径\n",[76,123502,123503,123505],{"class":78,"line":152},[76,123504,103288],{"class":86},[76,123506,123507],{"class":540},"     # 创建目录\n",[76,123509,123510,123512],{"class":78,"line":157},[76,123511,27372],{"class":86},[76,123513,123514],{"class":540},"        # 删除文件或目录\n",[76,123516,123517,123520],{"class":78,"line":246},[76,123518,123519],{"class":86},"cp",[76,123521,123522],{"class":540},"        # 复制文件或目录\n",[76,123524,123525,123528],{"class":78,"line":251},[76,123526,123527],{"class":86},"mv",[76,123529,123530],{"class":540},"        # 移动\u002F重命名文件或目录\n",[76,123532,123533,123535],{"class":78,"line":257},[76,123534,103305],{"class":86},[76,123536,123537],{"class":540},"     # 创建空文件\n",[76,123539,123540,123542],{"class":78,"line":641},[76,123541,122785],{"class":86},[76,123543,123544],{"class":540},"       # 查看文件内容\n",[76,123546,123547,123550],{"class":78,"line":646},[76,123548,123549],{"class":86},"head\u002Ftail",[76,123551,123552],{"class":540}," # 查看文件头部\u002F尾部\n",[76,123554,123555],{"class":78,"line":659},[76,123556,149],{"emptyLinePlaceholder":148},[76,123558,123559],{"class":78,"line":1608},[76,123560,123561],{"class":540},"# 权限管理\n",[76,123563,123564,123566],{"class":78,"line":1632},[76,123565,26661],{"class":86},[76,123567,123568],{"class":540},"     # 修改文件权限\n",[76,123570,123571,123574],{"class":78,"line":1637},[76,123572,123573],{"class":86},"chown",[76,123575,123576],{"class":540},"     # 修改文件所有者\n",[76,123578,123579,123581],{"class":78,"line":1642},[76,123580,26626],{"class":86},[76,123582,123583],{"class":540},"      # 以管理员身份执行\n",[76,123585,123586],{"class":78,"line":1652},[76,123587,149],{"emptyLinePlaceholder":148},[76,123589,123590],{"class":78,"line":1660},[76,123591,123592],{"class":540},"# 系统信息\n",[76,123594,123595,123597],{"class":78,"line":1683},[76,123596,72232],{"class":86},[76,123598,123599],{"class":540},"     # 系统信息\n",[76,123601,123602,123605],{"class":78,"line":1698},[76,123603,123604],{"class":86},"df",[76,123606,123607],{"class":540},"        # 磁盘使用情况\n",[76,123609,123610,123613],{"class":78,"line":1711},[76,123611,123612],{"class":86},"free",[76,123614,123615],{"class":540},"      # 内存使用情况\n",[76,123617,123618,123621],{"class":78,"line":1717},[76,123619,123620],{"class":86},"top\u002Fhtop",[76,123622,123623],{"class":540},"  # 进程监控\n",[76,123625,123626,123629],{"class":78,"line":1728},[76,123627,123628],{"class":86},"ps",[76,123630,123631],{"class":540},"        # 查看进程\n",[76,123633,123634],{"class":78,"line":1740},[76,123635,149],{"emptyLinePlaceholder":148},[76,123637,123638],{"class":78,"line":1746},[76,123639,123640],{"class":540},"# 网络\n",[76,123642,123643,123646],{"class":78,"line":1751},[76,123644,123645],{"class":86},"ping",[76,123647,123648],{"class":540},"      # 测试网络连通性\n",[76,123650,123651,123653],{"class":78,"line":1756},[76,123652,28898],{"class":86},[76,123654,123655],{"class":540},"      # 发送 HTTP 请求\n",[76,123657,123658,123660],{"class":78,"line":1766},[76,123659,122309],{"class":86},[76,123661,123662],{"class":540},"      # 下载文件\n",[76,123664,123665,123668],{"class":78,"line":1773},[76,123666,123667],{"class":86},"ssh",[76,123669,123670],{"class":540},"       # 远程登录\n",[76,123672,123673,123676],{"class":78,"line":1793},[76,123674,123675],{"class":86},"scp",[76,123677,123678],{"class":540},"       # 远程文件传输\n",[76,123680,123681],{"class":78,"line":1806},[76,123682,149],{"emptyLinePlaceholder":148},[76,123684,123685],{"class":78,"line":1817},[76,123686,123687],{"class":540},"# 包管理（Debian\u002FUbuntu）\n",[76,123689,123690,123692,123694],{"class":78,"line":1822},[76,123691,119388],{"class":86},[76,123693,119367],{"class":126},[76,123695,123696],{"class":540},"   # 更新软件源\n",[76,123698,123699,123701,123703],{"class":78,"line":1835},[76,123700,119388],{"class":86},[76,123702,25883],{"class":126},[76,123704,123705],{"class":540},"  # 安装软件包\n",[76,123707,123708,123710,123712],{"class":78,"line":1847},[76,123709,119388],{"class":86},[76,123711,28128],{"class":126},[76,123713,123714],{"class":540},"   # 卸载软件包\n",[26,123716,123717],{"start":94},[29,123718,123719],{},"KDE Dolphin 以root打开",[19,123721,123722],{},"kde5",[66,123724,123726],{"className":119316,"code":123725,"language":119318,"meta":71,"style":71},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[73,123727,123728],{"__ignoreMap":71},[76,123729,123730,123733,123736,123739,123741,123743,123746,123749,123751,123754,123756],{"class":78,"line":79},[76,123731,123732],{"class":86},"pkexec",[76,123734,123735],{"class":126}," env",[76,123737,123738],{"class":126}," DISPLAY=",[76,123740,30192],{"class":90},[76,123742,30250],{"class":126},[76,123744,123745],{"class":90},"$XAUTHORITY ",[76,123747,123748],{"class":126},"KDE_SESSION_VERSION=",[76,123750,2583],{"class":119},[76,123752,123753],{"class":126}," KDE_FULL_SESSION=",[76,123755,3483],{"class":119},[76,123757,123758],{"class":126}," dolphin\n",[19,123760,123761],{},"kde6",[66,123763,123765],{"className":119316,"code":123764,"language":119318,"meta":71,"style":71},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[73,123766,123767],{"__ignoreMap":71},[76,123768,123769,123771,123773,123775,123777,123779,123781,123783,123785,123787,123789],{"class":78,"line":79},[76,123770,123732],{"class":86},[76,123772,123735],{"class":126},[76,123774,123738],{"class":126},[76,123776,30192],{"class":90},[76,123778,30250],{"class":126},[76,123780,123745],{"class":90},[76,123782,123748],{"class":126},[76,123784,2608],{"class":119},[76,123786,123753],{"class":126},[76,123788,3483],{"class":119},[76,123790,123758],{"class":126},[2178,123792,123793],{},"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":71,"searchDepth":94,"depth":94,"links":123795},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123455,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123802,"title":123803,"body":123804,"description":2201,"extension":2202,"meta":123818,"navigation":148,"path":123819,"seo":123820,"stem":123821,"__hash__":123822},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123805,"toc":123816},[123806,123809],[10,123807,123803],{"id":123808},"_5-各种环境配置",[19,123810,123811],{},[2503,123812,123815],{"href":123813,"rel":123814},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25914],"电控组环境搭建大全",{"title":71,"searchDepth":94,"depth":94,"links":123817},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123803,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123824,"title":123825,"body":123826,"description":2201,"extension":2202,"meta":124174,"navigation":148,"path":124175,"seo":124176,"stem":124177,"__hash__":124178},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123827,"toc":124166},[123828,123831,123835,123839,123843,123848,123855,123859,124152,124156,124163],[10,123829,123825],{"id":123830},"_6-拓展功能",[14,123832,123834],{"id":123833},"_61-wine","6.1 Wine",[14,123836,123838],{"id":123837},"_62-android","6.2 Android",[889,123840,123842],{"id":123841},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123844,123845],{},[29,123846,123847],{},"Wayland-Waydroid(体验超级好)",[19,123849,123850,123851],{},"Waydroid 官网与安装指南：",[2503,123852,123853],{"href":123853,"rel":123854},"https:\u002F\u002Fwaydro.id\u002F",[25914],[889,123856,123858],{"id":123857},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123860,123861],{},[29,123862,123863,123864,123866,123867,123871,123873,123876,123881,124078],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55748,123865],{},"BlissOS 官网下载：",[2503,123868,123869],{"href":123869,"rel":123870},"https:\u002F\u002Fblissos.org\u002F",[25914],[55748,123872],{},[3583,123874],{"alt":71,"src":123875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123877,123878],{"start":133},[29,123879,123880],{},"比较推荐的配置",[66,123882,123884],{"className":119316,"code":123883,"language":119318,"meta":71,"style":71},"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",[73,123885,123886,123893,123903,123913,123923,123935,123945,123952,123962,123971,123980,123990,124000,124009,124019,124029,124041,124051,124060,124070],{"__ignoreMap":71},[76,123887,123888,123891],{"class":78,"line":79},[76,123889,123890],{"class":86},"qemu-system-x86_64",[76,123892,26728],{"class":119},[76,123894,123895,123898,123901],{"class":78,"line":94},[76,123896,123897],{"class":119},"        -M",[76,123899,123900],{"class":126}," q35,vmport=off",[76,123902,26728],{"class":119},[76,123904,123905,123908,123911],{"class":78,"line":133},[76,123906,123907],{"class":119},"        -accel",[76,123909,123910],{"class":126}," kvm",[76,123912,26728],{"class":119},[76,123914,123915,123918,123921],{"class":78,"line":145},[76,123916,123917],{"class":119},"        -cpu",[76,123919,123920],{"class":126}," qemu64,+sse3,+sse4.2",[76,123922,26728],{"class":119},[76,123924,123925,123928,123931,123933],{"class":78,"line":152},[76,123926,123927],{"class":119},"        -smp",[76,123929,123930],{"class":126}," 8,cores=",[76,123932,2557],{"class":119},[76,123934,26728],{"class":119},[76,123936,123937,123940,123943],{"class":78,"line":157},[76,123938,123939],{"class":119},"        -m",[76,123941,123942],{"class":126}," 6G",[76,123944,26728],{"class":119},[76,123946,123947,123950],{"class":78,"line":246},[76,123948,123949],{"class":119},"        -usb",[76,123951,26728],{"class":119},[76,123953,123954,123957,123960],{"class":78,"line":251},[76,123955,123956],{"class":119},"        -device",[76,123958,123959],{"class":126}," virtio-tablet",[76,123961,26728],{"class":119},[76,123963,123964,123966,123969],{"class":78,"line":257},[76,123965,123956],{"class":119},[76,123967,123968],{"class":126}," virtio-keyboard",[76,123970,26728],{"class":119},[76,123972,123973,123975,123978],{"class":78,"line":641},[76,123974,123956],{"class":119},[76,123976,123977],{"class":126}," usb-tablet",[76,123979,26728],{"class":119},[76,123981,123982,123985,123988],{"class":78,"line":646},[76,123983,123984],{"class":119},"        -bios",[76,123986,123987],{"class":126}," OVMF-pure-efi64.fd",[76,123989,26728],{"class":119},[76,123991,123992,123995,123998],{"class":78,"line":659},[76,123993,123994],{"class":119},"        -net",[76,123996,123997],{"class":126}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[76,123999,26728],{"class":119},[76,124001,124002,124004,124007],{"class":78,"line":1608},[76,124003,123994],{"class":119},[76,124005,124006],{"class":126}," nic,model=virtio",[76,124008,26728],{"class":119},[76,124010,124011,124014,124017],{"class":78,"line":1632},[76,124012,124013],{"class":119},"        -audio",[76,124015,124016],{"class":126}," sdl,model=hda",[76,124018,26728],{"class":119},[76,124020,124021,124024,124027],{"class":78,"line":1637},[76,124022,124023],{"class":119},"        -display",[76,124025,124026],{"class":126}," sdl,gl=on,show-cursor=on",[76,124028,26728],{"class":119},[76,124030,124031,124033,124036,124039],{"class":78,"line":1642},[76,124032,123956],{"class":119},[76,124034,124035],{"class":126}," virtio-vga-gl,xres=1920,yres=",[76,124037,124038],{"class":119},"1080",[76,124040,26728],{"class":119},[76,124042,124043,124046,124049],{"class":78,"line":1652},[76,124044,124045],{"class":119},"        -drive",[76,124047,124048],{"class":126}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[76,124050,26728],{"class":119},[76,124052,124053,124055,124058],{"class":78,"line":1660},[76,124054,124045],{"class":119},[76,124056,124057],{"class":126}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[76,124059,26728],{"class":119},[76,124061,124062,124065,124068],{"class":78,"line":1683},[76,124063,124064],{"class":119},"        -monitor",[76,124066,124067],{"class":126}," stdio",[76,124069,26728],{"class":119},[76,124071,124072,124075],{"class":78,"line":1698},[76,124073,124074],{"class":119},"        -serial",[76,124076,124077],{"class":126}," none\n",[26,124079,124080],{"start":152},[29,124081,124082,124083],{},"常用操作：",[26,124084,124085,124088,124144],{},[29,124086,124087],{},"全屏：Ctrl+Alt+F",[29,124089,124090,124091,124096],{},"adb调试",[26,124092,124093],{},[29,124094,124095],{},"使Linux与Android用ADB连接。",[66,124097,124099],{"className":119316,"code":124098,"language":119318,"meta":71,"style":71},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[73,124100,124101,124106,124117,124122,124134,124139],{"__ignoreMap":71},[76,124102,124103],{"class":78,"line":79},[76,124104,124105],{"class":540},"# 连接安卓\n",[76,124107,124108,124111,124114],{"class":78,"line":94},[76,124109,124110],{"class":86},"adb",[76,124112,124113],{"class":126}," connect",[76,124115,124116],{"class":119}," 127.0.0.1\n",[76,124118,124119],{"class":78,"line":133},[76,124120,124121],{"class":540},"# 打开shell\n",[76,124123,124124,124126,124128,124131],{"class":78,"line":145},[76,124125,124110],{"class":86},[76,124127,28932],{"class":119},[76,124129,124130],{"class":126}," 127.0.0.1:5555",[76,124132,124133],{"class":126}," shell\n",[76,124135,124136],{"class":78,"line":152},[76,124137,124138],{"class":540},"# 使用root权限\n",[76,124140,124141],{"class":78,"line":157},[76,124142,124143],{"class":86},"su\n",[29,124145,124146,124147],{},"中文输入法",[26,124148,124149],{},[29,124150,124151],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124153,124155],{"id":124154},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124157,124158,124159],{},"rEFInd 官网与文档：",[2503,124160,124161],{"href":124161,"rel":124162},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25914],[2178,124164,124165],{},"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":71,"searchDepth":94,"depth":94,"links":124167},[124168,124169,124173],{"id":123833,"depth":94,"text":123834},{"id":123837,"depth":94,"text":123838,"children":124170},[124171,124172],{"id":123841,"depth":133,"text":123842},{"id":123857,"depth":133,"text":123858},{"id":124154,"depth":94,"text":124155},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123825,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124180,"title":124181,"body":124182,"description":2201,"extension":2202,"meta":127481,"navigation":148,"path":127482,"seo":127483,"stem":127484,"__hash__":127485},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124183,"toc":127455},[124184,124187,124191,124194,124201,124451,124454,124526,124529,124533,124537,124542,124545,124548,124551,124556,124559,124562,124565,124570,124573,124578,124581,124584,124589,124592,124597,124600,124604,124608,124611,124616,124619,124633,124636,124639,124648,124651,124660,124663,124666,124675,124678,124687,124690,124693,124702,124705,124708,124723,124726,124729,124738,124743,124746,124749,124758,124761,124770,124773,124782,124785,124794,124799,124802,124810,124815,124818,124827,124830,124838,124843,124846,124855,124858,124861,124865,124868,124873,124876,124881,124895,124900,124905,124916,124921,124927,124932,124947,124952,124955,124960,124965,124970,124978,124983,124990,124995,125006,125011,125014,125018,125021,125024,125029,125032,125051,125056,125059,125068,125073,125076,125098,125101,125131,125134,125139,125142,125156,125161,125180,125183,125186,125191,125203,125208,125213,125216,125221,125224,125239,125242,125247,125252,125256,125261,125301,125304,125308,125314,125320,125325,125328,125335,125340,125347,125350,125353,125360,125374,125377,125437,125440,125454,125466,125469,125472,125475,125539,125542,125545,125548,125568,125571,125576,125583,125587,125590,125594,125599,125604,125608,125611,125614,125656,125661,125664,125686,125701,125703,125708,125720,125780,125782,125784,125838,125840,125842,125848,125853,125856,125861,125865,125868,125930,125935,125938,125940,125944,125956,126038,126040,126042,126096,126102,126104,126108,126113,126115,126120,126124,126144,126179,126183,126186,126189,126192,126199,126202,126214,126217,126232,126235,126254,126302,126305,126322,126325,126339,126344,126347,126356,126371,126383,126421,126426,126435,126440,126445,126471,126480,126484,126488,126493,126496,126500,126504,126509,126512,126517,126520,126525,126528,126533,126536,126540,126545,126548,126553,126556,126560,126565,126568,126573,126576,126581,126584,126588,126593,126596,126601,126604,126609,126612,126616,126621,126624,126629,126632,126637,126640,126645,126648,126653,126656,126661,126664,126668,126673,126676,126681,126688,126692,126697,126700,126705,126708,126712,126717,126720,126723,126726,126729,126732,126736,126739,126749,126754,126759,126781,126786,126791,126798,126802,126807,126810,126813,126818,126821,126824,126827,126830,126833,126836,126839,126842,126845,126848,126851,126854,126859,126864,126869,126874,126879,126884,126889,126892,126896,126899,126903,126908,126913,126918,126923,126927,126933,126941,126946,126949,126954,126969,126972,126977,127011,127026,127029,127084,127110,127122,127125,127134,127137,127152,127157,127160,127166,127171,127174,127179,127182,127187,127192,127199,127202,127217,127220,127255,127260,127268,127306,127309,127312,127317,127320,127325,127336,127370,127375,127378,127387,127392,127398,127401,127406,127415,127420,127423,127426,127431,127439,127442,127447,127452],[10,124185,124181],{"id":124186},"_7-其他操作",[14,124188,124190],{"id":124189},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124192,124193],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124195,124196,124197,124200],{},"进入工控机的硬盘目录，进入",[73,124198,124199],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[66,124202,124206],{"className":124203,"code":124204,"language":124205,"meta":71,"style":71},"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",[73,124207,124208,124216,124227,124234,124241,124253,124260,124272,124283,124294,124301,124308,124315,124327,124339,124346,124358,124370,124377,124389,124401,124413,124424,124431,124442],{"__ignoreMap":71},[76,124209,124210,124213],{"class":78,"line":79},[76,124211,124212],{"class":53332},"network",[76,124214,124215],{"class":90},": \n",[76,124217,124218,124221,124223,124225],{"class":78,"line":94},[76,124219,124220],{"class":53332},"  version",[76,124222,53469],{"class":90},[76,124224,2345],{"class":119},[76,124226,4762],{"class":90},[76,124228,124229,124232],{"class":78,"line":133},[76,124230,124231],{"class":53332},"  wifis",[76,124233,124215],{"class":90},[76,124235,124236,124239],{"class":78,"line":145},[76,124237,124238],{"class":53332},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[76,124240,124215],{"class":90},[76,124242,124243,124246,124248,124251],{"class":78,"line":152},[76,124244,124245],{"class":53332},"      renderer",[76,124247,53469],{"class":90},[76,124249,124250],{"class":126},"NetworkManager",[76,124252,4762],{"class":90},[76,124254,124255,124258],{"class":78,"line":157},[76,124256,124257],{"class":53332},"      match",[76,124259,124215],{"class":90},[76,124261,124262,124265,124267,124270],{"class":78,"line":246},[76,124263,124264],{"class":53332},"        name",[76,124266,53469],{"class":90},[76,124268,124269],{"class":126},"\"wlan0\"",[76,124271,4762],{"class":90},[76,124273,124274,124277,124279,124281],{"class":78,"line":251},[76,124275,124276],{"class":53332},"      dhcp4",[76,124278,53469],{"class":90},[76,124280,3483],{"class":119},[76,124282,4762],{"class":90},[76,124284,124285,124288,124290,124292],{"class":78,"line":257},[76,124286,124287],{"class":53332},"      dhcp6",[76,124289,53469],{"class":90},[76,124291,3483],{"class":119},[76,124293,4762],{"class":90},[76,124295,124296,124299],{"class":78,"line":641},[76,124297,124298],{"class":53332},"      access-points",[76,124300,124215],{"class":90},[76,124302,124303,124306],{"class":78,"line":646},[76,124304,124305],{"class":126},"        \"EMIS_Vinci_Robocon_5G\"",[76,124307,124215],{"class":90},[76,124309,124310,124313],{"class":78,"line":659},[76,124311,124312],{"class":53332},"          auth",[76,124314,124215],{"class":90},[76,124316,124317,124320,124322,124325],{"class":78,"line":1608},[76,124318,124319],{"class":53332},"            key-management",[76,124321,53469],{"class":90},[76,124323,124324],{"class":126},"\"psk\"",[76,124326,4762],{"class":90},[76,124328,124329,124332,124334,124337],{"class":78,"line":1632},[76,124330,124331],{"class":53332},"            password",[76,124333,53469],{"class":90},[76,124335,124336],{"class":126},"\"vinci666\"",[76,124338,4762],{"class":90},[76,124340,124341,124344],{"class":78,"line":1637},[76,124342,124343],{"class":53332},"          networkmanager",[76,124345,124215],{"class":90},[76,124347,124348,124351,124353,124356],{"class":78,"line":1642},[76,124349,124350],{"class":53332},"            uuid",[76,124352,53469],{"class":90},[76,124354,124355],{"class":126},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[76,124357,4762],{"class":90},[76,124359,124360,124363,124365,124368],{"class":78,"line":1652},[76,124361,124362],{"class":53332},"            name",[76,124364,53469],{"class":90},[76,124366,124367],{"class":126},"\"EMIS_Vinci_Robocon_5G\"",[76,124369,4762],{"class":90},[76,124371,124372,124375],{"class":78,"line":1660},[76,124373,124374],{"class":53332},"            passthrough",[76,124376,124215],{"class":90},[76,124378,124379,124382,124384,124387],{"class":78,"line":1683},[76,124380,124381],{"class":53332},"              wifi-security.auth-alg",[76,124383,53469],{"class":90},[76,124385,124386],{"class":126},"\"open\"",[76,124388,4762],{"class":90},[76,124390,124391,124394,124396,124399],{"class":78,"line":1698},[76,124392,124393],{"class":53332},"              ipv6.addr-gen-mode",[76,124395,53469],{"class":90},[76,124397,124398],{"class":126},"\"default\"",[76,124400,4762],{"class":90},[76,124402,124403,124406,124408,124411],{"class":78,"line":1711},[76,124404,124405],{"class":53332},"              ipv6.ip6-privacy",[76,124407,53469],{"class":90},[76,124409,124410],{"class":126},"\"-1\"",[76,124412,4762],{"class":90},[76,124414,124415,124418,124420,124422],{"class":78,"line":1717},[76,124416,124417],{"class":53332},"              proxy._",[76,124419,53469],{"class":90},[76,124421,9730],{"class":126},[76,124423,4762],{"class":90},[76,124425,124426,124429],{"class":78,"line":1728},[76,124427,124428],{"class":53332},"      networkmanager",[76,124430,124215],{"class":90},[76,124432,124433,124436,124438,124440],{"class":78,"line":1740},[76,124434,124435],{"class":53332},"        uuid",[76,124437,53469],{"class":90},[76,124439,124355],{"class":126},[76,124441,4762],{"class":90},[76,124443,124444,124446,124448],{"class":78,"line":1746},[76,124445,124264],{"class":53332},[76,124447,53469],{"class":90},[76,124449,124450],{"class":126},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124452,124453],{},"将其改为新wifi的名和密码：",[66,124455,124457],{"className":124203,"code":124456,"language":124205,"meta":71,"style":71},"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",[73,124458,124459,124465,124474,124480,124487,124496,124504,124510,124516],{"__ignoreMap":71},[76,124460,124461,124463],{"class":78,"line":79},[76,124462,124212],{"class":53332},[76,124464,590],{"class":90},[76,124466,124467,124469,124471],{"class":78,"line":94},[76,124468,124220],{"class":53332},[76,124470,53469],{"class":90},[76,124472,124473],{"class":119},"2\n",[76,124475,124476,124478],{"class":78,"line":133},[76,124477,124231],{"class":53332},[76,124479,590],{"class":90},[76,124481,124482,124485],{"class":78,"line":145},[76,124483,124484],{"class":53332},"    wlan0",[76,124486,590],{"class":90},[76,124488,124489,124491,124493],{"class":78,"line":152},[76,124490,124276],{"class":53332},[76,124492,53469],{"class":90},[76,124494,124495],{"class":119},"true\n",[76,124497,124498,124500,124502],{"class":78,"line":157},[76,124499,124287],{"class":53332},[76,124501,53469],{"class":90},[76,124503,124495],{"class":119},[76,124505,124506,124508],{"class":78,"line":246},[76,124507,124298],{"class":53332},[76,124509,590],{"class":90},[76,124511,124512,124514],{"class":78,"line":251},[76,124513,124305],{"class":126},[76,124515,590],{"class":90},[76,124517,124518,124521,124523],{"class":78,"line":257},[76,124519,124520],{"class":53332},"          password",[76,124522,53469],{"class":90},[76,124524,124525],{"class":126},"\"vinci666\"\n",[19,124527,124528],{},"工控机开机即可连上网。",[14,124530,124532],{"id":124531},"_72-ssh远程开发","7.2 SSH远程开发",[889,124534,124536],{"id":124535},"_721-环境准备","7.2.1 环境准备",[19,124538,124539],{},[2416,124540,124541],{},"1.硬件准备",[19,124543,124544],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124546,124547],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124549,124550],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124552,124553],{},[2416,124554,124555],{},"2.设置固定IP",[19,124557,124558],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124560,124561],{},"1.进入设置界面",[19,124563,124564],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124566,124567],{},[3583,124568],{"alt":71,"src":124569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124571,124572],{},"2.配置所连接的网络",[19,124574,124575],{},[3583,124576],{"alt":71,"src":124577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124579,124580],{},"3.设置固定IP",[19,124582,124583],{},"查看当前IP地址。",[19,124585,124586],{},[3583,124587],{"alt":71,"src":124588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124590,124591],{},"设置固定IP。",[19,124593,124594],{},[3583,124595],{"alt":71,"src":124596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124598,124599],{},"至此，IP配置完毕。",[889,124601,124603],{"id":124602},"_722-环境搭建","7.2.2 环境搭建",[19,124605,124606],{},[2416,124607,27803],{},[19,124609,124610],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124612,124613],{},[2416,124614,124615],{},"实现",[19,124617,124618],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,124620,124621,124624,124627,124630],{},[29,124622,124623],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,124625,124626],{},"远程主机启动SSH服务；",[29,124628,124629],{},"本地主机登陆远程主机；",[29,124631,124632],{},"实现数据传输。",[19,124634,124635],{},"1.安装SSH客户端与服务端",[19,124637,124638],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[66,124640,124642],{"className":122836,"code":124641,"language":122838,"meta":122839,"style":71}," sudo apt install openssh-server\n",[73,124643,124644],{"__ignoreMap":71},[76,124645,124646],{"class":78,"line":79},[76,124647,124641],{},[19,124649,124650],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[66,124652,124654],{"className":122836,"code":124653,"language":122838,"meta":122839,"style":71},"sudo apt install openssh-client\n",[73,124655,124656],{"__ignoreMap":71},[76,124657,124658],{"class":78,"line":79},[76,124659,124653],{},[19,124661,124662],{},"2.远程主机启动SSH服务",[19,124664,124665],{},"远程主机启动 ssh 服务命令如下：",[66,124667,124669],{"className":122836,"code":124668,"language":122838,"meta":122839,"style":71},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[73,124670,124671],{"__ignoreMap":71},[76,124672,124673],{"class":78,"line":79},[76,124674,124668],{},[19,124676,124677],{},"启动后可使用如下命令查看服务是否正常运行：",[66,124679,124681],{"className":122836,"code":124680,"language":122838,"meta":122839,"style":71},"ps -e | grep ssh\n",[73,124682,124683],{"__ignoreMap":71},[76,124684,124685],{"class":78,"line":79},[76,124686,124680],{},[19,124688,124689],{},"如果启动成功，会包含 sshd 程序。",[19,124691,124692],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[66,124694,124696],{"className":122836,"code":124695,"language":122838,"meta":122839,"style":71},"sudo systemctl enable ssh\n",[73,124697,124698],{"__ignoreMap":71},[76,124699,124700],{"class":78,"line":79},[76,124701,124695],{},[19,124703,124704],{},"3.本地远程登录",[19,124706,124707],{},"登录远程主机可以调用如下命令:",[66,124709,124711],{"className":119316,"code":124710,"language":119318,"meta":71,"style":71},"ssh -X 用户名@ip地址\n",[73,124712,124713],{"__ignoreMap":71},[76,124714,124715,124717,124720],{"class":78,"line":79},[76,124716,123667],{"class":86},[76,124718,124719],{"class":119}," -X",[76,124721,124722],{"class":126}," 用户名@ip地址\n",[19,124724,124725],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124727,124728],{},"如果退出，可以调用exit命令：",[66,124730,124732],{"className":122836,"code":124731,"language":122838,"meta":122839,"style":71},"exit\n",[73,124733,124734],{"__ignoreMap":71},[76,124735,124736],{"class":78,"line":79},[76,124737,124731],{},[19,124739,124740],{},[2416,124741,124742],{},"4.实现数据传输",[19,124744,124745],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124747,124748],{},"上传文件指令格式如下：",[66,124750,124752],{"className":122836,"code":124751,"language":122838,"meta":122839,"style":71},"scp 本地文件路径 账号@ip:路径\n",[73,124753,124754],{"__ignoreMap":71},[76,124755,124756],{"class":78,"line":79},[76,124757,124751],{},[19,124759,124760],{},"上传文件夹指令格式如下：",[66,124762,124764],{"className":122836,"code":124763,"language":122838,"meta":122839,"style":71},"scp -r 本地文件夹路径 账号@ip:路径\n",[73,124765,124766],{"__ignoreMap":71},[76,124767,124768],{"class":78,"line":79},[76,124769,124763],{},[19,124771,124772],{},"下载文件指令格式如下：",[66,124774,124776],{"className":122836,"code":124775,"language":122838,"meta":122839,"style":71},"scp 账号@ip:路径 本地文件夹路径\n",[73,124777,124778],{"__ignoreMap":71},[76,124779,124780],{"class":78,"line":79},[76,124781,124775],{},[19,124783,124784],{},"下载文件夹指令格式如下：",[66,124786,124788],{"className":122836,"code":124787,"language":122838,"meta":122839,"style":71},"scp -r 账号@ip:路径 本地文件夹路径\n",[73,124789,124790],{"__ignoreMap":71},[76,124791,124792],{"class":78,"line":79},[76,124793,124787],{},[19,124795,124796],{},[2416,124797,124798],{},"优化",[19,124800,124801],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124803,124804,124807],{},[29,124805,124806],{},"本地生成密钥对；",[29,124808,124809],{},"将公钥上传至远程主机。",[19,124811,124812],{},[2416,124813,124814],{},"1.生成密钥对",[19,124816,124817],{},"本地客户端生成公私钥：（一路回车默认即可）",[66,124819,124821],{"className":122836,"code":124820,"language":122838,"meta":122839,"style":71},"ssh-keygen\n",[73,124822,124823],{"__ignoreMap":71},[76,124824,124825],{"class":78,"line":79},[76,124826,124820],{},[19,124828,124829],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124831,124832,124835],{},[29,124833,124834],{},"id_rsa （私钥）；",[29,124836,124837],{},"id_rsa.pub (公钥)。",[19,124839,124840],{},[2416,124841,124842],{},"2.公钥上传",[19,124844,124845],{},"上传指令如下：",[66,124847,124849],{"className":122836,"code":124848,"language":122838,"meta":122839,"style":71},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[73,124850,124851],{"__ignoreMap":71},[76,124852,124853],{"class":78,"line":79},[76,124854,124848],{},[19,124856,124857],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124859,124860],{},"以后再远程登录就无需录入密码了。",[889,124862,124864],{"id":124863},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124866,124867],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124869,124870],{},[2416,124871,124872],{},"1.准备工作",[19,124874,124875],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124877,124878],{},[2416,124879,124880],{},"2.为VScode安装远程开发插件",[19,124882,124883,124884,124887,124888,124891,124892,490],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[73,124885,124886],{},"扩展：商店","的搜索栏输入",[73,124889,124890],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[73,124893,124894],{},"安装",[19,124896,124897],{},[3583,124898],{"alt":71,"src":124899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124901,124902],{},[2416,124903,124904],{},"3.配置远程连接",[19,124906,124907,124908,124911,124912,124915],{},"步骤1：使用快捷键",[73,124909,124910],{},"ctrl + shift + p","打开命令输入窗口，并输入",[73,124913,124914],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124917,124918],{},[3583,124919],{"alt":71,"src":124920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124922,124923,124924,490],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[73,124925,124926],{},"Add New SSH Host",[19,124928,124929],{},[3583,124930],{"alt":71,"src":124931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124933,124934,124935,124938,124939,124942,124943,124946],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[73,124936,124937],{},"ssh +X ubuntu@192.168.43.164","，其中，",[73,124940,124941],{},"ubuntu","需要替换为你的登录用户名，",[73,124944,124945],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124948,124949],{},[3583,124950],{"alt":71,"src":124951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124953,124954],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124956,124957],{},[3583,124958],{"alt":71,"src":124959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124961,124962],{},[3583,124963],{"alt":71,"src":124964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124966,124967],{},[2416,124968,124969],{},"4.使用",[19,124971,124972,124973,124911,124975,124977],{},"步骤1：继续使用快捷键",[73,124974,124910],{},[73,124976,124914],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124979,124980],{},[3583,124981],{"alt":71,"src":124982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124984,124985,124986,124989],{},"或者，也可以点击侧边栏的",[73,124987,124988],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124991,124992],{},[3583,124993],{"alt":71,"src":124994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124996,124997,124998,125001,125002,125005],{},"步骤2：选择菜单栏的",[73,124999,125000],{},"文件","下的",[73,125003,125004],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125007,125008],{},[3583,125009],{"alt":71,"src":125010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125012,125013],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125015,125017],{"id":125016},"_73-远程桌面","7.3 远程桌面",[19,125019,125020],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125022,125023],{},"我们选择使用VNC来看。",[26,125025,125026],{},[29,125027,125028],{},"安装VNC服务器：",[19,125030,125031],{},"这里以TigerVNC为例进行安装：",[66,125033,125035],{"className":119316,"code":125034,"language":119318,"meta":71,"style":71},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[73,125036,125037],{"__ignoreMap":71},[76,125038,125039,125041,125043,125045,125048],{"class":78,"line":79},[76,125040,26626],{"class":86},[76,125042,119337],{"class":126},[76,125044,25883],{"class":126},[76,125046,125047],{"class":126}," tigervnc-standalone-server",[76,125049,125050],{"class":126}," tigervnc-common\n",[26,125052,125053],{"start":94},[29,125054,125055],{},"设置VNC密码：",[19,125057,125058],{},"为VNC用户设置密码，运行以下命令：",[66,125060,125062],{"className":119316,"code":125061,"language":119318,"meta":71,"style":71},"vncpasswd\n",[73,125063,125064],{"__ignoreMap":71},[76,125065,125066],{"class":78,"line":79},[76,125067,125061],{"class":86},[26,125069,125070],{"start":133},[29,125071,125072],{},"配置VNC启动脚本:",[19,125074,125075],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[66,125077,125079],{"className":119316,"code":125078,"language":119318,"meta":71,"style":71},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[73,125080,125081,125090],{"__ignoreMap":71},[76,125082,125083,125085,125087],{"class":78,"line":79},[76,125084,103288],{"class":86},[76,125086,31264],{"class":119},[76,125088,125089],{"class":126}," ~\u002F.vnc\n",[76,125091,125092,125095],{"class":78,"line":94},[76,125093,125094],{"class":86},"nano",[76,125096,125097],{"class":126}," ~\u002F.vnc\u002Fxstartup\n",[19,125099,125100],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[66,125102,125104],{"className":119316,"code":125103,"language":119318,"meta":71,"style":71},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[73,125105,125106,125111,125119,125126],{"__ignoreMap":71},[76,125107,125108],{"class":78,"line":79},[76,125109,125110],{"class":540},"#!\u002Fbin\u002Fsh\n",[76,125112,125113,125116],{"class":78,"line":94},[76,125114,125115],{"class":119},"unset",[76,125117,125118],{"class":126}," SESSION_MANAGER\n",[76,125120,125121,125123],{"class":78,"line":133},[76,125122,125115],{"class":119},[76,125124,125125],{"class":126}," DBUS_SESSION_BUS_ADDRESS\n",[76,125127,125128],{"class":78,"line":145},[76,125129,125130],{"class":86},"gnome-session\n",[19,125132,125133],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,125135,125136],{"start":145},[29,125137,125138],{},"给予执行权限：",[19,125140,125141],{},"为xstartup文件设置执行权限：",[66,125143,125145],{"className":119316,"code":125144,"language":119318,"meta":71,"style":71},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[73,125146,125147],{"__ignoreMap":71},[76,125148,125149,125151,125154],{"class":78,"line":79},[76,125150,26661],{"class":86},[76,125152,125153],{"class":126}," +x",[76,125155,125097],{"class":126},[26,125157,125158],{"start":152},[29,125159,125160],{},"启动VNC服务器：",[66,125162,125164],{"className":119316,"code":125163,"language":119318,"meta":71,"style":71},"vncserver -geometry 1920x1080 -localhost=0\n",[73,125165,125166],{"__ignoreMap":71},[76,125167,125168,125171,125174,125177],{"class":78,"line":79},[76,125169,125170],{"class":86},"vncserver",[76,125172,125173],{"class":119}," -geometry",[76,125175,125176],{"class":126}," 1920x1080",[76,125178,125179],{"class":119}," -localhost=0\n",[19,125181,125182],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125184,125185],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,125187,125188],{"start":157},[29,125189,125190],{},"查看已开启的VNC服务器：",[66,125192,125194],{"className":119316,"code":125193,"language":119318,"meta":71,"style":71},"vncserver -list\n",[73,125195,125196],{"__ignoreMap":71},[76,125197,125198,125200],{"class":78,"line":79},[76,125199,125170],{"class":86},[76,125201,125202],{"class":119}," -list\n",[19,125204,125205],{},[3583,125206],{"alt":71,"src":125207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,125209,125210],{"start":246},[29,125211,125212],{},"连接到VNC服务器：",[19,125214,125215],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,125217,125218],{"start":251},[29,125219,125220],{},"停止VNC服务器：",[19,125222,125223],{},"如果需要停止VNC服务器，可以使用以下命令：",[66,125225,125227],{"className":119316,"code":125226,"language":119318,"meta":71,"style":71},"vncserver -kill :1\n",[73,125228,125229],{"__ignoreMap":71},[76,125230,125231,125233,125236],{"class":78,"line":79},[76,125232,125170],{"class":86},[76,125234,125235],{"class":119}," -kill",[76,125237,125238],{"class":126}," :1\n",[19,125240,125241],{},"将:1替换为你实际使用的显示编号。",[19,125243,125244],{},[3583,125245],{"alt":71,"src":125246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125248,125249],{},[3583,125250],{"alt":71,"src":125251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125253,125255],{"id":125254},"_74-usb端口设置","7.4 USB端口设置",[19,125257,125258],{},[2416,125259,125260],{},"首先先配置好权限",[66,125262,125264],{"className":119316,"code":125263,"language":119318,"meta":71,"style":71},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[73,125265,125266,125271,125284,125291,125296],{"__ignoreMap":71},[76,125267,125268],{"class":78,"line":79},[76,125269,125270],{"class":540},"# 将用户权限提高\n",[76,125272,125273,125275,125277,125279,125282],{"class":78,"line":94},[76,125274,26626],{"class":86},[76,125276,28623],{"class":126},[76,125278,28626],{"class":119},[76,125280,125281],{"class":126}," dialout",[76,125283,28631],{"class":90},[76,125285,125286,125288],{"class":78,"line":133},[76,125287,28650],{"class":86},[76,125289,125290],{"class":126}," dialout\n",[76,125292,125293],{"class":78,"line":145},[76,125294,125295],{"class":540},"# 查看下面命令是否输出dialout（若输出才正常）\n",[76,125297,125298],{"class":78,"line":152},[76,125299,125300],{"class":86},"groups\n",[19,125302,125303],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[889,125305,125307],{"id":125306},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125309,125310,125313],{},[2416,125311,125312],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125315,125316,125319],{},[2416,125317,125318],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125321,125322],{},[2416,125323,125324],{},"流程如下：",[19,125326,125327],{},"（1）.查找设备idVendor和idProduct",[19,125329,125330,125331,125334],{},"接入两个USB设备，在终端调用指令",[73,125332,125333],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125336,125337],{},[3583,125338],{"alt":71,"src":125339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125341,125342,125343,125346],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[73,125344,125345],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125348,125349],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125351,125352],{},"（2）.编写映射规则",[19,125354,125355,125356,125359],{},"在",[73,125357,125358],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[66,125361,125363],{"className":119316,"code":125362,"language":119318,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[73,125364,125365],{"__ignoreMap":71},[76,125366,125367,125369,125371],{"class":78,"line":79},[76,125368,26626],{"class":86},[76,125370,120603],{"class":126},[76,125372,125373],{"class":126}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125375,125376],{},"输入如下内容：",[66,125378,125380],{"className":119316,"code":125379,"language":119318,"meta":71,"style":71},"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",[73,125381,125382,125412],{"__ignoreMap":71},[76,125383,125384,125387,125389,125392,125395,125398,125401,125403,125406,125409],{"class":78,"line":79},[76,125385,125386],{"class":90},"KERNEL",[76,125388,370],{"class":82},[76,125390,125391],{"class":126},"=\"ttyUSB*\",",[76,125393,125394],{"class":86}," ATTRS",[76,125396,125397],{"class":126},"{idVendor}==",[76,125399,125400],{"class":86},"\"10c4\"",[76,125402,2642],{"class":86},[76,125404,125405],{"class":126}," ATTRS{idProduct}==\"ea60\",",[76,125407,125408],{"class":126}," MODE:=\"0777\",",[76,125410,125411],{"class":126}," SYMLINK+=\"mylidar\"\n",[76,125413,125414,125416,125418,125420,125422,125424,125427,125429,125432,125434],{"class":78,"line":94},[76,125415,125386],{"class":90},[76,125417,370],{"class":82},[76,125419,125391],{"class":126},[76,125421,125394],{"class":86},[76,125423,125397],{"class":126},[76,125425,125426],{"class":86},"\"1a86\"",[76,125428,2642],{"class":86},[76,125430,125431],{"class":126}," ATTRS{idProduct}==\"7523\",",[76,125433,125408],{"class":126},[76,125435,125436],{"class":126}," SYMLINK+=\"mycar\"\n",[19,125438,125439],{},"代码解释：",[3261,125441,125442,125445,125448,125451],{},[29,125443,125444],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,125446,125447],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,125449,125450],{},"SYMLINK是符号连接，即绑定的别名；",[29,125452,125453],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125455,125456,125457,125460,125463],{},"***小提示：***",[25602,125458,125459],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[73,125461,125462],{},"\u002Fetc\u002Fudev\u002Frule.d",[25602,125464,125465],{},"目录即可。",[19,125467,125468],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125470,125471],{},"（3）.使规则生效",[19,125473,125474],{},"在终端下输入如下指令：",[66,125476,125478],{"className":119316,"code":125477,"language":119318,"meta":71,"style":71},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[73,125479,125480,125485,125497,125508,125512,125517,125530],{"__ignoreMap":71},[76,125481,125482],{"class":78,"line":79},[76,125483,125484],{"class":540},"# Ubuntu用下方命令\n",[76,125486,125487,125489,125491,125494],{"class":78,"line":94},[76,125488,26626],{"class":86},[76,125490,122068],{"class":126},[76,125492,125493],{"class":126}," udev",[76,125495,125496],{"class":126}," reload\n",[76,125498,125499,125501,125503,125505],{"class":78,"line":133},[76,125500,26626],{"class":86},[76,125502,122068],{"class":126},[76,125504,125493],{"class":126},[76,125506,125507],{"class":126}," restart\n",[76,125509,125510],{"class":78,"line":145},[76,125511,149],{"emptyLinePlaceholder":148},[76,125513,125514],{"class":78,"line":152},[76,125515,125516],{"class":540},"#Fedora用下方命令\n",[76,125518,125519,125521,125524,125527],{"class":78,"line":157},[76,125520,26626],{"class":86},[76,125522,125523],{"class":126}," udevadm",[76,125525,125526],{"class":126}," control",[76,125528,125529],{"class":119}," --reload\n",[76,125531,125532,125534,125536],{"class":78,"line":246},[76,125533,26626],{"class":86},[76,125535,125523],{"class":126},[76,125537,125538],{"class":126}," trigger\n",[19,125540,125541],{},"再重新插拔设备即可。",[19,125543,125544],{},"（4）.测试",[19,125546,125547],{},"终端下输入如下指令",[66,125549,125551],{"className":119316,"code":125550,"language":119318,"meta":71,"style":71},"ll \u002Fdev | grep ttyUSB\n",[73,125552,125553],{"__ignoreMap":71},[76,125554,125555,125558,125561,125563,125565],{"class":78,"line":79},[76,125556,125557],{"class":86},"ll",[76,125559,125560],{"class":126}," \u002Fdev",[76,125562,27159],{"class":82},[76,125564,32284],{"class":86},[76,125566,125567],{"class":126}," ttyUSB\n",[19,125569,125570],{},"运行结果如下：",[19,125572,125573],{},[3583,125574],{"alt":71,"src":125575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125577,125578,125579,125582],{},"也可以多次插拔USB设备，会发现设备端口",[73,125580,125581],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125584,125585],{},[2416,125586,119984],{},[19,125588,125589],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[889,125591,125593],{"id":125592},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125595,125596,125598],{},[2416,125597,125312],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125600,125601,125603],{},[2416,125602,125318],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125605,125606],{},[2416,125607,125324],{},[19,125609,125610],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125612,125613],{},"调用如下指令查看第一台雷达的USB信息：",[66,125615,125617],{"className":119316,"code":125616,"language":119318,"meta":71,"style":71},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[73,125618,125619,125639],{"__ignoreMap":71},[76,125620,125621,125624,125626,125629,125632,125634,125636],{"class":78,"line":79},[76,125622,125623],{"class":86},"udevadm",[76,125625,71849],{"class":126},[76,125627,125628],{"class":119}," --attribute-walk",[76,125630,125631],{"class":119}," --name=\u002Fdev\u002FttyUSB0",[76,125633,27159],{"class":82},[76,125635,32284],{"class":86},[76,125637,125638],{"class":126}," KERNELS\n",[76,125640,125641,125643,125645,125647,125650,125652,125654],{"class":78,"line":94},[76,125642,125623],{"class":86},[76,125644,71849],{"class":126},[76,125646,125628],{"class":119},[76,125648,125649],{"class":119}," --name=\u002Fdev\u002FttyACM0",[76,125651,27159],{"class":82},[76,125653,32284],{"class":86},[76,125655,125638],{"class":126},[19,125657,125658],{},[3583,125659],{"alt":71,"src":125660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125662,125663],{},"调用如下指令查看第二台雷达的USB信息：",[66,125665,125667],{"className":119316,"code":125666,"language":119318,"meta":71,"style":71},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[73,125668,125669],{"__ignoreMap":71},[76,125670,125671,125673,125675,125677,125680,125682,125684],{"class":78,"line":79},[76,125672,125623],{"class":86},[76,125674,71849],{"class":126},[76,125676,125628],{"class":119},[76,125678,125679],{"class":119}," --name=\u002Fdev\u002FttyUSB1",[76,125681,27159],{"class":82},[76,125683,32284],{"class":86},[76,125685,125638],{"class":126},[19,125687,125688,125689,125692,125693,125696,125697,125700],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[73,125690,125691],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[73,125694,125695],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2416,125698,125699],{},"唯一性标识","”。",[19,125702,125352],{},[19,125704,125355,125705,125707],{},[73,125706,125358],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[66,125709,125710],{"className":119316,"code":125362,"language":119318,"meta":71,"style":71},[73,125711,125712],{"__ignoreMap":71},[76,125713,125714,125716,125718],{"class":78,"line":79},[76,125715,26626],{"class":86},[76,125717,120603],{"class":126},[76,125719,125373],{"class":126},[66,125721,125723],{"className":119316,"code":125722,"language":119318,"meta":71,"style":71},"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",[73,125724,125725,125754],{"__ignoreMap":71},[76,125726,125727,125729,125731,125733,125736,125738,125741,125744,125746,125749,125751],{"class":78,"line":79},[76,125728,125386],{"class":90},[76,125730,370],{"class":82},[76,125732,125391],{"class":126},[76,125734,125735],{"class":90}," KERNELS",[76,125737,370],{"class":82},[76,125739,125740],{"class":126},"=\"1-1.3:1.0\",",[76,125742,125743],{"class":86}," MODE:",[76,125745,370],{"class":126},[76,125747,125748],{"class":86},"\"0777\"",[76,125750,2642],{"class":86},[76,125752,125753],{"class":126}," SYMLINK+=\"rplidar_front\"\n",[76,125755,125756,125758,125760,125762,125764,125766,125769,125771,125773,125775,125777],{"class":78,"line":94},[76,125757,125386],{"class":90},[76,125759,370],{"class":82},[76,125761,125391],{"class":126},[76,125763,125735],{"class":90},[76,125765,370],{"class":82},[76,125767,125768],{"class":126},"=\"1-1.4:1.0\",",[76,125770,125743],{"class":86},[76,125772,370],{"class":126},[76,125774,125748],{"class":86},[76,125776,2642],{"class":86},[76,125778,125779],{"class":126}," SYMLINK+=\"rplidar_back\"\n",[19,125781,125471],{},[19,125783,125474],{},[66,125785,125786],{"className":119316,"code":125477,"language":119318,"meta":71,"style":71},[73,125787,125788,125792,125802,125812,125816,125820,125830],{"__ignoreMap":71},[76,125789,125790],{"class":78,"line":79},[76,125791,125484],{"class":540},[76,125793,125794,125796,125798,125800],{"class":78,"line":94},[76,125795,26626],{"class":86},[76,125797,122068],{"class":126},[76,125799,125493],{"class":126},[76,125801,125496],{"class":126},[76,125803,125804,125806,125808,125810],{"class":78,"line":133},[76,125805,26626],{"class":86},[76,125807,122068],{"class":126},[76,125809,125493],{"class":126},[76,125811,125507],{"class":126},[76,125813,125814],{"class":78,"line":145},[76,125815,149],{"emptyLinePlaceholder":148},[76,125817,125818],{"class":78,"line":152},[76,125819,125516],{"class":540},[76,125821,125822,125824,125826,125828],{"class":78,"line":157},[76,125823,26626],{"class":86},[76,125825,125523],{"class":126},[76,125827,125526],{"class":126},[76,125829,125529],{"class":119},[76,125831,125832,125834,125836],{"class":78,"line":246},[76,125833,26626],{"class":86},[76,125835,125523],{"class":126},[76,125837,125538],{"class":126},[19,125839,125541],{},[19,125841,125544],{},[19,125843,125547,125844,125847],{},[73,125845,125846],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125849,125850],{},[3583,125851],{"alt":71,"src":125852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125854,125855],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125857,125858,125860],{},[2416,125859,119984],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[889,125862,125864],{"id":125863},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125866,125867],{},"（1）.查看所连接的主机USB接口的信息",[66,125869,125871],{"className":119316,"code":125870,"language":119318,"meta":71,"style":71},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[73,125872,125873,125903],{"__ignoreMap":71},[76,125874,125875,125877,125879,125882,125884,125886,125888,125890,125893,125896,125898,125901],{"class":78,"line":79},[76,125876,125623],{"class":86},[76,125878,71849],{"class":126},[76,125880,125881],{"class":119}," -a",[76,125883,31264],{"class":119},[76,125885,30470],{"class":90},[76,125887,125623],{"class":86},[76,125889,71849],{"class":126},[76,125891,125892],{"class":119}," -q",[76,125894,125895],{"class":126}," path",[76,125897,27165],{"class":119},[76,125899,125900],{"class":126}," \u002Fdev\u002FttyACM0",[76,125902,130],{"class":90},[76,125904,125905,125907,125909,125911,125913,125915,125917,125919,125921,125923,125925,125928],{"class":78,"line":94},[76,125906,125623],{"class":86},[76,125908,71849],{"class":126},[76,125910,125881],{"class":119},[76,125912,31264],{"class":119},[76,125914,30470],{"class":90},[76,125916,125623],{"class":86},[76,125918,71849],{"class":126},[76,125920,125892],{"class":119},[76,125922,125895],{"class":126},[76,125924,27165],{"class":119},[76,125926,125927],{"class":126}," \u002Fdev\u002FttyUSB0",[76,125929,130],{"class":90},[19,125931,125932],{},[3583,125933],{"alt":71,"src":125934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125936,125937],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125939,125352],{},[19,125941,125355,125942,125707],{},[73,125943,125358],{},[66,125945,125946],{"className":119316,"code":125362,"language":119318,"meta":71,"style":71},[73,125947,125948],{"__ignoreMap":71},[76,125949,125950,125952,125954],{"class":78,"line":79},[76,125951,26626],{"class":86},[76,125953,120603],{"class":126},[76,125955,125373],{"class":126},[66,125957,125959],{"className":119316,"code":125958,"language":119318,"meta":71,"style":71},"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",[73,125960,125961,125989,126015],{"__ignoreMap":71},[76,125962,125963,125965,125967,125970,125972,125974,125976,125978,125981,125984,125986],{"class":78,"line":79},[76,125964,125386],{"class":90},[76,125966,370],{"class":82},[76,125968,125969],{"class":126},"=\"ttyACM*\",",[76,125971,125394],{"class":86},[76,125973,125397],{"class":126},[76,125975,125426],{"class":86},[76,125977,2642],{"class":86},[76,125979,125980],{"class":126}," ATTRS{idProduct}==\"55d4\",",[76,125982,125983],{"class":126}," ATTRS{serial}==\"0001\",",[76,125985,125408],{"class":126},[76,125987,125988],{"class":126}," SYMLINK+=\"ttyACM_MCU\"\n",[76,125990,125991,125993,125995,125997,125999,126001,126003,126005,126007,126010,126012],{"class":78,"line":94},[76,125992,125386],{"class":90},[76,125994,370],{"class":82},[76,125996,125969],{"class":126},[76,125998,125394],{"class":86},[76,126000,125397],{"class":126},[76,126002,125426],{"class":86},[76,126004,2642],{"class":86},[76,126006,125980],{"class":126},[76,126008,126009],{"class":126}," ATTRS{serial}==\"0002\",",[76,126011,125408],{"class":126},[76,126013,126014],{"class":126}," SYMLINK+=\"ttyACM_Lidar\"\n",[76,126016,126017,126019,126021,126023,126025,126027,126029,126031,126033,126035],{"class":78,"line":133},[76,126018,125386],{"class":90},[76,126020,370],{"class":82},[76,126022,125391],{"class":126},[76,126024,125394],{"class":86},[76,126026,125397],{"class":126},[76,126028,125426],{"class":86},[76,126030,2642],{"class":86},[76,126032,125431],{"class":126},[76,126034,125408],{"class":126},[76,126036,126037],{"class":126}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126039,125471],{},[19,126041,125474],{},[66,126043,126044],{"className":119316,"code":125477,"language":119318,"meta":71,"style":71},[73,126045,126046,126050,126060,126070,126074,126078,126088],{"__ignoreMap":71},[76,126047,126048],{"class":78,"line":79},[76,126049,125484],{"class":540},[76,126051,126052,126054,126056,126058],{"class":78,"line":94},[76,126053,26626],{"class":86},[76,126055,122068],{"class":126},[76,126057,125493],{"class":126},[76,126059,125496],{"class":126},[76,126061,126062,126064,126066,126068],{"class":78,"line":133},[76,126063,26626],{"class":86},[76,126065,122068],{"class":126},[76,126067,125493],{"class":126},[76,126069,125507],{"class":126},[76,126071,126072],{"class":78,"line":145},[76,126073,149],{"emptyLinePlaceholder":148},[76,126075,126076],{"class":78,"line":152},[76,126077,125516],{"class":540},[76,126079,126080,126082,126084,126086],{"class":78,"line":157},[76,126081,26626],{"class":86},[76,126083,125523],{"class":126},[76,126085,125526],{"class":126},[76,126087,125529],{"class":119},[76,126089,126090,126092,126094],{"class":78,"line":246},[76,126091,26626],{"class":86},[76,126093,125523],{"class":126},[76,126095,125538],{"class":126},[19,126097,126098,126099],{},"再重新插拔设备即可，或者 ",[2416,126100,126101],{},"直接重启系统。",[19,126103,125544],{},[19,126105,125547,126106,125847],{},[73,126107,125846],{},[19,126109,126110],{},[3583,126111],{"alt":71,"src":126112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126114,125855],{},[19,126116,126117,126119],{},[2416,126118,119984],{}," 一些设备可能没有串口号等。",[889,126121,126123],{"id":126122},"_744-其他注意事项","7.4.4 其他注意事项",[19,126125,126126,126127,126129,126130,126133,126134,20459,126137,126140,126141,126143],{},"并非所有的USB设备端口号都是",[73,126128,125581],{},"的格式，比如Arduino的端口号可能是",[73,126131,126132],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[73,126135,126136],{},"videon",[73,126138,126139],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[73,126142,126136],{},"端口，绑定时需要关联的也是该接口。",[19,126145,126146,126147,126150,126151,126154,126155,126157,126158,126161,126162,126165,126166,126169,126170,126169,126173,126169,126176,490],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[73,126148,126149],{},"KERNEL==\"ttyUSB*\"","修改为",[73,126152,126153],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[73,126156,126149],{},"修改为类似于",[73,126159,126160],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[73,126163,126164],{},"video[0,2,4,6]","表示可以绑定的端口为",[73,126167,126168],{},"video0","或",[73,126171,126172],{},"video2",[73,126174,126175],{},"video4",[73,126177,126178],{},"video6",[14,126180,126182],{"id":126181},"_75-挂载内网网页","7.5 挂载内网网页",[19,126184,126185],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126187,126188],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126190,126191],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126193,126194,126195],{},"Termux 下载地址（F-Droid）：",[2503,126196,126197],{"href":126197,"rel":126198},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25914],[19,126200,126201],{},"首先打开app后，先更新软件缓存：",[66,126203,126205],{"className":119316,"code":126204,"language":119318,"meta":71,"style":71},"pkg update\n",[73,126206,126207],{"__ignoreMap":71},[76,126208,126209,126212],{"class":78,"line":79},[76,126210,126211],{"class":86},"pkg",[76,126213,28291],{"class":126},[19,126215,126216],{},"然后换源",[66,126218,126220],{"className":119316,"code":126219,"language":119318,"meta":71,"style":71},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[73,126221,126222],{"__ignoreMap":71},[76,126223,126224,126226,126229],{"class":78,"line":79},[76,126225,125094],{"class":86},[76,126227,126228],{"class":90}," $PREFIX",[76,126230,126231],{"class":126},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126233,126234],{},"将该文件内容替换为下面：",[66,126236,126238],{"className":119316,"code":126237,"language":119318,"meta":71,"style":71},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[73,126239,126240],{"__ignoreMap":71},[76,126241,126242,126245,126248,126251],{"class":78,"line":79},[76,126243,126244],{"class":86},"deb",[76,126246,126247],{"class":126}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[76,126249,126250],{"class":126}," stable",[76,126252,126253],{"class":126}," main\n",[3261,126255,126256,126283],{},[29,126257,126258,126259,126261,126262],{},"如果你使用的是",[73,126260,125094],{},"编辑器：",[3261,126263,126264,126271,126277],{},[29,126265,126266,126267,126270],{},"按 ",[73,126268,126269],{},"Ctrl+O"," 保存文件。",[29,126272,126266,126273,126276],{},[73,126274,126275],{},"Enter"," 确认文件名。",[29,126278,126266,126279,126282],{},[73,126280,126281],{},"Ctrl+X"," 退出编辑器。",[29,126284,126258,126285,126261,126288],{},[73,126286,126287],{},"vim",[3261,126289,126290,126296],{},[29,126291,126266,126292,126295],{},[73,126293,126294],{},"Esc"," 退出编辑模式。",[29,126297,126298,126299,126301],{},"输入 ",[73,126300,121241],{}," 保存并退出。",[19,126303,126304],{},"接下来重新更新软件源：",[66,126306,126308],{"className":119316,"code":126307,"language":119318,"meta":71,"style":71},"pkg update && pkg upgrade\n",[73,126309,126310],{"__ignoreMap":71},[76,126311,126312,126314,126316,126318,126320],{"class":78,"line":79},[76,126313,126211],{"class":86},[76,126315,119367],{"class":126},[76,126317,28239],{"class":90},[76,126319,126211],{"class":86},[76,126321,119353],{"class":126},[19,126323,126324],{},"安装python：",[66,126326,126328],{"className":119316,"code":126327,"language":119318,"meta":71,"style":71},"pkg install python\n",[73,126329,126330],{"__ignoreMap":71},[76,126331,126332,126334,126336],{"class":78,"line":79},[76,126333,126211],{"class":86},[76,126335,25883],{"class":126},[76,126337,126338],{"class":126}," python\n",[19,126340,126341,28522],{},[2416,126342,126343],{},"通过Termux访问设备存储",[19,126345,126346],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[66,126348,126350],{"className":119316,"code":126349,"language":119318,"meta":71,"style":71},"termux-setup-storage\n",[73,126351,126352],{"__ignoreMap":71},[76,126353,126354],{"class":78,"line":79},[76,126355,126349],{"class":86},[26,126357,126358],{},[29,126359,126360,28522,126363],{},[2416,126361,126362],{},"进入HTML文件所在的目录",[26,126364,126365],{},[29,126366,126367,126368,126370],{},"使用",[73,126369,103298],{},"命令进入HTML文件所在的目录：",[66,126372,126374],{"className":119316,"code":126373,"language":119318,"meta":71,"style":71},"cd ~\u002Fyour_html_folder\n",[73,126375,126376],{"__ignoreMap":71},[76,126377,126378,126380],{"class":78,"line":79},[76,126379,103298],{"class":119},[76,126381,126382],{"class":126}," ~\u002Fyour_html_folder\n",[26,126384,126385],{"start":94},[29,126386,126387,28522,126390,126395,126412],{},[2416,126388,126389],{},"启动Python HTTP服务器",[26,126391,126392],{},[29,126393,126394],{},"运行以下命令启动一个简单的HTTP服务器：",[66,126396,126398],{"className":119316,"code":126397,"language":119318,"meta":71,"style":71},"python -m http.server 8000\n",[73,126399,126400],{"__ignoreMap":71},[76,126401,126402,126404,126406,126409],{"class":78,"line":79},[76,126403,70],{"class":86},[76,126405,102904],{"class":119},[76,126407,126408],{"class":126}," http.server",[76,126410,126411],{"class":119}," 8000\n",[26,126413,126414],{"start":133},[29,126415,126416,126417,126420],{},"这会在端口",[73,126418,126419],{},"8000","上启动一个Web服务器。",[3261,126422,126423],{},[29,126424,126425],{},"启动服务器后，Termux会显示日志信息，例如：",[66,126427,126429],{"className":122836,"code":126428,"language":122838,"meta":122839,"style":71},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[73,126430,126431],{"__ignoreMap":71},[76,126432,126433],{"class":78,"line":79},[76,126434,126428],{},[3261,126436,126437],{},[29,126438,126439],{},"这表示服务器已成功启动。",[19,126441,126442],{},[2416,126443,126444],{},"在浏览器中访问HTML文件",[26,126446,126447],{},[29,126448,126449,28522,126452,126457],{},[2416,126450,126451],{},"在同一设备上访问",[26,126453,126454],{},[29,126455,126456],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[66,126458,126461],{"className":126459,"code":126460,"language":73691,"meta":71,"style":71},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[73,126462,126463],{"__ignoreMap":71},[76,126464,126465,126468],{"class":78,"line":79},[76,126466,126467],{"class":90},"http:",[76,126469,126470],{"class":540},"\u002F\u002Flocalhost:8000\n",[3261,126472,126473],{},[29,126474,126475,126476,126479],{},"如果HTML文件中有",[73,126477,126478],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126481,126483],{"id":126482},"_76-linux重点知识","7.6 Linux重点知识",[889,126485,126487],{"id":126486},"_761-关于点的说明","7.6.1 关于点的说明",[19,126489,126490],{},[3583,126491],{"alt":71,"src":126492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126494,126495],{},"一点本目录，两点上目录",[889,126497,126499],{"id":126498},"_762-目录","7.6.2 目录",[24047,126501,126503],{"id":126502},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126505,126506],{},[2416,126507,126508],{},"\u002Fboot:",[19,126510,126511],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126513,126514],{},[2416,126515,126516],{},"\u002Fetc:",[19,126518,126519],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126521,126522],{},[2416,126523,126524],{},"\u002Flib：",[19,126526,126527],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126529,126530],{},[2416,126531,126532],{},"\u002Fsys:",[19,126534,126535],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24047,126537,126539],{"id":126538},"_7622-指令集合","7.6.2.2 指令集合",[19,126541,126542],{},[2416,126543,126544],{},"\u002Fbin:",[19,126546,126547],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126549,126550],{},[2416,126551,126552],{},"\u002Fsbin:",[19,126554,126555],{},"只有系统管理员才能使用的程序和指令",[24047,126557,126559],{"id":126558},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126561,126562],{},[2416,126563,126564],{},"\u002Fdev:",[19,126566,126567],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126569,126570],{},[2416,126571,126572],{},"\u002Fmedia:",[19,126574,126575],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126577,126578],{},[2416,126579,126580],{},"\u002Fmnt:",[19,126582,126583],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24047,126585,126587],{"id":126586},"_7624-临时文件","7.6.2.4 临时文件",[19,126589,126590],{},[2416,126591,126592],{},"\u002Frun:",[19,126594,126595],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126597,126598],{},[2416,126599,126600],{},"\u002Flost+found:",[19,126602,126603],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126605,126606],{},[2416,126607,126608],{},"\u002Ftmp:",[19,126610,126611],{},"这个目录是用来存放一些临时文件的",[24047,126613,126615],{"id":126614},"_7625-账户","7.6.2.5 账户",[19,126617,126618],{},[2416,126619,126620],{},"\u002Froot：",[19,126622,126623],{},"系统管理员的用户主目录",[19,126625,126626,28522],{},[2416,126627,126628],{},"\u002Fhome",[19,126630,126631],{},"用户的主目录，以用户的账号命名的",[19,126633,126634,28522],{},[2416,126635,126636],{},"\u002Fusr",[19,126638,126639],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126641,126642],{},[2416,126643,126644],{},"\u002Fusr\u002Fbin：",[19,126646,126647],{},"系统用户使用的应用程序与指令",[19,126649,126650],{},[2416,126651,126652],{},"\u002Fusr\u002Fsbin：",[19,126654,126655],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126657,126658],{},[2416,126659,126660],{},"\u002Fusr\u002Fsrc：",[19,126662,126663],{},"内核源代码默认的放置目录",[24047,126665,126667],{"id":126666},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126669,126670],{},[2416,126671,126672],{},"\u002Fvar：",[19,126674,126675],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126677,126678],{},[2416,126679,126680],{},"\u002Fproc:",[19,126682,126683,126684,126687],{},"管理 ",[2416,126685,126686],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24047,126689,126691],{"id":126690},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126693,126694],{},[2416,126695,126696],{},"\u002Fopt:",[19,126698,126699],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126701,126702],{},[2416,126703,126704],{},"\u002Fsrv:",[19,126706,126707],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[889,126709,126711],{"id":126710},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126713,126714],{},[3583,126715],{"alt":71,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126718,126719],{},"windows-->linux:",[19,126721,126722],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126724,126725],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126727,126728],{},"linux传输文件到windows",[19,126730,126731],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[889,126733,126735],{"id":126734},"_764-易忘知识","7.6.4 易忘知识",[19,126737,126738],{},"操作系统内核查看",[66,126740,126741],{"className":119316,"code":123310,"language":119318,"meta":71,"style":71},[73,126742,126743],{"__ignoreMap":71},[76,126744,126745,126747],{"class":78,"line":79},[76,126746,72232],{"class":86},[76,126748,123319],{"class":119},[19,126750,126751],{},[3583,126752],{"alt":71,"src":126753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126755,126756],{},[3583,126757],{"alt":71,"src":126758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[66,126760,126762],{"className":119316,"code":126761,"language":119318,"meta":71,"style":71},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[73,126763,126764,126776],{"__ignoreMap":71},[76,126765,126766,126768,126771,126774],{"class":78,"line":79},[76,126767,123527],{"class":86},[76,126769,126770],{"class":126}," mvtest",[76,126772,126773],{"class":126}," mvtest2",[76,126775,4762],{"class":90},[76,126777,126778],{"class":78,"line":94},[76,126779,126780],{"class":86},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126782,126783],{},[3583,126784],{"alt":71,"src":126785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126787,126788],{},[3583,126789],{"alt":71,"src":126790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126792,126793,126794,126797],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[73,126795,126796],{},"du -a"," 可以快速查看磁盘使用细节。",[889,126799,126801],{"id":126800},"_765-vim","7.6.5 Vim",[19,126803,126804],{},[3583,126805],{"alt":71,"src":126806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126808,126809],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126811,126812],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126814,126815],{},[2416,126816,126817],{},"1.命令模式：",[19,126819,126820],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126822,126823],{},"x 删除当前光标所在处的字符",[19,126825,126826],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126828,126829],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126831,126832],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126834,126835],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126837,126838],{},"dd 剪切当前行",[19,126840,126841],{},"yy 复制当前行",[19,126843,126844],{},"p 粘贴剪贴板内容到光标下方",[19,126846,126847],{},"P 粘贴剪贴板内容到光标上方",[19,126849,126850],{},"u 撤销上一次操作",[19,126852,126853],{},"ctrl+r 重做上一次操作",[19,126855,126856,126858],{},[3053,126857],{}," 保存文件",[19,126860,126861,126863],{},[2905,126862],{}," 退出Vim编辑器",[19,126865,126866,126868],{},[2905,126867],{},"! 强制退出Vim编辑器，不保存修改",[19,126870,126871],{},[2416,126872,126873],{},"2.输入模式：",[19,126875,126876],{},[3583,126877],{"alt":71,"src":126878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126880,126881],{},[2416,126882,126883],{},"3.底线命令模式：",[19,126885,126886],{},[3583,126887],{"alt":71,"src":126888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126890,126891],{},"按下esc可以退出底线命令模式",[889,126893,126895],{"id":126894},"_766-apt","7.6.6 apt",[19,126897,126898],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[889,126900,126902],{"id":126901},"_767-home与root的区别","7.6.7 home与root的区别",[19,126904,126905],{},[3583,126906],{"alt":71,"src":126907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126909,126910],{},[3583,126911],{"alt":71,"src":126912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126914,126915],{},[3583,126916],{"alt":71,"src":126917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126919,126920],{},[3583,126921],{"alt":71,"src":126922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[889,126924,126926],{"id":126925},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126928,126929],{},[2503,126930,126931],{"href":126931,"rel":126932},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25914],[26,126934,126935,126938],{},[29,126936,126937],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126939,126940],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126942,126943],{},[3583,126944],{"alt":71,"src":126945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126947,126948],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126950,126951],{},[3583,126952],{"alt":71,"src":126953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[66,126955,126957],{"className":122836,"code":126956,"language":122838,"meta":122839,"style":71},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[73,126958,126959,126964],{"__ignoreMap":71},[76,126960,126961],{"class":78,"line":79},[76,126962,126963],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[76,126965,126966],{"class":78,"line":94},[76,126967,126968],{},".\u002Fpycharm.sh\n",[19,126970,126971],{},"3️⃣创建.desktop文件",[19,126973,126974],{},[2416,126975,126976],{},"原理：",[3261,126978,126979,126989],{},[29,126980,126981,126982,126988],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2416,126983,126984,126987],{},[73,126985,126986],{},".desktop"," 文件"," 来识别应用。",[29,126990,126991,126993,126994],{},[73,126992,126986],{}," 文件相当于一个“应用注册表”，告诉系统：",[3261,126995,126996,126999,127002,127005,127008],{},[29,126997,126998],{},"应用名字（Name）",[29,127000,127001],{},"图标（Icon）",[29,127003,127004],{},"执行命令（Exec）",[29,127006,127007],{},"分类（Categories）",[29,127009,127010],{},"是否需要终端（Terminal）",[66,127012,127014],{"className":122836,"code":127013,"language":122838,"meta":122839,"style":71},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[73,127015,127016,127021],{"__ignoreMap":71},[76,127017,127018],{"class":78,"line":79},[76,127019,127020],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[76,127022,127023],{"class":78,"line":94},[76,127024,127025],{},"nano pycharm.desktop\n",[19,127027,127028],{},"nano是一个命令行下的编辑器，也可以使用vim",[66,127030,127032],{"className":122836,"code":127031,"language":122838,"meta":122839,"style":71},"[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",[73,127033,127034,127039,127044,127049,127054,127059,127064,127069,127074,127079],{"__ignoreMap":71},[76,127035,127036],{"class":78,"line":79},[76,127037,127038],{},"[Desktop Entry]\n",[76,127040,127041],{"class":78,"line":94},[76,127042,127043],{},"Version=1.0\n",[76,127045,127046],{"class":78,"line":133},[76,127047,127048],{},"Type=Application\n",[76,127050,127051],{"class":78,"line":145},[76,127052,127053],{},"Name=PyCharm\n",[76,127055,127056],{"class":78,"line":152},[76,127057,127058],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[76,127060,127061],{"class":78,"line":157},[76,127062,127063],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[76,127065,127066],{"class":78,"line":246},[76,127067,127068],{},"Comment=JetBrains PyCharm IDE\n",[76,127070,127071],{"class":78,"line":251},[76,127072,127073],{},"Categories=Development;IDE;\n",[76,127075,127076],{"class":78,"line":257},[76,127077,127078],{},"Terminal=false\n",[76,127080,127081],{"class":78,"line":641},[76,127082,127083],{},"StartupWMClass=jetbrains-pycharm\n",[3261,127085,127086,127092,127098,127104],{},[29,127087,127088,127091],{},[73,127089,127090],{},"Exec"," → 点击图标时执行的命令",[29,127093,127094,127097],{},[73,127095,127096],{},"Icon"," → 显示在菜单和桌面上的图标",[29,127099,127100,127103],{},[73,127101,127102],{},"Terminal=false"," → 不打开终端",[29,127105,127106,127109],{},[73,127107,127108],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127111,127112,127113],"blockquote",{},[19,127114,127115,127116,127118,127119],{},"可以理解成 ",[73,127117,126986],{}," 文件是 Linux 的 ",[2416,127120,127121],{},"快捷方式配置文件",[19,127123,127124],{},"4️⃣设置可执行权限",[66,127126,127128],{"className":122836,"code":127127,"language":122838,"meta":122839,"style":71},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[73,127129,127130],{"__ignoreMap":71},[76,127131,127132],{"class":78,"line":79},[76,127133,127127],{},[19,127135,127136],{},"5️⃣桌面图标启动的话如下：",[66,127138,127140],{"className":122836,"code":127139,"language":122838,"meta":122839,"style":71},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[73,127141,127142,127147],{"__ignoreMap":71},[76,127143,127144],{"class":78,"line":79},[76,127145,127146],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[76,127148,127149],{"class":78,"line":94},[76,127150,127151],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,127153,127154],{"start":133},[29,127155,127156],{},"下载Appimage文件实现软件的安装",[19,127158,127159],{},"1️⃣先下载appimage",[19,127161,127162],{},[2503,127163,127164],{"href":127164,"rel":127165},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25914],[19,127167,127168],{},[3583,127169],{"alt":71,"src":127170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127172,127173],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127175,127176],{},[3583,127177],{"alt":71,"src":127178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127180,127181],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127183,127184],{},[3583,127185],{"alt":71,"src":127186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127188,127189],{},[3583,127190],{"alt":71,"src":127191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127193,127194,127195,127198],{},"3️⃣给他们放在",[73,127196,127197],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127200,127201],{},"4️⃣给软件执行权限",[66,127203,127205],{"className":122836,"code":127204,"language":122838,"meta":122839,"style":71},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[73,127206,127207,127212],{"__ignoreMap":71},[76,127208,127209],{"class":78,"line":79},[76,127210,127211],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[76,127213,127214],{"class":78,"line":94},[76,127215,127216],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127218,127219],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[66,127221,127223],{"className":119316,"code":127222,"language":119318,"meta":71,"style":71},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[73,127224,127225,127232,127239,127245],{"__ignoreMap":71},[76,127226,127227,127229],{"class":78,"line":79},[76,127228,103298],{"class":119},[76,127230,127231],{"class":126}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[76,127233,127234,127236],{"class":78,"line":94},[76,127235,103305],{"class":86},[76,127237,127238],{"class":126}," .\u002Fqqmusic.desktop\n",[76,127240,127241,127243],{"class":78,"line":133},[76,127242,126287],{"class":86},[76,127244,127238],{"class":126},[76,127246,127247,127249,127251,127253],{"class":78,"line":145},[76,127248,26626],{"class":86},[76,127250,26629],{"class":126},[76,127252,125153],{"class":126},[76,127254,127238],{"class":126},[19,127256,127257,127259],{},[73,127258,103305],{},"：一个 Linux 命令，主要功能是：",[3261,127261,127262,127265],{},[29,127263,127264],{},"如果文件不存在，就创建一个新的空文件",[29,127266,127267],{},"如果文件已存在，就更新该文件的最后修改时间",[66,127269,127271],{"className":122836,"code":127270,"language":122838,"meta":122839,"style":71},"[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",[73,127272,127273,127277,127282,127287,127292,127296,127301],{"__ignoreMap":71},[76,127274,127275],{"class":78,"line":79},[76,127276,127038],{},[76,127278,127279],{"class":78,"line":94},[76,127280,127281],{},"Name=QQ音乐\n",[76,127283,127284],{"class":78,"line":133},[76,127285,127286],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[76,127288,127289],{"class":78,"line":145},[76,127290,127291],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[76,127293,127294],{"class":78,"line":152},[76,127295,127048],{},[76,127297,127298],{"class":78,"line":157},[76,127299,127300],{},"Categories=Audio;Music;Player;\n",[76,127302,127303],{"class":78,"line":246},[76,127304,127305],{},"Comment=QQ Music Client for Linux\n",[19,127307,127308],{},"将文件复制进去",[19,127310,127311],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127313,127314],{},[3583,127315],{"alt":71,"src":127316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127318,127319],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127321,127322],{},[3583,127323],{"alt":71,"src":127324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127326,127327,127328,127331,127332,127335],{},"如果你用的不是KDE，那么也可以直接修改",[73,127329,127330],{},"qqmuic.desktop","：在exec的末尾加上",[73,127333,127334],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[66,127337,127339],{"className":122836,"code":127338,"language":122838,"meta":122839,"style":71},"[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",[73,127340,127341,127345,127349,127354,127358,127362,127366],{"__ignoreMap":71},[76,127342,127343],{"class":78,"line":79},[76,127344,127038],{},[76,127346,127347],{"class":78,"line":94},[76,127348,127281],{},[76,127350,127351],{"class":78,"line":133},[76,127352,127353],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[76,127355,127356],{"class":78,"line":145},[76,127357,127291],{},[76,127359,127360],{"class":78,"line":152},[76,127361,127048],{},[76,127363,127364],{"class":78,"line":157},[76,127365,127300],{},[76,127367,127368],{"class":78,"line":246},[76,127369,127305],{},[19,127371,127372],{},[3583,127373],{"alt":71,"src":127374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127376,127377],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[66,127379,127381],{"className":122836,"code":127380,"language":122838,"meta":122839,"style":71},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[73,127382,127383],{"__ignoreMap":71},[76,127384,127385],{"class":78,"line":79},[76,127386,127380],{},[26,127388,127389],{"start":145},[29,127390,127391],{},"去Flathub上安装软件",[19,127393,127394],{},[2503,127395,127396],{"href":127396,"rel":127397},"https:\u002F\u002Fflathub.org\u002F",[25914],[19,127399,127400],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127402,127403],{},[3583,127404],{"alt":71,"src":127405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[66,127407,127409],{"className":122836,"code":127408,"language":122838,"meta":122839,"style":71},"flatpak install flathub com.obsproject.Studio\n",[73,127410,127411],{"__ignoreMap":71},[76,127412,127413],{"class":78,"line":79},[76,127414,127408],{},[19,127416,127417],{},[3583,127418],{"alt":71,"src":127419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127421,127422],{},"2️⃣运行软件",[19,127424,127425],{},"a.官方方式：",[19,127427,127428],{},[3583,127429],{"alt":71,"src":127430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[66,127432,127433],{"className":122836,"code":127408,"language":122838,"meta":122839,"style":71},[73,127434,127435],{"__ignoreMap":71},[76,127436,127437],{"class":78,"line":79},[76,127438,127408],{},[19,127440,127441],{},"b.当普通软件运行：",[19,127443,127444],{},[3583,127445],{"alt":71,"src":127446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127448,127449],{},[3583,127450],{"alt":71,"src":127451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2178,127453,127454],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":71,"searchDepth":94,"depth":94,"links":127456},[127457,127458,127463,127464,127470,127471],{"id":124189,"depth":94,"text":124190},{"id":124531,"depth":94,"text":124532,"children":127459},[127460,127461,127462],{"id":124535,"depth":133,"text":124536},{"id":124602,"depth":133,"text":124603},{"id":124863,"depth":133,"text":124864},{"id":125016,"depth":94,"text":125017},{"id":125254,"depth":94,"text":125255,"children":127465},[127466,127467,127468,127469],{"id":125306,"depth":133,"text":125307},{"id":125592,"depth":133,"text":125593},{"id":125863,"depth":133,"text":125864},{"id":126122,"depth":133,"text":126123},{"id":126181,"depth":94,"text":126182},{"id":126482,"depth":94,"text":126483,"children":127472},[127473,127474,127475,127476,127477,127478,127479,127480],{"id":126486,"depth":133,"text":126487},{"id":126498,"depth":133,"text":126499},{"id":126710,"depth":133,"text":126711},{"id":126734,"depth":133,"text":126735},{"id":126800,"depth":133,"text":126801},{"id":126894,"depth":133,"text":126895},{"id":126901,"depth":133,"text":126902},{"id":126925,"depth":133,"text":126926},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124181,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127487,"title":127488,"body":127489,"description":2201,"extension":2202,"meta":127493,"navigation":148,"path":127494,"seo":127495,"stem":127496,"__hash__":127497},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127490,"toc":127491},[],{"title":71,"searchDepth":94,"depth":94,"links":127492},[],{"category":32311},"\u002Fwiki\u002F2025-01-27-linux",{"title":127488,"description":2201},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127499,"title":127500,"body":127501,"description":127505,"extension":2202,"meta":127896,"navigation":148,"path":127897,"seo":127898,"stem":127899,"__hash__":127900},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127502,"toc":127894},[127503,127506,127510,127527,127530,127583,127587,127589,127629,127638,127642,127645,127886,127891],[19,127504,127505],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127507,127509],{"id":127508},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,127511,127512,127515,127518,127521,127524],{},[29,127513,127514],{},"ubuntu环境换源",[29,127516,127517],{},"安装cuda",[29,127519,127520],{},"安装miniconda",[29,127522,127523],{},"安装pytorch",[29,127525,127526],{},"安装genesis",[19,127528,127529],{},"参考链接：",[66,127531,127533],{"className":25871,"code":127532,"language":25873,"meta":71,"style":71},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[73,127534,127535],{"__ignoreMap":71},[76,127536,127537,127540,127543,127546,127548,127551,127554,127556,127559,127562,127564,127567,127570,127572,127575,127578,127580],{"class":78,"line":79},[76,127538,127539],{"class":86},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[76,127541,127542],{"class":126},"=blogdetail",[76,127544,127545],{"class":90},"&sharetype",[76,127547,370],{"class":82},[76,127549,127550],{"class":126},"blogdetail",[76,127552,127553],{"class":90},"&sharerId",[76,127555,370],{"class":82},[76,127557,127558],{"class":126},"144728092",[76,127560,127561],{"class":90},"&sharerefer",[76,127563,370],{"class":82},[76,127565,127566],{"class":126},"PC",[76,127568,127569],{"class":90},"&sharesource",[76,127571,370],{"class":82},[76,127573,127574],{"class":126},"qq_69379513",[76,127576,127577],{"class":90},"&sharefrom",[76,127579,370],{"class":82},[76,127581,127582],{"class":126},"from_link\n",[10,127584,127586],{"id":127585},"_2genesis-报错issue","2.Genesis 报错issue",[19,127588,127529],{},[66,127590,127591],{"className":25871,"code":127532,"language":25873,"meta":71,"style":71},[73,127592,127593],{"__ignoreMap":71},[76,127594,127595,127597,127599,127601,127603,127605,127607,127609,127611,127613,127615,127617,127619,127621,127623,127625,127627],{"class":78,"line":79},[76,127596,127539],{"class":86},[76,127598,127542],{"class":126},[76,127600,127545],{"class":90},[76,127602,370],{"class":82},[76,127604,127550],{"class":126},[76,127606,127553],{"class":90},[76,127608,370],{"class":82},[76,127610,127558],{"class":126},[76,127612,127561],{"class":90},[76,127614,370],{"class":82},[76,127616,127566],{"class":126},[76,127618,127569],{"class":90},[76,127620,370],{"class":82},[76,127622,127574],{"class":126},[76,127624,127577],{"class":90},[76,127626,370],{"class":82},[76,127628,127582],{"class":126},[66,127630,127632],{"className":25871,"code":127631,"language":25873,"meta":71,"style":71},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[73,127633,127634],{"__ignoreMap":71},[76,127635,127636],{"class":78,"line":79},[76,127637,127631],{"class":86},[10,127639,127641],{"id":127640},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127643,127644],{},"hello_robot.py",[66,127646,127648],{"className":68,"code":127647,"language":70,"meta":71,"style":71},"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",[73,127649,127650,127656,127671,127675,127687,127699,127703,127716,127720,127739,127749,127759,127773,127777,127781,127786,127790,127800,127807,127821,127828,127838,127843,127847,127865,127870,127874,127881],{"__ignoreMap":71},[76,127651,127652,127654],{"class":78,"line":79},[76,127653,32438],{"class":82},[76,127655,47340],{"class":90},[76,127657,127658,127661,127664,127666,127668],{"class":78,"line":94},[76,127659,127660],{"class":90},"os.environ[",[76,127662,127663],{"class":126},"'PYOPENGL_PLATFORM'",[76,127665,6525],{"class":90},[76,127667,370],{"class":82},[76,127669,127670],{"class":126}," 'glx'\n",[76,127672,127673],{"class":78,"line":133},[76,127674,149],{"emptyLinePlaceholder":148},[76,127676,127677,127679,127682,127684],{"class":78,"line":145},[76,127678,32438],{"class":82},[76,127680,127681],{"class":90}," genesis ",[76,127683,33426],{"class":82},[76,127685,127686],{"class":90}," gs\n",[76,127688,127689,127691,127694,127696],{"class":78,"line":152},[76,127690,32781],{"class":82},[76,127692,127693],{"class":90}," pynput ",[76,127695,32438],{"class":82},[76,127697,127698],{"class":90}," keyboard\n",[76,127700,127701],{"class":78,"line":157},[76,127702,149],{"emptyLinePlaceholder":148},[76,127704,127705,127708,127711,127713],{"class":78,"line":246},[76,127706,127707],{"class":90},"gs.init(",[76,127709,127710],{"class":7296},"backend",[76,127712,370],{"class":82},[76,127714,127715],{"class":90},"gs.gpu)\n",[76,127717,127718],{"class":78,"line":251},[76,127719,149],{"emptyLinePlaceholder":148},[76,127721,127722,127725,127727,127730,127733,127735,127737],{"class":78,"line":257},[76,127723,127724],{"class":90},"scene ",[76,127726,370],{"class":82},[76,127728,127729],{"class":90}," gs.Scene(",[76,127731,127732],{"class":7296},"show_viewer",[76,127734,370],{"class":82},[76,127736,33519],{"class":119},[76,127738,130],{"class":90},[76,127740,127741,127744,127746],{"class":78,"line":641},[76,127742,127743],{"class":90},"plane ",[76,127745,370],{"class":82},[76,127747,127748],{"class":90}," scene.add_entity(gs.morphs.Plane())\n",[76,127750,127751,127754,127756],{"class":78,"line":646},[76,127752,127753],{"class":90},"franka ",[76,127755,370],{"class":82},[76,127757,127758],{"class":90}," scene.add_entity(\n",[76,127760,127761,127764,127766,127768,127771],{"class":78,"line":659},[76,127762,127763],{"class":90},"    gs.morphs.MJCF(",[76,127765,47389],{"class":7296},[76,127767,370],{"class":82},[76,127769,127770],{"class":126},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[76,127772,40085],{"class":90},[76,127774,127775],{"class":78,"line":1608},[76,127776,130],{"class":90},[76,127778,127779],{"class":78,"line":1632},[76,127780,149],{"emptyLinePlaceholder":148},[76,127782,127783],{"class":78,"line":1637},[76,127784,127785],{"class":90},"scene.build()\n",[76,127787,127788],{"class":78,"line":1642},[76,127789,149],{"emptyLinePlaceholder":148},[76,127791,127792,127794,127797],{"class":78,"line":1652},[76,127793,83],{"class":82},[76,127795,127796],{"class":86}," on_press",[76,127798,127799],{"class":90},"(key):\n",[76,127801,127802,127805],{"class":78,"line":1660},[76,127803,127804],{"class":82},"    try",[76,127806,590],{"class":90},[76,127808,127809,127811,127814,127816,127819],{"class":78,"line":1683},[76,127810,4592],{"class":82},[76,127812,127813],{"class":90}," key.char ",[76,127815,1250],{"class":82},[76,127817,127818],{"class":126}," 'q'",[76,127820,590],{"class":90},[76,127822,127823,127825],{"class":78,"line":1698},[76,127824,17782],{"class":82},[76,127826,127827],{"class":119}," False\n",[76,127829,127830,127833,127836],{"class":78,"line":1711},[76,127831,127832],{"class":82},"    except",[76,127834,127835],{"class":119}," AttributeError",[76,127837,590],{"class":90},[76,127839,127840],{"class":78,"line":1717},[76,127841,127842],{"class":82},"        pass\n",[76,127844,127845],{"class":78,"line":1728},[76,127846,149],{"emptyLinePlaceholder":148},[76,127848,127849,127852,127854,127857,127860,127862],{"class":78,"line":1740},[76,127850,127851],{"class":90},"listener ",[76,127853,370],{"class":82},[76,127855,127856],{"class":90}," keyboard.Listener(",[76,127858,127859],{"class":7296},"on_press",[76,127861,370],{"class":82},[76,127863,127864],{"class":90},"on_press)\n",[76,127866,127867],{"class":78,"line":1746},[76,127868,127869],{"class":90},"listener.start()\n",[76,127871,127872],{"class":78,"line":1751},[76,127873,149],{"emptyLinePlaceholder":148},[76,127875,127876,127878],{"class":78,"line":1756},[76,127877,1892],{"class":82},[76,127879,127880],{"class":90}," listener.running:\n",[76,127882,127883],{"class":78,"line":1766},[76,127884,127885],{"class":90},"    scene.step()\n",[19,127887,127888],{},[3583,127889],{"alt":71,"src":127890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2178,127892,127893],{},"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":71,"searchDepth":94,"depth":94,"links":127895},[],{"category":25427},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127500,"description":127505},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127902,"title":127903,"body":127904,"description":2201,"extension":2202,"meta":127919,"navigation":148,"path":127920,"seo":127921,"stem":127922,"__hash__":127923},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127905,"toc":127916},[127906,127909,127913],[10,127907,127903],{"id":127908},"_1-基础知识",[14,127910,127912],{"id":127911},"_11-js的组成","1.1 js的组成",[19,127914,127915],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":71,"searchDepth":94,"depth":94,"links":127917},[127918],{"id":127911,"depth":94,"text":127912},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127903,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127925,"title":127926,"body":127927,"description":2201,"extension":2202,"meta":128066,"navigation":148,"path":128067,"seo":128068,"stem":128069,"__hash__":128070},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127928,"toc":128054},[127929,127932,127936,127939,127943,127953,127957,127960,127963,127966,127970,127977,127983,127987,127993,128004,128008,128011,128015,128018,128022,128025,128029,128032,128036,128039,128042,128045,128048,128051],[10,127930,127926],{"id":127931},"_2-vscode必备内容",[14,127933,127935],{"id":127934},"_21-标签分类","2.1 标签分类",[19,127937,127938],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127940,127942],{"id":127941},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127944,127945,127946,127948,127949,127952],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[73,127947,2491],{}," 然后按 ",[73,127950,127951],{},"Tab","，快速自动生成基本结构。",[14,127954,127956],{"id":127955},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127958,127959],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127961,127962],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127964,127965],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127967,127969],{"id":127968},"_24-视图缩放","2.4 视图缩放",[19,127971,127972,127973,127976],{},"缩放视图 ",[73,127974,127975],{},"ctrl+"," 可实现代码增大。",[19,127978,127979,127982],{},[73,127980,127981],{},"ctrl-"," 可实现代码减小。",[14,127984,127986],{"id":127985},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127988,127989,127990,490],{},"VSCode 新建文件快捷键为 ",[73,127991,127992],{},"ctrl+N",[19,127994,127995,127996,127999,128000,128003],{},"保存快捷键为 ",[73,127997,127998],{},"ctrl+S","，将文本保存为 ",[73,128001,128002],{},".html"," 文件。",[14,128005,128007],{"id":128006},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128009,128010],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128012,128014],{"id":128013},"_27-vscode-icons","2.7 vscode-icons",[19,128016,128017],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128019,128021],{"id":128020},"_28-easy-less","2.8 Easy LESS",[19,128023,128024],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128026,128028],{"id":128027},"_29-会了吧插件","2.9 会了吧插件",[19,128030,128031],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128033,128035],{"id":128034},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128037,128038],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128040,128041],{},"②选定多个相同的单词:ctrl+D",[19,128043,128044],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128046,128047],{},"④全局替换某些单词:ctrl+h",[19,128049,128050],{},"⑤快速定位到某一行:ctrl+g",[19,128052,128053],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":71,"searchDepth":94,"depth":94,"links":128055},[128056,128057,128058,128059,128060,128061,128062,128063,128064,128065],{"id":127934,"depth":94,"text":127935},{"id":127941,"depth":94,"text":127942},{"id":127955,"depth":94,"text":127956},{"id":127968,"depth":94,"text":127969},{"id":127985,"depth":94,"text":127986},{"id":128006,"depth":94,"text":128007},{"id":128013,"depth":94,"text":128014},{"id":128020,"depth":94,"text":128021},{"id":128027,"depth":94,"text":128028},{"id":128034,"depth":94,"text":128035},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127926,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128072,"title":128073,"body":128074,"description":2201,"extension":2202,"meta":128233,"navigation":148,"path":128234,"seo":128235,"stem":128236,"__hash__":128237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128075,"toc":128225},[128076,128079,128083,128093,128099,128105,128109,128118,128122,128127,128130,128133,128137,128140,128150,128159,128168,128177,128187,128194,128199,128204,128217],[10,128077,128073],{"id":128078},"_3-html文本与容器标签",[14,128080,128082],{"id":128081},"_31-标题标签","3.1 标题标签",[19,128084,128085,128088,128089,128092],{},[73,128086,128087],{},"\u003Ch1>","我是一级标签",[73,128090,128091],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128094,128095,128088,128097],{},[73,128096,128087],{},[73,128098,128091],{},[19,128100,125355,128101,128104],{},[73,128102,128103],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128106,128108],{"id":128107},"_32-段落标签","3.2 段落标签",[19,128110,128111,128114,128115],{},[73,128112,128113],{},"\u003Cp>","....",[73,128116,128117],{},"\u003C\u002Fp>",[14,128119,128121],{"id":128120},"_33-换行标签","3.3 换行标签",[19,128123,128124],{},[73,128125,128126],{},"\u003Cbr \u002F>",[19,128128,128129],{},"具有强制换行的作用",[19,128131,128132],{},"单标签",[14,128134,128136],{"id":128135},"_34-文本格式化标签","3.4 文本格式化标签",[19,128138,128139],{},"提供粗体、斜体和下划线等效果",[19,128141,128142,128143,84563,128146,128149],{},"加粗：",[73,128144,128145],{},"\u003Cstrong>...\u003C\u002Fstrong>",[73,128147,128148],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128151,128152,128153,84563,128156,128149],{},"斜体：",[73,128154,128155],{},"\u003Cem>...\u003C\u002Fem>",[73,128157,128158],{},"\u003Ci>...\u003C\u002Fi>",[19,128160,128161,128162,84563,128165,128149],{},"删除线：",[73,128163,128164],{},"\u003Cdel>...\u003C\u002Fdel>",[73,128166,128167],{},"\u003Cs>...\u003C\u002Fs>",[19,128169,128170,128171,84563,128174,128149],{},"下划线：",[73,128172,128173],{},"\u003Cins>...\u003C\u002Fins>",[73,128175,128176],{},"\u003Cu>...\u003C\u002Fu>",[14,128178,128180,128181,20459,128184,104715],{"id":128179},"_35-div和span标签","3.5 ",[73,128182,128183],{},"\u003Cdiv>",[73,128185,128186],{},"\u003Cspan>",[19,128188,128189,103040,128191,128193],{},[73,128190,128183],{},[73,128192,128186],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128195,128196],{},[73,128197,128198],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128200,128201],{},[73,128202,128203],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128205,128206,128207,128209,128210,128212,128213,128216],{},"两者特点：①",[73,128208,128183],{}," 标签用来布局，但一行通常只放一个 ",[73,128211,128183],{},"。可以理解为一个大盒子，独占一行，在 ",[73,128214,128215],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128218,79275,128219,128221,128222,128224],{},[73,128220,128186],{}," 标签也可用于布局，一行可以放多个 ",[73,128223,128186],{},"，可理解为小盒子。",{"title":71,"searchDepth":94,"depth":94,"links":128226},[128227,128228,128229,128230,128231],{"id":128081,"depth":94,"text":128082},{"id":128107,"depth":94,"text":128108},{"id":128120,"depth":94,"text":128121},{"id":128135,"depth":94,"text":128136},{"id":128179,"depth":94,"text":128232},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128073,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128239,"title":128240,"body":128241,"description":2201,"extension":2202,"meta":128438,"navigation":148,"path":128439,"seo":128440,"stem":128441,"__hash__":128442},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128242,"toc":128430},[128243,128246,128250,128253,128259,128266,128272,128278,128281,128284,128287,128290,128293,128296,128299,128303,128306,128309,128312,128318,128324,128330,128337,128341,128347,128353,128356,128359,128365,128371,128377,128380,128383,128387,128390,128400,128406,128410,128419,128423,128426],[10,128244,128240],{"id":128245},"_4-html图像与链接",[14,128247,128249],{"id":128248},"_41-图像标签","4.1 图像标签",[19,128251,128252],{},"（1）标签",[19,128254,128255,128258],{},[73,128256,128257],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128260,128261,128262,128265],{},"src是",[73,128263,128264],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128267,128268,128269],{},"alt:文本，替换文本。图像不能显示的文字 ",[73,128270,128271],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128273,128274,128275],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[73,128276,128277],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128279,128280],{},"width:像素，设置图像的宽度",[19,128282,128283],{},"height:像素，设置图像的高度",[19,128285,128286],{},"border：像素，设置图像的边框粗细",[19,128288,128289],{},"（2）图像标签属性的注意点：",[19,128291,128292],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128294,128295],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128297,128298],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128300,128302],{"id":128301},"_42-路径注意要点","4.2 路径注意要点：",[19,128304,128305],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128307,128308],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128310,128311],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128313,128314,128315],{},"①同一级路径：图像文件位于HTML文件同一级，如",[73,128316,128317],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128319,128320,128321],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[73,128322,128323],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128325,128326,128327],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[73,128328,128329],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128331,128332,128333,307],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2503,128334,128335],{"href":128335,"rel":128336},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25914],[14,128338,128340],{"id":128339},"_43-超链接标签","4.3 超链接标签",[19,128342,128343,128346],{},[73,128344,128345],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128348,128349,128350],{},"①语法格式：",[73,128351,128352],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128354,128355],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128357,128358],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128360,128361,128362],{},"③链接分类：外部链接：",[73,128363,128364],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128366,128367,128368],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[73,128369,128370],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128372,128373,128374],{},"空链接：如果当时没有确定链接目标时，",[73,128375,128376],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128378,128379],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128381,128382],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128384,128386],{"id":128385},"_44-锚点链接","4.4 锚点链接",[19,128388,128389],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128391,128392,128393,128396,128397],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[73,128394,128395],{},"\u003Ca href=\"#two\">","第二级",[73,128398,128399],{},"\u003C\u002Fa>",[19,128401,128402,128403],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[73,128404,128405],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128407,128409],{"id":128408},"_45-注释标签","4.5 注释标签",[19,128411,128412,128415,128416],{},[73,128413,128414],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[73,128417,128418],{},"ctrl+\u002F",[14,128420,128422],{"id":128421},"_46-特殊字符","4.6 特殊字符",[19,128424,128425],{},"可以实现添加多个空格",[3583,128427],{"style":128428,"src":128429},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":71,"searchDepth":94,"depth":94,"links":128431},[128432,128433,128434,128435,128436,128437],{"id":128248,"depth":94,"text":128249},{"id":128301,"depth":94,"text":128302},{"id":128339,"depth":94,"text":128340},{"id":128385,"depth":94,"text":128386},{"id":128408,"depth":94,"text":128409},{"id":128421,"depth":94,"text":128422},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128240,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128444,"title":128445,"body":128446,"description":2201,"extension":2202,"meta":128739,"navigation":148,"path":128740,"seo":128741,"stem":128742,"__hash__":128743},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128447,"toc":128730},[128448,128451,128455,128458,128461,128464,128467,128470,128473,128476,128479,128482,128502,128508,128512,128515,128518,128521,128524,128527,128530,128534,128537,128540,128543,128546,128559,128564,128567,128570,128585,128588,128591,128594,128597,128600,128604,128607,128614,128617,128620,128623,128626,128629,128635,128638,128641,128647,128650,128653,128656,128662,128665,128668,128682,128689,128692,128695,128702,128711,128714,128717,128720,128724,128727],[10,128449,128445],{"id":128450},"_5-html表格列表与表单",[14,128452,128454],{"id":128453},"_51-表格标签","5.1 表格标签",[19,128456,128457],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128459,128460],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128462,128463],{},"②表格基本语法：",[3583,128465],{"style":128428,"src":128466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128468,128469],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3583,128471],{"style":128428,"src":128472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128474,128475],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3583,128477],{"style":128428,"src":128478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128480,128481],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128483,128484,128487,128488,128490,128491,128494,128495,128497,128498,128501],{},[73,128485,128486],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[73,128489,128486],{},"内部必须拥有",[73,128492,128493],{},"\u003Ctr>","标签，一般位于第一行，",[73,128496,128486],{},"比",[73,128499,128500],{},"\u003Cth>","范围广",[19,128503,128504,128507],{},[73,128505,128506],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128509,128511],{"id":128510},"_52-合并单元格","5.2 合并单元格",[19,128513,128514],{},"（1）合并单元格方式：",[19,128516,128517],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128519,128520],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128522,128523],{},"（2）目标单元格：",[19,128525,128526],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128528,128529],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128531,128533],{"id":128532},"_53-列表标签","5.3 列表标签",[19,128535,128536],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128538,128539],{},"①无序列表：",[3583,128541],{"style":128428,"src":128542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128544,128545],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128547,128548,128551,128552,128555,128556,128558],{},[73,128549,128550],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[73,128553,128554],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[73,128557,128550],{},"中输入其他标签或文字是不对的",[19,128560,128561,128563],{},[73,128562,128554],{},"之间相当于一个容器，可以容纳所有元素",[19,128565,128566],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128568,128569],{},"在css中去除前边的小圆点采用如下代码:",[66,128571,128575],{"className":128572,"code":128573,"language":128574,"meta":71,"style":71},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[73,128576,128577],{"__ignoreMap":71},[76,128578,128579,128582],{"class":78,"line":79},[76,128580,128581],{"class":53332},"list-style",[76,128583,128584],{"class":90},": none;\n",[19,128586,128587],{},"②有序列表：",[3583,128589],{"style":128428,"src":128590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128592,128593],{},"③自定义列表：",[3583,128595],{"style":128428,"src":128596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3583,128598],{"style":128428,"src":128599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128601,128603],{"id":128602},"_54-表单标签","5.4 表单标签",[19,128605,128606],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128608,128609,128610,128613],{},"（1）表单域：包含单元素的区域，",[73,128611,128612],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3583,128615],{"style":128428,"src":128616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128618,128619],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128621,128622],{},"表单元素提交必须有name属性",[19,128624,128625],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128627,128628],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128630,79252,128631,128634],{},[73,128632,128633],{},"\u003Cinput>","输入表单元素",[3583,128636],{"style":128428,"src":128637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3583,128639],{"style":128428,"src":128640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128642,128643,128644],{},"单选按钮：",[73,128645,128646],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3583,128648],{"style":128428,"src":128649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128651,128652],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3583,128654],{"style":128428,"src":128655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128657,128658,128661],{},[2416,128659,128660],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128663,128664],{},"②select下拉表单元素：可以节约页面控件",[3583,128666],{"style":128428,"src":128667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128669,128670,15848,128672,128675,128676,128678,128679,128681],{},[2416,128671,2301],{},[73,128673,128674],{},"\u003Cselect>","中至少包含一对",[73,128677,104736],{},"；在",[73,128680,104736],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128683,128684,128685,128688],{},"③",[73,128686,128687],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3583,128690],{"style":128428,"src":128691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128693,128694],{},"3行20列",[14,128696,128698,128699,104715],{"id":128697},"_55-lable标签","5.5 ",[73,128700,128701],{},"\u003Clable>",[19,128703,128704,128705,128707,128708,128710],{},"它不是表单标签，但常常与表单标签搭配使用，",[73,128706,128701],{},"标签用于绑定一个表单标签，当点击",[73,128709,128701],{},"标签内的文本",[19,128712,128713],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3583,128715],{"style":128428,"src":128716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3583,128718],{"style":128428,"src":128719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128721,128723],{"id":128722},"_56-实例","5.6 实例",[3583,128725],{"style":128428,"src":128726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2178,128728,128729],{},"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":71,"searchDepth":94,"depth":94,"links":128731},[128732,128733,128734,128735,128736,128738],{"id":128453,"depth":94,"text":128454},{"id":128510,"depth":94,"text":128511},{"id":128532,"depth":94,"text":128533},{"id":128602,"depth":94,"text":128603},{"id":128697,"depth":94,"text":128737},"5.5 \u003Clable>标签",{"id":128722,"depth":94,"text":128723},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128445,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128745,"title":128746,"body":128747,"description":2201,"extension":2202,"meta":129296,"navigation":148,"path":129297,"seo":129298,"stem":129299,"__hash__":129300},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128748,"toc":129271},[128749,128752,128756,128759,128762,128766,128769,128772,128775,128778,128781,128784,128787,128791,128794,128798,128801,128804,128807,128811,128814,128817,128820,128826,128829,128832,128835,128838,128841,128844,128847,128880,128884,128887,128890,128893,128897,128900,128903,128906,128909,128912,128916,128919,128922,128925,128929,128932,128936,128939,128943,128946,128951,128955,128958,128962,128965,128968,128971,128974,129001,129004,129008,129011,129014,129019,129022,129025,129029,129032,129037,129040,129043,129046,129050,129053,129056,129059,129063,129066,129069,129072,129076,129080,129083,129123,129126,129130,129137,129140,129144,129147,129193,129197,129200,129203,129206,129234,129238,129241,129268],[10,128750,128746],{"id":128751},"_6-css语法与文本样式",[14,128753,128755],{"id":128754},"_61-css语法规范","6.1 css语法规范",[19,128757,128758],{},"由两部分组成，选择器及一条或多条声明",[3583,128760],{"style":128428,"src":128761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128763,128764],{},[2416,128765,2301],{},[19,128767,128768],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128770,128771],{},"②属性与属性值以“键值对”的形式出现",[19,128773,128774],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128776,128777],{},"④属性和属性值之间用英文“;”分开",[3583,128779],{"style":128428,"src":128780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3583,128782],{"style":128428,"src":128783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3583,128785],{"style":128428,"src":128786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128788,128790],{"id":128789},"_62-css选择器","6.2 css选择器",[19,128792,128793],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[889,128795,128797],{"id":128796},"_621-标签选择器","6.2.1 标签选择器",[19,128799,128800],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128802,128803],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3583,128805],{"style":128428,"src":128806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[889,128808,128810],{"id":128809},"_622-类选择器","6.2.2 类选择器",[19,128812,128813],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128815,128816],{},"②样例",[3583,128818],{"style":128428,"src":128819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128821,128822,128823,128825],{},"③ ",[2416,128824,128660],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128827,128828],{},"可以理解为给这个标签起了个名字，来表示；",[19,128830,128831],{},"长名称或词组可以使用横线来为选择器命名；",[19,128833,128834],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128836,128837],{},"命名要有意义；",[3583,128839],{"style":128428,"src":128840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128842,128843],{},"类选择器也可以指定特殊的元素p.center{}",[19,128845,128846],{},"p.center和.center都对",[66,128848,128850],{"className":128572,"code":128849,"language":128574,"meta":71,"style":71},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[73,128851,128852,128857,128866,128876],{"__ignoreMap":71},[76,128853,128854],{"class":78,"line":79},[76,128855,128856],{"class":540},"\u002F* 类选择器指定特殊元素 *\u002F\n",[76,128858,128859,128861,128864],{"class":78,"line":94},[76,128860,19],{"class":53332},[76,128862,128863],{"class":86},".center",[76,128865,17623],{"class":90},[76,128867,128868,128870,128872,128874],{"class":78,"line":133},[76,128869,72553],{"class":119},[76,128871,53469],{"class":90},[76,128873,53624],{"class":119},[76,128875,3415],{"class":90},[76,128877,128878],{"class":78,"line":145},[76,128879,3685],{"class":90},[889,128881,128883],{"id":128882},"_623-多类名使用","6.2.3 多类名使用",[19,128885,128886],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3583,128888],{"style":128428,"src":128889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128891,128892],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[889,128894,128896],{"id":128895},"_624-id选择器","6.2.4 id选择器",[19,128898,128899],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128901,128902],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3583,128904],{"style":128428,"src":128905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128907,128908],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128910,128911],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[889,128913,128915],{"id":128914},"_625-通配符选择器","6.2.5 通配符选择器",[19,128917,128918],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128920,128921],{},"* {",[19,128923,128924],{},"color=\"red\"}",[889,128926,128928],{"id":128927},"_626-总结","6.2.6 总结",[3583,128930],{"style":128428,"src":128931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128933,128935],{"id":128934},"_63-css字体属性","6.3 css字体属性",[19,128937,128938],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[889,128940,128942],{"id":128941},"_631-字体系列","6.3.1 字体系列",[19,128944,128945],{},"font-family: '宋体';",[19,128947,128948,128950],{},[2416,128949,2301],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[889,128952,128954],{"id":128953},"_632-字体大小","6.3.2 字体大小",[19,128956,128957],{},"font-size: 20px",[19,128959,128960,28522],{},[2416,128961,128660],{},[19,128963,128964],{},"①px（像素）大小是网页的最常用单位",[19,128966,128967],{},"②谷歌浏览器默认为16px",[19,128969,128970],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128972,128973],{},"④可以给body指定整个页面的大小：会自动引用",[66,128975,128977],{"className":128572,"code":128976,"language":128574,"meta":71,"style":71},"body {\n  font-size: 16px;\n}\n",[73,128978,128979,128985,128997],{"__ignoreMap":71},[76,128980,128981,128983],{"class":78,"line":79},[76,128982,53832],{"class":53332},[76,128984,17623],{"class":90},[76,128986,128987,128989,128991,128993,128995],{"class":78,"line":94},[76,128988,72653],{"class":119},[76,128990,53469],{"class":90},[76,128992,2861],{"class":119},[76,128994,53524],{"class":82},[76,128996,3415],{"class":90},[76,128998,128999],{"class":78,"line":133},[76,129000,3685],{"class":90},[19,129002,129003],{},"⑤标题标签比较特殊，需要单独指定大小",[889,129005,129007],{"id":129006},"_633-字体粗细","6.3.3 字体粗细",[19,129009,129010],{},"font-weight: bold;",[19,129012,129013],{},"font-weight: 100；",[19,129015,129016,129018],{},[2416,129017,2301],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129020,129021],{},"font-weight= 400;",[19,129023,129024],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[889,129026,129028],{"id":129027},"_634-文字样式","6.3.4 文字样式",[19,129030,129031],{},"font-style: normal；",[19,129033,129034,28522],{},[2416,129035,129036],{},"属性值",[19,129038,129039],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129041,129042],{},"②italic：浏览器会显示斜体的字体样式",[3583,129044],{"style":128428,"src":129045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[889,129047,129049],{"id":129048},"_635-字体符合属性","6.3.5 字体符合属性",[3583,129051],{"style":128428,"src":129052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3583,129054],{"style":128428,"src":129055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129057,129058],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129060,129061,28522],{},[2416,129062,128660],{},[19,129064,129065],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129067,129068],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129070,129071],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129073,129075],{"id":129074},"_64-css-test文本属性","6.4 css test文本属性",[889,129077,129079],{"id":129078},"_641-文本颜色","6.4.1 文本颜色",[19,129081,129082],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[66,129084,129086],{"className":128572,"code":129085,"language":128574,"meta":71,"style":71},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[73,129087,129088,129093,129099,129109,129114,129119],{"__ignoreMap":71},[76,129089,129090],{"class":78,"line":79},[76,129091,129092],{"class":540},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[76,129094,129095,129097],{"class":78,"line":94},[76,129096,19],{"class":53332},[76,129098,17623],{"class":90},[76,129100,129101,129103,129105,129107],{"class":78,"line":133},[76,129102,72932],{"class":119},[76,129104,53469],{"class":90},[76,129106,59451],{"class":119},[76,129108,3415],{"class":90},[76,129110,129111],{"class":78,"line":145},[76,129112,129113],{"class":540},"  \u002F* color: #ff0000; *\u002F\n",[76,129115,129116],{"class":78,"line":152},[76,129117,129118],{"class":540},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[76,129120,129121],{"class":78,"line":157},[76,129122,3685],{"class":90},[3583,129124],{"style":128428,"src":129125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[889,129127,129129],{"id":129128},"_642-对齐文本","6.4.2 对齐文本",[19,129131,129132,129133,129136],{},"text-align属于用于设置元素内文本内容的 ",[2416,129134,129135],{},"水平对齐"," 方式",[19,129138,129139],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[889,129141,129143],{"id":129142},"_643-装饰文本","6.4.3 装饰文本",[19,129145,129146],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[66,129148,129150],{"className":128572,"code":129149,"language":128574,"meta":71,"style":71},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[73,129151,129152,129158,129168,129172,129178,129189],{"__ignoreMap":71},[76,129153,129154,129156],{"class":78,"line":79},[76,129155,2503],{"class":53332},[76,129157,17623],{"class":90},[76,129159,129160,129162,129164,129166],{"class":78,"line":94},[76,129161,72529],{"class":119},[76,129163,53469],{"class":90},[76,129165,56768],{"class":119},[76,129167,3415],{"class":90},[76,129169,129170],{"class":78,"line":133},[76,129171,3685],{"class":90},[76,129173,129174,129176],{"class":78,"line":145},[76,129175,19],{"class":53332},[76,129177,17623],{"class":90},[76,129179,129180,129182,129184,129187],{"class":78,"line":152},[76,129181,72529],{"class":119},[76,129183,53469],{"class":90},[76,129185,129186],{"class":119},"underline",[76,129188,3415],{"class":90},[76,129190,129191],{"class":78,"line":157},[76,129192,3685],{"class":90},[889,129194,129196],{"id":129195},"_644-文本缩进","6.4.4 文本缩进",[19,129198,129199],{},"实现文本的第一行首行缩进自己指定的距离",[19,129201,129202],{},"20px往右边走；-20px往左边走",[19,129204,129205],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[66,129207,129209],{"className":128572,"code":129208,"language":128574,"meta":71,"style":71},"p {\n  text-indent: 2em;\n}\n",[73,129210,129211,129217,129230],{"__ignoreMap":71},[76,129212,129213,129215],{"class":78,"line":79},[76,129214,19],{"class":53332},[76,129216,17623],{"class":90},[76,129218,129219,129222,129224,129226,129228],{"class":78,"line":94},[76,129220,129221],{"class":119},"  text-indent",[76,129223,53469],{"class":90},[76,129225,2345],{"class":119},[76,129227,25602],{"class":82},[76,129229,3415],{"class":90},[76,129231,129232],{"class":78,"line":133},[76,129233,3685],{"class":90},[889,129235,129237],{"id":129236},"_645-行间距","6.4.5 行间距",[19,129239,129240],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[66,129242,129244],{"className":128572,"code":129243,"language":128574,"meta":71,"style":71},"p {\n  line-height: 1.6;\n}\n",[73,129245,129246,129252,129264],{"__ignoreMap":71},[76,129247,129248,129250],{"class":78,"line":79},[76,129249,19],{"class":53332},[76,129251,17623],{"class":90},[76,129253,129254,129257,129259,129262],{"class":78,"line":94},[76,129255,129256],{"class":119},"  line-height",[76,129258,53469],{"class":90},[76,129260,129261],{"class":119},"1.6",[76,129263,3415],{"class":90},[76,129265,129266],{"class":78,"line":133},[76,129267,3685],{"class":90},[2178,129269,129270],{},"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":71,"searchDepth":94,"depth":94,"links":129272},[129273,129274,129282,129289],{"id":128754,"depth":94,"text":128755},{"id":128789,"depth":94,"text":128790,"children":129275},[129276,129277,129278,129279,129280,129281],{"id":128796,"depth":133,"text":128797},{"id":128809,"depth":133,"text":128810},{"id":128882,"depth":133,"text":128883},{"id":128895,"depth":133,"text":128896},{"id":128914,"depth":133,"text":128915},{"id":128927,"depth":133,"text":128928},{"id":128934,"depth":94,"text":128935,"children":129283},[129284,129285,129286,129287,129288],{"id":128941,"depth":133,"text":128942},{"id":128953,"depth":133,"text":128954},{"id":129006,"depth":133,"text":129007},{"id":129027,"depth":133,"text":129028},{"id":129048,"depth":133,"text":129049},{"id":129074,"depth":94,"text":129075,"children":129290},[129291,129292,129293,129294,129295],{"id":129078,"depth":133,"text":129079},{"id":129128,"depth":133,"text":129129},{"id":129142,"depth":133,"text":129143},{"id":129195,"depth":133,"text":129196},{"id":129236,"depth":133,"text":129237},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128746,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129302,"title":129303,"body":129304,"description":2201,"extension":2202,"meta":129953,"navigation":148,"path":129954,"seo":129955,"stem":129956,"__hash__":129957},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129305,"toc":129934},[129306,129309,129313,129317,129377,129381,129391,129394,129397,129401,129426,129430,129433,129436,129439,129442,129445,129449,129452,129455,129497,129500,129526,129532,129535,129539,129543,129549,129552,129555,129558,129561,129564,129567,129612,129616,129619,129622,129626,129630,129659,129662,129667,129670,129673,129676,129679,129683,129687,129690,129692,129695,129699,129702,129706,129709,129712,129715,129719,129723,129729,129739,129742,129745,129748,129751,129754,129877,129885,129893,129931],[10,129307,129303],{"id":129308},"_7-css引入方式与选择器进阶",[14,129310,129312],{"id":129311},"_71-css引入方式","7.1 css引入方式",[889,129314,129316],{"id":129315},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[66,129318,129322],{"className":129319,"code":129320,"language":129321,"meta":71,"style":71},"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",[73,129323,129324,129332,129339,129351,129364,129369],{"__ignoreMap":71},[76,129325,129326,129328,129330],{"class":78,"line":79},[76,129327,584],{"class":90},[76,129329,2178],{"class":53332},[76,129331,53339],{"class":90},[76,129333,129334,129337],{"class":78,"line":94},[76,129335,129336],{"class":53332},"  h1",[76,129338,17623],{"class":90},[76,129340,129341,129344,129346,129349],{"class":78,"line":133},[76,129342,129343],{"class":119},"    color",[76,129345,53469],{"class":90},[76,129347,129348],{"class":119},"blue",[76,129350,3415],{"class":90},[76,129352,129353,129356,129358,129360,129362],{"class":78,"line":145},[76,129354,129355],{"class":119},"    font-size",[76,129357,53469],{"class":90},[76,129359,3058],{"class":119},[76,129361,53524],{"class":82},[76,129363,3415],{"class":90},[76,129365,129366],{"class":78,"line":152},[76,129367,129368],{"class":90},"  }\n",[76,129370,129371,129373,129375],{"class":78,"line":157},[76,129372,53817],{"class":90},[76,129374,2178],{"class":53332},[76,129376,53339],{"class":90},[19,129378,129379,28522],{},[2416,129380,128660],{},[19,129382,79252,129383,129386,129387,129390],{},[73,129384,129385],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[73,129388,129389],{},"\u003Chead>","标签中",[19,129392,129393],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129395,129396],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[889,129398,129400],{"id":129399},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[66,129402,129404],{"className":129319,"code":129403,"language":129321,"meta":71,"style":71},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[73,129405,129406],{"__ignoreMap":71},[76,129407,129408,129410,129412,129414,129416,129419,129422,129424],{"class":78,"line":79},[76,129409,584],{"class":90},[76,129411,19],{"class":53332},[76,129413,64654],{"class":86},[76,129415,370],{"class":90},[76,129417,129418],{"class":126},"\"color: red; font-size: 16px;\"",[76,129420,129421],{"class":90},">这是一个段落\u003C\u002F",[76,129423,19],{"class":53332},[76,129425,53339],{"class":90},[19,129427,129428,28522],{},[2416,129429,128660],{},[19,129431,129432],{},"①style其实就是标签的属性",[19,129434,129435],{},"②在双引号中间，写法要符合css规范",[19,129437,129438],{},"③可以控制当前的标签设置样式",[19,129440,129441],{},"④书写繁琐，简单时才用",[19,129443,129444],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[889,129446,129448],{"id":129447},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129450,129451],{},"使用最多，单独建一个css文件，然后html引用",[19,129453,129454],{},"①css文件部分： style.css",[66,129456,129458],{"className":128572,"code":129457,"language":128574,"meta":71,"style":71},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[73,129459,129460,129465,129471,129481,129493],{"__ignoreMap":71},[76,129461,129462],{"class":78,"line":79},[76,129463,129464],{"class":540},"\u002F* style.css *\u002F\n",[76,129466,129467,129469],{"class":78,"line":94},[76,129468,10],{"class":53332},[76,129470,17623],{"class":90},[76,129472,129473,129475,129477,129479],{"class":78,"line":133},[76,129474,72932],{"class":119},[76,129476,53469],{"class":90},[76,129478,129348],{"class":119},[76,129480,3415],{"class":90},[76,129482,129483,129485,129487,129489,129491],{"class":78,"line":145},[76,129484,72653],{"class":119},[76,129486,53469],{"class":90},[76,129488,3058],{"class":119},[76,129490,53524],{"class":82},[76,129492,3415],{"class":90},[76,129494,129495],{"class":78,"line":152},[76,129496,3685],{"class":90},[19,129498,129499],{},"②html部分",[66,129501,129503],{"className":129319,"code":129502,"language":129321,"meta":71,"style":71},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[73,129504,129505],{"__ignoreMap":71},[76,129506,129507,129509,129511,129513,129515,129517,129519,129521,129524],{"class":78,"line":79},[76,129508,584],{"class":90},[76,129510,71033],{"class":53332},[76,129512,71036],{"class":86},[76,129514,370],{"class":90},[76,129516,71041],{"class":126},[76,129518,63085],{"class":86},[76,129520,370],{"class":90},[76,129522,129523],{"class":126},"\"style.css\"",[76,129525,53339],{"class":90},[19,129527,129528,129531],{},[73,129529,129530],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129533,129534],{},"ctrl+0回到页面原来大小",[14,129536,129538],{"id":129537},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[889,129540,129542],{"id":129541},"_721-快速生成html","7.2.1 快速生成html",[19,129544,129545,129546],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[73,129547,129548],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129550,129551],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129553,129554],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129556,129557],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129559,129560],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129562,129563],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129565,129566],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[66,129568,129570],{"className":129319,"code":129569,"language":129321,"meta":71,"style":71},"\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",[73,129571,129572,129577,129582,129587,129592,129597,129602,129607],{"__ignoreMap":71},[76,129573,129574],{"class":78,"line":79},[76,129575,129576],{"class":540},"\u003C!-- Emmet 语法示例 -->\n",[76,129578,129579],{"class":78,"line":94},[76,129580,129581],{"class":540},"\u003C!-- div*3        → 生成3个div -->\n",[76,129583,129584],{"class":78,"line":133},[76,129585,129586],{"class":540},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[76,129588,129589],{"class":78,"line":145},[76,129590,129591],{"class":540},"\u003C!-- div+p        → 兄弟div和p -->\n",[76,129593,129594],{"class":78,"line":152},[76,129595,129596],{"class":540},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[76,129598,129599],{"class":78,"line":157},[76,129600,129601],{"class":540},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[76,129603,129604],{"class":78,"line":246},[76,129605,129606],{"class":540},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[76,129608,129609],{"class":78,"line":251},[76,129610,129611],{"class":540},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[889,129613,129615],{"id":129614},"_722-快速生成css","7.2.2 快速生成css",[19,129617,129618],{},"简写开头",[19,129620,129621],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129623,129625],{"id":129624},"_73-css复合选择器","7.3 css复合选择器",[889,129627,129629],{"id":129628},"_731-后代选择器","7.3.1 后代选择器",[66,129631,129633],{"className":128572,"code":129632,"language":128574,"meta":71,"style":71},".parent .child {\n  color: blue;\n}\n",[73,129634,129635,129645,129655],{"__ignoreMap":71},[76,129636,129637,129640,129643],{"class":78,"line":79},[76,129638,129639],{"class":86},".parent",[76,129641,129642],{"class":86}," .child",[76,129644,17623],{"class":90},[76,129646,129647,129649,129651,129653],{"class":78,"line":94},[76,129648,72932],{"class":119},[76,129650,53469],{"class":90},[76,129652,129348],{"class":119},[76,129654,3415],{"class":90},[76,129656,129657],{"class":78,"line":133},[76,129658,3685],{"class":90},[19,129660,129661],{},"元素1 元素2 {样式声明}",[19,129663,129664],{},[2416,129665,129666],{},"注意点:",[19,129668,129669],{},"①元素1和元素2中间用空格隔开",[19,129671,129672],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129674,129675],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129677,129678],{},"④元素1和元素2可以是任意基础选择器",[889,129680,129682],{"id":129681},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129684,129685],{},[2416,129686,129666],{},[19,129688,129689],{},"①元素1和元素2中间用大于号隔开",[19,129691,129672],{},[19,129693,129694],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[889,129696,129698],{"id":129697},"_733-并集选择器","7.3.3 并集选择器",[19,129700,129701],{},"元素1，元素2 {样式声明}",[19,129703,129704],{},[2416,129705,129666],{},[19,129707,129708],{},"①元素1和元素2中间用逗号隔开",[19,129710,129711],{},"②逗号可以理解为和的意思",[19,129713,129714],{},"③并集选择器通常用于集体声明",[889,129716,129718],{"id":129717},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129720,129721],{},[2416,129722,129666],{},[19,129724,129725,129726,129728],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71033,129727],{},"－:visited－:hover－:active。",[19,129730,129731,129732,129735,129736,27790],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129733,129734],"hover",{}," 、 ",[129737,129738],"first-child",{},[19,129740,129741],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129743,129744],{},"link对没访问的进行设置",[19,129746,129747],{},"vistied对已访问的进行改变",[19,129749,129750],{},"hover鼠标经过就会变",[19,129752,129753],{},"active常按(点)就会变",[66,129755,129757],{"className":128572,"code":129756,"language":128574,"meta":71,"style":71},"\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",[73,129758,129759,129764,129773,129783,129793,129797,129806,129817,129821,129829,129839,129849,129853,129862,129873],{"__ignoreMap":71},[76,129760,129761],{"class":78,"line":79},[76,129762,129763],{"class":540},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[76,129765,129766,129768,129771],{"class":78,"line":94},[76,129767,2503],{"class":53332},[76,129769,129770],{"class":86},":link",[76,129772,17623],{"class":90},[76,129774,129775,129777,129779,129781],{"class":78,"line":133},[76,129776,72932],{"class":119},[76,129778,53469],{"class":90},[76,129780,64397],{"class":119},[76,129782,3415],{"class":90},[76,129784,129785,129787,129789,129791],{"class":78,"line":145},[76,129786,72529],{"class":119},[76,129788,53469],{"class":90},[76,129790,56768],{"class":119},[76,129792,3415],{"class":90},[76,129794,129795],{"class":78,"line":152},[76,129796,3685],{"class":90},[76,129798,129799,129801,129804],{"class":78,"line":157},[76,129800,2503],{"class":53332},[76,129802,129803],{"class":86},":visited",[76,129805,17623],{"class":90},[76,129807,129808,129810,129812,129815],{"class":78,"line":246},[76,129809,72932],{"class":119},[76,129811,53469],{"class":90},[76,129813,129814],{"class":119},"purple",[76,129816,3415],{"class":90},[76,129818,129819],{"class":78,"line":251},[76,129820,3685],{"class":90},[76,129822,129823,129825,129827],{"class":78,"line":257},[76,129824,2503],{"class":53332},[76,129826,62968],{"class":86},[76,129828,17623],{"class":90},[76,129830,129831,129833,129835,129837],{"class":78,"line":641},[76,129832,72932],{"class":119},[76,129834,53469],{"class":90},[76,129836,56920],{"class":119},[76,129838,3415],{"class":90},[76,129840,129841,129843,129845,129847],{"class":78,"line":646},[76,129842,72529],{"class":119},[76,129844,53469],{"class":90},[76,129846,129186],{"class":119},[76,129848,3415],{"class":90},[76,129850,129851],{"class":78,"line":659},[76,129852,3685],{"class":90},[76,129854,129855,129857,129860],{"class":78,"line":1608},[76,129856,2503],{"class":53332},[76,129858,129859],{"class":86},":active",[76,129861,17623],{"class":90},[76,129863,129864,129866,129868,129871],{"class":78,"line":1632},[76,129865,72932],{"class":119},[76,129867,53469],{"class":90},[76,129869,129870],{"class":119},"green",[76,129872,3415],{"class":90},[76,129874,129875],{"class":78,"line":1637},[76,129876,3685],{"class":90},[889,129878,129880,129881,129884],{"id":129879},"_735-伪类选择器","7.3.5 ",[129882,129883],"focus",{},"伪类选择器",[19,129886,129887,129889,129890,129892],{},[129882,129888],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[73,129891,128633],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[66,129894,129896],{"className":128572,"code":129895,"language":128574,"meta":71,"style":71},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[73,129897,129898,129906,129917,129927],{"__ignoreMap":71},[76,129899,129900,129902,129904],{"class":78,"line":79},[76,129901,1673],{"class":53332},[76,129903,63928],{"class":86},[76,129905,17623],{"class":90},[76,129907,129908,129911,129913,129915],{"class":78,"line":94},[76,129909,129910],{"class":119},"  border-color",[76,129912,53469],{"class":90},[76,129914,56920],{"class":119},[76,129916,3415],{"class":90},[76,129918,129919,129921,129923,129925],{"class":78,"line":133},[76,129920,72825],{"class":119},[76,129922,53469],{"class":90},[76,129924,56768],{"class":119},[76,129926,3415],{"class":90},[76,129928,129929],{"class":78,"line":145},[76,129930,3685],{"class":90},[2178,129932,129933],{},"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":71,"searchDepth":94,"depth":94,"links":129935},[129936,129941,129945],{"id":129311,"depth":94,"text":129312,"children":129937},[129938,129939,129940],{"id":129315,"depth":133,"text":129316},{"id":129399,"depth":133,"text":129400},{"id":129447,"depth":133,"text":129448},{"id":129537,"depth":94,"text":129538,"children":129942},[129943,129944],{"id":129541,"depth":133,"text":129542},{"id":129614,"depth":133,"text":129615},{"id":129624,"depth":94,"text":129625,"children":129946},[129947,129948,129949,129950,129951],{"id":129628,"depth":133,"text":129629},{"id":129681,"depth":133,"text":129682},{"id":129697,"depth":133,"text":129698},{"id":129717,"depth":133,"text":129718},{"id":129879,"depth":133,"text":129952},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129303,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129959,"title":129960,"body":129961,"description":2201,"extension":2202,"meta":131884,"navigation":148,"path":131885,"seo":131886,"stem":131887,"__hash__":131888},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129962,"toc":131858},[129963,129966,129970,129979,129983,130009,130014,130017,130020,130023,130026,130030,130033,130043,130051,130055,130090,130095,130098,130101,130104,130107,130111,130114,130123,130127,130140,130145,130148,130151,130154,130158,130161,130165,130168,130223,130226,130257,130260,130314,130318,130321,130487,130610,130613,130616,130619,130622,130626,130629,130633,130636,130639,130643,130646,130677,130704,130732,130735,130739,130765,130808,130812,130906,130909,130936,130939,130942,130945,130948,130951,130954,130957,130960,130963,130967,131024,131051,131055,131103,131107,131148,131150,131153,131156,131159,131162,131166,131258,131261,131264,131267,131271,131394,131595,131599,131603,131606,131609,131612,131616,131619,131622,131647,131650,131653,131656,131659,131662,131666,131674,131736,131739,131797,131800,131803,131806,131809,131812,131815,131818,131855],[10,129964,129960],{"id":129965},"_8-css显示模式与背景特性",[14,129967,129969],{"id":129968},"_81-css元素显示模式","8.1 css元素显示模式",[19,129971,129972,129973,129975,129976,129978],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[73,129974,128183],{},"自己占一行，比如一行可以放多个",[73,129977,128186],{},"，HTML 元素一般分为块元素和行内元素两种类型",[889,129980,129982],{"id":129981},"_811-块元素","8.1.1 块元素",[19,129984,129985,129986,129988,129989,2478,129992,2478,129994,2478,129996,2478,129999,2478,130002,130005,130006,130008],{},"常见的块元素有",[73,129987,128087],{},"~",[73,129990,129991],{},"\u003Ch6>",[73,129993,128113],{},[73,129995,128183],{},[73,129997,129998],{},"\u003Cul>",[73,130000,130001],{},"\u003Col>",[73,130003,130004],{},"\u003Cli>","等，其中 ",[73,130007,128183],{}," 标签是最典型的块元素",[19,130010,130011],{},[2416,130012,130013],{},"块级元素的特点：",[19,130015,130016],{},"① 比较霸道，自己独占一行。",[19,130018,130019],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130021,130022],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130024,130025],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130027,130028],{},[2416,130029,2301],{},[19,130031,130032],{},"①文字类的元素内不能使用块级元素",[19,130034,79275,130035,130037,130038,130040,130041],{},[73,130036,128113],{}," 标签主要用于存放文字，因此 ",[73,130039,128113],{}," 里面不能放块级元素，特别是不能放",[73,130042,128183],{},[19,130044,130045,130046,129988,130048,130050],{},"⑥同理， ",[73,130047,128087],{},[73,130049,129991],{},"等都是文字类块级标签，里面也不能放其他块级元素",[889,130052,130054],{"id":130053},"_812-行内元素","8.1.2 行内元素",[19,130056,130057,130058,2478,130060,2478,130063,2478,130066,2478,130069,2478,130072,2478,130075,2478,130078,2478,130081,2478,130084,130086,130087,130089],{},"常见的行内元素有 ",[73,130059,128345],{},[73,130061,130062],{},"\u003Cstrong>",[73,130064,130065],{},"\u003Cb>",[73,130067,130068],{},"\u003Cem>",[73,130070,130071],{},"\u003Ci>",[73,130073,130074],{},"\u003Cdel>",[73,130076,130077],{},"\u003Cs>",[73,130079,130080],{},"\u003Cins>",[73,130082,130083],{},"\u003Cu>",[73,130085,128186],{}," 等，其中 ",[73,130088,128186],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130091,130092],{},[2416,130093,130094],{},"特点：",[19,130096,130097],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130099,130100],{},"② 高、宽直接设置是无效的。",[19,130102,130103],{},"③ 默认宽度就是它本身内容的宽度。",[19,130105,130106],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130108,130109],{},[2416,130110,2301],{},[19,130112,130113],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130115,130116,130117,130119,130120,130122],{},"②特殊情况链接 ",[73,130118,128345],{}," 里面可以放块级元素，但是给 ",[73,130121,128345],{}," 转换一下块级模式最安全",[889,130124,130126],{"id":130125},"_813-行内块元素","8.1.3 行内块元素",[19,130128,130129,130130,2478,130133,2478,130136,130139],{},"在行内元素中有几个特殊的标签 —— ",[73,130131,130132],{},"\u003Cimg \u002F>",[73,130134,130135],{},"\u003Cinput \u002F>",[73,130137,130138],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130141,130142],{},[2416,130143,130144],{},"行内块元素的特点：",[19,130146,130147],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130149,130150],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130152,130153],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[889,130155,130157],{"id":130156},"_814-总结","8.1.4 总结",[3583,130159],{"style":128428,"src":130160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[889,130162,130164],{"id":130163},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130166,130167],{},"①转换为块元素：display:block;",[66,130169,130171],{"className":128572,"code":130170,"language":128574,"meta":71,"style":71},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[73,130172,130173,130178,130184,130195,130207,130219],{"__ignoreMap":71},[76,130174,130175],{"class":78,"line":79},[76,130176,130177],{"class":540},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[76,130179,130180,130182],{"class":78,"line":94},[76,130181,2503],{"class":53332},[76,130183,17623],{"class":90},[76,130185,130186,130189,130191,130193],{"class":78,"line":133},[76,130187,130188],{"class":119},"  display",[76,130190,53469],{"class":90},[76,130192,62897],{"class":119},[76,130194,3415],{"class":90},[76,130196,130197,130199,130201,130203,130205],{"class":78,"line":145},[76,130198,72595],{"class":119},[76,130200,53469],{"class":90},[76,130202,2575],{"class":119},[76,130204,53524],{"class":82},[76,130206,3415],{"class":90},[76,130208,130209,130211,130213,130215,130217],{"class":78,"line":152},[76,130210,72815],{"class":119},[76,130212,53469],{"class":90},[76,130214,2665],{"class":119},[76,130216,53524],{"class":82},[76,130218,3415],{"class":90},[76,130220,130221],{"class":78,"line":157},[76,130222,3685],{"class":90},[19,130224,130225],{},"②转换为行内元素：display:inline;",[66,130227,130229],{"className":128572,"code":130228,"language":128574,"meta":71,"style":71},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[73,130230,130231,130236,130242,130253],{"__ignoreMap":71},[76,130232,130233],{"class":78,"line":79},[76,130234,130235],{"class":540},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[76,130237,130238,130240],{"class":78,"line":94},[76,130239,53643],{"class":53332},[76,130241,17623],{"class":90},[76,130243,130244,130246,130248,130251],{"class":78,"line":133},[76,130245,130188],{"class":119},[76,130247,53469],{"class":90},[76,130249,130250],{"class":119},"inline",[76,130252,3415],{"class":90},[76,130254,130255],{"class":78,"line":145},[76,130256,3685],{"class":90},[19,130258,130259],{},"③转换为行内块：display:inline-block;",[66,130261,130263],{"className":128572,"code":130262,"language":128574,"meta":71,"style":71},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[73,130264,130265,130270,130276,130286,130298,130310],{"__ignoreMap":71},[76,130266,130267],{"class":78,"line":79},[76,130268,130269],{"class":540},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[76,130271,130272,130274],{"class":78,"line":94},[76,130273,76],{"class":53332},[76,130275,17623],{"class":90},[76,130277,130278,130280,130282,130284],{"class":78,"line":133},[76,130279,130188],{"class":119},[76,130281,53469],{"class":90},[76,130283,74410],{"class":119},[76,130285,3415],{"class":90},[76,130287,130288,130290,130292,130294,130296],{"class":78,"line":145},[76,130289,72595],{"class":119},[76,130291,53469],{"class":90},[76,130293,2872],{"class":119},[76,130295,53524],{"class":82},[76,130297,3415],{"class":90},[76,130299,130300,130302,130304,130306,130308],{"class":78,"line":152},[76,130301,72815],{"class":119},[76,130303,53469],{"class":90},[76,130305,3206],{"class":119},[76,130307,53524],{"class":82},[76,130309,3415],{"class":90},[76,130311,130312],{"class":78,"line":157},[76,130313,3685],{"class":90},[889,130315,130317],{"id":130316},"_816-小米侧边栏","8.1.6 小米侧边栏",[3583,130319],{"style":128428,"src":130320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[66,130322,130324],{"className":129319,"code":130323,"language":129321,"meta":71,"style":71},"\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",[73,130325,130326,130331,130346,130365,130384,130403,130422,130441,130460,130479],{"__ignoreMap":71},[76,130327,130328],{"class":78,"line":79},[76,130329,130330],{"class":540},"\u003C!-- 小米侧边栏案例 -->\n",[76,130332,130333,130335,130337,130339,130341,130344],{"class":78,"line":94},[76,130334,584],{"class":90},[76,130336,53643],{"class":53332},[76,130338,55518],{"class":86},[76,130340,370],{"class":90},[76,130342,130343],{"class":126},"\"sidebar\"",[76,130345,53339],{"class":90},[76,130347,130348,130350,130352,130354,130356,130358,130361,130363],{"class":78,"line":133},[76,130349,54176],{"class":90},[76,130351,2503],{"class":53332},[76,130353,63085],{"class":86},[76,130355,370],{"class":90},[76,130357,63090],{"class":126},[76,130359,130360],{"class":90},">手机 电话卡\u003C\u002F",[76,130362,2503],{"class":53332},[76,130364,53339],{"class":90},[76,130366,130367,130369,130371,130373,130375,130377,130380,130382],{"class":78,"line":145},[76,130368,54176],{"class":90},[76,130370,2503],{"class":53332},[76,130372,63085],{"class":86},[76,130374,370],{"class":90},[76,130376,63090],{"class":126},[76,130378,130379],{"class":90},">电视 盒子\u003C\u002F",[76,130381,2503],{"class":53332},[76,130383,53339],{"class":90},[76,130385,130386,130388,130390,130392,130394,130396,130399,130401],{"class":78,"line":152},[76,130387,54176],{"class":90},[76,130389,2503],{"class":53332},[76,130391,63085],{"class":86},[76,130393,370],{"class":90},[76,130395,63090],{"class":126},[76,130397,130398],{"class":90},">笔记本 平板\u003C\u002F",[76,130400,2503],{"class":53332},[76,130402,53339],{"class":90},[76,130404,130405,130407,130409,130411,130413,130415,130418,130420],{"class":78,"line":157},[76,130406,54176],{"class":90},[76,130408,2503],{"class":53332},[76,130410,63085],{"class":86},[76,130412,370],{"class":90},[76,130414,63090],{"class":126},[76,130416,130417],{"class":90},">出行 穿戴\u003C\u002F",[76,130419,2503],{"class":53332},[76,130421,53339],{"class":90},[76,130423,130424,130426,130428,130430,130432,130434,130437,130439],{"class":78,"line":246},[76,130425,54176],{"class":90},[76,130427,2503],{"class":53332},[76,130429,63085],{"class":86},[76,130431,370],{"class":90},[76,130433,63090],{"class":126},[76,130435,130436],{"class":90},">智能 路由器\u003C\u002F",[76,130438,2503],{"class":53332},[76,130440,53339],{"class":90},[76,130442,130443,130445,130447,130449,130451,130453,130456,130458],{"class":78,"line":251},[76,130444,54176],{"class":90},[76,130446,2503],{"class":53332},[76,130448,63085],{"class":86},[76,130450,370],{"class":90},[76,130452,63090],{"class":126},[76,130454,130455],{"class":90},">健康 儿童\u003C\u002F",[76,130457,2503],{"class":53332},[76,130459,53339],{"class":90},[76,130461,130462,130464,130466,130468,130470,130472,130475,130477],{"class":78,"line":257},[76,130463,54176],{"class":90},[76,130465,2503],{"class":53332},[76,130467,63085],{"class":86},[76,130469,370],{"class":90},[76,130471,63090],{"class":126},[76,130473,130474],{"class":90},">耳机 音响\u003C\u002F",[76,130476,2503],{"class":53332},[76,130478,53339],{"class":90},[76,130480,130481,130483,130485],{"class":78,"line":641},[76,130482,53817],{"class":90},[76,130484,53643],{"class":53332},[76,130486,53339],{"class":90},[66,130488,130490],{"className":128572,"code":130489,"language":128574,"meta":71,"style":71},".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",[73,130491,130492,130501,130511,130524,130536,130548,130560,130570,130581,130585,130595,130606],{"__ignoreMap":71},[76,130493,130494,130497,130499],{"class":78,"line":79},[76,130495,130496],{"class":86},".sidebar",[76,130498,3519],{"class":53332},[76,130500,17623],{"class":90},[76,130502,130503,130505,130507,130509],{"class":78,"line":94},[76,130504,130188],{"class":119},[76,130506,53469],{"class":90},[76,130508,62897],{"class":119},[76,130510,3415],{"class":90},[76,130512,130513,130515,130517,130520,130522],{"class":78,"line":133},[76,130514,72595],{"class":119},[76,130516,53469],{"class":90},[76,130518,130519],{"class":119},"234",[76,130521,53524],{"class":82},[76,130523,3415],{"class":90},[76,130525,130526,130528,130530,130532,130534],{"class":78,"line":145},[76,130527,72815],{"class":119},[76,130529,53469],{"class":90},[76,130531,2715],{"class":119},[76,130533,53524],{"class":82},[76,130535,3415],{"class":90},[76,130537,130538,130540,130542,130544,130546],{"class":78,"line":152},[76,130539,129256],{"class":119},[76,130541,53469],{"class":90},[76,130543,2715],{"class":119},[76,130545,53524],{"class":82},[76,130547,3415],{"class":90},[76,130549,130550,130552,130554,130556,130558],{"class":78,"line":157},[76,130551,72850],{"class":119},[76,130553,53469],{"class":90},[76,130555,3206],{"class":119},[76,130557,53524],{"class":82},[76,130559,3415],{"class":90},[76,130561,130562,130564,130566,130568],{"class":78,"line":246},[76,130563,72932],{"class":119},[76,130565,53469],{"class":90},[76,130567,62870],{"class":119},[76,130569,3415],{"class":90},[76,130571,130572,130574,130576,130579],{"class":78,"line":251},[76,130573,72905],{"class":119},[76,130575,53469],{"class":90},[76,130577,130578],{"class":119},"#55585a",[76,130580,3415],{"class":90},[76,130582,130583],{"class":78,"line":257},[76,130584,3685],{"class":90},[76,130586,130587,130589,130591,130593],{"class":78,"line":641},[76,130588,130496],{"class":86},[76,130590,3519],{"class":53332},[76,130592,62968],{"class":86},[76,130594,17623],{"class":90},[76,130596,130597,130599,130601,130604],{"class":78,"line":646},[76,130598,72905],{"class":119},[76,130600,53469],{"class":90},[76,130602,130603],{"class":119},"#ff6700",[76,130605,3415],{"class":90},[76,130607,130608],{"class":78,"line":659},[76,130609,3685],{"class":90},[3583,130611],{"style":128428,"src":130612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130614,130615],{},"行高=盒子高度：实现文字的垂直居中",[19,130617,130618],{},"原理讲解：",[3583,130620],{"style":128428,"src":130621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130623,130625],{"id":130624},"_82-css背景","8.2 css背景",[19,130627,130628],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[889,130630,130632],{"id":130631},"_821-背景颜色","8.2.1 背景颜色",[19,130634,130635],{},"background-color:颜色值;",[19,130637,130638],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[889,130640,130642],{"id":130641},"_822-背景图片","8.2.2 背景图片",[19,130644,130645],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[66,130647,130649],{"className":128572,"code":130648,"language":128574,"meta":71,"style":71},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[73,130650,130651,130657,130673],{"__ignoreMap":71},[76,130652,130653,130655],{"class":78,"line":79},[76,130654,53643],{"class":53332},[76,130656,17623],{"class":90},[76,130658,130659,130662,130664,130666,130668,130671],{"class":78,"line":94},[76,130660,130661],{"class":119},"  background-image",[76,130663,53469],{"class":90},[76,130665,63754],{"class":119},[76,130667,123],{"class":90},[76,130669,130670],{"class":7296},"images\u002Fbg.png",[76,130672,4807],{"class":90},[76,130674,130675],{"class":78,"line":133},[76,130676,3685],{"class":90},[2404,130678,130679,130688],{},[2407,130680,130681],{},[2410,130682,130683,130686],{},[2413,130684,130685],{"align":25785},"参数值",[2413,130687,104718],{"align":25785},[2451,130689,130690,130697],{},[2410,130691,130692,130694],{},[2456,130693,56768],{"align":25785},[2456,130695,130696],{"align":25785},"无背景图（默认的）",[2410,130698,130699,130701],{},[2456,130700,63754],{"align":25785},[2456,130702,130703],{"align":25785},"使用绝对或相对地址指定背景图像",[66,130705,130706],{"className":128572,"code":130648,"language":128574,"meta":71,"style":71},[73,130707,130708,130714,130728],{"__ignoreMap":71},[76,130709,130710,130712],{"class":78,"line":79},[76,130711,53643],{"class":53332},[76,130713,17623],{"class":90},[76,130715,130716,130718,130720,130722,130724,130726],{"class":78,"line":94},[76,130717,130661],{"class":119},[76,130719,53469],{"class":90},[76,130721,63754],{"class":119},[76,130723,123],{"class":90},[76,130725,130670],{"class":7296},[76,130727,4807],{"class":90},[76,130729,130730],{"class":78,"line":133},[76,130731,3685],{"class":90},[19,130733,130734],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[889,130736,130738],{"id":130737},"_823-背景平铺","8.2.3 背景平铺",[66,130740,130742],{"className":128572,"code":130741,"language":128574,"meta":71,"style":71},"div {\n  background-repeat: no-repeat;\n}\n",[73,130743,130744,130750,130761],{"__ignoreMap":71},[76,130745,130746,130748],{"class":78,"line":79},[76,130747,53643],{"class":53332},[76,130749,17623],{"class":90},[76,130751,130752,130755,130757,130759],{"class":78,"line":94},[76,130753,130754],{"class":119},"  background-repeat",[76,130756,53469],{"class":90},[76,130758,63764],{"class":119},[76,130760,3415],{"class":90},[76,130762,130763],{"class":78,"line":133},[76,130764,3685],{"class":90},[2404,130766,130767,130775],{},[2407,130768,130769],{},[2410,130770,130771,130773],{},[2413,130772,130685],{"align":25785},[2413,130774,104718],{"align":25785},[2451,130776,130777,130785,130792,130800],{},[2410,130778,130779,130782],{},[2456,130780,130781],{"align":25785},"repeat",[2456,130783,130784],{"align":25785},"背景图像在纵向和横向上平铺（默认的）",[2410,130786,130787,130789],{},[2456,130788,63764],{"align":25785},[2456,130790,130791],{"align":25785},"背景图像不平铺",[2410,130793,130794,130797],{},[2456,130795,130796],{"align":25785},"repeat-x",[2456,130798,130799],{"align":25785},"背景图像在横向上平铺",[2410,130801,130802,130805],{},[2456,130803,130804],{"align":25785},"repeat-y",[2456,130806,130807],{"align":25785},"背景图像在纵向平铺",[889,130809,130811],{"id":130810},"_824-背景图片位置","8.2.4 背景图片位置",[66,130813,130815],{"className":128572,"code":130814,"language":128574,"meta":71,"style":71},"\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",[73,130816,130817,130822,130828,130842,130846,130851,130857,130873,130877,130882,130888,130902],{"__ignoreMap":71},[76,130818,130819],{"class":78,"line":79},[76,130820,130821],{"class":540},"\u002F* 方位名词 *\u002F\n",[76,130823,130824,130826],{"class":78,"line":94},[76,130825,53643],{"class":53332},[76,130827,17623],{"class":90},[76,130829,130830,130833,130835,130837,130840],{"class":78,"line":133},[76,130831,130832],{"class":119},"  background-position",[76,130834,53469],{"class":90},[76,130836,53624],{"class":119},[76,130838,130839],{"class":119}," top",[76,130841,3415],{"class":90},[76,130843,130844],{"class":78,"line":145},[76,130845,3685],{"class":90},[76,130847,130848],{"class":78,"line":152},[76,130849,130850],{"class":540},"\u002F* 精确单位 *\u002F\n",[76,130852,130853,130855],{"class":78,"line":157},[76,130854,53643],{"class":53332},[76,130856,17623],{"class":90},[76,130858,130859,130861,130863,130865,130867,130869,130871],{"class":78,"line":246},[76,130860,130832],{"class":119},[76,130862,53469],{"class":90},[76,130864,408],{"class":119},[76,130866,53524],{"class":82},[76,130868,59534],{"class":119},[76,130870,53524],{"class":82},[76,130872,3415],{"class":90},[76,130874,130875],{"class":78,"line":251},[76,130876,3685],{"class":90},[76,130878,130879],{"class":78,"line":257},[76,130880,130881],{"class":540},"\u002F* 混合单位 *\u002F\n",[76,130883,130884,130886],{"class":78,"line":641},[76,130885,53643],{"class":53332},[76,130887,17623],{"class":90},[76,130889,130890,130892,130894,130896,130898,130900],{"class":78,"line":646},[76,130891,130832],{"class":119},[76,130893,53469],{"class":90},[76,130895,408],{"class":119},[76,130897,53524],{"class":82},[76,130899,19193],{"class":119},[76,130901,3415],{"class":90},[76,130903,130904],{"class":78,"line":659},[76,130905,3685],{"class":90},[19,130907,130908],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2404,130910,130911,130919],{},[2407,130912,130913],{},[2410,130914,130915,130917],{},[2413,130916,130685],{"align":25785},[2413,130918,27919],{"align":25785},[2451,130920,130921,130928],{},[2410,130922,130923,130925],{},[2456,130924,54000],{"align":25785},[2456,130926,130927],{"align":25785},"百分数|由浮点数和单位标识符组成的长度值",[2410,130929,130930,130933],{},[2456,130931,130932],{"align":25785},"position",[2456,130934,130935],{"align":25785},"top|center|bottom|left|center|right 方位名词",[19,130937,130938],{},"其他说明：",[19,130940,130941],{},"①参数是方位名词",[19,130943,130944],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130946,130947],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130949,130950],{},"②参数是精确单位",[19,130952,130953],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130955,130956],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130958,130959],{},"③参数是混合单位",[19,130961,130962],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[889,130964,130966],{"id":130965},"_825-背景图片固定","8.2.5 背景图片固定",[66,130968,130970],{"className":128572,"code":130969,"language":128574,"meta":71,"style":71},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[73,130971,130972,130977,130983,130995,130999,131004,131010,131020],{"__ignoreMap":71},[76,130973,130974],{"class":78,"line":79},[76,130975,130976],{"class":540},"\u002F* 背景滚动（默认） *\u002F\n",[76,130978,130979,130981],{"class":78,"line":94},[76,130980,53643],{"class":53332},[76,130982,17623],{"class":90},[76,130984,130985,130988,130990,130993],{"class":78,"line":133},[76,130986,130987],{"class":119},"  background-attachment",[76,130989,53469],{"class":90},[76,130991,130992],{"class":119},"scroll",[76,130994,3415],{"class":90},[76,130996,130997],{"class":78,"line":145},[76,130998,3685],{"class":90},[76,131000,131001],{"class":78,"line":152},[76,131002,131003],{"class":540},"\u002F* 背景固定 *\u002F\n",[76,131005,131006,131008],{"class":78,"line":157},[76,131007,53643],{"class":53332},[76,131009,17623],{"class":90},[76,131011,131012,131014,131016,131018],{"class":78,"line":246},[76,131013,130987],{"class":119},[76,131015,53469],{"class":90},[76,131017,88257],{"class":119},[76,131019,3415],{"class":90},[76,131021,131022],{"class":78,"line":251},[76,131023,3685],{"class":90},[2404,131025,131026,131035],{},[2407,131027,131028],{},[2410,131029,131030,131033],{},[2413,131031,131032],{"align":25785},"参数",[2413,131034,104718],{"align":25785},[2451,131036,131037,131044],{},[2410,131038,131039,131041],{},[2456,131040,130992],{"align":25785},[2456,131042,131043],{"align":25785},"背景图像是随对象内容滚动",[2410,131045,131046,131048],{},[2456,131047,88257],{"align":25785},[2456,131049,131050],{"align":25785},"背景图像固定",[889,131052,131054],{"id":131053},"_826-背景样式合写","8.2.6 背景样式合写",[66,131056,131058],{"className":128572,"code":131057,"language":128574,"meta":71,"style":71},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[73,131059,131060,131065,131071,131099],{"__ignoreMap":71},[76,131061,131062],{"class":78,"line":79},[76,131063,131064],{"class":540},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[76,131066,131067,131069],{"class":78,"line":94},[76,131068,53643],{"class":53332},[76,131070,17623],{"class":90},[76,131072,131073,131075,131077,131079,131082,131084,131086,131088,131090,131093,131095,131097],{"class":78,"line":133},[76,131074,72638],{"class":119},[76,131076,53469],{"class":90},[76,131078,62870],{"class":119},[76,131080,131081],{"class":119}," url",[76,131083,123],{"class":90},[76,131085,130670],{"class":7296},[76,131087,15767],{"class":90},[76,131089,63764],{"class":119},[76,131091,131092],{"class":119}," fixed",[76,131094,19193],{"class":119},[76,131096,130839],{"class":119},[76,131098,3415],{"class":90},[76,131100,131101],{"class":78,"line":145},[76,131102,3685],{"class":90},[889,131104,131106],{"id":131105},"_827-背景色半透明","8.2.7 背景色半透明",[66,131108,131110],{"className":128572,"code":131109,"language":128574,"meta":71,"style":71},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[73,131111,131112,131118,131144],{"__ignoreMap":71},[76,131113,131114,131116],{"class":78,"line":79},[76,131115,53643],{"class":53332},[76,131117,17623],{"class":90},[76,131119,131120,131122,131124,131126,131128,131130,131132,131134,131136,131138,131140,131142],{"class":78,"line":94},[76,131121,72638],{"class":119},[76,131123,53469],{"class":90},[76,131125,57141],{"class":119},[76,131127,123],{"class":90},[76,131129,1294],{"class":119},[76,131131,405],{"class":90},[76,131133,1294],{"class":119},[76,131135,405],{"class":90},[76,131137,1294],{"class":119},[76,131139,405],{"class":90},[76,131141,102543],{"class":119},[76,131143,4807],{"class":90},[76,131145,131146],{"class":78,"line":133},[76,131147,3685],{"class":90},[19,131149,101418],{},[19,131151,131152],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131154,131155],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131157,131158],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131160,131161],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[889,131163,131165],{"id":131164},"_828-总结","8.2.8 总结",[2404,131167,131168,131179],{},[2407,131169,131170],{},[2410,131171,131172,131175,131177],{},[2413,131173,131174],{"align":25785},"属性",[2413,131176,104718],{"align":25785},[2413,131178,2419],{"align":25785},[2451,131180,131181,131192,131203,131214,131225,131236,131247],{},[2410,131182,131183,131186,131189],{},[2456,131184,131185],{"align":25785},"background-color",[2456,131187,131188],{"align":25785},"背景颜色",[2456,131190,131191],{"align":25785},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2410,131193,131194,131197,131200],{},[2456,131195,131196],{"align":25785},"background-image",[2456,131198,131199],{"align":25785},"背景图片",[2456,131201,131202],{"align":25785},"url(图片路径)",[2410,131204,131205,131208,131211],{},[2456,131206,131207],{"align":25785},"background-repeat",[2456,131209,131210],{"align":25785},"是否平铺",[2456,131212,131213],{"align":25785},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2410,131215,131216,131219,131222],{},[2456,131217,131218],{"align":25785},"background-position",[2456,131220,131221],{"align":25785},"背景位置",[2456,131223,131224],{"align":25785},"length\u002Fposition 分别是x和y坐标",[2410,131226,131227,131230,131233],{},[2456,131228,131229],{"align":25785},"background-attachment",[2456,131231,131232],{"align":25785},"背景附着",[2456,131234,131235],{"align":25785},"scroll(背景滚动) \u002Ffixed (背景固定)",[2410,131237,131238,131241,131244],{},[2456,131239,131240],{"align":25785},"背景简写",[2456,131242,131243],{"align":25785},"书写更简单",[2456,131245,131246],{"align":25785},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2410,131248,131249,131252,131255],{},[2456,131250,131251],{"align":25785},"背景半透明",[2456,131253,131254],{"align":25785},"背景颜色半透明",[2456,131256,131257],{"align":25785},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131259,131260],{},"颜色渐变：",[3583,131262],{"style":128428,"src":131263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3583,131265],{"style":128428,"src":131266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[889,131268,131270],{"id":131269},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[66,131272,131274],{"className":129319,"code":131273,"language":129321,"meta":71,"style":71},"\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",[73,131275,131276,131291,131310,131329,131348,131367,131386],{"__ignoreMap":71},[76,131277,131278,131280,131282,131284,131286,131289],{"class":78,"line":79},[76,131279,584],{"class":90},[76,131281,53643],{"class":53332},[76,131283,55518],{"class":86},[76,131285,370],{"class":90},[76,131287,131288],{"class":126},"\"nav\"",[76,131290,53339],{"class":90},[76,131292,131293,131295,131297,131299,131301,131303,131306,131308],{"class":78,"line":94},[76,131294,54176],{"class":90},[76,131296,2503],{"class":53332},[76,131298,63085],{"class":86},[76,131300,370],{"class":90},[76,131302,63090],{"class":126},[76,131304,131305],{"class":90},">五彩导航1\u003C\u002F",[76,131307,2503],{"class":53332},[76,131309,53339],{"class":90},[76,131311,131312,131314,131316,131318,131320,131322,131325,131327],{"class":78,"line":133},[76,131313,54176],{"class":90},[76,131315,2503],{"class":53332},[76,131317,63085],{"class":86},[76,131319,370],{"class":90},[76,131321,63090],{"class":126},[76,131323,131324],{"class":90},">五彩导航2\u003C\u002F",[76,131326,2503],{"class":53332},[76,131328,53339],{"class":90},[76,131330,131331,131333,131335,131337,131339,131341,131344,131346],{"class":78,"line":145},[76,131332,54176],{"class":90},[76,131334,2503],{"class":53332},[76,131336,63085],{"class":86},[76,131338,370],{"class":90},[76,131340,63090],{"class":126},[76,131342,131343],{"class":90},">五彩导航3\u003C\u002F",[76,131345,2503],{"class":53332},[76,131347,53339],{"class":90},[76,131349,131350,131352,131354,131356,131358,131360,131363,131365],{"class":78,"line":152},[76,131351,54176],{"class":90},[76,131353,2503],{"class":53332},[76,131355,63085],{"class":86},[76,131357,370],{"class":90},[76,131359,63090],{"class":126},[76,131361,131362],{"class":90},">五彩导航4\u003C\u002F",[76,131364,2503],{"class":53332},[76,131366,53339],{"class":90},[76,131368,131369,131371,131373,131375,131377,131379,131382,131384],{"class":78,"line":157},[76,131370,54176],{"class":90},[76,131372,2503],{"class":53332},[76,131374,63085],{"class":86},[76,131376,370],{"class":90},[76,131378,63090],{"class":126},[76,131380,131381],{"class":90},">五彩导航5\u003C\u002F",[76,131383,2503],{"class":53332},[76,131385,53339],{"class":90},[76,131387,131388,131390,131392],{"class":78,"line":246},[76,131389,53817],{"class":90},[76,131391,53643],{"class":53332},[76,131393,53339],{"class":90},[66,131395,131397],{"className":128572,"code":131396,"language":128574,"meta":71,"style":71},".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",[73,131398,131399,131408,131418,131430,131442,131452,131464,131474,131478,131503,131526,131549,131572],{"__ignoreMap":71},[76,131400,131401,131404,131406],{"class":78,"line":79},[76,131402,131403],{"class":86},".nav",[76,131405,3519],{"class":53332},[76,131407,17623],{"class":90},[76,131409,131410,131412,131414,131416],{"class":78,"line":94},[76,131411,130188],{"class":119},[76,131413,53469],{"class":90},[76,131415,74410],{"class":119},[76,131417,3415],{"class":90},[76,131419,131420,131422,131424,131426,131428],{"class":78,"line":133},[76,131421,72595],{"class":119},[76,131423,53469],{"class":90},[76,131425,3075],{"class":119},[76,131427,53524],{"class":82},[76,131429,3415],{"class":90},[76,131431,131432,131434,131436,131438,131440],{"class":78,"line":145},[76,131433,72815],{"class":119},[76,131435,53469],{"class":90},[76,131437,3114],{"class":119},[76,131439,53524],{"class":82},[76,131441,3415],{"class":90},[76,131443,131444,131446,131448,131450],{"class":78,"line":152},[76,131445,72553],{"class":119},[76,131447,53469],{"class":90},[76,131449,53624],{"class":119},[76,131451,3415],{"class":90},[76,131453,131454,131456,131458,131460,131462],{"class":78,"line":157},[76,131455,129256],{"class":119},[76,131457,53469],{"class":90},[76,131459,3114],{"class":119},[76,131461,53524],{"class":82},[76,131463,3415],{"class":90},[76,131465,131466,131468,131470,131472],{"class":78,"line":246},[76,131467,72932],{"class":119},[76,131469,53469],{"class":90},[76,131471,62870],{"class":119},[76,131473,3415],{"class":90},[76,131475,131476],{"class":78,"line":251},[76,131477,3685],{"class":90},[76,131479,131480,131482,131484,131487,131489,131491,131494,131496,131498,131500],{"class":78,"line":257},[76,131481,131403],{"class":86},[76,131483,3519],{"class":53332},[76,131485,131486],{"class":86},":nth-child",[76,131488,123],{"class":90},[76,131490,669],{"class":119},[76,131492,131493],{"class":90},") { ",[76,131495,131185],{"class":119},[76,131497,53469],{"class":90},[76,131499,130603],{"class":119},[76,131501,131502],{"class":90},"; }\n",[76,131504,131505,131507,131509,131511,131513,131515,131517,131519,131521,131524],{"class":78,"line":641},[76,131506,131403],{"class":86},[76,131508,3519],{"class":53332},[76,131510,131486],{"class":86},[76,131512,123],{"class":90},[76,131514,2345],{"class":119},[76,131516,131493],{"class":90},[76,131518,131185],{"class":119},[76,131520,53469],{"class":90},[76,131522,131523],{"class":119},"#ff0000",[76,131525,131502],{"class":90},[76,131527,131528,131530,131532,131534,131536,131538,131540,131542,131544,131547],{"class":78,"line":646},[76,131529,131403],{"class":86},[76,131531,3519],{"class":53332},[76,131533,131486],{"class":86},[76,131535,123],{"class":90},[76,131537,2339],{"class":119},[76,131539,131493],{"class":90},[76,131541,131185],{"class":119},[76,131543,53469],{"class":90},[76,131545,131546],{"class":119},"#00a4ff",[76,131548,131502],{"class":90},[76,131550,131551,131553,131555,131557,131559,131561,131563,131565,131567,131570],{"class":78,"line":659},[76,131552,131403],{"class":86},[76,131554,3519],{"class":53332},[76,131556,131486],{"class":86},[76,131558,123],{"class":90},[76,131560,2557],{"class":119},[76,131562,131493],{"class":90},[76,131564,131185],{"class":119},[76,131566,53469],{"class":90},[76,131568,131569],{"class":119},"#ff00ff",[76,131571,131502],{"class":90},[76,131573,131574,131576,131578,131580,131582,131584,131586,131588,131590,131593],{"class":78,"line":1608},[76,131575,131403],{"class":86},[76,131577,3519],{"class":53332},[76,131579,131486],{"class":86},[76,131581,123],{"class":90},[76,131583,2583],{"class":119},[76,131585,131493],{"class":90},[76,131587,131185],{"class":119},[76,131589,53469],{"class":90},[76,131591,131592],{"class":119},"#00ff00",[76,131594,131502],{"class":90},[14,131596,131598],{"id":131597},"_83-css三大特性","8.3 css三大特性",[889,131600,131602],{"id":131601},"_831-层叠性","8.3.1 层叠性",[19,131604,131605],{},"为了解决样式冲突问题",[19,131607,131608],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131610,131611],{},"   ②样式不冲突，不会层叠",[889,131613,131615],{"id":131614},"_832-继承性","8.3.2 继承性",[19,131617,131618],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131620,131621],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[66,131623,131625],{"className":128572,"code":131624,"language":128574,"meta":71,"style":71},"p {\n  color: #333;\n}\n",[73,131626,131627,131633,131643],{"__ignoreMap":71},[76,131628,131629,131631],{"class":78,"line":79},[76,131630,19],{"class":53332},[76,131632,17623],{"class":90},[76,131634,131635,131637,131639,131641],{"class":78,"line":94},[76,131636,72932],{"class":119},[76,131638,53469],{"class":90},[76,131640,64397],{"class":119},[76,131642,3415],{"class":90},[76,131644,131645],{"class":78,"line":133},[76,131646,3685],{"class":90},[3583,131648],{"style":128428,"src":131649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131651,131652],{},"解释：①行高可以跟单位也可以不跟单位",[19,131654,131655],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131657,131658],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131660,131661],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[889,131663,131665],{"id":131664},"_833-优先级","8.3.3 优先级",[26,131667,131668,131671],{},[29,131669,131670],{},"选择器相同，则执行层叠性",[29,131672,131673],{},"选择器不同，则根据选择器权重执行",[2404,131675,131676,131686],{},[2407,131677,131678],{},[2410,131679,131680,131683],{},[2413,131681,131682],{"align":25785},"选择器",[2413,131684,131685],{"align":25785},"选择器权重",[2451,131687,131688,131696,131704,131712,131720,131728],{},[2410,131689,131690,131693],{},[2456,131691,131692],{"align":25785},"继承 或者*",[2456,131694,131695],{"align":25785},"0，0，0，0",[2410,131697,131698,131701],{},[2456,131699,131700],{"align":25785},"标签选择器",[2456,131702,131703],{"align":25785},"0，0，0，1",[2410,131705,131706,131709],{},[2456,131707,131708],{"align":25785},"类选择器，伪类选择器",[2456,131710,131711],{"align":25785},"0，0，1，0",[2410,131713,131714,131717],{},[2456,131715,131716],{"align":25785},"ID选择器",[2456,131718,131719],{"align":25785},"0，1，0，0",[2410,131721,131722,131725],{},[2456,131723,131724],{"align":25785},"行内样式",[2456,131726,131727],{"align":25785},"1，0，0，0",[2410,131729,131730,131733],{},[2456,131731,131732],{"align":25785},"！important",[2456,131734,131735],{"align":25785},"无穷大",[19,131737,131738],{},"! important用法：",[66,131740,131742],{"className":128572,"code":131741,"language":128574,"meta":71,"style":71},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[73,131743,131744,131749,131755,131768,131772,131777,131783,131793],{"__ignoreMap":71},[76,131745,131746],{"class":78,"line":79},[76,131747,131748],{"class":540},"\u002F* !important 拥有最高优先级 *\u002F\n",[76,131750,131751,131753],{"class":78,"line":94},[76,131752,53643],{"class":53332},[76,131754,17623],{"class":90},[76,131756,131757,131759,131761,131763,131766],{"class":78,"line":133},[76,131758,72932],{"class":119},[76,131760,53469],{"class":90},[76,131762,53677],{"class":119},[76,131764,131765],{"class":82}," !important",[76,131767,3415],{"class":90},[76,131769,131770],{"class":78,"line":145},[76,131771,3685],{"class":90},[76,131773,131774],{"class":78,"line":152},[76,131775,131776],{"class":540},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[76,131778,131779,131781],{"class":78,"line":157},[76,131780,53643],{"class":53332},[76,131782,17623],{"class":90},[76,131784,131785,131787,131789,131791],{"class":78,"line":246},[76,131786,72932],{"class":119},[76,131788,53469],{"class":90},[76,131790,59451],{"class":119},[76,131792,3415],{"class":90},[76,131794,131795],{"class":78,"line":251},[76,131796,3685],{"class":90},[19,131798,131799],{},"优先级注意点：",[19,131801,131802],{},"①权重是有4组数字组成,但是不会有进位",[19,131804,131805],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131807,131808],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131810,131811],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131813,131814],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131816,131817],{},"⑥复合选择器",[2404,131819,131820,131830],{},[2407,131821,131822],{},[2410,131823,131824,131827],{},[2413,131825,131826],{"align":25785},"div ul li",[2413,131828,131829],{"align":25785},"0,0,0,3",[2451,131831,131832,131840,131848],{},[2410,131833,131834,131837],{},[2456,131835,131836],{"align":25785},".nav ul li",[2456,131838,131839],{"align":25785},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2410,131841,131842,131845],{},[2456,131843,131844],{"align":25785},"a:hover",[2456,131846,131847],{"align":25785},"0,0,1,1",[2410,131849,131850,131853],{},[2456,131851,131852],{"align":25785},".nav a",[2456,131854,131847],{"align":25785},[2178,131856,131857],{},"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":71,"searchDepth":94,"depth":94,"links":131859},[131860,131868,131879],{"id":129968,"depth":94,"text":129969,"children":131861},[131862,131863,131864,131865,131866,131867],{"id":129981,"depth":133,"text":129982},{"id":130053,"depth":133,"text":130054},{"id":130125,"depth":133,"text":130126},{"id":130156,"depth":133,"text":130157},{"id":130163,"depth":133,"text":130164},{"id":130316,"depth":133,"text":130317},{"id":130624,"depth":94,"text":130625,"children":131869},[131870,131871,131872,131873,131874,131875,131876,131877,131878],{"id":130631,"depth":133,"text":130632},{"id":130641,"depth":133,"text":130642},{"id":130737,"depth":133,"text":130738},{"id":130810,"depth":133,"text":130811},{"id":130965,"depth":133,"text":130966},{"id":131053,"depth":133,"text":131054},{"id":131105,"depth":133,"text":131106},{"id":131164,"depth":133,"text":131165},{"id":131269,"depth":133,"text":131270},{"id":131597,"depth":94,"text":131598,"children":131880},[131881,131882,131883],{"id":131601,"depth":133,"text":131602},{"id":131614,"depth":133,"text":131615},{"id":131664,"depth":133,"text":131665},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129960,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131890,"title":131891,"body":131892,"description":2201,"extension":2202,"meta":133482,"navigation":148,"path":133483,"seo":133484,"stem":133485,"__hash__":133486},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131893,"toc":133461},[131894,131897,131901,131904,131907,131910,131913,131916,131919,131922,131926,131934,131971,132007,132010,132024,132029,132063,132066,132159,132164,132167,132197,132200,132205,132213,132217,132224,132270,132314,132319,132322,132325,132328,132331,132334,132337,132339,132342,132346,132351,132395,132400,132403,132406,132443,132448,132451,132454,132457,132460,132492,132495,132498,132501,132533,132536,132539,132542,132546,132549,132581,132584,132588,132608,132611,132619,132622,132626,132631,132634,132666,132671,132674,132712,132716,132721,132724,132727,132758,132761,132778,132783,132835,132895,132900,132954,132992,132996,133000,133003,133007,133015,133018,133020,133031,133036,133084,133118,133121,133124,133127,133130,133174,133177,133180,133183,133186,133189,133192,133236,133239,133242,133245,133248,133251,133254,133260,133263,133307,133310,133313,133316,133319,133322,133366,133369,133371,133374,133378,133382,133420,133424,133427,133430,133434,133442,133446,133449,133452,133455,133458],[10,131895,131891],{"id":131896},"_9-css盒模型浮动与切图",[14,131898,131900],{"id":131899},"_91-盒子模型","9.1 盒子模型",[19,131902,131903],{},"利用盒子来设计网页",[19,131905,131906],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131908,131909],{},"网页布局设置：",[19,131911,131912],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131914,131915],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131917,131918],{},"③往盒子里装内容",[3583,131920],{"style":128428,"src":131921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[889,131923,131925],{"id":131924},"_911-边框border","9.1.1 边框（border）",[26,131927,131928,131931],{},[29,131929,131930],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131932,131933],{},"语法",[66,131935,131937],{"className":128572,"code":131936,"language":128574,"meta":71,"style":71},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[73,131938,131939,131944,131950,131967],{"__ignoreMap":71},[76,131940,131941],{"class":78,"line":79},[76,131942,131943],{"class":540},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[76,131945,131946,131948],{"class":78,"line":94},[76,131947,53643],{"class":53332},[76,131949,17623],{"class":90},[76,131951,131952,131954,131956,131958,131960,131962,131965],{"class":78,"line":133},[76,131953,72923],{"class":119},[76,131955,53469],{"class":90},[76,131957,669],{"class":119},[76,131959,53524],{"class":82},[76,131961,53553],{"class":119},[76,131963,131964],{"class":119}," #ccc",[76,131966,3415],{"class":90},[76,131968,131969],{"class":78,"line":145},[76,131970,3685],{"class":90},[2404,131972,131973,131981],{},[2407,131974,131975],{},[2410,131976,131977,131979],{},[2413,131978,131174],{"align":25785},[2413,131980,104718],{"align":25785},[2451,131982,131983,131991,131999],{},[2410,131984,131985,131988],{},[2456,131986,131987],{"align":25785},"border-width",[2456,131989,131990],{"align":25785},"定义边框粗细，单位是px",[2410,131992,131993,131996],{},[2456,131994,131995],{"align":25785},"border-style",[2456,131997,131998],{"align":25785},"边框的样式",[2410,132000,132001,132004],{},[2456,132002,132003],{"align":25785},"border-color",[2456,132005,132006],{"align":25785},"边框的颜色",[19,132008,132009],{},"边框样式 border-style 可以设置如下值：",[3261,132011,132012,132015,132018,132021],{},[29,132013,132014],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,132016,132017],{},"solid：边框为单实线(最为常用的)",[29,132019,132020],{},"dashed：边框为虚线",[29,132022,132023],{},"dotted：边框为点线",[26,132025,132026],{"start":133},[29,132027,132028],{},"边框的合写分写",[66,132030,132031],{"className":128572,"code":131936,"language":128574,"meta":71,"style":71},[73,132032,132033,132037,132043,132059],{"__ignoreMap":71},[76,132034,132035],{"class":78,"line":79},[76,132036,131943],{"class":540},[76,132038,132039,132041],{"class":78,"line":94},[76,132040,53643],{"class":53332},[76,132042,17623],{"class":90},[76,132044,132045,132047,132049,132051,132053,132055,132057],{"class":78,"line":133},[76,132046,72923],{"class":119},[76,132048,53469],{"class":90},[76,132050,669],{"class":119},[76,132052,53524],{"class":82},[76,132054,53553],{"class":119},[76,132056,131964],{"class":119},[76,132058,3415],{"class":90},[76,132060,132061],{"class":78,"line":145},[76,132062,3685],{"class":90},[19,132064,132065],{},"边框分开写法：",[66,132067,132069],{"className":128572,"code":132068,"language":128574,"meta":71,"style":71},"\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",[73,132070,132071,132076,132082,132100,132118,132137,132155],{"__ignoreMap":71},[76,132072,132073],{"class":78,"line":79},[76,132074,132075],{"class":540},"\u002F* 边框分开写法 *\u002F\n",[76,132077,132078,132080],{"class":78,"line":94},[76,132079,53643],{"class":53332},[76,132081,17623],{"class":90},[76,132083,132084,132087,132089,132091,132093,132095,132098],{"class":78,"line":133},[76,132085,132086],{"class":119},"  border-top",[76,132088,53469],{"class":90},[76,132090,669],{"class":119},[76,132092,53524],{"class":82},[76,132094,53553],{"class":119},[76,132096,132097],{"class":119}," #000",[76,132099,3415],{"class":90},[76,132101,132102,132105,132107,132109,132111,132113,132116],{"class":78,"line":145},[76,132103,132104],{"class":119},"  border-right",[76,132106,53469],{"class":90},[76,132108,2345],{"class":119},[76,132110,53524],{"class":82},[76,132112,64269],{"class":119},[76,132114,132115],{"class":119}," #333",[76,132117,3415],{"class":90},[76,132119,132120,132123,132125,132127,132129,132132,132135],{"class":78,"line":152},[76,132121,132122],{"class":119},"  border-bottom",[76,132124,53469],{"class":90},[76,132126,2339],{"class":119},[76,132128,53524],{"class":82},[76,132130,132131],{"class":119}," dotted",[76,132133,132134],{"class":119}," #666",[76,132136,3415],{"class":90},[76,132138,132139,132142,132144,132146,132148,132150,132153],{"class":78,"line":157},[76,132140,132141],{"class":119},"  border-left",[76,132143,53469],{"class":90},[76,132145,669],{"class":119},[76,132147,53524],{"class":82},[76,132149,53553],{"class":119},[76,132151,132152],{"class":119}," #999",[76,132154,3415],{"class":90},[76,132156,132157],{"class":78,"line":246},[76,132158,3685],{"class":90},[26,132160,132161],{"start":145},[29,132162,132163],{},"表格的细线边框",[19,132165,132166],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[66,132168,132170],{"className":128572,"code":132169,"language":128574,"meta":71,"style":71},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[73,132171,132172,132177,132183,132193],{"__ignoreMap":71},[76,132173,132174],{"class":78,"line":79},[76,132175,132176],{"class":540},"\u002F* 表格细线边框合并 *\u002F\n",[76,132178,132179,132181],{"class":78,"line":94},[76,132180,2404],{"class":53332},[76,132182,17623],{"class":90},[76,132184,132185,132187,132189,132191],{"class":78,"line":133},[76,132186,72605],{"class":119},[76,132188,53469],{"class":90},[76,132190,67063],{"class":119},[76,132192,3415],{"class":90},[76,132194,132195],{"class":78,"line":145},[76,132196,3685],{"class":90},[19,132198,132199],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,132201,132202],{"start":152},[29,132203,132204],{},"解决边框额外增加盒子的实际大小的方法：",[3261,132206,132207,132210],{},[29,132208,132209],{},"测量盒子大小的时候,不量边框",[29,132211,132212],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[889,132214,132216],{"id":132215},"_912-内边距","9.1.2 内边距",[26,132218,132219,132222],{},[29,132220,132221],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,132223,131933],{},[2404,132225,132226,132236],{},[2407,132227,132228],{},[2410,132229,132230,132233],{},[2413,132231,132232],{"align":25785},"值的个数",[2413,132234,132235],{"align":25785},"表达意思",[2451,132237,132238,132246,132254,132262],{},[2410,132239,132240,132243],{},[2456,132241,132242],{"align":25785},"padding: 5px;",[2456,132244,132245],{"align":25785},"1个值，代表上下左右都有5个元素",[2410,132247,132248,132251],{},[2456,132249,132250],{"align":25785},"padding: 5px 10px;",[2456,132252,132253],{"align":25785},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2410,132255,132256,132259],{},[2456,132257,132258],{"align":25785},"padding: 5px 10px 20px;",[2456,132260,132261],{"align":25785},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2410,132263,132264,132267],{},[2456,132265,132266],{"align":25785},"padding: 5px 10px 20px 30px;",[2456,132268,132269],{"align":25785},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2404,132271,132272,132280],{},[2407,132273,132274],{},[2410,132275,132276,132278],{},[2413,132277,131174],{"align":25785},[2413,132279,104718],{"align":25785},[2451,132281,132282,132290,132298,132306],{},[2410,132283,132284,132287],{},[2456,132285,132286],{"align":25785},"padding-left",[2456,132288,132289],{"align":25785},"左内边距",[2410,132291,132292,132295],{},[2456,132293,132294],{"align":25785},"padding-right",[2456,132296,132297],{"align":25785},"右内边距",[2410,132299,132300,132303],{},[2456,132301,132302],{"align":25785},"padding-top",[2456,132304,132305],{"align":25785},"上内边距",[2410,132307,132308,132311],{},[2456,132309,132310],{"align":25785},"padding-bottom",[2456,132312,132313],{"align":25785},"下内边距",[26,132315,132316],{"start":133},[29,132317,132318],{},"内边距会影响盒子的实际大小",[19,132320,132321],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132323,132324],{},"①内容和边框有了距离，添加了内边距",[19,132326,132327],{},"②padding影响了盒子实际大小",[19,132329,132330],{},"内边距对盒子大小的影响：",[19,132332,132333],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132335,132336],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132338,97244],{},[19,132340,132341],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[889,132343,132345],{"id":132344},"_913-外边距","9.1.3 外边距",[26,132347,132348],{},[29,132349,132350],{},"控制盒子与盒子之间的距离",[2404,132352,132353,132361],{},[2407,132354,132355],{},[2410,132356,132357,132359],{},[2413,132358,131174],{"align":25785},[2413,132360,104718],{"align":25785},[2451,132362,132363,132371,132379,132387],{},[2410,132364,132365,132368],{},[2456,132366,132367],{"align":25785},"margin-left",[2456,132369,132370],{"align":25785},"左外边距",[2410,132372,132373,132376],{},[2456,132374,132375],{"align":25785},"margin-right",[2456,132377,132378],{"align":25785},"右外边距",[2410,132380,132381,132384],{},[2456,132382,132383],{"align":25785},"margin-top",[2456,132385,132386],{"align":25785},"上外边距",[2410,132388,132389,132392],{},[2456,132390,132391],{"align":25785},"margin-bottom",[2456,132393,132394],{"align":25785},"下外边距",[26,132396,132397],{"start":94},[29,132398,132399],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132401,132402],{},"①盒子必须指定了宽度（width）",[19,132404,132405],{},"②盒子左右的外边距都设置为 auto",[66,132407,132409],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,132410,132411,132416,132423,132439],{"__ignoreMap":71},[76,132412,132413],{"class":78,"line":79},[76,132414,132415],{"class":540},"\u002F* margin 复合写法（同上） *\u002F\n",[76,132417,132418,132421],{"class":78,"line":94},[76,132419,132420],{"class":86},".box",[76,132422,17623],{"class":90},[76,132424,132425,132427,132429,132431,132433,132436],{"class":78,"line":133},[76,132426,72497],{"class":119},[76,132428,53469],{"class":90},[76,132430,1294],{"class":119},[76,132432,53588],{"class":119},[76,132434,132435],{"class":90},";  ",[76,132437,132438],{"class":540},"\u002F* 块级盒子水平居中 *\u002F\n",[76,132440,132441],{"class":78,"line":145},[76,132442,3685],{"class":90},[26,132444,132445],{"start":133},[29,132446,132447],{},"外边距塌陷问题",[19,132449,132450],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3583,132452],{"style":128428,"src":132453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132455,132456],{},"解决方案：",[19,132458,132459],{},"①可以为父亲元素定义上边距",[66,132461,132462],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,132463,132464,132468,132474,132488],{"__ignoreMap":71},[76,132465,132466],{"class":78,"line":79},[76,132467,132415],{"class":540},[76,132469,132470,132472],{"class":78,"line":94},[76,132471,132420],{"class":86},[76,132473,17623],{"class":90},[76,132475,132476,132478,132480,132482,132484,132486],{"class":78,"line":133},[76,132477,72497],{"class":119},[76,132479,53469],{"class":90},[76,132481,1294],{"class":119},[76,132483,53588],{"class":119},[76,132485,132435],{"class":90},[76,132487,132438],{"class":540},[76,132489,132490],{"class":78,"line":145},[76,132491,3685],{"class":90},[19,132493,132494],{},"②可以为父亲元素定义上内边距",[19,132496,132497],{},"③可以为父亲元素添加overflow:hidden",[3583,132499],{"style":128428,"src":132500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[66,132502,132503],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,132504,132505,132509,132515,132529],{"__ignoreMap":71},[76,132506,132507],{"class":78,"line":79},[76,132508,132415],{"class":540},[76,132510,132511,132513],{"class":78,"line":94},[76,132512,132420],{"class":86},[76,132514,17623],{"class":90},[76,132516,132517,132519,132521,132523,132525,132527],{"class":78,"line":133},[76,132518,72497],{"class":119},[76,132520,53469],{"class":90},[76,132522,1294],{"class":119},[76,132524,53588],{"class":119},[76,132526,132435],{"class":90},[76,132528,132438],{"class":540},[76,132530,132531],{"class":78,"line":145},[76,132532,3685],{"class":90},[3583,132534],{"style":128428,"src":132535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132537,132538],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132540,132541],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[889,132543,132545],{"id":132544},"_914-清除内外边距","9.1.4 清除内外边距",[19,132547,132548],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[66,132550,132551],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,132552,132553,132557,132563,132577],{"__ignoreMap":71},[76,132554,132555],{"class":78,"line":79},[76,132556,132415],{"class":540},[76,132558,132559,132561],{"class":78,"line":94},[76,132560,132420],{"class":86},[76,132562,17623],{"class":90},[76,132564,132565,132567,132569,132571,132573,132575],{"class":78,"line":133},[76,132566,72497],{"class":119},[76,132568,53469],{"class":90},[76,132570,1294],{"class":119},[76,132572,53588],{"class":119},[76,132574,132435],{"class":90},[76,132576,132438],{"class":540},[76,132578,132579],{"class":78,"line":145},[76,132580,3685],{"class":90},[19,132582,132583],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[889,132585,132587],{"id":132586},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3261,132589,132590,132593,132596,132599,132602,132605],{},[29,132591,132592],{},"文件→打开 ：可以打开我们要测量的图片",[29,132594,132595],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,132597,132598],{},"右击标尺，把里面的单位改为像素",[29,132600,132601],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,132603,132604],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,132606,132607],{},"用选区拖动 可以测量大小",[3583,132609],{"style":128428,"src":132610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3261,132612,132613,132616],{},[29,132614,132615],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,132617,132618],{},"吸管取色工具",[3583,132620],{"style":128428,"src":132621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[889,132623,132625],{"id":132624},"_916-案例","9.1.6 案例",[26,132627,132628],{},[29,132629,132630],{},"小米商品",[3583,132632],{"style":128428,"src":132633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[66,132635,132636],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,132637,132638,132642,132648,132662],{"__ignoreMap":71},[76,132639,132640],{"class":78,"line":79},[76,132641,132415],{"class":540},[76,132643,132644,132646],{"class":78,"line":94},[76,132645,132420],{"class":86},[76,132647,17623],{"class":90},[76,132649,132650,132652,132654,132656,132658,132660],{"class":78,"line":133},[76,132651,72497],{"class":119},[76,132653,53469],{"class":90},[76,132655,1294],{"class":119},[76,132657,53588],{"class":119},[76,132659,132435],{"class":90},[76,132661,132438],{"class":540},[76,132663,132664],{"class":78,"line":145},[76,132665,3685],{"class":90},[26,132667,132668],{"start":94},[29,132669,132670],{},"快报模块",[3583,132672],{"style":128428,"src":132673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[66,132675,132677],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[73,132678,132679,132684,132699,132704],{"__ignoreMap":71},[76,132680,132681],{"class":78,"line":79},[76,132682,132683],{"class":540},"\u003C!-- HTML 代码示例 -->\n",[76,132685,132686,132688,132690,132692,132694,132697],{"class":78,"line":94},[76,132687,584],{"class":90},[76,132689,53643],{"class":53332},[76,132691,55518],{"class":86},[76,132693,370],{"class":90},[76,132695,132696],{"class":126},"\"example\"",[76,132698,53339],{"class":90},[76,132700,132701],{"class":78,"line":133},[76,132702,132703],{"class":90},"  示例内容\n",[76,132705,132706,132708,132710],{"class":78,"line":145},[76,132707,53817],{"class":90},[76,132709,53643],{"class":53332},[76,132711,53339],{"class":90},[889,132713,132715],{"id":132714},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,132717,132718],{},[29,132719,132720],{},"圆角边框",[19,132722,132723],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3583,132725],{"style":128428,"src":132726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[66,132728,132730],{"className":128572,"code":132729,"language":128574,"meta":71,"style":71},"div {\n  border: 1px solid #ccc;\n}\n",[73,132731,132732,132738,132754],{"__ignoreMap":71},[76,132733,132734,132736],{"class":78,"line":79},[76,132735,53643],{"class":53332},[76,132737,17623],{"class":90},[76,132739,132740,132742,132744,132746,132748,132750,132752],{"class":78,"line":94},[76,132741,72923],{"class":119},[76,132743,53469],{"class":90},[76,132745,669],{"class":119},[76,132747,53524],{"class":82},[76,132749,53553],{"class":119},[76,132751,131964],{"class":119},[76,132753,3415],{"class":90},[76,132755,132756],{"class":78,"line":133},[76,132757,3685],{"class":90},[19,132759,132760],{},"解释:",[3261,132762,132763,132766,132769,132772,132775],{},[29,132764,132765],{},"参数值可以为数值或百分比的形式",[29,132767,132768],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,132770,132771],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,132773,132774],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,132776,132777],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132779,132780],{"start":94},[29,132781,132782],{},"盒子阴影",[66,132784,132786],{"className":128572,"code":132785,"language":128574,"meta":71,"style":71},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[73,132787,132788,132794,132831],{"__ignoreMap":71},[76,132789,132790,132792],{"class":78,"line":79},[76,132791,53643],{"class":53332},[76,132793,17623],{"class":90},[76,132795,132796,132799,132801,132803,132805,132807,132809,132811,132813,132815,132817,132819,132821,132823,132825,132827,132829],{"class":78,"line":94},[76,132797,132798],{"class":119},"  box-shadow",[76,132800,53469],{"class":90},[76,132802,1294],{"class":119},[76,132804,16807],{"class":119},[76,132806,53524],{"class":82},[76,132808,4134],{"class":119},[76,132810,53524],{"class":82},[76,132812,80792],{"class":119},[76,132814,123],{"class":90},[76,132816,1294],{"class":119},[76,132818,405],{"class":90},[76,132820,1294],{"class":119},[76,132822,405],{"class":90},[76,132824,1294],{"class":119},[76,132826,405],{"class":90},[76,132828,88234],{"class":119},[76,132830,4807],{"class":90},[76,132832,132833],{"class":78,"line":133},[76,132834,3685],{"class":90},[2404,132836,132837,132845],{},[2407,132838,132839],{},[2410,132840,132841,132843],{},[2413,132842,2419],{"align":25785},[2413,132844,29538],{"align":25785},[2451,132846,132847,132855,132863,132871,132879,132887],{},[2410,132848,132849,132852],{},[2456,132850,132851],{"align":25785},"h-shadow",[2456,132853,132854],{"align":25785},"必需,水平阴影的位置,允许负值",[2410,132856,132857,132860],{},[2456,132858,132859],{"align":25785},"v-shadow",[2456,132861,132862],{"align":25785},"必需,垂直阴影的位置,允许负值",[2410,132864,132865,132868],{},[2456,132866,132867],{"align":25785},"blur",[2456,132869,132870],{"align":25785},"可选,模糊距离,就是影子的虚实",[2410,132872,132873,132876],{},[2456,132874,132875],{"align":25785},"spread",[2456,132877,132878],{"align":25785},"可选,阴影尺寸",[2410,132880,132881,132884],{},[2456,132882,132883],{"align":25785},"color",[2456,132885,132886],{"align":25785},"可选,阴影的颜色",[2410,132888,132889,132892],{},[2456,132890,132891],{"align":25785},"inset",[2456,132893,132894],{"align":25785},"可选,将外部阴影(outset)改为内部阴影",[26,132896,132897],{"start":133},[29,132898,132899],{},"文字阴影",[66,132901,132903],{"className":128572,"code":132902,"language":128574,"meta":71,"style":71},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[73,132904,132905,132911,132950],{"__ignoreMap":71},[76,132906,132907,132909],{"class":78,"line":79},[76,132908,19],{"class":53332},[76,132910,17623],{"class":90},[76,132912,132913,132916,132918,132920,132922,132924,132926,132928,132930,132932,132934,132936,132938,132940,132942,132944,132946,132948],{"class":78,"line":94},[76,132914,132915],{"class":119},"  text-shadow",[76,132917,53469],{"class":90},[76,132919,669],{"class":119},[76,132921,53524],{"class":82},[76,132923,27168],{"class":119},[76,132925,53524],{"class":82},[76,132927,16807],{"class":119},[76,132929,53524],{"class":82},[76,132931,80792],{"class":119},[76,132933,123],{"class":90},[76,132935,1294],{"class":119},[76,132937,405],{"class":90},[76,132939,1294],{"class":119},[76,132941,405],{"class":90},[76,132943,1294],{"class":119},[76,132945,405],{"class":90},[76,132947,102543],{"class":119},[76,132949,4807],{"class":90},[76,132951,132952],{"class":78,"line":133},[76,132953,3685],{"class":90},[2404,132955,132956,132964],{},[2407,132957,132958],{},[2410,132959,132960,132962],{},[2413,132961,2419],{"align":25785},[2413,132963,29538],{"align":25785},[2451,132965,132966,132972,132979,132986],{},[2410,132967,132968,132970],{},[2456,132969,132851],{"align":25785},[2456,132971,132854],{"align":25785},[2410,132973,132974,132976],{},[2456,132975,132859],{"align":25785},[2456,132977,132978],{"align":25785},"必需,垂直阴影位置,允许负值",[2410,132980,132981,132983],{},[2456,132982,132867],{"align":25785},[2456,132984,132985],{"align":25785},"可选,模糊的距离",[2410,132987,132988,132990],{},[2456,132989,132883],{"align":25785},[2456,132991,132886],{"align":25785},[14,132993,132995],{"id":132994},"_92-浮动","9.2 浮动",[889,132997,132999],{"id":132998},"_921-浮动介绍","9.2.1 浮动介绍",[19,133001,133002],{},"在16.2中详细介绍",[889,133004,133006],{"id":133005},"_922-清除浮动","9.2.2 清除浮动",[26,133008,133009,133012],{},[29,133010,133011],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,133013,133014],{},"清除浮动的本质",[19,133016,133017],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133019,163],{},[3261,133021,133022,133025,133028],{},[29,133023,133024],{},"如果父盒子本身有高度，则不需要清除浮动",[29,133026,133027],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,133029,133030],{},"父级有了高度，就不会影响下面的标准流了",[26,133032,133033],{"start":133},[29,133034,133035],{},"清除浮动样式",[66,133037,133039],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[73,133040,133041,133048,133059,133063,133070,133080],{"__ignoreMap":71},[76,133042,133043,133046],{"class":78,"line":79},[76,133044,133045],{"class":86},".left",[76,133047,17623],{"class":90},[76,133049,133050,133053,133055,133057],{"class":78,"line":94},[76,133051,133052],{"class":119},"  float",[76,133054,53469],{"class":90},[76,133056,25785],{"class":119},[76,133058,3415],{"class":90},[76,133060,133061],{"class":78,"line":133},[76,133062,3685],{"class":90},[76,133064,133065,133068],{"class":78,"line":145},[76,133066,133067],{"class":86},".right",[76,133069,17623],{"class":90},[76,133071,133072,133074,133076,133078],{"class":78,"line":152},[76,133073,133052],{"class":119},[76,133075,53469],{"class":90},[76,133077,74549],{"class":119},[76,133079,3415],{"class":90},[76,133081,133082],{"class":78,"line":157},[76,133083,3685],{"class":90},[2404,133085,133086,133094],{},[2407,133087,133088],{},[2410,133089,133090,133092],{},[2413,133091,129036],{"align":25785},[2413,133093,29538],{"align":25785},[2451,133095,133096,133103,133110],{},[2410,133097,133098,133100],{},[2456,133099,25785],{"align":25785},[2456,133101,133102],{"align":25785},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2410,133104,133105,133107],{},[2456,133106,74549],{"align":25785},[2456,133108,133109],{"align":25785},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2410,133111,133112,133115],{},[2456,133113,133114],{"align":25785},"both",[2456,133116,133117],{"align":25785},"同时清除左右侧浮动的影响",[19,133119,133120],{},"法一",[19,133122,133123],{},"额外标签法也称为隔墙法",[19,133125,133126],{},"使用方式：",[19,133128,133129],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[66,133131,133132],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,133133,133134,133140,133150,133154,133160,133170],{"__ignoreMap":71},[76,133135,133136,133138],{"class":78,"line":79},[76,133137,133045],{"class":86},[76,133139,17623],{"class":90},[76,133141,133142,133144,133146,133148],{"class":78,"line":94},[76,133143,133052],{"class":119},[76,133145,53469],{"class":90},[76,133147,25785],{"class":119},[76,133149,3415],{"class":90},[76,133151,133152],{"class":78,"line":133},[76,133153,3685],{"class":90},[76,133155,133156,133158],{"class":78,"line":145},[76,133157,133067],{"class":86},[76,133159,17623],{"class":90},[76,133161,133162,133164,133166,133168],{"class":78,"line":152},[76,133163,133052],{"class":119},[76,133165,53469],{"class":90},[76,133167,74549],{"class":119},[76,133169,3415],{"class":90},[76,133171,133172],{"class":78,"line":157},[76,133173,3685],{"class":90},[19,133175,133176],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133178,133179],{},"优点： 通俗易懂，书写方便",[19,133181,133182],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133184,133185],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133187,133188],{},"法二",[19,133190,133191],{},"父级添加overflow属性",[66,133193,133194],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,133195,133196,133202,133212,133216,133222,133232],{"__ignoreMap":71},[76,133197,133198,133200],{"class":78,"line":79},[76,133199,133045],{"class":86},[76,133201,17623],{"class":90},[76,133203,133204,133206,133208,133210],{"class":78,"line":94},[76,133205,133052],{"class":119},[76,133207,53469],{"class":90},[76,133209,25785],{"class":119},[76,133211,3415],{"class":90},[76,133213,133214],{"class":78,"line":133},[76,133215,3685],{"class":90},[76,133217,133218,133220],{"class":78,"line":145},[76,133219,133067],{"class":86},[76,133221,17623],{"class":90},[76,133223,133224,133226,133228,133230],{"class":78,"line":152},[76,133225,133052],{"class":119},[76,133227,53469],{"class":90},[76,133229,74549],{"class":119},[76,133231,3415],{"class":90},[76,133233,133234],{"class":78,"line":157},[76,133235,3685],{"class":90},[19,133237,133238],{},"overflow: hidden;",[19,133240,133241],{},"优点：代码简洁",[19,133243,133244],{},"缺点：无法显示溢出的部分",[19,133246,133247],{},"注意：是给父元素添加代码",[19,133249,133250],{},"法三",[19,133252,133253],{},"父级添加after伪元素",[19,133255,133256,133259],{},[133257,133258],"after",{}," 方式是额外标签法的升级版",[19,133261,133262],{},"使用的时候复制就可以",[66,133264,133265],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,133266,133267,133273,133283,133287,133293,133303],{"__ignoreMap":71},[76,133268,133269,133271],{"class":78,"line":79},[76,133270,133045],{"class":86},[76,133272,17623],{"class":90},[76,133274,133275,133277,133279,133281],{"class":78,"line":94},[76,133276,133052],{"class":119},[76,133278,53469],{"class":90},[76,133280,25785],{"class":119},[76,133282,3415],{"class":90},[76,133284,133285],{"class":78,"line":133},[76,133286,3685],{"class":90},[76,133288,133289,133291],{"class":78,"line":145},[76,133290,133067],{"class":86},[76,133292,17623],{"class":90},[76,133294,133295,133297,133299,133301],{"class":78,"line":152},[76,133296,133052],{"class":119},[76,133298,53469],{"class":90},[76,133300,74549],{"class":119},[76,133302,3415],{"class":90},[76,133304,133305],{"class":78,"line":157},[76,133306,3685],{"class":90},[19,133308,133309],{},"优点：没有增加标签，结构更简单",[19,133311,133312],{},"缺点：照顾低版本浏览器",[19,133314,133315],{},"代表网站： 百度、淘宝网、网易等",[19,133317,133318],{},"法四",[19,133320,133321],{},"父级添加双伪元素",[66,133323,133324],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,133325,133326,133332,133342,133346,133352,133362],{"__ignoreMap":71},[76,133327,133328,133330],{"class":78,"line":79},[76,133329,133045],{"class":86},[76,133331,17623],{"class":90},[76,133333,133334,133336,133338,133340],{"class":78,"line":94},[76,133335,133052],{"class":119},[76,133337,53469],{"class":90},[76,133339,25785],{"class":119},[76,133341,3415],{"class":90},[76,133343,133344],{"class":78,"line":133},[76,133345,3685],{"class":90},[76,133347,133348,133350],{"class":78,"line":145},[76,133349,133067],{"class":86},[76,133351,17623],{"class":90},[76,133353,133354,133356,133358,133360],{"class":78,"line":152},[76,133355,133052],{"class":119},[76,133357,53469],{"class":90},[76,133359,74549],{"class":119},[76,133361,3415],{"class":90},[76,133363,133364],{"class":78,"line":157},[76,133365,3685],{"class":90},[19,133367,133368],{},"优点：代码更简洁",[19,133370,133312],{},[19,133372,133373],{},"代表网站：小米、腾讯等",[14,133375,133377],{"id":133376},"_93-ps切图","9.3 PS切图",[889,133379,133381],{"id":133380},"_931-常见图片格式","9.3.1 常见图片格式",[2404,133383,133384,133394],{},[2407,133385,133386],{},[2410,133387,133388,133391],{},[2413,133389,133390],{"align":25785},"jpg图像格式",[2413,133392,133393],{"align":25785},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2451,133395,133396,133404,133412],{},[2410,133397,133398,133401],{},[2456,133399,133400],{"align":25785},"gif图像格式",[2456,133402,133403],{"align":25785},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2410,133405,133406,133409],{},[2456,133407,133408],{"align":25785},"png图像格式",[2456,133410,133411],{"align":25785},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2410,133413,133414,133417],{},[2456,133415,133416],{"align":25785},"PSD图像格式",[2456,133418,133419],{"align":25785},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[889,133421,133423],{"id":133422},"_932-图层切图","9.3.2 图层切图",[19,133425,133426],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133428,133429],{},"按住shift选中两个图层->图层菜单->合并图层",[889,133431,133433],{"id":133432},"_933-切片切图","9.3.3 切片切图",[3261,133435,133436,133439],{},[29,133437,133438],{},"利用切片工具手动划出",[29,133440,133441],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[889,133443,133445],{"id":133444},"_934-切图步骤","9.3.4 切图步骤",[19,133447,133448],{},"用切片工具选中：",[3583,133450],{"style":128428,"src":133451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133453,133454],{},"文件 -> 导出",[3583,133456],{"style":128428,"src":133457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2178,133459,133460],{},"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":71,"searchDepth":94,"depth":94,"links":133462},[133463,133472,133476],{"id":131899,"depth":94,"text":131900,"children":133464},[133465,133466,133467,133468,133469,133470,133471],{"id":131924,"depth":133,"text":131925},{"id":132215,"depth":133,"text":132216},{"id":132344,"depth":133,"text":132345},{"id":132544,"depth":133,"text":132545},{"id":132586,"depth":133,"text":132587},{"id":132624,"depth":133,"text":132625},{"id":132714,"depth":133,"text":132715},{"id":132994,"depth":94,"text":132995,"children":133473},[133474,133475],{"id":132998,"depth":133,"text":132999},{"id":133005,"depth":133,"text":133006},{"id":133376,"depth":94,"text":133377,"children":133477},[133478,133479,133480,133481],{"id":133380,"depth":133,"text":133381},{"id":133422,"depth":133,"text":133423},{"id":133432,"depth":133,"text":133433},{"id":133444,"depth":133,"text":133445},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131891,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133488,"title":133489,"body":133490,"description":2201,"extension":2202,"meta":134131,"navigation":148,"path":134132,"seo":134133,"stem":134134,"__hash__":134135},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133491,"toc":134119},[133492,133495,133499,133525,133559,133563,133567,133570,133612,133619,133629,133637,133639,133642,133645,133648,133655,133669,133673,133676,133705,133709,133712,133726,133730,133733,133761,133765,133768,133794,133798,133803,133836,133841,133869,133873,133890,133936,133941,133985,134002,134109,134117],[10,133493,133489],{"id":133494},"_10-css规范与学成在线案例",[14,133496,133498],{"id":133497},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,133500,133501,133507,133513,133519],{},[29,133502,133503,133506],{},[2416,133504,133505],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,133508,133509,133512],{},[2416,133510,133511],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,133514,133515,133518],{},[2416,133516,133517],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,133520,133521,133524],{},[2416,133522,133523],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[66,133526,133527],{"className":128572,"code":131936,"language":128574,"meta":71,"style":71},[73,133528,133529,133533,133539,133555],{"__ignoreMap":71},[76,133530,133531],{"class":78,"line":79},[76,133532,131943],{"class":540},[76,133534,133535,133537],{"class":78,"line":94},[76,133536,53643],{"class":53332},[76,133538,17623],{"class":90},[76,133540,133541,133543,133545,133547,133549,133551,133553],{"class":78,"line":133},[76,133542,72923],{"class":119},[76,133544,53469],{"class":90},[76,133546,669],{"class":119},[76,133548,53524],{"class":82},[76,133550,53553],{"class":119},[76,133552,131964],{"class":119},[76,133554,3415],{"class":90},[76,133556,133557],{"class":78,"line":145},[76,133558,3685],{"class":90},[14,133560,133562],{"id":133561},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[889,133564,133566],{"id":133565},"_1021-header头部制作","10.2.1 header头部制作",[3583,133568],{"style":128428,"src":133569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3261,133571,133572,133579,133586,133592,133599,133606],{},[29,133573,133574,133575,133578],{},"1号是版心盒子 ",[2416,133576,133577],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,133580,133581,133582,133585],{},"版心盒子 里面包含 2号盒子 ",[2416,133583,133584],{},"logo"," 图标",[29,133587,133588,133589,133591],{},"版心盒子 里面包含 3号盒子 ",[2416,133590,55745],{}," 导航栏",[29,133593,133594,133595,133598],{},"版心盒子 里面包含 4号盒子 ",[2416,133596,133597],{},"search"," 搜索框",[29,133600,133601,133602,133605],{},"版心盒子 里面包含 5号盒子 ",[2416,133603,133604],{},"user"," 个人信息",[29,133607,133608,133609],{},"注意，要求里面的 ",[2416,133610,133611],{},"4个子盒子 必须都浮动",[26,133613,133614],{},[29,133615,133616],{},[2416,133617,133618],{},"导航栏注意点:",[19,133620,133621,133622,133625,133626],{},"实际开发中， ",[2416,133623,133624],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2416,133627,133628],{},"用 li 包含链接(li+a)的做法",[3261,133630,133631,133634],{},[29,133632,133633],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,133635,133636],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133638,163],{},[19,133640,133641],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133643,133644],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133646,133647],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,133649,133650],{"start":94},[29,133651,133652],{},[2416,133653,133654],{},"4号盒子search的细节：",[3261,133656,133657,133660,133663],{},[29,133658,133659],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,133661,133662],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,133664,133665,133668],{},[73,133666,133667],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[889,133670,133672],{"id":133671},"_1022-banner制作","10.2.2 banner制作",[3583,133674],{"style":128428,"src":133675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3261,133677,133678,133685,133691,133698],{},[29,133679,133680,133681,133684],{},"1号盒子是通栏的大盒子 ",[2416,133682,133683],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,133686,133687,133688,133690],{},"2号盒子是版心 ",[2416,133689,3053],{}," ， 要水平居中对齐",[29,133692,133693,133694,133697],{},"3号盒子版心内，左对齐 ",[2416,133695,133696],{},"subnav"," 侧导航栏",[29,133699,133700,133701,133704],{},"4号盒子版心内，右对齐 ",[2416,133702,133703],{},"course"," 课程",[889,133706,133708],{"id":133707},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3583,133710],{"style":128428,"src":133711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3261,133713,133714,133717,133720,133723],{},[29,133715,133716],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,133718,133719],{},"1号盒子是标题 H3 左侧浮动",[29,133721,133722],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,133724,133725],{},"3号盒子 右浮动 mod 修改",[889,133727,133729],{"id":133728},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3583,133731],{"style":128428,"src":133732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3261,133734,133735,133741,133748,133755,133758],{},[29,133736,133737,133738,133740],{},"1号盒子为最大的盒子 ",[2416,133739,55746],{}," 版心水平居中对齐",[29,133742,133743,133744,133747],{},"2号盒子为上面部分 ",[2416,133745,133746],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,133749,133750,133751,133754],{},"3号盒子为底下部分 ",[2416,133752,133753],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,133756,133757],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,133759,133760],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[889,133762,133764],{"id":133763},"_1025-底部模块制作","10.2.5 底部模块制作",[3583,133766],{"style":128428,"src":133767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3261,133769,133770,133777,133780,133787],{},[29,133771,133772,133773,133776],{},"1号盒子通栏大盒子 底部 ",[2416,133774,133775],{},"footer"," 给高度 底色是白色",[29,133778,133779],{},"2号盒子版心水平居中",[29,133781,133782,133783,133786],{},"3号盒子版权 ",[2416,133784,133785],{},"copyright"," 左对齐",[29,133788,133789,133790,133793],{},"4号盒子 链接组 ",[2416,133791,133792],{},"links"," 右对齐",[889,133795,133797],{"id":133796},"_1026-代码模块","10.2.6 代码模块",[26,133799,133800],{},[29,133801,133802],{},"html部分",[66,133804,133806],{"className":129319,"code":133805,"language":129321,"meta":71,"style":71},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[73,133807,133808],{"__ignoreMap":71},[76,133809,133810,133812,133814,133816,133818,133821,133824,133826,133829,133832,133834],{"class":78,"line":79},[76,133811,584],{"class":90},[76,133813,2503],{"class":53332},[76,133815,63085],{"class":86},[76,133817,370],{"class":90},[76,133819,133820],{"class":126},"\"https:\u002F\u002Fexample.com\"",[76,133822,133823],{"class":86}," target",[76,133825,370],{"class":90},[76,133827,133828],{"class":126},"\"_blank\"",[76,133830,133831],{"class":90},">链接文字\u003C\u002F",[76,133833,2503],{"class":53332},[76,133835,53339],{"class":90},[26,133837,133838],{"start":94},[29,133839,133840],{},"css部分",[66,133842,133843],{"className":129319,"code":133805,"language":129321,"meta":71,"style":71},[73,133844,133845],{"__ignoreMap":71},[76,133846,133847,133849,133851,133853,133855,133857,133859,133861,133863,133865,133867],{"class":78,"line":79},[76,133848,584],{"class":90},[76,133850,2503],{"class":53332},[76,133852,63085],{"class":86},[76,133854,370],{"class":90},[76,133856,133820],{"class":126},[76,133858,133823],{"class":86},[76,133860,370],{"class":90},[76,133862,133828],{"class":126},[76,133864,133831],{"class":90},[76,133866,2503],{"class":53332},[76,133868,53339],{"class":90},[889,133870,133872],{"id":133871},"_1027-收获","10.2.7 收获",[26,133874,133875,133878,133881,133884,133887],{},[29,133876,133877],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133879,133880],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133882,133883],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133885,133886],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133888,133889],{},"遗忘代码",[66,133891,133893],{"className":128572,"code":133892,"language":128574,"meta":71,"style":71},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[73,133894,133895,133917,133922,133932],{"__ignoreMap":71},[76,133896,133897,133899,133901,133903,133905,133907,133909,133911,133913,133915],{"class":78,"line":79},[76,133898,53643],{"class":53332},[76,133900,405],{"class":90},[76,133902,19],{"class":53332},[76,133904,405],{"class":90},[76,133906,10],{"class":53332},[76,133908,405],{"class":90},[76,133910,3261],{"class":53332},[76,133912,405],{"class":90},[76,133914,29],{"class":53332},[76,133916,17623],{"class":90},[76,133918,133919],{"class":78,"line":94},[76,133920,133921],{"class":540},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[76,133923,133924,133926,133928,133930],{"class":78,"line":133},[76,133925,130188],{"class":119},[76,133927,53469],{"class":90},[76,133929,62897],{"class":119},[76,133931,3415],{"class":90},[76,133933,133934],{"class":78,"line":145},[76,133935,3685],{"class":90},[26,133937,133938],{"start":157},[29,133939,133940],{},"html引css的程序",[66,133942,133943],{"className":128572,"code":133892,"language":128574,"meta":71,"style":71},[73,133944,133945,133967,133971,133981],{"__ignoreMap":71},[76,133946,133947,133949,133951,133953,133955,133957,133959,133961,133963,133965],{"class":78,"line":79},[76,133948,53643],{"class":53332},[76,133950,405],{"class":90},[76,133952,19],{"class":53332},[76,133954,405],{"class":90},[76,133956,10],{"class":53332},[76,133958,405],{"class":90},[76,133960,3261],{"class":53332},[76,133962,405],{"class":90},[76,133964,29],{"class":53332},[76,133966,17623],{"class":90},[76,133968,133969],{"class":78,"line":94},[76,133970,133921],{"class":540},[76,133972,133973,133975,133977,133979],{"class":78,"line":133},[76,133974,130188],{"class":119},[76,133976,53469],{"class":90},[76,133978,62897],{"class":119},[76,133980,3415],{"class":90},[76,133982,133983],{"class":78,"line":145},[76,133984,3685],{"class":90},[26,133986,133987,133990,133993,133996,133999],{"start":246},[29,133988,133989],{},"浮动的盒子不会有外边距合并问题",[29,133991,133992],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133994,133995],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133997,133998],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,134000,134001],{},"在写选择器时尽量写全一些，例如",[66,134003,134005],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},"\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",[73,134006,134007,134012,134028,134033,134048,134053,134068,134073,134088,134093],{"__ignoreMap":71},[76,134008,134009],{"class":78,"line":79},[76,134010,134011],{"class":540},"\u002F* 静态定位（默认） *\u002F\n",[76,134013,134014,134017,134019,134021,134023,134026],{"class":78,"line":94},[76,134015,134016],{"class":86},".static",[76,134018,81832],{"class":90},[76,134020,130932],{"class":119},[76,134022,53469],{"class":90},[76,134024,134025],{"class":119},"static",[76,134027,131502],{"class":90},[76,134029,134030],{"class":78,"line":133},[76,134031,134032],{"class":540},"\u002F* 相对定位 *\u002F\n",[76,134034,134035,134038,134040,134042,134044,134046],{"class":78,"line":145},[76,134036,134037],{"class":86},".relative",[76,134039,81832],{"class":90},[76,134041,130932],{"class":119},[76,134043,53469],{"class":90},[76,134045,56795],{"class":119},[76,134047,131502],{"class":90},[76,134049,134050],{"class":78,"line":152},[76,134051,134052],{"class":540},"\u002F* 绝对定位 *\u002F\n",[76,134054,134055,134058,134060,134062,134064,134066],{"class":78,"line":157},[76,134056,134057],{"class":86},".absolute",[76,134059,81832],{"class":90},[76,134061,130932],{"class":119},[76,134063,53469],{"class":90},[76,134065,56862],{"class":119},[76,134067,131502],{"class":90},[76,134069,134070],{"class":78,"line":246},[76,134071,134072],{"class":540},"\u002F* 固定定位 *\u002F\n",[76,134074,134075,134078,134080,134082,134084,134086],{"class":78,"line":251},[76,134076,134077],{"class":86},".fixed",[76,134079,81832],{"class":90},[76,134081,130932],{"class":119},[76,134083,53469],{"class":90},[76,134085,88257],{"class":119},[76,134087,131502],{"class":90},[76,134089,134090],{"class":78,"line":257},[76,134091,134092],{"class":540},"\u002F* 粘性定位 *\u002F\n",[76,134094,134095,134098,134100,134102,134104,134107],{"class":78,"line":641},[76,134096,134097],{"class":86},".sticky",[76,134099,81832],{"class":90},[76,134101,130932],{"class":119},[76,134103,53469],{"class":90},[76,134105,134106],{"class":119},"sticky",[76,134108,131502],{"class":90},[26,134110,134111,134114],{"start":659},[29,134112,134113],{},"一定要用好注释",[29,134115,134116],{},"浮动的盒子不会有外边距合并的问题",[2178,134118,133460],{},{"title":71,"searchDepth":94,"depth":94,"links":134120},[134121,134122],{"id":133497,"depth":94,"text":133498},{"id":133561,"depth":94,"text":133562,"children":134123},[134124,134125,134126,134127,134128,134129,134130],{"id":133565,"depth":133,"text":133566},{"id":133671,"depth":133,"text":133672},{"id":133707,"depth":133,"text":133708},{"id":133728,"depth":133,"text":133729},{"id":133763,"depth":133,"text":133764},{"id":133796,"depth":133,"text":133797},{"id":133871,"depth":133,"text":133872},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133489,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134137,"title":134138,"body":134139,"description":2201,"extension":2202,"meta":135625,"navigation":148,"path":135626,"seo":135627,"stem":135628,"__hash__":135629},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134140,"toc":135617},[134141,134144,134148,134152,134163,134167,134184,134228,134261,134264,134281,134284,134287,134331,134335,134339,134342,134345,134349,134352,134363,134426,134467,134470,134485,134539,134547,134550,134561,134615,134641,134644,134657,134711,134743,134797,134820,134874,134877,134880,134887,134941,134962,135016,135019,135022,135107,135115,135172,135195,135199,135202,135220,135224,135243,135297,135335,135339,135342,135345,135367,135371,135379,135382,135387,135398,135401,135405,135419,135463,135466,135470,135473,135478,135504,135509,135586,135589,135593,135596,135599,135602,135605,135608,135611,135614],[10,134142,134138],{"id":134143},"_11-传统布局与定位体系",[14,134145,134147],{"id":134146},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[889,134149,134151],{"id":134150},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3261,134153,134154,134157,134160],{},[29,134155,134156],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,134158,134159],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,134161,134162],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[889,134164,134166],{"id":134165},"_1112-浮动","11.1.2 浮动",[3261,134168,134169,134172,134175,134178,134181],{},[29,134170,134171],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,134173,134174],{},"浮动可以改变元素标签默认的排列方式",[29,134176,134177],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,134179,134180],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,134182,134183],{},"在使用行内块转换时盒子之间是有空隙的",[66,134185,134186],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,134187,134188,134194,134204,134208,134214,134224],{"__ignoreMap":71},[76,134189,134190,134192],{"class":78,"line":79},[76,134191,133045],{"class":86},[76,134193,17623],{"class":90},[76,134195,134196,134198,134200,134202],{"class":78,"line":94},[76,134197,133052],{"class":119},[76,134199,53469],{"class":90},[76,134201,25785],{"class":119},[76,134203,3415],{"class":90},[76,134205,134206],{"class":78,"line":133},[76,134207,3685],{"class":90},[76,134209,134210,134212],{"class":78,"line":145},[76,134211,133067],{"class":86},[76,134213,17623],{"class":90},[76,134215,134216,134218,134220,134222],{"class":78,"line":152},[76,134217,133052],{"class":119},[76,134219,53469],{"class":90},[76,134221,74549],{"class":119},[76,134223,3415],{"class":90},[76,134225,134226],{"class":78,"line":157},[76,134227,3685],{"class":90},[2404,134229,134230,134238],{},[2407,134231,134232],{},[2410,134233,134234,134236],{},[2413,134235,129036],{"align":25785},[2413,134237,29538],{"align":25785},[2451,134239,134240,134247,134254],{},[2410,134241,134242,134244],{},[2456,134243,56768],{"align":25785},[2456,134245,134246],{"align":25785},"元素不浮动（默认值）",[2410,134248,134249,134251],{},[2456,134250,25785],{"align":25785},[2456,134252,134253],{"align":25785},"元素向左浮动",[2410,134255,134256,134258],{},[2456,134257,74549],{"align":25785},[2456,134259,134260],{"align":25785},"元素向右浮动",[19,134262,134263],{},"浮动重点：",[3261,134265,134266,134269,134272,134275,134278],{},[29,134267,134268],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,134270,134271],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,134273,134274],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,134276,134277],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,134279,134280],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134282,134283],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134285,134286],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[66,134288,134289],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,134290,134291,134297,134307,134311,134317,134327],{"__ignoreMap":71},[76,134292,134293,134295],{"class":78,"line":79},[76,134294,133045],{"class":86},[76,134296,17623],{"class":90},[76,134298,134299,134301,134303,134305],{"class":78,"line":94},[76,134300,133052],{"class":119},[76,134302,53469],{"class":90},[76,134304,25785],{"class":119},[76,134306,3415],{"class":90},[76,134308,134309],{"class":78,"line":133},[76,134310,3685],{"class":90},[76,134312,134313,134315],{"class":78,"line":145},[76,134314,133067],{"class":86},[76,134316,17623],{"class":90},[76,134318,134319,134321,134323,134325],{"class":78,"line":152},[76,134320,133052],{"class":119},[76,134322,53469],{"class":90},[76,134324,74549],{"class":119},[76,134326,3415],{"class":90},[76,134328,134329],{"class":78,"line":157},[76,134330,3685],{"class":90},[889,134332,134334],{"id":134333},"_1113-定位","11.1.3 定位",[24047,134336,134338],{"id":134337},"_11131-使用场景","11.1.3.1 使用场景",[19,134340,134341],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134343,134344],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24047,134346,134348],{"id":134347},"_11132-定位组成","11.1.3.2 定位组成",[19,134350,134351],{},"定位 = 定位模式 + 边偏移",[26,134353,134354],{},[29,134355,134356,134359,134360],{},[2416,134357,134358],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2416,134361,134362],{},"定位模式",[66,134364,134366],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[73,134367,134368,134374,134388,134405,134422],{"__ignoreMap":71},[76,134369,134370,134372],{"class":78,"line":79},[76,134371,132420],{"class":86},[76,134373,17623],{"class":90},[76,134375,134376,134379,134381,134383,134385],{"class":78,"line":94},[76,134377,134378],{"class":119},"  position",[76,134380,53469],{"class":90},[76,134382,56795],{"class":119},[76,134384,132435],{"class":90},[76,134386,134387],{"class":540},"\u002F* 定位模式 *\u002F\n",[76,134389,134390,134393,134395,134397,134399,134402],{"class":78,"line":133},[76,134391,134392],{"class":119},"  top",[76,134394,53469],{"class":90},[76,134396,402],{"class":119},[76,134398,53524],{"class":82},[76,134400,134401],{"class":90},";           ",[76,134403,134404],{"class":540},"\u002F* 边偏移：上 *\u002F\n",[76,134406,134407,134410,134412,134414,134416,134419],{"class":78,"line":145},[76,134408,134409],{"class":119},"  left",[76,134411,53469],{"class":90},[76,134413,408],{"class":119},[76,134415,53524],{"class":82},[76,134417,134418],{"class":90},";          ",[76,134420,134421],{"class":540},"\u002F* 边偏移：左 *\u002F\n",[76,134423,134424],{"class":78,"line":152},[76,134425,3685],{"class":90},[2404,134427,134428,134437],{},[2407,134429,134430],{},[2410,134431,134432,134434],{},[2413,134433,2419],{"align":25785},[2413,134435,134436],{"align":25785},"语义",[2451,134438,134439,134446,134453,134460],{},[2410,134440,134441,134443],{},[2456,134442,134025],{"align":25785},[2456,134444,134445],{"align":25785},"静态定位",[2410,134447,134448,134450],{},[2456,134449,56795],{"align":25785},[2456,134451,134452],{"align":25785},"相对定位",[2410,134454,134455,134457],{},[2456,134456,56862],{"align":25785},[2456,134458,134459],{"align":25785},"绝对定位",[2410,134461,134462,134464],{},[2456,134463,88257],{"align":25785},[2456,134465,134466],{"align":25785},"固定定位",[19,134468,134469],{},"（1）静态定位：",[3261,134471,134472,134483],{},[29,134473,134474,134475,134478,134479,134482],{},"静态定位是元素的 ",[2416,134476,134477],{},"默认定位方式"," ， ",[2416,134480,134481],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,134484,64],{},[66,134486,134487],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134488,134489,134495,134507,134521,134535],{"__ignoreMap":71},[76,134490,134491,134493],{"class":78,"line":79},[76,134492,132420],{"class":86},[76,134494,17623],{"class":90},[76,134496,134497,134499,134501,134503,134505],{"class":78,"line":94},[76,134498,134378],{"class":119},[76,134500,53469],{"class":90},[76,134502,56795],{"class":119},[76,134504,132435],{"class":90},[76,134506,134387],{"class":540},[76,134508,134509,134511,134513,134515,134517,134519],{"class":78,"line":133},[76,134510,134392],{"class":119},[76,134512,53469],{"class":90},[76,134514,402],{"class":119},[76,134516,53524],{"class":82},[76,134518,134401],{"class":90},[76,134520,134404],{"class":540},[76,134522,134523,134525,134527,134529,134531,134533],{"class":78,"line":145},[76,134524,134409],{"class":119},[76,134526,53469],{"class":90},[76,134528,408],{"class":119},[76,134530,53524],{"class":82},[76,134532,134418],{"class":90},[76,134534,134421],{"class":540},[76,134536,134537],{"class":78,"line":152},[76,134538,3685],{"class":90},[3261,134540,134541,134544],{},[29,134542,134543],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,134545,134546],{},"静态定位在布局时我们几乎不用的",[19,134548,134549],{},"（2）相对定位",[3261,134551,134552,134559],{},[29,134553,134554,134555,134558],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2416,134556,134557],{},"原来的位置"," 来说的（自恋型）",[29,134560,64],{},[66,134562,134563],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134564,134565,134571,134583,134597,134611],{"__ignoreMap":71},[76,134566,134567,134569],{"class":78,"line":79},[76,134568,132420],{"class":86},[76,134570,17623],{"class":90},[76,134572,134573,134575,134577,134579,134581],{"class":78,"line":94},[76,134574,134378],{"class":119},[76,134576,53469],{"class":90},[76,134578,56795],{"class":119},[76,134580,132435],{"class":90},[76,134582,134387],{"class":540},[76,134584,134585,134587,134589,134591,134593,134595],{"class":78,"line":133},[76,134586,134392],{"class":119},[76,134588,53469],{"class":90},[76,134590,402],{"class":119},[76,134592,53524],{"class":82},[76,134594,134401],{"class":90},[76,134596,134404],{"class":540},[76,134598,134599,134601,134603,134605,134607,134609],{"class":78,"line":145},[76,134600,134409],{"class":119},[76,134602,53469],{"class":90},[76,134604,408],{"class":119},[76,134606,53524],{"class":82},[76,134608,134418],{"class":90},[76,134610,134421],{"class":540},[76,134612,134613],{"class":78,"line":152},[76,134614,3685],{"class":90},[3261,134616,134617],{},[29,134618,134619,134620,134622,134623,134625,134626,134629,134630,134633,134634,134636,134637,134640],{},"相对定位的特点：",[55748,134621],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55748,134624],{},"  ② ",[2416,134627,134628],{},"原来"," 在标准流的 ",[2416,134631,134632],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55748,134635],{},"  ③因此， ",[2416,134638,134639],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134642,134643],{},"（3）绝对定位",[3261,134645,134646,134655],{},[29,134647,134648,134650,134651,134654],{},[2416,134649,134459],{}," 是元素在移动位置的时候，是相对于它 ",[2416,134652,134653],{},"祖先元素"," 来说的（拼爹型）",[29,134656,64],{},[66,134658,134659],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134660,134661,134667,134679,134693,134707],{"__ignoreMap":71},[76,134662,134663,134665],{"class":78,"line":79},[76,134664,132420],{"class":86},[76,134666,17623],{"class":90},[76,134668,134669,134671,134673,134675,134677],{"class":78,"line":94},[76,134670,134378],{"class":119},[76,134672,53469],{"class":90},[76,134674,56795],{"class":119},[76,134676,132435],{"class":90},[76,134678,134387],{"class":540},[76,134680,134681,134683,134685,134687,134689,134691],{"class":78,"line":133},[76,134682,134392],{"class":119},[76,134684,53469],{"class":90},[76,134686,402],{"class":119},[76,134688,53524],{"class":82},[76,134690,134401],{"class":90},[76,134692,134404],{"class":540},[76,134694,134695,134697,134699,134701,134703,134705],{"class":78,"line":145},[76,134696,134409],{"class":119},[76,134698,53469],{"class":90},[76,134700,408],{"class":119},[76,134702,53524],{"class":82},[76,134704,134418],{"class":90},[76,134706,134421],{"class":540},[76,134708,134709],{"class":78,"line":152},[76,134710,3685],{"class":90},[3261,134712,134713,134728,134737,134740],{},[29,134714,134715,134716,134718,134719,134721,134722,134724,134725,134727],{},"绝对定位的特点：",[55748,134717],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55748,134720],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55748,134723],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55748,134726],{},"  (4)固定定位",[29,134729,134730,134732,134733,134736],{},[2416,134731,134466],{}," 是元素 ",[2416,134734,134735],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,134738,134739],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,134741,134742],{},"语法:",[66,134744,134745],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134746,134747,134753,134765,134779,134793],{"__ignoreMap":71},[76,134748,134749,134751],{"class":78,"line":79},[76,134750,132420],{"class":86},[76,134752,17623],{"class":90},[76,134754,134755,134757,134759,134761,134763],{"class":78,"line":94},[76,134756,134378],{"class":119},[76,134758,53469],{"class":90},[76,134760,56795],{"class":119},[76,134762,132435],{"class":90},[76,134764,134387],{"class":540},[76,134766,134767,134769,134771,134773,134775,134777],{"class":78,"line":133},[76,134768,134392],{"class":119},[76,134770,53469],{"class":90},[76,134772,402],{"class":119},[76,134774,53524],{"class":82},[76,134776,134401],{"class":90},[76,134778,134404],{"class":540},[76,134780,134781,134783,134785,134787,134789,134791],{"class":78,"line":145},[76,134782,134409],{"class":119},[76,134784,53469],{"class":90},[76,134786,408],{"class":119},[76,134788,53524],{"class":82},[76,134790,134418],{"class":90},[76,134792,134421],{"class":540},[76,134794,134795],{"class":78,"line":152},[76,134796,3685],{"class":90},[3261,134798,134799,134808],{},[29,134800,134801,134802,134804,134805,134807],{},"特点:",[55748,134803],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55748,134806],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134809,134810,134811,134813,134814,134816,134817,134819],{},"固定在版心位置的方法:",[55748,134812],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55748,134815],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55748,134818],{},"  实例：",[66,134821,134822],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134823,134824,134830,134842,134856,134870],{"__ignoreMap":71},[76,134825,134826,134828],{"class":78,"line":79},[76,134827,132420],{"class":86},[76,134829,17623],{"class":90},[76,134831,134832,134834,134836,134838,134840],{"class":78,"line":94},[76,134833,134378],{"class":119},[76,134835,53469],{"class":90},[76,134837,56795],{"class":119},[76,134839,132435],{"class":90},[76,134841,134387],{"class":540},[76,134843,134844,134846,134848,134850,134852,134854],{"class":78,"line":133},[76,134845,134392],{"class":119},[76,134847,53469],{"class":90},[76,134849,402],{"class":119},[76,134851,53524],{"class":82},[76,134853,134401],{"class":90},[76,134855,134404],{"class":540},[76,134857,134858,134860,134862,134864,134866,134868],{"class":78,"line":145},[76,134859,134409],{"class":119},[76,134861,53469],{"class":90},[76,134863,408],{"class":119},[76,134865,53524],{"class":82},[76,134867,134418],{"class":90},[76,134869,134421],{"class":540},[76,134871,134872],{"class":78,"line":152},[76,134873,3685],{"class":90},[3583,134875],{"style":128428,"src":134876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134878,134879],{},"(5)粘性定位",[3261,134881,134882,134885],{},[29,134883,134884],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134886,64],{},[66,134888,134889],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134890,134891,134897,134909,134923,134937],{"__ignoreMap":71},[76,134892,134893,134895],{"class":78,"line":79},[76,134894,132420],{"class":86},[76,134896,17623],{"class":90},[76,134898,134899,134901,134903,134905,134907],{"class":78,"line":94},[76,134900,134378],{"class":119},[76,134902,53469],{"class":90},[76,134904,56795],{"class":119},[76,134906,132435],{"class":90},[76,134908,134387],{"class":540},[76,134910,134911,134913,134915,134917,134919,134921],{"class":78,"line":133},[76,134912,134392],{"class":119},[76,134914,53469],{"class":90},[76,134916,402],{"class":119},[76,134918,53524],{"class":82},[76,134920,134401],{"class":90},[76,134922,134404],{"class":540},[76,134924,134925,134927,134929,134931,134933,134935],{"class":78,"line":145},[76,134926,134409],{"class":119},[76,134928,53469],{"class":90},[76,134930,408],{"class":119},[76,134932,53524],{"class":82},[76,134934,134418],{"class":90},[76,134936,134421],{"class":540},[76,134938,134939],{"class":78,"line":152},[76,134940,3685],{"class":90},[3261,134942,134943],{},[29,134944,134945,134946,134948,134949,134951,134952,134954,134955,134958,134959,134961],{},"粘性定位的特点：",[55748,134947],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55748,134950],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55748,134953],{},"  ③必须添加 top 、left、right、bottom ",[2416,134956,134957],{},"其中一个"," 才有效",[55748,134960],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[66,134963,134964],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,134965,134966,134972,134984,134998,135012],{"__ignoreMap":71},[76,134967,134968,134970],{"class":78,"line":79},[76,134969,132420],{"class":86},[76,134971,17623],{"class":90},[76,134973,134974,134976,134978,134980,134982],{"class":78,"line":94},[76,134975,134378],{"class":119},[76,134977,53469],{"class":90},[76,134979,56795],{"class":119},[76,134981,132435],{"class":90},[76,134983,134387],{"class":540},[76,134985,134986,134988,134990,134992,134994,134996],{"class":78,"line":133},[76,134987,134392],{"class":119},[76,134989,53469],{"class":90},[76,134991,402],{"class":119},[76,134993,53524],{"class":82},[76,134995,134401],{"class":90},[76,134997,134404],{"class":540},[76,134999,135000,135002,135004,135006,135008,135010],{"class":78,"line":145},[76,135001,134409],{"class":119},[76,135003,53469],{"class":90},[76,135005,408],{"class":119},[76,135007,53524],{"class":82},[76,135009,134418],{"class":90},[76,135011,134421],{"class":540},[76,135013,135014],{"class":78,"line":152},[76,135015,3685],{"class":90},[3583,135017],{"style":128428,"src":135018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135020,135021],{},"(6)总结",[2404,135023,135024,135039],{},[2407,135025,135026],{},[2410,135027,135028,135030,135033,135036],{},[2413,135029,134362],{"align":25785},[2413,135031,135032],{"align":25785},"是否脱标",[2413,135034,135035],{"align":25785},"移动位置",[2413,135037,135038],{"align":25785},"是否常用",[2451,135040,135041,135054,135068,135082,135095],{},[2410,135042,135043,135046,135048,135051],{},[2456,135044,135045],{"align":25785},"Static 静态定位",[2456,135047,106700],{"align":25785},[2456,135049,135050],{"align":25785},"不能使用边偏移",[2456,135052,135053],{"align":25785},"很少",[2410,135055,135056,135059,135062,135065],{},[2456,135057,135058],{"align":25785},"Relative 相对定位",[2456,135060,135061],{"align":25785},"否(占有位置)",[2456,135063,135064],{"align":25785},"相对于自身位置移动",[2456,135066,135067],{"align":25785},"基本单独使用",[2410,135069,135070,135073,135076,135079],{},[2456,135071,135072],{"align":25785},"Absolute 绝对定位",[2456,135074,135075],{"align":25785},"是(不占有位置)",[2456,135077,135078],{"align":25785},"带有定位的父级",[2456,135080,135081],{"align":25785},"要和定位父级元素搭配使用",[2410,135083,135084,135087,135089,135092],{},[2456,135085,135086],{"align":25785},"Fixed 固定定位",[2456,135088,135075],{"align":25785},[2456,135090,135091],{"align":25785},"浏览器可视区",[2456,135093,135094],{"align":25785},"单独使用,不需要父级",[2410,135096,135097,135100,135102,135104],{},[2456,135098,135099],{"align":25785},"Sticky 粘性定位",[2456,135101,135061],{"align":25785},[2456,135103,135091],{"align":25785},[2456,135105,135106],{"align":25785},"当前阶段少",[26,135108,135109],{"start":94},[29,135110,135111,135114],{},[2416,135112,135113],{},"边偏移"," 则决定了该元素的最终位置",[2404,135116,135117,135128],{},[2407,135118,135119],{},[2410,135120,135121,135124,135126],{},[2413,135122,135123],{"align":25785},"边偏移属性",[2413,135125,29541],{"align":25785},[2413,135127,29538],{"align":25785},[2451,135129,135130,135141,135152,135162],{},[2410,135131,135132,135135,135138],{},[2456,135133,135134],{"align":25785},"top",[2456,135136,135137],{"align":25785},"top: 80px;",[2456,135139,135140],{"align":25785},"顶端偏移量，定义元素相对于父元素上边线的距离",[2410,135142,135143,135146,135149],{},[2456,135144,135145],{"align":25785},"bottom",[2456,135147,135148],{"align":25785},"bottom: 80px ;",[2456,135150,135151],{"align":25785},"底部偏移量，定义元素相对于其父元素下边线的距离",[2410,135153,135154,135156,135159],{},[2456,135155,25785],{"align":25785},[2456,135157,135158],{"align":25785},"left: 80px ;",[2456,135160,135161],{"align":25785},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2410,135163,135164,135166,135169],{},[2456,135165,74549],{"align":25785},[2456,135167,135168],{"align":25785},"right: 80px ;",[2456,135170,135171],{"align":25785},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3261,135173,135174],{},[29,135175,163,135176,135178,135179,135181,135182,135184,135185,135188,135189,135191,135192,135194],{},[55748,135177],{},"  ① ",[2416,135180,135113],{}," 需要和 ",[2416,135183,134362],{}," 联合使用， ",[2416,135186,135187],{},"单独使用无效"," ；",[55748,135190],{},"  ②top和bottom不要同时使用",[55748,135193],{},"  ③left和right不要同时使用",[24047,135196,135198],{"id":135197},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135200,135201],{},"子级是绝对定位的话，父级要用相对定位",[3261,135203,135204,135207,135210,135213],{},[29,135205,135206],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,135208,135209],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,135211,135212],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,135214,135215,135216,135219],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2416,135217,135218],{},"子绝父绝"," 也会遇到",[24047,135221,135223],{"id":135222},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3261,135225,135226,135241],{},[29,135227,135228,135229,135232,135233,135236,135237,135240],{},"在使用 ",[2416,135230,135231],{},"定位"," 布局时，可能会 ",[2416,135234,135235],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2416,135238,135239],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,135242,64],{},[66,135244,135245],{"className":128572,"code":134365,"language":128574,"meta":71,"style":71},[73,135246,135247,135253,135265,135279,135293],{"__ignoreMap":71},[76,135248,135249,135251],{"class":78,"line":79},[76,135250,132420],{"class":86},[76,135252,17623],{"class":90},[76,135254,135255,135257,135259,135261,135263],{"class":78,"line":94},[76,135256,134378],{"class":119},[76,135258,53469],{"class":90},[76,135260,56795],{"class":119},[76,135262,132435],{"class":90},[76,135264,134387],{"class":540},[76,135266,135267,135269,135271,135273,135275,135277],{"class":78,"line":133},[76,135268,134392],{"class":119},[76,135270,53469],{"class":90},[76,135272,402],{"class":119},[76,135274,53524],{"class":82},[76,135276,134401],{"class":90},[76,135278,134404],{"class":540},[76,135280,135281,135283,135285,135287,135289,135291],{"class":78,"line":145},[76,135282,134409],{"class":119},[76,135284,53469],{"class":90},[76,135286,408],{"class":119},[76,135288,53524],{"class":82},[76,135290,134418],{"class":90},[76,135292,134421],{"class":540},[76,135294,135295],{"class":78,"line":152},[76,135296,3685],{"class":90},[3261,135298,135299],{},[29,135300,135301,135302,135178,135304,135306,135307,129735,135310,84563,135313,135315,135316,135318,135319,135322,135323,135188,135326,135328,135329,135332,135334],{},"z-index的特性",[55748,135303],{},[2416,135305,129036],{}," ： ",[2416,135308,135309],{},"正整数",[2416,135311,135312],{},"负整数",[2416,135314,1294],{}," ，默认值是 0，数值越大，盒子越靠上；",[55748,135317],{},"  ②如果 ",[2416,135320,135321],{},"属性值相同"," ，则按照书写顺序， ",[2416,135324,135325],{},"后来居上",[55748,135327],{},"  ③数字后面 ",[2416,135330,135331],{},"不能加单位",[55748,135333],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24047,135336,135338],{"id":135337},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135340,135341],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135343,135344],{},"方法:",[3261,135346,135347,135357],{},[29,135348,135349,135350,135353,135354],{},"left: 50%; 让 ",[2416,135351,135352],{},"盒子的左侧"," 移动到 ",[2416,135355,135356],{},"父级元素的水平中心位置",[29,135358,135359,135360,135363,135364],{},"margin-left: -100px; 让盒子 ",[2416,135361,135362],{},"向左"," 移动 ",[2416,135365,135366],{},"自身宽度的一半",[24047,135368,135370],{"id":135369},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,135372,135373,135376],{},[29,135374,135375],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,135377,135378],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135380,135381],{},"也就是说绝对定位和固定定位和浮动类似",[26,135383,135384],{"start":133},[29,135385,135386],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3261,135388,135389,135392,135395],{},[29,135390,135391],{},"可以用inline-block 转换为行内块",[29,135393,135394],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,135396,135397],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135399,135400],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24047,135402,135404],{"id":135403},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,135406,135407,135410,135413,135416],{},[29,135408,135409],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,135411,135412],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,135414,135415],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,135417,135418],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[66,135420,135421],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,135422,135423,135429,135439,135443,135449,135459],{"__ignoreMap":71},[76,135424,135425,135427],{"class":78,"line":79},[76,135426,133045],{"class":86},[76,135428,17623],{"class":90},[76,135430,135431,135433,135435,135437],{"class":78,"line":94},[76,135432,133052],{"class":119},[76,135434,53469],{"class":90},[76,135436,25785],{"class":119},[76,135438,3415],{"class":90},[76,135440,135441],{"class":78,"line":133},[76,135442,3685],{"class":90},[76,135444,135445,135447],{"class":78,"line":145},[76,135446,133067],{"class":86},[76,135448,17623],{"class":90},[76,135450,135451,135453,135455,135457],{"class":78,"line":152},[76,135452,133052],{"class":119},[76,135454,53469],{"class":90},[76,135456,74549],{"class":119},[76,135458,3415],{"class":90},[76,135460,135461],{"class":78,"line":157},[76,135462,3685],{"class":90},[3583,135464],{"style":128428,"src":135465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24047,135467,135469],{"id":135468},"_11138-轮播图","11.1.3.8 轮播图",[3583,135471],{"style":128428,"src":135472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,135474,135475],{},[29,135476,135477],{},"制作顺序:",[3261,135479,135480,135483,135486,135495],{},[29,135481,135482],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,135484,135485],{},"里面先放一张图片",[29,135487,135488,135489,135491,135492,135494],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55748,135490],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55748,135493],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,135496,135497,135498,135500,135501,135503],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55748,135499],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55748,135502],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,135505,135506],{"start":94},[29,135507,135508],{},"代码模块",[66,135510,135512],{"className":128572,"code":135511,"language":128574,"meta":71,"style":71},"\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",[73,135513,135514,135519,135526,135536,135546,135556,135560,135565,135572,135582],{"__ignoreMap":71},[76,135515,135516],{"class":78,"line":79},[76,135517,135518],{"class":540},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[76,135520,135521,135524],{"class":78,"line":94},[76,135522,135523],{"class":86},".son",[76,135525,17623],{"class":90},[76,135527,135528,135530,135532,135534],{"class":78,"line":133},[76,135529,134378],{"class":119},[76,135531,53469],{"class":90},[76,135533,56862],{"class":119},[76,135535,3415],{"class":90},[76,135537,135538,135540,135542,135544],{"class":78,"line":145},[76,135539,134392],{"class":119},[76,135541,53469],{"class":90},[76,135543,1294],{"class":119},[76,135545,3415],{"class":90},[76,135547,135548,135550,135552,135554],{"class":78,"line":152},[76,135549,134409],{"class":119},[76,135551,53469],{"class":90},[76,135553,1294],{"class":119},[76,135555,3415],{"class":90},[76,135557,135558],{"class":78,"line":157},[76,135559,3685],{"class":90},[76,135561,135562],{"class":78,"line":246},[76,135563,135564],{"class":540},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[76,135566,135567,135570],{"class":78,"line":251},[76,135568,135569],{"class":86},".father",[76,135571,17623],{"class":90},[76,135573,135574,135576,135578,135580],{"class":78,"line":257},[76,135575,134378],{"class":119},[76,135577,53469],{"class":90},[76,135579,56795],{"class":119},[76,135581,3415],{"class":90},[76,135583,135584],{"class":78,"line":641},[76,135585,3685],{"class":90},[19,135587,135588],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[889,135590,135592],{"id":135591},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3583,135594],{"style":128428,"src":135595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135597,135598],{},"✨ 黄金口诀：",[19,135600,135601],{},"\"TOP正下负上，LEFT正右负左\"",[19,135603,135604],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135606,135607],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135609,135610],{},"✨ 简单记：",[19,135612,135613],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2178,135615,135616],{},"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":71,"searchDepth":94,"depth":94,"links":135618},[135619],{"id":134146,"depth":94,"text":134147,"children":135620},[135621,135622,135623,135624],{"id":134150,"depth":133,"text":134151},{"id":134165,"depth":133,"text":134166},{"id":134333,"depth":133,"text":134334},{"id":135591,"depth":133,"text":135592},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134138,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135631,"title":135632,"body":135633,"description":2201,"extension":2202,"meta":137056,"navigation":148,"path":137057,"seo":137058,"stem":137059,"__hash__":137060},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135634,"toc":137035},[135635,135638,135642,135650,135654,135659,135667,135679,135683,135688,135696,135707,135711,135716,135757,135765,135769,135772,135775,135778,135872,135875,135969,135972,136066,136069,136072,136107,136110,136113,136143,136146,136149,136152,136155,136158,136161,136164,136234,136237,136241,136245,136286,136290,136296,136299,136302,136306,136309,136312,136315,136396,136399,136402,136406,136410,136413,136416,136419,136422,136425,136431,136440,136444,136463,136467,136477,136480,136483,136486,136489,136492,136495,136498,136501,136510,136514,136523,136526,136531,136584,136589,136755,136758,136761,136766,136769,136772,136775,136778,136783,136931,136934,136937,136942,136945,136950,136984,136987,136990,136994,136997,137004,137007,137010,137013,137016,137019,137022,137025,137029,137032],[10,135636,135632],{"id":135637},"_12-显示隐藏与图形资源",[14,135639,135641],{"id":135640},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3261,135643,135644,135647],{},[29,135645,135646],{},"目的:让一个元素在页面中消失或者显示出来",[29,135648,135649],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[889,135651,135653],{"id":135652},"_1211-display-显示","12.1.1 display 显示",[26,135655,135656],{},[29,135657,135658],{},"display 设置或检索对象是否及如何显示",[3261,135660,135661,135664],{},[29,135662,135663],{},"display: none;隐藏对象",[29,135665,135666],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,135668,135669,135676],{"start":94},[29,135670,135671,135672,135675],{},"特点： display 隐藏元素后， ",[2416,135673,135674],{},"不再占"," 有原来的位置",[29,135677,135678],{},"在js中使用非常的广泛",[889,135680,135682],{"id":135681},"_1212-visibility可见性","12.1.2 visibility可见性",[26,135684,135685],{},[29,135686,135687],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3261,135689,135690,135693],{},[29,135691,135692],{},"visibility： visible；元素可见",[29,135694,135695],{},"visibility：hidden；元素隐藏",[26,135697,135698,135701,135704],{"start":94},[29,135699,135700],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,135702,135703],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,135705,135706],{},"隐藏后继续占有原有位置",[889,135708,135710],{"id":135709},"_1213-overflow溢出","12.1.3 overflow溢出",[3261,135712,135713],{},[29,135714,135715],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2404,135717,135718,135726],{},[2407,135719,135720],{},[2410,135721,135722,135724],{},[2413,135723,129036],{"align":25785},[2413,135725,29538],{"align":25785},[2451,135727,135728,135736,135743,135750],{},[2410,135729,135730,135733],{},[2456,135731,135732],{"align":25785},"visible",[2456,135734,135735],{"align":25785},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2410,135737,135738,135740],{},[2456,135739,63742],{"align":25785},[2456,135741,135742],{"align":25785},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2410,135744,135745,135747],{},[2456,135746,130992],{"align":25785},[2456,135748,135749],{"align":25785},"不管超出内容否，总是显示滚动条",[2410,135751,135752,135754],{},[2456,135753,74690],{"align":25785},[2456,135755,135756],{"align":25785},"超出自动显示滚动条，不超出不显示滚动条",[3261,135758,135759,135762],{},[29,135760,135761],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,135763,135764],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[889,135766,135768],{"id":135767},"_1214-案例收获","12.1.4 案例收获",[3583,135770],{"style":128428,"src":135771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135773,135774],{},"问题：没做出来动态效果，使用hover没实现",[19,135776,135777],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[66,135779,135780],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,135781,135782,135786,135800,135804,135818,135822,135836,135840,135854,135858],{"__ignoreMap":71},[76,135783,135784],{"class":78,"line":79},[76,135785,134011],{"class":540},[76,135787,135788,135790,135792,135794,135796,135798],{"class":78,"line":94},[76,135789,134016],{"class":86},[76,135791,81832],{"class":90},[76,135793,130932],{"class":119},[76,135795,53469],{"class":90},[76,135797,134025],{"class":119},[76,135799,131502],{"class":90},[76,135801,135802],{"class":78,"line":133},[76,135803,134032],{"class":540},[76,135805,135806,135808,135810,135812,135814,135816],{"class":78,"line":145},[76,135807,134037],{"class":86},[76,135809,81832],{"class":90},[76,135811,130932],{"class":119},[76,135813,53469],{"class":90},[76,135815,56795],{"class":119},[76,135817,131502],{"class":90},[76,135819,135820],{"class":78,"line":152},[76,135821,134052],{"class":540},[76,135823,135824,135826,135828,135830,135832,135834],{"class":78,"line":157},[76,135825,134057],{"class":86},[76,135827,81832],{"class":90},[76,135829,130932],{"class":119},[76,135831,53469],{"class":90},[76,135833,56862],{"class":119},[76,135835,131502],{"class":90},[76,135837,135838],{"class":78,"line":246},[76,135839,134072],{"class":540},[76,135841,135842,135844,135846,135848,135850,135852],{"class":78,"line":251},[76,135843,134077],{"class":86},[76,135845,81832],{"class":90},[76,135847,130932],{"class":119},[76,135849,53469],{"class":90},[76,135851,88257],{"class":119},[76,135853,131502],{"class":90},[76,135855,135856],{"class":78,"line":257},[76,135857,134092],{"class":540},[76,135859,135860,135862,135864,135866,135868,135870],{"class":78,"line":641},[76,135861,134097],{"class":86},[76,135863,81832],{"class":90},[76,135865,130932],{"class":119},[76,135867,53469],{"class":90},[76,135869,134106],{"class":119},[76,135871,131502],{"class":90},[19,135873,135874],{},"完整代码：",[66,135876,135877],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,135878,135879,135883,135897,135901,135915,135919,135933,135937,135951,135955],{"__ignoreMap":71},[76,135880,135881],{"class":78,"line":79},[76,135882,134011],{"class":540},[76,135884,135885,135887,135889,135891,135893,135895],{"class":78,"line":94},[76,135886,134016],{"class":86},[76,135888,81832],{"class":90},[76,135890,130932],{"class":119},[76,135892,53469],{"class":90},[76,135894,134025],{"class":119},[76,135896,131502],{"class":90},[76,135898,135899],{"class":78,"line":133},[76,135900,134032],{"class":540},[76,135902,135903,135905,135907,135909,135911,135913],{"class":78,"line":145},[76,135904,134037],{"class":86},[76,135906,81832],{"class":90},[76,135908,130932],{"class":119},[76,135910,53469],{"class":90},[76,135912,56795],{"class":119},[76,135914,131502],{"class":90},[76,135916,135917],{"class":78,"line":152},[76,135918,134052],{"class":540},[76,135920,135921,135923,135925,135927,135929,135931],{"class":78,"line":157},[76,135922,134057],{"class":86},[76,135924,81832],{"class":90},[76,135926,130932],{"class":119},[76,135928,53469],{"class":90},[76,135930,56862],{"class":119},[76,135932,131502],{"class":90},[76,135934,135935],{"class":78,"line":246},[76,135936,134072],{"class":540},[76,135938,135939,135941,135943,135945,135947,135949],{"class":78,"line":251},[76,135940,134077],{"class":86},[76,135942,81832],{"class":90},[76,135944,130932],{"class":119},[76,135946,53469],{"class":90},[76,135948,88257],{"class":119},[76,135950,131502],{"class":90},[76,135952,135953],{"class":78,"line":257},[76,135954,134092],{"class":540},[76,135956,135957,135959,135961,135963,135965,135967],{"class":78,"line":641},[76,135958,134097],{"class":86},[76,135960,81832],{"class":90},[76,135962,130932],{"class":119},[76,135964,53469],{"class":90},[76,135966,134106],{"class":119},[76,135968,131502],{"class":90},[19,135970,135971],{},"分布思路重点详解：",[66,135973,135974],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,135975,135976,135980,135994,135998,136012,136016,136030,136034,136048,136052],{"__ignoreMap":71},[76,135977,135978],{"class":78,"line":79},[76,135979,134011],{"class":540},[76,135981,135982,135984,135986,135988,135990,135992],{"class":78,"line":94},[76,135983,134016],{"class":86},[76,135985,81832],{"class":90},[76,135987,130932],{"class":119},[76,135989,53469],{"class":90},[76,135991,134025],{"class":119},[76,135993,131502],{"class":90},[76,135995,135996],{"class":78,"line":133},[76,135997,134032],{"class":540},[76,135999,136000,136002,136004,136006,136008,136010],{"class":78,"line":145},[76,136001,134037],{"class":86},[76,136003,81832],{"class":90},[76,136005,130932],{"class":119},[76,136007,53469],{"class":90},[76,136009,56795],{"class":119},[76,136011,131502],{"class":90},[76,136013,136014],{"class":78,"line":152},[76,136015,134052],{"class":540},[76,136017,136018,136020,136022,136024,136026,136028],{"class":78,"line":157},[76,136019,134057],{"class":86},[76,136021,81832],{"class":90},[76,136023,130932],{"class":119},[76,136025,53469],{"class":90},[76,136027,56862],{"class":119},[76,136029,131502],{"class":90},[76,136031,136032],{"class":78,"line":246},[76,136033,134072],{"class":540},[76,136035,136036,136038,136040,136042,136044,136046],{"class":78,"line":251},[76,136037,134077],{"class":86},[76,136039,81832],{"class":90},[76,136041,130932],{"class":119},[76,136043,53469],{"class":90},[76,136045,88257],{"class":119},[76,136047,131502],{"class":90},[76,136049,136050],{"class":78,"line":257},[76,136051,134092],{"class":540},[76,136053,136054,136056,136058,136060,136062,136064],{"class":78,"line":641},[76,136055,134097],{"class":86},[76,136057,81832],{"class":90},[76,136059,130932],{"class":119},[76,136061,53469],{"class":90},[76,136063,134106],{"class":119},[76,136065,131502],{"class":90},[3583,136067],{"style":128428,"src":136068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136070,136071],{},"图片太大，盒子太小，此时需要修改图片的大小",[66,136073,136075],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[73,136076,136077],{"__ignoreMap":71},[76,136078,136079,136081,136083,136085,136087,136090,136092,136094,136097,136100,136102,136105],{"class":78,"line":79},[76,136080,584],{"class":90},[76,136082,3583],{"class":53332},[76,136084,57270],{"class":86},[76,136086,370],{"class":90},[76,136088,136089],{"class":126},"\"images\u002Fpic.jpg\"",[76,136091,57278],{"class":86},[76,136093,370],{"class":90},[76,136095,136096],{"class":126},"\"描述文字\"",[76,136098,136099],{"class":86}," title",[76,136101,370],{"class":90},[76,136103,136104],{"class":126},"\"悬停提示\"",[76,136106,53339],{"class":90},[3583,136108],{"style":128428,"src":136109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136111,136112],{},"制造遮罩层",[66,136114,136115],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,136116,136117],{"__ignoreMap":71},[76,136118,136119,136121,136123,136125,136127,136129,136131,136133,136135,136137,136139,136141],{"class":78,"line":79},[76,136120,584],{"class":90},[76,136122,3583],{"class":53332},[76,136124,57270],{"class":86},[76,136126,370],{"class":90},[76,136128,136089],{"class":126},[76,136130,57278],{"class":86},[76,136132,370],{"class":90},[76,136134,136096],{"class":126},[76,136136,136099],{"class":86},[76,136138,370],{"class":90},[76,136140,136104],{"class":126},[76,136142,53339],{"class":90},[19,136144,136145],{},"此时是这样的为标准流",[3583,136147],{"style":128428,"src":136148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136150,136151],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136153,136154],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136156,136157],{},"让他在中间，用center(background-position)",[19,136159,136160],{},"将需要变的尽可能放到一个盒子中",[19,136162,136163],{},"放大盒子上内部盒子发生变化",[66,136165,136167],{"className":128572,"code":136166,"language":128574,"meta":71,"style":71},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[73,136168,136169,136175,136185,136189,136196,136206,136218,136230],{"__ignoreMap":71},[76,136170,136171,136173],{"class":78,"line":79},[76,136172,129639],{"class":86},[76,136174,17623],{"class":90},[76,136176,136177,136179,136181,136183],{"class":78,"line":94},[76,136178,134378],{"class":119},[76,136180,53469],{"class":90},[76,136182,56795],{"class":119},[76,136184,3415],{"class":90},[76,136186,136187],{"class":78,"line":133},[76,136188,3685],{"class":90},[76,136190,136191,136194],{"class":78,"line":145},[76,136192,136193],{"class":86},".child",[76,136195,17623],{"class":90},[76,136197,136198,136200,136202,136204],{"class":78,"line":152},[76,136199,134378],{"class":119},[76,136201,53469],{"class":90},[76,136203,56862],{"class":119},[76,136205,3415],{"class":90},[76,136207,136208,136210,136212,136214,136216],{"class":78,"line":157},[76,136209,134392],{"class":119},[76,136211,53469],{"class":90},[76,136213,2915],{"class":119},[76,136215,2592],{"class":82},[76,136217,3415],{"class":90},[76,136219,136220,136222,136224,136226,136228],{"class":78,"line":246},[76,136221,134409],{"class":119},[76,136223,53469],{"class":90},[76,136225,2915],{"class":119},[76,136227,2592],{"class":82},[76,136229,3415],{"class":90},[76,136231,136232],{"class":78,"line":251},[76,136233,3685],{"class":90},[19,136235,136236],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136238,136240],{"id":136239},"_122-精灵图","12.2 精灵图",[889,136242,136244],{"id":136243},"_1221-理解","12.2.1 理解",[26,136246,136247,136265],{},[29,136248,136249,136250,134478,136253,136256,136257,136260,136261,136264],{},"目的： ",[2416,136251,136252],{},"为了有效地减少服务器接收和发送请求的次数",[2416,136254,136255],{},"提高"," 页面的 ",[2416,136258,136259],{},"加载速度"," ，出现了 ",[2416,136262,136263],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,136266,136267,136268,136270,136271,136273,136274,136276,136277,136279,136280,136282,136283,136285],{},"使用精灵图核心：",[55748,136269],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55748,136272],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55748,136275],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55748,136278],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55748,136281],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55748,136284],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[889,136287,136289],{"id":136288},"_1222-扒图","12.2.2 扒图",[66,136291,136294],{"className":136292,"code":136293,"language":7268},[7266],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[73,136295,136293],{"__ignoreMap":71},[3583,136297],{"style":128428,"src":136298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3583,136300],{"style":128428,"src":136301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[889,136303,136305],{"id":136304},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3583,136307],{"style":128428,"src":136308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136310,136311],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3583,136313],{"style":128428,"src":136314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[66,136316,136318],{"className":128572,"code":136317,"language":128574,"meta":71,"style":71},"\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",[73,136319,136320,136325,136332,136344,136356,136375,136392],{"__ignoreMap":71},[76,136321,136322],{"class":78,"line":79},[76,136323,136324],{"class":540},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[76,136326,136327,136330],{"class":78,"line":94},[76,136328,136329],{"class":86},".icon",[76,136331,17623],{"class":90},[76,136333,136334,136336,136338,136340,136342],{"class":78,"line":133},[76,136335,72595],{"class":119},[76,136337,53469],{"class":90},[76,136339,408],{"class":119},[76,136341,53524],{"class":82},[76,136343,3415],{"class":90},[76,136345,136346,136348,136350,136352,136354],{"class":78,"line":145},[76,136347,72815],{"class":119},[76,136349,53469],{"class":90},[76,136351,408],{"class":119},[76,136353,53524],{"class":82},[76,136355,3415],{"class":90},[76,136357,136358,136360,136362,136364,136366,136369,136371,136373],{"class":78,"line":152},[76,136359,72638],{"class":119},[76,136361,53469],{"class":90},[76,136363,63754],{"class":119},[76,136365,123],{"class":90},[76,136367,136368],{"class":7296},"sprites.png",[76,136370,15767],{"class":90},[76,136372,63764],{"class":119},[76,136374,3415],{"class":90},[76,136376,136377,136379,136381,136383,136385,136388,136390],{"class":78,"line":157},[76,136378,130832],{"class":119},[76,136380,53469],{"class":90},[76,136382,53795],{"class":119},[76,136384,53524],{"class":82},[76,136386,136387],{"class":119}," -20",[76,136389,53524],{"class":82},[76,136391,3415],{"class":90},[76,136393,136394],{"class":78,"line":246},[76,136395,3685],{"class":90},[3583,136397],{"style":128428,"src":136398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136400,136401],{},"在前端中坐标轴的正方向是右和下",[14,136403,136405],{"id":136404},"_123-字体图标","12.3 字体图标",[889,136407,136409],{"id":136408},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136411,136412],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136414,136415],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136417,136418],{},"1.图片文件还是比较大的。",[19,136420,136421],{},"2.图片本身放大和缩小会失真。",[19,136423,136424],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136426,136427,136428,27790],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2416,136429,136430],{},"字体图标 iconfont",[19,136432,136433,136436,136437,490],{},[2416,136434,136435],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2416,136438,136439],{},"展示的是图标，本质属于字体",[889,136441,136443],{"id":136442},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3261,136445,136446,136451,136454,136457,136460],{},[29,136447,136448,136450],{},[2416,136449,27926],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,136452,136453],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,136455,136456],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,136458,136459],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,136461,136462],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[889,136464,136466],{"id":136465},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3261,136468,136469],{},[29,136470,136471,136472],{},"icomoon字体库：",[2503,136473,136476],{"href":136474,"rel":136475},"http:\u002F\u002Ficomoon.io\u002F",[25914],"http:\u002F\u002Ficomoon.io",[19,136478,136479],{},"进去之后点icomoon app",[3583,136481],{"style":128428,"src":136482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136484,136485],{},"可以对其编辑：",[3583,136487],{"style":128428,"src":136488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136490,136491],{},"生成字体：",[3583,136493],{"style":128428,"src":136494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136496,136497],{},"下载：",[3583,136499],{"style":128428,"src":136500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3261,136502,136503],{},[29,136504,136505,136506],{},"阿里iconfont字体库： ",[2503,136507,136508],{"href":136508,"rel":136509},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25914],[889,136511,136513],{"id":136512},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,136515,136516],{},[29,136517,136518,136519,136522],{},"把下载包里面的 ",[2416,136520,136521],{},"fonts"," 文件夹放入页面根目录下",[3583,136524],{"style":128428,"src":136525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,136527,136528],{"start":94},[29,136529,136530],{},"字体文件格式",[2404,136532,136533,136542],{},[2407,136534,136535],{},[2410,136536,136537,136540],{},[2413,136538,136539],{"align":25785},"格式",[2413,136541,25789],{"align":25785},[2451,136543,136544,136554,136564,136574],{},[2410,136545,136546,136551],{},[2456,136547,136548],{"align":25785},[2416,136549,136550],{},".ttf",[2456,136552,136553],{"align":25785},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2410,136555,136556,136561],{},[2456,136557,136558],{"align":25785},[2416,136559,136560],{},".woff",[2456,136562,136563],{"align":25785},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2410,136565,136566,136571],{},[2456,136567,136568],{"align":25785},[2416,136569,136570],{},".eot",[2456,136572,136573],{"align":25785},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2410,136575,136576,136581],{},[2456,136577,136578],{"align":25785},[2416,136579,136580],{},"svg",[2456,136582,136583],{"align":25785},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,136585,136586],{"start":133},[29,136587,136588],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[66,136590,136592],{"className":128572,"code":136591,"language":128574,"meta":71,"style":71},"\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",[73,136593,136594,136599,136606,136618,136634,136659,136680,136700,136720,136724,136730,136740,136751],{"__ignoreMap":71},[76,136595,136596],{"class":78,"line":79},[76,136597,136598],{"class":540},"\u002F* 引入字体图标 *\u002F\n",[76,136600,136601,136604],{"class":78,"line":94},[76,136602,136603],{"class":82},"@font-face",[76,136605,17623],{"class":90},[76,136607,136608,136611,136613,136616],{"class":78,"line":133},[76,136609,136610],{"class":119},"  font-family",[76,136612,53469],{"class":90},[76,136614,136615],{"class":126},"'icomoon'",[76,136617,3415],{"class":90},[76,136619,136620,136623,136625,136627,136629,136632],{"class":78,"line":145},[76,136621,136622],{"class":119},"  src",[76,136624,53469],{"class":90},[76,136626,63754],{"class":119},[76,136628,123],{"class":90},[76,136630,136631],{"class":126},"'fonts\u002Ficomoon.eot'",[76,136633,4807],{"class":90},[76,136635,136636,136638,136640,136642,136644,136647,136649,136652,136654,136657],{"class":78,"line":152},[76,136637,136622],{"class":119},[76,136639,53469],{"class":90},[76,136641,63754],{"class":119},[76,136643,123],{"class":90},[76,136645,136646],{"class":126},"'fonts\u002Ficomoon.eot?#iefix'",[76,136648,15767],{"class":90},[76,136650,136651],{"class":119},"format",[76,136653,123],{"class":90},[76,136655,136656],{"class":126},"'embedded-opentype'",[76,136658,40085],{"class":90},[76,136660,136661,136664,136666,136669,136671,136673,136675,136678],{"class":78,"line":157},[76,136662,136663],{"class":119},"       url",[76,136665,123],{"class":90},[76,136667,136668],{"class":126},"'fonts\u002Ficomoon.woff'",[76,136670,15767],{"class":90},[76,136672,136651],{"class":119},[76,136674,123],{"class":90},[76,136676,136677],{"class":126},"'woff'",[76,136679,40085],{"class":90},[76,136681,136682,136684,136686,136689,136691,136693,136695,136698],{"class":78,"line":246},[76,136683,136663],{"class":119},[76,136685,123],{"class":90},[76,136687,136688],{"class":126},"'fonts\u002Ficomoon.ttf'",[76,136690,15767],{"class":90},[76,136692,136651],{"class":119},[76,136694,123],{"class":90},[76,136696,136697],{"class":126},"'truetype'",[76,136699,40085],{"class":90},[76,136701,136702,136704,136706,136709,136711,136713,136715,136718],{"class":78,"line":251},[76,136703,136663],{"class":119},[76,136705,123],{"class":90},[76,136707,136708],{"class":126},"'fonts\u002Ficomoon.svg#icomoon'",[76,136710,15767],{"class":90},[76,136712,136651],{"class":119},[76,136714,123],{"class":90},[76,136716,136717],{"class":126},"'svg'",[76,136719,4807],{"class":90},[76,136721,136722],{"class":78,"line":257},[76,136723,3685],{"class":90},[76,136725,136726,136728],{"class":78,"line":641},[76,136727,136329],{"class":86},[76,136729,17623],{"class":90},[76,136731,136732,136734,136736,136738],{"class":78,"line":646},[76,136733,136610],{"class":119},[76,136735,53469],{"class":90},[76,136737,136615],{"class":126},[76,136739,3415],{"class":90},[76,136741,136742,136745,136747,136749],{"class":78,"line":659},[76,136743,136744],{"class":119},"  font-style",[76,136746,53469],{"class":90},[76,136748,65869],{"class":119},[76,136750,3415],{"class":90},[76,136752,136753],{"class":78,"line":1608},[76,136754,3685],{"class":90},[19,136756,136757],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3583,136759],{"style":128428,"src":136760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,136762,136763],{"start":145},[29,136764,136765],{},"添加字体",[3583,136767],{"style":128428,"src":136768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136770,136771],{},"复制：",[3583,136773],{"style":128428,"src":136774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136776,136777],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136779,136780],{"start":152},[29,136781,136782],{},"代码展示：",[66,136784,136785],{"className":128572,"code":136591,"language":128574,"meta":71,"style":71},[73,136786,136787,136791,136797,136807,136821,136843,136861,136879,136897,136901,136907,136917,136927],{"__ignoreMap":71},[76,136788,136789],{"class":78,"line":79},[76,136790,136598],{"class":540},[76,136792,136793,136795],{"class":78,"line":94},[76,136794,136603],{"class":82},[76,136796,17623],{"class":90},[76,136798,136799,136801,136803,136805],{"class":78,"line":133},[76,136800,136610],{"class":119},[76,136802,53469],{"class":90},[76,136804,136615],{"class":126},[76,136806,3415],{"class":90},[76,136808,136809,136811,136813,136815,136817,136819],{"class":78,"line":145},[76,136810,136622],{"class":119},[76,136812,53469],{"class":90},[76,136814,63754],{"class":119},[76,136816,123],{"class":90},[76,136818,136631],{"class":126},[76,136820,4807],{"class":90},[76,136822,136823,136825,136827,136829,136831,136833,136835,136837,136839,136841],{"class":78,"line":152},[76,136824,136622],{"class":119},[76,136826,53469],{"class":90},[76,136828,63754],{"class":119},[76,136830,123],{"class":90},[76,136832,136646],{"class":126},[76,136834,15767],{"class":90},[76,136836,136651],{"class":119},[76,136838,123],{"class":90},[76,136840,136656],{"class":126},[76,136842,40085],{"class":90},[76,136844,136845,136847,136849,136851,136853,136855,136857,136859],{"class":78,"line":157},[76,136846,136663],{"class":119},[76,136848,123],{"class":90},[76,136850,136668],{"class":126},[76,136852,15767],{"class":90},[76,136854,136651],{"class":119},[76,136856,123],{"class":90},[76,136858,136677],{"class":126},[76,136860,40085],{"class":90},[76,136862,136863,136865,136867,136869,136871,136873,136875,136877],{"class":78,"line":246},[76,136864,136663],{"class":119},[76,136866,123],{"class":90},[76,136868,136688],{"class":126},[76,136870,15767],{"class":90},[76,136872,136651],{"class":119},[76,136874,123],{"class":90},[76,136876,136697],{"class":126},[76,136878,40085],{"class":90},[76,136880,136881,136883,136885,136887,136889,136891,136893,136895],{"class":78,"line":251},[76,136882,136663],{"class":119},[76,136884,123],{"class":90},[76,136886,136708],{"class":126},[76,136888,15767],{"class":90},[76,136890,136651],{"class":119},[76,136892,123],{"class":90},[76,136894,136717],{"class":126},[76,136896,4807],{"class":90},[76,136898,136899],{"class":78,"line":257},[76,136900,3685],{"class":90},[76,136902,136903,136905],{"class":78,"line":641},[76,136904,136329],{"class":86},[76,136906,17623],{"class":90},[76,136908,136909,136911,136913,136915],{"class":78,"line":646},[76,136910,136610],{"class":119},[76,136912,53469],{"class":90},[76,136914,136615],{"class":126},[76,136916,3415],{"class":90},[76,136918,136919,136921,136923,136925],{"class":78,"line":659},[76,136920,136744],{"class":119},[76,136922,53469],{"class":90},[76,136924,65869],{"class":119},[76,136926,3415],{"class":90},[76,136928,136929],{"class":78,"line":1608},[76,136930,3685],{"class":90},[3583,136932],{"style":128428,"src":136933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136935,136936],{},"更加细节展示：",[26,136938,136939],{},[29,136940,136941],{},"html 标签内添加小图标",[3583,136943],{"style":128428,"src":136944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136946,136947],{"start":94},[29,136948,136949],{},"给标签定义字体",[66,136951,136952],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,136953,136954,136958,136972,136976],{"__ignoreMap":71},[76,136955,136956],{"class":78,"line":79},[76,136957,132683],{"class":540},[76,136959,136960,136962,136964,136966,136968,136970],{"class":78,"line":94},[76,136961,584],{"class":90},[76,136963,53643],{"class":53332},[76,136965,55518],{"class":86},[76,136967,370],{"class":90},[76,136969,132696],{"class":126},[76,136971,53339],{"class":90},[76,136973,136974],{"class":78,"line":133},[76,136975,132703],{"class":90},[76,136977,136978,136980,136982],{"class":78,"line":145},[76,136979,53817],{"class":90},[76,136981,53643],{"class":53332},[76,136983,53339],{"class":90},[19,136985,136986],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3583,136988],{"style":128428,"src":136989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[889,136991,136993],{"id":136992},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136995,136996],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136998,136999,137000,137003],{},"把压缩包里面的 ",[2416,137001,137002],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137005,137006],{},"打开网站，点下方：",[3583,137008],{"style":128428,"src":137009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3583,137011],{"style":128428,"src":137012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3583,137014],{"style":128428,"src":137015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137017,137018],{},"点yes重新加载",[19,137020,137021],{},"然后重复之前的操作就可以实现了",[19,137023,137024],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[889,137026,137028],{"id":137027},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3583,137030],{"style":128428,"src":137031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2178,137033,137034],{},"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":71,"searchDepth":94,"depth":94,"links":137036},[137037,137043,137048],{"id":135640,"depth":94,"text":135641,"children":137038},[137039,137040,137041,137042],{"id":135652,"depth":133,"text":135653},{"id":135681,"depth":133,"text":135682},{"id":135709,"depth":133,"text":135710},{"id":135767,"depth":133,"text":135768},{"id":136239,"depth":94,"text":136240,"children":137044},[137045,137046,137047],{"id":136243,"depth":133,"text":136244},{"id":136288,"depth":133,"text":136289},{"id":136304,"depth":133,"text":136305},{"id":136404,"depth":94,"text":136405,"children":137049},[137050,137051,137052,137053,137054,137055],{"id":136408,"depth":133,"text":136409},{"id":136442,"depth":133,"text":136443},{"id":136465,"depth":133,"text":136466},{"id":136512,"depth":133,"text":136513},{"id":136992,"depth":133,"text":136993},{"id":137027,"depth":133,"text":137028},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135632,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137062,"title":137063,"body":137064,"description":2201,"extension":2202,"meta":138291,"navigation":148,"path":138292,"seo":138293,"stem":138294,"__hash__":138295},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137065,"toc":138272},[137066,137069,137073,137076,137090,137158,137188,137191,137195,137199,137301,137348,137352,137355,137358,137392,137395,137398,137401,137404,137407,137410,137413,137415,137418,137421,137424,137427,137430,137433,137436,137464,137467,137471,137474,137481,137484,137487,137513,137516,137520,137523,137526,137533,137537,137540,137542,137574,137577,137580,137592,137598,137601,137604,137607,137609,137613,137616,137619,137622,137667,137671,137673,137676,137683,137725,137728,137732,137737,137751,137755,137758,137761,137764,137767,137770,137804,137807,137810,137864,137867,137870,137873,137876,137928,137931,137934,137983,137987,137989,137992,137995,137998,138001,138004,138062,138065,138071,138074,138077,138109,138112,138116,138120,138123,138155,138159,138162,138206,138210,138213,138216,138219,138222,138225,138228,138231,138233,138236,138238,138241,138244,138247,138250,138255,138258,138260,138263,138266,138269],[10,137067,137063],{"id":137068},"_13-界面样式与布局技巧",[14,137070,137072],{"id":137071},"_131-css三角","13.1 css三角",[19,137074,137075],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3261,137077,137078,137081,137084,137087],{},[29,137079,137080],{},"用css 边框可以模拟三角效果",[29,137082,137083],{},"宽度高度为0",[29,137085,137086],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,137088,137089],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[66,137091,137093],{"className":128572,"code":137092,"language":128574,"meta":71,"style":71},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[73,137094,137095,137100,137107,137117,137127,137143,137154],{"__ignoreMap":71},[76,137096,137097],{"class":78,"line":79},[76,137098,137099],{"class":540},"\u002F* CSS 实现三角形 *\u002F\n",[76,137101,137102,137105],{"class":78,"line":94},[76,137103,137104],{"class":86},".triangle",[76,137106,17623],{"class":90},[76,137108,137109,137111,137113,137115],{"class":78,"line":133},[76,137110,72595],{"class":119},[76,137112,53469],{"class":90},[76,137114,1294],{"class":119},[76,137116,3415],{"class":90},[76,137118,137119,137121,137123,137125],{"class":78,"line":145},[76,137120,72815],{"class":119},[76,137122,53469],{"class":90},[76,137124,1294],{"class":119},[76,137126,3415],{"class":90},[76,137128,137129,137131,137133,137135,137137,137139,137141],{"class":78,"line":152},[76,137130,72923],{"class":119},[76,137132,53469],{"class":90},[76,137134,402],{"class":119},[76,137136,53524],{"class":82},[76,137138,53553],{"class":119},[76,137140,66019],{"class":119},[76,137142,3415],{"class":90},[76,137144,137145,137148,137150,137152],{"class":78,"line":157},[76,137146,137147],{"class":119},"  border-bottom-color",[76,137149,53469],{"class":90},[76,137151,64397],{"class":119},[76,137153,3415],{"class":90},[76,137155,137156],{"class":78,"line":246},[76,137157,3685],{"class":90},[66,137159,137160],{"className":128572,"code":132729,"language":128574,"meta":71,"style":71},[73,137161,137162,137168,137184],{"__ignoreMap":71},[76,137163,137164,137166],{"class":78,"line":79},[76,137165,53643],{"class":53332},[76,137167,17623],{"class":90},[76,137169,137170,137172,137174,137176,137178,137180,137182],{"class":78,"line":94},[76,137171,72923],{"class":119},[76,137173,53469],{"class":90},[76,137175,669],{"class":119},[76,137177,53524],{"class":82},[76,137179,53553],{"class":119},[76,137181,131964],{"class":119},[76,137183,3415],{"class":90},[76,137185,137186],{"class":78,"line":133},[76,137187,3685],{"class":90},[3583,137189],{"style":128428,"src":137190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137192,137194],{"id":137193},"_132-css用户界面样式","13.2 css用户界面样式",[889,137196,137198],{"id":137197},"_1321-鼠标样式","13.2.1 鼠标样式",[66,137200,137202],{"className":128572,"code":137201,"language":128574,"meta":71,"style":71},"\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",[73,137203,137204,137209,137228,137246,137265,137282],{"__ignoreMap":71},[76,137205,137206],{"class":78,"line":79},[76,137207,137208],{"class":540},"\u002F* 鼠标样式 *\u002F\n",[76,137210,137211,137213,137215,137218,137220,137222,137225],{"class":78,"line":94},[76,137212,53643],{"class":53332},[76,137214,81832],{"class":90},[76,137216,137217],{"class":119},"cursor",[76,137219,53469],{"class":90},[76,137221,64058],{"class":119},[76,137223,137224],{"class":90},"; }   ",[76,137226,137227],{"class":540},"\u002F* 手型 *\u002F\n",[76,137229,137230,137232,137234,137236,137238,137241,137243],{"class":78,"line":133},[76,137231,53643],{"class":53332},[76,137233,81832],{"class":90},[76,137235,137217],{"class":119},[76,137237,53469],{"class":90},[76,137239,137240],{"class":119},"default",[76,137242,137224],{"class":90},[76,137244,137245],{"class":540},"\u002F* 默认 *\u002F\n",[76,137247,137248,137250,137252,137254,137256,137259,137262],{"class":78,"line":145},[76,137249,53643],{"class":53332},[76,137251,81832],{"class":90},[76,137253,137217],{"class":119},[76,137255,53469],{"class":90},[76,137257,137258],{"class":119},"move",[76,137260,137261],{"class":90},"; }      ",[76,137263,137264],{"class":540},"\u002F* 移动 *\u002F\n",[76,137266,137267,137269,137271,137273,137275,137277,137279],{"class":78,"line":152},[76,137268,53643],{"class":53332},[76,137270,81832],{"class":90},[76,137272,137217],{"class":119},[76,137274,53469],{"class":90},[76,137276,7268],{"class":119},[76,137278,137261],{"class":90},[76,137280,137281],{"class":540},"\u002F* 文本 *\u002F\n",[76,137283,137284,137286,137288,137290,137292,137295,137298],{"class":78,"line":157},[76,137285,53643],{"class":53332},[76,137287,81832],{"class":90},[76,137289,137217],{"class":119},[76,137291,53469],{"class":90},[76,137293,137294],{"class":119},"not-allowed",[76,137296,137297],{"class":90},"; } ",[76,137299,137300],{"class":540},"\u002F* 禁止 *\u002F\n",[2404,137302,137303,137311],{},[2407,137304,137305],{},[2410,137306,137307,137309],{},[2413,137308,129036],{"align":25785},[2413,137310,29538],{"align":25785},[2451,137312,137313,137320,137327,137334,137341],{},[2410,137314,137315,137317],{},[2456,137316,137240],{"align":25785},[2456,137318,137319],{"align":25785},"小白 默认",[2410,137321,137322,137324],{},[2456,137323,64058],{"align":25785},[2456,137325,137326],{"align":25785},"小手",[2410,137328,137329,137331],{},[2456,137330,137258],{"align":25785},[2456,137332,137333],{"align":25785},"移动",[2410,137335,137336,137338],{},[2456,137337,7268],{"align":25785},[2456,137339,137340],{"align":25785},"文本",[2410,137342,137343,137345],{},[2456,137344,137294],{"align":25785},[2456,137346,137347],{"align":25785},"禁止",[889,137349,137351],{"id":137350},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137353,137354],{},"去除表单轮廓线",[19,137356,137357],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[66,137359,137360],{"className":128572,"code":131936,"language":128574,"meta":71,"style":71},[73,137361,137362,137366,137372,137388],{"__ignoreMap":71},[76,137363,137364],{"class":78,"line":79},[76,137365,131943],{"class":540},[76,137367,137368,137370],{"class":78,"line":94},[76,137369,53643],{"class":53332},[76,137371,17623],{"class":90},[76,137373,137374,137376,137378,137380,137382,137384,137386],{"class":78,"line":133},[76,137375,72923],{"class":119},[76,137377,53469],{"class":90},[76,137379,669],{"class":119},[76,137381,53524],{"class":82},[76,137383,53553],{"class":119},[76,137385,131964],{"class":119},[76,137387,3415],{"class":90},[76,137389,137390],{"class":78,"line":145},[76,137391,3685],{"class":90},[19,137393,137394],{},"文本域：",[3583,137396],{"style":128428,"src":137397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137399,137400],{},"此时会有一个空白区域",[3583,137402],{"style":128428,"src":137403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137405,137406],{},"写在同一行就不会出现这个问题",[3583,137408],{"style":128428,"src":137409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137411,137412],{},"文本域是行内块元素，一定记住！！！",[19,137414,100255],{},[3583,137416],{"style":128428,"src":137417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137419,137420],{},"文本域尽量放在一行",[19,137422,137423],{},"知识回顾：cols是列，rols是行",[3583,137425],{"style":128428,"src":137426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137428,137429],{},"它可以进行拖动，显然这是我们不愿意看到的",[3583,137431],{"style":128428,"src":137432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137434,137435],{},"使用resize进行解决",[66,137437,137439],{"className":128572,"code":137438,"language":128574,"meta":71,"style":71},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[73,137440,137441,137447,137460],{"__ignoreMap":71},[76,137442,137443,137445],{"class":78,"line":79},[76,137444,1673],{"class":53332},[76,137446,17623],{"class":90},[76,137448,137449,137451,137453,137455,137457],{"class":78,"line":94},[76,137450,72825],{"class":119},[76,137452,53469],{"class":90},[76,137454,56768],{"class":119},[76,137456,132435],{"class":90},[76,137458,137459],{"class":540},"\u002F* 取消表单轮廓线 *\u002F\n",[76,137461,137462],{"class":78,"line":133},[76,137463,3685],{"class":90},[19,137465,137466],{},"此时就无法通过右下方实现拖动了",[889,137468,137470],{"id":137469},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137472,137473],{},"实现一个盒子中的文字和图片对齐",[19,137475,137476,137477,137480],{},"用于设置一个元素的 ",[2416,137478,137479],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137482,137483],{},"图片和文字默认是基线对齐",[3583,137485],{"style":128428,"src":137486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[66,137488,137489],{"className":128572,"code":137438,"language":128574,"meta":71,"style":71},[73,137490,137491,137497,137509],{"__ignoreMap":71},[76,137492,137493,137495],{"class":78,"line":79},[76,137494,1673],{"class":53332},[76,137496,17623],{"class":90},[76,137498,137499,137501,137503,137505,137507],{"class":78,"line":94},[76,137500,72825],{"class":119},[76,137502,53469],{"class":90},[76,137504,56768],{"class":119},[76,137506,132435],{"class":90},[76,137508,137459],{"class":540},[76,137510,137511],{"class":78,"line":133},[76,137512,3685],{"class":90},[3583,137514],{"style":128428,"src":137515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24047,137517,137519],{"id":137518},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137521,137522],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3583,137524],{"style":128428,"src":137525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137527,137528,137529,137532],{},"此时可以给图片、表单这些行内块元素的 ",[2416,137530,137531],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24047,137534,137536],{"id":137535},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137538,137539],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137541,16686],{},[66,137543,137545],{"className":128572,"code":137544,"language":128574,"meta":71,"style":71},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[73,137546,137547,137552,137558,137570],{"__ignoreMap":71},[76,137548,137549],{"class":78,"line":79},[76,137550,137551],{"class":540},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[76,137553,137554,137556],{"class":78,"line":94},[76,137555,3583],{"class":53332},[76,137557,17623],{"class":90},[76,137559,137560,137563,137565,137568],{"class":78,"line":133},[76,137561,137562],{"class":119},"  vertical-align",[76,137564,53469],{"class":90},[76,137566,137567],{"class":119},"middle",[76,137569,3415],{"class":90},[76,137571,137572],{"class":78,"line":145},[76,137573,3685],{"class":90},[3583,137575],{"style":128428,"src":137576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137578,137579],{},"主要解决方法有两种：",[26,137581,137582],{},[29,137583,137584,137587,137588,137591],{},[2416,137585,137586],{},"给图片"," 添加 ",[2416,137589,137590],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137593,137594,137595],{},"2.把图片转换为块级元素 ",[2416,137596,137597],{},"display: block",[19,137599,137600],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137602,137603],{},"img {",[19,137605,137606],{},"vertical-align:middle;",[19,137608,304],{},[889,137610,137612],{"id":137611},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137614,137615],{},"效果：",[3583,137617],{"style":128428,"src":137618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137620,137621],{},"单行文本溢出显示省略号--必须满足三个条件：",[66,137623,137625],{"className":128572,"code":137624,"language":128574,"meta":71,"style":71},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[73,137626,137627,137632,137638,137648,137653,137663],{"__ignoreMap":71},[76,137628,137629],{"class":78,"line":79},[76,137630,137631],{"class":540},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[76,137633,137634,137636],{"class":78,"line":94},[76,137635,3583],{"class":53332},[76,137637,17623],{"class":90},[76,137639,137640,137642,137644,137646],{"class":78,"line":133},[76,137641,137562],{"class":119},[76,137643,53469],{"class":90},[76,137645,137567],{"class":119},[76,137647,3415],{"class":90},[76,137649,137650],{"class":78,"line":145},[76,137651,137652],{"class":540},"  \u002F* 或 *\u002F\n",[76,137654,137655,137657,137659,137661],{"class":78,"line":152},[76,137656,130188],{"class":119},[76,137658,53469],{"class":90},[76,137660,62897],{"class":119},[76,137662,3415],{"class":90},[76,137664,137665],{"class":78,"line":157},[76,137666,3685],{"class":90},[889,137668,137670],{"id":137669},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137672,137615],{},[3583,137674],{"style":128428,"src":137675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137677,137678,137679,137682],{},"多行文本溢出显示省略号， ",[2416,137680,137681],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[66,137684,137685],{"className":128572,"code":137624,"language":128574,"meta":71,"style":71},[73,137686,137687,137691,137697,137707,137711,137721],{"__ignoreMap":71},[76,137688,137689],{"class":78,"line":79},[76,137690,137631],{"class":540},[76,137692,137693,137695],{"class":78,"line":94},[76,137694,3583],{"class":53332},[76,137696,17623],{"class":90},[76,137698,137699,137701,137703,137705],{"class":78,"line":133},[76,137700,137562],{"class":119},[76,137702,53469],{"class":90},[76,137704,137567],{"class":119},[76,137706,3415],{"class":90},[76,137708,137709],{"class":78,"line":145},[76,137710,137652],{"class":540},[76,137712,137713,137715,137717,137719],{"class":78,"line":152},[76,137714,130188],{"class":119},[76,137716,53469],{"class":90},[76,137718,62897],{"class":119},[76,137720,3415],{"class":90},[76,137722,137723],{"class":78,"line":157},[76,137724,3685],{"class":90},[19,137726,137727],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137729,137731],{"id":137730},"_133-常见布局技巧","13.3 常见布局技巧",[19,137733,137734],{},[2416,137735,137736],{},"巧妙利用一个技术更快更好的布局：",[26,137738,137739,137742,137745,137748],{},[29,137740,137741],{},"margin负值的运用",[29,137743,137744],{},"文字围绕浮动元素",[29,137746,137747],{},"行内块的巧妙运用",[29,137749,137750],{},"CSS三角强化",[889,137752,137754],{"id":137753},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137756,137757],{},"应用场景：",[3583,137759],{"style":128428,"src":137760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3583,137762],{"style":128428,"src":137763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137765,137766],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137768,137769],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[66,137771,137772],{"className":128572,"code":131936,"language":128574,"meta":71,"style":71},[73,137773,137774,137778,137784,137800],{"__ignoreMap":71},[76,137775,137776],{"class":78,"line":79},[76,137777,131943],{"class":540},[76,137779,137780,137782],{"class":78,"line":94},[76,137781,53643],{"class":53332},[76,137783,17623],{"class":90},[76,137785,137786,137788,137790,137792,137794,137796,137798],{"class":78,"line":133},[76,137787,72923],{"class":119},[76,137789,53469],{"class":90},[76,137791,669],{"class":119},[76,137793,53524],{"class":82},[76,137795,53553],{"class":119},[76,137797,131964],{"class":119},[76,137799,3415],{"class":90},[76,137801,137802],{"class":78,"line":145},[76,137803,3685],{"class":90},[3583,137805],{"style":128428,"src":137806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137808,137809],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[66,137811,137813],{"className":128572,"code":137812,"language":128574,"meta":71,"style":71},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,137814,137815,137820,137826,137836,137848,137860],{"__ignoreMap":71},[76,137816,137817],{"class":78,"line":79},[76,137818,137819],{"class":540},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[76,137821,137822,137824],{"class":78,"line":94},[76,137823,132420],{"class":86},[76,137825,17623],{"class":90},[76,137827,137828,137830,137832,137834],{"class":78,"line":133},[76,137829,134378],{"class":119},[76,137831,53469],{"class":90},[76,137833,56795],{"class":119},[76,137835,3415],{"class":90},[76,137837,137838,137840,137842,137844,137846],{"class":78,"line":145},[76,137839,134392],{"class":119},[76,137841,53469],{"class":90},[76,137843,402],{"class":119},[76,137845,53524],{"class":82},[76,137847,3415],{"class":90},[76,137849,137850,137852,137854,137856,137858],{"class":78,"line":152},[76,137851,134409],{"class":119},[76,137853,53469],{"class":90},[76,137855,408],{"class":119},[76,137857,53524],{"class":82},[76,137859,3415],{"class":90},[76,137861,137862],{"class":78,"line":157},[76,137863,3685],{"class":90},[19,137865,137866],{},"加上上述代码会发现：",[3583,137868],{"style":128428,"src":137869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137871,137872],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137874,137875],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[66,137877,137878],{"className":128572,"code":137812,"language":128574,"meta":71,"style":71},[73,137879,137880,137884,137890,137900,137912,137924],{"__ignoreMap":71},[76,137881,137882],{"class":78,"line":79},[76,137883,137819],{"class":540},[76,137885,137886,137888],{"class":78,"line":94},[76,137887,132420],{"class":86},[76,137889,17623],{"class":90},[76,137891,137892,137894,137896,137898],{"class":78,"line":133},[76,137893,134378],{"class":119},[76,137895,53469],{"class":90},[76,137897,56795],{"class":119},[76,137899,3415],{"class":90},[76,137901,137902,137904,137906,137908,137910],{"class":78,"line":145},[76,137903,134392],{"class":119},[76,137905,53469],{"class":90},[76,137907,402],{"class":119},[76,137909,53524],{"class":82},[76,137911,3415],{"class":90},[76,137913,137914,137916,137918,137920,137922],{"class":78,"line":152},[76,137915,134409],{"class":119},[76,137917,53469],{"class":90},[76,137919,408],{"class":119},[76,137921,53524],{"class":82},[76,137923,3415],{"class":90},[76,137925,137926],{"class":78,"line":157},[76,137927,3685],{"class":90},[19,137929,137930],{},"解决方式2：",[19,137932,137933],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[66,137935,137937],{"className":128572,"code":137936,"language":128574,"meta":71,"style":71},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,137938,137939,137945,137955,137967,137979],{"__ignoreMap":71},[76,137940,137941,137943],{"class":78,"line":79},[76,137942,53643],{"class":53332},[76,137944,17623],{"class":90},[76,137946,137947,137949,137951,137953],{"class":78,"line":94},[76,137948,134378],{"class":119},[76,137950,53469],{"class":90},[76,137952,56795],{"class":119},[76,137954,3415],{"class":90},[76,137956,137957,137959,137961,137963,137965],{"class":78,"line":133},[76,137958,134392],{"class":119},[76,137960,53469],{"class":90},[76,137962,402],{"class":119},[76,137964,53524],{"class":82},[76,137966,3415],{"class":90},[76,137968,137969,137971,137973,137975,137977],{"class":78,"line":145},[76,137970,134409],{"class":119},[76,137972,53469],{"class":90},[76,137974,408],{"class":119},[76,137976,53524],{"class":82},[76,137978,3415],{"class":90},[76,137980,137981],{"class":78,"line":152},[76,137982,3685],{"class":90},[889,137984,137986],{"id":137985},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137988,137757],{},[3583,137990],{"style":128428,"src":137991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137993,137994],{},"实现结构图：",[3583,137996],{"style":128428,"src":137997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137999,138000],{},"巧妙运用浮动元素不会压住文字的特性",[19,138002,138003],{},"代码显示：",[66,138005,138007],{"className":128572,"code":138006,"language":128574,"meta":71,"style":71},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,138008,138009,138015,138025,138029,138034,138038,138044,138058],{"__ignoreMap":71},[76,138010,138011,138013],{"class":78,"line":79},[76,138012,132420],{"class":86},[76,138014,17623],{"class":90},[76,138016,138017,138019,138021,138023],{"class":78,"line":94},[76,138018,133052],{"class":119},[76,138020,53469],{"class":90},[76,138022,25785],{"class":119},[76,138024,3415],{"class":90},[76,138026,138027],{"class":78,"line":133},[76,138028,3685],{"class":90},[76,138030,138031],{"class":78,"line":145},[76,138032,138033],{"class":90},"```Css\n",[76,138035,138036],{"class":78,"line":152},[76,138037,132415],{"class":540},[76,138039,138040,138042],{"class":78,"line":157},[76,138041,132420],{"class":86},[76,138043,17623],{"class":90},[76,138045,138046,138048,138050,138052,138054,138056],{"class":78,"line":246},[76,138047,72497],{"class":119},[76,138049,53469],{"class":90},[76,138051,1294],{"class":119},[76,138053,53588],{"class":119},[76,138055,132435],{"class":90},[76,138057,132438],{"class":540},[76,138059,138060],{"class":78,"line":251},[76,138061,3685],{"class":90},[19,138063,138064],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[66,138066,138069],{"className":138067,"code":138068,"language":7268},[7266],"\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",[73,138070,138068],{"__ignoreMap":71},[3583,138072],{"style":128428,"src":138073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138075,138076],{},"最终展示结果：",[66,138078,138079],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,138080,138081,138085,138091,138105],{"__ignoreMap":71},[76,138082,138083],{"class":78,"line":79},[76,138084,132415],{"class":540},[76,138086,138087,138089],{"class":78,"line":94},[76,138088,132420],{"class":86},[76,138090,17623],{"class":90},[76,138092,138093,138095,138097,138099,138101,138103],{"class":78,"line":133},[76,138094,72497],{"class":119},[76,138096,53469],{"class":90},[76,138098,1294],{"class":119},[76,138100,53588],{"class":119},[76,138102,132435],{"class":90},[76,138104,132438],{"class":540},[76,138106,138107],{"class":78,"line":145},[76,138108,3685],{"class":90},[3583,138110],{"style":128428,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138113,138115],{"id":138114},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[889,138117,138119],{"id":138118},"_1341-原理","13.4.1 原理",[3583,138121],{"style":128428,"src":138122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[66,138124,138125],{"className":128572,"code":132408,"language":128574,"meta":71,"style":71},[73,138126,138127,138131,138137,138151],{"__ignoreMap":71},[76,138128,138129],{"class":78,"line":79},[76,138130,132415],{"class":540},[76,138132,138133,138135],{"class":78,"line":94},[76,138134,132420],{"class":86},[76,138136,17623],{"class":90},[76,138138,138139,138141,138143,138145,138147,138149],{"class":78,"line":133},[76,138140,72497],{"class":119},[76,138142,53469],{"class":90},[76,138144,1294],{"class":119},[76,138146,53588],{"class":119},[76,138148,132435],{"class":90},[76,138150,132438],{"class":540},[76,138152,138153],{"class":78,"line":145},[76,138154,3685],{"class":90},[889,138156,138158],{"id":138157},"_1342-实例","13.4.2 实例",[3583,138160],{"style":128428,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[66,138163,138164],{"className":128572,"code":133038,"language":128574,"meta":71,"style":71},[73,138165,138166,138172,138182,138186,138192,138202],{"__ignoreMap":71},[76,138167,138168,138170],{"class":78,"line":79},[76,138169,133045],{"class":86},[76,138171,17623],{"class":90},[76,138173,138174,138176,138178,138180],{"class":78,"line":94},[76,138175,133052],{"class":119},[76,138177,53469],{"class":90},[76,138179,25785],{"class":119},[76,138181,3415],{"class":90},[76,138183,138184],{"class":78,"line":133},[76,138185,3685],{"class":90},[76,138187,138188,138190],{"class":78,"line":145},[76,138189,133067],{"class":86},[76,138191,17623],{"class":90},[76,138193,138194,138196,138198,138200],{"class":78,"line":152},[76,138195,133052],{"class":119},[76,138197,53469],{"class":90},[76,138199,74549],{"class":119},[76,138201,3415],{"class":90},[76,138203,138204],{"class":78,"line":157},[76,138205,3685],{"class":90},[14,138207,138209],{"id":138208},"_135-css的初始化","13.5 css的初始化",[19,138211,138212],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138214,138215],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138217,138218],{},"每个网页都必须首先进行 CSS初始化。",[19,138220,138221],{},"这里我们以 京东CSS初始化代码为例。",[19,138223,138224],{},"在网页右键查看网页源代码",[19,138226,138227],{},"找到css的link引入语句",[19,138229,138230],{},"然后ctrl+f 输入body",[19,138232,79252],{},[3583,138234],{"style":128428,"src":138235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138237,79275],{},[3583,138239],{"style":128428,"src":138240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138242,138243],{},"③打开了网页上传压缩的代码",[3583,138245],{"style":128428,"src":138246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138248,138249],{},"④从body前可以查看这个网页的初始化代码",[19,138251,138252],{},[2416,138253,138254],{},"Unicode编码字体：",[19,138256,138257],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138259,85231],{},[19,138261,138262],{},"黑体 \\9ED1\\4F53",[19,138264,138265],{},"宋体 \\5B8B\\4F53",[19,138267,138268],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2178,138270,138271],{},"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":71,"searchDepth":94,"depth":94,"links":138273},[138274,138275,138282,138286,138290],{"id":137071,"depth":94,"text":137072},{"id":137193,"depth":94,"text":137194,"children":138276},[138277,138278,138279,138280,138281],{"id":137197,"depth":133,"text":137198},{"id":137350,"depth":133,"text":137351},{"id":137469,"depth":133,"text":137470},{"id":137611,"depth":133,"text":137612},{"id":137669,"depth":133,"text":137670},{"id":137730,"depth":94,"text":137731,"children":138283},[138284,138285],{"id":137753,"depth":133,"text":137754},{"id":137985,"depth":133,"text":137986},{"id":138114,"depth":94,"text":138115,"children":138287},[138288,138289],{"id":138118,"depth":133,"text":138119},{"id":138157,"depth":133,"text":138158},{"id":138208,"depth":94,"text":138209},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137063,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138297,"title":138298,"body":138299,"description":2201,"extension":2202,"meta":139985,"navigation":148,"path":139986,"seo":139987,"stem":139988,"__hash__":139989},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138300,"toc":139974},[138301,138304,138308,138312,138315,138322,138325,138328,138366,138369,138371,138385,138389,138398,138402,138407,138410,138413,138416,138451,138456,138459,138489,138492,138497,138500,138503,138533,138536,138590,138593,138597,138602,138614,138617,138621,138651,138654,138659,138662,138692,138695,138699,138716,138720,138724,138727,138760,138763,138767,138770,138773,138776,138779,138782,138893,138896,138899,138902,139004,139007,139011,139015,139019,139022,139062,139065,139067,139083,139087,139090,139095,139176,139179,139182,139308,139313,139316,139324,139327,139332,139417,139420,139424,139427,139430,139434,139454,139459,139543,139546,139551,139554,139557,139635,139638,139641,139644,139647,139650,139655,139658,139661,139733,139736,139741,139744,139841,139844,139850,139853,139856,139859,139862,139865,139868,139871,139874,139878,139883,139886,139919,139924,139927,139968,139971],[10,138302,138298],{"id":138303},"_14-html5与css3新特性",[14,138305,138307],{"id":138306},"_141-html5的新特性","14.1 HTML5的新特性",[889,138309,138311],{"id":138310},"_1411-基本标签","14.1.1 基本标签",[19,138313,138314],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138316,138317,138318,138321],{},"这些新特性都有兼容性问题，基本是 ",[2416,138319,138320],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138323,138324],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138326,138327],{},"现在使用的是新特性：",[3261,138329,138330,138336,138342,138348,138354,138360],{},[29,138331,138332,138335],{},[73,138333,138334],{},"\u003Cheader>"," 头部标签",[29,138337,138338,138341],{},[73,138339,138340],{},"\u003Cnav>"," 导航标签",[29,138343,138344,138347],{},[73,138345,138346],{},"\u003Carticle>"," 内容标签",[29,138349,138350,138353],{},[73,138351,138352],{},"\u003Csection>"," 定义文档某个区域",[29,138355,138356,138359],{},[73,138357,138358],{},"\u003Caside>"," 侧边栏标签",[29,138361,138362,138365],{},[73,138363,138364],{},"\u003Cfooter>"," 尾部标签",[3583,138367],{"style":128428,"src":138368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138370,2301],{},[3261,138372,138373,138376,138379,138382],{},[29,138374,138375],{},"这种语义化标准主要是针对搜索引擎的",[29,138377,138378],{},"这些标签页面中可以经常使用",[29,138380,138381],{},"在IE9中，需要把这些元素转换为块级元素",[29,138383,138384],{},"移动端更喜欢使用这些标签",[889,138386,138388],{"id":138387},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138390,138391,138392,138394,138395,138397],{},"音频 ",[2416,138393,30223],{}," 和视频 ",[2416,138396,30232],{}," 两个标签",[24047,138399,138401],{"id":138400},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,138403,138404],{},[29,138405,138406],{},"支持格式：",[3583,138408],{"style":128428,"src":138409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138411,138412],{},"尽量使用MP4，兼容性好",[19,138414,138415],{},"用MP4就可以",[66,138417,138419],{"className":129319,"code":138418,"language":129321,"meta":71,"style":71},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[73,138420,138421],{"__ignoreMap":71},[76,138422,138423,138425,138427,138429,138431,138434,138436,138439,138442,138445,138447,138449],{"class":78,"line":79},[76,138424,584],{"class":90},[76,138426,30232],{"class":53332},[76,138428,57270],{"class":86},[76,138430,370],{"class":90},[76,138432,138433],{"class":126},"\"movie.mp4\"",[76,138435,94447],{"class":86},[76,138437,138438],{"class":86}," autoplay",[76,138440,138441],{"class":86}," muted",[76,138443,138444],{"class":86}," loop",[76,138446,57345],{"class":90},[76,138448,30232],{"class":53332},[76,138450,53339],{"class":90},[26,138452,138453],{"start":94},[29,138454,138455],{},"兼容写法",[19,138457,138458],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[66,138460,138461],{"className":129319,"code":138418,"language":129321,"meta":71,"style":71},[73,138462,138463],{"__ignoreMap":71},[76,138464,138465,138467,138469,138471,138473,138475,138477,138479,138481,138483,138485,138487],{"class":78,"line":79},[76,138466,584],{"class":90},[76,138468,30232],{"class":53332},[76,138470,57270],{"class":86},[76,138472,370],{"class":90},[76,138474,138433],{"class":126},[76,138476,94447],{"class":86},[76,138478,138438],{"class":86},[76,138480,138441],{"class":86},[76,138482,138444],{"class":86},[76,138484,57345],{"class":90},[76,138486,30232],{"class":53332},[76,138488,53339],{"class":90},[19,138490,138491],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138493,138494],{"start":133},[29,138495,138496],{},"video常用属性",[3583,138498],{"style":128428,"src":138499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138501,138502],{},"poster属性后面是跟的等待加载图片的地址",[66,138504,138505],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,138506,138507],{"__ignoreMap":71},[76,138508,138509,138511,138513,138515,138517,138519,138521,138523,138525,138527,138529,138531],{"class":78,"line":79},[76,138510,584],{"class":90},[76,138512,3583],{"class":53332},[76,138514,57270],{"class":86},[76,138516,370],{"class":90},[76,138518,136089],{"class":126},[76,138520,57278],{"class":86},[76,138522,370],{"class":90},[76,138524,136096],{"class":126},[76,138526,136099],{"class":86},[76,138528,370],{"class":90},[76,138530,136104],{"class":126},[76,138532,53339],{"class":90},[19,138534,138535],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[66,138537,138539],{"className":128572,"code":138538,"language":128574,"meta":71,"style":71},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[73,138540,138541,138546,138552,138576,138581,138586],{"__ignoreMap":71},[76,138542,138543],{"class":78,"line":79},[76,138544,138545],{"class":540},"\u002F* 2D 位移 *\u002F\n",[76,138547,138548,138550],{"class":78,"line":94},[76,138549,53643],{"class":53332},[76,138551,17623],{"class":90},[76,138553,138554,138557,138559,138562,138564,138566,138568,138570,138572,138574],{"class":78,"line":133},[76,138555,138556],{"class":119},"  transform",[76,138558,53469],{"class":90},[76,138560,138561],{"class":119},"translate",[76,138563,123],{"class":90},[76,138565,2575],{"class":119},[76,138567,53524],{"class":82},[76,138569,405],{"class":90},[76,138571,2915],{"class":119},[76,138573,53524],{"class":82},[76,138575,4807],{"class":90},[76,138577,138578],{"class":78,"line":145},[76,138579,138580],{"class":540},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[76,138582,138583],{"class":78,"line":152},[76,138584,138585],{"class":540},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[76,138587,138588],{"class":78,"line":157},[76,138589,3685],{"class":90},[19,138591,138592],{},"muted:自动静音属性",[24047,138594,138596],{"id":138595},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,138598,138599],{},[29,138600,138601],{},"基本使用",[19,138603,138604,138605,138610,138611],{},"当前 ",[2416,138606,138607],{},[73,138608,138609],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2416,138612,138613],{},"mp3格式",[3583,138615],{"style":128428,"src":138616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,138618,138619],{"start":94},[29,138620,138455],{},[66,138622,138623],{"className":129319,"code":138418,"language":129321,"meta":71,"style":71},[73,138624,138625],{"__ignoreMap":71},[76,138626,138627,138629,138631,138633,138635,138637,138639,138641,138643,138645,138647,138649],{"class":78,"line":79},[76,138628,584],{"class":90},[76,138630,30232],{"class":53332},[76,138632,57270],{"class":86},[76,138634,370],{"class":90},[76,138636,138433],{"class":126},[76,138638,94447],{"class":86},[76,138640,138438],{"class":86},[76,138642,138441],{"class":86},[76,138644,138444],{"class":86},[76,138646,57345],{"class":90},[76,138648,30232],{"class":53332},[76,138650,53339],{"class":90},[19,138652,138653],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138655,138656],{"start":133},[29,138657,138658],{},"常用属性",[3583,138660],{"style":128428,"src":138661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[66,138663,138664],{"className":129319,"code":138418,"language":129321,"meta":71,"style":71},[73,138665,138666],{"__ignoreMap":71},[76,138667,138668,138670,138672,138674,138676,138678,138680,138682,138684,138686,138688,138690],{"class":78,"line":79},[76,138669,584],{"class":90},[76,138671,30232],{"class":53332},[76,138673,57270],{"class":86},[76,138675,370],{"class":90},[76,138677,138433],{"class":126},[76,138679,94447],{"class":86},[76,138681,138438],{"class":86},[76,138683,138441],{"class":86},[76,138685,138444],{"class":86},[76,138687,57345],{"class":90},[76,138689,30232],{"class":53332},[76,138691,53339],{"class":90},[19,138693,138694],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24047,138696,138698],{"id":138697},"_14123-总结","14.1.2.3 总结",[3261,138700,138701,138704,138707,138710,138713],{},[29,138702,138703],{},"音频标签和视频标签使用方式基本一致",[29,138705,138706],{},"浏览器支持情况不同",[29,138708,138709],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,138711,138712],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,138714,138715],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[889,138717,138719],{"id":138718},"_1413-表单元素","14.1.3 表单元素",[24047,138721,138723],{"id":138722},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3583,138725],{"style":128428,"src":138726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[66,138728,138730],{"className":129319,"code":138729,"language":129321,"meta":71,"style":71},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[73,138731,138732],{"__ignoreMap":71},[76,138733,138734,138736,138738,138740,138742,138744,138746,138748,138751,138753,138755,138758],{"class":78,"line":79},[76,138735,584],{"class":90},[76,138737,1673],{"class":53332},[76,138739,55855],{"class":86},[76,138741,370],{"class":90},[76,138743,64727],{"class":126},[76,138745,16972],{"class":86},[76,138747,370],{"class":90},[76,138749,138750],{"class":126},"\"username\"",[76,138752,63048],{"class":86},[76,138754,370],{"class":90},[76,138756,138757],{"class":126},"\"请输入用户名\"",[76,138759,53339],{"class":90},[3583,138761],{"style":128428,"src":138762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24047,138764,138766],{"id":138765},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3583,138768],{"style":128428,"src":138769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138771,138772],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138774,138775],{},"快捷操作：",[3583,138777],{"style":128428,"src":138778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138780,138781],{},"例子1：",[66,138783,138785],{"className":129319,"code":138784,"language":129321,"meta":71,"style":71},"\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",[73,138786,138787,138810,138837,138866,138885],{"__ignoreMap":71},[76,138788,138789,138791,138793,138795,138797,138800,138803,138805,138808],{"class":78,"line":79},[76,138790,584],{"class":90},[76,138792,68653],{"class":53332},[76,138794,68656],{"class":86},[76,138796,370],{"class":90},[76,138798,138799],{"class":126},"\"\u002Fsubmit\"",[76,138801,138802],{"class":86}," method",[76,138804,370],{"class":90},[76,138806,138807],{"class":126},"\"post\"",[76,138809,53339],{"class":90},[76,138811,138812,138814,138816,138818,138820,138822,138824,138826,138828,138830,138832,138835],{"class":78,"line":94},[76,138813,54176],{"class":90},[76,138815,1673],{"class":53332},[76,138817,55855],{"class":86},[76,138819,370],{"class":90},[76,138821,64727],{"class":126},[76,138823,16972],{"class":86},[76,138825,370],{"class":90},[76,138827,138750],{"class":126},[76,138829,63048],{"class":86},[76,138831,370],{"class":90},[76,138833,138834],{"class":126},"\"用户名\"",[76,138836,53339],{"class":90},[76,138838,138839,138841,138843,138845,138847,138850,138852,138854,138857,138859,138861,138864],{"class":78,"line":133},[76,138840,54176],{"class":90},[76,138842,1673],{"class":53332},[76,138844,55855],{"class":86},[76,138846,370],{"class":90},[76,138848,138849],{"class":126},"\"password\"",[76,138851,16972],{"class":86},[76,138853,370],{"class":90},[76,138855,138856],{"class":126},"\"pwd\"",[76,138858,63048],{"class":86},[76,138860,370],{"class":90},[76,138862,138863],{"class":126},"\"密码\"",[76,138865,53339],{"class":90},[76,138867,138868,138870,138872,138874,138876,138878,138881,138883],{"class":78,"line":145},[76,138869,54176],{"class":90},[76,138871,55918],{"class":53332},[76,138873,55855],{"class":86},[76,138875,370],{"class":90},[76,138877,68676],{"class":126},[76,138879,138880],{"class":90},">提交\u003C\u002F",[76,138882,55918],{"class":53332},[76,138884,53339],{"class":90},[76,138886,138887,138889,138891],{"class":78,"line":152},[76,138888,53817],{"class":90},[76,138890,68653],{"class":53332},[76,138892,53339],{"class":90},[3583,138894],{"style":128428,"src":138895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138897,138898],{},"value是表单域的内容",[19,138900,138901],{},"例子2：",[66,138903,138904],{"className":129319,"code":138784,"language":129321,"meta":71,"style":71},[73,138905,138906,138926,138952,138978,138996],{"__ignoreMap":71},[76,138907,138908,138910,138912,138914,138916,138918,138920,138922,138924],{"class":78,"line":79},[76,138909,584],{"class":90},[76,138911,68653],{"class":53332},[76,138913,68656],{"class":86},[76,138915,370],{"class":90},[76,138917,138799],{"class":126},[76,138919,138802],{"class":86},[76,138921,370],{"class":90},[76,138923,138807],{"class":126},[76,138925,53339],{"class":90},[76,138927,138928,138930,138932,138934,138936,138938,138940,138942,138944,138946,138948,138950],{"class":78,"line":94},[76,138929,54176],{"class":90},[76,138931,1673],{"class":53332},[76,138933,55855],{"class":86},[76,138935,370],{"class":90},[76,138937,64727],{"class":126},[76,138939,16972],{"class":86},[76,138941,370],{"class":90},[76,138943,138750],{"class":126},[76,138945,63048],{"class":86},[76,138947,370],{"class":90},[76,138949,138834],{"class":126},[76,138951,53339],{"class":90},[76,138953,138954,138956,138958,138960,138962,138964,138966,138968,138970,138972,138974,138976],{"class":78,"line":133},[76,138955,54176],{"class":90},[76,138957,1673],{"class":53332},[76,138959,55855],{"class":86},[76,138961,370],{"class":90},[76,138963,138849],{"class":126},[76,138965,16972],{"class":86},[76,138967,370],{"class":90},[76,138969,138856],{"class":126},[76,138971,63048],{"class":86},[76,138973,370],{"class":90},[76,138975,138863],{"class":126},[76,138977,53339],{"class":90},[76,138979,138980,138982,138984,138986,138988,138990,138992,138994],{"class":78,"line":145},[76,138981,54176],{"class":90},[76,138983,55918],{"class":53332},[76,138985,55855],{"class":86},[76,138987,370],{"class":90},[76,138989,68676],{"class":126},[76,138991,138880],{"class":90},[76,138993,55918],{"class":53332},[76,138995,53339],{"class":90},[76,138997,138998,139000,139002],{"class":78,"line":152},[76,138999,53817],{"class":90},[76,139001,68653],{"class":53332},[76,139003,53339],{"class":90},[3583,139005],{"style":128428,"src":139006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139008,139010],{"id":139009},"_142-css新特性","14.2 CSS新特性",[889,139012,139014],{"id":139013},"_1421-新增选择器","14.2.1 新增选择器",[24047,139016,139018],{"id":139017},"_14211-属性选择器","14.2.1.1 属性选择器",[3583,139020],{"style":128428,"src":139021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[66,139023,139025],{"className":128572,"code":139024,"language":128574,"meta":71,"style":71},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[73,139026,139027,139042,139058],{"__ignoreMap":71},[76,139028,139029,139031,139033,139035,139037,139039],{"class":78,"line":79},[76,139030,1673],{"class":53332},[76,139032,3148],{"class":90},[76,139034,105129],{"class":86},[76,139036,370],{"class":82},[76,139038,64727],{"class":126},[76,139040,139041],{"class":90},"] {\n",[76,139043,139044,139046,139048,139050,139052,139054,139056],{"class":78,"line":94},[76,139045,72923],{"class":119},[76,139047,53469],{"class":90},[76,139049,669],{"class":119},[76,139051,53524],{"class":82},[76,139053,53553],{"class":119},[76,139055,132152],{"class":119},[76,139057,3415],{"class":90},[76,139059,139060],{"class":78,"line":133},[76,139061,3685],{"class":90},[3583,139063],{"style":128428,"src":139064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139066,2301],{},[3261,139068,139069,139072,139075,139078],{},[29,139070,139071],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,139073,139074],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,139076,139077],{},"属性选择器也可以选择出来自定义的属性",[29,139079,139080,139082],{},[2416,139081,163],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24047,139084,139086],{"id":139085},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3583,139088],{"style":128428,"src":139089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,139091,139092],{},[29,139093,139094],{},"fist-child",[66,139096,139098],{"className":128572,"code":139097,"language":128574,"meta":71,"style":71},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[73,139099,139100,139105,139120,139140,139158],{"__ignoreMap":71},[76,139101,139102],{"class":78,"line":79},[76,139103,139104],{"class":540},"\u002F* 属性选择器 *\u002F\n",[76,139106,139107,139109,139111,139113,139115,139117],{"class":78,"line":94},[76,139108,1673],{"class":53332},[76,139110,3148],{"class":90},[76,139112,105129],{"class":86},[76,139114,370],{"class":82},[76,139116,64727],{"class":126},[76,139118,139119],{"class":90},"] { }\n",[76,139121,139122,139124,139126,139128,139131,139134,139137],{"class":78,"line":133},[76,139123,1673],{"class":53332},[76,139125,3148],{"class":90},[76,139127,16747],{"class":86},[76,139129,139130],{"class":82},"^=",[76,139132,139133],{"class":126},"\"icon\"",[76,139135,139136],{"class":90},"] { }  ",[76,139138,139139],{"class":540},"\u002F* 以 icon 开头 *\u002F\n",[76,139141,139142,139144,139146,139148,139151,139153,139155],{"class":78,"line":145},[76,139143,1673],{"class":53332},[76,139145,3148],{"class":90},[76,139147,16747],{"class":86},[76,139149,139150],{"class":82},"$=",[76,139152,139133],{"class":126},[76,139154,139136],{"class":90},[76,139156,139157],{"class":540},"\u002F* 以 icon 结尾 *\u002F\n",[76,139159,139160,139162,139164,139166,139169,139171,139173],{"class":78,"line":152},[76,139161,1673],{"class":53332},[76,139163,3148],{"class":90},[76,139165,16747],{"class":86},[76,139167,139168],{"class":82},"*=",[76,139170,139133],{"class":126},[76,139172,139136],{"class":90},[76,139174,139175],{"class":540},"\u002F* 包含 icon *\u002F\n",[19,139177,139178],{},"ul的第一个儿子文本为红色",[19,139180,139181],{},"一定要在冒号前加空格，不然就是选中所有的了",[66,139183,139185],{"className":128572,"code":139184,"language":128574,"meta":71,"style":71},".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",[73,139186,139187,139193,139203,139207,139211,139216,139229,139242,139258,139275,139292],{"__ignoreMap":71},[76,139188,139189,139191],{"class":78,"line":79},[76,139190,128863],{"class":86},[76,139192,17623],{"class":90},[76,139194,139195,139197,139199,139201],{"class":78,"line":94},[76,139196,72932],{"class":119},[76,139198,53469],{"class":90},[76,139200,59451],{"class":119},[76,139202,3415],{"class":90},[76,139204,139205],{"class":78,"line":133},[76,139206,3685],{"class":90},[76,139208,139209],{"class":78,"line":145},[76,139210,138033],{"class":90},[76,139212,139213],{"class":78,"line":152},[76,139214,139215],{"class":540},"\u002F* 结构伪类选择器 *\u002F\n",[76,139217,139218,139220,139223,139226],{"class":78,"line":157},[76,139219,29],{"class":53332},[76,139221,139222],{"class":86},":first-child",[76,139224,139225],{"class":90}," { }           ",[76,139227,139228],{"class":540},"\u002F* 第一个 *\u002F\n",[76,139230,139231,139233,139236,139239],{"class":78,"line":246},[76,139232,29],{"class":53332},[76,139234,139235],{"class":86},":last-child",[76,139237,139238],{"class":90}," { }            ",[76,139240,139241],{"class":540},"\u002F* 最后一个 *\u002F\n",[76,139243,139244,139246,139248,139250,139252,139255],{"class":78,"line":251},[76,139245,29],{"class":53332},[76,139247,131486],{"class":86},[76,139249,123],{"class":90},[76,139251,2345],{"class":119},[76,139253,139254],{"class":90},") { }          ",[76,139256,139257],{"class":540},"\u002F* 第2个 *\u002F\n",[76,139259,139260,139262,139264,139266,139269,139272],{"class":78,"line":257},[76,139261,29],{"class":53332},[76,139263,131486],{"class":86},[76,139265,123],{"class":90},[76,139267,139268],{"class":119},"2n",[76,139270,139271],{"class":90},") { }         ",[76,139273,139274],{"class":540},"\u002F* 偶数 *\u002F\n",[76,139276,139277,139279,139281,139283,139286,139289],{"class":78,"line":641},[76,139278,29],{"class":53332},[76,139280,131486],{"class":86},[76,139282,123],{"class":90},[76,139284,139285],{"class":119},"2n+1",[76,139287,139288],{"class":90},") { }       ",[76,139290,139291],{"class":540},"\u002F* 奇数 *\u002F\n",[76,139293,139294,139296,139298,139300,139303,139305],{"class":78,"line":646},[76,139295,29],{"class":53332},[76,139297,131486],{"class":86},[76,139299,123],{"class":90},[76,139301,139302],{"class":119},"-n+3",[76,139304,139288],{"class":90},[76,139306,139307],{"class":540},"\u002F* 前3个 *\u002F\n",[53643,139309,139312],{"className":139310},[139311],"example","\n  示例内容\n",[19,139314,139315],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3261,139317,139318],{},[29,139319,139320,139323],{},[73,139321,139322],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139325,139326],{},"也就是说它选择的是熊大",[26,139328,139329],{"start":157},[29,139330,139331],{},"权重",[66,139333,139335],{"className":128572,"code":139334,"language":128574,"meta":71,"style":71},"\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",[73,139336,139337,139341,139351,139361,139375,139389,139403],{"__ignoreMap":71},[76,139338,139339],{"class":78,"line":79},[76,139340,139215],{"class":540},[76,139342,139343,139345,139347,139349],{"class":78,"line":94},[76,139344,29],{"class":53332},[76,139346,139222],{"class":86},[76,139348,139225],{"class":90},[76,139350,139228],{"class":540},[76,139352,139353,139355,139357,139359],{"class":78,"line":133},[76,139354,29],{"class":53332},[76,139356,139235],{"class":86},[76,139358,139238],{"class":90},[76,139360,139241],{"class":540},[76,139362,139363,139365,139367,139369,139371,139373],{"class":78,"line":145},[76,139364,29],{"class":53332},[76,139366,131486],{"class":86},[76,139368,123],{"class":90},[76,139370,2345],{"class":119},[76,139372,139254],{"class":90},[76,139374,139257],{"class":540},[76,139376,139377,139379,139381,139383,139385,139387],{"class":78,"line":152},[76,139378,29],{"class":53332},[76,139380,131486],{"class":86},[76,139382,123],{"class":90},[76,139384,139268],{"class":119},[76,139386,139271],{"class":90},[76,139388,139274],{"class":540},[76,139390,139391,139393,139395,139397,139399,139401],{"class":78,"line":157},[76,139392,29],{"class":53332},[76,139394,131486],{"class":86},[76,139396,123],{"class":90},[76,139398,139285],{"class":119},[76,139400,139288],{"class":90},[76,139402,139291],{"class":540},[76,139404,139405,139407,139409,139411,139413,139415],{"class":78,"line":246},[76,139406,29],{"class":53332},[76,139408,131486],{"class":86},[76,139410,123],{"class":90},[76,139412,139302],{"class":119},[76,139414,139288],{"class":90},[76,139416,139307],{"class":540},[19,139418,139419],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24047,139421,139423],{"id":139422},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139425,139426],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3583,139428],{"style":128428,"src":139429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,139431,139432],{},[29,139433,2301],{},[3261,139435,139436,139439,139442,139445,139448,139451],{},[29,139437,139438],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,139440,139441],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,139443,139444],{},"语法： element::before {}",[29,139446,139447],{},"before 和 after 必须有 content 属性",[29,139449,139450],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,139452,139453],{},"伪元素选择器和标签选择器一样，权重为 1",[26,139455,139456],{"start":94},[29,139457,139458],{},"实例",[66,139460,139461],{"className":128572,"code":139334,"language":128574,"meta":71,"style":71},[73,139462,139463,139467,139477,139487,139501,139515,139529],{"__ignoreMap":71},[76,139464,139465],{"class":78,"line":79},[76,139466,139215],{"class":540},[76,139468,139469,139471,139473,139475],{"class":78,"line":94},[76,139470,29],{"class":53332},[76,139472,139222],{"class":86},[76,139474,139225],{"class":90},[76,139476,139228],{"class":540},[76,139478,139479,139481,139483,139485],{"class":78,"line":133},[76,139480,29],{"class":53332},[76,139482,139235],{"class":86},[76,139484,139238],{"class":90},[76,139486,139241],{"class":540},[76,139488,139489,139491,139493,139495,139497,139499],{"class":78,"line":145},[76,139490,29],{"class":53332},[76,139492,131486],{"class":86},[76,139494,123],{"class":90},[76,139496,2345],{"class":119},[76,139498,139254],{"class":90},[76,139500,139257],{"class":540},[76,139502,139503,139505,139507,139509,139511,139513],{"class":78,"line":152},[76,139504,29],{"class":53332},[76,139506,131486],{"class":86},[76,139508,123],{"class":90},[76,139510,139268],{"class":119},[76,139512,139271],{"class":90},[76,139514,139274],{"class":540},[76,139516,139517,139519,139521,139523,139525,139527],{"class":78,"line":157},[76,139518,29],{"class":53332},[76,139520,131486],{"class":86},[76,139522,123],{"class":90},[76,139524,139285],{"class":119},[76,139526,139288],{"class":90},[76,139528,139291],{"class":540},[76,139530,139531,139533,139535,139537,139539,139541],{"class":78,"line":246},[76,139532,29],{"class":53332},[76,139534,131486],{"class":86},[76,139536,123],{"class":90},[76,139538,139302],{"class":119},[76,139540,139288],{"class":90},[76,139542,139307],{"class":540},[3583,139544],{"style":128428,"src":139545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,139547,139548],{"start":133},[29,139549,139550],{},"使用场景1",[3583,139552],{"style":128428,"src":139553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139555,139556],{},"不需要再加盒子来整红色那部分了",[66,139558,139560],{"className":128572,"code":139559,"language":128574,"meta":71,"style":71},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[73,139561,139562,139567,139576,139587,139597,139601,139610,139621,139631],{"__ignoreMap":71},[76,139563,139564],{"class":78,"line":79},[76,139565,139566],{"class":540},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[76,139568,139569,139571,139574],{"class":78,"line":94},[76,139570,53643],{"class":53332},[76,139572,139573],{"class":86},"::before",[76,139575,17623],{"class":90},[76,139577,139578,139581,139583,139585],{"class":78,"line":133},[76,139579,139580],{"class":119},"  content",[76,139582,53469],{"class":90},[76,139584,9730],{"class":126},[76,139586,3415],{"class":90},[76,139588,139589,139591,139593,139595],{"class":78,"line":145},[76,139590,130188],{"class":119},[76,139592,53469],{"class":90},[76,139594,62897],{"class":119},[76,139596,3415],{"class":90},[76,139598,139599],{"class":78,"line":152},[76,139600,3685],{"class":90},[76,139602,139603,139605,139608],{"class":78,"line":157},[76,139604,53643],{"class":53332},[76,139606,139607],{"class":86},"::after",[76,139609,17623],{"class":90},[76,139611,139612,139614,139616,139619],{"class":78,"line":246},[76,139613,139580],{"class":119},[76,139615,53469],{"class":90},[76,139617,139618],{"class":126},"\"→\"",[76,139620,3415],{"class":90},[76,139622,139623,139625,139627,139629],{"class":78,"line":251},[76,139624,72932],{"class":119},[76,139626,53469],{"class":90},[76,139628,64098],{"class":119},[76,139630,3415],{"class":90},[76,139632,139633],{"class":78,"line":257},[76,139634,3685],{"class":90},[3583,139636],{"style":128428,"src":139637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139639,139640],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3583,139642],{"style":128428,"src":139643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139645,139646],{},"但是在引用时需要先转义一下",[19,139648,139649],{},"content='\\e930'",[26,139651,139652],{"start":145},[29,139653,139654],{},"使用场景2",[19,139656,139657],{},"仿土豆效果",[19,139659,139660],{},"通过使用伪元素选择器可以减少body中盒子的数量",[66,139662,139663],{"className":128572,"code":139559,"language":128574,"meta":71,"style":71},[73,139664,139665,139669,139677,139687,139697,139701,139709,139719,139729],{"__ignoreMap":71},[76,139666,139667],{"class":78,"line":79},[76,139668,139566],{"class":540},[76,139670,139671,139673,139675],{"class":78,"line":94},[76,139672,53643],{"class":53332},[76,139674,139573],{"class":86},[76,139676,17623],{"class":90},[76,139678,139679,139681,139683,139685],{"class":78,"line":133},[76,139680,139580],{"class":119},[76,139682,53469],{"class":90},[76,139684,9730],{"class":126},[76,139686,3415],{"class":90},[76,139688,139689,139691,139693,139695],{"class":78,"line":145},[76,139690,130188],{"class":119},[76,139692,53469],{"class":90},[76,139694,62897],{"class":119},[76,139696,3415],{"class":90},[76,139698,139699],{"class":78,"line":152},[76,139700,3685],{"class":90},[76,139702,139703,139705,139707],{"class":78,"line":157},[76,139704,53643],{"class":53332},[76,139706,139607],{"class":86},[76,139708,17623],{"class":90},[76,139710,139711,139713,139715,139717],{"class":78,"line":246},[76,139712,139580],{"class":119},[76,139714,53469],{"class":90},[76,139716,139618],{"class":126},[76,139718,3415],{"class":90},[76,139720,139721,139723,139725,139727],{"class":78,"line":251},[76,139722,72932],{"class":119},[76,139724,53469],{"class":90},[76,139726,64098],{"class":119},[76,139728,3415],{"class":90},[76,139730,139731],{"class":78,"line":257},[76,139732,3685],{"class":90},[3583,139734],{"style":128428,"src":139735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,139737,139738],{"start":152},[29,139739,139740],{},"使用场景3",[19,139742,139743],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[66,139745,139747],{"className":128572,"code":139746,"language":128574,"meta":71,"style":71},".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",[73,139748,139749,139755,139765,139769,139773,139777,139785,139795,139805,139809,139817,139827,139837],{"__ignoreMap":71},[76,139750,139751,139753],{"class":78,"line":79},[76,139752,132420],{"class":86},[76,139754,17623],{"class":90},[76,139756,139757,139759,139761,139763],{"class":78,"line":94},[76,139758,133052],{"class":119},[76,139760,53469],{"class":90},[76,139762,25785],{"class":119},[76,139764,3415],{"class":90},[76,139766,139767],{"class":78,"line":133},[76,139768,3685],{"class":90},[76,139770,139771],{"class":78,"line":145},[76,139772,138033],{"class":90},[76,139774,139775],{"class":78,"line":152},[76,139776,139566],{"class":540},[76,139778,139779,139781,139783],{"class":78,"line":157},[76,139780,53643],{"class":53332},[76,139782,139573],{"class":86},[76,139784,17623],{"class":90},[76,139786,139787,139789,139791,139793],{"class":78,"line":246},[76,139788,139580],{"class":119},[76,139790,53469],{"class":90},[76,139792,9730],{"class":126},[76,139794,3415],{"class":90},[76,139796,139797,139799,139801,139803],{"class":78,"line":251},[76,139798,130188],{"class":119},[76,139800,53469],{"class":90},[76,139802,62897],{"class":119},[76,139804,3415],{"class":90},[76,139806,139807],{"class":78,"line":257},[76,139808,3685],{"class":90},[76,139810,139811,139813,139815],{"class":78,"line":641},[76,139812,53643],{"class":53332},[76,139814,139607],{"class":86},[76,139816,17623],{"class":90},[76,139818,139819,139821,139823,139825],{"class":78,"line":646},[76,139820,139580],{"class":119},[76,139822,53469],{"class":90},[76,139824,139618],{"class":126},[76,139826,3415],{"class":90},[76,139828,139829,139831,139833,139835],{"class":78,"line":659},[76,139830,72932],{"class":119},[76,139832,53469],{"class":90},[76,139834,64098],{"class":119},[76,139836,3415],{"class":90},[76,139838,139839],{"class":78,"line":1608},[76,139840,3685],{"class":90},[19,139842,139843],{},"div {\nmargin: 0 auto;\n}",[66,139845,139848],{"className":139846,"code":139847,"language":7268},[7266],"\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",[73,139849,139847],{"__ignoreMap":71},[19,139851,139852],{},"如果想让多个元素都发生变化",[19,139854,139855],{},"不能如下操作：",[19,139857,139858],{},"transition: width 2s ease 0.5s;",[19,139860,139861],{},"transition: height 2s ease 0.5s;不对！！！",[19,139863,139864],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139866,139867],{},"使用如下：加逗号隔开",[19,139869,139870],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139872,139873],{},"transition all 2s ease;",[889,139875,139877],{"id":139876},"_1426-过渡练习","14.2.6 过渡练习",[26,139879,139880],{},[29,139881,139882],{},"进度条",[3583,139884],{"style":128428,"src":139885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[66,139887,139889],{"className":128572,"code":139888,"language":128574,"meta":71,"style":71},"div {\n  transition: all 0.3s ease;\n}\n",[73,139890,139891,139897,139915],{"__ignoreMap":71},[76,139892,139893,139895],{"class":78,"line":79},[76,139894,53643],{"class":53332},[76,139896,17623],{"class":90},[76,139898,139899,139902,139904,139906,139909,139911,139913],{"class":78,"line":94},[76,139900,139901],{"class":119},"  transition",[76,139903,53469],{"class":90},[76,139905,30170],{"class":119},[76,139907,139908],{"class":119}," 0.3",[76,139910,2954],{"class":82},[76,139912,80705],{"class":119},[76,139914,3415],{"class":90},[76,139916,139917],{"class":78,"line":133},[76,139918,3685],{"class":90},[26,139920,139921],{"start":94},[29,139922,139923],{},"小米logo",[19,139925,139926],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[66,139928,139930],{"className":128572,"code":139929,"language":128574,"meta":71,"style":71},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[73,139931,139932,139937,139943,139959,139964],{"__ignoreMap":71},[76,139933,139934],{"class":78,"line":79},[76,139935,139936],{"class":540},"\u002F* CSS3 过渡 *\u002F\n",[76,139938,139939,139941],{"class":78,"line":94},[76,139940,53643],{"class":53332},[76,139942,17623],{"class":90},[76,139944,139945,139947,139949,139951,139953,139955,139957],{"class":78,"line":133},[76,139946,139901],{"class":119},[76,139948,53469],{"class":90},[76,139950,30170],{"class":119},[76,139952,139908],{"class":119},[76,139954,2954],{"class":82},[76,139956,80705],{"class":119},[76,139958,3415],{"class":90},[76,139960,139961],{"class":78,"line":145},[76,139962,139963],{"class":540},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[76,139965,139966],{"class":78,"line":152},[76,139967,3685],{"class":90},[19,139969,139970],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2178,139972,139973],{},"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":71,"searchDepth":94,"depth":94,"links":139975},[139976,139981],{"id":138306,"depth":94,"text":138307,"children":139977},[139978,139979,139980],{"id":138310,"depth":133,"text":138311},{"id":138387,"depth":133,"text":138388},{"id":138718,"depth":133,"text":138719},{"id":139009,"depth":94,"text":139010,"children":139982},[139983,139984],{"id":139013,"depth":133,"text":139014},{"id":139876,"depth":133,"text":139877},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138298,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139991,"title":139992,"body":139993,"description":2201,"extension":2202,"meta":141737,"navigation":148,"path":141738,"seo":141739,"stem":141740,"__hash__":141741},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139994,"toc":141718},[139995,139998,140002,140005,140011,140017,140021,140023,140026,140029,140032,140035,140038,140041,140044,140048,140052,140055,140058,140061,140065,140068,140071,140076,140079,140082,140085,140089,140092,140101,140104,140107,140111,140114,140117,140122,140129,140143,140151,140158,140163,140166,140169,140172,140179,140183,140189,140195,140198,140201,140206,140212,140214,140222,140227,140230,140236,140238,140243,140248,140251,140253,140258,140261,140266,140271,140305,140309,140313,140316,140320,140323,140409,140412,140449,140452,140488,140492,140497,140510,140564,140566,140594,140596,140624,140630,140644,140646,140690,140692,140736,140739,140746,140757,140759,140786,140788,140814,140821,140837,140839,140933,140935,141029,141036,141039,141044,141050,141124,141127,141129,141165,141167,141203,141206,141213,141232,141235,141238,141240,141265,141267,141291,141294,141297,141327,141331,141334,141397,141399,141465,141467,141531,141534,141566,141568,141594,141596,141622,141625,141656,141658,141684,141686,141712,141715],[10,139996,139992],{"id":139997},"_15-品优购项目上篇-搭建与公共模块",[14,139999,140001],{"id":140000},"_151-项目规划","15.1 项目规划",[3583,140003],{"style":128428,"src":140004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140006,140007,140010],{},[2416,140008,140009],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140012,140013,140016],{},[2416,140014,140015],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140018,140020],{"id":140019},"_152-项目介绍","15.2 项目介绍",[19,140022,140009],{},[3583,140024],{"style":128428,"src":140025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140027,140028],{},"主页：",[3583,140030],{"style":128428,"src":140031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140033,140034],{},"列表页：",[3583,140036],{"style":128428,"src":140037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140039,140040],{},"注册页：",[3583,140042],{"style":128428,"src":140043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140045,140047],{"id":140046},"_153-项目搭建工作","15.3 项目搭建工作",[889,140049,140051],{"id":140050},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3583,140053],{"style":128428,"src":140054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140056,140057],{},"经常更换的图片要放到upload文件夹中",[19,140059,140060],{},"不经常换的放到images文件夹中",[889,140062,140064],{"id":140063},"_1532-创建文件如下","15.3.2 创建文件如下",[3583,140066],{"style":128428,"src":140067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3583,140069],{"style":128428,"src":140070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140072,140073],{},[2416,140074,140075],{},"初始化样式：",[19,140077,140078],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140080,140081],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140083,140084],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[889,140086,140088],{"id":140087},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140090,140091],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140093,140094,140095,140100],{},"这里最典型的应用就是 ",[2416,140096,140097],{},[73,140098,140099],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3583,140102],{"style":128428,"src":140103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140105,140106],{},"通过link方法来引入",[889,140108,140110],{"id":140109},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3583,140112],{"style":128428,"src":140113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140115,140116],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,140118,140119],{},[29,140120,140121],{},"制作favicon图标",[19,140123,140124,140125,140128],{},"①把品优购图标切成 ",[73,140126,140127],{},"png"," 图片",[19,140130,140131,140132,140134,140135,140138,140139],{},"②把 ",[73,140133,140127],{}," 图片转换为 ",[73,140136,140137],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2503,140140,140141],{"href":140141,"rel":140142},"http:\u002F\u002Fwww.bitbug.net\u002F",[25914],[26,140144,140145,140148],{"start":94},[29,140146,140147],{},"favicon图标放到网站根目录下",[29,140149,140150],{},"HTML页面引入favicon",[19,140152,140153,140154,140157],{},"在html 页面里面的 ",[73,140155,140156],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140159,140160],{},[73,140161,140162],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140164,140165],{},"复制这行代码或者在生成这个的网站进行复制",[3583,140167],{"style":128428,"src":140168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140170,140171],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140173,140174,140175],{},"例如:",[2503,140176,140177],{"href":140177,"rel":140178},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25914],[889,140180,140182],{"id":140181},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140184,140185,140188],{},[2416,140186,140187],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140190,140191,140194],{},[2416,140192,140193],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140196,140197],{},"页面必须有三个标签用来符合 SEO 优化",[3583,140199],{"style":128428,"src":140200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,140202,140203],{},[29,140204,140205],{},"title网站标题",[19,140207,140208,140211],{},[2416,140209,140210],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140213,70818],{},[3261,140215,140216,140219],{},[29,140217,140218],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,140220,140221],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,140223,140224],{"start":94},[29,140225,140226],{},"description网站描述",[19,140228,140229],{},"简要说明我们网站主要是做什么的",[19,140231,140232,140235],{},[2416,140233,140234],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140237,70818],{},[19,140239,140240],{},[73,140241,140242],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,140244,140245],{"start":133},[29,140246,140247],{},"keywords关键词",[19,140249,140250],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140252,70818],{},[19,140254,140255],{},[73,140256,140257],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140259,140260],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140262,140263],{},[2416,140264,140265],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,140267,140268],{"start":145},[29,140269,140270],{},"代码总结",[66,140272,140273],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,140274,140275,140279,140293,140297],{"__ignoreMap":71},[76,140276,140277],{"class":78,"line":79},[76,140278,132683],{"class":540},[76,140280,140281,140283,140285,140287,140289,140291],{"class":78,"line":94},[76,140282,584],{"class":90},[76,140284,53643],{"class":53332},[76,140286,55518],{"class":86},[76,140288,370],{"class":90},[76,140290,132696],{"class":126},[76,140292,53339],{"class":90},[76,140294,140295],{"class":78,"line":133},[76,140296,132703],{"class":90},[76,140298,140299,140301,140303],{"class":78,"line":145},[76,140300,53817],{"class":90},[76,140302,53643],{"class":53332},[76,140304,53339],{"class":90},[14,140306,140308],{"id":140307},"_154-项目公共部分制作","15.4 项目公共部分制作",[889,140310,140312],{"id":140311},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3583,140314],{"style":128428,"src":140315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[889,140317,140319],{"id":140318},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140321,140322],{},"布局思路：",[3261,140324,140325,140328,140331,140353,140386],{},[29,140326,140327],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,140329,140330],{},"里面包含版心的盒子",[29,140332,140333,140334],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3261,140335,140336,140344,140350],{},[29,140337,140338,140339,23549,140341,140343],{},"1 号盒子 里面包含一个",[73,140340,3261],{},[73,140342,3261],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,140345,140346,140347,140349],{},"里面的内容是水平排列，所以需要给",[73,140348,29],{},"设置浮动",[29,140351,140352],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,140354,140355,140356],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3261,140357,140358,140372,140377],{},[29,140359,140360,140361,23549,140363,140365,140366,140368,140369,140371],{},"2 号盒子 里面包含一个",[73,140362,3261],{},[73,140364,3261],{},"包裹",[73,140367,29],{},"，中间的",[73,140370,3177],{},"可以用样式去设置，也可以用字符 |",[29,140373,140374,140375,140349],{},"里面内容水平排列，给",[73,140376,29],{},[29,140378,140379,140380,140382,140383,140385],{},"找到里面所有偶数的 ",[73,140381,29],{}," 设置样式（偶数的 ",[73,140384,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,140387,140388,140389],{},"需要用到字体图标",[3261,140390,140391,140397,140400,140403,140406],{},[29,140392,140393,140394],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[73,140395,140396],{},"arrow-icon",[29,140398,140399],{},"先要引入字体图片的资源",[29,140401,140402],{},"在样式里面利用 font-face 来进行声明",[29,140404,140405],{},"在伪元素的 content属性设置 图标的编码",[29,140407,140408],{},"给伪元素设置font-family属性",[19,140410,140411],{},"结构实例代码：",[66,140413,140415],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},"div::before {\n  content: \"\";\n  display: block;\n}\n",[73,140416,140417,140425,140435,140445],{"__ignoreMap":71},[76,140418,140419,140421,140423],{"class":78,"line":79},[76,140420,53643],{"class":53332},[76,140422,139573],{"class":86},[76,140424,17623],{"class":90},[76,140426,140427,140429,140431,140433],{"class":78,"line":94},[76,140428,139580],{"class":119},[76,140430,53469],{"class":90},[76,140432,9730],{"class":126},[76,140434,3415],{"class":90},[76,140436,140437,140439,140441,140443],{"class":78,"line":133},[76,140438,130188],{"class":119},[76,140440,53469],{"class":90},[76,140442,62897],{"class":119},[76,140444,3415],{"class":90},[76,140446,140447],{"class":78,"line":145},[76,140448,3685],{"class":90},[19,140450,140451],{},"样式实例代码：",[66,140453,140454],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,140455,140456,140464,140474,140484],{"__ignoreMap":71},[76,140457,140458,140460,140462],{"class":78,"line":79},[76,140459,53643],{"class":53332},[76,140461,139573],{"class":86},[76,140463,17623],{"class":90},[76,140465,140466,140468,140470,140472],{"class":78,"line":94},[76,140467,139580],{"class":119},[76,140469,53469],{"class":90},[76,140471,9730],{"class":126},[76,140473,3415],{"class":90},[76,140475,140476,140478,140480,140482],{"class":78,"line":133},[76,140477,130188],{"class":119},[76,140479,53469],{"class":90},[76,140481,62897],{"class":119},[76,140483,3415],{"class":90},[76,140485,140486],{"class":78,"line":145},[76,140487,3685],{"class":90},[889,140489,140491],{"id":140490},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3261,140493,140494],{},[29,140495,140496],{},"header 盒子必须要有高度",[19,140498,140499,140500,140502,140503],{},"1 号盒子是 ",[73,140501,133584],{}," 标志定位，在正常开发过程中， ",[2416,140504,140505,140506,140509],{},"logo的布局其实是有讲究的，需要进行 ",[73,140507,140508],{},"logoSEO","的优化 （★★★）",[3261,140511,140512,140520,140528,140555],{},[29,140513,140514,140516,140517,140519],{},[73,140515,133584],{}," 里面首先放一个 ",[73,140518,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,140521,140522,140524,140525,140527],{},[73,140523,10],{}," 里面再放一个链接，可以返回首页的，把 ",[73,140526,133584],{}," 的背景图片给链接即可",[29,140529,140530,140531],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3261,140532,140533,140548],{},[29,140534,140535,140536,140539,140540,140543,140544,140547],{},"方法1：",[73,140537,140538],{},"text-indent"," 移到盒子外面（",[73,140541,140542],{},"text-indent: -9999px",") ，然后 ",[73,140545,140546],{},"overflow:hidden"," ，淘宝的做法",[29,140549,140550,140551,140554],{},"方法2：直接给 ",[73,140552,140553],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,140556,140557,140558,140560,140561,140563],{},"最后给链接一个 ",[73,140559,53439],{}," 属性，这样鼠标放到 ",[73,140562,133584],{}," 上就可以看到提示文字了",[19,140565,140411],{},[66,140567,140568],{"className":129319,"code":133805,"language":129321,"meta":71,"style":71},[73,140569,140570],{"__ignoreMap":71},[76,140571,140572,140574,140576,140578,140580,140582,140584,140586,140588,140590,140592],{"class":78,"line":79},[76,140573,584],{"class":90},[76,140575,2503],{"class":53332},[76,140577,63085],{"class":86},[76,140579,370],{"class":90},[76,140581,133820],{"class":126},[76,140583,133823],{"class":86},[76,140585,370],{"class":90},[76,140587,133828],{"class":126},[76,140589,133831],{"class":90},[76,140591,2503],{"class":53332},[76,140593,53339],{"class":90},[19,140595,140451],{},[66,140597,140598],{"className":129319,"code":133805,"language":129321,"meta":71,"style":71},[73,140599,140600],{"__ignoreMap":71},[76,140601,140602,140604,140606,140608,140610,140612,140614,140616,140618,140620,140622],{"class":78,"line":79},[76,140603,584],{"class":90},[76,140605,2503],{"class":53332},[76,140607,63085],{"class":86},[76,140609,370],{"class":90},[76,140611,133820],{"class":126},[76,140613,133823],{"class":86},[76,140615,370],{"class":90},[76,140617,133828],{"class":126},[76,140619,133831],{"class":90},[76,140621,2503],{"class":53332},[76,140623,53339],{"class":90},[19,140625,140626,140627,140629],{},"2 号盒子是 ",[73,140628,133597],{}," 搜索模块定位",[3261,140631,140632,140635,140638,140641],{},[29,140633,140634],{},"search盒子利用定位的方式放在对应的位置",[29,140636,140637],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,140639,140640],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,140642,140643],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140645,140411],{},[66,140647,140648],{"className":128572,"code":133892,"language":128574,"meta":71,"style":71},[73,140649,140650,140672,140676,140686],{"__ignoreMap":71},[76,140651,140652,140654,140656,140658,140660,140662,140664,140666,140668,140670],{"class":78,"line":79},[76,140653,53643],{"class":53332},[76,140655,405],{"class":90},[76,140657,19],{"class":53332},[76,140659,405],{"class":90},[76,140661,10],{"class":53332},[76,140663,405],{"class":90},[76,140665,3261],{"class":53332},[76,140667,405],{"class":90},[76,140669,29],{"class":53332},[76,140671,17623],{"class":90},[76,140673,140674],{"class":78,"line":94},[76,140675,133921],{"class":540},[76,140677,140678,140680,140682,140684],{"class":78,"line":133},[76,140679,130188],{"class":119},[76,140681,53469],{"class":90},[76,140683,62897],{"class":119},[76,140685,3415],{"class":90},[76,140687,140688],{"class":78,"line":145},[76,140689,3685],{"class":90},[19,140691,140451],{},[66,140693,140694],{"className":128572,"code":133892,"language":128574,"meta":71,"style":71},[73,140695,140696,140718,140722,140732],{"__ignoreMap":71},[76,140697,140698,140700,140702,140704,140706,140708,140710,140712,140714,140716],{"class":78,"line":79},[76,140699,53643],{"class":53332},[76,140701,405],{"class":90},[76,140703,19],{"class":53332},[76,140705,405],{"class":90},[76,140707,10],{"class":53332},[76,140709,405],{"class":90},[76,140711,3261],{"class":53332},[76,140713,405],{"class":90},[76,140715,29],{"class":53332},[76,140717,17623],{"class":90},[76,140719,140720],{"class":78,"line":94},[76,140721,133921],{"class":540},[76,140723,140724,140726,140728,140730],{"class":78,"line":133},[76,140725,130188],{"class":119},[76,140727,53469],{"class":90},[76,140729,62897],{"class":119},[76,140731,3415],{"class":90},[76,140733,140734],{"class":78,"line":145},[76,140735,3685],{"class":90},[19,140737,140738],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140740,140741,140742,140745],{},"3 号盒子是 ",[73,140743,140744],{},"hotwords"," 热词模块定位",[3261,140747,140748,140751,140754],{},[29,140749,140750],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,140752,140753],{},"给里面所有的a标签设置 左右10px的外边距",[29,140755,140756],{},"给第一个a标签设置文字变红色（#c81623）",[19,140758,140411],{},[66,140760,140762],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},"div {\n  margin: 0 auto;\n}\n",[73,140763,140764,140770,140782],{"__ignoreMap":71},[76,140765,140766,140768],{"class":78,"line":79},[76,140767,53643],{"class":53332},[76,140769,17623],{"class":90},[76,140771,140772,140774,140776,140778,140780],{"class":78,"line":94},[76,140773,72497],{"class":119},[76,140775,53469],{"class":90},[76,140777,1294],{"class":119},[76,140779,53588],{"class":119},[76,140781,3415],{"class":90},[76,140783,140784],{"class":78,"line":133},[76,140785,3685],{"class":90},[19,140787,140451],{},[66,140789,140790],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,140791,140792,140798,140810],{"__ignoreMap":71},[76,140793,140794,140796],{"class":78,"line":79},[76,140795,53643],{"class":53332},[76,140797,17623],{"class":90},[76,140799,140800,140802,140804,140806,140808],{"class":78,"line":94},[76,140801,72497],{"class":119},[76,140803,53469],{"class":90},[76,140805,1294],{"class":119},[76,140807,53588],{"class":119},[76,140809,3415],{"class":90},[76,140811,140812],{"class":78,"line":133},[76,140813,3685],{"class":90},[19,140815,140816,140817,140820],{},"4 号盒子是 ",[73,140818,140819],{},"shopcar"," 购物车模块",[3261,140822,140823,140828,140831,140834],{},[29,140824,125355,140825,140827],{},[73,140826,140819],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140829,140830],{},"count 统计部分用绝对定位做",[29,140832,140833],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140835,140836],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140838,140411],{},[66,140840,140841],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,140842,140843,140847,140861,140865,140879,140883,140897,140901,140915,140919],{"__ignoreMap":71},[76,140844,140845],{"class":78,"line":79},[76,140846,134011],{"class":540},[76,140848,140849,140851,140853,140855,140857,140859],{"class":78,"line":94},[76,140850,134016],{"class":86},[76,140852,81832],{"class":90},[76,140854,130932],{"class":119},[76,140856,53469],{"class":90},[76,140858,134025],{"class":119},[76,140860,131502],{"class":90},[76,140862,140863],{"class":78,"line":133},[76,140864,134032],{"class":540},[76,140866,140867,140869,140871,140873,140875,140877],{"class":78,"line":145},[76,140868,134037],{"class":86},[76,140870,81832],{"class":90},[76,140872,130932],{"class":119},[76,140874,53469],{"class":90},[76,140876,56795],{"class":119},[76,140878,131502],{"class":90},[76,140880,140881],{"class":78,"line":152},[76,140882,134052],{"class":540},[76,140884,140885,140887,140889,140891,140893,140895],{"class":78,"line":157},[76,140886,134057],{"class":86},[76,140888,81832],{"class":90},[76,140890,130932],{"class":119},[76,140892,53469],{"class":90},[76,140894,56862],{"class":119},[76,140896,131502],{"class":90},[76,140898,140899],{"class":78,"line":246},[76,140900,134072],{"class":540},[76,140902,140903,140905,140907,140909,140911,140913],{"class":78,"line":251},[76,140904,134077],{"class":86},[76,140906,81832],{"class":90},[76,140908,130932],{"class":119},[76,140910,53469],{"class":90},[76,140912,88257],{"class":119},[76,140914,131502],{"class":90},[76,140916,140917],{"class":78,"line":257},[76,140918,134092],{"class":540},[76,140920,140921,140923,140925,140927,140929,140931],{"class":78,"line":641},[76,140922,134097],{"class":86},[76,140924,81832],{"class":90},[76,140926,130932],{"class":119},[76,140928,53469],{"class":90},[76,140930,134106],{"class":119},[76,140932,131502],{"class":90},[19,140934,140451],{},[66,140936,140937],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,140938,140939,140943,140957,140961,140975,140979,140993,140997,141011,141015],{"__ignoreMap":71},[76,140940,140941],{"class":78,"line":79},[76,140942,134011],{"class":540},[76,140944,140945,140947,140949,140951,140953,140955],{"class":78,"line":94},[76,140946,134016],{"class":86},[76,140948,81832],{"class":90},[76,140950,130932],{"class":119},[76,140952,53469],{"class":90},[76,140954,134025],{"class":119},[76,140956,131502],{"class":90},[76,140958,140959],{"class":78,"line":133},[76,140960,134032],{"class":540},[76,140962,140963,140965,140967,140969,140971,140973],{"class":78,"line":145},[76,140964,134037],{"class":86},[76,140966,81832],{"class":90},[76,140968,130932],{"class":119},[76,140970,53469],{"class":90},[76,140972,56795],{"class":119},[76,140974,131502],{"class":90},[76,140976,140977],{"class":78,"line":152},[76,140978,134052],{"class":540},[76,140980,140981,140983,140985,140987,140989,140991],{"class":78,"line":157},[76,140982,134057],{"class":86},[76,140984,81832],{"class":90},[76,140986,130932],{"class":119},[76,140988,53469],{"class":90},[76,140990,56862],{"class":119},[76,140992,131502],{"class":90},[76,140994,140995],{"class":78,"line":246},[76,140996,134072],{"class":540},[76,140998,140999,141001,141003,141005,141007,141009],{"class":78,"line":251},[76,141000,134077],{"class":86},[76,141002,81832],{"class":90},[76,141004,130932],{"class":119},[76,141006,53469],{"class":90},[76,141008,88257],{"class":119},[76,141010,131502],{"class":90},[76,141012,141013],{"class":78,"line":257},[76,141014,134092],{"class":540},[76,141016,141017,141019,141021,141023,141025,141027],{"class":78,"line":641},[76,141018,134097],{"class":86},[76,141020,81832],{"class":90},[76,141022,130932],{"class":119},[76,141024,53469],{"class":90},[76,141026,134106],{"class":119},[76,141028,131502],{"class":90},[889,141030,141032,141033,141035],{"id":141031},"_1544-nav导航模块制作","15.4.4 ",[73,141034,55745],{},"导航模块制作",[3583,141037],{"style":128428,"src":141038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141040,141041,141043],{},[73,141042,55745],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141045,141046,141047],{},"1 号盒子左侧浮动，",[73,141048,141049],{},"dropdown",[3261,141051,141052,141062,141070,141076,141084,141094,141102,141113],{},[29,141053,141054,141055,103040,141058,141061],{},"1号盒子有讲究，根据相关性 里面包含 ",[73,141056,141057],{},".dt",[73,141059,141060],{},".dd"," 两个盒子",[29,141063,141064,141066,141067,141069],{},[73,141065,141057],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[73,141068,141060],{}," 挤到下面去了",[29,141071,141072,141073,141075],{},"给 ",[73,141074,141060],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,141077,141072,141078,141080,141081,122257],{},[73,141079,141060],{}," 盒子里面定义 无序列表 （",[73,141082,141083],{},"ul > li > a",[29,141085,141086,141087,141089,141090,141093],{},"每个 ",[73,141088,29],{}," 都有一个高度（",[73,141091,141092],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,141095,141072,141096,141098,141099,122257],{},[73,141097,29],{}," 里面的a设置文字大小（",[73,141100,141101],{},"14px",[29,141103,141072,141104,141106,141107,141109,141110,141112],{},[73,141105,29],{}," 设置 ",[73,141108,129733],{},"，当鼠标移入的时候，让",[73,141111,29],{},"的背景变成白色，让里面的文字变成红色",[29,141114,141115,141117,141118,141120,141121,141123],{},[73,141116,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[73,141119,29],{},"的右侧，那么给",[73,141122,29],{},"设置相对定位",[19,141125,141126],{},"一定要注意相关性",[19,141128,140411],{},[66,141130,141131],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,141132,141133,141141,141151,141161],{"__ignoreMap":71},[76,141134,141135,141137,141139],{"class":78,"line":79},[76,141136,53643],{"class":53332},[76,141138,139573],{"class":86},[76,141140,17623],{"class":90},[76,141142,141143,141145,141147,141149],{"class":78,"line":94},[76,141144,139580],{"class":119},[76,141146,53469],{"class":90},[76,141148,9730],{"class":126},[76,141150,3415],{"class":90},[76,141152,141153,141155,141157,141159],{"class":78,"line":133},[76,141154,130188],{"class":119},[76,141156,53469],{"class":90},[76,141158,62897],{"class":119},[76,141160,3415],{"class":90},[76,141162,141163],{"class":78,"line":145},[76,141164,3685],{"class":90},[19,141166,140451],{},[66,141168,141169],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,141170,141171,141179,141189,141199],{"__ignoreMap":71},[76,141172,141173,141175,141177],{"class":78,"line":79},[76,141174,53643],{"class":53332},[76,141176,139573],{"class":86},[76,141178,17623],{"class":90},[76,141180,141181,141183,141185,141187],{"class":78,"line":94},[76,141182,139580],{"class":119},[76,141184,53469],{"class":90},[76,141186,9730],{"class":126},[76,141188,3415],{"class":90},[76,141190,141191,141193,141195,141197],{"class":78,"line":133},[76,141192,130188],{"class":119},[76,141194,53469],{"class":90},[76,141196,62897],{"class":119},[76,141198,3415],{"class":90},[76,141200,141201],{"class":78,"line":145},[76,141202,3685],{"class":90},[19,141204,141205],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141207,141208,141209,141212],{},"2 号盒子左侧浮动，",[73,141210,141211],{},"navitems"," 导航栏组",[3261,141214,141215,141220,141229],{},[29,141216,141217,141218],{},"里面结构是 ",[73,141219,141083],{},[29,141221,141222,141223,141225,141226,141228],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[73,141224,2503],{},"左右的",[73,141227,32927],{},"把两侧撑开",[29,141230,141231],{},"让文字垂直居中（行高等于高度）",[3583,141233],{"style":128428,"src":141234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141236,141237],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141239,140411],{},[66,141241,141243],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},".box {\n  float: left;\n}\n",[73,141244,141245,141251,141261],{"__ignoreMap":71},[76,141246,141247,141249],{"class":78,"line":79},[76,141248,132420],{"class":86},[76,141250,17623],{"class":90},[76,141252,141253,141255,141257,141259],{"class":78,"line":94},[76,141254,133052],{"class":119},[76,141256,53469],{"class":90},[76,141258,25785],{"class":119},[76,141260,3415],{"class":90},[76,141262,141263],{"class":78,"line":133},[76,141264,3685],{"class":90},[19,141266,140451],{},[66,141268,141269],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,141270,141271,141277,141287],{"__ignoreMap":71},[76,141272,141273,141275],{"class":78,"line":79},[76,141274,132420],{"class":86},[76,141276,17623],{"class":90},[76,141278,141279,141281,141283,141285],{"class":78,"line":94},[76,141280,133052],{"class":119},[76,141282,53469],{"class":90},[76,141284,25785],{"class":119},[76,141286,3415],{"class":90},[76,141288,141289],{"class":78,"line":133},[76,141290,3685],{"class":90},[19,141292,141293],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3583,141295],{"style":128428,"src":141296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[66,141298,141299],{"className":128572,"code":132729,"language":128574,"meta":71,"style":71},[73,141300,141301,141307,141323],{"__ignoreMap":71},[76,141302,141303,141305],{"class":78,"line":79},[76,141304,53643],{"class":53332},[76,141306,17623],{"class":90},[76,141308,141309,141311,141313,141315,141317,141319,141321],{"class":78,"line":94},[76,141310,72923],{"class":119},[76,141312,53469],{"class":90},[76,141314,669],{"class":119},[76,141316,53524],{"class":82},[76,141318,53553],{"class":119},[76,141320,131964],{"class":119},[76,141322,3415],{"class":90},[76,141324,141325],{"class":78,"line":133},[76,141326,3685],{"class":90},[889,141328,141330],{"id":141329},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3583,141332],{"style":128428,"src":141333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3261,141335,141336,141341,141346],{},[29,141337,141338,141340],{},[73,141339,133775],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,141342,141343,141345],{},[73,141344,133775],{}," 里面有一个大的版心",[29,141347,141348,141349,141352,141353],{},"版心里面包含 1 号盒子，",[73,141350,141351],{},"mod_service"," 是服务模块，mod 是模块的意思",[3261,141354,141355,141360,141373,141389,141394],{},[29,141356,141072,141357,141359],{},[73,141358,141351],{}," 设置高度（80px）和下边框",[29,141361,141362,141363,141366,141367,141369,141370,141372],{},"在里面定义 ",[73,141364,141365],{},"ul > li"," ,每个",[73,141368,29],{}," 宽度是300px 高度是 50px，给每个",[73,141371,29],{},"设置35px的左内边距",[29,141374,141375,141376,141378,141379,141381,141382,141384,141385,20459,141387,122257],{},"在每个",[73,141377,29],{},"里面，放一个 ",[73,141380,24959],{},"（里面放图标），一个",[73,141383,53643],{},"（里面放",[73,141386,53643],{},[73,141388,19],{},[29,141390,141072,141391,141393],{},[73,141392,24959],{},"设置浮动，让h5与这个div左右排列",[29,141395,141396],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141398,140411],{},[66,141400,141402],{"className":128572,"code":141401,"language":128574,"meta":71,"style":71},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[73,141403,141404,141410,141422,141434,141461],{"__ignoreMap":71},[76,141405,141406,141408],{"class":78,"line":79},[76,141407,136329],{"class":86},[76,141409,17623],{"class":90},[76,141411,141412,141414,141416,141418,141420],{"class":78,"line":94},[76,141413,72595],{"class":119},[76,141415,53469],{"class":90},[76,141417,408],{"class":119},[76,141419,53524],{"class":82},[76,141421,3415],{"class":90},[76,141423,141424,141426,141428,141430,141432],{"class":78,"line":133},[76,141425,72815],{"class":119},[76,141427,53469],{"class":90},[76,141429,408],{"class":119},[76,141431,53524],{"class":82},[76,141433,3415],{"class":90},[76,141435,141436,141438,141440,141442,141444,141446,141448,141450,141453,141455,141457,141459],{"class":78,"line":145},[76,141437,72638],{"class":119},[76,141439,53469],{"class":90},[76,141441,63754],{"class":119},[76,141443,123],{"class":90},[76,141445,136368],{"class":7296},[76,141447,15767],{"class":90},[76,141449,63764],{"class":119},[76,141451,141452],{"class":119}," -10",[76,141454,53524],{"class":82},[76,141456,136387],{"class":119},[76,141458,53524],{"class":82},[76,141460,3415],{"class":90},[76,141462,141463],{"class":78,"line":152},[76,141464,3685],{"class":90},[19,141466,140451],{},[66,141468,141469],{"className":128572,"code":141401,"language":128574,"meta":71,"style":71},[73,141470,141471,141477,141489,141501,141527],{"__ignoreMap":71},[76,141472,141473,141475],{"class":78,"line":79},[76,141474,136329],{"class":86},[76,141476,17623],{"class":90},[76,141478,141479,141481,141483,141485,141487],{"class":78,"line":94},[76,141480,72595],{"class":119},[76,141482,53469],{"class":90},[76,141484,408],{"class":119},[76,141486,53524],{"class":82},[76,141488,3415],{"class":90},[76,141490,141491,141493,141495,141497,141499],{"class":78,"line":133},[76,141492,72815],{"class":119},[76,141494,53469],{"class":90},[76,141496,408],{"class":119},[76,141498,53524],{"class":82},[76,141500,3415],{"class":90},[76,141502,141503,141505,141507,141509,141511,141513,141515,141517,141519,141521,141523,141525],{"class":78,"line":145},[76,141504,72638],{"class":119},[76,141506,53469],{"class":90},[76,141508,63754],{"class":119},[76,141510,123],{"class":90},[76,141512,136368],{"class":7296},[76,141514,15767],{"class":90},[76,141516,63764],{"class":119},[76,141518,141452],{"class":119},[76,141520,53524],{"class":82},[76,141522,136387],{"class":119},[76,141524,53524],{"class":82},[76,141526,3415],{"class":90},[76,141528,141529],{"class":78,"line":152},[76,141530,3685],{"class":90},[19,141532,141533],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3261,141535,141536,141539,141545,141551,141563],{},[29,141537,141538],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,141540,141541,141542,122257],{},"里面的布局利用 自定义列表来实现（",[73,141543,141544],{},"dl > dt + dd",[29,141546,141072,141547,141550],{},[73,141548,141549],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,141552,141072,141553,141556,141557,20459,141559,141562],{},[73,141554,141555],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[73,141558,141555],{},[73,141560,141561],{},"dd","之间有些距离",[29,141564,141565],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141567,140411],{},[66,141569,141570],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,141571,141572,141578,141590],{"__ignoreMap":71},[76,141573,141574,141576],{"class":78,"line":79},[76,141575,53643],{"class":53332},[76,141577,17623],{"class":90},[76,141579,141580,141582,141584,141586,141588],{"class":78,"line":94},[76,141581,72497],{"class":119},[76,141583,53469],{"class":90},[76,141585,1294],{"class":119},[76,141587,53588],{"class":119},[76,141589,3415],{"class":90},[76,141591,141592],{"class":78,"line":133},[76,141593,3685],{"class":90},[19,141595,140451],{},[66,141597,141598],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,141599,141600,141606,141618],{"__ignoreMap":71},[76,141601,141602,141604],{"class":78,"line":79},[76,141603,53643],{"class":53332},[76,141605,17623],{"class":90},[76,141607,141608,141610,141612,141614,141616],{"class":78,"line":94},[76,141609,72497],{"class":119},[76,141611,53469],{"class":90},[76,141613,1294],{"class":119},[76,141615,53588],{"class":119},[76,141617,3415],{"class":90},[76,141619,141620],{"class":78,"line":133},[76,141621,3685],{"class":90},[19,141623,141624],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3261,141626,141627,141636,141639,141650],{},[29,141628,141629,141630,141632,141633,141635],{},"分为上下两块，上面是 ",[73,141631,133792],{}," 友情链接，下面是 ",[73,141634,133785],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,141637,141638],{},"把内容分别复制到相应模块中",[29,141640,141072,141641,141643,141644,141646,141647,141649],{},[73,141642,133792],{}," 设置 15px 的下外边距，给",[73,141645,133792],{}," 里面 的 ",[73,141648,2503],{}," 标签设置 左右 3px 的外边距",[29,141651,141652,141653,141655],{},"给",[73,141654,133785],{}," 设置 20px 的行高",[19,141657,140411],{},[66,141659,141660],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,141661,141662,141668,141680],{"__ignoreMap":71},[76,141663,141664,141666],{"class":78,"line":79},[76,141665,53643],{"class":53332},[76,141667,17623],{"class":90},[76,141669,141670,141672,141674,141676,141678],{"class":78,"line":94},[76,141671,72497],{"class":119},[76,141673,53469],{"class":90},[76,141675,1294],{"class":119},[76,141677,53588],{"class":119},[76,141679,3415],{"class":90},[76,141681,141682],{"class":78,"line":133},[76,141683,3685],{"class":90},[19,141685,140451],{},[66,141687,141688],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,141689,141690,141696,141708],{"__ignoreMap":71},[76,141691,141692,141694],{"class":78,"line":79},[76,141693,53643],{"class":53332},[76,141695,17623],{"class":90},[76,141697,141698,141700,141702,141704,141706],{"class":78,"line":94},[76,141699,72497],{"class":119},[76,141701,53469],{"class":90},[76,141703,1294],{"class":119},[76,141705,53588],{"class":119},[76,141707,3415],{"class":90},[76,141709,141710],{"class":78,"line":133},[76,141711,3685],{"class":90},[19,141713,141714],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2178,141716,141717],{},"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":71,"searchDepth":94,"depth":94,"links":141719},[141720,141721,141722,141729],{"id":140000,"depth":94,"text":140001},{"id":140019,"depth":94,"text":140020},{"id":140046,"depth":94,"text":140047,"children":141723},[141724,141725,141726,141727,141728],{"id":140050,"depth":133,"text":140051},{"id":140063,"depth":133,"text":140064},{"id":140087,"depth":133,"text":140088},{"id":140109,"depth":133,"text":140110},{"id":140181,"depth":133,"text":140182},{"id":140307,"depth":94,"text":140308,"children":141730},[141731,141732,141733,141734,141736],{"id":140311,"depth":133,"text":140312},{"id":140318,"depth":133,"text":140319},{"id":140490,"depth":133,"text":140491},{"id":141031,"depth":133,"text":141735},"15.4.4 nav导航模块制作",{"id":141329,"depth":133,"text":141330},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139992,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141743,"title":141744,"body":141745,"description":2201,"extension":2202,"meta":144147,"navigation":148,"path":144148,"seo":144149,"stem":144150,"__hash__":144151},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141746,"toc":144124},[141747,141750,141754,141758,141770,141773,141776,141779,141790,141792,141816,141818,141842,141847,141850,141852,141888,141890,141926,141929,141934,141937,141940,141943,141973,141980,141983,141993,141995,142029,142032,142066,142072,142089,142091,142127,142129,142165,142170,142195,142197,142223,142225,142249,142256,142259,142323,142325,142367,142369,142409,142416,142421,142423,142453,142455,142485,142489,142492,142499,142511,142513,142539,142541,142565,142568,142570,142594,142600,142610,142612,142642,142644,142674,142681,142722,142724,142760,142762,142798,142802,142805,142808,142811,142817,142822,142825,142848,142851,142875,142878,142902,142907,142910,142913,142916,142919,142922,142996,142998,143028,143030,143060,143063,143066,143098,143102,143106,143120,143129,143132,143137,143139,143233,143235,143329,143352,143354,143378,143380,143404,143411,143414,143424,143426,143450,143455,143463,143465,143495,143500,143540,143542,143568,143570,143596,143600,143603,143608,143611,143615,143623,143630,143638,143640,143670,143672,143702,143710,143713,143716,143718,143748,143750,143780,143783,143788,143790,143814,143816,143840,143843,143928,143930,143954,143956,143980,143984,143986,144010,144012,144046,144050,144064,144067,144072,144075,144080,144083,144113,144121],[10,141748,141744],{"id":141749},"_16-品优购项目下篇-主体与页面开发",[14,141751,141753],{"id":141752},"_161-项目主体模块制作","16.1 项目主体模块制作",[889,141755,141757],{"id":141756},"_1611-首页制作","16.1.1 首页制作",[19,141759,141760,141762,141763,141765,141766,141769],{},[2416,141761,104080],{}," 主体模块是 ",[2416,141764,76085],{}," 里面专有的，注意需要新的样式文件 ",[2416,141767,141768],{},"index.css，"," 就不要写在common.css中了",[3583,141771],{"style":128428,"src":141772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3583,141774],{"style":128428,"src":141775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141777,141778],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3261,141780,141781,141784,141787],{},[29,141782,141783],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141785,141786],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141788,141789],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141791,140411],{},[66,141793,141794],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,141795,141796,141802,141812],{"__ignoreMap":71},[76,141797,141798,141800],{"class":78,"line":79},[76,141799,132420],{"class":86},[76,141801,17623],{"class":90},[76,141803,141804,141806,141808,141810],{"class":78,"line":94},[76,141805,133052],{"class":119},[76,141807,53469],{"class":90},[76,141809,25785],{"class":119},[76,141811,3415],{"class":90},[76,141813,141814],{"class":78,"line":133},[76,141815,3685],{"class":90},[19,141817,140451],{},[66,141819,141820],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,141821,141822,141828,141838],{"__ignoreMap":71},[76,141823,141824,141826],{"class":78,"line":79},[76,141825,132420],{"class":86},[76,141827,17623],{"class":90},[76,141829,141830,141832,141834,141836],{"class":78,"line":94},[76,141831,133052],{"class":119},[76,141833,53469],{"class":90},[76,141835,25785],{"class":119},[76,141837,3415],{"class":90},[76,141839,141840],{"class":78,"line":133},[76,141841,3685],{"class":90},[26,141843,141844],{},[29,141845,141846],{},"左侧focus模块制作",[3583,141848],{"style":128428,"src":141849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141851,140411],{},[66,141853,141854],{"className":128572,"code":129895,"language":128574,"meta":71,"style":71},[73,141855,141856,141864,141874,141884],{"__ignoreMap":71},[76,141857,141858,141860,141862],{"class":78,"line":79},[76,141859,1673],{"class":53332},[76,141861,63928],{"class":86},[76,141863,17623],{"class":90},[76,141865,141866,141868,141870,141872],{"class":78,"line":94},[76,141867,129910],{"class":119},[76,141869,53469],{"class":90},[76,141871,56920],{"class":119},[76,141873,3415],{"class":90},[76,141875,141876,141878,141880,141882],{"class":78,"line":133},[76,141877,72825],{"class":119},[76,141879,53469],{"class":90},[76,141881,56768],{"class":119},[76,141883,3415],{"class":90},[76,141885,141886],{"class":78,"line":145},[76,141887,3685],{"class":90},[19,141889,140451],{},[66,141891,141892],{"className":128572,"code":129895,"language":128574,"meta":71,"style":71},[73,141893,141894,141902,141912,141922],{"__ignoreMap":71},[76,141895,141896,141898,141900],{"class":78,"line":79},[76,141897,1673],{"class":53332},[76,141899,63928],{"class":86},[76,141901,17623],{"class":90},[76,141903,141904,141906,141908,141910],{"class":78,"line":94},[76,141905,129910],{"class":119},[76,141907,53469],{"class":90},[76,141909,56920],{"class":119},[76,141911,3415],{"class":90},[76,141913,141914,141916,141918,141920],{"class":78,"line":133},[76,141915,72825],{"class":119},[76,141917,53469],{"class":90},[76,141919,56768],{"class":119},[76,141921,3415],{"class":90},[76,141923,141924],{"class":78,"line":145},[76,141925,3685],{"class":90},[19,141927,141928],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141930,141931],{"start":94},[29,141932,141933],{},"右侧newsflash模块制作",[3583,141935],{"style":128428,"src":141936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141938,141939],{},"右侧的模块 分为上中下三个盒子",[19,141941,141942],{},"结构代码：",[66,141944,141945],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,141946,141947],{"__ignoreMap":71},[76,141948,141949,141951,141953,141955,141957,141959,141961,141963,141965,141967,141969,141971],{"class":78,"line":79},[76,141950,584],{"class":90},[76,141952,3583],{"class":53332},[76,141954,57270],{"class":86},[76,141956,370],{"class":90},[76,141958,136089],{"class":126},[76,141960,57278],{"class":86},[76,141962,370],{"class":90},[76,141964,136096],{"class":126},[76,141966,136099],{"class":86},[76,141968,370],{"class":90},[76,141970,136104],{"class":126},[76,141972,53339],{"class":90},[19,141974,141975,141976,141979],{},"1 号盒子为 ",[73,141977,141978],{},"news"," 新闻模块 高度为 165px",[3583,141981],{"style":128428,"src":141982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141984,141985,141986,141989,141990],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[73,141987,141988],{},"news-hd","，下面是 ",[73,141991,141992],{},"news-bd",[19,141994,141942],{},[66,141996,141997],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,141998,141999,142003,142017,142021],{"__ignoreMap":71},[76,142000,142001],{"class":78,"line":79},[76,142002,132683],{"class":540},[76,142004,142005,142007,142009,142011,142013,142015],{"class":78,"line":94},[76,142006,584],{"class":90},[76,142008,53643],{"class":53332},[76,142010,55518],{"class":86},[76,142012,370],{"class":90},[76,142014,132696],{"class":126},[76,142016,53339],{"class":90},[76,142018,142019],{"class":78,"line":133},[76,142020,132703],{"class":90},[76,142022,142023,142025,142027],{"class":78,"line":145},[76,142024,53817],{"class":90},[76,142026,53643],{"class":53332},[76,142028,53339],{"class":90},[19,142030,142031],{},"样式代码：",[66,142033,142034],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,142035,142036,142040,142054,142058],{"__ignoreMap":71},[76,142037,142038],{"class":78,"line":79},[76,142039,132683],{"class":540},[76,142041,142042,142044,142046,142048,142050,142052],{"class":78,"line":94},[76,142043,584],{"class":90},[76,142045,53643],{"class":53332},[76,142047,55518],{"class":86},[76,142049,370],{"class":90},[76,142051,132696],{"class":126},[76,142053,53339],{"class":90},[76,142055,142056],{"class":78,"line":133},[76,142057,132703],{"class":90},[76,142059,142060,142062,142064],{"class":78,"line":145},[76,142061,53817],{"class":90},[76,142063,53643],{"class":53332},[76,142065,53339],{"class":90},[19,142067,142068,142069,142071],{},"上面是",[73,142070,141988],{},"，设置高度是 33px，设置下边框",[3261,142073,142074,142080],{},[29,142075,142076,142077,142079],{},"里面放一个",[73,142078,24959],{}," 标题",[29,142081,142082,142083,142085,142086,142088],{},"放一个a",[73,142084,104715],{},"，内容是 更多，然后让 ",[73,142087,2503],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142090,141942],{},[66,142092,142093],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,142094,142095,142103,142113,142123],{"__ignoreMap":71},[76,142096,142097,142099,142101],{"class":78,"line":79},[76,142098,53643],{"class":53332},[76,142100,139573],{"class":86},[76,142102,17623],{"class":90},[76,142104,142105,142107,142109,142111],{"class":78,"line":94},[76,142106,139580],{"class":119},[76,142108,53469],{"class":90},[76,142110,9730],{"class":126},[76,142112,3415],{"class":90},[76,142114,142115,142117,142119,142121],{"class":78,"line":133},[76,142116,130188],{"class":119},[76,142118,53469],{"class":90},[76,142120,62897],{"class":119},[76,142122,3415],{"class":90},[76,142124,142125],{"class":78,"line":145},[76,142126,3685],{"class":90},[19,142128,142031],{},[66,142130,142131],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,142132,142133,142141,142151,142161],{"__ignoreMap":71},[76,142134,142135,142137,142139],{"class":78,"line":79},[76,142136,53643],{"class":53332},[76,142138,139573],{"class":86},[76,142140,17623],{"class":90},[76,142142,142143,142145,142147,142149],{"class":78,"line":94},[76,142144,139580],{"class":119},[76,142146,53469],{"class":90},[76,142148,9730],{"class":126},[76,142150,3415],{"class":90},[76,142152,142153,142155,142157,142159],{"class":78,"line":133},[76,142154,130188],{"class":119},[76,142156,53469],{"class":90},[76,142158,62897],{"class":119},[76,142160,3415],{"class":90},[76,142162,142163],{"class":78,"line":145},[76,142164,3685],{"class":90},[19,142166,142167,142168],{},"下面是",[73,142169,141992],{},[3261,142171,142172,142180],{},[29,142173,142174,142175,103040,142177,142179],{},"里面包含 ",[73,142176,3261],{},[73,142178,29],{}," 还有链接",[29,142181,141652,142182,142184,142185,142187,142188,142191,142192],{},[73,142183,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[73,142186,133238],{}," 2.设置 ",[73,142189,142190],{},"white-space: nowrap;"," 3. 设置 ",[73,142193,142194],{},"text-overflow: ellipsis;",[19,142196,141942],{},[66,142198,142200],{"className":128572,"code":142199,"language":128574,"meta":71,"style":71},"div {\n  overflow: hidden;\n}\n",[73,142201,142202,142208,142219],{"__ignoreMap":71},[76,142203,142204,142206],{"class":78,"line":79},[76,142205,53643],{"class":53332},[76,142207,17623],{"class":90},[76,142209,142210,142213,142215,142217],{"class":78,"line":94},[76,142211,142212],{"class":119},"  overflow",[76,142214,53469],{"class":90},[76,142216,63742],{"class":119},[76,142218,3415],{"class":90},[76,142220,142221],{"class":78,"line":133},[76,142222,3685],{"class":90},[19,142224,142031],{},[66,142226,142227],{"className":128572,"code":142199,"language":128574,"meta":71,"style":71},[73,142228,142229,142235,142245],{"__ignoreMap":71},[76,142230,142231,142233],{"class":78,"line":79},[76,142232,53643],{"class":53332},[76,142234,17623],{"class":90},[76,142236,142237,142239,142241,142243],{"class":78,"line":94},[76,142238,142212],{"class":119},[76,142240,53469],{"class":90},[76,142242,63742],{"class":119},[76,142244,3415],{"class":90},[76,142246,142247],{"class":78,"line":133},[76,142248,3685],{"class":90},[19,142250,142251,142252,142255],{},"2 号盒子为 ",[73,142253,142254],{},"lifeservice"," 生活服务模块 高度为 209px",[3583,142257],{"style":128428,"src":142258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3261,142260,142261,142264,142274,142298,142309],{},[29,142262,142263],{},"设置边框（左右下边框）",[29,142265,142266,142267,142270,142271,142273],{},"里面的内容 是 ",[73,142268,142269],{},"ul > 12*li","，给",[73,142272,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,142275,142276,142277],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3261,142278,142279,142284,142293],{},[29,142280,142281,142283],{},[73,142282,142254],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,142285,142286,142287,142289,142290,142292],{},"可以让 ",[73,142288,142254],{}," 里面的 ",[73,142291,3261],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,142294,142295,142297],{},[73,142296,142254],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,142299,118487,142300,142302,142303,142305,142306,142308],{},[73,142301,29],{}," 里面放一个 ",[73,142304,2705],{},"（里面放图标），下面的文本用 ",[73,142307,19],{}," 标签包裹",[29,142310,141072,142311,142313,142314,142316,142317,141106,142319,142322],{},[73,142312,2705],{}," 设置 24px宽和28px的高（注意 ",[73,142315,2705],{}," 是行内元素， 转成行内块），给 ",[73,142318,29],{},[73,142320,142321],{},"text-align:center"," 让里面内容居中显示",[19,142324,141942],{},[66,142326,142328],{"className":128572,"code":142327,"language":128574,"meta":71,"style":71},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[73,142329,142330,142348,142353,142363],{"__ignoreMap":71},[76,142331,142332,142334,142336,142338,142340,142342,142344,142346],{"class":78,"line":79},[76,142333,76],{"class":53332},[76,142335,405],{"class":90},[76,142337,2503],{"class":53332},[76,142339,405],{"class":90},[76,142341,25602],{"class":53332},[76,142343,405],{"class":90},[76,142345,2416],{"class":53332},[76,142347,17623],{"class":90},[76,142349,142350],{"class":78,"line":94},[76,142351,142352],{"class":540},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[76,142354,142355,142357,142359,142361],{"class":78,"line":133},[76,142356,130188],{"class":119},[76,142358,53469],{"class":90},[76,142360,130250],{"class":119},[76,142362,3415],{"class":90},[76,142364,142365],{"class":78,"line":145},[76,142366,3685],{"class":90},[19,142368,142031],{},[66,142370,142371],{"className":128572,"code":142327,"language":128574,"meta":71,"style":71},[73,142372,142373,142391,142395,142405],{"__ignoreMap":71},[76,142374,142375,142377,142379,142381,142383,142385,142387,142389],{"class":78,"line":79},[76,142376,76],{"class":53332},[76,142378,405],{"class":90},[76,142380,2503],{"class":53332},[76,142382,405],{"class":90},[76,142384,25602],{"class":53332},[76,142386,405],{"class":90},[76,142388,2416],{"class":53332},[76,142390,17623],{"class":90},[76,142392,142393],{"class":78,"line":94},[76,142394,142352],{"class":540},[76,142396,142397,142399,142401,142403],{"class":78,"line":133},[76,142398,130188],{"class":119},[76,142400,53469],{"class":90},[76,142402,130250],{"class":119},[76,142404,3415],{"class":90},[76,142406,142407],{"class":78,"line":145},[76,142408,3685],{"class":90},[19,142410,142411,142412,142415],{},"3 号盒子为 ",[73,142413,142414],{},"bargain"," 特价商品",[3261,142417,142418],{},[29,142419,142420],{},"这个比较简单，直接插入一张图片即可",[19,142422,141942],{},[66,142424,142425],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,142426,142427],{"__ignoreMap":71},[76,142428,142429,142431,142433,142435,142437,142439,142441,142443,142445,142447,142449,142451],{"class":78,"line":79},[76,142430,584],{"class":90},[76,142432,3583],{"class":53332},[76,142434,57270],{"class":86},[76,142436,370],{"class":90},[76,142438,136089],{"class":126},[76,142440,57278],{"class":86},[76,142442,370],{"class":90},[76,142444,136096],{"class":126},[76,142446,136099],{"class":86},[76,142448,370],{"class":90},[76,142450,136104],{"class":126},[76,142452,53339],{"class":90},[19,142454,142031],{},[66,142456,142457],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,142458,142459],{"__ignoreMap":71},[76,142460,142461,142463,142465,142467,142469,142471,142473,142475,142477,142479,142481,142483],{"class":78,"line":79},[76,142462,584],{"class":90},[76,142464,3583],{"class":53332},[76,142466,57270],{"class":86},[76,142468,370],{"class":90},[76,142470,136089],{"class":126},[76,142472,57278],{"class":86},[76,142474,370],{"class":90},[76,142476,136096],{"class":126},[76,142478,136099],{"class":86},[76,142480,370],{"class":90},[76,142482,136104],{"class":126},[76,142484,53339],{"class":90},[889,142486,142488],{"id":142487},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3583,142490],{"style":128428,"src":142491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142493,142494,142495,142498],{},"大盒子 ",[73,142496,142497],{},"recom"," 推荐模块 recommend",[3261,142500,142501],{},[29,142502,142503,142504,142506,142507,142510],{},"给这个 ",[73,142505,142497],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[73,142508,142509],{},"#ebebeb","），设置距离上边 12px",[19,142512,141942],{},[66,142514,142516],{"className":128572,"code":142515,"language":128574,"meta":71,"style":71},"div {\n  background-color: #f0f0f0;\n}\n",[73,142517,142518,142524,142535],{"__ignoreMap":71},[76,142519,142520,142522],{"class":78,"line":79},[76,142521,53643],{"class":53332},[76,142523,17623],{"class":90},[76,142525,142526,142528,142530,142533],{"class":78,"line":94},[76,142527,72905],{"class":119},[76,142529,53469],{"class":90},[76,142531,142532],{"class":119},"#f0f0f0",[76,142534,3415],{"class":90},[76,142536,142537],{"class":78,"line":133},[76,142538,3685],{"class":90},[19,142540,142031],{},[66,142542,142543],{"className":128572,"code":142515,"language":128574,"meta":71,"style":71},[73,142544,142545,142551,142561],{"__ignoreMap":71},[76,142546,142547,142549],{"class":78,"line":79},[76,142548,53643],{"class":53332},[76,142550,17623],{"class":90},[76,142552,142553,142555,142557,142559],{"class":78,"line":94},[76,142554,72905],{"class":119},[76,142556,53469],{"class":90},[76,142558,142532],{"class":119},[76,142560,3415],{"class":90},[76,142562,142563],{"class":78,"line":133},[76,142564,3685],{"class":90},[19,142566,142567],{},"里面包含 2 个盒子， 浮动即可",[19,142569,141942],{},[66,142571,142572],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,142573,142574,142580,142590],{"__ignoreMap":71},[76,142575,142576,142578],{"class":78,"line":79},[76,142577,132420],{"class":86},[76,142579,17623],{"class":90},[76,142581,142582,142584,142586,142588],{"class":78,"line":94},[76,142583,133052],{"class":119},[76,142585,53469],{"class":90},[76,142587,25785],{"class":119},[76,142589,3415],{"class":90},[76,142591,142592],{"class":78,"line":133},[76,142593,3685],{"class":90},[19,142595,142596,142597],{},"1 号盒子 ",[73,142598,142599],{},"recom_hd",[3261,142601,142602,142605],{},[29,142603,142604],{},"设置宽度205px，高度163px",[29,142606,142076,142607,142609],{},[73,142608,3583],{},"标签，插入图片即可",[19,142611,141942],{},[66,142613,142614],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,142615,142616],{"__ignoreMap":71},[76,142617,142618,142620,142622,142624,142626,142628,142630,142632,142634,142636,142638,142640],{"class":78,"line":79},[76,142619,584],{"class":90},[76,142621,3583],{"class":53332},[76,142623,57270],{"class":86},[76,142625,370],{"class":90},[76,142627,136089],{"class":126},[76,142629,57278],{"class":86},[76,142631,370],{"class":90},[76,142633,136096],{"class":126},[76,142635,136099],{"class":86},[76,142637,370],{"class":90},[76,142639,136104],{"class":126},[76,142641,53339],{"class":90},[19,142643,142031],{},[66,142645,142646],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,142647,142648],{"__ignoreMap":71},[76,142649,142650,142652,142654,142656,142658,142660,142662,142664,142666,142668,142670,142672],{"class":78,"line":79},[76,142651,584],{"class":90},[76,142653,3583],{"class":53332},[76,142655,57270],{"class":86},[76,142657,370],{"class":90},[76,142659,136089],{"class":126},[76,142661,57278],{"class":86},[76,142663,370],{"class":90},[76,142665,136096],{"class":126},[76,142667,136099],{"class":86},[76,142669,370],{"class":90},[76,142671,136104],{"class":126},[76,142673,53339],{"class":90},[19,142675,142676,142677,142680],{},"2 号盒子 ",[73,142678,142679],{},"recom_bd"," ，注意里面的小竖线",[3261,142682,142683,142694,142697,142702,142707],{},[29,142684,142685,142686,142688,142689,142691,142692],{},"右侧结构里面放 ",[73,142687,3261],{}," 包含 4个 ",[73,142690,29],{},"，每个li里面包含一个",[73,142693,3583],{},[29,142695,142696],{},"直接利用切片工具把里面的内容当成一张图片",[29,142698,141072,142699,142701],{},[73,142700,29],{}," 设置浮动",[29,142703,141072,142704,142706],{},[73,142705,3583],{}," 设置宽高，宽度 248px，高度 163px",[29,142708,142709,142710,142270,142713,142715,142716,142718,142719],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[73,142711,142712],{},"top 10px",[73,142714,29],{},"设置相对定位（注意，最后一个",[73,142717,29],{},"不用设置伪元素），可以利用 ",[73,142720,142721],{},"nth-child(-n+3){...}",[19,142723,141942],{},[66,142725,142726],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,142727,142728,142736,142746,142756],{"__ignoreMap":71},[76,142729,142730,142732,142734],{"class":78,"line":79},[76,142731,53643],{"class":53332},[76,142733,139573],{"class":86},[76,142735,17623],{"class":90},[76,142737,142738,142740,142742,142744],{"class":78,"line":94},[76,142739,139580],{"class":119},[76,142741,53469],{"class":90},[76,142743,9730],{"class":126},[76,142745,3415],{"class":90},[76,142747,142748,142750,142752,142754],{"class":78,"line":133},[76,142749,130188],{"class":119},[76,142751,53469],{"class":90},[76,142753,62897],{"class":119},[76,142755,3415],{"class":90},[76,142757,142758],{"class":78,"line":145},[76,142759,3685],{"class":90},[19,142761,142031],{},[66,142763,142764],{"className":128572,"code":140414,"language":128574,"meta":71,"style":71},[73,142765,142766,142774,142784,142794],{"__ignoreMap":71},[76,142767,142768,142770,142772],{"class":78,"line":79},[76,142769,53643],{"class":53332},[76,142771,139573],{"class":86},[76,142773,17623],{"class":90},[76,142775,142776,142778,142780,142782],{"class":78,"line":94},[76,142777,139580],{"class":119},[76,142779,53469],{"class":90},[76,142781,9730],{"class":126},[76,142783,3415],{"class":90},[76,142785,142786,142788,142790,142792],{"class":78,"line":133},[76,142787,130188],{"class":119},[76,142789,53469],{"class":90},[76,142791,62897],{"class":119},[76,142793,3415],{"class":90},[76,142795,142796],{"class":78,"line":145},[76,142797,3685],{"class":90},[889,142799,142801],{"id":142800},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3583,142803],{"style":128428,"src":142804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142806,142807],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142809,142810],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142812,142813,142816],{},[73,142814,142815],{},"box_hd"," 制作",[19,142818,142596,142819,142821],{},[73,142820,142815],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3583,142823],{"style":128428,"src":142824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3261,142826,142827,142832,142837,142840],{},[29,142828,142829,142831],{},[73,142830,142815],{}," 给 30px 的高度，2个像素的下边框",[29,142833,142834,142835],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[73,142836,141083],{},[29,142838,142839],{},"左侧盒左浮动，右侧盒子右浮动",[29,142841,142842,142844,142845,142847],{},[73,142843,2503],{},"标签之间的距离用左右的",[73,142846,32927],{},"撑开即可",[19,142849,142850],{},"结构代码",[66,142852,142853],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,142854,142855,142861,142871],{"__ignoreMap":71},[76,142856,142857,142859],{"class":78,"line":79},[76,142858,132420],{"class":86},[76,142860,17623],{"class":90},[76,142862,142863,142865,142867,142869],{"class":78,"line":94},[76,142864,133052],{"class":119},[76,142866,53469],{"class":90},[76,142868,25785],{"class":119},[76,142870,3415],{"class":90},[76,142872,142873],{"class":78,"line":133},[76,142874,3685],{"class":90},[19,142876,142877],{},"样式代码",[66,142879,142880],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,142881,142882,142888,142898],{"__ignoreMap":71},[76,142883,142884,142886],{"class":78,"line":79},[76,142885,132420],{"class":86},[76,142887,17623],{"class":90},[76,142889,142890,142892,142894,142896],{"class":78,"line":94},[76,142891,133052],{"class":119},[76,142893,53469],{"class":90},[76,142895,25785],{"class":119},[76,142897,3415],{"class":90},[76,142899,142900],{"class":78,"line":133},[76,142901,3685],{"class":90},[19,142903,142904,142816],{},[73,142905,142906],{},"box_bd",[19,142908,142909],{},"2 号盒子 box_bd，不要给高度",[3583,142911],{"style":128428,"src":142912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142914,142915],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142917,142918],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142920,142921],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3261,142923,142924,142936,142952],{},[29,142925,142926,142928,142929,142932,142933,142935],{},[73,142927,142906],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[73,142930,142931],{},"tab_content","，在",[73,142934,142931],{}," 里面包裹tab选项卡对应的内容",[29,142937,142938,142939,142942,142943,142945,142946,142948,142949,142951],{},"内容被一个大盒子包裹（",[73,142940,142941],{},"tab_list_item","），里面是 ",[73,142944,3261],{}," 包裹 5个 ",[73,142947,29],{},"，每个",[73,142950,29],{},"设置对应的宽度，然后设置浮动",[29,142953,142954,142955,142957,142958,142960,142961],{},"而这5个",[73,142956,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[73,142959,29],{},"设置",[3261,142962,142963,142981,142984],{},[29,142964,142965,142966,142968,142969,142971,142972,142974,142975,142977,142978,142980],{},"第一个小 ",[73,142967,29],{}," 分为上下结构，上面是 ",[73,142970,3261],{}," 包裹 ",[73,142973,29],{}," ，",[73,142976,29],{},"里面包裹 ",[73,142979,2503],{},"，下面插入一张图片",[29,142982,142983],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142985,142986,142987,142989,142990,142992,142993,142995],{},"后面的小 ",[73,142988,29],{}," 里面先放一个",[73,142991,2503],{},"标签，然后在",[73,142994,2503],{},"标签里面插入图片即可",[19,142997,142850],{},[66,142999,143000],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,143001,143002],{"__ignoreMap":71},[76,143003,143004,143006,143008,143010,143012,143014,143016,143018,143020,143022,143024,143026],{"class":78,"line":79},[76,143005,584],{"class":90},[76,143007,3583],{"class":53332},[76,143009,57270],{"class":86},[76,143011,370],{"class":90},[76,143013,136089],{"class":126},[76,143015,57278],{"class":86},[76,143017,370],{"class":90},[76,143019,136096],{"class":126},[76,143021,136099],{"class":86},[76,143023,370],{"class":90},[76,143025,136104],{"class":126},[76,143027,53339],{"class":90},[19,143029,142877],{},[66,143031,143032],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,143033,143034],{"__ignoreMap":71},[76,143035,143036,143038,143040,143042,143044,143046,143048,143050,143052,143054,143056,143058],{"class":78,"line":79},[76,143037,584],{"class":90},[76,143039,3583],{"class":53332},[76,143041,57270],{"class":86},[76,143043,370],{"class":90},[76,143045,136089],{"class":126},[76,143047,57278],{"class":86},[76,143049,370],{"class":90},[76,143051,136096],{"class":126},[76,143053,136099],{"class":86},[76,143055,370],{"class":90},[76,143057,136104],{"class":126},[76,143059,53339],{"class":90},[19,143061,143062],{},"tab栏切换需求！！！！！！介绍：",[3583,143064],{"style":128428,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3261,143067,143068,143076,143082,143085],{},[29,143069,143070,143073,143074],{},[73,143071,143072],{},"tab","栏的布局是 ",[73,143075,141083],{},[29,143077,143078,143079,143081],{},"有多少个",[73,143080,143072],{},"选项卡，那么对应就有多少个内容",[29,143083,143084],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,143086,143087,143088,143091,143092,143094,143095,143097],{},"等后面我们学习了",[73,143089,143090],{},"js","之后，我们就会配合",[73,143093,143090],{},"来实现，",[73,143096,143072],{},"栏的切换",[14,143099,143101],{"id":143100},"_162-列表制作","16.2 列表制作",[889,143103,143105],{"id":143104},"_1621-准备工作","16.2.1 准备工作",[3261,143107,143108,143111,143114,143117],{},[29,143109,143110],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,143112,143113],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,143115,143116],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,143118,143119],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[889,143121,143123,143124,103040,143126,143128],{"id":143122},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[73,143125,133577],{},[73,143127,55745],{}," 修改",[3583,143130],{"style":128428,"src":143131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3261,143133,143134],{},[29,143135,143136],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143138,141942],{},[66,143140,143141],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,143142,143143,143147,143161,143165,143179,143183,143197,143201,143215,143219],{"__ignoreMap":71},[76,143144,143145],{"class":78,"line":79},[76,143146,134011],{"class":540},[76,143148,143149,143151,143153,143155,143157,143159],{"class":78,"line":94},[76,143150,134016],{"class":86},[76,143152,81832],{"class":90},[76,143154,130932],{"class":119},[76,143156,53469],{"class":90},[76,143158,134025],{"class":119},[76,143160,131502],{"class":90},[76,143162,143163],{"class":78,"line":133},[76,143164,134032],{"class":540},[76,143166,143167,143169,143171,143173,143175,143177],{"class":78,"line":145},[76,143168,134037],{"class":86},[76,143170,81832],{"class":90},[76,143172,130932],{"class":119},[76,143174,53469],{"class":90},[76,143176,56795],{"class":119},[76,143178,131502],{"class":90},[76,143180,143181],{"class":78,"line":152},[76,143182,134052],{"class":540},[76,143184,143185,143187,143189,143191,143193,143195],{"class":78,"line":157},[76,143186,134057],{"class":86},[76,143188,81832],{"class":90},[76,143190,130932],{"class":119},[76,143192,53469],{"class":90},[76,143194,56862],{"class":119},[76,143196,131502],{"class":90},[76,143198,143199],{"class":78,"line":246},[76,143200,134072],{"class":540},[76,143202,143203,143205,143207,143209,143211,143213],{"class":78,"line":251},[76,143204,134077],{"class":86},[76,143206,81832],{"class":90},[76,143208,130932],{"class":119},[76,143210,53469],{"class":90},[76,143212,88257],{"class":119},[76,143214,131502],{"class":90},[76,143216,143217],{"class":78,"line":257},[76,143218,134092],{"class":540},[76,143220,143221,143223,143225,143227,143229,143231],{"class":78,"line":641},[76,143222,134097],{"class":86},[76,143224,81832],{"class":90},[76,143226,130932],{"class":119},[76,143228,53469],{"class":90},[76,143230,134106],{"class":119},[76,143232,131502],{"class":90},[19,143234,142031],{},[66,143236,143237],{"className":128572,"code":134004,"language":128574,"meta":71,"style":71},[73,143238,143239,143243,143257,143261,143275,143279,143293,143297,143311,143315],{"__ignoreMap":71},[76,143240,143241],{"class":78,"line":79},[76,143242,134011],{"class":540},[76,143244,143245,143247,143249,143251,143253,143255],{"class":78,"line":94},[76,143246,134016],{"class":86},[76,143248,81832],{"class":90},[76,143250,130932],{"class":119},[76,143252,53469],{"class":90},[76,143254,134025],{"class":119},[76,143256,131502],{"class":90},[76,143258,143259],{"class":78,"line":133},[76,143260,134032],{"class":540},[76,143262,143263,143265,143267,143269,143271,143273],{"class":78,"line":145},[76,143264,134037],{"class":86},[76,143266,81832],{"class":90},[76,143268,130932],{"class":119},[76,143270,53469],{"class":90},[76,143272,56795],{"class":119},[76,143274,131502],{"class":90},[76,143276,143277],{"class":78,"line":152},[76,143278,134052],{"class":540},[76,143280,143281,143283,143285,143287,143289,143291],{"class":78,"line":157},[76,143282,134057],{"class":86},[76,143284,81832],{"class":90},[76,143286,130932],{"class":119},[76,143288,53469],{"class":90},[76,143290,56862],{"class":119},[76,143292,131502],{"class":90},[76,143294,143295],{"class":78,"line":246},[76,143296,134072],{"class":540},[76,143298,143299,143301,143303,143305,143307,143309],{"class":78,"line":251},[76,143300,134077],{"class":86},[76,143302,81832],{"class":90},[76,143304,130932],{"class":119},[76,143306,53469],{"class":90},[76,143308,88257],{"class":119},[76,143310,131502],{"class":90},[76,143312,143313],{"class":78,"line":257},[76,143314,134092],{"class":540},[76,143316,143317,143319,143321,143323,143325,143327],{"class":78,"line":641},[76,143318,134097],{"class":86},[76,143320,81832],{"class":90},[76,143322,130932],{"class":119},[76,143324,53469],{"class":90},[76,143326,134106],{"class":119},[76,143328,131502],{"class":90},[3261,143330,143331,143342],{},[29,143332,143333,143334,143337,143338,103040,143340],{},"1 号盒子左侧浮动 ",[73,143335,143336],{},"sk_list"," 里面包含 ",[73,143339,3261],{},[73,143341,29],{},[29,143343,143344,143345,143337,143348,103040,143350],{},"2 号盒子左侧浮动 ",[73,143346,143347],{},"sk_con",[73,143349,3261],{},[73,143351,29],{},[19,143353,141942],{},[66,143355,143356],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,143357,143358,143364,143374],{"__ignoreMap":71},[76,143359,143360,143362],{"class":78,"line":79},[76,143361,132420],{"class":86},[76,143363,17623],{"class":90},[76,143365,143366,143368,143370,143372],{"class":78,"line":94},[76,143367,133052],{"class":119},[76,143369,53469],{"class":90},[76,143371,25785],{"class":119},[76,143373,3415],{"class":90},[76,143375,143376],{"class":78,"line":133},[76,143377,3685],{"class":90},[19,143379,142031],{},[66,143381,143382],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,143383,143384,143390,143400],{"__ignoreMap":71},[76,143385,143386,143388],{"class":78,"line":79},[76,143387,132420],{"class":86},[76,143389,17623],{"class":90},[76,143391,143392,143394,143396,143398],{"class":78,"line":94},[76,143393,133052],{"class":119},[76,143395,53469],{"class":90},[76,143397,25785],{"class":119},[76,143399,3415],{"class":90},[76,143401,143402],{"class":78,"line":133},[76,143403,3685],{"class":90},[889,143405,143407,143408],{"id":143406},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[73,143409,143410],{},"sk_container",[3583,143412],{"style":128428,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3261,143415,143416,143421],{},[29,143417,142596,143418,143420],{},[73,143419,143410],{}," 给宽度 1200，不要给高度",[29,143422,143423],{},"一定不要忘记清除浮动",[19,143425,141942],{},[66,143427,143428],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,143429,143430,143436,143446],{"__ignoreMap":71},[76,143431,143432,143434],{"class":78,"line":79},[76,143433,132420],{"class":86},[76,143435,17623],{"class":90},[76,143437,143438,143440,143442,143444],{"class":78,"line":94},[76,143439,133052],{"class":119},[76,143441,53469],{"class":90},[76,143443,25785],{"class":119},[76,143445,3415],{"class":90},[76,143447,143448],{"class":78,"line":133},[76,143449,3685],{"class":90},[26,143451,143452],{},[29,143453,143454],{},"sk_hd制作",[3261,143456,143457],{},[29,143458,142676,143459,143462],{},[73,143460,143461],{},"sk_hd"," ，插入图片即可",[19,143464,141942],{},[66,143466,143467],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,143468,143469],{"__ignoreMap":71},[76,143470,143471,143473,143475,143477,143479,143481,143483,143485,143487,143489,143491,143493],{"class":78,"line":79},[76,143472,584],{"class":90},[76,143474,3583],{"class":53332},[76,143476,57270],{"class":86},[76,143478,370],{"class":90},[76,143480,136089],{"class":126},[76,143482,57278],{"class":86},[76,143484,370],{"class":90},[76,143486,136096],{"class":126},[76,143488,136099],{"class":86},[76,143490,370],{"class":90},[76,143492,136104],{"class":126},[76,143494,53339],{"class":90},[26,143496,143497],{"start":94},[29,143498,143499],{},"sk_bd制作",[3261,143501,143502],{},[29,143503,143504,143505,143508,143509,103040,143511,143513],{},"3 号盒子 ",[73,143506,143507],{},"sk_bd"," ，里面包含很多的 ",[73,143510,3261],{},[73,143512,29],{},[3261,143514,143515,143524],{},[29,143516,143517,143518,143520,143521,143523],{},"当鼠标移入到 ",[73,143519,29],{}," 上面的时候显示红色的边框，在这里先给 ",[73,143522,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,143525,143526,143527,143529,143530,143532,143533,143536,143537,143539],{},"由于给每个 ",[73,143528,29],{}," 都设置了外边距，导致一行的最后一个 ",[73,143531,29],{}," 掉了下来，在这里我们利用 ",[73,143534,143535],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[73,143538,29],{},"，去掉外边距就好了",[19,143541,141942],{},[66,143543,143544],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,143545,143546,143552,143564],{"__ignoreMap":71},[76,143547,143548,143550],{"class":78,"line":79},[76,143549,53643],{"class":53332},[76,143551,17623],{"class":90},[76,143553,143554,143556,143558,143560,143562],{"class":78,"line":94},[76,143555,72497],{"class":119},[76,143557,53469],{"class":90},[76,143559,1294],{"class":119},[76,143561,53588],{"class":119},[76,143563,3415],{"class":90},[76,143565,143566],{"class":78,"line":133},[76,143567,3685],{"class":90},[19,143569,142031],{},[66,143571,143572],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,143573,143574,143580,143592],{"__ignoreMap":71},[76,143575,143576,143578],{"class":78,"line":79},[76,143577,53643],{"class":53332},[76,143579,17623],{"class":90},[76,143581,143582,143584,143586,143588,143590],{"class":78,"line":94},[76,143583,72497],{"class":119},[76,143585,53469],{"class":90},[76,143587,1294],{"class":119},[76,143589,53588],{"class":119},[76,143591,3415],{"class":90},[76,143593,143594],{"class":78,"line":133},[76,143595,3685],{"class":90},[14,143597,143599],{"id":143598},"_163-注册页面制作","16.3 注册页面制作",[3583,143601],{"style":128428,"src":143602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143604,143605,143607],{},[2416,143606,163],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3583,143609],{"style":128428,"src":143610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[889,143612,143614],{"id":143613},"_1631-准备工作","16.3.1 准备工作",[3261,143616,143617,143620],{},[29,143618,143619],{},"创建register.html，引入 base.css，引入favicon图标",[29,143621,143622],{},"创建register.css ，在html页面进行引入",[889,143624,143626,143627,143629],{"id":143625},"_1632-header-头部实现","16.3.2 ",[73,143628,133577],{}," 头部实现",[3261,143631,143632,143635],{},[29,143633,143634],{},"整个内容用 版心 进行包裹",[29,143636,143637],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143639,141942],{},[66,143641,143642],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,143643,143644],{"__ignoreMap":71},[76,143645,143646,143648,143650,143652,143654,143656,143658,143660,143662,143664,143666,143668],{"class":78,"line":79},[76,143647,584],{"class":90},[76,143649,3583],{"class":53332},[76,143651,57270],{"class":86},[76,143653,370],{"class":90},[76,143655,136089],{"class":126},[76,143657,57278],{"class":86},[76,143659,370],{"class":90},[76,143661,136096],{"class":126},[76,143663,136099],{"class":86},[76,143665,370],{"class":90},[76,143667,136104],{"class":126},[76,143669,53339],{"class":90},[19,143671,142031],{},[66,143673,143674],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,143675,143676],{"__ignoreMap":71},[76,143677,143678,143680,143682,143684,143686,143688,143690,143692,143694,143696,143698,143700],{"class":78,"line":79},[76,143679,584],{"class":90},[76,143681,3583],{"class":53332},[76,143683,57270],{"class":86},[76,143685,370],{"class":90},[76,143687,136089],{"class":126},[76,143689,57278],{"class":86},[76,143691,370],{"class":90},[76,143693,136096],{"class":126},[76,143695,136099],{"class":86},[76,143697,370],{"class":90},[76,143699,136104],{"class":126},[76,143701,53339],{"class":90},[889,143703,143705,143706,143709],{"id":143704},"_1633-registerarea-主体模块实现","16.3.3 ",[73,143707,143708],{},"registerarea"," 主体模块实现",[3583,143711],{"style":128428,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143714,143715],{},"整个大盒子 高度为 522px，设置4个边框",[19,143717,141942],{},[66,143719,143720],{"className":128572,"code":132729,"language":128574,"meta":71,"style":71},[73,143721,143722,143728,143744],{"__ignoreMap":71},[76,143723,143724,143726],{"class":78,"line":79},[76,143725,53643],{"class":53332},[76,143727,17623],{"class":90},[76,143729,143730,143732,143734,143736,143738,143740,143742],{"class":78,"line":94},[76,143731,72923],{"class":119},[76,143733,53469],{"class":90},[76,143735,669],{"class":119},[76,143737,53524],{"class":82},[76,143739,53553],{"class":119},[76,143741,131964],{"class":119},[76,143743,3415],{"class":90},[76,143745,143746],{"class":78,"line":133},[76,143747,3685],{"class":90},[19,143749,142031],{},[66,143751,143752],{"className":128572,"code":132729,"language":128574,"meta":71,"style":71},[73,143753,143754,143760,143776],{"__ignoreMap":71},[76,143755,143756,143758],{"class":78,"line":79},[76,143757,53643],{"class":53332},[76,143759,17623],{"class":90},[76,143761,143762,143764,143766,143768,143770,143772,143774],{"class":78,"line":94},[76,143763,72923],{"class":119},[76,143765,53469],{"class":90},[76,143767,669],{"class":119},[76,143769,53524],{"class":82},[76,143771,53553],{"class":119},[76,143773,131964],{"class":119},[76,143775,3415],{"class":90},[76,143777,143778],{"class":78,"line":133},[76,143779,3685],{"class":90},[19,143781,143782],{},"1号盒子 是一个 h3 标签，放标题",[3261,143784,143785],{},[29,143786,143787],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143789,141942],{},[66,143791,143792],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,143793,143794,143800,143810],{"__ignoreMap":71},[76,143795,143796,143798],{"class":78,"line":79},[76,143797,132420],{"class":86},[76,143799,17623],{"class":90},[76,143801,143802,143804,143806,143808],{"class":78,"line":94},[76,143803,133052],{"class":119},[76,143805,53469],{"class":90},[76,143807,25785],{"class":119},[76,143809,3415],{"class":90},[76,143811,143812],{"class":78,"line":133},[76,143813,3685],{"class":90},[19,143815,142031],{},[66,143817,143818],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,143819,143820,143826,143836],{"__ignoreMap":71},[76,143821,143822,143824],{"class":78,"line":79},[76,143823,132420],{"class":86},[76,143825,17623],{"class":90},[76,143827,143828,143830,143832,143834],{"class":78,"line":94},[76,143829,133052],{"class":119},[76,143831,53469],{"class":90},[76,143833,25785],{"class":119},[76,143835,3415],{"class":90},[76,143837,143838],{"class":78,"line":133},[76,143839,3685],{"class":90},[19,143841,143842],{},"2号盒子 里面放注册的内容",[3261,143844,143845,143848,143857,143871,143884,143887,143890,143908,143922],{},[29,143846,143847],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143849,143850,143851,143853,143854,143856],{},"里面的内容利用 ",[73,143852,3261],{}," 包含 ",[73,143855,29],{}," 来实现的（不需要用表格）",[29,143858,141086,143859,143861,143862,143864,143865,143867,143868,143870],{},[73,143860,29],{}," 里面，左侧放 ",[73,143863,35646],{}," 标签， 中间放",[73,143866,1673],{}," 标签， 右侧放 ",[73,143869,76],{}," 提示信息",[29,143872,143873,143874,143876,143877,143879,143880,143883],{},"左侧 ",[73,143875,35646],{},"里面的文字都是右对齐，我们可以给",[73,143878,35646],{},"设置一个宽度（88px），然后利用",[73,143881,143882],{},"text-align"," 来设置右对齐",[29,143885,143886],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143888,143889],{},"右侧 span修饰一下文字颜色",[29,143891,143892,143893],{},"提示信息的样式优化",[3261,143894,143895,143898,143901],{},[29,143896,143897],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143899,143900],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143902,143903,143904,143907],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[73,143905,143906],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143909,143910,143911],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3261,143912,143913,143919],{},[29,143914,143915,143916,143918],{},"设置 ",[73,143917,25602],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143920,143921],{},"分别设置 背景颜色",[29,143923,143924,143925,143927],{},"同意协议 和 完成注册 都是用 ",[73,143926,29],{}," 进行包裹",[19,143929,141942],{},[66,143931,143932],{"className":128572,"code":142515,"language":128574,"meta":71,"style":71},[73,143933,143934,143940,143950],{"__ignoreMap":71},[76,143935,143936,143938],{"class":78,"line":79},[76,143937,53643],{"class":53332},[76,143939,17623],{"class":90},[76,143941,143942,143944,143946,143948],{"class":78,"line":94},[76,143943,72905],{"class":119},[76,143945,53469],{"class":90},[76,143947,142532],{"class":119},[76,143949,3415],{"class":90},[76,143951,143952],{"class":78,"line":133},[76,143953,3685],{"class":90},[19,143955,142031],{},[66,143957,143958],{"className":128572,"code":142515,"language":128574,"meta":71,"style":71},[73,143959,143960,143966,143976],{"__ignoreMap":71},[76,143961,143962,143964],{"class":78,"line":79},[76,143963,53643],{"class":53332},[76,143965,17623],{"class":90},[76,143967,143968,143970,143972,143974],{"class":78,"line":94},[76,143969,72905],{"class":119},[76,143971,53469],{"class":90},[76,143973,142532],{"class":119},[76,143975,3415],{"class":90},[76,143977,143978],{"class":78,"line":133},[76,143979,3685],{"class":90},[889,143981,143983],{"id":143982},"_1634-底部实现","16.3.4 底部实现",[19,143985,141942],{},[66,143987,143988],{"className":128572,"code":142515,"language":128574,"meta":71,"style":71},[73,143989,143990,143996,144006],{"__ignoreMap":71},[76,143991,143992,143994],{"class":78,"line":79},[76,143993,53643],{"class":53332},[76,143995,17623],{"class":90},[76,143997,143998,144000,144002,144004],{"class":78,"line":94},[76,143999,72905],{"class":119},[76,144001,53469],{"class":90},[76,144003,142532],{"class":119},[76,144005,3415],{"class":90},[76,144007,144008],{"class":78,"line":133},[76,144009,3685],{"class":90},[19,144011,142031],{},[66,144013,144014],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,144015,144016,144020,144034,144038],{"__ignoreMap":71},[76,144017,144018],{"class":78,"line":79},[76,144019,132683],{"class":540},[76,144021,144022,144024,144026,144028,144030,144032],{"class":78,"line":94},[76,144023,584],{"class":90},[76,144025,53643],{"class":53332},[76,144027,55518],{"class":86},[76,144029,370],{"class":90},[76,144031,132696],{"class":126},[76,144033,53339],{"class":90},[76,144035,144036],{"class":78,"line":133},[76,144037,132703],{"class":90},[76,144039,144040,144042,144044],{"class":78,"line":145},[76,144041,53817],{"class":90},[76,144043,53643],{"class":53332},[76,144045,53339],{"class":90},[14,144047,144049],{"id":144048},"_164-项目总结","16.4 项目总结",[26,144051,144052,144055,144058,144061],{},[29,144053,144054],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,144056,144057],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,144059,144060],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,144062,144063],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3583,144065],{"style":128428,"src":144066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,144068,144069],{"start":152},[29,144070,144071],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3583,144073],{"style":128428,"src":144074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,144076,144077],{"start":157},[29,144078,144079],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3583,144081],{"style":128428,"src":144082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[66,144084,144085],{"className":129319,"code":138729,"language":129321,"meta":71,"style":71},[73,144086,144087],{"__ignoreMap":71},[76,144088,144089,144091,144093,144095,144097,144099,144101,144103,144105,144107,144109,144111],{"class":78,"line":79},[76,144090,584],{"class":90},[76,144092,1673],{"class":53332},[76,144094,55855],{"class":86},[76,144096,370],{"class":90},[76,144098,64727],{"class":126},[76,144100,16972],{"class":86},[76,144102,370],{"class":90},[76,144104,138750],{"class":126},[76,144106,63048],{"class":86},[76,144108,370],{"class":90},[76,144110,138757],{"class":126},[76,144112,53339],{"class":90},[26,144114,144115,144118],{"start":246},[29,144116,144117],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,144119,144120],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2178,144122,144123],{},"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":71,"searchDepth":94,"depth":94,"links":144125},[144126,144131,144138,144146],{"id":141752,"depth":94,"text":141753,"children":144127},[144128,144129,144130],{"id":141756,"depth":133,"text":141757},{"id":142487,"depth":133,"text":142488},{"id":142800,"depth":133,"text":142801},{"id":143100,"depth":94,"text":143101,"children":144132},[144133,144134,144136],{"id":143104,"depth":133,"text":143105},{"id":143122,"depth":133,"text":144135},"16.2.2 列表页 header 和 nav 修改",{"id":143406,"depth":133,"text":144137},"16.2.3 列表页主体 sk_container",{"id":143598,"depth":94,"text":143599,"children":144139},[144140,144141,144143,144145],{"id":143613,"depth":133,"text":143614},{"id":143625,"depth":133,"text":144142},"16.3.2 header 头部实现",{"id":143704,"depth":133,"text":144144},"16.3.3 registerarea 主体模块实现",{"id":143982,"depth":133,"text":143983},{"id":144048,"depth":94,"text":144049},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141744,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144153,"title":144154,"body":144155,"description":2201,"extension":2202,"meta":144263,"navigation":148,"path":144264,"seo":144265,"stem":144266,"__hash__":144267},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144156,"toc":144258},[144157,144160,144164,144167,144170,144179,144188,144192,144197,144204,144222,144225,144228,144231,144234,144237,144240,144243,144246,144249,144252,144255],[10,144158,144154],{"id":144159},"_17-web服务器与网站发布",[14,144161,144163],{"id":144162},"_171-web服务器","17.1 Web服务器",[19,144165,144166],{},"把自己网站上传到服务器上，可以让其他人访问",[3583,144168],{"style":128428,"src":144169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144171,144172,144175,144176],{},[2416,144173,144174],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2416,144177,144178],{},"Web 服务器等",[19,144180,144181,144182,103040,144185,27790],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2416,144183,144184],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2416,144186,144187],{},"远程服务器",[889,144189,144191],{"id":144190},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144193,144194],{},[2416,144195,144196],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144198,144199,144200],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2503,144201,144202],{"href":144202,"rel":144203},"http:\u002F\u002Ffree.3v.do\u002F",[25914],[3261,144205,144206,144209,144212,144219],{},[29,144207,144208],{},"去免费空间网站注册账号。",[29,144210,144211],{},"记录下主机名、用户名、密码、域名。",[29,144213,144214,144215,144218],{},"利用 ",[73,144216,144217],{},"utftp"," 软件 上传网站到远程服务器",[29,144220,144221],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144223,144224],{},"使用软件上传，对上传软件文件进行解压",[3583,144226],{"style":128428,"src":144227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3583,144229],{"style":128428,"src":144230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144232,144233],{},"输入刚刚申请的服务器账号信息：",[3583,144235],{"style":128428,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3583,144238],{"style":128428,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3583,144241],{"style":128428,"src":144242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3583,144244],{"style":128428,"src":144245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144247,144248],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3583,144250],{"style":128428,"src":144251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144253,144254],{},"浏览器输入域名即可访问",[19,144256,144257],{},"首页一定必须是index",{"title":71,"searchDepth":94,"depth":94,"links":144259},[144260],{"id":144162,"depth":94,"text":144163,"children":144261},[144262],{"id":144190,"depth":133,"text":144191},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144154,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144269,"title":144270,"body":144271,"description":2201,"extension":2202,"meta":145198,"navigation":148,"path":145199,"seo":145200,"stem":145201,"__hash__":145202},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144272,"toc":145181},[144273,144276,144280,144283,144286,144297,144300,144304,144308,144313,144316,144319,144322,144325,144329,144355,144359,144363,144366,144369,144373,144406,144410,144413,144416,144480,144484,144488,144491,144494,144497,144501,144546,144550,144553,144583,144587,144591,144594,144597,144601,144604,144673,144676,144784,144786,144792,144796,144799,144802,144898,144901,144905,144929,144933,144936,144940,144943,144947,144950,144953,144956,144959,144963,144966,144969,144973,144977,144980,144983,144986,144989,144993,144996,145000,145003,145006,145051,145055,145059,145062,145065,145068,145100,145104,145107,145141,145145,145148,145178],[10,144274,144270],{"id":144275},"_18-2d动画与3d转换",[14,144277,144279],{"id":144278},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144281,144282],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144284,144285],{},"转换（transform）你可以简单理解为变形",[3261,144287,144288,144291,144294],{},[29,144289,144290],{},"移动：translate",[29,144292,144293],{},"旋转：rotate",[29,144295,144296],{},"缩放：scale",[3583,144298],{"style":128428,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[889,144301,144303],{"id":144302},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24047,144305,144307],{"id":144306},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144309,144310,144311],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2416,144312,135231],{},[3583,144314],{"style":128428,"src":144315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144317,144318],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144320,144321],{},"对于行内元素无效",[19,144323,144324],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24047,144326,144328],{"id":144327},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[66,144330,144331],{"className":128572,"code":140761,"language":128574,"meta":71,"style":71},[73,144332,144333,144339,144351],{"__ignoreMap":71},[76,144334,144335,144337],{"class":78,"line":79},[76,144336,53643],{"class":53332},[76,144338,17623],{"class":90},[76,144340,144341,144343,144345,144347,144349],{"class":78,"line":94},[76,144342,72497],{"class":119},[76,144344,53469],{"class":90},[76,144346,1294],{"class":119},[76,144348,53588],{"class":119},[76,144350,3415],{"class":90},[76,144352,144353],{"class":78,"line":133},[76,144354,3685],{"class":90},[889,144356,144358],{"id":144357},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24047,144360,144362],{"id":144361},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144364,144365],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3583,144367],{"style":128428,"src":144368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24047,144370,144372],{"id":144371},"_18122-旋转效果","18.1.2.2 旋转效果",[66,144374,144376],{"className":128572,"code":144375,"language":128574,"meta":71,"style":71},"div {\n  transform: rotate(45deg);\n}\n",[73,144377,144378,144384,144402],{"__ignoreMap":71},[76,144379,144380,144382],{"class":78,"line":79},[76,144381,53643],{"class":53332},[76,144383,17623],{"class":90},[76,144385,144386,144388,144390,144393,144395,144397,144400],{"class":78,"line":94},[76,144387,138556],{"class":119},[76,144389,53469],{"class":90},[76,144391,144392],{"class":119},"rotate",[76,144394,123],{"class":90},[76,144396,2791],{"class":119},[76,144398,144399],{"class":82},"deg",[76,144401,4807],{"class":90},[76,144403,144404],{"class":78,"line":133},[76,144405,3685],{"class":90},[24047,144407,144409],{"id":144408},"_18123-三角做法","18.1.2.3 三角做法",[19,144411,144412],{},"该下标当经过最外层大盒子时会实现向上反转",[3583,144414],{"style":128428,"src":144415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[66,144417,144418],{"className":128572,"code":137092,"language":128574,"meta":71,"style":71},[73,144419,144420,144424,144430,144440,144450,144466,144476],{"__ignoreMap":71},[76,144421,144422],{"class":78,"line":79},[76,144423,137099],{"class":540},[76,144425,144426,144428],{"class":78,"line":94},[76,144427,137104],{"class":86},[76,144429,17623],{"class":90},[76,144431,144432,144434,144436,144438],{"class":78,"line":133},[76,144433,72595],{"class":119},[76,144435,53469],{"class":90},[76,144437,1294],{"class":119},[76,144439,3415],{"class":90},[76,144441,144442,144444,144446,144448],{"class":78,"line":145},[76,144443,72815],{"class":119},[76,144445,53469],{"class":90},[76,144447,1294],{"class":119},[76,144449,3415],{"class":90},[76,144451,144452,144454,144456,144458,144460,144462,144464],{"class":78,"line":152},[76,144453,72923],{"class":119},[76,144455,53469],{"class":90},[76,144457,402],{"class":119},[76,144459,53524],{"class":82},[76,144461,53553],{"class":119},[76,144463,66019],{"class":119},[76,144465,3415],{"class":90},[76,144467,144468,144470,144472,144474],{"class":78,"line":157},[76,144469,137147],{"class":119},[76,144471,53469],{"class":90},[76,144473,64397],{"class":119},[76,144475,3415],{"class":90},[76,144477,144478],{"class":78,"line":246},[76,144479,3685],{"class":90},[889,144481,144483],{"id":144482},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24047,144485,144487],{"id":144486},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144489,144490],{},"设置中心点",[3583,144492],{"style":128428,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144495,144496],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24047,144498,144500],{"id":144499},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[66,144502,144504],{"className":128572,"code":144503,"language":128574,"meta":71,"style":71},"\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",[73,144505,144506,144511,144517,144532,144537,144542],{"__ignoreMap":71},[76,144507,144508],{"class":78,"line":79},[76,144509,144510],{"class":540},"\u002F* 转换中心点 *\u002F\n",[76,144512,144513,144515],{"class":78,"line":94},[76,144514,53643],{"class":53332},[76,144516,17623],{"class":90},[76,144518,144519,144522,144524,144526,144528,144530],{"class":78,"line":133},[76,144520,144521],{"class":119},"  transform-origin",[76,144523,53469],{"class":90},[76,144525,53624],{"class":119},[76,144527,19193],{"class":119},[76,144529,132435],{"class":90},[76,144531,137245],{"class":540},[76,144533,144534],{"class":78,"line":145},[76,144535,144536],{"class":540},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[76,144538,144539],{"class":78,"line":152},[76,144540,144541],{"class":540},"  \u002F* transform-origin: left top; *\u002F\n",[76,144543,144544],{"class":78,"line":157},[76,144545,3685],{"class":90},[24047,144547,144549],{"id":144548},"_18133-旋转案例","18.1.3.3 旋转案例",[3583,144551],{"style":128428,"src":144552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[66,144554,144555],{"className":128572,"code":144375,"language":128574,"meta":71,"style":71},[73,144556,144557,144563,144579],{"__ignoreMap":71},[76,144558,144559,144561],{"class":78,"line":79},[76,144560,53643],{"class":53332},[76,144562,17623],{"class":90},[76,144564,144565,144567,144569,144571,144573,144575,144577],{"class":78,"line":94},[76,144566,138556],{"class":119},[76,144568,53469],{"class":90},[76,144570,144392],{"class":119},[76,144572,123],{"class":90},[76,144574,2791],{"class":119},[76,144576,144399],{"class":82},[76,144578,4807],{"class":90},[76,144580,144581],{"class":78,"line":133},[76,144582,3685],{"class":90},[889,144584,144586],{"id":144585},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24047,144588,144590],{"id":144589},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144592,144593],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3583,144595],{"style":128428,"src":144596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24047,144598,144600],{"id":144599},"_18142-分页按钮","18.1.4.2 分页按钮",[3583,144602],{"style":128428,"src":144603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[66,144605,144607],{"className":128572,"code":144606,"language":128574,"meta":71,"style":71},"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",[73,144608,144609,144615,144631,144635,144639,144644,144650,144664,144669],{"__ignoreMap":71},[76,144610,144611,144613],{"class":78,"line":79},[76,144612,53643],{"class":53332},[76,144614,17623],{"class":90},[76,144616,144617,144619,144621,144624,144626,144629],{"class":78,"line":94},[76,144618,138556],{"class":119},[76,144620,53469],{"class":90},[76,144622,144623],{"class":119},"scale",[76,144625,123],{"class":90},[76,144627,144628],{"class":119},"1.2",[76,144630,4807],{"class":90},[76,144632,144633],{"class":78,"line":133},[76,144634,3685],{"class":90},[76,144636,144637],{"class":78,"line":145},[76,144638,138033],{"class":90},[76,144640,144641],{"class":78,"line":152},[76,144642,144643],{"class":540},"\u002F* 2D 缩放 *\u002F\n",[76,144645,144646,144648],{"class":78,"line":157},[76,144647,53643],{"class":53332},[76,144649,17623],{"class":90},[76,144651,144652,144654,144656,144658,144660,144662],{"class":78,"line":246},[76,144653,138556],{"class":119},[76,144655,53469],{"class":90},[76,144657,144623],{"class":119},[76,144659,123],{"class":90},[76,144661,144628],{"class":119},[76,144663,4807],{"class":90},[76,144665,144666],{"class":78,"line":251},[76,144667,144668],{"class":540},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[76,144670,144671],{"class":78,"line":257},[76,144672,3685],{"class":90},[19,144674,144675],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[66,144677,144679],{"className":128572,"code":144678,"language":128574,"meta":71,"style":71},"\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",[73,144680,144681,144686,144696,144717,144738,144742,144747,144753,144780],{"__ignoreMap":71},[76,144682,144683],{"class":78,"line":79},[76,144684,144685],{"class":540},"\u002F* 定义动画 *\u002F\n",[76,144687,144688,144691,144694],{"class":78,"line":94},[76,144689,144690],{"class":82},"@keyframes",[76,144692,144693],{"class":7296}," move",[76,144695,17623],{"class":90},[76,144697,144698,144701,144703,144705,144707,144710,144712,144714],{"class":78,"line":133},[76,144699,144700],{"class":86},"  0%",[76,144702,81832],{"class":90},[76,144704,50166],{"class":119},[76,144706,53469],{"class":90},[76,144708,144709],{"class":119},"translateX",[76,144711,123],{"class":90},[76,144713,1294],{"class":119},[76,144715,144716],{"class":90},"); }\n",[76,144718,144719,144722,144724,144726,144728,144730,144732,144734,144736],{"class":78,"line":145},[76,144720,144721],{"class":86},"  100%",[76,144723,81832],{"class":90},[76,144725,50166],{"class":119},[76,144727,53469],{"class":90},[76,144729,144709],{"class":119},[76,144731,123],{"class":90},[76,144733,2575],{"class":119},[76,144735,53524],{"class":82},[76,144737,144716],{"class":90},[76,144739,144740],{"class":78,"line":152},[76,144741,3685],{"class":90},[76,144743,144744],{"class":78,"line":157},[76,144745,144746],{"class":540},"\u002F* 调用动画 *\u002F\n",[76,144748,144749,144751],{"class":78,"line":246},[76,144750,53643],{"class":53332},[76,144752,17623],{"class":90},[76,144754,144755,144758,144760,144762,144764,144766,144768,144770,144772,144775,144778],{"class":78,"line":251},[76,144756,144757],{"class":119},"  animation",[76,144759,53469],{"class":90},[76,144761,137258],{"class":119},[76,144763,27168],{"class":119},[76,144765,2954],{"class":82},[76,144767,80705],{"class":119},[76,144769,587],{"class":119},[76,144771,2954],{"class":82},[76,144773,144774],{"class":119}," infinite",[76,144776,144777],{"class":119}," alternate",[76,144779,3415],{"class":90},[76,144781,144782],{"class":78,"line":257},[76,144783,3685],{"class":90},[19,144785,144675],{},[66,144787,144790],{"className":144788,"code":144789,"language":7268},[7266],"\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",[73,144791,144789],{"__ignoreMap":71},[24047,144793,144795],{"id":144794},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144797,144798],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3583,144800],{"style":128428,"src":144801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[66,144803,144804],{"className":128572,"code":144678,"language":128574,"meta":71,"style":71},[73,144805,144806,144810,144818,144836,144856,144860,144864,144870,144894],{"__ignoreMap":71},[76,144807,144808],{"class":78,"line":79},[76,144809,144685],{"class":540},[76,144811,144812,144814,144816],{"class":78,"line":94},[76,144813,144690],{"class":82},[76,144815,144693],{"class":7296},[76,144817,17623],{"class":90},[76,144819,144820,144822,144824,144826,144828,144830,144832,144834],{"class":78,"line":133},[76,144821,144700],{"class":86},[76,144823,81832],{"class":90},[76,144825,50166],{"class":119},[76,144827,53469],{"class":90},[76,144829,144709],{"class":119},[76,144831,123],{"class":90},[76,144833,1294],{"class":119},[76,144835,144716],{"class":90},[76,144837,144838,144840,144842,144844,144846,144848,144850,144852,144854],{"class":78,"line":145},[76,144839,144721],{"class":86},[76,144841,81832],{"class":90},[76,144843,50166],{"class":119},[76,144845,53469],{"class":90},[76,144847,144709],{"class":119},[76,144849,123],{"class":90},[76,144851,2575],{"class":119},[76,144853,53524],{"class":82},[76,144855,144716],{"class":90},[76,144857,144858],{"class":78,"line":152},[76,144859,3685],{"class":90},[76,144861,144862],{"class":78,"line":157},[76,144863,144746],{"class":540},[76,144865,144866,144868],{"class":78,"line":246},[76,144867,53643],{"class":53332},[76,144869,17623],{"class":90},[76,144871,144872,144874,144876,144878,144880,144882,144884,144886,144888,144890,144892],{"class":78,"line":251},[76,144873,144757],{"class":119},[76,144875,53469],{"class":90},[76,144877,137258],{"class":119},[76,144879,27168],{"class":119},[76,144881,2954],{"class":82},[76,144883,80705],{"class":119},[76,144885,587],{"class":119},[76,144887,2954],{"class":82},[76,144889,144774],{"class":119},[76,144891,144777],{"class":119},[76,144893,3415],{"class":90},[76,144895,144896],{"class":78,"line":257},[76,144897,3685],{"class":90},[19,144899,144900],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[889,144902,144904],{"id":144903},"_1823-知识点回顾","18.2.3 知识点回顾",[66,144906,144907],{"className":128572,"code":130741,"language":128574,"meta":71,"style":71},[73,144908,144909,144915,144925],{"__ignoreMap":71},[76,144910,144911,144913],{"class":78,"line":79},[76,144912,53643],{"class":53332},[76,144914,17623],{"class":90},[76,144916,144917,144919,144921,144923],{"class":78,"line":94},[76,144918,130754],{"class":119},[76,144920,53469],{"class":90},[76,144922,63764],{"class":119},[76,144924,3415],{"class":90},[76,144926,144927],{"class":78,"line":133},[76,144928,3685],{"class":90},[14,144930,144932],{"id":144931},"_183-3d-转换","18.3 3D 转换",[19,144934,144935],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[889,144937,144939],{"id":144938},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3583,144941],{"style":128428,"src":144942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[889,144944,144946],{"id":144945},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3583,144948],{"style":128428,"src":144949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144951,144952],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144954,144955],{},"translate3d的效果需要搭配透视perspective来使用",[3583,144957],{"style":128428,"src":144958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[889,144960,144962],{"id":144961},"_1833-透视-perspective","18.3.3 透视 perspective",[3583,144964],{"style":128428,"src":144965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144967,144968],{},"透视写在父盒子上，单位为像素",[889,144970,144972],{"id":144971},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24047,144974,144976],{"id":144975},"_18341-分开解释","18.3.4.1 分开解释",[3583,144978],{"style":128428,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3583,144981],{"style":128428,"src":144982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3583,144984],{"style":128428,"src":144985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144987,144988],{},"总结来说就是左手原则",[24047,144990,144992],{"id":144991},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3583,144994],{"style":128428,"src":144995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[889,144997,144999],{"id":144998},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3583,145001],{"style":128428,"src":145002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3583,145004],{"style":128428,"src":145005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[66,145007,145009],{"className":128572,"code":145008,"language":128574,"meta":71,"style":71},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[73,145010,145011,145017,145030,145047],{"__ignoreMap":71},[76,145012,145013,145015],{"class":78,"line":79},[76,145014,53643],{"class":53332},[76,145016,17623],{"class":90},[76,145018,145019,145022,145024,145026,145028],{"class":78,"line":94},[76,145020,145021],{"class":119},"  perspective",[76,145023,53469],{"class":90},[76,145025,67102],{"class":119},[76,145027,53524],{"class":82},[76,145029,3415],{"class":90},[76,145031,145032,145034,145036,145039,145041,145043,145045],{"class":78,"line":133},[76,145033,138556],{"class":119},[76,145035,53469],{"class":90},[76,145037,145038],{"class":119},"rotateX",[76,145040,123],{"class":90},[76,145042,2791],{"class":119},[76,145044,144399],{"class":82},[76,145046,4807],{"class":90},[76,145048,145049],{"class":78,"line":145},[76,145050,3685],{"class":90},[889,145052,145054],{"id":145053},"_1836-案例","18.3.6 案例",[24047,145056,145058],{"id":145057},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3583,145060],{"style":128428,"src":145061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3583,145063],{"style":128428,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3583,145066],{"style":128428,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[66,145069,145071],{"className":128572,"code":145070,"language":128574,"meta":71,"style":71},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[73,145072,145073,145078,145084,145096],{"__ignoreMap":71},[76,145074,145075],{"class":78,"line":79},[76,145076,145077],{"class":540},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[76,145079,145080,145082],{"class":78,"line":94},[76,145081,135569],{"class":86},[76,145083,17623],{"class":90},[76,145085,145086,145088,145090,145092,145094],{"class":78,"line":133},[76,145087,145021],{"class":119},[76,145089,53469],{"class":90},[76,145091,67102],{"class":119},[76,145093,53524],{"class":82},[76,145095,3415],{"class":90},[76,145097,145098],{"class":78,"line":145},[76,145099,3685],{"class":90},[24047,145101,145103],{"id":145102},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3583,145105],{"style":128428,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[66,145108,145109],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,145110,145111,145115,145129,145133],{"__ignoreMap":71},[76,145112,145113],{"class":78,"line":79},[76,145114,132683],{"class":540},[76,145116,145117,145119,145121,145123,145125,145127],{"class":78,"line":94},[76,145118,584],{"class":90},[76,145120,53643],{"class":53332},[76,145122,55518],{"class":86},[76,145124,370],{"class":90},[76,145126,132696],{"class":126},[76,145128,53339],{"class":90},[76,145130,145131],{"class":78,"line":133},[76,145132,132703],{"class":90},[76,145134,145135,145137,145139],{"class":78,"line":145},[76,145136,53817],{"class":90},[76,145138,53643],{"class":53332},[76,145140,53339],{"class":90},[24047,145142,145144],{"id":145143},"_18363-旋转木马","18.3.6.3 旋转木马",[3583,145146],{"style":128428,"src":145147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[66,145149,145150],{"className":128572,"code":144375,"language":128574,"meta":71,"style":71},[73,145151,145152,145158,145174],{"__ignoreMap":71},[76,145153,145154,145156],{"class":78,"line":79},[76,145155,53643],{"class":53332},[76,145157,17623],{"class":90},[76,145159,145160,145162,145164,145166,145168,145170,145172],{"class":78,"line":94},[76,145161,138556],{"class":119},[76,145163,53469],{"class":90},[76,145165,144392],{"class":119},[76,145167,123],{"class":90},[76,145169,2791],{"class":119},[76,145171,144399],{"class":82},[76,145173,4807],{"class":90},[76,145175,145176],{"class":78,"line":133},[76,145177,3685],{"class":90},[2178,145179,145180],{},"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":71,"searchDepth":94,"depth":94,"links":145182},[145183,145190],{"id":144278,"depth":94,"text":144279,"children":145184},[145185,145186,145187,145188,145189],{"id":144302,"depth":133,"text":144303},{"id":144357,"depth":133,"text":144358},{"id":144482,"depth":133,"text":144483},{"id":144585,"depth":133,"text":144586},{"id":144903,"depth":133,"text":144904},{"id":144931,"depth":94,"text":144932,"children":145191},[145192,145193,145194,145195,145196,145197],{"id":144938,"depth":133,"text":144939},{"id":144945,"depth":133,"text":144946},{"id":144961,"depth":133,"text":144962},{"id":144971,"depth":133,"text":144972},{"id":144998,"depth":133,"text":144999},{"id":145053,"depth":133,"text":145054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144270,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145204,"title":145205,"body":145206,"description":2201,"extension":2202,"meta":145409,"navigation":148,"path":145410,"seo":145411,"stem":145412,"__hash__":145413},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145207,"toc":145398},[145208,145211,145215,145218,145221,145225,145228,145231,145234,145238,145241,145245,145248,145252,145255,145259,145273,145277,145302,145305,145308,145325,145329,145333,145336,145339,145343,145346,145349,145367,145371,145374,145388,145392,145395],[10,145209,145205],{"id":145210},"_19-移动端基础-前缀现状与视口",[14,145212,145214],{"id":145213},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3583,145216],{"style":128428,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145219,145220],{},"意思就是加个前缀，增加兼容性",[14,145222,145224],{"id":145223},"_192-移动端现状认识","19.2 移动端现状认识",[3583,145226],{"style":128428,"src":145227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145229,145230],{},"调试方法：",[3583,145232],{"style":128428,"src":145233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145235,145237],{"id":145236},"_193-视口","19.3 视口",[19,145239,145240],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[889,145242,145244],{"id":145243},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3583,145246],{"style":128428,"src":145247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[889,145249,145251],{"id":145250},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3583,145253],{"style":128428,"src":145254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[889,145256,145258],{"id":145257},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3261,145260,145261,145264,145267,145270],{},[29,145262,145263],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,145265,145266],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,145268,145269],{},"需要手动添写meta视口标签通知浏览器操作",[29,145271,145272],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[889,145274,145276],{"id":145275},"_1934-meta视口标签","19.3.4 meta视口标签",[66,145278,145280],{"className":129319,"code":145279,"language":129321,"meta":71,"style":71},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[73,145281,145282],{"__ignoreMap":71},[76,145283,145284,145286,145288,145290,145292,145294,145296,145298,145300],{"class":78,"line":79},[76,145285,584],{"class":90},[76,145287,53376],{"class":53332},[76,145289,16972],{"class":86},[76,145291,370],{"class":90},[76,145293,53423],{"class":126},[76,145295,53403],{"class":86},[76,145297,370],{"class":90},[76,145299,53430],{"class":126},[76,145301,53339],{"class":90},[3583,145303],{"style":128428,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145306,145307],{},"标准视口设置：",[26,145309,145310,145313,145316,145319,145322],{},[29,145311,145312],{},"视口宽度和设备保持一致",[29,145314,145315],{},"视口的默认缩放比例1.0",[29,145317,145318],{},"不允许用户自行缩放",[29,145320,145321],{},"最大允许的缩放比例1.0",[29,145323,145324],{},"最小允许的缩放比例1.0",[889,145326,145328],{"id":145327},"_1935-二倍图","19.3.5 二倍图",[24047,145330,145332],{"id":145331},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3583,145334],{"style":128428,"src":145335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3583,145337],{"style":128428,"src":145338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24047,145340,145342],{"id":145341},"_19352-多倍图","19.3.5.2 多倍图",[3583,145344],{"style":128428,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145347,145348],{},"二倍图法，代码如下：",[66,145350,145352],{"className":128572,"code":145351,"language":128574,"meta":71,"style":71},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[73,145353,145354,145359],{"__ignoreMap":71},[76,145355,145356],{"class":78,"line":79},[76,145357,145358],{"class":540},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[76,145360,145361,145364],{"class":78,"line":94},[76,145362,145363],{"class":53332},"background-size",[76,145365,145366],{"class":90},": 50% 50%;\n",[24047,145368,145370],{"id":145369},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3583,145372],{"style":128428,"src":145373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,145375,145376,145379,145382,145385],{},[29,145377,145378],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,145380,145381],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,145383,145384],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,145386,145387],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24047,145389,145391],{"id":145390},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3583,145393],{"style":128428,"src":145394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2178,145396,145397],{},"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":71,"searchDepth":94,"depth":94,"links":145399},[145400,145401,145402],{"id":145213,"depth":94,"text":145214},{"id":145223,"depth":94,"text":145224},{"id":145236,"depth":94,"text":145237,"children":145403},[145404,145405,145406,145407,145408],{"id":145243,"depth":133,"text":145244},{"id":145250,"depth":133,"text":145251},{"id":145257,"depth":133,"text":145258},{"id":145275,"depth":133,"text":145276},{"id":145327,"depth":133,"text":145328},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145205,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145415,"title":145416,"body":145417,"description":2201,"extension":2202,"meta":146294,"navigation":148,"path":146295,"seo":146296,"stem":146297,"__hash__":146298},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145418,"toc":146278},[145419,145422,145426,145433,145436,145443,145446,145451,145454,145458,145462,145469,145472,145475,145479,145482,145485,145488,145491,145494,145498,145501,145505,145507,145510,145513,145516,145519,145521,145524,145526,145556,145558,145588,145592,145595,145599,145602,145619,145622,145625,145701,145703,145706,145709,145712,145715,145717,145720,145723,145727,145749,145752,145755,145759,145762,145768,145771,145775,145778,145781,145785,145788,145791,145794,145798,145801,145804,145807,145810,145814,145817,145821,145828,145831,145834,145837,145840,145850,145853,145856,145863,145866,145870,145873,145876,145880,145883,145886,145889,145934,145937,145940,145943,145945,146074,146076,146114,146117,146120,146122,146240,146242,146276],[10,145420,145416],{"id":145421},"_20-移动端布局实战上篇",[14,145423,145425],{"id":145424},"_201-移动端主流方案","20.1 移动端主流方案",[26,145427,145428],{},[29,145429,145430],{},[2416,145431,145432],{},"单独移动端页面（主流）",[3583,145434],{"style":128428,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,145437,145438],{"start":94},[29,145439,145440],{},[2416,145441,145442],{},"响应式兼容PC移动端",[3583,145444],{"style":128428,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,145447,145448],{"start":133},[29,145449,145450],{},"两种页面选型布局方式",[3583,145452],{"style":128428,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145455,145457],{"id":145456},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[889,145459,145461],{"id":145460},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145463,145464,145465],{},"官网地址： ",[2503,145466,145467],{"href":145467,"rel":145468},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25914],[3583,145470],{"style":128428,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3583,145473],{"style":128428,"src":145474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[889,145476,145478],{"id":145477},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3583,145480],{"style":128428,"src":145481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3583,145483],{"style":128428,"src":145484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145486,145487],{},"去除高亮：",[19,145489,145490],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145492,145493],{},"-webkit- tap-highlight-color: transparent;",[14,145495,145497],{"id":145496},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3583,145499],{"style":128428,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145502,145504],{"id":145503},"_204-流式布局案例","20.4 流式布局案例",[19,145506,2301],{},[19,145508,145509],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145511,145512],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145514,145515],{},"图片格式：",[3583,145517],{"style":128428,"src":145518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145520,137615],{},[3583,145522],{"style":128428,"src":145523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145525,141942],{},[66,145527,145528],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,145529,145530],{"__ignoreMap":71},[76,145531,145532,145534,145536,145538,145540,145542,145544,145546,145548,145550,145552,145554],{"class":78,"line":79},[76,145533,584],{"class":90},[76,145535,3583],{"class":53332},[76,145537,57270],{"class":86},[76,145539,370],{"class":90},[76,145541,136089],{"class":126},[76,145543,57278],{"class":86},[76,145545,370],{"class":90},[76,145547,136096],{"class":126},[76,145549,136099],{"class":86},[76,145551,370],{"class":90},[76,145553,136104],{"class":126},[76,145555,53339],{"class":90},[19,145557,142031],{},[66,145559,145560],{"className":129319,"code":136074,"language":129321,"meta":71,"style":71},[73,145561,145562],{"__ignoreMap":71},[76,145563,145564,145566,145568,145570,145572,145574,145576,145578,145580,145582,145584,145586],{"class":78,"line":79},[76,145565,584],{"class":90},[76,145567,3583],{"class":53332},[76,145569,57270],{"class":86},[76,145571,370],{"class":90},[76,145573,136089],{"class":126},[76,145575,57278],{"class":86},[76,145577,370],{"class":90},[76,145579,136096],{"class":126},[76,145581,136099],{"class":86},[76,145583,370],{"class":90},[76,145585,136104],{"class":126},[76,145587,53339],{"class":90},[14,145589,145591],{"id":145590},"_205-flex布局","20.5 flex布局",[3583,145593],{"style":128428,"src":145594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[889,145596,145598],{"id":145597},"_2051-布局原理","20.5.1 布局原理",[19,145600,145601],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3261,145603,145604,145607,145610,145613,145616],{},[29,145605,145606],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,145608,145609],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,145611,145612],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,145614,145615],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,145617,145618],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145620,145621],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145623,145624],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[66,145626,145628],{"className":128572,"code":145627,"language":128574,"meta":71,"style":71},"\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",[73,145629,145630,145635,145642,145652,145664,145675,145686,145697],{"__ignoreMap":71},[76,145631,145632],{"class":78,"line":79},[76,145633,145634],{"class":540},"\u002F* Flex 弹性布局 *\u002F\n",[76,145636,145637,145640],{"class":78,"line":94},[76,145638,145639],{"class":86},".container",[76,145641,17623],{"class":90},[76,145643,145644,145646,145648,145650],{"class":78,"line":133},[76,145645,130188],{"class":119},[76,145647,53469],{"class":90},[76,145649,53509],{"class":119},[76,145651,3415],{"class":90},[76,145653,145654,145657,145659,145662],{"class":78,"line":145},[76,145655,145656],{"class":119},"  flex-direction",[76,145658,53469],{"class":90},[76,145660,145661],{"class":119},"row",[76,145663,3415],{"class":90},[76,145665,145666,145669,145671,145673],{"class":78,"line":152},[76,145667,145668],{"class":119},"  justify-content",[76,145670,53469],{"class":90},[76,145672,53700],{"class":119},[76,145674,3415],{"class":90},[76,145676,145677,145680,145682,145684],{"class":78,"line":157},[76,145678,145679],{"class":119},"  align-items",[76,145681,53469],{"class":90},[76,145683,53624],{"class":119},[76,145685,3415],{"class":90},[76,145687,145688,145691,145693,145695],{"class":78,"line":246},[76,145689,145690],{"class":119},"  flex-wrap",[76,145692,53469],{"class":90},[76,145694,80636],{"class":119},[76,145696,3415],{"class":90},[76,145698,145699],{"class":78,"line":251},[76,145700,3685],{"class":90},[19,145702,72480],{},[19,145704,145705],{},".form-item .male-label {",[19,145707,145708],{},"   margin-right: 20px;",[19,145710,145711],{},"   display: inline-flex;",[19,145713,145714],{},"   align-items: center;",[19,145716,304],{},[3583,145718],{"style":128428,"src":145719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3583,145721],{"style":128428,"src":145722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[889,145724,145726],{"id":145725},"_2052-常见父项属性","20.5.2 常见父项属性",[26,145728,145729,145732,145735,145738,145741,145744,145747],{},[29,145730,145731],{},"flex-direction：设置主轴的方向",[29,145733,145734],{},"justify-content：设置主轴上的子元素排列方式",[29,145736,145737],{},"flex-wrap：设置子元素是否换行",[29,145739,145740],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,145742,145743],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,145745,145746],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,145748,145731],{},[3583,145750],{"style":128428,"src":145751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3583,145753],{"style":128428,"src":145754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,145756,145757],{"start":94},[29,145758,145734],{},[3583,145760],{"style":128428,"src":145761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145763,145764,145767],{},[73,145765,145766],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145769,145770],{},"跟着主轴走",[26,145772,145773],{"start":133},[29,145774,145737],{},[3583,145776],{"style":128428,"src":145777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145779,145780],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145782,145783],{"start":145},[29,145784,145740],{},[3583,145786],{"style":128428,"src":145787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145789,145790],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145792,145793],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145795,145796],{"start":152},[29,145797,145743],{},[3583,145799],{"style":128428,"src":145800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145802,145803],{},"align-items与align-content之间的区别：",[19,145805,145806],{},"单找items，多找content",[3583,145808],{"style":128428,"src":145809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145811,145812],{"start":157},[29,145813,145746],{},[3583,145815],{"style":128428,"src":145816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[889,145818,145820],{"id":145819},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145822,145823],{},[29,145824,145825],{},[2416,145826,145827],{},"flex 属性",[19,145829,145830],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3583,145832],{"style":128428,"src":145833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145835,145836],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145838,145839],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145841,145842],{"start":94},[29,145843,145844,15848,145847],{},[2416,145845,145846],{},"align-self",[2416,145848,145849],{},"控制子项自己在侧轴上的排列方式",[3583,145851],{"style":128428,"src":145852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145854,145855],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145857,145858],{"start":133},[29,145859,145860,145862],{},[2416,145861,97320],{}," 属性定义项目的排列顺序",[3583,145864],{"style":128428,"src":145865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[889,145867,145869],{"id":145868},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3583,145871],{"style":128428,"src":145872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145874,145875],{},"必须要添加浏览器的私有前缀",[889,145877,145879],{"id":145878},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145881,145882],{},"学到最重要的知识：",[19,145884,145885],{},"flex处理这样的布局思路",[3583,145887],{"style":128428,"src":145888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[66,145890,145892],{"className":128572,"code":145891,"language":128574,"meta":71,"style":71},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[73,145893,145894,145900,145910,145920,145930],{"__ignoreMap":71},[76,145895,145896,145898],{"class":78,"line":79},[76,145897,145639],{"class":86},[76,145899,17623],{"class":90},[76,145901,145902,145904,145906,145908],{"class":78,"line":94},[76,145903,130188],{"class":119},[76,145905,53469],{"class":90},[76,145907,53509],{"class":119},[76,145909,3415],{"class":90},[76,145911,145912,145914,145916,145918],{"class":78,"line":133},[76,145913,145668],{"class":119},[76,145915,53469],{"class":90},[76,145917,53624],{"class":119},[76,145919,3415],{"class":90},[76,145921,145922,145924,145926,145928],{"class":78,"line":145},[76,145923,145679],{"class":119},[76,145925,53469],{"class":90},[76,145927,53624],{"class":119},[76,145929,3415],{"class":90},[76,145931,145932],{"class":78,"line":152},[76,145933,3685],{"class":90},[19,145935,145936],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145938,145939],{},"使用属性选择器",[3583,145941],{"style":128428,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145944,70917],{},[66,145946,145948],{"className":129319,"code":145947,"language":129321,"meta":71,"style":71},"\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",[73,145949,145950,145955,145969,145974,145994,145999,146018,146023,146042,146047,146066],{"__ignoreMap":71},[76,145951,145952],{"class":78,"line":79},[76,145953,145954],{"class":540},"\u003C!-- 携程网移动端案例结构 -->\n",[76,145956,145957,145959,145961,145963,145965,145967],{"class":78,"line":94},[76,145958,584],{"class":90},[76,145960,53643],{"class":53332},[76,145962,55518],{"class":86},[76,145964,370],{"class":90},[76,145966,94347],{"class":126},[76,145968,53339],{"class":90},[76,145970,145971],{"class":78,"line":133},[76,145972,145973],{"class":540},"  \u003C!-- 搜索栏 -->\n",[76,145975,145976,145978,145980,145982,145984,145987,145990,145992],{"class":78,"line":145},[76,145977,54176],{"class":90},[76,145979,53643],{"class":53332},[76,145981,55518],{"class":86},[76,145983,370],{"class":90},[76,145985,145986],{"class":126},"\"search-index\"",[76,145988,145989],{"class":90},">...\u003C\u002F",[76,145991,53643],{"class":53332},[76,145993,53339],{"class":90},[76,145995,145996],{"class":78,"line":152},[76,145997,145998],{"class":540},"  \u003C!-- 焦点图 -->\n",[76,146000,146001,146003,146005,146007,146009,146012,146014,146016],{"class":78,"line":157},[76,146002,54176],{"class":90},[76,146004,53643],{"class":53332},[76,146006,55518],{"class":86},[76,146008,370],{"class":90},[76,146010,146011],{"class":126},"\"focus\"",[76,146013,145989],{"class":90},[76,146015,53643],{"class":53332},[76,146017,53339],{"class":90},[76,146019,146020],{"class":78,"line":246},[76,146021,146022],{"class":540},"  \u003C!-- 主导航 -->\n",[76,146024,146025,146027,146029,146031,146033,146036,146038,146040],{"class":78,"line":251},[76,146026,54176],{"class":90},[76,146028,53643],{"class":53332},[76,146030,55518],{"class":86},[76,146032,370],{"class":90},[76,146034,146035],{"class":126},"\"local-nav\"",[76,146037,145989],{"class":90},[76,146039,53643],{"class":53332},[76,146041,53339],{"class":90},[76,146043,146044],{"class":78,"line":257},[76,146045,146046],{"class":540},"  \u003C!-- 子导航 -->\n",[76,146048,146049,146051,146053,146055,146057,146060,146062,146064],{"class":78,"line":641},[76,146050,54176],{"class":90},[76,146052,53643],{"class":53332},[76,146054,55518],{"class":86},[76,146056,370],{"class":90},[76,146058,146059],{"class":126},"\"nav-common\"",[76,146061,145989],{"class":90},[76,146063,53643],{"class":53332},[76,146065,53339],{"class":90},[76,146067,146068,146070,146072],{"class":78,"line":646},[76,146069,53817],{"class":90},[76,146071,53643],{"class":53332},[76,146073,53339],{"class":90},[19,146075,72480],{},[66,146077,146078],{"className":128572,"code":139024,"language":128574,"meta":71,"style":71},[73,146079,146080,146094,146110],{"__ignoreMap":71},[76,146081,146082,146084,146086,146088,146090,146092],{"class":78,"line":79},[76,146083,1673],{"class":53332},[76,146085,3148],{"class":90},[76,146087,105129],{"class":86},[76,146089,370],{"class":82},[76,146091,64727],{"class":126},[76,146093,139041],{"class":90},[76,146095,146096,146098,146100,146102,146104,146106,146108],{"class":78,"line":94},[76,146097,72923],{"class":119},[76,146099,53469],{"class":90},[76,146101,669],{"class":119},[76,146103,53524],{"class":82},[76,146105,53553],{"class":119},[76,146107,132152],{"class":119},[76,146109,3415],{"class":90},[76,146111,146112],{"class":78,"line":133},[76,146113,3685],{"class":90},[19,146115,146116],{},"总代码和效果展示：",[3583,146118],{"style":128428,"src":146119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146121,70917],{},[66,146123,146124],{"className":129319,"code":145947,"language":129321,"meta":71,"style":71},[73,146125,146126,146130,146144,146148,146166,146170,146188,146192,146210,146214,146232],{"__ignoreMap":71},[76,146127,146128],{"class":78,"line":79},[76,146129,145954],{"class":540},[76,146131,146132,146134,146136,146138,146140,146142],{"class":78,"line":94},[76,146133,584],{"class":90},[76,146135,53643],{"class":53332},[76,146137,55518],{"class":86},[76,146139,370],{"class":90},[76,146141,94347],{"class":126},[76,146143,53339],{"class":90},[76,146145,146146],{"class":78,"line":133},[76,146147,145973],{"class":540},[76,146149,146150,146152,146154,146156,146158,146160,146162,146164],{"class":78,"line":145},[76,146151,54176],{"class":90},[76,146153,53643],{"class":53332},[76,146155,55518],{"class":86},[76,146157,370],{"class":90},[76,146159,145986],{"class":126},[76,146161,145989],{"class":90},[76,146163,53643],{"class":53332},[76,146165,53339],{"class":90},[76,146167,146168],{"class":78,"line":152},[76,146169,145998],{"class":540},[76,146171,146172,146174,146176,146178,146180,146182,146184,146186],{"class":78,"line":157},[76,146173,54176],{"class":90},[76,146175,53643],{"class":53332},[76,146177,55518],{"class":86},[76,146179,370],{"class":90},[76,146181,146011],{"class":126},[76,146183,145989],{"class":90},[76,146185,53643],{"class":53332},[76,146187,53339],{"class":90},[76,146189,146190],{"class":78,"line":246},[76,146191,146022],{"class":540},[76,146193,146194,146196,146198,146200,146202,146204,146206,146208],{"class":78,"line":251},[76,146195,54176],{"class":90},[76,146197,53643],{"class":53332},[76,146199,55518],{"class":86},[76,146201,370],{"class":90},[76,146203,146035],{"class":126},[76,146205,145989],{"class":90},[76,146207,53643],{"class":53332},[76,146209,53339],{"class":90},[76,146211,146212],{"class":78,"line":257},[76,146213,146046],{"class":540},[76,146215,146216,146218,146220,146222,146224,146226,146228,146230],{"class":78,"line":641},[76,146217,54176],{"class":90},[76,146219,53643],{"class":53332},[76,146221,55518],{"class":86},[76,146223,370],{"class":90},[76,146225,146059],{"class":126},[76,146227,145989],{"class":90},[76,146229,53643],{"class":53332},[76,146231,53339],{"class":90},[76,146233,146234,146236,146238],{"class":78,"line":646},[76,146235,53817],{"class":90},[76,146237,53643],{"class":53332},[76,146239,53339],{"class":90},[19,146241,72480],{},[66,146243,146244],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,146245,146246,146250,146264,146268],{"__ignoreMap":71},[76,146247,146248],{"class":78,"line":79},[76,146249,132683],{"class":540},[76,146251,146252,146254,146256,146258,146260,146262],{"class":78,"line":94},[76,146253,584],{"class":90},[76,146255,53643],{"class":53332},[76,146257,55518],{"class":86},[76,146259,370],{"class":90},[76,146261,132696],{"class":126},[76,146263,53339],{"class":90},[76,146265,146266],{"class":78,"line":133},[76,146267,132703],{"class":90},[76,146269,146270,146272,146274],{"class":78,"line":145},[76,146271,53817],{"class":90},[76,146273,53643],{"class":53332},[76,146275,53339],{"class":90},[2178,146277,139973],{},{"title":71,"searchDepth":94,"depth":94,"links":146279},[146280,146281,146285,146286,146287],{"id":145424,"depth":94,"text":145425},{"id":145456,"depth":94,"text":145457,"children":146282},[146283,146284],{"id":145460,"depth":133,"text":145461},{"id":145477,"depth":133,"text":145478},{"id":145496,"depth":94,"text":145497},{"id":145503,"depth":94,"text":145504},{"id":145590,"depth":94,"text":145591,"children":146288},[146289,146290,146291,146292,146293],{"id":145597,"depth":133,"text":145598},{"id":145725,"depth":133,"text":145726},{"id":145819,"depth":133,"text":145820},{"id":145868,"depth":133,"text":145869},{"id":145878,"depth":133,"text":145879},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145416,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146300,"title":146301,"body":146302,"description":2201,"extension":2202,"meta":147529,"navigation":148,"path":147530,"seo":147531,"stem":147532,"__hash__":147533},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146303,"toc":147507},[146304,146307,146311,146315,146318,146321,146325,146330,146333,146336,146339,146342,146345,146402,146405,146410,146413,146416,146420,146431,146435,146438,146441,146448,146453,146457,146460,146466,146469,146473,146476,146483,146486,146489,146496,146499,146506,146509,146512,146519,146522,146525,146527,146544,146548,146551,146554,146557,146561,146564,146567,146570,146573,146576,146579,146581,146584,146587,146649,146652,146762,146769,146775,146778,146781,146785,146788,146792,146797,146800,146807,146810,146816,146821,146824,146827,146830,146833,146836,146839,146842,146845,146901,146903,146929,146933,146936,146939,146942,146950,146953,146956,146960,147016,147019,147023,147029,147040,147043,147048,147051,147054,147060,147063,147066,147069,147072,147075,147078,147081,147084,147109,147115,147118,147121,147124,147127,147130,147133,147138,147141,147144,147147,147155,147158,147165,147168,147171,147173,147197,147199,147202,147205,147208,147211,147214,147217,147220,147254,147257,147260,147294,147301,147304,147307,147310,147313,147316,147319,147326,147329,147332,147335,147338,147345,147348,147351,147358,147361,147364,147368,147371,147374,147377,147380,147383,147386,147389,147392,147394,147418,147420,147444,147448,147459,147462,147465,147468,147471,147474,147477,147480,147483,147486,147489,147492,147495,147498,147501,147504],[10,146305,146301],{"id":146306},"_21-移动端布局实战下篇",[14,146308,146310],{"id":146309},"_211-rem适配布局","21.1 rem适配布局",[889,146312,146314],{"id":146313},"_2111-rem单位","21.1.1 rem单位",[3583,146316],{"style":128428,"src":146317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146319,146320],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[889,146322,146324],{"id":146323},"_2112-媒体查询","21.1.2 媒体查询",[26,146326,146327],{},[29,146328,146329],{},"参数介绍",[3583,146331],{"style":128428,"src":146332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3583,146334],{"style":128428,"src":146335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3583,146337],{"style":128428,"src":146338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3583,146340],{"style":128428,"src":146341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3583,146343],{"style":128428,"src":146344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[66,146346,146348],{"className":128572,"code":146347,"language":128574,"meta":71,"style":71},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[73,146349,146350,146355,146374,146381,146394,146398],{"__ignoreMap":71},[76,146351,146352],{"class":78,"line":79},[76,146353,146354],{"class":540},"\u002F* 媒体查询 *\u002F\n",[76,146356,146357,146360,146362,146365,146367,146370,146372],{"class":78,"line":94},[76,146358,146359],{"class":82},"@media",[76,146361,3770],{"class":90},[76,146363,146364],{"class":119},"max-width",[76,146366,53469],{"class":90},[76,146368,146369],{"class":119},"768",[76,146371,53524],{"class":82},[76,146373,14495],{"class":90},[76,146375,146376,146379],{"class":78,"line":133},[76,146377,146378],{"class":86},"  .container",[76,146380,17623],{"class":90},[76,146382,146383,146386,146388,146390,146392],{"class":78,"line":145},[76,146384,146385],{"class":119},"    width",[76,146387,53469],{"class":90},[76,146389,2575],{"class":119},[76,146391,2592],{"class":82},[76,146393,3415],{"class":90},[76,146395,146396],{"class":78,"line":152},[76,146397,129368],{"class":90},[76,146399,146400],{"class":78,"line":157},[76,146401,3685],{"class":90},[19,146403,146404],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,146406,146407],{"start":94},[29,146408,146409],{},"引入资源",[3583,146411],{"style":128428,"src":146412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146414,146415],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[889,146417,146419],{"id":146418},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3261,146421,146422,146425,146428],{},[29,146423,146424],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,146426,146427],{},"媒体查询可以根据不同设备宽度来修改样式",[29,146429,146430],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146432,146434],{"id":146433},"_212-less基础","21.2 Less基础",[19,146436,146437],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146439,146440],{},"Less可以解决该问题，它是css的扩展语言",[19,146442,146443,146444],{},"Less中文网址： ",[2503,146445,146446],{"href":146446,"rel":146447},"http:\u002F\u002Flesscss.cn\u002F",[25914],[19,146449,146450],{},[2416,146451,146452],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[889,146454,146456],{"id":146455},"_2121-less安装","21.2.1 less安装",[19,146458,146459],{},"如果使用vscode，则无需进行下方安装步骤",[19,146461,146462],{},[2503,146463,146464],{"href":146464,"rel":146465},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25914],[3583,146467],{"style":128428,"src":146468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[889,146470,146472],{"id":146471},"_2122-less使用","21.2.2 less使用",[19,146474,146475],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,146477,146478],{},[29,146479,146480],{},[2416,146481,146482],{},"Less 变量",[3583,146484],{"style":128428,"src":146485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3583,146487],{"style":128428,"src":146488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,146490,146491],{"start":94},[29,146492,146493],{},[2416,146494,146495],{},"Less 编译",[3583,146497],{"style":128428,"src":146498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,146500,146501],{"start":133},[29,146502,146503],{},[2416,146504,146505],{},"Less 嵌套",[3583,146507],{"style":128428,"src":146508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3583,146510],{"style":128428,"src":146511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,146513,146514],{"start":145},[29,146515,146516],{},[2416,146517,146518],{},"Less 运算",[3583,146520],{"style":128428,"src":146521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146523,146524],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146526,2301],{},[3261,146528,146529,146532,146535,146538,146541],{},[29,146530,146531],{},"乘号（*）和除号（\u002F）的写法",[29,146533,146534],{},"运算符中间左右有个空格隔开 1px + 5",[29,146536,146537],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,146539,146540],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,146542,146543],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146545,146547],{"id":146546},"_213-rem-适配方案","21.3 rem 适配方案",[19,146549,146550],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146552,146553],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3583,146555],{"style":128428,"src":146556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[889,146558,146560],{"id":146559},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146562,146563],{},"rem + 媒体查询 + less 技术",[3583,146565],{"style":128428,"src":146566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146568,146569],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146571,146572],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3583,146574],{"style":128428,"src":146575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146577,146578],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146580,16686],{},[3583,146582],{"style":128428,"src":146583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146585,146586],{},"index.html:",[66,146588,146590],{"className":128572,"code":146589,"language":128574,"meta":71,"style":71},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[73,146591,146592,146597,146603,146619,146623,146629,146645],{"__ignoreMap":71},[76,146593,146594],{"class":78,"line":79},[76,146595,146596],{"class":540},"\u002F* rem 适配方案 *\u002F\n",[76,146598,146599,146601],{"class":78,"line":94},[76,146600,52667],{"class":53332},[76,146602,17623],{"class":90},[76,146604,146605,146607,146609,146612,146614,146616],{"class":78,"line":133},[76,146606,72653],{"class":119},[76,146608,53469],{"class":90},[76,146610,146611],{"class":119},"62.5",[76,146613,2592],{"class":82},[76,146615,132435],{"class":90},[76,146617,146618],{"class":540},"\u002F* 1rem = 10px *\u002F\n",[76,146620,146621],{"class":78,"line":145},[76,146622,3685],{"class":90},[76,146624,146625,146627],{"class":78,"line":152},[76,146626,132420],{"class":86},[76,146628,17623],{"class":90},[76,146630,146631,146633,146635,146637,146640,146642],{"class":78,"line":157},[76,146632,72595],{"class":119},[76,146634,53469],{"class":90},[76,146636,402],{"class":119},[76,146638,146639],{"class":82},"rem",[76,146641,132435],{"class":90},[76,146643,146644],{"class":540},"\u002F* 100px *\u002F\n",[76,146646,146647],{"class":78,"line":246},[76,146648,3685],{"class":90},[19,146650,146651],{},"common.less",[66,146653,146655],{"className":128572,"code":146654,"language":128574,"meta":71,"style":71},"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",[73,146656,146657,146663,146678,146682,146688,146702,146706,146710,146714,146720,146734,146738,146744,146758],{"__ignoreMap":71},[76,146658,146659,146661],{"class":78,"line":79},[76,146660,52667],{"class":53332},[76,146662,17623],{"class":90},[76,146664,146665,146667,146669,146671,146673,146675],{"class":78,"line":94},[76,146666,72653],{"class":119},[76,146668,53469],{"class":90},[76,146670,146611],{"class":119},[76,146672,2592],{"class":82},[76,146674,28116],{"class":90},[76,146676,146677],{"class":540},"\u002F* 10px *\u002F\n",[76,146679,146680],{"class":78,"line":133},[76,146681,3685],{"class":90},[76,146683,146684,146686],{"class":78,"line":145},[76,146685,53643],{"class":53332},[76,146687,17623],{"class":90},[76,146689,146690,146692,146694,146696,146698,146700],{"class":78,"line":152},[76,146691,72595],{"class":119},[76,146693,53469],{"class":90},[76,146695,402],{"class":119},[76,146697,146639],{"class":82},[76,146699,28116],{"class":90},[76,146701,146644],{"class":540},[76,146703,146704],{"class":78,"line":157},[76,146705,3685],{"class":90},[76,146707,146708],{"class":78,"line":246},[76,146709,138033],{"class":90},[76,146711,146712],{"class":78,"line":251},[76,146713,146596],{"class":540},[76,146715,146716,146718],{"class":78,"line":257},[76,146717,52667],{"class":53332},[76,146719,17623],{"class":90},[76,146721,146722,146724,146726,146728,146730,146732],{"class":78,"line":641},[76,146723,72653],{"class":119},[76,146725,53469],{"class":90},[76,146727,146611],{"class":119},[76,146729,2592],{"class":82},[76,146731,132435],{"class":90},[76,146733,146618],{"class":540},[76,146735,146736],{"class":78,"line":646},[76,146737,3685],{"class":90},[76,146739,146740,146742],{"class":78,"line":659},[76,146741,132420],{"class":86},[76,146743,17623],{"class":90},[76,146745,146746,146748,146750,146752,146754,146756],{"class":78,"line":1608},[76,146747,72595],{"class":119},[76,146749,53469],{"class":90},[76,146751,402],{"class":119},[76,146753,146639],{"class":82},[76,146755,132435],{"class":90},[76,146757,146644],{"class":540},[76,146759,146760],{"class":78,"line":1632},[76,146761,3685],{"class":90},[19,146763,146764,146765,146768],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25602,146766,146767],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[66,146770,146773],{"className":146771,"code":146772,"language":7268},[7266],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[73,146774,146772],{"__ignoreMap":71},[19,146776,146777],{},"less保存时会自动变成.css文件",[19,146779,146780],{},"好好搞懂上述代码写法",[889,146782,146784],{"id":146783},"_2132-样式导入样式","21.3.2 样式导入样式",[3583,146786],{"style":128428,"src":146787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[889,146789,146791],{"id":146790},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146793,146794],{},[29,146795,146796],{},"准备工作",[3583,146798],{"style":128428,"src":146799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146801,146802,146803],{},"github地址：",[2503,146804,146805],{"href":146805,"rel":146806},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25914],[19,146808,146809],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146811,146812,146813],{},"js文件引入到index.html中使用的是",[73,146814,146815],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146817,146818],{"start":94},[29,146819,146820],{},"vscode插件",[3583,146822],{"style":128428,"src":146823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146825,146826],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146828,146829],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3583,146831],{"style":128428,"src":146832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146834,146835],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3583,146837],{"style":128428,"src":146838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146840,146841],{},"修改成75就可以，alt+z为快捷键",[19,146843,146844],{},"index.css：",[66,146846,146847],{"className":128572,"code":146589,"language":128574,"meta":71,"style":71},[73,146848,146849,146853,146859,146873,146877,146883,146897],{"__ignoreMap":71},[76,146850,146851],{"class":78,"line":79},[76,146852,146596],{"class":540},[76,146854,146855,146857],{"class":78,"line":94},[76,146856,52667],{"class":53332},[76,146858,17623],{"class":90},[76,146860,146861,146863,146865,146867,146869,146871],{"class":78,"line":133},[76,146862,72653],{"class":119},[76,146864,53469],{"class":90},[76,146866,146611],{"class":119},[76,146868,2592],{"class":82},[76,146870,132435],{"class":90},[76,146872,146618],{"class":540},[76,146874,146875],{"class":78,"line":145},[76,146876,3685],{"class":90},[76,146878,146879,146881],{"class":78,"line":152},[76,146880,132420],{"class":86},[76,146882,17623],{"class":90},[76,146884,146885,146887,146889,146891,146893,146895],{"class":78,"line":157},[76,146886,72595],{"class":119},[76,146888,53469],{"class":90},[76,146890,402],{"class":119},[76,146892,146639],{"class":82},[76,146894,132435],{"class":90},[76,146896,146644],{"class":540},[76,146898,146899],{"class":78,"line":246},[76,146900,3685],{"class":90},[19,146902,146586],{},[66,146904,146905],{"className":128572,"code":128976,"language":128574,"meta":71,"style":71},[73,146906,146907,146913,146925],{"__ignoreMap":71},[76,146908,146909,146911],{"class":78,"line":79},[76,146910,53832],{"class":53332},[76,146912,17623],{"class":90},[76,146914,146915,146917,146919,146921,146923],{"class":78,"line":94},[76,146916,72653],{"class":119},[76,146918,53469],{"class":90},[76,146920,2861],{"class":119},[76,146922,53524],{"class":82},[76,146924,3415],{"class":90},[76,146926,146927],{"class":78,"line":133},[76,146928,3685],{"class":90},[14,146930,146932],{"id":146931},"_214-响应式开发","21.4 响应式开发",[19,146934,146935],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3583,146937],{"style":128428,"src":146938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146940,146941],{},"做法：",[3261,146943,146944,146947],{},[29,146945,146946],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146948,146949],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3583,146951],{"style":128428,"src":146952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146954,146955],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[889,146957,146959],{"id":146958},"_2141-简单代码示范","21.4.1 简单代码示范",[66,146961,146962],{"className":128572,"code":146589,"language":128574,"meta":71,"style":71},[73,146963,146964,146968,146974,146988,146992,146998,147012],{"__ignoreMap":71},[76,146965,146966],{"class":78,"line":79},[76,146967,146596],{"class":540},[76,146969,146970,146972],{"class":78,"line":94},[76,146971,52667],{"class":53332},[76,146973,17623],{"class":90},[76,146975,146976,146978,146980,146982,146984,146986],{"class":78,"line":133},[76,146977,72653],{"class":119},[76,146979,53469],{"class":90},[76,146981,146611],{"class":119},[76,146983,2592],{"class":82},[76,146985,132435],{"class":90},[76,146987,146618],{"class":540},[76,146989,146990],{"class":78,"line":145},[76,146991,3685],{"class":90},[76,146993,146994,146996],{"class":78,"line":152},[76,146995,132420],{"class":86},[76,146997,17623],{"class":90},[76,146999,147000,147002,147004,147006,147008,147010],{"class":78,"line":157},[76,147001,72595],{"class":119},[76,147003,53469],{"class":90},[76,147005,402],{"class":119},[76,147007,146639],{"class":82},[76,147009,132435],{"class":90},[76,147011,146644],{"class":540},[76,147013,147014],{"class":78,"line":246},[76,147015,3685],{"class":90},[19,147017,147018],{},"父盒子一般命名为container",[889,147020,147022],{"id":147021},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147024,147025,147026],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2416,147027,147028],{},"使得 Web 开发更加快捷",[3261,147030,147031],{},[29,147032,147033,147034],{},"官网：",[2416,147035,147036],{},[2503,147037,147038],{"href":147038,"rel":147039},"http:\u002F\u002Fgetbootstrap.com\u002F",[25914],[19,147041,147042],{},"可以直接去官网拿现成的东西",[26,147044,147045],{},[29,147046,147047],{},"Bootstrap的使用",[19,147049,147050],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147052,147053],{},"Bootstrap 使用四步曲：",[19,147055,147056,147059],{},[2416,147057,147058],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3583,147061],{"style":128428,"src":147062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147064,147065],{},"打开Bootstrap官网，然后下载",[3583,147067],{"style":128428,"src":147068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3583,147070],{"style":128428,"src":147071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147073,147074],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147076,147077],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147079,147080],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3583,147082],{"style":128428,"src":147083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[66,147085,147087],{"className":128572,"code":147086,"language":128574,"meta":71,"style":71},".center {\n  color: red;\n}\n",[73,147088,147089,147095,147105],{"__ignoreMap":71},[76,147090,147091,147093],{"class":78,"line":79},[76,147092,128863],{"class":86},[76,147094,17623],{"class":90},[76,147096,147097,147099,147101,147103],{"class":78,"line":94},[76,147098,72932],{"class":119},[76,147100,53469],{"class":90},[76,147102,59451],{"class":119},[76,147104,3415],{"class":90},[76,147106,147107],{"class":78,"line":133},[76,147108,3685],{"class":90},[19,147110,147111,147114],{},[73,147112,147113],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3583,147116],{"style":128428,"src":147117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3583,147119],{"style":128428,"src":147120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3583,147122],{"style":128428,"src":147123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147125,147126],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3583,147128],{"style":128428,"src":147129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147131,147132],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,147134,147135],{"start":94},[29,147136,147137],{},"布局容器",[3583,147139],{"style":128428,"src":147140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147142,147143],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147145,147146],{},"container-fluid用于移动式布局比较方便",[26,147148,147149],{"start":133},[29,147150,147151,147152],{},"bootstrap ",[2416,147153,147154],{},"栅格系统原理",[3583,147156],{"style":128428,"src":147157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,147159,147160],{"start":145},[29,147161,147162],{},[2416,147163,147164],{},"栅格选项参数",[3583,147166],{"style":128428,"src":147167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147169,147170],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147172,16686],{},[66,147174,147175],{"className":128572,"code":147086,"language":128574,"meta":71,"style":71},[73,147176,147177,147183,147193],{"__ignoreMap":71},[76,147178,147179,147181],{"class":78,"line":79},[76,147180,128863],{"class":86},[76,147182,17623],{"class":90},[76,147184,147185,147187,147189,147191],{"class":78,"line":94},[76,147186,72932],{"class":119},[76,147188,53469],{"class":90},[76,147190,59451],{"class":119},[76,147192,3415],{"class":90},[76,147194,147195],{"class":78,"line":133},[76,147196,3685],{"class":90},[19,147198,137615],{},[3583,147200],{"style":128428,"src":147201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147203,147204],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147206,147207],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147209,147210],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147212,147213],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147215,147216],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147218,147219],{},"汇总展示说明：",[66,147221,147222],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,147223,147224,147228,147242,147246],{"__ignoreMap":71},[76,147225,147226],{"class":78,"line":79},[76,147227,132683],{"class":540},[76,147229,147230,147232,147234,147236,147238,147240],{"class":78,"line":94},[76,147231,584],{"class":90},[76,147233,53643],{"class":53332},[76,147235,55518],{"class":86},[76,147237,370],{"class":90},[76,147239,132696],{"class":126},[76,147241,53339],{"class":90},[76,147243,147244],{"class":78,"line":133},[76,147245,132703],{"class":90},[76,147247,147248,147250,147252],{"class":78,"line":145},[76,147249,53817],{"class":90},[76,147251,53643],{"class":53332},[76,147253,53339],{"class":90},[3583,147255],{"style":128428,"src":147256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147258,147259],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[66,147261,147262],{"className":129319,"code":132676,"language":129321,"meta":71,"style":71},[73,147263,147264,147268,147282,147286],{"__ignoreMap":71},[76,147265,147266],{"class":78,"line":79},[76,147267,132683],{"class":540},[76,147269,147270,147272,147274,147276,147278,147280],{"class":78,"line":94},[76,147271,584],{"class":90},[76,147273,53643],{"class":53332},[76,147275,55518],{"class":86},[76,147277,370],{"class":90},[76,147279,132696],{"class":126},[76,147281,53339],{"class":90},[76,147283,147284],{"class":78,"line":133},[76,147285,132703],{"class":90},[76,147287,147288,147290,147292],{"class":78,"line":145},[76,147289,53817],{"class":90},[76,147291,53643],{"class":53332},[76,147293,53339],{"class":90},[26,147295,147296],{"start":152},[29,147297,147298],{},[2416,147299,147300],{},"列嵌套",[3583,147302],{"style":128428,"src":147303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147305,147306],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147308,147309],{},"没加row内部这样：",[3583,147311],{"style":128428,"src":147312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147314,147315],{},"加上row之后内部为：",[3583,147317],{"style":128428,"src":147318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,147320,147321],{"start":157},[29,147322,147323],{},[2416,147324,147325],{},"列偏移",[3583,147327],{"style":128428,"src":147328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147330,147331],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147333,147334],{},"要加偏移量，即偏移份数",[19,147336,147337],{},"偏移的份数=12-两个盒子的份数",[26,147339,147340],{"start":246},[29,147341,147342],{},[2416,147343,147344],{},"列排序",[3583,147346],{"style":128428,"src":147347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147349,147350],{},"pull拉左；push推右",[26,147352,147353],{"start":251},[29,147354,147355],{},[2416,147356,147357],{},"响应式工具",[3583,147359],{"style":128428,"src":147360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147362,147363],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[889,147365,147367],{"id":147366},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147369,147370],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147372,147373],{},"ul {",[19,147375,147376],{},"list-style: none;",[19,147378,147379],{},"margin:0;",[19,147381,147382],{},"padding:0; }",[3583,147384],{"style":128428,"src":147385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3583,147387],{"style":128428,"src":147388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147390,147391],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147393,70917],{},[66,147395,147396],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,147397,147398,147404,147414],{"__ignoreMap":71},[76,147399,147400,147402],{"class":78,"line":79},[76,147401,132420],{"class":86},[76,147403,17623],{"class":90},[76,147405,147406,147408,147410,147412],{"class":78,"line":94},[76,147407,133052],{"class":119},[76,147409,53469],{"class":90},[76,147411,25785],{"class":119},[76,147413,3415],{"class":90},[76,147415,147416],{"class":78,"line":133},[76,147417,3685],{"class":90},[19,147419,72480],{},[66,147421,147422],{"className":128572,"code":141242,"language":128574,"meta":71,"style":71},[73,147423,147424,147430,147440],{"__ignoreMap":71},[76,147425,147426,147428],{"class":78,"line":79},[76,147427,132420],{"class":86},[76,147429,17623],{"class":90},[76,147431,147432,147434,147436,147438],{"class":78,"line":94},[76,147433,133052],{"class":119},[76,147435,53469],{"class":90},[76,147437,25785],{"class":119},[76,147439,3415],{"class":90},[76,147441,147442],{"class":78,"line":133},[76,147443,3685],{"class":90},[14,147445,147447],{"id":147446},"_215-swiper-插件使用","21.5 swiper 插件使用",[3261,147449,147450,147453,147456],{},[29,147451,147452],{},"下载需要的css和js文件html页面中 引入相关文件",[29,147454,147455],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,147457,147458],{},"根据需求定制修改模块",[3583,147460],{"style":128428,"src":147461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147463,147464],{},"解压后将这两部分放到项目中",[3583,147466],{"style":128428,"src":147467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147469,147470],{},"这个插件可以帮助我们实现轮播图效果",[19,147472,147473],{},"用法：",[3583,147475],{"style":128428,"src":147476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147478,147479],{},"找到自己喜欢的",[3583,147481],{"style":128428,"src":147482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147484,147485],{},"右键，查看网页源代码",[3583,147487],{"style":128428,"src":147488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147490,147491],{},"复制人家的结构内容",[19,147493,147494],{},"然后去看API文档：",[3583,147496],{"style":128428,"src":147497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147499,147500],{},"可以看看如何修改样式",[19,147502,147503],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2178,147505,147506],{},"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":71,"searchDepth":94,"depth":94,"links":147508},[147509,147514,147518,147523,147528],{"id":146309,"depth":94,"text":146310,"children":147510},[147511,147512,147513],{"id":146313,"depth":133,"text":146314},{"id":146323,"depth":133,"text":146324},{"id":146418,"depth":133,"text":146419},{"id":146433,"depth":94,"text":146434,"children":147515},[147516,147517],{"id":146455,"depth":133,"text":146456},{"id":146471,"depth":133,"text":146472},{"id":146546,"depth":94,"text":146547,"children":147519},[147520,147521,147522],{"id":146559,"depth":133,"text":146560},{"id":146783,"depth":133,"text":146784},{"id":146790,"depth":133,"text":146791},{"id":146931,"depth":94,"text":146932,"children":147524},[147525,147526,147527],{"id":146958,"depth":133,"text":146959},{"id":147021,"depth":133,"text":147022},{"id":147366,"depth":133,"text":147367},{"id":147446,"depth":94,"text":147447},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146301,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147535,"title":147536,"body":147537,"description":2201,"extension":2202,"meta":147757,"navigation":148,"path":147758,"seo":147759,"stem":147760,"__hash__":147761},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147538,"toc":147753},[147539,147542,147546,147549,147564,147569,147572,147577,147612,147617,147629,147634,147647,147652,147669,147674,147694,147699,147717,147720,147723,147726,147729,147733,147736,147739,147742,147745,147748,147751],[10,147540,147536],{"id":147541},"_22-代码提交与新型相对单位",[14,147543,147545],{"id":147544},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147547,147548],{},"法1：",[26,147550,147551,147558,147561],{},[29,147552,147553,147554],{},"登录网站注册：",[2503,147555,147556],{"href":147556,"rel":147557},"https:\u002F\u002Fgitee.com\u002F",[25914],[29,147559,147560],{},"码云创建新的仓库",[29,147562,147563],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3261,147565,147566],{},[29,147567,147568],{},"在网站根目录右键-- Git Bash Here",[3583,147570],{"style":128428,"src":147571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3261,147573,147574],{},[29,147575,147576],{},"如果是第一次利用git提交，请配置好全局选项",[66,147578,147580],{"className":119316,"code":147579,"language":119318,"meta":71,"style":71},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[73,147581,147582,147598],{"__ignoreMap":71},[76,147583,147584,147587,147589,147592,147595],{"class":78,"line":79},[76,147585,147586],{"class":86},"git",[76,147588,121739],{"class":126},[76,147590,147591],{"class":119}," --global",[76,147593,147594],{"class":126}," user.name",[76,147596,147597],{"class":126}," \"你的名字\"\n",[76,147599,147600,147602,147604,147606,147609],{"class":78,"line":94},[76,147601,147586],{"class":86},[76,147603,121739],{"class":126},[76,147605,147591],{"class":119},[76,147607,147608],{"class":126}," user.email",[76,147610,147611],{"class":126}," \"你的邮箱\"\n",[3261,147613,147614],{},[29,147615,147616],{},"初始化仓库",[66,147618,147620],{"className":119316,"code":147619,"language":119318,"meta":71,"style":71},"git init\n",[73,147621,147622],{"__ignoreMap":71},[76,147623,147624,147626],{"class":78,"line":79},[76,147625,147586],{"class":86},[76,147627,147628],{"class":126}," init\n",[3261,147630,147631],{},[29,147632,147633],{},"把本地文件放到暂存区",[66,147635,147637],{"className":119316,"code":147636,"language":119318,"meta":71,"style":71},"git add .\n",[73,147638,147639],{"__ignoreMap":71},[76,147640,147641,147643,147645],{"class":78,"line":79},[76,147642,147586],{"class":86},[76,147644,359],{"class":126},[76,147646,30789],{"class":126},[3261,147648,147649],{},[29,147650,147651],{},"把本地文件放到本地仓库里面",[66,147653,147655],{"className":119316,"code":147654,"language":119318,"meta":71,"style":71},"git commit -m \"first commit\"\n",[73,147656,147657],{"__ignoreMap":71},[76,147658,147659,147661,147664,147666],{"class":78,"line":79},[76,147660,147586],{"class":86},[76,147662,147663],{"class":126}," commit",[76,147665,102904],{"class":119},[76,147667,147668],{"class":126}," \"first commit\"\n",[3261,147670,147671],{},[29,147672,147673],{},"链接远程仓库",[66,147675,147677],{"className":119316,"code":147676,"language":119318,"meta":71,"style":71},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[73,147678,147679],{"__ignoreMap":71},[76,147680,147681,147683,147686,147688,147691],{"class":78,"line":79},[76,147682,147586],{"class":86},[76,147684,147685],{"class":126}," remote",[76,147687,359],{"class":126},[76,147689,147690],{"class":126}," origin",[76,147692,147693],{"class":126}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3261,147695,147696],{},[29,147697,147698],{},"把本地仓库的文件推送到远程仓库 push",[66,147700,147702],{"className":119316,"code":147701,"language":119318,"meta":71,"style":71},"git push -u origin master\n",[73,147703,147704],{"__ignoreMap":71},[76,147705,147706,147708,147710,147712,147714],{"class":78,"line":79},[76,147707,147586],{"class":86},[76,147709,31064],{"class":126},[76,147711,30339],{"class":119},[76,147713,147690],{"class":126},[76,147715,147716],{"class":126}," master\n",[3583,147718],{"style":128428,"src":147719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147721,147722],{},"上方方法暂未实现，后边学完git后在整",[19,147724,147725],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3583,147727],{"style":128428,"src":147728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147730,147732],{"id":147731},"_222-新型相对单位","22.2 新型相对单位",[3583,147734],{"style":128428,"src":147735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3583,147737],{"style":128428,"src":147738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147740,147741],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147743,147744],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3583,147746],{"style":128428,"src":147747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147749,147750],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2178,147752,26007],{},{"title":71,"searchDepth":94,"depth":94,"links":147754},[147755,147756],{"id":147544,"depth":94,"text":147545},{"id":147731,"depth":94,"text":147732},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147536,"description":2201},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147763,"title":147764,"body":147765,"description":147769,"extension":2202,"meta":147770,"navigation":148,"path":147771,"seo":147772,"stem":147773,"__hash__":147774},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147766,"toc":147767},[],{"title":71,"searchDepth":94,"depth":94,"links":147768},[],"自己正经开始学编程的第一门语言！",{"category":94863},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147764,"description":147769},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147776,"title":147777,"body":147778,"description":2201,"extension":2202,"meta":148922,"navigation":148,"path":148923,"seo":148924,"stem":148925,"__hash__":148926},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147779,"toc":148898},[147780,147783,147787,147790,147793,147818,147821,147827,147831,147834,147861,147864,147904,147907,147919,147922,147928,147932,147936,147963,147980,147987,147991,147994,148020,148023,148027,148030,148070,148073,148090,148096,148100,148105,148149,148152,148170,148173,148241,148245,148252,148255,148270,148273,148282,148285,148296,148299,148308,148311,148328,148331,148346,148350,148354,148357,148359,148379,148383,148386,148389,148400,148403,148409,148413,148419,148446,148449,148461,148464,148475,148478,148484,148488,148494,148544,148547,148588,148591,148624,148627,148660,148664,148667,148687,148690,148725,148728,148741,148745,148749,148755,148758,148771,148775,148778,148784,148787,148791,148794,148797,148846,148850,148866,148872,148879,148885,148895],[10,147781,147777],{"id":147782},"_1-python环境与第一个程序",[14,147784,147786],{"id":147785},"_11-什么是python","1.1 什么是Python",[19,147788,147789],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147791,147792],{},"理解 Python 时抓住三个关键词：",[26,147794,147795,147798,147801],{},[29,147796,147797],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147799,147800],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147802,147803,147804,2478,147807,2478,147810,2478,147813,2478,147815,490],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[73,147805,147806],{},"os",[73,147808,147809],{},"sys",[73,147811,147812],{},"json",[73,147814,59890],{},[73,147816,147817],{},"datetime",[19,147819,147820],{},"Python 程序的运行链路：",[66,147822,147825],{"className":147823,"code":147824,"language":7268,"meta":71},[7266],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[73,147826,147824],{"__ignoreMap":71},[14,147828,147830],{"id":147829},"_12-python解释器","1.2 Python解释器",[19,147832,147833],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[66,147835,147837],{"className":25871,"code":147836,"language":25873,"meta":71,"style":71},"python --version\npython3 --version\npython\npython3\n",[73,147838,147839,147845,147851,147856],{"__ignoreMap":71},[76,147840,147841,147843],{"class":78,"line":79},[76,147842,70],{"class":86},[76,147844,28342],{"class":119},[76,147846,147847,147849],{"class":78,"line":94},[76,147848,102901],{"class":86},[76,147850,28342],{"class":119},[76,147852,147853],{"class":78,"line":133},[76,147854,147855],{"class":86},"python\n",[76,147857,147858],{"class":78,"line":145},[76,147859,147860],{"class":86},"python3\n",[19,147862,147863],{},"进入交互模式后，可以直接输入表达式：",[66,147865,147867],{"className":68,"code":147866,"language":70,"meta":71,"style":71},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[73,147868,147869,147880,147885,147899],{"__ignoreMap":71},[76,147870,147871,147874,147876,147878],{"class":78,"line":79},[76,147872,147873],{"class":82},">>>",[76,147875,27168],{"class":119},[76,147877,47601],{"class":82},[76,147879,804],{"class":119},[76,147881,147882],{"class":78,"line":94},[76,147883,147884],{"class":119},"3\n",[76,147886,147887,147889,147892,147894,147897],{"class":78,"line":133},[76,147888,147873],{"class":82},[76,147890,147891],{"class":119}," print",[76,147893,123],{"class":90},[76,147895,147896],{"class":126},"\"hello python\"",[76,147898,130],{"class":90},[76,147900,147901],{"class":78,"line":145},[76,147902,147903],{"class":90},"hello python\n",[19,147905,147906],{},"退出交互模式：",[66,147908,147910],{"className":68,"code":147909,"language":70,"meta":71,"style":71},"exit()\n",[73,147911,147912],{"__ignoreMap":71},[76,147913,147914,147917],{"class":78,"line":79},[76,147915,147916],{"class":119},"exit",[76,147918,4072],{"class":90},[19,147920,147921],{},"或使用快捷键：",[66,147923,147926],{"className":147924,"code":147925,"language":7268,"meta":71},[7266],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[73,147927,147925],{"__ignoreMap":71},[14,147929,147931],{"id":147930},"_13-安装python","1.3 安装Python",[889,147933,147935],{"id":147934},"_131-windows安装","1.3.1 Windows安装",[26,147937,147938,147945,147948,147954,147960],{},[29,147939,147940,147941],{},"打开 Python 官网：",[2503,147942,147943],{"href":147943,"rel":147944},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25914],[29,147946,147947],{},"下载 Windows Installer。",[29,147949,147950,147951,490],{},"安装时勾选 ",[73,147952,147953],{},"Add Python to PATH",[29,147955,147956,147957,490],{},"点击 ",[73,147958,147959],{},"Install Now",[29,147961,147962],{},"安装完成后打开命令提示符验证：",[66,147964,147966],{"className":25871,"code":147965,"language":25873,"meta":71,"style":71},"python --version\npip --version\n",[73,147967,147968,147974],{"__ignoreMap":71},[76,147969,147970,147972],{"class":78,"line":79},[76,147971,70],{"class":86},[76,147973,28342],{"class":119},[76,147975,147976,147978],{"class":78,"line":94},[76,147977,25880],{"class":86},[76,147979,28342],{"class":119},[19,147981,147982,147983,147986],{},"如果提示 ",[73,147984,147985],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[889,147988,147990],{"id":147989},"_132-macos安装","1.3.2 macOS安装",[19,147992,147993],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[66,147995,147997],{"className":25871,"code":147996,"language":25873,"meta":71,"style":71},"brew install python\npython3 --version\npip3 --version\n",[73,147998,147999,148008,148014],{"__ignoreMap":71},[76,148000,148001,148004,148006],{"class":78,"line":79},[76,148002,148003],{"class":86},"brew",[76,148005,25883],{"class":126},[76,148007,126338],{"class":126},[76,148009,148010,148012],{"class":78,"line":94},[76,148011,102901],{"class":86},[76,148013,28342],{"class":119},[76,148015,148016,148018],{"class":78,"line":133},[76,148017,121720],{"class":86},[76,148019,28342],{"class":119},[19,148021,148022],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[889,148024,148026],{"id":148025},"_133-linux安装","1.3.3 Linux安装",[19,148028,148029],{},"Ubuntu\u002FDebian：",[66,148031,148033],{"className":25871,"code":148032,"language":25873,"meta":71,"style":71},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[73,148034,148035,148043,148058,148064],{"__ignoreMap":71},[76,148036,148037,148039,148041],{"class":78,"line":79},[76,148038,26626],{"class":86},[76,148040,119337],{"class":126},[76,148042,28291],{"class":126},[76,148044,148045,148047,148049,148051,148053,148055],{"class":78,"line":94},[76,148046,26626],{"class":86},[76,148048,119337],{"class":126},[76,148050,25883],{"class":126},[76,148052,106425],{"class":126},[76,148054,102820],{"class":126},[76,148056,148057],{"class":126}," python3-venv\n",[76,148059,148060,148062],{"class":78,"line":133},[76,148061,102901],{"class":86},[76,148063,28342],{"class":119},[76,148065,148066,148068],{"class":78,"line":145},[76,148067,121720],{"class":86},[76,148069,28342],{"class":119},[19,148071,148072],{},"Fedora：",[66,148074,148076],{"className":25871,"code":148075,"language":25873,"meta":71,"style":71},"sudo dnf install python3 python3-pip\n",[73,148077,148078],{"__ignoreMap":71},[76,148079,148080,148082,148084,148086,148088],{"class":78,"line":79},[76,148081,26626],{"class":86},[76,148083,28364],{"class":126},[76,148085,25883],{"class":126},[76,148087,106425],{"class":126},[76,148089,121785],{"class":126},[19,148091,148092,148093,148095],{},"Linux 上通常使用 ",[73,148094,102901],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148097,148099],{"id":148098},"_14-pip包管理器","1.4 pip包管理器",[19,148101,148102,148104],{},[73,148103,25880],{}," 用来安装第三方库。",[66,148106,148108],{"className":25871,"code":148107,"language":25873,"meta":71,"style":71},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[73,148109,148110,148119,148128,148136,148142],{"__ignoreMap":71},[76,148111,148112,148114,148116],{"class":78,"line":79},[76,148113,25880],{"class":86},[76,148115,25883],{"class":126},[76,148117,148118],{"class":126}," requests\n",[76,148120,148121,148123,148126],{"class":78,"line":94},[76,148122,25880],{"class":86},[76,148124,148125],{"class":126}," uninstall",[76,148127,148118],{"class":126},[76,148129,148130,148132,148134],{"class":78,"line":133},[76,148131,25880],{"class":86},[76,148133,119594],{"class":126},[76,148135,148118],{"class":126},[76,148137,148138,148140],{"class":78,"line":145},[76,148139,25880],{"class":86},[76,148141,120975],{"class":126},[76,148143,148144,148146],{"class":78,"line":152},[76,148145,25880],{"class":86},[76,148147,148148],{"class":126}," freeze\n",[19,148150,148151],{},"国内网络较慢时可以临时使用镜像：",[66,148153,148155],{"className":25871,"code":148154,"language":25873,"meta":71,"style":71},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,148156,148157],{"__ignoreMap":71},[76,148158,148159,148161,148163,148166,148168],{"class":78,"line":79},[76,148160,25880],{"class":86},[76,148162,25883],{"class":126},[76,148164,148165],{"class":126}," requests",[76,148167,28479],{"class":119},[76,148169,121748],{"class":126},[19,148171,148172],{},"常见第三方库：",[2404,148174,148175,148184],{},[2407,148176,148177],{},[2410,148178,148179,148182],{},[2413,148180,148181],{},"库",[2413,148183,104718],{},[2451,148185,148186,148194,148201,148209,148217,148225,148233],{},[2410,148187,148188,148191],{},[2456,148189,148190],{},"requests",[2456,148192,148193],{},"网络请求",[2410,148195,148196,148198],{},[2456,148197,102648],{},[2456,148199,148200],{},"数值计算",[2410,148202,148203,148206],{},[2456,148204,148205],{},"pandas",[2456,148207,148208],{},"表格数据处理",[2410,148210,148211,148214],{},[2456,148212,148213],{},"matplotlib",[2456,148215,148216],{},"绘图",[2410,148218,148219,148222],{},[2456,148220,148221],{},"pyecharts",[2456,148223,148224],{},"ECharts 图表",[2410,148226,148227,148230],{},[2456,148228,148229],{},"flask",[2456,148231,148232],{},"Web 后端",[2410,148234,148235,148238],{},[2456,148236,148237],{},"pytest",[2456,148239,148240],{},"自动化测试",[14,148242,148244],{"id":148243},"_15-虚拟环境","1.5 虚拟环境",[19,148246,148247,148248,148251],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[73,148249,148250],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148253,148254],{},"创建虚拟环境：",[66,148256,148258],{"className":25871,"code":148257,"language":25873,"meta":71,"style":71},"python -m venv .venv\n",[73,148259,148260],{"__ignoreMap":71},[76,148261,148262,148264,148266,148268],{"class":78,"line":79},[76,148263,70],{"class":86},[76,148265,102904],{"class":119},[76,148267,102907],{"class":126},[76,148269,102910],{"class":126},[19,148271,148272],{},"Windows 激活：",[66,148274,148276],{"className":25871,"code":148275,"language":25873,"meta":71,"style":71},".venv\\Scripts\\activate\n",[73,148277,148278],{"__ignoreMap":71},[76,148279,148280],{"class":78,"line":79},[76,148281,148275],{"class":86},[19,148283,148284],{},"macOS\u002FLinux 激活：",[66,148286,148288],{"className":25871,"code":148287,"language":25873,"meta":71,"style":71},"source .venv\u002Fbin\u002Factivate\n",[73,148289,148290],{"__ignoreMap":71},[76,148291,148292,148294],{"class":78,"line":79},[76,148293,102915],{"class":119},[76,148295,102918],{"class":126},[19,148297,148298],{},"退出虚拟环境：",[66,148300,148302],{"className":25871,"code":148301,"language":25873,"meta":71,"style":71},"deactivate\n",[73,148303,148304],{"__ignoreMap":71},[76,148305,148306],{"class":78,"line":79},[76,148307,148301],{"class":86},[19,148309,148310],{},"保存依赖：",[66,148312,148314],{"className":25871,"code":148313,"language":25873,"meta":71,"style":71},"pip freeze > requirements.txt\n",[73,148315,148316],{"__ignoreMap":71},[76,148317,148318,148320,148323,148325],{"class":78,"line":79},[76,148319,25880],{"class":86},[76,148321,148322],{"class":126}," freeze",[76,148324,28271],{"class":82},[76,148326,148327],{"class":126}," requirements.txt\n",[19,148329,148330],{},"安装依赖：",[66,148332,148334],{"className":25871,"code":148333,"language":25873,"meta":71,"style":71},"pip install -r requirements.txt\n",[73,148335,148336],{"__ignoreMap":71},[76,148337,148338,148340,148342,148344],{"class":78,"line":79},[76,148339,25880],{"class":86},[76,148341,25883],{"class":126},[76,148343,121659],{"class":119},[76,148345,148327],{"class":126},[14,148347,148349],{"id":148348},"_16-开发工具","1.6 开发工具",[889,148351,148353],{"id":148352},"_161-pycharm","1.6.1 PyCharm",[19,148355,148356],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148358,124082],{},[26,148360,148361,148364,148367,148373,148376],{},[29,148362,148363],{},"New Project：创建项目。",[29,148365,148366],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,148368,148369,148370,128003],{},"New Python File：创建 ",[73,148371,148372],{},".py",[29,148374,148375],{},"Run：运行当前文件。",[29,148377,148378],{},"Debug：断点调试。",[889,148380,148382],{"id":148381},"_162-vs-code","1.6.2 VS Code",[19,148384,148385],{},"VS Code 轻量，适合后续多语言开发。",[19,148387,148388],{},"建议安装插件：",[26,148390,148391,148394,148397],{},[29,148392,148393],{},"Python。",[29,148395,148396],{},"Pylance。",[29,148398,148399],{},"Jupyter。",[19,148401,148402],{},"选择解释器：",[66,148404,148407],{"className":148405,"code":148406,"language":7268,"meta":71},[7266],"Ctrl + Shift + P -> Python: Select Interpreter\n",[73,148408,148406],{"__ignoreMap":71},[14,148410,148412],{"id":148411},"_17-第一个python程序","1.7 第一个Python程序",[19,148414,148415,148416,26668],{},"创建文件 ",[73,148417,148418],{},"hello.py",[66,148420,148422],{"className":68,"code":148421,"language":70,"meta":71,"style":71},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[73,148423,148424,148435],{"__ignoreMap":71},[76,148425,148426,148428,148430,148433],{"class":78,"line":79},[76,148427,478],{"class":119},[76,148429,123],{"class":90},[76,148431,148432],{"class":126},"\"Hello World\"",[76,148434,130],{"class":90},[76,148436,148437,148439,148441,148444],{"class":78,"line":94},[76,148438,478],{"class":119},[76,148440,123],{"class":90},[76,148442,148443],{"class":126},"\"你好，Python\"",[76,148445,130],{"class":90},[19,148447,148448],{},"在终端运行：",[66,148450,148452],{"className":25871,"code":148451,"language":25873,"meta":71,"style":71},"python hello.py\n",[73,148453,148454],{"__ignoreMap":71},[76,148455,148456,148458],{"class":78,"line":79},[76,148457,70],{"class":86},[76,148459,148460],{"class":126}," hello.py\n",[19,148462,148463],{},"或：",[66,148465,148467],{"className":25871,"code":148466,"language":25873,"meta":71,"style":71},"python3 hello.py\n",[73,148468,148469],{"__ignoreMap":71},[76,148470,148471,148473],{"class":78,"line":79},[76,148472,102901],{"class":86},[76,148474,148460],{"class":126},[19,148476,148477],{},"输出：",[66,148479,148482],{"className":148480,"code":148481,"language":7268,"meta":71},[7266],"Hello World\n你好，Python\n",[73,148483,148481],{"__ignoreMap":71},[14,148485,148487],{"id":148486},"_18-print函数","1.8 print函数",[19,148489,148490,148493],{},[73,148491,148492],{},"print()"," 用来输出内容。",[66,148495,148497],{"className":68,"code":148496,"language":70,"meta":71,"style":71},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[73,148498,148499,148509,148519,148529],{"__ignoreMap":71},[76,148500,148501,148503,148505,148507],{"class":78,"line":79},[76,148502,478],{"class":119},[76,148504,123],{"class":90},[76,148506,127],{"class":126},[76,148508,130],{"class":90},[76,148510,148511,148513,148515,148517],{"class":78,"line":94},[76,148512,478],{"class":119},[76,148514,123],{"class":90},[76,148516,2575],{"class":119},[76,148518,130],{"class":90},[76,148520,148521,148523,148525,148527],{"class":78,"line":133},[76,148522,478],{"class":119},[76,148524,123],{"class":90},[76,148526,2319],{"class":119},[76,148528,130],{"class":90},[76,148530,148531,148533,148535,148538,148540,148542],{"class":78,"line":145},[76,148532,478],{"class":119},[76,148534,123],{"class":90},[76,148536,148537],{"class":126},"\"年龄:\"",[76,148539,405],{"class":90},[76,148541,1214],{"class":119},[76,148543,130],{"class":90},[19,148545,148546],{},"多个内容用逗号隔开，默认中间加空格：",[66,148548,148550],{"className":68,"code":148549,"language":70,"meta":71,"style":71},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[73,148551,148552,148561,148571],{"__ignoreMap":71},[76,148553,148554,148556,148558],{"class":78,"line":79},[76,148555,966],{"class":90},[76,148557,370],{"class":82},[76,148559,148560],{"class":126}," \"张三\"\n",[76,148562,148563,148566,148568],{"class":78,"line":94},[76,148564,148565],{"class":90},"age ",[76,148567,370],{"class":82},[76,148569,148570],{"class":119}," 18\n",[76,148572,148573,148575,148577,148580,148583,148585],{"class":78,"line":133},[76,148574,478],{"class":119},[76,148576,123],{"class":90},[76,148578,148579],{"class":126},"\"姓名:\"",[76,148581,148582],{"class":90},", name, ",[76,148584,148537],{"class":126},[76,148586,148587],{"class":90},", age)\n",[19,148589,148590],{},"修改分隔符：",[66,148592,148594],{"className":68,"code":148593,"language":70,"meta":71,"style":71},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[73,148595,148596],{"__ignoreMap":71},[76,148597,148598,148600,148602,148605,148607,148609,148611,148613,148615,148618,148620,148622],{"class":78,"line":79},[76,148599,478],{"class":119},[76,148601,123],{"class":90},[76,148603,148604],{"class":126},"\"2024\"",[76,148606,405],{"class":90},[76,148608,56347],{"class":126},[76,148610,405],{"class":90},[76,148612,56347],{"class":126},[76,148614,405],{"class":90},[76,148616,148617],{"class":7296},"sep",[76,148619,370],{"class":82},[76,148621,1116],{"class":126},[76,148623,130],{"class":90},[19,148625,148626],{},"修改结尾符：",[66,148628,148630],{"className":68,"code":148629,"language":70,"meta":71,"style":71},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[73,148631,148632,148650],{"__ignoreMap":71},[76,148633,148634,148636,148638,148640,148642,148644,148646,148648],{"class":78,"line":79},[76,148635,478],{"class":119},[76,148637,123],{"class":90},[76,148639,127],{"class":126},[76,148641,405],{"class":90},[76,148643,47835],{"class":7296},[76,148645,370],{"class":82},[76,148647,6441],{"class":126},[76,148649,130],{"class":90},[76,148651,148652,148654,148656,148658],{"class":78,"line":94},[76,148653,478],{"class":119},[76,148655,123],{"class":90},[76,148657,140],{"class":126},[76,148659,130],{"class":90},[14,148661,148663],{"id":148662},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148665,148666],{},"交互运行适合临时验证：",[66,148668,148670],{"className":68,"code":148669,"language":70,"meta":71,"style":71},">>> 10 * 3\n30\n",[73,148671,148672,148682],{"__ignoreMap":71},[76,148673,148674,148676,148678,148680],{"class":78,"line":79},[76,148675,147873],{"class":82},[76,148677,4134],{"class":119},[76,148679,1119],{"class":82},[76,148681,122056],{"class":119},[76,148683,148684],{"class":78,"line":94},[76,148685,148686],{"class":119},"30\n",[19,148688,148689],{},"脚本运行适合保存程序：",[66,148691,148693],{"className":68,"code":148692,"language":70,"meta":71,"style":71},"price = 8\ncount = 5\nprint(price * count)\n",[73,148694,148695,148705,148713],{"__ignoreMap":71},[76,148696,148697,148700,148702],{"class":78,"line":79},[76,148698,148699],{"class":90},"price ",[76,148701,370],{"class":82},[76,148703,148704],{"class":119}," 8\n",[76,148706,148707,148709,148711],{"class":78,"line":94},[76,148708,1022],{"class":90},[76,148710,370],{"class":82},[76,148712,56458],{"class":119},[76,148714,148715,148717,148720,148722],{"class":78,"line":133},[76,148716,478],{"class":119},[76,148718,148719],{"class":90},"(price ",[76,148721,2718],{"class":82},[76,148723,148724],{"class":90}," count)\n",[19,148726,148727],{},"实际学习中推荐：",[26,148729,148730,148733,148738],{},[29,148731,148732],{},"临时试一个语法，用交互模式。",[29,148734,148735,148736,128003],{},"写完整练习，用 ",[73,148737,148372],{},[29,148739,148740],{},"写项目，用独立目录和虚拟环境。",[14,148742,148744],{"id":148743},"_110-常见错误","1.10 常见错误",[889,148746,148748],{"id":148747},"_1101-命令找不到","1.10.1 命令找不到",[66,148750,148753],{"className":148751,"code":148752,"language":7268,"meta":71},[7266],"python: command not found\n",[73,148754,148752],{"__ignoreMap":71},[19,148756,148757],{},"原因：",[26,148759,148760,148763,148766],{},[29,148761,148762],{},"没安装 Python。",[29,148764,148765],{},"PATH 没配置。",[29,148767,148768,148769,490],{},"Linux\u002FmacOS 应该使用 ",[73,148770,102901],{},[889,148772,148774],{"id":148773},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148776,148777],{},"不要把文件命名为：",[66,148779,148782],{"className":148780,"code":148781,"language":7268,"meta":71},[7266],"random.py\njson.py\ntime.py\nrequests.py\n",[73,148783,148781],{"__ignoreMap":71},[19,148785,148786],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[889,148788,148790],{"id":148789},"_1103-中文乱码","1.10.3 中文乱码",[19,148792,148793],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148795,148796],{},"如果读写文件出现乱码，要明确指定编码：",[66,148798,148800],{"className":68,"code":148799,"language":70,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[73,148801,148802,148836],{"__ignoreMap":71},[76,148803,148804,148806,148809,148811,148814,148816,148819,148821,148824,148826,148829,148831,148833],{"class":78,"line":79},[76,148805,109855],{"class":82},[76,148807,148808],{"class":119}," open",[76,148810,123],{"class":90},[76,148812,148813],{"class":126},"\"data.txt\"",[76,148815,405],{"class":90},[76,148817,148818],{"class":126},"\"r\"",[76,148820,405],{"class":90},[76,148822,148823],{"class":7296},"encoding",[76,148825,370],{"class":82},[76,148827,148828],{"class":126},"\"utf-8\"",[76,148830,15767],{"class":90},[76,148832,33426],{"class":82},[76,148834,148835],{"class":90}," f:\n",[76,148837,148838,148841,148843],{"class":78,"line":94},[76,148839,148840],{"class":90},"    content ",[76,148842,370],{"class":82},[76,148844,148845],{"class":90}," f.read()\n",[14,148847,148849],{"id":148848},"_111-本章练习","1.11 本章练习",[26,148851,148852,148855,148861],{},[29,148853,148854],{},"安装 Python，并在终端输出版本号。",[29,148856,148857,148858,148860],{},"新建 ",[73,148859,148418],{},"，输出自己的姓名、年龄、学习目标。",[29,148862,106388,148863,148865],{},[73,148864,148492],{}," 输出下面格式：",[66,148867,148870],{"className":148868,"code":148869,"language":7268,"meta":71},[7266],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[73,148871,148869],{"__ignoreMap":71},[26,148873,148874],{"start":145},[29,148875,106388,148876,148878],{},[73,148877,148617],{}," 输出日期：",[66,148880,148883],{"className":148881,"code":148882,"language":7268,"meta":71},[7266],"2024-10-10\n",[73,148884,148882],{"__ignoreMap":71},[26,148886,148887],{"start":152},[29,148888,106388,148889,148891,148892,148894],{},[73,148890,47835],{}," 让两次 ",[73,148893,148492],{}," 输出在同一行。",[2178,148896,148897],{},"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":71,"searchDepth":94,"depth":94,"links":148899},[148900,148901,148902,148907,148908,148909,148913,148914,148915,148916,148921],{"id":147785,"depth":94,"text":147786},{"id":147829,"depth":94,"text":147830},{"id":147930,"depth":94,"text":147931,"children":148903},[148904,148905,148906],{"id":147934,"depth":133,"text":147935},{"id":147989,"depth":133,"text":147990},{"id":148025,"depth":133,"text":148026},{"id":148098,"depth":94,"text":148099},{"id":148243,"depth":94,"text":148244},{"id":148348,"depth":94,"text":148349,"children":148910},[148911,148912],{"id":148352,"depth":133,"text":148353},{"id":148381,"depth":133,"text":148382},{"id":148411,"depth":94,"text":148412},{"id":148486,"depth":94,"text":148487},{"id":148662,"depth":94,"text":148663},{"id":148743,"depth":94,"text":148744,"children":148917},[148918,148919,148920],{"id":148747,"depth":133,"text":148748},{"id":148773,"depth":133,"text":148774},{"id":148789,"depth":133,"text":148790},{"id":148848,"depth":94,"text":148849},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147777,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148928,"title":148929,"body":148930,"description":2201,"extension":2202,"meta":151334,"navigation":148,"path":151335,"seo":151336,"stem":151337,"__hash__":151338},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148931,"toc":151319},[148932,148935,148939,148942,148945,148962,148965,149007,149010,149014,149017,149020,149057,149060,149094,149097,149189,149193,149207,149210,149237,149240,149244,149347,149354,149357,149374,149378,149385,149574,149577,149650,149654,149657,149741,149744,149776,149780,149984,149987,149991,149997,150099,150102,150358,150362,150365,150368,150382,150384,150570,150574,150936,150942,150946,150949,151073,151076,151255,151258,151262,151295,151299,151316],[10,148933,148929],{"id":148934},"_10-json与pyecharts折线图",[14,148936,148938],{"id":148937},"_101-数据可视化","10.1 数据可视化",[19,148940,148941],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148943,148944],{},"常见图表：",[26,148946,148947,148950,148953,148956,148959],{},[29,148948,148949],{},"折线图：看趋势。",[29,148951,148952],{},"柱状图：看分类对比。",[29,148954,148955],{},"饼图：看占比。",[29,148957,148958],{},"地图：看地域分布。",[29,148960,148961],{},"散点图：看两个变量之间的关系。",[19,148963,148964],{},"Python 可视化常用库：",[2404,148966,148967,148975],{},[2407,148968,148969],{},[2410,148970,148971,148973],{},[2413,148972,148181],{},[2413,148974,25789],{},[2451,148976,148977,148984,148992,148999],{},[2410,148978,148979,148981],{},[2456,148980,148213],{},[2456,148982,148983],{},"基础、经典、可定制",[2410,148985,148986,148989],{},[2456,148987,148988],{},"seaborn",[2456,148990,148991],{},"统计图表更美观",[2410,148993,148994,148996],{},[2456,148995,148221],{},[2456,148997,148998],{},"生成交互式网页图表",[2410,149000,149001,149004],{},[2456,149002,149003],{},"plotly",[2456,149005,149006],{},"交互图表能力强",[19,149008,149009],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149011,149013],{"id":149012},"_102-json回顾","10.2 JSON回顾",[19,149015,149016],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149018,149019],{},"Python 字典：",[66,149021,149023],{"className":68,"code":149022,"language":70,"meta":71,"style":71},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[73,149024,149025,149033,149044,149053],{"__ignoreMap":71},[76,149026,149027,149029,149031],{"class":78,"line":79},[76,149028,103680],{"class":90},[76,149030,370],{"class":82},[76,149032,17623],{"class":90},[76,149034,149035,149038,149040,149042],{"class":78,"line":94},[76,149036,149037],{"class":126},"    \"name\"",[76,149039,53469],{"class":90},[76,149041,71297],{"class":126},[76,149043,33509],{"class":90},[76,149045,149046,149049,149051],{"class":78,"line":133},[76,149047,149048],{"class":126},"    \"value\"",[76,149050,53469],{"class":90},[76,149052,99480],{"class":119},[76,149054,149055],{"class":78,"line":145},[76,149056,3685],{"class":90},[19,149058,149059],{},"JSON 字符串：",[66,149061,149064],{"className":149062,"code":149063,"language":147812,"meta":71,"style":71},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[73,149065,149066,149070,149081,149090],{"__ignoreMap":71},[76,149067,149068],{"class":78,"line":79},[76,149069,3666],{"class":90},[76,149071,149072,149075,149077,149079],{"class":78,"line":94},[76,149073,149074],{"class":119},"  \"name\"",[76,149076,53469],{"class":90},[76,149078,71297],{"class":126},[76,149080,33509],{"class":90},[76,149082,149083,149086,149088],{"class":78,"line":133},[76,149084,149085],{"class":119},"  \"value\"",[76,149087,53469],{"class":90},[76,149089,99480],{"class":119},[76,149091,149092],{"class":78,"line":145},[76,149093,3685],{"class":90},[19,149095,149096],{},"Python 与 JSON 的转换：",[66,149098,149100],{"className":68,"code":149099,"language":70,"meta":71,"style":71},"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",[73,149101,149102,149109,149113,149138,149142,149161,149168,149172,149182],{"__ignoreMap":71},[76,149103,149104,149106],{"class":78,"line":79},[76,149105,32438],{"class":82},[76,149107,149108],{"class":90}," json\n",[76,149110,149111],{"class":78,"line":94},[76,149112,149],{"emptyLinePlaceholder":148},[76,149114,149115,149117,149119,149121,149123,149125,149127,149129,149132,149134,149136],{"class":78,"line":133},[76,149116,103680],{"class":90},[76,149118,370],{"class":82},[76,149120,6530],{"class":90},[76,149122,64707],{"class":126},[76,149124,53469],{"class":90},[76,149126,71297],{"class":126},[76,149128,405],{"class":90},[76,149130,149131],{"class":126},"\"value\"",[76,149133,53469],{"class":90},[76,149135,2575],{"class":119},[76,149137,3685],{"class":90},[76,149139,149140],{"class":78,"line":145},[76,149141,149],{"emptyLinePlaceholder":148},[76,149143,149144,149147,149149,149152,149155,149157,149159],{"class":78,"line":152},[76,149145,149146],{"class":90},"json_text ",[76,149148,370],{"class":82},[76,149150,149151],{"class":90}," json.dumps(data, ",[76,149153,149154],{"class":7296},"ensure_ascii",[76,149156,370],{"class":82},[76,149158,36025],{"class":119},[76,149160,130],{"class":90},[76,149162,149163,149165],{"class":78,"line":157},[76,149164,478],{"class":119},[76,149166,149167],{"class":90},"(json_text)\n",[76,149169,149170],{"class":78,"line":246},[76,149171,149],{"emptyLinePlaceholder":148},[76,149173,149174,149177,149179],{"class":78,"line":251},[76,149175,149176],{"class":90},"new_data ",[76,149178,370],{"class":82},[76,149180,149181],{"class":90}," json.loads(json_text)\n",[76,149183,149184,149186],{"class":78,"line":257},[76,149185,478],{"class":119},[76,149187,149188],{"class":90},"(new_data)\n",[14,149190,149192],{"id":149191},"_103-安装pyecharts","10.3 安装pyecharts",[66,149194,149196],{"className":25871,"code":149195,"language":25873,"meta":71,"style":71},"pip install pyecharts\n",[73,149197,149198],{"__ignoreMap":71},[76,149199,149200,149202,149204],{"class":78,"line":79},[76,149201,25880],{"class":86},[76,149203,25883],{"class":126},[76,149205,149206],{"class":126}," pyecharts\n",[19,149208,149209],{},"验证：",[66,149211,149213],{"className":68,"code":149212,"language":70,"meta":71,"style":71},"import pyecharts\n\nprint(pyecharts.__version__)\n",[73,149214,149215,149221,149225],{"__ignoreMap":71},[76,149216,149217,149219],{"class":78,"line":79},[76,149218,32438],{"class":82},[76,149220,149206],{"class":90},[76,149222,149223],{"class":78,"line":94},[76,149224,149],{"emptyLinePlaceholder":148},[76,149226,149227,149229,149232,149235],{"class":78,"line":133},[76,149228,478],{"class":119},[76,149230,149231],{"class":90},"(pyecharts.",[76,149233,149234],{"class":119},"__version__",[76,149236,130],{"class":90},[19,149238,149239],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149241,149243],{"id":149242},"_104-第一个折线图","10.4 第一个折线图",[66,149245,149247],{"className":68,"code":149246,"language":70,"meta":71,"style":71},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[73,149248,149249,149261,149265,149275,149305,149337],{"__ignoreMap":71},[76,149250,149251,149253,149256,149258],{"class":78,"line":79},[76,149252,32781],{"class":82},[76,149254,149255],{"class":90}," pyecharts.charts ",[76,149257,32438],{"class":82},[76,149259,149260],{"class":90}," Line\n",[76,149262,149263],{"class":78,"line":94},[76,149264,149],{"emptyLinePlaceholder":148},[76,149266,149267,149270,149272],{"class":78,"line":133},[76,149268,149269],{"class":90},"line ",[76,149271,370],{"class":82},[76,149273,149274],{"class":90}," Line()\n",[76,149276,149277,149280,149283,149285,149288,149290,149293,149295,149298,149300,149303],{"class":78,"line":145},[76,149278,149279],{"class":90},"line.add_xaxis([",[76,149281,149282],{"class":126},"\"周一\"",[76,149284,405],{"class":90},[76,149286,149287],{"class":126},"\"周二\"",[76,149289,405],{"class":90},[76,149291,149292],{"class":126},"\"周三\"",[76,149294,405],{"class":90},[76,149296,149297],{"class":126},"\"周四\"",[76,149299,405],{"class":90},[76,149301,149302],{"class":126},"\"周五\"",[76,149304,6739],{"class":90},[76,149306,149307,149310,149313,149315,149317,149319,149321,149323,149325,149327,149330,149332,149335],{"class":78,"line":152},[76,149308,149309],{"class":90},"line.add_yaxis(",[76,149311,149312],{"class":126},"\"销售额\"",[76,149314,79544],{"class":90},[76,149316,2575],{"class":119},[76,149318,405],{"class":90},[76,149320,3075],{"class":119},[76,149322,405],{"class":90},[76,149324,3120],{"class":119},[76,149326,405],{"class":90},[76,149328,149329],{"class":119},"150",[76,149331,405],{"class":90},[76,149333,149334],{"class":119},"180",[76,149336,6739],{"class":90},[76,149338,149339,149342,149345],{"class":78,"line":157},[76,149340,149341],{"class":90},"line.render(",[76,149343,149344],{"class":126},"\"line.html\"",[76,149346,130],{"class":90},[19,149348,149349,149350,149353],{},"运行后会生成 ",[73,149351,149352],{},"line.html","，用浏览器打开即可看到图表。",[19,149355,149356],{},"核心步骤：",[26,149358,149359,149362,149365,149368,149371],{},[29,149360,149361],{},"导入图表类。",[29,149363,149364],{},"创建图表对象。",[29,149366,149367],{},"添加 x 轴数据。",[29,149369,149370],{},"添加 y 轴数据。",[29,149372,149373],{},"渲染为 HTML。",[14,149375,149377],{"id":149376},"_105-全局配置","10.5 全局配置",[19,149379,149380,149381,149384],{},"常用配置在 ",[73,149382,149383],{},"pyecharts.options"," 中。",[66,149386,149388],{"className":68,"code":149387,"language":70,"meta":71,"style":71},"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",[73,149389,149390,149407,149417,149421,149429,149453,149481,149486,149505,149524,149542,149562,149566],{"__ignoreMap":71},[76,149391,149392,149394,149397,149399,149402,149404],{"class":78,"line":79},[76,149393,32781],{"class":82},[76,149395,149396],{"class":90}," pyecharts ",[76,149398,32438],{"class":82},[76,149400,149401],{"class":90}," options ",[76,149403,33426],{"class":82},[76,149405,149406],{"class":90}," opts\n",[76,149408,149409,149411,149413,149415],{"class":78,"line":94},[76,149410,32781],{"class":82},[76,149412,149255],{"class":90},[76,149414,32438],{"class":82},[76,149416,149260],{"class":90},[76,149418,149419],{"class":78,"line":133},[76,149420,149],{"emptyLinePlaceholder":148},[76,149422,149423,149425,149427],{"class":78,"line":145},[76,149424,149269],{"class":90},[76,149426,370],{"class":82},[76,149428,149274],{"class":90},[76,149430,149431,149433,149435,149437,149439,149441,149443,149445,149447,149449,149451],{"class":78,"line":152},[76,149432,149279],{"class":90},[76,149434,149282],{"class":126},[76,149436,405],{"class":90},[76,149438,149287],{"class":126},[76,149440,405],{"class":90},[76,149442,149292],{"class":126},[76,149444,405],{"class":90},[76,149446,149297],{"class":126},[76,149448,405],{"class":90},[76,149450,149302],{"class":126},[76,149452,6739],{"class":90},[76,149454,149455,149457,149459,149461,149463,149465,149467,149469,149471,149473,149475,149477,149479],{"class":78,"line":157},[76,149456,149309],{"class":90},[76,149458,149312],{"class":126},[76,149460,79544],{"class":90},[76,149462,2575],{"class":119},[76,149464,405],{"class":90},[76,149466,3075],{"class":119},[76,149468,405],{"class":90},[76,149470,3120],{"class":119},[76,149472,405],{"class":90},[76,149474,149329],{"class":119},[76,149476,405],{"class":90},[76,149478,149334],{"class":119},[76,149480,6739],{"class":90},[76,149482,149483],{"class":78,"line":246},[76,149484,149485],{"class":90},"line.set_global_opts(\n",[76,149487,149488,149491,149493,149496,149498,149500,149503],{"class":78,"line":251},[76,149489,149490],{"class":7296},"    title_opts",[76,149492,370],{"class":82},[76,149494,149495],{"class":90},"opts.TitleOpts(",[76,149497,53439],{"class":7296},[76,149499,370],{"class":82},[76,149501,149502],{"class":126},"\"一周销售额\"",[76,149504,40085],{"class":90},[76,149506,149507,149510,149512,149515,149517,149519,149522],{"class":78,"line":257},[76,149508,149509],{"class":7296},"    xaxis_opts",[76,149511,370],{"class":82},[76,149513,149514],{"class":90},"opts.AxisOpts(",[76,149516,301],{"class":7296},[76,149518,370],{"class":82},[76,149520,149521],{"class":126},"\"日期\"",[76,149523,40085],{"class":90},[76,149525,149526,149529,149531,149533,149535,149537,149540],{"class":78,"line":641},[76,149527,149528],{"class":7296},"    yaxis_opts",[76,149530,370],{"class":82},[76,149532,149514],{"class":90},[76,149534,301],{"class":7296},[76,149536,370],{"class":82},[76,149538,149539],{"class":126},"\"金额\"",[76,149541,40085],{"class":90},[76,149543,149544,149547,149549,149552,149555,149557,149560],{"class":78,"line":646},[76,149545,149546],{"class":7296},"    tooltip_opts",[76,149548,370],{"class":82},[76,149550,149551],{"class":90},"opts.TooltipOpts(",[76,149553,149554],{"class":7296},"trigger",[76,149556,370],{"class":82},[76,149558,149559],{"class":126},"\"axis\"",[76,149561,40085],{"class":90},[76,149563,149564],{"class":78,"line":659},[76,149565,130],{"class":90},[76,149567,149568,149570,149572],{"class":78,"line":1608},[76,149569,149341],{"class":90},[76,149571,149344],{"class":126},[76,149573,130],{"class":90},[19,149575,149576],{},"常见全局配置：",[2404,149578,149579,149588],{},[2407,149580,149581],{},[2410,149582,149583,149586],{},[2413,149584,149585],{},"配置",[2413,149587,104718],{},[2451,149589,149590,149600,149610,149620,149630,149640],{},[2410,149591,149592,149597],{},[2456,149593,149594],{},[73,149595,149596],{},"TitleOpts",[2456,149598,149599],{},"标题",[2410,149601,149602,149607],{},[2456,149603,149604],{},[73,149605,149606],{},"LegendOpts",[2456,149608,149609],{},"图例",[2410,149611,149612,149617],{},[2456,149613,149614],{},[73,149615,149616],{},"TooltipOpts",[2456,149618,149619],{},"提示框",[2410,149621,149622,149627],{},[2456,149623,149624],{},[73,149625,149626],{},"AxisOpts",[2456,149628,149629],{},"坐标轴",[2410,149631,149632,149637],{},[2456,149633,149634],{},[73,149635,149636],{},"VisualMapOpts",[2456,149638,149639],{},"视觉映射",[2410,149641,149642,149647],{},[2456,149643,149644],{},[73,149645,149646],{},"DataZoomOpts",[2456,149648,149649],{},"区域缩放",[14,149651,149653],{"id":149652},"_106-系列配置","10.6 系列配置",[19,149655,149656],{},"系列配置作用于某一组数据。",[66,149658,149660],{"className":68,"code":149659,"language":70,"meta":71,"style":71},"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",[73,149661,149662,149667,149678,149707,149718,149737],{"__ignoreMap":71},[76,149663,149664],{"class":78,"line":79},[76,149665,149666],{"class":90},"line.add_yaxis(\n",[76,149668,149669,149672,149674,149676],{"class":78,"line":94},[76,149670,149671],{"class":7296},"    series_name",[76,149673,370],{"class":82},[76,149675,149312],{"class":126},[76,149677,33509],{"class":90},[76,149679,149680,149683,149685,149687,149689,149691,149693,149695,149697,149699,149701,149703,149705],{"class":78,"line":133},[76,149681,149682],{"class":7296},"    y_axis",[76,149684,370],{"class":82},[76,149686,3148],{"class":90},[76,149688,2575],{"class":119},[76,149690,405],{"class":90},[76,149692,3075],{"class":119},[76,149694,405],{"class":90},[76,149696,3120],{"class":119},[76,149698,405],{"class":90},[76,149700,149329],{"class":119},[76,149702,405],{"class":90},[76,149704,149334],{"class":119},[76,149706,89860],{"class":90},[76,149708,149709,149712,149714,149716],{"class":78,"line":145},[76,149710,149711],{"class":7296},"    is_smooth",[76,149713,370],{"class":82},[76,149715,33519],{"class":119},[76,149717,33509],{"class":90},[76,149719,149720,149723,149725,149728,149731,149733,149735],{"class":78,"line":152},[76,149721,149722],{"class":7296},"    label_opts",[76,149724,370],{"class":82},[76,149726,149727],{"class":90},"opts.LabelOpts(",[76,149729,149730],{"class":7296},"is_show",[76,149732,370],{"class":82},[76,149734,33519],{"class":119},[76,149736,40085],{"class":90},[76,149738,149739],{"class":78,"line":157},[76,149740,130],{"class":90},[19,149742,149743],{},"常用参数：",[26,149745,149746,149752,149758,149764,149770],{},[29,149747,149748,149751],{},[73,149749,149750],{},"series_name","：系列名称。",[29,149753,149754,149757],{},[73,149755,149756],{},"y_axis","：y 轴数据。",[29,149759,149760,149763],{},[73,149761,149762],{},"is_smooth","：是否平滑曲线。",[29,149765,149766,149769],{},[73,149767,149768],{},"label_opts","：标签配置。",[29,149771,149772,149775],{},[73,149773,149774],{},"symbol_size","：标记点大小。",[14,149777,149779],{"id":149778},"_107-多条折线","10.7 多条折线",[66,149781,149783],{"className":68,"code":149782,"language":70,"meta":71,"style":71},"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",[73,149784,149785,149799,149809,149813,149842,149846,149854,149859,149897,149934,149938,149955,149971,149975],{"__ignoreMap":71},[76,149786,149787,149789,149791,149793,149795,149797],{"class":78,"line":79},[76,149788,32781],{"class":82},[76,149790,149396],{"class":90},[76,149792,32438],{"class":82},[76,149794,149401],{"class":90},[76,149796,33426],{"class":82},[76,149798,149406],{"class":90},[76,149800,149801,149803,149805,149807],{"class":78,"line":94},[76,149802,32781],{"class":82},[76,149804,149255],{"class":90},[76,149806,32438],{"class":82},[76,149808,149260],{"class":90},[76,149810,149811],{"class":78,"line":133},[76,149812,149],{"emptyLinePlaceholder":148},[76,149814,149815,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836,149838,149840],{"class":78,"line":145},[76,149816,149817],{"class":90},"dates ",[76,149819,370],{"class":82},[76,149821,54258],{"class":90},[76,149823,149282],{"class":126},[76,149825,405],{"class":90},[76,149827,149287],{"class":126},[76,149829,405],{"class":90},[76,149831,149292],{"class":126},[76,149833,405],{"class":90},[76,149835,149297],{"class":126},[76,149837,405],{"class":90},[76,149839,149302],{"class":126},[76,149841,35284],{"class":90},[76,149843,149844],{"class":78,"line":152},[76,149845,149],{"emptyLinePlaceholder":148},[76,149847,149848,149850,149852],{"class":78,"line":157},[76,149849,149269],{"class":90},[76,149851,370],{"class":82},[76,149853,149274],{"class":90},[76,149855,149856],{"class":78,"line":246},[76,149857,149858],{"class":90},"line.add_xaxis(dates)\n",[76,149860,149861,149863,149866,149868,149870,149872,149875,149877,149879,149881,149883,149885,149887,149889,149891,149893,149895],{"class":78,"line":251},[76,149862,149309],{"class":90},[76,149864,149865],{"class":126},"\"线上销售\"",[76,149867,79544],{"class":90},[76,149869,2575],{"class":119},[76,149871,405],{"class":90},[76,149873,149874],{"class":119},"130",[76,149876,405],{"class":90},[76,149878,3075],{"class":119},[76,149880,405],{"class":90},[76,149882,23097],{"class":119},[76,149884,405],{"class":90},[76,149886,2133],{"class":119},[76,149888,114222],{"class":90},[76,149890,149762],{"class":7296},[76,149892,370],{"class":82},[76,149894,33519],{"class":119},[76,149896,130],{"class":90},[76,149898,149899,149901,149904,149906,149908,149910,149912,149914,149916,149918,149920,149922,149924,149926,149928,149930,149932],{"class":78,"line":257},[76,149900,149309],{"class":90},[76,149902,149903],{"class":126},"\"线下销售\"",[76,149905,79544],{"class":90},[76,149907,2872],{"class":119},[76,149909,405],{"class":90},[76,149911,3120],{"class":119},[76,149913,405],{"class":90},[76,149915,2575],{"class":119},[76,149917,405],{"class":90},[76,149919,3075],{"class":119},[76,149921,405],{"class":90},[76,149923,149329],{"class":119},[76,149925,114222],{"class":90},[76,149927,149762],{"class":7296},[76,149929,370],{"class":82},[76,149931,33519],{"class":119},[76,149933,130],{"class":90},[76,149935,149936],{"class":78,"line":641},[76,149937,149485],{"class":90},[76,149939,149940,149942,149944,149946,149948,149950,149953],{"class":78,"line":646},[76,149941,149490],{"class":7296},[76,149943,370],{"class":82},[76,149945,149495],{"class":90},[76,149947,53439],{"class":7296},[76,149949,370],{"class":82},[76,149951,149952],{"class":126},"\"线上线下销售趋势\"",[76,149954,40085],{"class":90},[76,149956,149957,149959,149961,149963,149965,149967,149969],{"class":78,"line":659},[76,149958,149546],{"class":7296},[76,149960,370],{"class":82},[76,149962,149551],{"class":90},[76,149964,149554],{"class":7296},[76,149966,370],{"class":82},[76,149968,149559],{"class":126},[76,149970,40085],{"class":90},[76,149972,149973],{"class":78,"line":1608},[76,149974,130],{"class":90},[76,149976,149977,149979,149982],{"class":78,"line":1632},[76,149978,149341],{"class":90},[76,149980,149981],{"class":126},"\"sales.html\"",[76,149983,130],{"class":90},[19,149985,149986],{},"多条折线适合比较不同指标或不同地区。",[14,149988,149990],{"id":149989},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149992,149993,149994,26668],{},"假设 ",[73,149995,149996],{},"sales.json",[66,149998,150000],{"className":149062,"code":149999,"language":147812,"meta":71,"style":71},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[73,150001,150002,150007,150039,150067,150095],{"__ignoreMap":71},[76,150003,150004],{"class":78,"line":79},[76,150005,150006],{"class":90},"[\n",[76,150008,150009,150012,150015,150017,150019,150021,150024,150026,150028,150030,150033,150035,150037],{"class":78,"line":94},[76,150010,150011],{"class":90},"  {",[76,150013,150014],{"class":119},"\"date\"",[76,150016,53469],{"class":90},[76,150018,149282],{"class":126},[76,150020,405],{"class":90},[76,150022,150023],{"class":119},"\"online\"",[76,150025,53469],{"class":90},[76,150027,2575],{"class":119},[76,150029,405],{"class":90},[76,150031,150032],{"class":119},"\"offline\"",[76,150034,53469],{"class":90},[76,150036,2872],{"class":119},[76,150038,7012],{"class":90},[76,150040,150041,150043,150045,150047,150049,150051,150053,150055,150057,150059,150061,150063,150065],{"class":78,"line":133},[76,150042,150011],{"class":90},[76,150044,150014],{"class":119},[76,150046,53469],{"class":90},[76,150048,149287],{"class":126},[76,150050,405],{"class":90},[76,150052,150023],{"class":119},[76,150054,53469],{"class":90},[76,150056,149874],{"class":119},[76,150058,405],{"class":90},[76,150060,150032],{"class":119},[76,150062,53469],{"class":90},[76,150064,3120],{"class":119},[76,150066,7012],{"class":90},[76,150068,150069,150071,150073,150075,150077,150079,150081,150083,150085,150087,150089,150091,150093],{"class":78,"line":145},[76,150070,150011],{"class":90},[76,150072,150014],{"class":119},[76,150074,53469],{"class":90},[76,150076,149292],{"class":126},[76,150078,405],{"class":90},[76,150080,150023],{"class":119},[76,150082,53469],{"class":90},[76,150084,3075],{"class":119},[76,150086,405],{"class":90},[76,150088,150032],{"class":119},[76,150090,53469],{"class":90},[76,150092,2575],{"class":119},[76,150094,3685],{"class":90},[76,150096,150097],{"class":78,"line":152},[76,150098,35284],{"class":90},[19,150100,150101],{},"读取并绘图：",[66,150103,150105],{"className":68,"code":150104,"language":70,"meta":71,"style":71},"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",[73,150106,150107,150113,150127,150137,150141,150173,150186,150190,150198,150207,150216,150220,150232,150241,150250,150259,150263,150271,150275,150292,150309,150313,150330,150346,150350],{"__ignoreMap":71},[76,150108,150109,150111],{"class":78,"line":79},[76,150110,32438],{"class":82},[76,150112,149108],{"class":90},[76,150114,150115,150117,150119,150121,150123,150125],{"class":78,"line":94},[76,150116,32781],{"class":82},[76,150118,149396],{"class":90},[76,150120,32438],{"class":82},[76,150122,149401],{"class":90},[76,150124,33426],{"class":82},[76,150126,149406],{"class":90},[76,150128,150129,150131,150133,150135],{"class":78,"line":133},[76,150130,32781],{"class":82},[76,150132,149255],{"class":90},[76,150134,32438],{"class":82},[76,150136,149260],{"class":90},[76,150138,150139],{"class":78,"line":145},[76,150140,149],{"emptyLinePlaceholder":148},[76,150142,150143,150145,150147,150149,150152,150154,150156,150158,150160,150162,150164,150166,150168,150171],{"class":78,"line":152},[76,150144,109855],{"class":82},[76,150146,148808],{"class":119},[76,150148,123],{"class":90},[76,150150,150151],{"class":126},"\"sales.json\"",[76,150153,405],{"class":90},[76,150155,148818],{"class":126},[76,150157,405],{"class":90},[76,150159,148823],{"class":7296},[76,150161,370],{"class":82},[76,150163,148828],{"class":126},[76,150165,15767],{"class":90},[76,150167,33426],{"class":82},[76,150169,150170],{"class":7296}," file",[76,150172,590],{"class":90},[76,150174,150175,150177,150179,150182,150184],{"class":78,"line":157},[76,150176,103443],{"class":90},[76,150178,370],{"class":82},[76,150180,150181],{"class":90}," json.load(",[76,150183,47389],{"class":7296},[76,150185,130],{"class":90},[76,150187,150188],{"class":78,"line":246},[76,150189,149],{"emptyLinePlaceholder":148},[76,150191,150192,150194,150196],{"class":78,"line":251},[76,150193,149817],{"class":90},[76,150195,370],{"class":82},[76,150197,53870],{"class":90},[76,150199,150200,150203,150205],{"class":78,"line":257},[76,150201,150202],{"class":90},"online_sales ",[76,150204,370],{"class":82},[76,150206,53870],{"class":90},[76,150208,150209,150212,150214],{"class":78,"line":641},[76,150210,150211],{"class":90},"offline_sales ",[76,150213,370],{"class":82},[76,150215,53870],{"class":90},[76,150217,150218],{"class":78,"line":646},[76,150219,149],{"emptyLinePlaceholder":148},[76,150221,150222,150224,150227,150229],{"class":78,"line":659},[76,150223,5112],{"class":82},[76,150225,150226],{"class":90}," item ",[76,150228,1475],{"class":82},[76,150230,150231],{"class":90}," data:\n",[76,150233,150234,150237,150239],{"class":78,"line":1608},[76,150235,150236],{"class":90},"    dates.append(item[",[76,150238,150014],{"class":126},[76,150240,6739],{"class":90},[76,150242,150243,150246,150248],{"class":78,"line":1632},[76,150244,150245],{"class":90},"    online_sales.append(item[",[76,150247,150023],{"class":126},[76,150249,6739],{"class":90},[76,150251,150252,150255,150257],{"class":78,"line":1637},[76,150253,150254],{"class":90},"    offline_sales.append(item[",[76,150256,150032],{"class":126},[76,150258,6739],{"class":90},[76,150260,150261],{"class":78,"line":1642},[76,150262,149],{"emptyLinePlaceholder":148},[76,150264,150265,150267,150269],{"class":78,"line":1652},[76,150266,149269],{"class":90},[76,150268,370],{"class":82},[76,150270,149274],{"class":90},[76,150272,150273],{"class":78,"line":1660},[76,150274,149858],{"class":90},[76,150276,150277,150279,150281,150284,150286,150288,150290],{"class":78,"line":1683},[76,150278,149309],{"class":90},[76,150280,149865],{"class":126},[76,150282,150283],{"class":90},", online_sales, ",[76,150285,149762],{"class":7296},[76,150287,370],{"class":82},[76,150289,33519],{"class":119},[76,150291,130],{"class":90},[76,150293,150294,150296,150298,150301,150303,150305,150307],{"class":78,"line":1698},[76,150295,149309],{"class":90},[76,150297,149903],{"class":126},[76,150299,150300],{"class":90},", offline_sales, ",[76,150302,149762],{"class":7296},[76,150304,370],{"class":82},[76,150306,33519],{"class":119},[76,150308,130],{"class":90},[76,150310,150311],{"class":78,"line":1711},[76,150312,149485],{"class":90},[76,150314,150315,150317,150319,150321,150323,150325,150328],{"class":78,"line":1717},[76,150316,149490],{"class":7296},[76,150318,370],{"class":82},[76,150320,149495],{"class":90},[76,150322,53439],{"class":7296},[76,150324,370],{"class":82},[76,150326,150327],{"class":126},"\"销售趋势\"",[76,150329,40085],{"class":90},[76,150331,150332,150334,150336,150338,150340,150342,150344],{"class":78,"line":1728},[76,150333,149546],{"class":7296},[76,150335,370],{"class":82},[76,150337,149551],{"class":90},[76,150339,149554],{"class":7296},[76,150341,370],{"class":82},[76,150343,149559],{"class":126},[76,150345,40085],{"class":90},[76,150347,150348],{"class":78,"line":1740},[76,150349,130],{"class":90},[76,150351,150352,150354,150356],{"class":78,"line":1746},[76,150353,149341],{"class":90},[76,150355,149981],{"class":126},[76,150357,130],{"class":90},[14,150359,150361],{"id":150360},"_109-数据清洗","10.9 数据清洗",[19,150363,150364],{},"真实数据经常不整齐，需要清洗。",[19,150366,150367],{},"常见问题：",[26,150369,150370,150373,150376,150379],{},[29,150371,150372],{},"数字是字符串。",[29,150374,150375],{},"字段缺失。",[29,150377,150378],{},"空值。",[29,150380,150381],{},"日期格式不统一。",[19,150383,100],{},[66,150385,150387],{"className":68,"code":150386,"language":70,"meta":71,"style":71},"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",[73,150388,150389,150398,150421,150441,150462,150466,150470,150478,150487,150491,150502,150516,150525,150530,150534,150542,150552,150556,150563],{"__ignoreMap":71},[76,150390,150391,150394,150396],{"class":78,"line":79},[76,150392,150393],{"class":90},"raw_data ",[76,150395,370],{"class":82},[76,150397,57478],{"class":90},[76,150399,150400,150403,150405,150407,150409,150411,150414,150416,150419],{"class":78,"line":94},[76,150401,150402],{"class":90},"    {",[76,150404,150014],{"class":126},[76,150406,53469],{"class":90},[76,150408,149282],{"class":126},[76,150410,405],{"class":90},[76,150412,150413],{"class":126},"\"sales\"",[76,150415,53469],{"class":90},[76,150417,150418],{"class":126},"\"100\"",[76,150420,7012],{"class":90},[76,150422,150423,150425,150427,150429,150431,150433,150435,150437,150439],{"class":78,"line":133},[76,150424,150402],{"class":90},[76,150426,150014],{"class":126},[76,150428,53469],{"class":90},[76,150430,149287],{"class":126},[76,150432,405],{"class":90},[76,150434,150413],{"class":126},[76,150436,53469],{"class":90},[76,150438,9730],{"class":126},[76,150440,7012],{"class":90},[76,150442,150443,150445,150447,150449,150451,150453,150455,150457,150460],{"class":78,"line":145},[76,150444,150402],{"class":90},[76,150446,150014],{"class":126},[76,150448,53469],{"class":90},[76,150450,149292],{"class":126},[76,150452,405],{"class":90},[76,150454,150413],{"class":126},[76,150456,53469],{"class":90},[76,150458,150459],{"class":126},"\"120\"",[76,150461,7012],{"class":90},[76,150463,150464],{"class":78,"line":152},[76,150465,35284],{"class":90},[76,150467,150468],{"class":78,"line":157},[76,150469,149],{"emptyLinePlaceholder":148},[76,150471,150472,150474,150476],{"class":78,"line":246},[76,150473,149817],{"class":90},[76,150475,370],{"class":82},[76,150477,53870],{"class":90},[76,150479,150480,150483,150485],{"class":78,"line":251},[76,150481,150482],{"class":90},"sales ",[76,150484,370],{"class":82},[76,150486,53870],{"class":90},[76,150488,150489],{"class":78,"line":257},[76,150490,149],{"emptyLinePlaceholder":148},[76,150492,150493,150495,150497,150499],{"class":78,"line":641},[76,150494,5112],{"class":82},[76,150496,150226],{"class":90},[76,150498,1475],{"class":82},[76,150500,150501],{"class":90}," raw_data:\n",[76,150503,150504,150507,150509,150512,150514],{"class":78,"line":646},[76,150505,150506],{"class":90},"    value ",[76,150508,370],{"class":82},[76,150510,150511],{"class":90}," item.get(",[76,150513,150413],{"class":126},[76,150515,130],{"class":90},[76,150517,150518,150520,150522],{"class":78,"line":659},[76,150519,578],{"class":82},[76,150521,40967],{"class":82},[76,150523,150524],{"class":90}," value:\n",[76,150526,150527],{"class":78,"line":1608},[76,150528,150529],{"class":82},"        continue\n",[76,150531,150532],{"class":78,"line":1632},[76,150533,149],{"emptyLinePlaceholder":148},[76,150535,150536,150538,150540],{"class":78,"line":1637},[76,150537,150236],{"class":90},[76,150539,150014],{"class":126},[76,150541,6739],{"class":90},[76,150543,150544,150547,150549],{"class":78,"line":1642},[76,150545,150546],{"class":90},"    sales.append(",[76,150548,1360],{"class":119},[76,150550,150551],{"class":90},"(value))\n",[76,150553,150554],{"class":78,"line":1652},[76,150555,149],{"emptyLinePlaceholder":148},[76,150557,150558,150560],{"class":78,"line":1660},[76,150559,478],{"class":119},[76,150561,150562],{"class":90},"(dates)\n",[76,150564,150565,150567],{"class":78,"line":1683},[76,150566,478],{"class":119},[76,150568,150569],{"class":90},"(sales)\n",[14,150571,150573],{"id":150572},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[66,150575,150577],{"className":68,"code":150576,"language":70,"meta":71,"style":71},"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",[73,150578,150579,150593,150603,150607,150615,150636,150658,150680,150702,150724,150728,150732,150754,150775,150779,150787,150791,150795,150805,150814,150824,150840,150844,150848,150865,150881,150897,150913,150923,150927],{"__ignoreMap":71},[76,150580,150581,150583,150585,150587,150589,150591],{"class":78,"line":79},[76,150582,32781],{"class":82},[76,150584,149396],{"class":90},[76,150586,32438],{"class":82},[76,150588,149401],{"class":90},[76,150590,33426],{"class":82},[76,150592,149406],{"class":90},[76,150594,150595,150597,150599,150601],{"class":78,"line":94},[76,150596,32781],{"class":82},[76,150598,149255],{"class":90},[76,150600,32438],{"class":82},[76,150602,149260],{"class":90},[76,150604,150605],{"class":78,"line":133},[76,150606,149],{"emptyLinePlaceholder":148},[76,150608,150609,150611,150613],{"class":78,"line":145},[76,150610,150482],{"class":90},[76,150612,370],{"class":82},[76,150614,57478],{"class":90},[76,150616,150617,150619,150621,150623,150626,150628,150630,150632,150634],{"class":78,"line":152},[76,150618,150402],{"class":90},[76,150620,150014],{"class":126},[76,150622,53469],{"class":90},[76,150624,150625],{"class":126},"\"2024-10-01\"",[76,150627,405],{"class":90},[76,150629,86108],{"class":126},[76,150631,53469],{"class":90},[76,150633,94047],{"class":119},[76,150635,7012],{"class":90},[76,150637,150638,150640,150642,150644,150647,150649,150651,150653,150656],{"class":78,"line":157},[76,150639,150402],{"class":90},[76,150641,150014],{"class":126},[76,150643,53469],{"class":90},[76,150645,150646],{"class":126},"\"2024-10-02\"",[76,150648,405],{"class":90},[76,150650,86108],{"class":126},[76,150652,53469],{"class":90},[76,150654,150655],{"class":119},"1800",[76,150657,7012],{"class":90},[76,150659,150660,150662,150664,150666,150669,150671,150673,150675,150678],{"class":78,"line":246},[76,150661,150402],{"class":90},[76,150663,150014],{"class":126},[76,150665,53469],{"class":90},[76,150667,150668],{"class":126},"\"2024-10-03\"",[76,150670,405],{"class":90},[76,150672,86108],{"class":126},[76,150674,53469],{"class":90},[76,150676,150677],{"class":119},"1500",[76,150679,7012],{"class":90},[76,150681,150682,150684,150686,150688,150691,150693,150695,150697,150700],{"class":78,"line":251},[76,150683,150402],{"class":90},[76,150685,150014],{"class":126},[76,150687,53469],{"class":90},[76,150689,150690],{"class":126},"\"2024-10-04\"",[76,150692,405],{"class":90},[76,150694,86108],{"class":126},[76,150696,53469],{"class":90},[76,150698,150699],{"class":119},"2100",[76,150701,7012],{"class":90},[76,150703,150704,150706,150708,150710,150713,150715,150717,150719,150722],{"class":78,"line":257},[76,150705,150402],{"class":90},[76,150707,150014],{"class":126},[76,150709,53469],{"class":90},[76,150711,150712],{"class":126},"\"2024-10-05\"",[76,150714,405],{"class":90},[76,150716,86108],{"class":126},[76,150718,53469],{"class":90},[76,150720,150721],{"class":119},"2600",[76,150723,7012],{"class":90},[76,150725,150726],{"class":78,"line":641},[76,150727,35284],{"class":90},[76,150729,150730],{"class":78,"line":646},[76,150731,149],{"emptyLinePlaceholder":148},[76,150733,150734,150736,150738,150741,150743,150745,150747,150749,150751],{"class":78,"line":659},[76,150735,149817],{"class":90},[76,150737,370],{"class":82},[76,150739,150740],{"class":90}," [item[",[76,150742,150014],{"class":126},[76,150744,6525],{"class":90},[76,150746,5112],{"class":82},[76,150748,150226],{"class":90},[76,150750,1475],{"class":82},[76,150752,150753],{"class":90}," sales]\n",[76,150755,150756,150759,150761,150763,150765,150767,150769,150771,150773],{"class":78,"line":1608},[76,150757,150758],{"class":90},"amounts ",[76,150760,370],{"class":82},[76,150762,150740],{"class":90},[76,150764,86108],{"class":126},[76,150766,6525],{"class":90},[76,150768,5112],{"class":82},[76,150770,150226],{"class":90},[76,150772,1475],{"class":82},[76,150774,150753],{"class":90},[76,150776,150777],{"class":78,"line":1632},[76,150778,149],{"emptyLinePlaceholder":148},[76,150780,150781,150783,150785],{"class":78,"line":1637},[76,150782,149269],{"class":90},[76,150784,370],{"class":82},[76,150786,149274],{"class":90},[76,150788,150789],{"class":78,"line":1642},[76,150790,149858],{"class":90},[76,150792,150793],{"class":78,"line":1652},[76,150794,149666],{"class":90},[76,150796,150797,150799,150801,150803],{"class":78,"line":1660},[76,150798,149671],{"class":7296},[76,150800,370],{"class":82},[76,150802,149312],{"class":126},[76,150804,33509],{"class":90},[76,150806,150807,150809,150811],{"class":78,"line":1683},[76,150808,149682],{"class":7296},[76,150810,370],{"class":82},[76,150812,150813],{"class":90},"amounts,\n",[76,150815,150816,150818,150820,150822],{"class":78,"line":1698},[76,150817,149711],{"class":7296},[76,150819,370],{"class":82},[76,150821,33519],{"class":119},[76,150823,33509],{"class":90},[76,150825,150826,150828,150830,150832,150834,150836,150838],{"class":78,"line":1711},[76,150827,149722],{"class":7296},[76,150829,370],{"class":82},[76,150831,149727],{"class":90},[76,150833,149730],{"class":7296},[76,150835,370],{"class":82},[76,150837,33519],{"class":119},[76,150839,40085],{"class":90},[76,150841,150842],{"class":78,"line":1717},[76,150843,130],{"class":90},[76,150845,150846],{"class":78,"line":1728},[76,150847,149485],{"class":90},[76,150849,150850,150852,150854,150856,150858,150860,150863],{"class":78,"line":1740},[76,150851,149490],{"class":7296},[76,150853,370],{"class":82},[76,150855,149495],{"class":90},[76,150857,53439],{"class":7296},[76,150859,370],{"class":82},[76,150861,150862],{"class":126},"\"每日销售额\"",[76,150864,40085],{"class":90},[76,150866,150867,150869,150871,150873,150875,150877,150879],{"class":78,"line":1746},[76,150868,149509],{"class":7296},[76,150870,370],{"class":82},[76,150872,149514],{"class":90},[76,150874,301],{"class":7296},[76,150876,370],{"class":82},[76,150878,149521],{"class":126},[76,150880,40085],{"class":90},[76,150882,150883,150885,150887,150889,150891,150893,150895],{"class":78,"line":1751},[76,150884,149528],{"class":7296},[76,150886,370],{"class":82},[76,150888,149514],{"class":90},[76,150890,301],{"class":7296},[76,150892,370],{"class":82},[76,150894,149539],{"class":126},[76,150896,40085],{"class":90},[76,150898,150899,150901,150903,150905,150907,150909,150911],{"class":78,"line":1756},[76,150900,149546],{"class":7296},[76,150902,370],{"class":82},[76,150904,149551],{"class":90},[76,150906,149554],{"class":7296},[76,150908,370],{"class":82},[76,150910,149559],{"class":126},[76,150912,40085],{"class":90},[76,150914,150915,150918,150920],{"class":78,"line":1766},[76,150916,150917],{"class":7296},"    datazoom_opts",[76,150919,370],{"class":82},[76,150921,150922],{"class":90},"[opts.DataZoomOpts()],\n",[76,150924,150925],{"class":78,"line":1773},[76,150926,130],{"class":90},[76,150928,150929,150931,150934],{"class":78,"line":1793},[76,150930,149341],{"class":90},[76,150932,150933],{"class":126},"\"daily_sales.html\"",[76,150935,130],{"class":90},[19,150937,150938,150941],{},[73,150939,150940],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150943,150945],{"id":150944},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150947,150948],{},"如果数据结构如下：",[66,150950,150952],{"className":68,"code":150951,"language":70,"meta":71,"style":71},"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",[73,150953,150954,150962,150970,150992,151013,151018,151025,151045,151065,151069],{"__ignoreMap":71},[76,150955,150956,150958,150960],{"class":78,"line":79},[76,150957,103680],{"class":90},[76,150959,370],{"class":82},[76,150961,17623],{"class":90},[76,150963,150964,150967],{"class":78,"line":94},[76,150965,150966],{"class":126},"    \"北京\"",[76,150968,150969],{"class":90},": [\n",[76,150971,150972,150974,150976,150978,150981,150983,150986,150988,150990],{"class":78,"line":133},[76,150973,6999],{"class":90},[76,150975,150014],{"class":126},[76,150977,53469],{"class":90},[76,150979,150980],{"class":126},"\"2024-01-01\"",[76,150982,405],{"class":90},[76,150984,150985],{"class":126},"\"confirm\"",[76,150987,53469],{"class":90},[76,150989,402],{"class":119},[76,150991,7012],{"class":90},[76,150993,150994,150996,150998,151000,151003,151005,151007,151009,151011],{"class":78,"line":145},[76,150995,6999],{"class":90},[76,150997,150014],{"class":126},[76,150999,53469],{"class":90},[76,151001,151002],{"class":126},"\"2024-01-02\"",[76,151004,405],{"class":90},[76,151006,150985],{"class":126},[76,151008,53469],{"class":90},[76,151010,2760],{"class":119},[76,151012,7012],{"class":90},[76,151014,151015],{"class":78,"line":152},[76,151016,151017],{"class":90},"    ],\n",[76,151019,151020,151023],{"class":78,"line":157},[76,151021,151022],{"class":126},"    \"上海\"",[76,151024,150969],{"class":90},[76,151026,151027,151029,151031,151033,151035,151037,151039,151041,151043],{"class":78,"line":246},[76,151028,6999],{"class":90},[76,151030,150014],{"class":126},[76,151032,53469],{"class":90},[76,151034,150980],{"class":126},[76,151036,405],{"class":90},[76,151038,150985],{"class":126},[76,151040,53469],{"class":90},[76,151042,2659],{"class":119},[76,151044,7012],{"class":90},[76,151046,151047,151049,151051,151053,151055,151057,151059,151061,151063],{"class":78,"line":251},[76,151048,6999],{"class":90},[76,151050,150014],{"class":126},[76,151052,53469],{"class":90},[76,151054,151002],{"class":126},[76,151056,405],{"class":90},[76,151058,150985],{"class":126},[76,151060,53469],{"class":90},[76,151062,2785],{"class":119},[76,151064,7012],{"class":90},[76,151066,151067],{"class":78,"line":257},[76,151068,151017],{"class":90},[76,151070,151071],{"class":78,"line":641},[76,151072,3685],{"class":90},[19,151074,151075],{},"绘制多地区趋势：",[66,151077,151079],{"className":68,"code":151078,"language":70,"meta":71,"style":71},"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",[73,151080,151081,151095,151105,151109,151134,151138,151146,151150,151154,151166,151188,151201,151205,151209,151226,151242,151246],{"__ignoreMap":71},[76,151082,151083,151085,151087,151089,151091,151093],{"class":78,"line":79},[76,151084,32781],{"class":82},[76,151086,149396],{"class":90},[76,151088,32438],{"class":82},[76,151090,149401],{"class":90},[76,151092,33426],{"class":82},[76,151094,149406],{"class":90},[76,151096,151097,151099,151101,151103],{"class":78,"line":94},[76,151098,32781],{"class":82},[76,151100,149255],{"class":90},[76,151102,32438],{"class":82},[76,151104,149260],{"class":90},[76,151106,151107],{"class":78,"line":133},[76,151108,149],{"emptyLinePlaceholder":148},[76,151110,151111,151113,151115,151117,151119,151121,151123,151125,151127,151130,151132],{"class":78,"line":145},[76,151112,149817],{"class":90},[76,151114,370],{"class":82},[76,151116,150740],{"class":90},[76,151118,150014],{"class":126},[76,151120,6525],{"class":90},[76,151122,5112],{"class":82},[76,151124,150226],{"class":90},[76,151126,1475],{"class":82},[76,151128,151129],{"class":90}," data[",[76,151131,71297],{"class":126},[76,151133,79553],{"class":90},[76,151135,151136],{"class":78,"line":152},[76,151137,149],{"emptyLinePlaceholder":148},[76,151139,151140,151142,151144],{"class":78,"line":157},[76,151141,149269],{"class":90},[76,151143,370],{"class":82},[76,151145,149274],{"class":90},[76,151147,151148],{"class":78,"line":246},[76,151149,149858],{"class":90},[76,151151,151152],{"class":78,"line":251},[76,151153,149],{"emptyLinePlaceholder":148},[76,151155,151156,151158,151161,151163],{"class":78,"line":257},[76,151157,5112],{"class":82},[76,151159,151160],{"class":90}," city, records ",[76,151162,1475],{"class":82},[76,151164,151165],{"class":90}," data.items():\n",[76,151167,151168,151171,151173,151175,151177,151179,151181,151183,151185],{"class":78,"line":641},[76,151169,151170],{"class":90},"    values ",[76,151172,370],{"class":82},[76,151174,150740],{"class":90},[76,151176,150985],{"class":126},[76,151178,6525],{"class":90},[76,151180,5112],{"class":82},[76,151182,150226],{"class":90},[76,151184,1475],{"class":82},[76,151186,151187],{"class":90}," records]\n",[76,151189,151190,151193,151195,151197,151199],{"class":78,"line":646},[76,151191,151192],{"class":90},"    line.add_yaxis(city, values, ",[76,151194,149762],{"class":7296},[76,151196,370],{"class":82},[76,151198,33519],{"class":119},[76,151200,130],{"class":90},[76,151202,151203],{"class":78,"line":659},[76,151204,149],{"emptyLinePlaceholder":148},[76,151206,151207],{"class":78,"line":1608},[76,151208,149485],{"class":90},[76,151210,151211,151213,151215,151217,151219,151221,151224],{"class":78,"line":1632},[76,151212,149490],{"class":7296},[76,151214,370],{"class":82},[76,151216,149495],{"class":90},[76,151218,53439],{"class":7296},[76,151220,370],{"class":82},[76,151222,151223],{"class":126},"\"多地区趋势图\"",[76,151225,40085],{"class":90},[76,151227,151228,151230,151232,151234,151236,151238,151240],{"class":78,"line":1637},[76,151229,149546],{"class":7296},[76,151231,370],{"class":82},[76,151233,149551],{"class":90},[76,151235,149554],{"class":7296},[76,151237,370],{"class":82},[76,151239,149559],{"class":126},[76,151241,40085],{"class":90},[76,151243,151244],{"class":78,"line":1642},[76,151245,130],{"class":90},[76,151247,151248,151250,151253],{"class":78,"line":1652},[76,151249,149341],{"class":90},[76,151251,151252],{"class":126},"\"trend.html\"",[76,151254,130],{"class":90},[19,151256,151257],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151259,151261],{"id":151260},"_1012-易错点","10.12 易错点",[26,151263,151264,151270,151276,151286,151292],{},[29,151265,151266,151269],{},[73,151267,151268],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,151271,151272,151275],{},[73,151273,151274],{},"render()"," 生成的是 HTML，不是图片。",[29,151277,151278,151279,151282,151283,490],{},"JSON 字符串用 ",[73,151280,151281],{},"json.loads()","，JSON 文件用 ",[73,151284,151285],{},"json.load()",[29,151287,151288,151289,490],{},"中文 JSON 保存时加 ",[73,151290,151291],{},"ensure_ascii=False",[29,151293,151294],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151296,151298],{"id":151297},"_1013-本章练习","10.13 本章练习",[26,151300,151301,151304,151307,151310,151313],{},[29,151302,151303],{},"安装 pyecharts 并生成第一个折线图。",[29,151305,151306],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,151308,151309],{},"绘制两条折线，对比线上和线下销售额。",[29,151311,151312],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,151314,151315],{},"对含有空值的销售数据进行清洗后再绘图。",[2178,151317,151318],{},"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":71,"searchDepth":94,"depth":94,"links":151320},[151321,151322,151323,151324,151325,151326,151327,151328,151329,151330,151331,151332,151333],{"id":148937,"depth":94,"text":148938},{"id":149012,"depth":94,"text":149013},{"id":149191,"depth":94,"text":149192},{"id":149242,"depth":94,"text":149243},{"id":149376,"depth":94,"text":149377},{"id":149652,"depth":94,"text":149653},{"id":149778,"depth":94,"text":149779},{"id":149989,"depth":94,"text":149990},{"id":150360,"depth":94,"text":150361},{"id":150572,"depth":94,"text":150573},{"id":150944,"depth":94,"text":150945},{"id":151260,"depth":94,"text":151261},{"id":151297,"depth":94,"text":151298},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148929,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151340,"title":151341,"body":151342,"description":2201,"extension":2202,"meta":153690,"navigation":148,"path":153691,"seo":153692,"stem":153693,"__hash__":153694},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151343,"toc":153667},[151344,151347,151351,151354,151357,151431,151434,151525,151528,151532,151535,151579,151592,151596,151599,151666,151669,151673,151676,151760,151768,151772,151777,151917,151920,151931,151937,151943,152057,152061,152064,152067,152315,152318,152322,152325,152429,152432,152436,152587,152591,152598,152710,152714,152717,152823,152826,152830,152833,152864,152867,152971,152974,152978,152982,152992,153060,153064,153071,153133,153136,153140,153146,153242,153251,153255,153579,153588,153592,153620,153624,153664],[10,151345,151341],{"id":151346},"_11-面向对象基础",[14,151348,151350],{"id":151349},"_111-什么是面向对象","11.1 什么是面向对象",[19,151352,151353],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151355,151356],{},"面向过程：",[66,151358,151360],{"className":68,"code":151359,"language":70,"meta":71,"style":71},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[73,151361,151362,151370,151378,151382,151391,151422,151426],{"__ignoreMap":71},[76,151363,151364,151366,151368],{"class":78,"line":79},[76,151365,966],{"class":90},[76,151367,370],{"class":82},[76,151369,971],{"class":126},[76,151371,151372,151374,151376],{"class":78,"line":94},[76,151373,148565],{"class":90},[76,151375,370],{"class":82},[76,151377,148570],{"class":119},[76,151379,151380],{"class":78,"line":133},[76,151381,149],{"emptyLinePlaceholder":148},[76,151383,151384,151386,151389],{"class":78,"line":145},[76,151385,83],{"class":82},[76,151387,151388],{"class":86}," introduce",[76,151390,1142],{"class":90},[76,151392,151393,151395,151397,151399,151402,151404,151406,151408,151411,151413,151415,151417,151420],{"class":78,"line":152},[76,151394,120],{"class":119},[76,151396,123],{"class":90},[76,151398,292],{"class":82},[76,151400,151401],{"class":126},"\"我叫",[76,151403,298],{"class":119},[76,151405,301],{"class":90},[76,151407,304],{"class":119},[76,151409,151410],{"class":126},"，今年",[76,151412,298],{"class":119},[76,151414,1184],{"class":90},[76,151416,304],{"class":119},[76,151418,151419],{"class":126},"岁\"",[76,151421,130],{"class":90},[76,151423,151424],{"class":78,"line":157},[76,151425,149],{"emptyLinePlaceholder":148},[76,151427,151428],{"class":78,"line":246},[76,151429,151430],{"class":90},"introduce(name, age)\n",[19,151432,151433],{},"面向对象：",[66,151435,151437],{"className":68,"code":151436,"language":70,"meta":71,"style":71},"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",[73,151438,151439,151447,151455,151484,151488,151492,151502,151511,151520],{"__ignoreMap":71},[76,151440,151441,151443,151445],{"class":78,"line":79},[76,151442,16747],{"class":82},[76,151444,9976],{"class":86},[76,151446,590],{"class":90},[76,151448,151449,151451,151453],{"class":78,"line":94},[76,151450,32845],{"class":82},[76,151452,151388],{"class":86},[76,151454,32851],{"class":90},[76,151456,151457,151459,151461,151463,151465,151468,151470,151472,151474,151476,151478,151480,151482],{"class":78,"line":133},[76,151458,1701],{"class":119},[76,151460,123],{"class":90},[76,151462,292],{"class":82},[76,151464,151401],{"class":126},[76,151466,151467],{"class":119},"{self",[76,151469,82325],{"class":90},[76,151471,304],{"class":119},[76,151473,151410],{"class":126},[76,151475,151467],{"class":119},[76,151477,82337],{"class":90},[76,151479,304],{"class":119},[76,151481,151419],{"class":126},[76,151483,130],{"class":90},[76,151485,151486],{"class":78,"line":145},[76,151487,149],{"emptyLinePlaceholder":148},[76,151489,151490],{"class":78,"line":152},[76,151491,149],{"emptyLinePlaceholder":148},[76,151493,151494,151497,151499],{"class":78,"line":157},[76,151495,151496],{"class":90},"student ",[76,151498,370],{"class":82},[76,151500,151501],{"class":90}," Student()\n",[76,151503,151504,151507,151509],{"class":78,"line":246},[76,151505,151506],{"class":90},"student.name ",[76,151508,370],{"class":82},[76,151510,971],{"class":126},[76,151512,151513,151516,151518],{"class":78,"line":251},[76,151514,151515],{"class":90},"student.age ",[76,151517,370],{"class":82},[76,151519,148570],{"class":119},[76,151521,151522],{"class":78,"line":257},[76,151523,151524],{"class":90},"student.introduce()\n",[19,151526,151527],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151529,151531],{"id":151530},"_112-类和对象","11.2 类和对象",[19,151533,151534],{},"类是模板，对象是根据模板创建出来的具体实例。",[66,151536,151538],{"className":68,"code":151537,"language":70,"meta":71,"style":71},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[73,151539,151540,151548,151553,151557,151561,151570],{"__ignoreMap":71},[76,151541,151542,151544,151546],{"class":78,"line":79},[76,151543,16747],{"class":82},[76,151545,9976],{"class":86},[76,151547,590],{"class":90},[76,151549,151550],{"class":78,"line":94},[76,151551,151552],{"class":82},"    pass\n",[76,151554,151555],{"class":78,"line":133},[76,151556,149],{"emptyLinePlaceholder":148},[76,151558,151559],{"class":78,"line":145},[76,151560,149],{"emptyLinePlaceholder":148},[76,151562,151563,151566,151568],{"class":78,"line":152},[76,151564,151565],{"class":90},"student1 ",[76,151567,370],{"class":82},[76,151569,151501],{"class":90},[76,151571,151572,151575,151577],{"class":78,"line":157},[76,151573,151574],{"class":90},"student2 ",[76,151576,370],{"class":82},[76,151578,151501],{"class":90},[19,151580,151581,151584,151585,103040,151588,151591],{},[73,151582,151583],{},"Student"," 是类，",[73,151586,151587],{},"student1",[73,151589,151590],{},"student2"," 是对象。",[14,151593,151595],{"id":151594},"_113-属性","11.3 属性",[19,151597,151598],{},"属性是对象保存的数据。",[66,151600,151602],{"className":68,"code":151601,"language":70,"meta":71,"style":71},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[73,151603,151604,151612,151616,151620,151624,151632,151640,151648,151652,151659],{"__ignoreMap":71},[76,151605,151606,151608,151610],{"class":78,"line":79},[76,151607,16747],{"class":82},[76,151609,9976],{"class":86},[76,151611,590],{"class":90},[76,151613,151614],{"class":78,"line":94},[76,151615,151552],{"class":82},[76,151617,151618],{"class":78,"line":133},[76,151619,149],{"emptyLinePlaceholder":148},[76,151621,151622],{"class":78,"line":145},[76,151623,149],{"emptyLinePlaceholder":148},[76,151625,151626,151628,151630],{"class":78,"line":152},[76,151627,151496],{"class":90},[76,151629,370],{"class":82},[76,151631,151501],{"class":90},[76,151633,151634,151636,151638],{"class":78,"line":157},[76,151635,151506],{"class":90},[76,151637,370],{"class":82},[76,151639,971],{"class":126},[76,151641,151642,151644,151646],{"class":78,"line":246},[76,151643,151515],{"class":90},[76,151645,370],{"class":82},[76,151647,148570],{"class":119},[76,151649,151650],{"class":78,"line":251},[76,151651,149],{"emptyLinePlaceholder":148},[76,151653,151654,151656],{"class":78,"line":257},[76,151655,478],{"class":119},[76,151657,151658],{"class":90},"(student.name)\n",[76,151660,151661,151663],{"class":78,"line":641},[76,151662,478],{"class":119},[76,151664,151665],{"class":90},"(student.age)\n",[19,151667,151668],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151670,151672],{"id":151671},"_114-方法","11.4 方法",[19,151674,151675],{},"类中的函数叫方法。",[66,151677,151678],{"className":68,"code":151436,"language":70,"meta":71,"style":71},[73,151679,151680,151688,151696,151724,151728,151732,151740,151748,151756],{"__ignoreMap":71},[76,151681,151682,151684,151686],{"class":78,"line":79},[76,151683,16747],{"class":82},[76,151685,9976],{"class":86},[76,151687,590],{"class":90},[76,151689,151690,151692,151694],{"class":78,"line":94},[76,151691,32845],{"class":82},[76,151693,151388],{"class":86},[76,151695,32851],{"class":90},[76,151697,151698,151700,151702,151704,151706,151708,151710,151712,151714,151716,151718,151720,151722],{"class":78,"line":133},[76,151699,1701],{"class":119},[76,151701,123],{"class":90},[76,151703,292],{"class":82},[76,151705,151401],{"class":126},[76,151707,151467],{"class":119},[76,151709,82325],{"class":90},[76,151711,304],{"class":119},[76,151713,151410],{"class":126},[76,151715,151467],{"class":119},[76,151717,82337],{"class":90},[76,151719,304],{"class":119},[76,151721,151419],{"class":126},[76,151723,130],{"class":90},[76,151725,151726],{"class":78,"line":145},[76,151727,149],{"emptyLinePlaceholder":148},[76,151729,151730],{"class":78,"line":152},[76,151731,149],{"emptyLinePlaceholder":148},[76,151733,151734,151736,151738],{"class":78,"line":157},[76,151735,151496],{"class":90},[76,151737,370],{"class":82},[76,151739,151501],{"class":90},[76,151741,151742,151744,151746],{"class":78,"line":246},[76,151743,151506],{"class":90},[76,151745,370],{"class":82},[76,151747,971],{"class":126},[76,151749,151750,151752,151754],{"class":78,"line":251},[76,151751,151515],{"class":90},[76,151753,370],{"class":82},[76,151755,148570],{"class":119},[76,151757,151758],{"class":78,"line":257},[76,151759,151524],{"class":90},[19,151761,151762,151764,151765,151767],{},[73,151763,32867],{}," 表示当前对象。调用方法时不需要手动传入 ",[73,151766,32867],{},"，Python 会自动传。",[14,151769,151771],{"id":151770},"_115-构造方法__init__","11.5 构造方法__init__",[19,151773,151774,151776],{},[73,151775,32873],{}," 在对象创建时自动执行，用于初始化属性。",[66,151778,151780],{"className":68,"code":151779,"language":70,"meta":71,"style":71},"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",[73,151781,151782,151790,151799,151811,151823,151834,151838,151846,151884,151888,151892,151913],{"__ignoreMap":71},[76,151783,151784,151786,151788],{"class":78,"line":79},[76,151785,16747],{"class":82},[76,151787,9976],{"class":86},[76,151789,590],{"class":90},[76,151791,151792,151794,151796],{"class":78,"line":94},[76,151793,32845],{"class":82},[76,151795,32848],{"class":119},[76,151797,151798],{"class":90},"(self, name, age, score):\n",[76,151800,151801,151803,151806,151808],{"class":78,"line":133},[76,151802,32889],{"class":119},[76,151804,151805],{"class":90},".name ",[76,151807,370],{"class":82},[76,151809,151810],{"class":90}," name\n",[76,151812,151813,151815,151818,151820],{"class":78,"line":145},[76,151814,32889],{"class":119},[76,151816,151817],{"class":90},".age ",[76,151819,370],{"class":82},[76,151821,151822],{"class":90}," age\n",[76,151824,151825,151827,151830,151832],{"class":78,"line":152},[76,151826,32889],{"class":119},[76,151828,151829],{"class":90},".score ",[76,151831,370],{"class":82},[76,151833,3699],{"class":90},[76,151835,151836],{"class":78,"line":157},[76,151837,149],{"emptyLinePlaceholder":148},[76,151839,151840,151842,151844],{"class":78,"line":246},[76,151841,32845],{"class":82},[76,151843,151388],{"class":86},[76,151845,32851],{"class":90},[76,151847,151848,151850,151852,151854,151856,151858,151860,151862,151864,151866,151868,151870,151873,151875,151878,151880,151882],{"class":78,"line":251},[76,151849,1701],{"class":119},[76,151851,123],{"class":90},[76,151853,292],{"class":82},[76,151855,151401],{"class":126},[76,151857,151467],{"class":119},[76,151859,82325],{"class":90},[76,151861,304],{"class":119},[76,151863,151410],{"class":126},[76,151865,151467],{"class":119},[76,151867,82337],{"class":90},[76,151869,304],{"class":119},[76,151871,151872],{"class":126},"岁，成绩",[76,151874,151467],{"class":119},[76,151876,151877],{"class":90},".score",[76,151879,304],{"class":119},[76,151881,307],{"class":126},[76,151883,130],{"class":90},[76,151885,151886],{"class":78,"line":257},[76,151887,149],{"emptyLinePlaceholder":148},[76,151889,151890],{"class":78,"line":641},[76,151891,149],{"emptyLinePlaceholder":148},[76,151893,151894,151896,151898,151901,151903,151905,151907,151909,151911],{"class":78,"line":646},[76,151895,151496],{"class":90},[76,151897,370],{"class":82},[76,151899,151900],{"class":90}," Student(",[76,151902,325],{"class":126},[76,151904,405],{"class":90},[76,151906,1214],{"class":119},[76,151908,405],{"class":90},[76,151910,3243],{"class":119},[76,151912,130],{"class":90},[76,151914,151915],{"class":78,"line":659},[76,151916,151524],{"class":90},[19,151918,151919],{},"构造方法的好处：",[26,151921,151922,151925,151928],{},[29,151923,151924],{},"创建对象时必须提供必要数据。",[29,151926,151927],{},"属性初始化集中，不容易漏。",[29,151929,151930],{},"对象状态更完整。",[14,151932,151934,151935],{"id":151933},"_116-str","11.6 ",[2416,151936,1402],{},[19,151938,151939,151940,490],{},"直接打印对象时，默认输出不直观。可以定义 ",[73,151941,151942],{},"__str__",[66,151944,151946],{"className":68,"code":151945,"language":70,"meta":71,"style":71},"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",[73,151947,151948,151956,151965,151975,151985,151989,151998,152026,152030,152034,152050],{"__ignoreMap":71},[76,151949,151950,151952,151954],{"class":78,"line":79},[76,151951,16747],{"class":82},[76,151953,9976],{"class":86},[76,151955,590],{"class":90},[76,151957,151958,151960,151962],{"class":78,"line":94},[76,151959,32845],{"class":82},[76,151961,32848],{"class":119},[76,151963,151964],{"class":90},"(self, name, age):\n",[76,151966,151967,151969,151971,151973],{"class":78,"line":133},[76,151968,32889],{"class":119},[76,151970,151805],{"class":90},[76,151972,370],{"class":82},[76,151974,151810],{"class":90},[76,151976,151977,151979,151981,151983],{"class":78,"line":145},[76,151978,32889],{"class":119},[76,151980,151817],{"class":90},[76,151982,370],{"class":82},[76,151984,151822],{"class":90},[76,151986,151987],{"class":78,"line":152},[76,151988,149],{"emptyLinePlaceholder":148},[76,151990,151991,151993,151996],{"class":78,"line":157},[76,151992,32845],{"class":82},[76,151994,151995],{"class":119}," __str__",[76,151997,32851],{"class":90},[76,151999,152000,152002,152005,152008,152010,152012,152014,152017,152019,152021,152023],{"class":78,"line":246},[76,152001,595],{"class":82},[76,152003,152004],{"class":82}," f",[76,152006,152007],{"class":126},"\"Student(name=",[76,152009,151467],{"class":119},[76,152011,82325],{"class":90},[76,152013,304],{"class":119},[76,152015,152016],{"class":126},", age=",[76,152018,151467],{"class":119},[76,152020,82337],{"class":90},[76,152022,304],{"class":119},[76,152024,152025],{"class":126},")\"\n",[76,152027,152028],{"class":78,"line":251},[76,152029,149],{"emptyLinePlaceholder":148},[76,152031,152032],{"class":78,"line":257},[76,152033,149],{"emptyLinePlaceholder":148},[76,152035,152036,152038,152040,152042,152044,152046,152048],{"class":78,"line":641},[76,152037,151496],{"class":90},[76,152039,370],{"class":82},[76,152041,151900],{"class":90},[76,152043,325],{"class":126},[76,152045,405],{"class":90},[76,152047,1214],{"class":119},[76,152049,130],{"class":90},[76,152051,152052,152054],{"class":78,"line":646},[76,152053,478],{"class":119},[76,152055,152056],{"class":90},"(student)\n",[14,152058,152060],{"id":152059},"_117-封装","11.7 封装",[19,152062,152063],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152065,152066],{},"Python 中以双下划线开头的属性通常视为私有属性。",[66,152068,152070],{"className":68,"code":152069,"language":70,"meta":71,"style":71},"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",[73,152071,152072,152081,152090,152102,152113,152117,152126,152135,152139,152149,152161,152172,152177,152187,152191,152200,152212,152223,152227,152240,152250,152254,152264,152268,152272,152290,152299,152308],{"__ignoreMap":71},[76,152073,152074,152076,152079],{"class":78,"line":79},[76,152075,16747],{"class":82},[76,152077,152078],{"class":86}," Account",[76,152080,590],{"class":90},[76,152082,152083,152085,152087],{"class":78,"line":94},[76,152084,32845],{"class":82},[76,152086,32848],{"class":119},[76,152088,152089],{"class":90},"(self, owner, balance):\n",[76,152091,152092,152094,152097,152099],{"class":78,"line":133},[76,152093,32889],{"class":119},[76,152095,152096],{"class":90},".owner ",[76,152098,370],{"class":82},[76,152100,152101],{"class":90}," owner\n",[76,152103,152104,152106,152109,152111],{"class":78,"line":145},[76,152105,32889],{"class":119},[76,152107,152108],{"class":90},".__balance ",[76,152110,370],{"class":82},[76,152112,1657],{"class":90},[76,152114,152115],{"class":78,"line":152},[76,152116,149],{"emptyLinePlaceholder":148},[76,152118,152119,152121,152124],{"class":78,"line":157},[76,152120,32845],{"class":82},[76,152122,152123],{"class":86}," get_balance",[76,152125,32851],{"class":90},[76,152127,152128,152130,152132],{"class":78,"line":246},[76,152129,595],{"class":82},[76,152131,40911],{"class":119},[76,152133,152134],{"class":90},".__balance\n",[76,152136,152137],{"class":78,"line":251},[76,152138,149],{"emptyLinePlaceholder":148},[76,152140,152141,152143,152146],{"class":78,"line":257},[76,152142,32845],{"class":82},[76,152144,152145],{"class":86}," deposit",[76,152147,152148],{"class":90},"(self, money):\n",[76,152150,152151,152153,152155,152157,152159],{"class":78,"line":641},[76,152152,4592],{"class":82},[76,152154,1688],{"class":90},[76,152156,1691],{"class":82},[76,152158,587],{"class":119},[76,152160,590],{"class":90},[76,152162,152163,152165,152167,152170],{"class":78,"line":646},[76,152164,36688],{"class":119},[76,152166,123],{"class":90},[76,152168,152169],{"class":126},"\"存款金额必须大于0\"",[76,152171,130],{"class":90},[76,152173,152174],{"class":78,"line":659},[76,152175,152176],{"class":82},"            return\n",[76,152178,152179,152181,152183,152185],{"class":78,"line":1608},[76,152180,32889],{"class":119},[76,152182,152108],{"class":90},[76,152184,1060],{"class":82},[76,152186,1725],{"class":90},[76,152188,152189],{"class":78,"line":1632},[76,152190,149],{"emptyLinePlaceholder":148},[76,152192,152193,152195,152198],{"class":78,"line":1637},[76,152194,32845],{"class":82},[76,152196,152197],{"class":86}," withdraw",[76,152199,152148],{"class":90},[76,152201,152202,152204,152206,152208,152210],{"class":78,"line":1642},[76,152203,4592],{"class":82},[76,152205,1688],{"class":90},[76,152207,1691],{"class":82},[76,152209,587],{"class":119},[76,152211,590],{"class":90},[76,152213,152214,152216,152218,152221],{"class":78,"line":1652},[76,152215,36688],{"class":119},[76,152217,123],{"class":90},[76,152219,152220],{"class":126},"\"取款金额必须大于0\"",[76,152222,130],{"class":90},[76,152224,152225],{"class":78,"line":1660},[76,152226,152176],{"class":82},[76,152228,152229,152231,152233,152235,152237],{"class":78,"line":1683},[76,152230,4592],{"class":82},[76,152232,1688],{"class":90},[76,152234,1829],{"class":82},[76,152236,40911],{"class":119},[76,152238,152239],{"class":90},".__balance:\n",[76,152241,152242,152244,152246,152248],{"class":78,"line":1698},[76,152243,36688],{"class":119},[76,152245,123],{"class":90},[76,152247,1842],{"class":126},[76,152249,130],{"class":90},[76,152251,152252],{"class":78,"line":1711},[76,152253,152176],{"class":82},[76,152255,152256,152258,152260,152262],{"class":78,"line":1717},[76,152257,32889],{"class":119},[76,152259,152108],{"class":90},[76,152261,1857],{"class":82},[76,152263,1725],{"class":90},[76,152265,152266],{"class":78,"line":1728},[76,152267,149],{"emptyLinePlaceholder":148},[76,152269,152270],{"class":78,"line":1740},[76,152271,149],{"emptyLinePlaceholder":148},[76,152273,152274,152277,152279,152282,152284,152286,152288],{"class":78,"line":1746},[76,152275,152276],{"class":90},"account ",[76,152278,370],{"class":82},[76,152280,152281],{"class":90}," Account(",[76,152283,325],{"class":126},[76,152285,405],{"class":90},[76,152287,8489],{"class":119},[76,152289,130],{"class":90},[76,152291,152292,152295,152297],{"class":78,"line":1751},[76,152293,152294],{"class":90},"account.deposit(",[76,152296,2133],{"class":119},[76,152298,130],{"class":90},[76,152300,152301,152304,152306],{"class":78,"line":1756},[76,152302,152303],{"class":90},"account.withdraw(",[76,152305,2575],{"class":119},[76,152307,130],{"class":90},[76,152309,152310,152312],{"class":78,"line":1766},[76,152311,478],{"class":119},[76,152313,152314],{"class":90},"(account.get_balance())\n",[19,152316,152317],{},"封装的意义是避免外部随意修改内部状态。",[14,152319,152321],{"id":152320},"_118-继承","11.8 继承",[19,152323,152324],{},"继承可以让子类复用父类的属性和方法。",[66,152326,152328],{"className":68,"code":152327,"language":70,"meta":71,"style":71},"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",[73,152329,152330,152339,152348,152359,152363,152367,152381,152390,152401,152405,152409,152419,152424],{"__ignoreMap":71},[76,152331,152332,152334,152337],{"class":78,"line":79},[76,152333,16747],{"class":82},[76,152335,152336],{"class":86}," Animal",[76,152338,590],{"class":90},[76,152340,152341,152343,152346],{"class":78,"line":94},[76,152342,32845],{"class":82},[76,152344,152345],{"class":86}," eat",[76,152347,32851],{"class":90},[76,152349,152350,152352,152354,152357],{"class":78,"line":133},[76,152351,1701],{"class":119},[76,152353,123],{"class":90},[76,152355,152356],{"class":126},"\"吃东西\"",[76,152358,130],{"class":90},[76,152360,152361],{"class":78,"line":145},[76,152362,149],{"emptyLinePlaceholder":148},[76,152364,152365],{"class":78,"line":152},[76,152366,149],{"emptyLinePlaceholder":148},[76,152368,152369,152371,152374,152376,152379],{"class":78,"line":157},[76,152370,16747],{"class":82},[76,152372,152373],{"class":86}," Dog",[76,152375,123],{"class":90},[76,152377,152378],{"class":86},"Animal",[76,152380,32830],{"class":90},[76,152382,152383,152385,152388],{"class":78,"line":246},[76,152384,32845],{"class":82},[76,152386,152387],{"class":86}," bark",[76,152389,32851],{"class":90},[76,152391,152392,152394,152396,152399],{"class":78,"line":251},[76,152393,1701],{"class":119},[76,152395,123],{"class":90},[76,152397,152398],{"class":126},"\"汪汪\"",[76,152400,130],{"class":90},[76,152402,152403],{"class":78,"line":257},[76,152404,149],{"emptyLinePlaceholder":148},[76,152406,152407],{"class":78,"line":641},[76,152408,149],{"emptyLinePlaceholder":148},[76,152410,152411,152414,152416],{"class":78,"line":646},[76,152412,152413],{"class":90},"dog ",[76,152415,370],{"class":82},[76,152417,152418],{"class":90}," Dog()\n",[76,152420,152421],{"class":78,"line":659},[76,152422,152423],{"class":90},"dog.eat()\n",[76,152425,152426],{"class":78,"line":1608},[76,152427,152428],{"class":90},"dog.bark()\n",[19,152430,152431],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152433,152435],{"id":152434},"_119-方法重写","11.9 方法重写",[66,152437,152439],{"className":68,"code":152438,"language":70,"meta":71,"style":71},"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",[73,152440,152441,152449,152458,152469,152473,152477,152489,152497,152507,152511,152515,152528,152536,152547,152551,152555,152563,152573,152577,152582],{"__ignoreMap":71},[76,152442,152443,152445,152447],{"class":78,"line":79},[76,152444,16747],{"class":82},[76,152446,152336],{"class":86},[76,152448,590],{"class":90},[76,152450,152451,152453,152456],{"class":78,"line":94},[76,152452,32845],{"class":82},[76,152454,152455],{"class":86}," speak",[76,152457,32851],{"class":90},[76,152459,152460,152462,152464,152467],{"class":78,"line":133},[76,152461,1701],{"class":119},[76,152463,123],{"class":90},[76,152465,152466],{"class":126},"\"动物叫\"",[76,152468,130],{"class":90},[76,152470,152471],{"class":78,"line":145},[76,152472,149],{"emptyLinePlaceholder":148},[76,152474,152475],{"class":78,"line":152},[76,152476,149],{"emptyLinePlaceholder":148},[76,152478,152479,152481,152483,152485,152487],{"class":78,"line":157},[76,152480,16747],{"class":82},[76,152482,152373],{"class":86},[76,152484,123],{"class":90},[76,152486,152378],{"class":86},[76,152488,32830],{"class":90},[76,152490,152491,152493,152495],{"class":78,"line":246},[76,152492,32845],{"class":82},[76,152494,152455],{"class":86},[76,152496,32851],{"class":90},[76,152498,152499,152501,152503,152505],{"class":78,"line":251},[76,152500,1701],{"class":119},[76,152502,123],{"class":90},[76,152504,152398],{"class":126},[76,152506,130],{"class":90},[76,152508,152509],{"class":78,"line":257},[76,152510,149],{"emptyLinePlaceholder":148},[76,152512,152513],{"class":78,"line":641},[76,152514,149],{"emptyLinePlaceholder":148},[76,152516,152517,152519,152522,152524,152526],{"class":78,"line":646},[76,152518,16747],{"class":82},[76,152520,152521],{"class":86}," Cat",[76,152523,123],{"class":90},[76,152525,152378],{"class":86},[76,152527,32830],{"class":90},[76,152529,152530,152532,152534],{"class":78,"line":659},[76,152531,32845],{"class":82},[76,152533,152455],{"class":86},[76,152535,32851],{"class":90},[76,152537,152538,152540,152542,152545],{"class":78,"line":1608},[76,152539,1701],{"class":119},[76,152541,123],{"class":90},[76,152543,152544],{"class":126},"\"喵喵\"",[76,152546,130],{"class":90},[76,152548,152549],{"class":78,"line":1632},[76,152550,149],{"emptyLinePlaceholder":148},[76,152552,152553],{"class":78,"line":1637},[76,152554,149],{"emptyLinePlaceholder":148},[76,152556,152557,152559,152561],{"class":78,"line":1642},[76,152558,152413],{"class":90},[76,152560,370],{"class":82},[76,152562,152418],{"class":90},[76,152564,152565,152568,152570],{"class":78,"line":1652},[76,152566,152567],{"class":90},"cat ",[76,152569,370],{"class":82},[76,152571,152572],{"class":90}," Cat()\n",[76,152574,152575],{"class":78,"line":1660},[76,152576,149],{"emptyLinePlaceholder":148},[76,152578,152579],{"class":78,"line":1683},[76,152580,152581],{"class":90},"dog.speak()\n",[76,152583,152584],{"class":78,"line":1698},[76,152585,152586],{"class":90},"cat.speak()\n",[14,152588,152590],{"id":152589},"_1110-super","11.10 super",[19,152592,152593,152594,152597],{},"子类可以通过 ",[73,152595,152596],{},"super()"," 调用父类方法。",[66,152599,152601],{"className":68,"code":152600,"language":70,"meta":71,"style":71},"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",[73,152602,152603,152611,152620,152630,152634,152638,152650,152659,152669,152679,152683,152687,152703],{"__ignoreMap":71},[76,152604,152605,152607,152609],{"class":78,"line":79},[76,152606,16747],{"class":82},[76,152608,17620],{"class":86},[76,152610,590],{"class":90},[76,152612,152613,152615,152617],{"class":78,"line":94},[76,152614,32845],{"class":82},[76,152616,32848],{"class":119},[76,152618,152619],{"class":90},"(self, name):\n",[76,152621,152622,152624,152626,152628],{"class":78,"line":133},[76,152623,32889],{"class":119},[76,152625,151805],{"class":90},[76,152627,370],{"class":82},[76,152629,151810],{"class":90},[76,152631,152632],{"class":78,"line":145},[76,152633,149],{"emptyLinePlaceholder":148},[76,152635,152636],{"class":78,"line":152},[76,152637,149],{"emptyLinePlaceholder":148},[76,152639,152640,152642,152644,152646,152648],{"class":78,"line":157},[76,152641,16747],{"class":82},[76,152643,9976],{"class":86},[76,152645,123],{"class":90},[76,152647,21095],{"class":86},[76,152649,32830],{"class":90},[76,152651,152652,152654,152656],{"class":78,"line":246},[76,152653,32845],{"class":82},[76,152655,32848],{"class":119},[76,152657,152658],{"class":90},"(self, name, score):\n",[76,152660,152661,152663,152665,152667],{"class":78,"line":251},[76,152662,32861],{"class":119},[76,152664,19310],{"class":90},[76,152666,32873],{"class":119},[76,152668,994],{"class":90},[76,152670,152671,152673,152675,152677],{"class":78,"line":257},[76,152672,32889],{"class":119},[76,152674,151829],{"class":90},[76,152676,370],{"class":82},[76,152678,3699],{"class":90},[76,152680,152681],{"class":78,"line":641},[76,152682,149],{"emptyLinePlaceholder":148},[76,152684,152685],{"class":78,"line":646},[76,152686,149],{"emptyLinePlaceholder":148},[76,152688,152689,152691,152693,152695,152697,152699,152701],{"class":78,"line":659},[76,152690,151496],{"class":90},[76,152692,370],{"class":82},[76,152694,151900],{"class":90},[76,152696,325],{"class":126},[76,152698,405],{"class":90},[76,152700,3243],{"class":119},[76,152702,130],{"class":90},[76,152704,152705,152707],{"class":78,"line":1608},[76,152706,478],{"class":119},[76,152708,152709],{"class":90},"(student.name, student.score)\n",[14,152711,152713],{"id":152712},"_1111-多态","11.11 多态",[19,152715,152716],{},"多态指不同对象响应同一个方法，表现出不同结果。",[66,152718,152720],{"className":68,"code":152719,"language":70,"meta":71,"style":71},"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",[73,152721,152722,152730,152738,152748,152752,152756,152764,152772,152782,152786,152790,152800,152805,152809,152813,152818],{"__ignoreMap":71},[76,152723,152724,152726,152728],{"class":78,"line":79},[76,152725,16747],{"class":82},[76,152727,152373],{"class":86},[76,152729,590],{"class":90},[76,152731,152732,152734,152736],{"class":78,"line":94},[76,152733,32845],{"class":82},[76,152735,152455],{"class":86},[76,152737,32851],{"class":90},[76,152739,152740,152742,152744,152746],{"class":78,"line":133},[76,152741,1701],{"class":119},[76,152743,123],{"class":90},[76,152745,152398],{"class":126},[76,152747,130],{"class":90},[76,152749,152750],{"class":78,"line":145},[76,152751,149],{"emptyLinePlaceholder":148},[76,152753,152754],{"class":78,"line":152},[76,152755,149],{"emptyLinePlaceholder":148},[76,152757,152758,152760,152762],{"class":78,"line":157},[76,152759,16747],{"class":82},[76,152761,152521],{"class":86},[76,152763,590],{"class":90},[76,152765,152766,152768,152770],{"class":78,"line":246},[76,152767,32845],{"class":82},[76,152769,152455],{"class":86},[76,152771,32851],{"class":90},[76,152773,152774,152776,152778,152780],{"class":78,"line":251},[76,152775,1701],{"class":119},[76,152777,123],{"class":90},[76,152779,152544],{"class":126},[76,152781,130],{"class":90},[76,152783,152784],{"class":78,"line":257},[76,152785,149],{"emptyLinePlaceholder":148},[76,152787,152788],{"class":78,"line":641},[76,152789,149],{"emptyLinePlaceholder":148},[76,152791,152792,152794,152797],{"class":78,"line":646},[76,152793,83],{"class":82},[76,152795,152796],{"class":86}," make_sound",[76,152798,152799],{"class":90},"(animal):\n",[76,152801,152802],{"class":78,"line":659},[76,152803,152804],{"class":90},"    animal.speak()\n",[76,152806,152807],{"class":78,"line":1608},[76,152808,149],{"emptyLinePlaceholder":148},[76,152810,152811],{"class":78,"line":1632},[76,152812,149],{"emptyLinePlaceholder":148},[76,152814,152815],{"class":78,"line":1637},[76,152816,152817],{"class":90},"make_sound(Dog())\n",[76,152819,152820],{"class":78,"line":1642},[76,152821,152822],{"class":90},"make_sound(Cat())\n",[19,152824,152825],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152827,152829],{"id":152828},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152831,152832],{},"实例属性属于对象：",[66,152834,152836],{"className":68,"code":152835,"language":70,"meta":71,"style":71},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[73,152837,152838,152846,152854],{"__ignoreMap":71},[76,152839,152840,152842,152844],{"class":78,"line":79},[76,152841,16747],{"class":82},[76,152843,9976],{"class":86},[76,152845,590],{"class":90},[76,152847,152848,152850,152852],{"class":78,"line":94},[76,152849,32845],{"class":82},[76,152851,32848],{"class":119},[76,152853,152619],{"class":90},[76,152855,152856,152858,152860,152862],{"class":78,"line":133},[76,152857,32889],{"class":119},[76,152859,151805],{"class":90},[76,152861,370],{"class":82},[76,152863,151810],{"class":90},[19,152865,152866],{},"类属性属于类，所有对象共享：",[66,152868,152870],{"className":68,"code":152869,"language":70,"meta":71,"style":71},"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",[73,152871,152872,152880,152890,152894,152902,152912,152916,152920,152933,152946,152950,152957,152964],{"__ignoreMap":71},[76,152873,152874,152876,152878],{"class":78,"line":79},[76,152875,16747],{"class":82},[76,152877,9976],{"class":86},[76,152879,590],{"class":90},[76,152881,152882,152885,152887],{"class":78,"line":94},[76,152883,152884],{"class":90},"    school ",[76,152886,370],{"class":82},[76,152888,152889],{"class":126}," \"黑马学校\"\n",[76,152891,152892],{"class":78,"line":133},[76,152893,149],{"emptyLinePlaceholder":148},[76,152895,152896,152898,152900],{"class":78,"line":145},[76,152897,32845],{"class":82},[76,152899,32848],{"class":119},[76,152901,152619],{"class":90},[76,152903,152904,152906,152908,152910],{"class":78,"line":152},[76,152905,32889],{"class":119},[76,152907,151805],{"class":90},[76,152909,370],{"class":82},[76,152911,151810],{"class":90},[76,152913,152914],{"class":78,"line":157},[76,152915,149],{"emptyLinePlaceholder":148},[76,152917,152918],{"class":78,"line":246},[76,152919,149],{"emptyLinePlaceholder":148},[76,152921,152922,152925,152927,152929,152931],{"class":78,"line":251},[76,152923,152924],{"class":90},"s1 ",[76,152926,370],{"class":82},[76,152928,151900],{"class":90},[76,152930,325],{"class":126},[76,152932,130],{"class":90},[76,152934,152935,152938,152940,152942,152944],{"class":78,"line":257},[76,152936,152937],{"class":90},"s2 ",[76,152939,370],{"class":82},[76,152941,151900],{"class":90},[76,152943,334],{"class":126},[76,152945,130],{"class":90},[76,152947,152948],{"class":78,"line":641},[76,152949,149],{"emptyLinePlaceholder":148},[76,152951,152952,152954],{"class":78,"line":646},[76,152953,478],{"class":119},[76,152955,152956],{"class":90},"(s1.school)\n",[76,152958,152959,152961],{"class":78,"line":659},[76,152960,478],{"class":119},[76,152962,152963],{"class":90},"(s2.school)\n",[76,152965,152966,152968],{"class":78,"line":1608},[76,152967,478],{"class":119},[76,152969,152970],{"class":90},"(Student.school)\n",[19,152972,152973],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152975,152977],{"id":152976},"_1113-类方法和静态方法","11.13 类方法和静态方法",[889,152979,152981],{"id":152980},"_11131-类方法","11.13.1 类方法",[19,152983,152984,152985,152988,152989,490],{},"类方法使用 ",[73,152986,152987],{},"@classmethod","，第一个参数通常是 ",[73,152990,152991],{},"cls",[66,152993,152995],{"className":68,"code":152994,"language":70,"meta":71,"style":71},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[73,152996,152997,153005,153013,153017,153025,153035,153045,153049,153053],{"__ignoreMap":71},[76,152998,152999,153001,153003],{"class":78,"line":79},[76,153000,16747],{"class":82},[76,153002,9976],{"class":86},[76,153004,590],{"class":90},[76,153006,153007,153009,153011],{"class":78,"line":94},[76,153008,152884],{"class":90},[76,153010,370],{"class":82},[76,153012,152889],{"class":126},[76,153014,153015],{"class":78,"line":133},[76,153016,149],{"emptyLinePlaceholder":148},[76,153018,153019,153022],{"class":78,"line":145},[76,153020,153021],{"class":86},"    @",[76,153023,153024],{"class":119},"classmethod\n",[76,153026,153027,153029,153032],{"class":78,"line":152},[76,153028,32845],{"class":82},[76,153030,153031],{"class":86}," get_school",[76,153033,153034],{"class":90},"(cls):\n",[76,153036,153037,153039,153042],{"class":78,"line":157},[76,153038,595],{"class":82},[76,153040,153041],{"class":119}," cls",[76,153043,153044],{"class":90},".school\n",[76,153046,153047],{"class":78,"line":246},[76,153048,149],{"emptyLinePlaceholder":148},[76,153050,153051],{"class":78,"line":251},[76,153052,149],{"emptyLinePlaceholder":148},[76,153054,153055,153057],{"class":78,"line":257},[76,153056,478],{"class":119},[76,153058,153059],{"class":90},"(Student.get_school())\n",[889,153061,153063],{"id":153062},"_11132-静态方法","11.13.2 静态方法",[19,153065,153066,153067,153070],{},"静态方法使用 ",[73,153068,153069],{},"@staticmethod","，不需要访问实例和类。",[66,153072,153074],{"className":68,"code":153073,"language":70,"meta":71,"style":71},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[73,153075,153076,153085,153092,153100,153110,153114,153118],{"__ignoreMap":71},[76,153077,153078,153080,153083],{"class":78,"line":79},[76,153079,16747],{"class":82},[76,153081,153082],{"class":86}," MathUtils",[76,153084,590],{"class":90},[76,153086,153087,153089],{"class":78,"line":94},[76,153088,153021],{"class":86},[76,153090,153091],{"class":119},"staticmethod\n",[76,153093,153094,153096,153098],{"class":78,"line":133},[76,153095,32845],{"class":82},[76,153097,359],{"class":86},[76,153099,362],{"class":90},[76,153101,153102,153104,153106,153108],{"class":78,"line":145},[76,153103,595],{"class":82},[76,153105,373],{"class":90},[76,153107,376],{"class":82},[76,153109,379],{"class":90},[76,153111,153112],{"class":78,"line":152},[76,153113,149],{"emptyLinePlaceholder":148},[76,153115,153116],{"class":78,"line":157},[76,153117,149],{"emptyLinePlaceholder":148},[76,153119,153120,153122,153125,153127,153129,153131],{"class":78,"line":246},[76,153121,478],{"class":119},[76,153123,153124],{"class":90},"(MathUtils.add(",[76,153126,669],{"class":119},[76,153128,405],{"class":90},[76,153130,2345],{"class":119},[76,153132,656],{"class":90},[19,153134,153135],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153137,153139],{"id":153138},"_1114-dataclass","11.14 dataclass",[19,153141,153142,153145],{},[73,153143,153144],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[66,153147,153149],{"className":68,"code":153148,"language":70,"meta":71,"style":71},"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",[73,153150,153151,153163,153167,153171,153176,153184,153192,153200,153208,153212,153216,153236],{"__ignoreMap":71},[76,153152,153153,153155,153158,153160],{"class":78,"line":79},[76,153154,32781],{"class":82},[76,153156,153157],{"class":90}," dataclasses ",[76,153159,32438],{"class":82},[76,153161,153162],{"class":90}," dataclass\n",[76,153164,153165],{"class":78,"line":94},[76,153166,149],{"emptyLinePlaceholder":148},[76,153168,153169],{"class":78,"line":133},[76,153170,149],{"emptyLinePlaceholder":148},[76,153172,153173],{"class":78,"line":145},[76,153174,153175],{"class":86},"@dataclass\n",[76,153177,153178,153180,153182],{"class":78,"line":152},[76,153179,16747],{"class":82},[76,153181,9976],{"class":86},[76,153183,590],{"class":90},[76,153185,153186,153189],{"class":78,"line":157},[76,153187,153188],{"class":90},"    name: ",[76,153190,153191],{"class":119},"str\n",[76,153193,153194,153197],{"class":78,"line":246},[76,153195,153196],{"class":90},"    age: ",[76,153198,153199],{"class":119},"int\n",[76,153201,153202,153205],{"class":78,"line":251},[76,153203,153204],{"class":90},"    score: ",[76,153206,153207],{"class":119},"float\n",[76,153209,153210],{"class":78,"line":257},[76,153211,149],{"emptyLinePlaceholder":148},[76,153213,153214],{"class":78,"line":641},[76,153215,149],{"emptyLinePlaceholder":148},[76,153217,153218,153220,153222,153224,153226,153228,153230,153232,153234],{"class":78,"line":646},[76,153219,151496],{"class":90},[76,153221,370],{"class":82},[76,153223,151900],{"class":90},[76,153225,325],{"class":126},[76,153227,405],{"class":90},[76,153229,1214],{"class":119},[76,153231,405],{"class":90},[76,153233,3243],{"class":119},[76,153235,130],{"class":90},[76,153237,153238,153240],{"class":78,"line":659},[76,153239,478],{"class":119},[76,153241,152056],{"class":90},[19,153243,153244,153245,2478,153247,153250],{},"它会自动生成 ",[73,153246,32873],{},[73,153248,153249],{},"__repr__"," 等方法。适合数据模型类。",[14,153252,153254],{"id":153253},"_1115-小案例学生类","11.15 小案例：学生类",[66,153256,153258],{"className":68,"code":153257,"language":70,"meta":71,"style":71},"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",[73,153259,153260,153268,153277,153289,153299,153309,153319,153323,153332,153345,153349,153358,153364,153376,153388,153400,153412,153416,153420,153426,153436,153445,153455,153463,153471,153480,153484,153488,153496,153532,153536,153540,153565,153572],{"__ignoreMap":71},[76,153261,153262,153264,153266],{"class":78,"line":79},[76,153263,16747],{"class":82},[76,153265,9976],{"class":86},[76,153267,590],{"class":90},[76,153269,153270,153272,153274],{"class":78,"line":94},[76,153271,32845],{"class":82},[76,153273,32848],{"class":119},[76,153275,153276],{"class":90},"(self, student_id, name, age, score):\n",[76,153278,153279,153281,153284,153286],{"class":78,"line":133},[76,153280,32889],{"class":119},[76,153282,153283],{"class":90},".student_id ",[76,153285,370],{"class":82},[76,153287,153288],{"class":90}," student_id\n",[76,153290,153291,153293,153295,153297],{"class":78,"line":145},[76,153292,32889],{"class":119},[76,153294,151805],{"class":90},[76,153296,370],{"class":82},[76,153298,151810],{"class":90},[76,153300,153301,153303,153305,153307],{"class":78,"line":152},[76,153302,32889],{"class":119},[76,153304,151817],{"class":90},[76,153306,370],{"class":82},[76,153308,151822],{"class":90},[76,153310,153311,153313,153315,153317],{"class":78,"line":157},[76,153312,32889],{"class":119},[76,153314,151829],{"class":90},[76,153316,370],{"class":82},[76,153318,3699],{"class":90},[76,153320,153321],{"class":78,"line":246},[76,153322,149],{"emptyLinePlaceholder":148},[76,153324,153325,153327,153330],{"class":78,"line":251},[76,153326,32845],{"class":82},[76,153328,153329],{"class":86}," is_passed",[76,153331,32851],{"class":90},[76,153333,153334,153336,153338,153340,153342],{"class":78,"line":257},[76,153335,595],{"class":82},[76,153337,40911],{"class":119},[76,153339,151829],{"class":90},[76,153341,611],{"class":82},[76,153343,153344],{"class":119}," 60\n",[76,153346,153347],{"class":78,"line":641},[76,153348,149],{"emptyLinePlaceholder":148},[76,153350,153351,153353,153356],{"class":78,"line":646},[76,153352,32845],{"class":82},[76,153354,153355],{"class":86}," to_dict",[76,153357,32851],{"class":90},[76,153359,153360,153362],{"class":78,"line":659},[76,153361,595],{"class":82},[76,153363,17623],{"class":90},[76,153365,153366,153369,153371,153373],{"class":78,"line":1608},[76,153367,153368],{"class":126},"            \"student_id\"",[76,153370,53469],{"class":90},[76,153372,32867],{"class":119},[76,153374,153375],{"class":90},".student_id,\n",[76,153377,153378,153381,153383,153385],{"class":78,"line":1632},[76,153379,153380],{"class":126},"            \"name\"",[76,153382,53469],{"class":90},[76,153384,32867],{"class":119},[76,153386,153387],{"class":90},".name,\n",[76,153389,153390,153393,153395,153397],{"class":78,"line":1637},[76,153391,153392],{"class":126},"            \"age\"",[76,153394,53469],{"class":90},[76,153396,32867],{"class":119},[76,153398,153399],{"class":90},".age,\n",[76,153401,153402,153405,153407,153409],{"class":78,"line":1642},[76,153403,153404],{"class":126},"            \"score\"",[76,153406,53469],{"class":90},[76,153408,32867],{"class":119},[76,153410,153411],{"class":90},".score,\n",[76,153413,153414],{"class":78,"line":1652},[76,153415,4624],{"class":90},[76,153417,153418],{"class":78,"line":1660},[76,153419,149],{"emptyLinePlaceholder":148},[76,153421,153422,153424],{"class":78,"line":1683},[76,153423,153021],{"class":86},[76,153425,153024],{"class":119},[76,153427,153428,153430,153433],{"class":78,"line":1698},[76,153429,32845],{"class":82},[76,153431,153432],{"class":86}," from_dict",[76,153434,153435],{"class":90},"(cls, data):\n",[76,153437,153438,153440,153442],{"class":78,"line":1711},[76,153439,595],{"class":82},[76,153441,153041],{"class":119},[76,153443,153444],{"class":90},"(\n",[76,153446,153447,153450,153453],{"class":78,"line":1717},[76,153448,153449],{"class":90},"            data[",[76,153451,153452],{"class":126},"\"student_id\"",[76,153454,89860],{"class":90},[76,153456,153457,153459,153461],{"class":78,"line":1728},[76,153458,153449],{"class":90},[76,153460,64707],{"class":126},[76,153462,89860],{"class":90},[76,153464,153465,153467,153469],{"class":78,"line":1740},[76,153466,153449],{"class":90},[76,153468,71152],{"class":126},[76,153470,89860],{"class":90},[76,153472,153473,153475,153478],{"class":78,"line":1746},[76,153474,153449],{"class":90},[76,153476,153477],{"class":126},"\"score\"",[76,153479,89860],{"class":90},[76,153481,153482],{"class":78,"line":1751},[76,153483,40164],{"class":90},[76,153485,153486],{"class":78,"line":1756},[76,153487,149],{"emptyLinePlaceholder":148},[76,153489,153490,153492,153494],{"class":78,"line":1766},[76,153491,32845],{"class":82},[76,153493,151995],{"class":119},[76,153495,32851],{"class":90},[76,153497,153498,153500,153502,153504,153506,153509,153511,153514,153516,153518,153520,153522,153524,153526,153528,153530],{"class":78,"line":1773},[76,153499,595],{"class":82},[76,153501,152004],{"class":82},[76,153503,307],{"class":126},[76,153505,151467],{"class":119},[76,153507,153508],{"class":90},".student_id",[76,153510,304],{"class":119},[76,153512,153513],{"class":119}," {self",[76,153515,82325],{"class":90},[76,153517,304],{"class":119},[76,153519,153513],{"class":119},[76,153521,82337],{"class":90},[76,153523,304],{"class":119},[76,153525,153513],{"class":119},[76,153527,151877],{"class":90},[76,153529,304],{"class":119},[76,153531,27183],{"class":126},[76,153533,153534],{"class":78,"line":1793},[76,153535,149],{"emptyLinePlaceholder":148},[76,153537,153538],{"class":78,"line":1806},[76,153539,149],{"emptyLinePlaceholder":148},[76,153541,153542,153544,153546,153548,153551,153553,153555,153557,153559,153561,153563],{"class":78,"line":1817},[76,153543,151496],{"class":90},[76,153545,370],{"class":82},[76,153547,151900],{"class":90},[76,153549,153550],{"class":126},"\"001\"",[76,153552,405],{"class":90},[76,153554,325],{"class":126},[76,153556,405],{"class":90},[76,153558,1214],{"class":119},[76,153560,405],{"class":90},[76,153562,3243],{"class":119},[76,153564,130],{"class":90},[76,153566,153567,153569],{"class":78,"line":1822},[76,153568,478],{"class":119},[76,153570,153571],{"class":90},"(student.is_passed())\n",[76,153573,153574,153576],{"class":78,"line":1835},[76,153575,478],{"class":119},[76,153577,153578],{"class":90},"(student.to_dict())\n",[19,153580,153581,103040,153584,153587],{},[73,153582,153583],{},"to_dict()",[73,153585,153586],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153589,153591],{"id":153590},"_1116-易错点","11.16 易错点",[26,153593,153594,153600,153606,153611,153614,153617],{},[29,153595,153596,153597,490],{},"类名推荐使用大驼峰，如 ",[73,153598,153599],{},"StudentManager",[29,153601,153602,153603,153605],{},"方法第一个参数必须写 ",[73,153604,32867],{},"，调用时不用传。",[29,153607,153608,153610],{},[73,153609,32873],{}," 不是普通方法，它在创建对象时自动执行。",[29,153612,153613],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,153615,153616],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,153618,153619],{},"类中方法太多时，说明职责可能过重。",[14,153621,153623],{"id":153622},"_1117-本章练习","11.17 本章练习",[26,153625,153626,153632,153638,153643,153656],{},[29,153627,153628,153629,153631],{},"定义 ",[73,153630,151583],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,153633,153628,153634,153637],{},[73,153635,153636],{},"Account"," 类，实现存款、取款、查询余额。",[29,153639,153628,153640,153642],{},[73,153641,19275],{}," 类，计算圆的周长和面积。",[29,153644,153628,153645,2478,153648,153651,153652,153655],{},[73,153646,153647],{},"Dog",[73,153649,153650],{},"Cat"," 类，并用同一个函数调用它们的 ",[73,153653,153654],{},"speak()"," 方法。",[29,153657,106388,153658,153660,153661,490],{},[73,153659,153144],{}," 定义一个商品类 ",[73,153662,153663],{},"Product",[2178,153665,153666],{},"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":71,"searchDepth":94,"depth":94,"links":153668},[153669,153670,153671,153672,153673,153674,153676,153677,153678,153679,153680,153681,153682,153686,153687,153688,153689],{"id":151349,"depth":94,"text":151350},{"id":151530,"depth":94,"text":151531},{"id":151594,"depth":94,"text":151595},{"id":151671,"depth":94,"text":151672},{"id":151770,"depth":94,"text":151771},{"id":151933,"depth":94,"text":153675},"11.6 str",{"id":152059,"depth":94,"text":152060},{"id":152320,"depth":94,"text":152321},{"id":152434,"depth":94,"text":152435},{"id":152589,"depth":94,"text":152590},{"id":152712,"depth":94,"text":152713},{"id":152828,"depth":94,"text":152829},{"id":152976,"depth":94,"text":152977,"children":153683},[153684,153685],{"id":152980,"depth":133,"text":152981},{"id":153062,"depth":133,"text":153063},{"id":153138,"depth":94,"text":153139},{"id":153253,"depth":94,"text":153254},{"id":153590,"depth":94,"text":153591},{"id":153622,"depth":94,"text":153623},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151341,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153696,"title":153697,"body":153698,"description":2201,"extension":2202,"meta":157000,"navigation":148,"path":157001,"seo":157002,"stem":157003,"__hash__":157004},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153699,"toc":156976},[153700,153703,153707,153710,153713,153742,153745,153753,153757,153761,153764,153787,153790,153796,153800,155235,155238,155259,155263,155266,155278,155281,155465,155468,155594,155597,155601,155605,155741,155745,155831,155835,155917,155921,155958,155962,156151,156155,156158,156388,156392,156395,156576,156579,156583,156586,156592,156595,156621,156625,156628,156642,156645,156670,156673,156687,156690,156707,156710,156727,156730,156747,156751,156777,156781,156804,156808,156811,156813,156819,156821,156842,156845,156851,156857,156861,156864,156940,156943,156947,156973],[10,153701,153697],{"id":153702},"_12-综合案例与复习路线",[14,153704,153706],{"id":153705},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153708,153709],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153711,153712],{},"一个合格的入门综合项目最好覆盖：",[26,153714,153715,153718,153721,153724,153727,153730,153733,153736,153739],{},[29,153716,153717],{},"输入输出。",[29,153719,153720],{},"判断和循环。",[29,153722,153723],{},"函数拆分。",[29,153725,153726],{},"列表、字典等容器。",[29,153728,153729],{},"文件持久化。",[29,153731,153732],{},"异常处理。",[29,153734,153735],{},"模块拆分。",[29,153737,153738],{},"可选：面向对象。",[29,153740,153741],{},"可选：数据可视化。",[19,153743,153744],{},"本章整理两个方向：",[26,153746,153747,153750],{},[29,153748,153749],{},"学生管理系统。",[29,153751,153752],{},"销售数据统计和可视化。",[14,153754,153756],{"id":153755},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[889,153758,153760],{"id":153759},"_1221-需求","12.2.1 需求",[19,153762,153763],{},"实现一个命令行学生管理系统：",[26,153765,153766,153769,153772,153775,153778,153781,153784],{},[29,153767,153768],{},"添加学生。",[29,153770,153771],{},"删除学生。",[29,153773,153774],{},"修改学生。",[29,153776,153777],{},"查询学生。",[29,153779,153780],{},"显示所有学生。",[29,153782,153783],{},"保存到 JSON 文件。",[29,153785,153786],{},"程序启动时自动读取 JSON 文件。",[19,153788,153789],{},"学生字段：",[66,153791,153794],{"className":153792,"code":153793,"language":7268,"meta":71},[7266],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[73,153795,153793],{"__ignoreMap":71},[14,153797,153799],{"id":153798},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[66,153801,153803],{"className":68,"code":153802,"language":70,"meta":71,"style":71},"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",[73,153804,153805,153811,153821,153825,153839,153843,153847,153856,153868,153874,153878,153884,153915,153925,153932,153943,153949,153953,153957,153967,153998,154024,154028,154032,154040,154051,154062,154073,154084,154095,154106,154117,154121,154125,154135,154147,154163,154170,154176,154180,154184,154194,154202,154209,154222,154232,154243,154247,154251,154260,154268,154274,154286,154294,154305,154309,154313,154322,154338,154342,154349,154360,154364,154368,154384,154399,154414,154418,154423,154431,154439,154447,154455,154459,154464,154475,154479,154483,154492,154507,154517,154521,154533,154544,154548,154552,154557,154561,154572,154576,154580,154589,154604,154612,154616,154628,154638,154642,154646,154661,154674,154687,154691,154704,154716,154728,154732,154736,154747,154751,154755,154764,154779,154787,154791,154803,154813,154817,154821,154826,154830,154834,154844,154850,154872,154891,154910,154929,154934,154938,154942,154951,154959,154970,154974,154978,155004,155014,155019,155023,155027,155035,155045,155049,155057,155062,155077,155081,155093,155098,155111,155116,155128,155133,155146,155151,155164,155169,155181,155191,155195,155201,155211,155215,155219,155231],{"__ignoreMap":71},[76,153806,153807,153809],{"class":78,"line":79},[76,153808,32438],{"class":82},[76,153810,149108],{"class":90},[76,153812,153813,153815,153817,153819],{"class":78,"line":94},[76,153814,32781],{"class":82},[76,153816,110333],{"class":90},[76,153818,32438],{"class":82},[76,153820,110338],{"class":90},[76,153822,153823],{"class":78,"line":133},[76,153824,149],{"emptyLinePlaceholder":148},[76,153826,153827,153830,153832,153834,153837],{"class":78,"line":145},[76,153828,153829],{"class":119},"DATA_FILE",[76,153831,15617],{"class":82},[76,153833,110567],{"class":90},[76,153835,153836],{"class":126},"\"students.json\"",[76,153838,130],{"class":90},[76,153840,153841],{"class":78,"line":152},[76,153842,149],{"emptyLinePlaceholder":148},[76,153844,153845],{"class":78,"line":157},[76,153846,149],{"emptyLinePlaceholder":148},[76,153848,153849,153851,153854],{"class":78,"line":246},[76,153850,83],{"class":82},[76,153852,153853],{"class":86}," load_students",[76,153855,91],{"class":90},[76,153857,153858,153860,153862,153865],{"class":78,"line":251},[76,153859,578],{"class":82},[76,153861,40967],{"class":82},[76,153863,153864],{"class":119}," DATA_FILE",[76,153866,153867],{"class":90},".exists():\n",[76,153869,153870,153872],{"class":78,"line":257},[76,153871,595],{"class":82},[76,153873,53870],{"class":90},[76,153875,153876],{"class":78,"line":641},[76,153877,149],{"emptyLinePlaceholder":148},[76,153879,153880,153882],{"class":78,"line":646},[76,153881,127804],{"class":82},[76,153883,590],{"class":90},[76,153885,153886,153889,153891,153893,153895,153897,153899,153901,153903,153905,153907,153909,153911,153913],{"class":78,"line":659},[76,153887,153888],{"class":82},"        with",[76,153890,148808],{"class":119},[76,153892,123],{"class":90},[76,153894,153829],{"class":119},[76,153896,405],{"class":90},[76,153898,148818],{"class":126},[76,153900,405],{"class":90},[76,153902,148823],{"class":7296},[76,153904,370],{"class":82},[76,153906,148828],{"class":126},[76,153908,15767],{"class":90},[76,153910,33426],{"class":82},[76,153912,150170],{"class":7296},[76,153914,590],{"class":90},[76,153916,153917,153919,153921,153923],{"class":78,"line":1608},[76,153918,17782],{"class":82},[76,153920,150181],{"class":90},[76,153922,47389],{"class":7296},[76,153924,130],{"class":90},[76,153926,153927,153929],{"class":78,"line":1632},[76,153928,127832],{"class":82},[76,153930,153931],{"class":90}," json.JSONDecodeError:\n",[76,153933,153934,153936,153938,153941],{"class":78,"line":1637},[76,153935,1701],{"class":119},[76,153937,123],{"class":90},[76,153939,153940],{"class":126},"\"数据文件格式错误，已使用空数据启动\"",[76,153942,130],{"class":90},[76,153944,153945,153947],{"class":78,"line":1642},[76,153946,595],{"class":82},[76,153948,53870],{"class":90},[76,153950,153951],{"class":78,"line":1652},[76,153952,149],{"emptyLinePlaceholder":148},[76,153954,153955],{"class":78,"line":1660},[76,153956,149],{"emptyLinePlaceholder":148},[76,153958,153959,153961,153964],{"class":78,"line":1683},[76,153960,83],{"class":82},[76,153962,153963],{"class":86}," save_students",[76,153965,153966],{"class":90},"(students):\n",[76,153968,153969,153971,153973,153975,153977,153979,153982,153984,153986,153988,153990,153992,153994,153996],{"class":78,"line":1698},[76,153970,36216],{"class":82},[76,153972,148808],{"class":119},[76,153974,123],{"class":90},[76,153976,153829],{"class":119},[76,153978,405],{"class":90},[76,153980,153981],{"class":126},"\"w\"",[76,153983,405],{"class":90},[76,153985,148823],{"class":7296},[76,153987,370],{"class":82},[76,153989,148828],{"class":126},[76,153991,15767],{"class":90},[76,153993,33426],{"class":82},[76,153995,150170],{"class":7296},[76,153997,590],{"class":90},[76,153999,154000,154003,154005,154007,154009,154011,154013,154015,154018,154020,154022],{"class":78,"line":1711},[76,154001,154002],{"class":90},"        json.dump(students, ",[76,154004,47389],{"class":7296},[76,154006,405],{"class":90},[76,154008,149154],{"class":7296},[76,154010,370],{"class":82},[76,154012,36025],{"class":119},[76,154014,405],{"class":90},[76,154016,154017],{"class":7296},"indent",[76,154019,370],{"class":82},[76,154021,2345],{"class":119},[76,154023,130],{"class":90},[76,154025,154026],{"class":78,"line":1717},[76,154027,149],{"emptyLinePlaceholder":148},[76,154029,154030],{"class":78,"line":1728},[76,154031,149],{"emptyLinePlaceholder":148},[76,154033,154034,154036,154038],{"class":78,"line":1740},[76,154035,83],{"class":82},[76,154037,1532],{"class":86},[76,154039,91],{"class":90},[76,154041,154042,154044,154046,154049],{"class":78,"line":1746},[76,154043,120],{"class":119},[76,154045,123],{"class":90},[76,154047,154048],{"class":126},"\"====== 学生管理系统 ======\"",[76,154050,130],{"class":90},[76,154052,154053,154055,154057,154060],{"class":78,"line":1751},[76,154054,120],{"class":119},[76,154056,123],{"class":90},[76,154058,154059],{"class":126},"\"1. 添加学生\"",[76,154061,130],{"class":90},[76,154063,154064,154066,154068,154071],{"class":78,"line":1756},[76,154065,120],{"class":119},[76,154067,123],{"class":90},[76,154069,154070],{"class":126},"\"2. 删除学生\"",[76,154072,130],{"class":90},[76,154074,154075,154077,154079,154082],{"class":78,"line":1766},[76,154076,120],{"class":119},[76,154078,123],{"class":90},[76,154080,154081],{"class":126},"\"3. 修改学生\"",[76,154083,130],{"class":90},[76,154085,154086,154088,154090,154093],{"class":78,"line":1773},[76,154087,120],{"class":119},[76,154089,123],{"class":90},[76,154091,154092],{"class":126},"\"4. 查询学生\"",[76,154094,130],{"class":90},[76,154096,154097,154099,154101,154104],{"class":78,"line":1793},[76,154098,120],{"class":119},[76,154100,123],{"class":90},[76,154102,154103],{"class":126},"\"5. 显示所有学生\"",[76,154105,130],{"class":90},[76,154107,154108,154110,154112,154115],{"class":78,"line":1806},[76,154109,120],{"class":119},[76,154111,123],{"class":90},[76,154113,154114],{"class":126},"\"0. 退出系统\"",[76,154116,130],{"class":90},[76,154118,154119],{"class":78,"line":1817},[76,154120,149],{"emptyLinePlaceholder":148},[76,154122,154123],{"class":78,"line":1822},[76,154124,149],{"emptyLinePlaceholder":148},[76,154126,154127,154129,154132],{"class":78,"line":1835},[76,154128,83],{"class":82},[76,154130,154131],{"class":86}," find_student",[76,154133,154134],{"class":90},"(students, student_id):\n",[76,154136,154137,154139,154142,154144],{"class":78,"line":1847},[76,154138,1469],{"class":82},[76,154140,154141],{"class":90}," student ",[76,154143,1475],{"class":82},[76,154145,154146],{"class":90}," students:\n",[76,154148,154149,154151,154154,154156,154158,154160],{"class":78,"line":1852},[76,154150,4592],{"class":82},[76,154152,154153],{"class":90}," student[",[76,154155,153452],{"class":126},[76,154157,6525],{"class":90},[76,154159,1250],{"class":82},[76,154161,154162],{"class":90}," student_id:\n",[76,154164,154165,154167],{"class":78,"line":1862},[76,154166,17782],{"class":82},[76,154168,154169],{"class":90}," student\n",[76,154171,154172,154174],{"class":78,"line":1874},[76,154173,441],{"class":82},[76,154175,714],{"class":119},[76,154177,154178],{"class":78,"line":1879},[76,154179,149],{"emptyLinePlaceholder":148},[76,154181,154182],{"class":78,"line":1884},[76,154183,149],{"emptyLinePlaceholder":148},[76,154185,154186,154188,154191],{"class":78,"line":1889},[76,154187,83],{"class":82},[76,154189,154190],{"class":86}," input_int",[76,154192,154193],{"class":90},"(prompt):\n",[76,154195,154196,154198,154200],{"class":78,"line":1900},[76,154197,4347],{"class":82},[76,154199,1895],{"class":119},[76,154201,590],{"class":90},[76,154203,154204,154207],{"class":78,"line":1906},[76,154205,154206],{"class":82},"        try",[76,154208,590],{"class":90},[76,154210,154211,154213,154215,154217,154219],{"class":78,"line":1924},[76,154212,17782],{"class":82},[76,154214,4478],{"class":119},[76,154216,123],{"class":90},[76,154218,1673],{"class":119},[76,154220,154221],{"class":90},"(prompt))\n",[76,154223,154224,154227,154230],{"class":78,"line":1929},[76,154225,154226],{"class":82},"        except",[76,154228,154229],{"class":119}," ValueError",[76,154231,590],{"class":90},[76,154233,154234,154236,154238,154241],{"class":78,"line":1944},[76,154235,36688],{"class":119},[76,154237,123],{"class":90},[76,154239,154240],{"class":126},"\"请输入整数\"",[76,154242,130],{"class":90},[76,154244,154245],{"class":78,"line":1950},[76,154246,149],{"emptyLinePlaceholder":148},[76,154248,154249],{"class":78,"line":1965},[76,154250,149],{"emptyLinePlaceholder":148},[76,154252,154253,154255,154258],{"class":78,"line":1971},[76,154254,83],{"class":82},[76,154256,154257],{"class":86}," input_float",[76,154259,154193],{"class":90},[76,154261,154262,154264,154266],{"class":78,"line":1985},[76,154263,4347],{"class":82},[76,154265,1895],{"class":119},[76,154267,590],{"class":90},[76,154269,154270,154272],{"class":78,"line":1991},[76,154271,154206],{"class":82},[76,154273,590],{"class":90},[76,154275,154276,154278,154280,154282,154284],{"class":78,"line":2005},[76,154277,17782],{"class":82},[76,154279,1668],{"class":119},[76,154281,123],{"class":90},[76,154283,1673],{"class":119},[76,154285,154221],{"class":90},[76,154287,154288,154290,154292],{"class":78,"line":2017},[76,154289,154226],{"class":82},[76,154291,154229],{"class":119},[76,154293,590],{"class":90},[76,154295,154296,154298,154300,154303],{"class":78,"line":2023},[76,154297,36688],{"class":119},[76,154299,123],{"class":90},[76,154301,154302],{"class":126},"\"请输入数字\"",[76,154304,130],{"class":90},[76,154306,154307],{"class":78,"line":2031},[76,154308,149],{"emptyLinePlaceholder":148},[76,154310,154311],{"class":78,"line":11880},[76,154312,149],{"emptyLinePlaceholder":148},[76,154314,154315,154317,154320],{"class":78,"line":11901},[76,154316,83],{"class":82},[76,154318,154319],{"class":86}," add_student",[76,154321,153966],{"class":90},[76,154323,154324,154327,154329,154331,154333,154336],{"class":78,"line":11907},[76,154325,154326],{"class":90},"    student_id ",[76,154328,370],{"class":82},[76,154330,1914],{"class":119},[76,154332,123],{"class":90},[76,154334,154335],{"class":126},"\"请输入学号:\"",[76,154337,130],{"class":90},[76,154339,154340],{"class":78,"line":11921},[76,154341,149],{"emptyLinePlaceholder":148},[76,154343,154344,154346],{"class":78,"line":11927},[76,154345,578],{"class":82},[76,154347,154348],{"class":90}," find_student(students, student_id):\n",[76,154350,154351,154353,154355,154358],{"class":78,"line":11954},[76,154352,1701],{"class":119},[76,154354,123],{"class":90},[76,154356,154357],{"class":126},"\"学号已存在\"",[76,154359,130],{"class":90},[76,154361,154362],{"class":78,"line":11963},[76,154363,1714],{"class":82},[76,154365,154366],{"class":78,"line":11969},[76,154367,149],{"emptyLinePlaceholder":148},[76,154369,154370,154373,154375,154377,154379,154382],{"class":78,"line":11977},[76,154371,154372],{"class":90},"    name ",[76,154374,370],{"class":82},[76,154376,1914],{"class":119},[76,154378,123],{"class":90},[76,154380,154381],{"class":126},"\"请输入姓名:\"",[76,154383,130],{"class":90},[76,154385,154386,154389,154391,154394,154397],{"class":78,"line":11982},[76,154387,154388],{"class":90},"    age ",[76,154390,370],{"class":82},[76,154392,154393],{"class":90}," input_int(",[76,154395,154396],{"class":126},"\"请输入年龄:\"",[76,154398,130],{"class":90},[76,154400,154401,154404,154406,154409,154412],{"class":78,"line":18654},[76,154402,154403],{"class":90},"    score ",[76,154405,370],{"class":82},[76,154407,154408],{"class":90}," input_float(",[76,154410,154411],{"class":126},"\"请输入成绩:\"",[76,154413,130],{"class":90},[76,154415,154416],{"class":78,"line":18660},[76,154417,149],{"emptyLinePlaceholder":148},[76,154419,154420],{"class":78,"line":18683},[76,154421,154422],{"class":90},"    students.append({\n",[76,154424,154425,154428],{"class":78,"line":18689},[76,154426,154427],{"class":126},"        \"student_id\"",[76,154429,154430],{"class":90},": student_id,\n",[76,154432,154433,154436],{"class":78,"line":18712},[76,154434,154435],{"class":126},"        \"name\"",[76,154437,154438],{"class":90},": name,\n",[76,154440,154441,154444],{"class":78,"line":18726},[76,154442,154443],{"class":126},"        \"age\"",[76,154445,154446],{"class":90},": age,\n",[76,154448,154449,154452],{"class":78,"line":18746},[76,154450,154451],{"class":126},"        \"score\"",[76,154453,154454],{"class":90},": score,\n",[76,154456,154457],{"class":78,"line":18752},[76,154458,35499],{"class":90},[76,154460,154461],{"class":78,"line":18763},[76,154462,154463],{"class":90},"    save_students(students)\n",[76,154465,154466,154468,154470,154473],{"class":78,"line":18786},[76,154467,120],{"class":119},[76,154469,123],{"class":90},[76,154471,154472],{"class":126},"\"添加成功\"",[76,154474,130],{"class":90},[76,154476,154477],{"class":78,"line":18808},[76,154478,149],{"emptyLinePlaceholder":148},[76,154480,154481],{"class":78,"line":18813},[76,154482,149],{"emptyLinePlaceholder":148},[76,154484,154485,154487,154490],{"class":78,"line":18819},[76,154486,83],{"class":82},[76,154488,154489],{"class":86}," delete_student",[76,154491,153966],{"class":90},[76,154493,154494,154496,154498,154500,154502,154505],{"class":78,"line":18833},[76,154495,154326],{"class":90},[76,154497,370],{"class":82},[76,154499,1914],{"class":119},[76,154501,123],{"class":90},[76,154503,154504],{"class":126},"\"请输入要删除的学号:\"",[76,154506,130],{"class":90},[76,154508,154509,154512,154514],{"class":78,"line":18846},[76,154510,154511],{"class":90},"    student ",[76,154513,370],{"class":82},[76,154515,154516],{"class":90}," find_student(students, student_id)\n",[76,154518,154519],{"class":78,"line":18851},[76,154520,149],{"emptyLinePlaceholder":148},[76,154522,154523,154525,154527,154529,154531],{"class":78,"line":18865},[76,154524,578],{"class":82},[76,154526,154141],{"class":90},[76,154528,729],{"class":82},[76,154530,732],{"class":119},[76,154532,590],{"class":90},[76,154534,154535,154537,154539,154542],{"class":78,"line":18870},[76,154536,1701],{"class":119},[76,154538,123],{"class":90},[76,154540,154541],{"class":126},"\"学生不存在\"",[76,154543,130],{"class":90},[76,154545,154546],{"class":78,"line":18876},[76,154547,1714],{"class":82},[76,154549,154550],{"class":78,"line":18881},[76,154551,149],{"emptyLinePlaceholder":148},[76,154553,154554],{"class":78,"line":18895},[76,154555,154556],{"class":90},"    students.remove(student)\n",[76,154558,154559],{"class":78,"line":18900},[76,154560,154463],{"class":90},[76,154562,154563,154565,154567,154570],{"class":78,"line":18905},[76,154564,120],{"class":119},[76,154566,123],{"class":90},[76,154568,154569],{"class":126},"\"删除成功\"",[76,154571,130],{"class":90},[76,154573,154574],{"class":78,"line":18919},[76,154575,149],{"emptyLinePlaceholder":148},[76,154577,154578],{"class":78,"line":18931},[76,154579,149],{"emptyLinePlaceholder":148},[76,154581,154582,154584,154587],{"class":78,"line":18936},[76,154583,83],{"class":82},[76,154585,154586],{"class":86}," update_student",[76,154588,153966],{"class":90},[76,154590,154591,154593,154595,154597,154599,154602],{"class":78,"line":18949},[76,154592,154326],{"class":90},[76,154594,370],{"class":82},[76,154596,1914],{"class":119},[76,154598,123],{"class":90},[76,154600,154601],{"class":126},"\"请输入要修改的学号:\"",[76,154603,130],{"class":90},[76,154605,154606,154608,154610],{"class":78,"line":18954},[76,154607,154511],{"class":90},[76,154609,370],{"class":82},[76,154611,154516],{"class":90},[76,154613,154614],{"class":78,"line":18959},[76,154615,149],{"emptyLinePlaceholder":148},[76,154617,154618,154620,154622,154624,154626],{"class":78,"line":18964},[76,154619,578],{"class":82},[76,154621,154141],{"class":90},[76,154623,729],{"class":82},[76,154625,732],{"class":119},[76,154627,590],{"class":90},[76,154629,154630,154632,154634,154636],{"class":78,"line":18977},[76,154631,1701],{"class":119},[76,154633,123],{"class":90},[76,154635,154541],{"class":126},[76,154637,130],{"class":90},[76,154639,154640],{"class":78,"line":18982},[76,154641,1714],{"class":82},[76,154643,154644],{"class":78,"line":34671},[76,154645,149],{"emptyLinePlaceholder":148},[76,154647,154648,154650,154652,154654,154656,154659],{"class":78,"line":34677},[76,154649,154372],{"class":90},[76,154651,370],{"class":82},[76,154653,1914],{"class":119},[76,154655,123],{"class":90},[76,154657,154658],{"class":126},"\"请输入新姓名:\"",[76,154660,130],{"class":90},[76,154662,154663,154665,154667,154669,154672],{"class":78,"line":34683},[76,154664,154388],{"class":90},[76,154666,370],{"class":82},[76,154668,154393],{"class":90},[76,154670,154671],{"class":126},"\"请输入新年龄:\"",[76,154673,130],{"class":90},[76,154675,154676,154678,154680,154682,154685],{"class":78,"line":34689},[76,154677,154403],{"class":90},[76,154679,370],{"class":82},[76,154681,154408],{"class":90},[76,154683,154684],{"class":126},"\"请输入新成绩:\"",[76,154686,130],{"class":90},[76,154688,154689],{"class":78,"line":34695},[76,154690,149],{"emptyLinePlaceholder":148},[76,154692,154693,154696,154698,154700,154702],{"class":78,"line":34706},[76,154694,154695],{"class":90},"    student[",[76,154697,64707],{"class":126},[76,154699,6525],{"class":90},[76,154701,370],{"class":82},[76,154703,151810],{"class":90},[76,154705,154706,154708,154710,154712,154714],{"class":78,"line":34712},[76,154707,154695],{"class":90},[76,154709,71152],{"class":126},[76,154711,6525],{"class":90},[76,154713,370],{"class":82},[76,154715,151822],{"class":90},[76,154717,154718,154720,154722,154724,154726],{"class":78,"line":34732},[76,154719,154695],{"class":90},[76,154721,153477],{"class":126},[76,154723,6525],{"class":90},[76,154725,370],{"class":82},[76,154727,3699],{"class":90},[76,154729,154730],{"class":78,"line":34738},[76,154731,149],{"emptyLinePlaceholder":148},[76,154733,154734],{"class":78,"line":34749},[76,154735,154463],{"class":90},[76,154737,154738,154740,154742,154745],{"class":78,"line":34755},[76,154739,120],{"class":119},[76,154741,123],{"class":90},[76,154743,154744],{"class":126},"\"修改成功\"",[76,154746,130],{"class":90},[76,154748,154749],{"class":78,"line":34761},[76,154750,149],{"emptyLinePlaceholder":148},[76,154752,154753],{"class":78,"line":34767},[76,154754,149],{"emptyLinePlaceholder":148},[76,154756,154757,154759,154762],{"class":78,"line":34773},[76,154758,83],{"class":82},[76,154760,154761],{"class":86}," query_student",[76,154763,153966],{"class":90},[76,154765,154766,154768,154770,154772,154774,154777],{"class":78,"line":34779},[76,154767,154326],{"class":90},[76,154769,370],{"class":82},[76,154771,1914],{"class":119},[76,154773,123],{"class":90},[76,154775,154776],{"class":126},"\"请输入要查询的学号:\"",[76,154778,130],{"class":90},[76,154780,154781,154783,154785],{"class":78,"line":34785},[76,154782,154511],{"class":90},[76,154784,370],{"class":82},[76,154786,154516],{"class":90},[76,154788,154789],{"class":78,"line":34791},[76,154790,149],{"emptyLinePlaceholder":148},[76,154792,154793,154795,154797,154799,154801],{"class":78,"line":34811},[76,154794,578],{"class":82},[76,154796,154141],{"class":90},[76,154798,729],{"class":82},[76,154800,732],{"class":119},[76,154802,590],{"class":90},[76,154804,154805,154807,154809,154811],{"class":78,"line":34817},[76,154806,1701],{"class":119},[76,154808,123],{"class":90},[76,154810,154541],{"class":126},[76,154812,130],{"class":90},[76,154814,154815],{"class":78,"line":34833},[76,154816,1714],{"class":82},[76,154818,154819],{"class":78,"line":34839},[76,154820,149],{"emptyLinePlaceholder":148},[76,154822,154823],{"class":78,"line":34853},[76,154824,154825],{"class":90},"    print_student(student)\n",[76,154827,154828],{"class":78,"line":34859},[76,154829,149],{"emptyLinePlaceholder":148},[76,154831,154832],{"class":78,"line":34874},[76,154833,149],{"emptyLinePlaceholder":148},[76,154835,154836,154838,154841],{"class":78,"line":34880},[76,154837,83],{"class":82},[76,154839,154840],{"class":86}," print_student",[76,154842,154843],{"class":90},"(student):\n",[76,154845,154846,154848],{"class":78,"line":34889},[76,154847,120],{"class":119},[76,154849,153444],{"class":90},[76,154851,154852,154855,154857,154859,154862,154865,154867,154870],{"class":78,"line":34895},[76,154853,154854],{"class":82},"        f",[76,154856,307],{"class":126},[76,154858,298],{"class":119},[76,154860,154861],{"class":90},"student[",[76,154863,154864],{"class":126},"'student_id'",[76,154866,3196],{"class":90},[76,154868,154869],{"class":119},"}\\t",[76,154871,27183],{"class":126},[76,154873,154874,154876,154878,154880,154882,154885,154887,154889],{"class":78,"line":34904},[76,154875,154854],{"class":82},[76,154877,307],{"class":126},[76,154879,298],{"class":119},[76,154881,154861],{"class":90},[76,154883,154884],{"class":126},"'name'",[76,154886,3196],{"class":90},[76,154888,154869],{"class":119},[76,154890,27183],{"class":126},[76,154892,154893,154895,154897,154899,154901,154904,154906,154908],{"class":78,"line":34910},[76,154894,154854],{"class":82},[76,154896,307],{"class":126},[76,154898,298],{"class":119},[76,154900,154861],{"class":90},[76,154902,154903],{"class":126},"'age'",[76,154905,3196],{"class":90},[76,154907,154869],{"class":119},[76,154909,27183],{"class":126},[76,154911,154912,154914,154916,154918,154920,154923,154925,154927],{"class":78,"line":34916},[76,154913,154854],{"class":82},[76,154915,307],{"class":126},[76,154917,298],{"class":119},[76,154919,154861],{"class":90},[76,154921,154922],{"class":126},"'score'",[76,154924,3196],{"class":90},[76,154926,304],{"class":119},[76,154928,27183],{"class":126},[76,154930,154931],{"class":78,"line":34925},[76,154932,154933],{"class":90},"    )\n",[76,154935,154936],{"class":78,"line":34931},[76,154937,149],{"emptyLinePlaceholder":148},[76,154939,154940],{"class":78,"line":34942},[76,154941,149],{"emptyLinePlaceholder":148},[76,154943,154944,154946,154949],{"class":78,"line":34948},[76,154945,83],{"class":82},[76,154947,154948],{"class":86}," show_all_students",[76,154950,153966],{"class":90},[76,154952,154953,154955,154957],{"class":78,"line":34967},[76,154954,578],{"class":82},[76,154956,40967],{"class":82},[76,154958,154146],{"class":90},[76,154960,154961,154963,154965,154968],{"class":78,"line":34973},[76,154962,1701],{"class":119},[76,154964,123],{"class":90},[76,154966,154967],{"class":126},"\"暂无学生\"",[76,154969,130],{"class":90},[76,154971,154972],{"class":78,"line":34984},[76,154973,1714],{"class":82},[76,154975,154976],{"class":78,"line":34990},[76,154977,149],{"emptyLinePlaceholder":148},[76,154979,154980,154982,154984,154987,154989,154992,154994,154997,154999,155002],{"class":78,"line":35010},[76,154981,120],{"class":119},[76,154983,123],{"class":90},[76,154985,154986],{"class":126},"\"学号",[76,154988,3355],{"class":119},[76,154990,154991],{"class":126},"姓名",[76,154993,3355],{"class":119},[76,154995,154996],{"class":126},"年龄",[76,154998,3355],{"class":119},[76,155000,155001],{"class":126},"成绩\"",[76,155003,130],{"class":90},[76,155005,155006,155008,155010,155012],{"class":78,"line":35026},[76,155007,1469],{"class":82},[76,155009,154141],{"class":90},[76,155011,1475],{"class":82},[76,155013,154146],{"class":90},[76,155015,155016],{"class":78,"line":35032},[76,155017,155018],{"class":90},"        print_student(student)\n",[76,155020,155021],{"class":78,"line":35046},[76,155022,149],{"emptyLinePlaceholder":148},[76,155024,155025],{"class":78,"line":35052},[76,155026,149],{"emptyLinePlaceholder":148},[76,155028,155029,155031,155033],{"class":78,"line":35058},[76,155030,83],{"class":82},[76,155032,4069],{"class":86},[76,155034,91],{"class":90},[76,155036,155037,155040,155042],{"class":78,"line":35069},[76,155038,155039],{"class":90},"    students ",[76,155041,370],{"class":82},[76,155043,155044],{"class":90}," load_students()\n",[76,155046,155047],{"class":78,"line":35075},[76,155048,149],{"emptyLinePlaceholder":148},[76,155050,155051,155053,155055],{"class":78,"line":35081},[76,155052,4347],{"class":82},[76,155054,1895],{"class":119},[76,155056,590],{"class":90},[76,155058,155059],{"class":78,"line":35091},[76,155060,155061],{"class":90},"        show_menu()\n",[76,155063,155064,155067,155069,155071,155073,155075],{"class":78,"line":35097},[76,155065,155066],{"class":90},"        choice ",[76,155068,370],{"class":82},[76,155070,1914],{"class":119},[76,155072,123],{"class":90},[76,155074,1919],{"class":126},[76,155076,130],{"class":90},[76,155078,155079],{"class":78,"line":35108},[76,155080,149],{"emptyLinePlaceholder":148},[76,155082,155083,155085,155087,155089,155091],{"class":78,"line":35114},[76,155084,4592],{"class":82},[76,155086,1934],{"class":90},[76,155088,1250],{"class":82},[76,155090,1939],{"class":126},[76,155092,590],{"class":90},[76,155094,155095],{"class":78,"line":35124},[76,155096,155097],{"class":90},"            add_student(students)\n",[76,155099,155100,155103,155105,155107,155109],{"class":78,"line":35129},[76,155101,155102],{"class":82},"        elif",[76,155104,1934],{"class":90},[76,155106,1250],{"class":82},[76,155108,1960],{"class":126},[76,155110,590],{"class":90},[76,155112,155113],{"class":78,"line":35135},[76,155114,155115],{"class":90},"            delete_student(students)\n",[76,155117,155118,155120,155122,155124,155126],{"class":78,"line":35184},[76,155119,155102],{"class":82},[76,155121,1934],{"class":90},[76,155123,1250],{"class":82},[76,155125,1980],{"class":126},[76,155127,590],{"class":90},[76,155129,155130],{"class":78,"line":35231},[76,155131,155132],{"class":90},"            update_student(students)\n",[76,155134,155135,155137,155139,155141,155144],{"class":78,"line":35236},[76,155136,155102],{"class":82},[76,155138,1934],{"class":90},[76,155140,1250],{"class":82},[76,155142,155143],{"class":126}," \"4\"",[76,155145,590],{"class":90},[76,155147,155148],{"class":78,"line":35242},[76,155149,155150],{"class":90},"            query_student(students)\n",[76,155152,155153,155155,155157,155159,155162],{"class":78,"line":35261},[76,155154,155102],{"class":82},[76,155156,1934],{"class":90},[76,155158,1250],{"class":82},[76,155160,155161],{"class":126}," \"5\"",[76,155163,590],{"class":90},[76,155165,155166],{"class":78,"line":35267},[76,155167,155168],{"class":90},"            show_all_students(students)\n",[76,155170,155171,155173,155175,155177,155179],{"class":78,"line":35287},[76,155172,155102],{"class":82},[76,155174,1934],{"class":90},[76,155176,1250],{"class":82},[76,155178,2000],{"class":126},[76,155180,590],{"class":90},[76,155182,155183,155185,155187,155189],{"class":78,"line":35293},[76,155184,36688],{"class":119},[76,155186,123],{"class":90},[76,155188,2012],{"class":126},[76,155190,130],{"class":90},[76,155192,155193],{"class":78,"line":35299},[76,155194,117118],{"class":82},[76,155196,155197,155199],{"class":78,"line":35309},[76,155198,4629],{"class":82},[76,155200,590],{"class":90},[76,155202,155203,155205,155207,155209],{"class":78,"line":35314},[76,155204,36688],{"class":119},[76,155206,123],{"class":90},[76,155208,2038],{"class":126},[76,155210,130],{"class":90},[76,155212,155213],{"class":78,"line":35320},[76,155214,149],{"emptyLinePlaceholder":148},[76,155216,155217],{"class":78,"line":35336},[76,155218,149],{"emptyLinePlaceholder":148},[76,155220,155221,155223,155225,155227,155229],{"class":78,"line":35381},[76,155222,723],{"class":82},[76,155224,33264],{"class":119},[76,155226,103581],{"class":82},[76,155228,103584],{"class":126},[76,155230,590],{"class":90},[76,155232,155233],{"class":78,"line":35387},[76,155234,103591],{"class":90},[19,155236,155237],{},"这个项目串联了：",[26,155239,155240,155243,155246,155249,155252,155254],{},[29,155241,155242],{},"菜单循环。",[29,155244,155245],{},"函数封装。",[29,155247,155248],{},"列表字典。",[29,155250,155251],{},"JSON 读写。",[29,155253,153732],{},[29,155255,155256,490],{},[73,155257,155258],{},"if __name__ == \"__main__\"",[14,155260,155262],{"id":155261},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155264,155265],{},"可以进一步拆成两个类：",[26,155267,155268,155273],{},[29,155269,155270,155272],{},[73,155271,151583],{},"：表示单个学生。",[29,155274,155275,155277],{},[73,155276,153599],{},"：负责学生增删改查和文件保存。",[19,155279,155280],{},"示意代码：",[66,155282,155284],{"className":68,"code":155283,"language":70,"meta":71,"style":71},"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",[73,155285,155286,155296,155300,155304,155308,155316,155323,155329,155335,155341,155345,155353,155359,155369,155379,155389,155399,155403,155407,155413,155421,155429,155437,155445,155453,155461],{"__ignoreMap":71},[76,155287,155288,155290,155292,155294],{"class":78,"line":79},[76,155289,32781],{"class":82},[76,155291,153157],{"class":90},[76,155293,32438],{"class":82},[76,155295,153162],{"class":90},[76,155297,155298],{"class":78,"line":94},[76,155299,149],{"emptyLinePlaceholder":148},[76,155301,155302],{"class":78,"line":133},[76,155303,149],{"emptyLinePlaceholder":148},[76,155305,155306],{"class":78,"line":145},[76,155307,153175],{"class":86},[76,155309,155310,155312,155314],{"class":78,"line":152},[76,155311,16747],{"class":82},[76,155313,9976],{"class":86},[76,155315,590],{"class":90},[76,155317,155318,155321],{"class":78,"line":157},[76,155319,155320],{"class":90},"    student_id: ",[76,155322,153191],{"class":119},[76,155324,155325,155327],{"class":78,"line":246},[76,155326,153188],{"class":90},[76,155328,153191],{"class":119},[76,155330,155331,155333],{"class":78,"line":251},[76,155332,153196],{"class":90},[76,155334,153199],{"class":119},[76,155336,155337,155339],{"class":78,"line":257},[76,155338,153204],{"class":90},[76,155340,153207],{"class":119},[76,155342,155343],{"class":78,"line":641},[76,155344,149],{"emptyLinePlaceholder":148},[76,155346,155347,155349,155351],{"class":78,"line":646},[76,155348,32845],{"class":82},[76,155350,153355],{"class":86},[76,155352,32851],{"class":90},[76,155354,155355,155357],{"class":78,"line":659},[76,155356,595],{"class":82},[76,155358,17623],{"class":90},[76,155360,155361,155363,155365,155367],{"class":78,"line":1608},[76,155362,153368],{"class":126},[76,155364,53469],{"class":90},[76,155366,32867],{"class":119},[76,155368,153375],{"class":90},[76,155370,155371,155373,155375,155377],{"class":78,"line":1632},[76,155372,153380],{"class":126},[76,155374,53469],{"class":90},[76,155376,32867],{"class":119},[76,155378,153387],{"class":90},[76,155380,155381,155383,155385,155387],{"class":78,"line":1637},[76,155382,153392],{"class":126},[76,155384,53469],{"class":90},[76,155386,32867],{"class":119},[76,155388,153399],{"class":90},[76,155390,155391,155393,155395,155397],{"class":78,"line":1642},[76,155392,153404],{"class":126},[76,155394,53469],{"class":90},[76,155396,32867],{"class":119},[76,155398,153411],{"class":90},[76,155400,155401],{"class":78,"line":1652},[76,155402,4624],{"class":90},[76,155404,155405],{"class":78,"line":1660},[76,155406,149],{"emptyLinePlaceholder":148},[76,155408,155409,155411],{"class":78,"line":1683},[76,155410,153021],{"class":86},[76,155412,153024],{"class":119},[76,155414,155415,155417,155419],{"class":78,"line":1698},[76,155416,32845],{"class":82},[76,155418,153432],{"class":86},[76,155420,153435],{"class":90},[76,155422,155423,155425,155427],{"class":78,"line":1711},[76,155424,595],{"class":82},[76,155426,153041],{"class":119},[76,155428,153444],{"class":90},[76,155430,155431,155433,155435],{"class":78,"line":1717},[76,155432,153449],{"class":90},[76,155434,153452],{"class":126},[76,155436,89860],{"class":90},[76,155438,155439,155441,155443],{"class":78,"line":1728},[76,155440,153449],{"class":90},[76,155442,64707],{"class":126},[76,155444,89860],{"class":90},[76,155446,155447,155449,155451],{"class":78,"line":1740},[76,155448,153449],{"class":90},[76,155450,71152],{"class":126},[76,155452,89860],{"class":90},[76,155454,155455,155457,155459],{"class":78,"line":1746},[76,155456,153449],{"class":90},[76,155458,153477],{"class":126},[76,155460,89860],{"class":90},[76,155462,155463],{"class":78,"line":1751},[76,155464,40164],{"class":90},[19,155466,155467],{},"管理器示意：",[66,155469,155471],{"className":68,"code":155470,"language":70,"meta":71,"style":71},"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",[73,155472,155473,155482,155490,155501,155505,155515,155528,155539,155546,155552,155556,155565,155574,155580,155587],{"__ignoreMap":71},[76,155474,155475,155477,155480],{"class":78,"line":79},[76,155476,16747],{"class":82},[76,155478,155479],{"class":86}," StudentManager",[76,155481,590],{"class":90},[76,155483,155484,155486,155488],{"class":78,"line":94},[76,155485,32845],{"class":82},[76,155487,32848],{"class":119},[76,155489,32851],{"class":90},[76,155491,155492,155494,155497,155499],{"class":78,"line":133},[76,155493,32889],{"class":119},[76,155495,155496],{"class":90},".students ",[76,155498,370],{"class":82},[76,155500,53870],{"class":90},[76,155502,155503],{"class":78,"line":145},[76,155504,149],{"emptyLinePlaceholder":148},[76,155506,155507,155509,155512],{"class":78,"line":152},[76,155508,32845],{"class":82},[76,155510,155511],{"class":86}," find_by_id",[76,155513,155514],{"class":90},"(self, student_id):\n",[76,155516,155517,155519,155521,155523,155525],{"class":78,"line":157},[76,155518,5488],{"class":82},[76,155520,154141],{"class":90},[76,155522,1475],{"class":82},[76,155524,40911],{"class":119},[76,155526,155527],{"class":90},".students:\n",[76,155529,155530,155532,155535,155537],{"class":78,"line":246},[76,155531,6724],{"class":82},[76,155533,155534],{"class":90}," student.student_id ",[76,155536,1250],{"class":82},[76,155538,154162],{"class":90},[76,155540,155541,155544],{"class":78,"line":251},[76,155542,155543],{"class":82},"                return",[76,155545,154169],{"class":90},[76,155547,155548,155550],{"class":78,"line":257},[76,155549,595],{"class":82},[76,155551,714],{"class":119},[76,155553,155554],{"class":78,"line":641},[76,155555,149],{"emptyLinePlaceholder":148},[76,155557,155558,155560,155562],{"class":78,"line":646},[76,155559,32845],{"class":82},[76,155561,359],{"class":86},[76,155563,155564],{"class":90},"(self, student):\n",[76,155566,155567,155569,155571],{"class":78,"line":659},[76,155568,4592],{"class":82},[76,155570,40911],{"class":119},[76,155572,155573],{"class":90},".find_by_id(student.student_id):\n",[76,155575,155576,155578],{"class":78,"line":1608},[76,155577,17782],{"class":82},[76,155579,127827],{"class":119},[76,155581,155582,155584],{"class":78,"line":1632},[76,155583,32889],{"class":119},[76,155585,155586],{"class":90},".students.append(student)\n",[76,155588,155589,155591],{"class":78,"line":1637},[76,155590,595],{"class":82},[76,155592,155593],{"class":119}," True\n",[19,155595,155596],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155598,155600],{"id":155599},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[889,155602,155604],{"id":155603},"_1251-数据结构","12.5.1 数据结构",[66,155606,155608],{"className":68,"code":155607,"language":70,"meta":71,"style":71},"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",[73,155609,155610,155618,155649,155679,155708,155737],{"__ignoreMap":71},[76,155611,155612,155614,155616],{"class":78,"line":79},[76,155613,150482],{"class":90},[76,155615,370],{"class":82},[76,155617,57478],{"class":90},[76,155619,155620,155622,155624,155626,155628,155630,155633,155635,155638,155640,155642,155644,155647],{"class":78,"line":94},[76,155621,150402],{"class":90},[76,155623,150014],{"class":126},[76,155625,53469],{"class":90},[76,155627,150625],{"class":126},[76,155629,405],{"class":90},[76,155631,155632],{"class":126},"\"category\"",[76,155634,53469],{"class":90},[76,155636,155637],{"class":126},"\"手机\"",[76,155639,405],{"class":90},[76,155641,86108],{"class":126},[76,155643,53469],{"class":90},[76,155645,155646],{"class":119},"12000",[76,155648,7012],{"class":90},[76,155650,155651,155653,155655,155657,155659,155661,155663,155665,155668,155670,155672,155674,155677],{"class":78,"line":133},[76,155652,150402],{"class":90},[76,155654,150014],{"class":126},[76,155656,53469],{"class":90},[76,155658,150625],{"class":126},[76,155660,405],{"class":90},[76,155662,155632],{"class":126},[76,155664,53469],{"class":90},[76,155666,155667],{"class":126},"\"电脑\"",[76,155669,405],{"class":90},[76,155671,86108],{"class":126},[76,155673,53469],{"class":90},[76,155675,155676],{"class":119},"18000",[76,155678,7012],{"class":90},[76,155680,155681,155683,155685,155687,155689,155691,155693,155695,155697,155699,155701,155703,155706],{"class":78,"line":145},[76,155682,150402],{"class":90},[76,155684,150014],{"class":126},[76,155686,53469],{"class":90},[76,155688,150646],{"class":126},[76,155690,405],{"class":90},[76,155692,155632],{"class":126},[76,155694,53469],{"class":90},[76,155696,155637],{"class":126},[76,155698,405],{"class":90},[76,155700,86108],{"class":126},[76,155702,53469],{"class":90},[76,155704,155705],{"class":119},"15000",[76,155707,7012],{"class":90},[76,155709,155710,155712,155714,155716,155718,155720,155722,155724,155726,155728,155730,155732,155735],{"class":78,"line":152},[76,155711,150402],{"class":90},[76,155713,150014],{"class":126},[76,155715,53469],{"class":90},[76,155717,150646],{"class":126},[76,155719,405],{"class":90},[76,155721,155632],{"class":126},[76,155723,53469],{"class":90},[76,155725,155667],{"class":126},[76,155727,405],{"class":90},[76,155729,86108],{"class":126},[76,155731,53469],{"class":90},[76,155733,155734],{"class":119},"16000",[76,155736,7012],{"class":90},[76,155738,155739],{"class":78,"line":157},[76,155740,35284],{"class":90},[889,155742,155744],{"id":155743},"_1252-按日期统计","12.5.2 按日期统计",[66,155746,155748],{"className":68,"code":155747,"language":70,"meta":71,"style":71},"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",[73,155749,155750,155759,155763,155774,155788,155801,155820,155824],{"__ignoreMap":71},[76,155751,155752,155755,155757],{"class":78,"line":79},[76,155753,155754],{"class":90},"daily_total ",[76,155756,370],{"class":82},[76,155758,89892],{"class":90},[76,155760,155761],{"class":78,"line":94},[76,155762,149],{"emptyLinePlaceholder":148},[76,155764,155765,155767,155769,155771],{"class":78,"line":133},[76,155766,5112],{"class":82},[76,155768,150226],{"class":90},[76,155770,1475],{"class":82},[76,155772,155773],{"class":90}," sales:\n",[76,155775,155776,155779,155781,155784,155786],{"class":78,"line":145},[76,155777,155778],{"class":90},"    date ",[76,155780,370],{"class":82},[76,155782,155783],{"class":90}," item[",[76,155785,150014],{"class":126},[76,155787,35284],{"class":90},[76,155789,155790,155793,155795,155797,155799],{"class":78,"line":152},[76,155791,155792],{"class":90},"    amount ",[76,155794,370],{"class":82},[76,155796,155783],{"class":90},[76,155798,86108],{"class":126},[76,155800,35284],{"class":90},[76,155802,155803,155806,155808,155811,155813,155815,155817],{"class":78,"line":157},[76,155804,155805],{"class":90},"    daily_total[date] ",[76,155807,370],{"class":82},[76,155809,155810],{"class":90}," daily_total.get(date, ",[76,155812,1294],{"class":119},[76,155814,15767],{"class":90},[76,155816,376],{"class":82},[76,155818,155819],{"class":90}," amount\n",[76,155821,155822],{"class":78,"line":246},[76,155823,149],{"emptyLinePlaceholder":148},[76,155825,155826,155828],{"class":78,"line":251},[76,155827,478],{"class":119},[76,155829,155830],{"class":90},"(daily_total)\n",[889,155832,155834],{"id":155833},"_1253-按类别统计","12.5.3 按类别统计",[66,155836,155838],{"className":68,"code":155837,"language":70,"meta":71,"style":71},"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",[73,155839,155840,155849,155853,155863,155876,155888,155906,155910],{"__ignoreMap":71},[76,155841,155842,155845,155847],{"class":78,"line":79},[76,155843,155844],{"class":90},"category_total ",[76,155846,370],{"class":82},[76,155848,89892],{"class":90},[76,155850,155851],{"class":78,"line":94},[76,155852,149],{"emptyLinePlaceholder":148},[76,155854,155855,155857,155859,155861],{"class":78,"line":133},[76,155856,5112],{"class":82},[76,155858,150226],{"class":90},[76,155860,1475],{"class":82},[76,155862,155773],{"class":90},[76,155864,155865,155868,155870,155872,155874],{"class":78,"line":145},[76,155866,155867],{"class":90},"    category ",[76,155869,370],{"class":82},[76,155871,155783],{"class":90},[76,155873,155632],{"class":126},[76,155875,35284],{"class":90},[76,155877,155878,155880,155882,155884,155886],{"class":78,"line":152},[76,155879,155792],{"class":90},[76,155881,370],{"class":82},[76,155883,155783],{"class":90},[76,155885,86108],{"class":126},[76,155887,35284],{"class":90},[76,155889,155890,155893,155895,155898,155900,155902,155904],{"class":78,"line":157},[76,155891,155892],{"class":90},"    category_total[category] ",[76,155894,370],{"class":82},[76,155896,155897],{"class":90}," category_total.get(category, ",[76,155899,1294],{"class":119},[76,155901,15767],{"class":90},[76,155903,376],{"class":82},[76,155905,155819],{"class":90},[76,155907,155908],{"class":78,"line":246},[76,155909,149],{"emptyLinePlaceholder":148},[76,155911,155912,155914],{"class":78,"line":251},[76,155913,478],{"class":119},[76,155915,155916],{"class":90},"(category_total)\n",[889,155918,155920],{"id":155919},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[66,155922,155924],{"className":68,"code":155923,"language":70,"meta":71,"style":71},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[73,155925,155926,155951],{"__ignoreMap":71},[76,155927,155928,155931,155933,155935,155938,155941,155944,155947,155949],{"class":78,"line":79},[76,155929,155930],{"class":90},"top_date, top_amount ",[76,155932,370],{"class":82},[76,155934,8030],{"class":119},[76,155936,155937],{"class":90},"(daily_total.items(), ",[76,155939,155940],{"class":7296},"key",[76,155942,155943],{"class":82},"=lambda",[76,155945,155946],{"class":90}," item: item[",[76,155948,669],{"class":119},[76,155950,6739],{"class":90},[76,155952,155953,155955],{"class":78,"line":94},[76,155954,478],{"class":119},[76,155956,155957],{"class":90},"(top_date, top_amount)\n",[14,155959,155961],{"id":155960},"_126-绘制柱状图","12.6 绘制柱状图",[66,155963,155965],{"className":68,"code":155964,"language":70,"meta":71,"style":71},"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",[73,155966,155967,155981,155992,155996,156004,156016,156028,156039,156043,156047,156057,156068,156082,156087,156104,156121,156137,156141],{"__ignoreMap":71},[76,155968,155969,155971,155973,155975,155977,155979],{"class":78,"line":79},[76,155970,32781],{"class":82},[76,155972,149396],{"class":90},[76,155974,32438],{"class":82},[76,155976,149401],{"class":90},[76,155978,33426],{"class":82},[76,155980,149406],{"class":90},[76,155982,155983,155985,155987,155989],{"class":78,"line":94},[76,155984,32781],{"class":82},[76,155986,149255],{"class":90},[76,155988,32438],{"class":82},[76,155990,155991],{"class":90}," Bar\n",[76,155993,155994],{"class":78,"line":133},[76,155995,149],{"emptyLinePlaceholder":148},[76,155997,155998,156000,156002],{"class":78,"line":145},[76,155999,155844],{"class":90},[76,156001,370],{"class":82},[76,156003,17623],{"class":90},[76,156005,156006,156009,156011,156014],{"class":78,"line":152},[76,156007,156008],{"class":126},"    \"手机\"",[76,156010,53469],{"class":90},[76,156012,156013],{"class":119},"27000",[76,156015,33509],{"class":90},[76,156017,156018,156021,156023,156026],{"class":78,"line":157},[76,156019,156020],{"class":126},"    \"电脑\"",[76,156022,53469],{"class":90},[76,156024,156025],{"class":119},"34000",[76,156027,33509],{"class":90},[76,156029,156030,156033,156035,156037],{"class":78,"line":246},[76,156031,156032],{"class":126},"    \"耳机\"",[76,156034,53469],{"class":90},[76,156036,126419],{"class":119},[76,156038,33509],{"class":90},[76,156040,156041],{"class":78,"line":251},[76,156042,3685],{"class":90},[76,156044,156045],{"class":78,"line":257},[76,156046,149],{"emptyLinePlaceholder":148},[76,156048,156049,156052,156054],{"class":78,"line":641},[76,156050,156051],{"class":90},"bar ",[76,156053,370],{"class":82},[76,156055,156056],{"class":90}," Bar()\n",[76,156058,156059,156062,156065],{"class":78,"line":646},[76,156060,156061],{"class":90},"bar.add_xaxis(",[76,156063,156064],{"class":119},"list",[76,156066,156067],{"class":90},"(category_total.keys()))\n",[76,156069,156070,156073,156075,156077,156079],{"class":78,"line":659},[76,156071,156072],{"class":90},"bar.add_yaxis(",[76,156074,149312],{"class":126},[76,156076,405],{"class":90},[76,156078,156064],{"class":119},[76,156080,156081],{"class":90},"(category_total.values()))\n",[76,156083,156084],{"class":78,"line":1608},[76,156085,156086],{"class":90},"bar.set_global_opts(\n",[76,156088,156089,156091,156093,156095,156097,156099,156102],{"class":78,"line":1632},[76,156090,149490],{"class":7296},[76,156092,370],{"class":82},[76,156094,149495],{"class":90},[76,156096,53439],{"class":7296},[76,156098,370],{"class":82},[76,156100,156101],{"class":126},"\"品类销售额\"",[76,156103,40085],{"class":90},[76,156105,156106,156108,156110,156112,156114,156116,156119],{"class":78,"line":1637},[76,156107,149509],{"class":7296},[76,156109,370],{"class":82},[76,156111,149514],{"class":90},[76,156113,301],{"class":7296},[76,156115,370],{"class":82},[76,156117,156118],{"class":126},"\"品类\"",[76,156120,40085],{"class":90},[76,156122,156123,156125,156127,156129,156131,156133,156135],{"class":78,"line":1642},[76,156124,149528],{"class":7296},[76,156126,370],{"class":82},[76,156128,149514],{"class":90},[76,156130,301],{"class":7296},[76,156132,370],{"class":82},[76,156134,149312],{"class":126},[76,156136,40085],{"class":90},[76,156138,156139],{"class":78,"line":1652},[76,156140,130],{"class":90},[76,156142,156143,156146,156149],{"class":78,"line":1660},[76,156144,156145],{"class":90},"bar.render(",[76,156147,156148],{"class":126},"\"category_sales.html\"",[76,156150,130],{"class":90},[14,156152,156154],{"id":156153},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156156,156157],{},"时间线适合展示不同日期、月份、年份的数据变化。",[66,156159,156161],{"className":68,"code":156160,"language":70,"meta":71,"style":71},"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",[73,156162,156163,156177,156188,156192,156200,156224,156247,156272,156276,156280,156290,156294,156305,156314,156324,156338,156369,156374,156378],{"__ignoreMap":71},[76,156164,156165,156167,156169,156171,156173,156175],{"class":78,"line":79},[76,156166,32781],{"class":82},[76,156168,149396],{"class":90},[76,156170,32438],{"class":82},[76,156172,149401],{"class":90},[76,156174,33426],{"class":82},[76,156176,149406],{"class":90},[76,156178,156179,156181,156183,156185],{"class":78,"line":94},[76,156180,32781],{"class":82},[76,156182,149255],{"class":90},[76,156184,32438],{"class":82},[76,156186,156187],{"class":90}," Bar, Timeline\n",[76,156189,156190],{"class":78,"line":133},[76,156191,149],{"emptyLinePlaceholder":148},[76,156193,156194,156196,156198],{"class":78,"line":145},[76,156195,103680],{"class":90},[76,156197,370],{"class":82},[76,156199,17623],{"class":90},[76,156201,156202,156205,156208,156210,156212,156214,156216,156218,156220,156222],{"class":78,"line":152},[76,156203,156204],{"class":126},"    \"2024-10-01\"",[76,156206,156207],{"class":90},": {",[76,156209,155637],{"class":126},[76,156211,53469],{"class":90},[76,156213,155646],{"class":119},[76,156215,405],{"class":90},[76,156217,155667],{"class":126},[76,156219,53469],{"class":90},[76,156221,155676],{"class":119},[76,156223,7012],{"class":90},[76,156225,156226,156229,156231,156233,156235,156237,156239,156241,156243,156245],{"class":78,"line":157},[76,156227,156228],{"class":126},"    \"2024-10-02\"",[76,156230,156207],{"class":90},[76,156232,155637],{"class":126},[76,156234,53469],{"class":90},[76,156236,155705],{"class":119},[76,156238,405],{"class":90},[76,156240,155667],{"class":126},[76,156242,53469],{"class":90},[76,156244,155734],{"class":119},[76,156246,7012],{"class":90},[76,156248,156249,156252,156254,156256,156258,156261,156263,156265,156267,156270],{"class":78,"line":246},[76,156250,156251],{"class":126},"    \"2024-10-03\"",[76,156253,156207],{"class":90},[76,156255,155637],{"class":126},[76,156257,53469],{"class":90},[76,156259,156260],{"class":119},"17000",[76,156262,405],{"class":90},[76,156264,155667],{"class":126},[76,156266,53469],{"class":90},[76,156268,156269],{"class":119},"19000",[76,156271,7012],{"class":90},[76,156273,156274],{"class":78,"line":251},[76,156275,3685],{"class":90},[76,156277,156278],{"class":78,"line":257},[76,156279,149],{"emptyLinePlaceholder":148},[76,156281,156282,156285,156287],{"class":78,"line":641},[76,156283,156284],{"class":90},"timeline ",[76,156286,370],{"class":82},[76,156288,156289],{"class":90}," Timeline()\n",[76,156291,156292],{"class":78,"line":646},[76,156293,149],{"emptyLinePlaceholder":148},[76,156295,156296,156298,156301,156303],{"class":78,"line":659},[76,156297,5112],{"class":82},[76,156299,156300],{"class":90}," date, category_data ",[76,156302,1475],{"class":82},[76,156304,151165],{"class":90},[76,156306,156307,156310,156312],{"class":78,"line":1608},[76,156308,156309],{"class":90},"    bar ",[76,156311,370],{"class":82},[76,156313,156056],{"class":90},[76,156315,156316,156319,156321],{"class":78,"line":1632},[76,156317,156318],{"class":90},"    bar.add_xaxis(",[76,156320,156064],{"class":119},[76,156322,156323],{"class":90},"(category_data.keys()))\n",[76,156325,156326,156329,156331,156333,156335],{"class":78,"line":1637},[76,156327,156328],{"class":90},"    bar.add_yaxis(",[76,156330,149312],{"class":126},[76,156332,405],{"class":90},[76,156334,156064],{"class":119},[76,156336,156337],{"class":90},"(category_data.values()))\n",[76,156339,156340,156343,156346,156348,156350,156352,156354,156356,156358,156360,156362,156364,156367],{"class":78,"line":1642},[76,156341,156342],{"class":90},"    bar.set_global_opts(",[76,156344,156345],{"class":7296},"title_opts",[76,156347,370],{"class":82},[76,156349,149495],{"class":90},[76,156351,53439],{"class":7296},[76,156353,370],{"class":82},[76,156355,292],{"class":82},[76,156357,307],{"class":126},[76,156359,298],{"class":119},[76,156361,75953],{"class":90},[76,156363,304],{"class":119},[76,156365,156366],{"class":126},"销售额\"",[76,156368,656],{"class":90},[76,156370,156371],{"class":78,"line":1652},[76,156372,156373],{"class":90},"    timeline.add(bar, date)\n",[76,156375,156376],{"class":78,"line":1660},[76,156377,149],{"emptyLinePlaceholder":148},[76,156379,156380,156383,156386],{"class":78,"line":1683},[76,156381,156382],{"class":90},"timeline.render(",[76,156384,156385],{"class":126},"\"timeline_sales.html\"",[76,156387,130],{"class":90},[14,156389,156391],{"id":156390},"_128-绘制地图","12.8 绘制地图",[19,156393,156394],{},"地图适合展示地区数据。",[66,156396,156398],{"className":68,"code":156397,"language":70,"meta":71,"style":71},"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",[73,156399,156400,156414,156425,156429,156437,156450,156462,156475,156488,156492,156496,156506,156521,156526,156543,156562,156566],{"__ignoreMap":71},[76,156401,156402,156404,156406,156408,156410,156412],{"class":78,"line":79},[76,156403,32781],{"class":82},[76,156405,149396],{"class":90},[76,156407,32438],{"class":82},[76,156409,149401],{"class":90},[76,156411,33426],{"class":82},[76,156413,149406],{"class":90},[76,156415,156416,156418,156420,156422],{"class":78,"line":94},[76,156417,32781],{"class":82},[76,156419,149255],{"class":90},[76,156421,32438],{"class":82},[76,156423,156424],{"class":90}," Map\n",[76,156426,156427],{"class":78,"line":133},[76,156428,149],{"emptyLinePlaceholder":148},[76,156430,156431,156433,156435],{"class":78,"line":145},[76,156432,103680],{"class":90},[76,156434,370],{"class":82},[76,156436,57478],{"class":90},[76,156438,156439,156442,156444,156446,156448],{"class":78,"line":152},[76,156440,156441],{"class":90},"    (",[76,156443,71297],{"class":126},[76,156445,405],{"class":90},[76,156447,3075],{"class":119},[76,156449,40085],{"class":90},[76,156451,156452,156454,156456,156458,156460],{"class":78,"line":157},[76,156453,156441],{"class":90},[76,156455,71317],{"class":126},[76,156457,405],{"class":90},[76,156459,149329],{"class":119},[76,156461,40085],{"class":90},[76,156463,156464,156466,156469,156471,156473],{"class":78,"line":246},[76,156465,156441],{"class":90},[76,156467,156468],{"class":126},"\"广东\"",[76,156470,405],{"class":90},[76,156472,2133],{"class":119},[76,156474,40085],{"class":90},[76,156476,156477,156479,156482,156484,156486],{"class":78,"line":251},[76,156478,156441],{"class":90},[76,156480,156481],{"class":126},"\"浙江\"",[76,156483,405],{"class":90},[76,156485,149334],{"class":119},[76,156487,40085],{"class":90},[76,156489,156490],{"class":78,"line":257},[76,156491,35284],{"class":90},[76,156493,156494],{"class":78,"line":641},[76,156495,149],{"emptyLinePlaceholder":148},[76,156497,156498,156501,156503],{"class":78,"line":646},[76,156499,156500],{"class":90},"map_chart ",[76,156502,370],{"class":82},[76,156504,156505],{"class":90}," Map()\n",[76,156507,156508,156511,156513,156516,156519],{"class":78,"line":659},[76,156509,156510],{"class":90},"map_chart.add(",[76,156512,149312],{"class":126},[76,156514,156515],{"class":90},", data, ",[76,156517,156518],{"class":126},"\"china\"",[76,156520,130],{"class":90},[76,156522,156523],{"class":78,"line":1608},[76,156524,156525],{"class":90},"map_chart.set_global_opts(\n",[76,156527,156528,156530,156532,156534,156536,156538,156541],{"class":78,"line":1632},[76,156529,149490],{"class":7296},[76,156531,370],{"class":82},[76,156533,149495],{"class":90},[76,156535,53439],{"class":7296},[76,156537,370],{"class":82},[76,156539,156540],{"class":126},"\"地区销售额\"",[76,156542,40085],{"class":90},[76,156544,156545,156548,156550,156553,156556,156558,156560],{"class":78,"line":1637},[76,156546,156547],{"class":7296},"    visualmap_opts",[76,156549,370],{"class":82},[76,156551,156552],{"class":90},"opts.VisualMapOpts(",[76,156554,156555],{"class":7296},"max_",[76,156557,370],{"class":82},[76,156559,2133],{"class":119},[76,156561,40085],{"class":90},[76,156563,156564],{"class":78,"line":1642},[76,156565,130],{"class":90},[76,156567,156568,156571,156574],{"class":78,"line":1652},[76,156569,156570],{"class":90},"map_chart.render(",[76,156572,156573],{"class":126},"\"map_sales.html\"",[76,156575,130],{"class":90},[19,156577,156578],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156580,156582],{"id":156581},"_129-项目拆分建议","12.9 项目拆分建议",[19,156584,156585],{},"当代码超过一个文件时，可以这样组织：",[66,156587,156590],{"className":156588,"code":156589,"language":7268,"meta":71},[7266],"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",[73,156591,156589],{"__ignoreMap":71},[19,156593,156594],{},"职责：",[26,156596,156597,156603,156609,156615],{},[29,156598,156599,156602],{},[73,156600,156601],{},"main.py","：程序入口。",[29,156604,156605,156608],{},[73,156606,156607],{},"file_utils.py","：读写 JSON。",[29,156610,156611,156614],{},[73,156612,156613],{},"sales_service.py","：统计销售数据。",[29,156616,156617,156620],{},[73,156618,156619],{},"chart_builder.py","：生成图表。",[14,156622,156624],{"id":156623},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156626,156627],{},"语法基础：",[26,156629,156630,156633,156636,156639],{},[29,156631,156632],{},"会写变量、注释、输入输出。",[29,156634,156635],{},"会使用 int、float、str、bool。",[29,156637,156638],{},"会做类型转换。",[29,156640,156641],{},"会使用 f-string 格式化输出。",[19,156643,156644],{},"流程控制：",[26,156646,156647,156653,156659,156667],{},[29,156648,156649,156650,490],{},"会写 ",[73,156651,156652],{},"if elif else",[29,156654,156649,156655,103040,156657,490],{},[73,156656,1892],{},[73,156658,5112],{},[29,156660,156661,156662,103040,156664,490],{},"理解 ",[73,156663,4149],{},[73,156665,156666],{},"continue",[29,156668,156669],{},"能写嵌套循环。",[19,156671,156672],{},"函数：",[26,156674,156675,156678,156681,156684],{},[29,156676,156677],{},"会定义和调用函数。",[29,156679,156680],{},"理解参数和返回值。",[29,156682,156683],{},"知道局部变量和全局变量。",[29,156685,156686],{},"会使用默认参数、关键字参数、不定长参数。",[19,156688,156689],{},"容器：",[26,156691,156692,156695,156698,156701,156704],{},[29,156693,156694],{},"会使用列表增删改查。",[29,156696,156697],{},"会遍历列表、字典。",[29,156699,156700],{},"会使用切片。",[29,156702,156703],{},"会用集合去重。",[29,156705,156706],{},"会处理列表嵌套字典。",[19,156708,156709],{},"文件和模块：",[26,156711,156712,156715,156718,156721,156724],{},[29,156713,156714],{},"会读写文本文件。",[29,156716,156717],{},"会读写 JSON。",[29,156719,156720],{},"会捕获常见异常。",[29,156722,156723],{},"会导入模块和第三方包。",[29,156725,156726],{},"会创建简单包结构。",[19,156728,156729],{},"项目能力：",[26,156731,156732,156735,156738,156741,156744],{},[29,156733,156734],{},"能把代码拆成函数。",[29,156736,156737],{},"能把数据保存到文件。",[29,156739,156740],{},"能处理用户输入错误。",[29,156742,156743],{},"能写一个完整菜单程序。",[29,156745,156746],{},"能用 pyecharts 生成图表。",[14,156748,156750],{"id":156749},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156752,156753,156756,156759,156762,156765,156768,156771,156774],{},[29,156754,156755],{},"猜数字游戏。",[29,156757,156758],{},"ATM 菜单程序。",[29,156760,156761],{},"学生成绩统计。",[29,156763,156764],{},"学生管理系统函数版。",[29,156766,156767],{},"学生管理系统文件持久化版。",[29,156769,156770],{},"学生管理系统面向对象版。",[29,156772,156773],{},"销售数据统计。",[29,156775,156776],{},"销售数据可视化。",[14,156778,156780],{"id":156779},"_1212-常见学习误区","12.12 常见学习误区",[26,156782,156783,156786,156789,156792,156795,156798,156801],{},[29,156784,156785],{},"只看视频不敲代码。",[29,156787,156788],{},"一报错就复制错误去搜，不先读报错位置。",[29,156790,156791],{},"变量名随便写，后续自己看不懂。",[29,156793,156794],{},"所有代码都写在一个文件一个函数里。",[29,156796,156797],{},"不保存练习代码，复习时没有材料。",[29,156799,156800],{},"还没掌握列表字典就急着学框架。",[29,156802,156803],{},"不会读官方文档，只依赖教程。",[14,156805,156807],{"id":156806},"_1213-如何读报错","12.13 如何读报错",[19,156809,156810],{},"报错通常从下往上看最后几行。",[19,156812,100],{},[66,156814,156817],{"className":156815,"code":156816,"language":7268,"meta":71},[7266],"ValueError: invalid literal for int() with base 10: 'abc'\n",[73,156818,156816],{"__ignoreMap":71},[19,156820,26649],{},[26,156822,156823,156829,156839],{},[29,156824,156825,156826,490],{},"异常类型是 ",[73,156827,156828],{},"ValueError",[29,156830,109367,156831,156834,156835,156838],{},[73,156832,156833],{},"int()"," 无法把 ",[73,156836,156837],{},"'abc'"," 转成整数。",[29,156840,156841],{},"应该检查输入内容或增加异常处理。",[19,156843,156844],{},"再看文件名和行号：",[66,156846,156849],{"className":156847,"code":156848,"language":7268,"meta":71},[7266],"File \"main.py\", line 10, in \u003Cmodule>\n",[73,156850,156848],{"__ignoreMap":71},[19,156852,156853,156854,156856],{},"表示错误发生在 ",[73,156855,156601],{}," 第 10 行。",[14,156858,156860],{"id":156859},"_1214-后续学习方向","12.14 后续学习方向",[19,156862,156863],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156865,156866,156878,156887,156899,156910,156919,156929],{},[29,156867,156868,156869,2478,156872,2478,156875,490],{},"自动化办公：",[73,156870,156871],{},"openpyxl",[73,156873,156874],{},"python-docx",[73,156876,156877],{},"pdfplumber",[29,156879,156880,156881,2478,156883,2478,156885,490],{},"数据分析：",[73,156882,102648],{},[73,156884,148205],{},[73,156886,148213],{},[29,156888,156889,156890,2478,156893,2478,156896,490],{},"Web 后端：",[73,156891,156892],{},"Flask",[73,156894,156895],{},"FastAPI",[73,156897,156898],{},"Django",[29,156900,156901,156902,2478,156904,2478,156907,490],{},"爬虫：",[73,156903,148190],{},[73,156905,156906],{},"BeautifulSoup",[73,156908,156909],{},"Scrapy",[29,156911,156912,156913,2478,156915,156918],{},"测试开发：",[73,156914,148237],{},[73,156916,156917],{},"selenium","、接口测试。",[29,156920,156921,156922,2478,156924,2478,156926,490],{},"人工智能：",[73,156923,102648],{},[73,156925,148205],{},[73,156927,156928],{},"pytorch",[29,156930,156931,156932,2478,156934,2478,156937,490],{},"运维脚本：",[73,156933,147806],{},[73,156935,156936],{},"subprocess",[73,156938,156939],{},"paramiko",[19,156941,156942],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156944,156946],{"id":156945},"_1215-结课练习","12.15 结课练习",[26,156948,156949,156952,156955,156958,156961,156964,156967,156970],{},[29,156950,156951],{},"完成函数版学生管理系统。",[29,156953,156954],{},"给学生管理系统增加 JSON 持久化。",[29,156956,156957],{},"给学生管理系统增加异常处理。",[29,156959,156960],{},"把学生管理系统改成面向对象版。",[29,156962,156963],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156965,156966],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156968,156969],{},"按品类统计销售额并绘制柱状图。",[29,156971,156972],{},"写一份自己的 Python 学习路线图。",[2178,156974,156975],{},"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":71,"searchDepth":94,"depth":94,"links":156977},[156978,156979,156982,156983,156984,156990,156991,156992,156993,156994,156995,156996,156997,156998,156999],{"id":153705,"depth":94,"text":153706},{"id":153755,"depth":94,"text":153756,"children":156980},[156981],{"id":153759,"depth":133,"text":153760},{"id":153798,"depth":94,"text":153799},{"id":155261,"depth":94,"text":155262},{"id":155599,"depth":94,"text":155600,"children":156985},[156986,156987,156988,156989],{"id":155603,"depth":133,"text":155604},{"id":155743,"depth":133,"text":155744},{"id":155833,"depth":133,"text":155834},{"id":155919,"depth":133,"text":155920},{"id":155960,"depth":94,"text":155961},{"id":156153,"depth":94,"text":156154},{"id":156390,"depth":94,"text":156391},{"id":156581,"depth":94,"text":156582},{"id":156623,"depth":94,"text":156624},{"id":156749,"depth":94,"text":156750},{"id":156779,"depth":94,"text":156780},{"id":156806,"depth":94,"text":156807},{"id":156859,"depth":94,"text":156860},{"id":156945,"depth":94,"text":156946},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153697,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157006,"title":157007,"body":157008,"description":2201,"extension":2202,"meta":159473,"navigation":148,"path":159474,"seo":159475,"stem":159476,"__hash__":159477},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157009,"toc":159448},[157010,157013,157017,157020,157023,157043,157046,157069,157072,157075,157097,157100,157122,157126,157129,157169,157172,157293,157297,157300,157340,157343,157367,157370,157374,157377,157391,157424,157427,157462,157465,157488,157491,157524,157527,157529,157535,157610,157613,157619,157636,157676,157680,157683,157729,157731,157769,157772,157807,157810,157845,157848,157880,157883,157902,157906,157910,158023,158025,158100,158104,158150,158153,158179,158188,158192,158195,158258,158266,158293,158297,158337,158402,158406,158409,158448,158451,158496,158499,158560,158564,158591,158594,158622,158625,158629,158633,158697,158700,158738,158741,158773,158777,158876,158880,158883,158956,158959,159006,159010,159016,159055,159058,159105,159108,159157,159161,159163,159177,159179,159360,159364,159391,159411,159418,159422,159439,159445],[10,157011,157007],{"id":157012},"_2-基础语法变量与字符串",[14,157014,157016],{"id":157015},"_21-注释","2.1 注释",[19,157018,157019],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157021,157022],{},"单行注释：",[66,157024,157026],{"className":68,"code":157025,"language":70,"meta":71,"style":71},"# 这是单行注释\nprint(\"hello\")\n",[73,157027,157028,157033],{"__ignoreMap":71},[76,157029,157030],{"class":78,"line":79},[76,157031,157032],{"class":540},"# 这是单行注释\n",[76,157034,157035,157037,157039,157041],{"class":78,"line":94},[76,157036,478],{"class":119},[76,157038,123],{"class":90},[76,157040,127],{"class":126},[76,157042,130],{"class":90},[19,157044,157045],{},"多行说明常用三引号：",[66,157047,157049],{"className":68,"code":157048,"language":70,"meta":71,"style":71},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[73,157050,157051,157055,157060,157065],{"__ignoreMap":71},[76,157052,157053],{"class":78,"line":79},[76,157054,97720],{"class":126},[76,157056,157057],{"class":78,"line":94},[76,157058,157059],{"class":126},"这是多行说明。\n",[76,157061,157062],{"class":78,"line":133},[76,157063,157064],{"class":126},"常用于文件顶部说明、函数说明等。\n",[76,157066,157067],{"class":78,"line":145},[76,157068,97720],{"class":126},[19,157070,157071],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157073,157074],{},"不好：",[66,157076,157078],{"className":68,"code":157077,"language":70,"meta":71,"style":71},"# age 加 1\nage = age + 1\n",[73,157079,157080,157085],{"__ignoreMap":71},[76,157081,157082],{"class":78,"line":79},[76,157083,157084],{"class":540},"# age 加 1\n",[76,157086,157087,157089,157091,157093,157095],{"class":78,"line":94},[76,157088,148565],{"class":90},[76,157090,370],{"class":82},[76,157092,581],{"class":90},[76,157094,376],{"class":82},[76,157096,1063],{"class":119},[19,157098,157099],{},"较好：",[66,157101,157103],{"className":68,"code":157102,"language":70,"meta":71,"style":71},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[73,157104,157105,157110],{"__ignoreMap":71},[76,157106,157107],{"class":78,"line":79},[76,157108,157109],{"class":540},"# 用户过完生日后，年龄增加一岁\n",[76,157111,157112,157114,157116,157118,157120],{"class":78,"line":94},[76,157113,148565],{"class":90},[76,157115,370],{"class":82},[76,157117,581],{"class":90},[76,157119,376],{"class":82},[76,157121,1063],{"class":119},[14,157123,157125],{"id":157124},"_22-字面量","2.2 字面量",[19,157127,157128],{},"字面量就是代码中直接写出来的数据。",[66,157130,157132],{"className":68,"code":157131,"language":70,"meta":71,"style":71},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[73,157133,157134,157141,157148,157155,157162],{"__ignoreMap":71},[76,157135,157136,157138],{"class":78,"line":79},[76,157137,2575],{"class":119},[76,157139,157140],{"class":540},"          # 整数\n",[76,157142,157143,157145],{"class":78,"line":94},[76,157144,2319],{"class":119},[76,157146,157147],{"class":540},"         # 小数\n",[76,157149,157150,157152],{"class":78,"line":133},[76,157151,127],{"class":126},[76,157153,157154],{"class":540},"      # 字符串\n",[76,157156,157157,157159],{"class":78,"line":145},[76,157158,33519],{"class":119},[76,157160,157161],{"class":540},"         # 布尔值\n",[76,157163,157164,157166],{"class":78,"line":152},[76,157165,489],{"class":119},[76,157167,157168],{"class":540},"         # 空值\n",[19,157170,157171],{},"常见字面量类型：",[2404,157173,157174,157184],{},[2407,157175,157176],{},[2410,157177,157178,157180,157182],{},[2413,157179,25786],{},[2413,157181,29541],{},[2413,157183,27919],{},[2451,157185,157186,157197,157208,157219,157231,157243,157255,157268,157280],{},[2410,157187,157188,157190,157194],{},[2456,157189,1360],{},[2456,157191,157192],{},[73,157193,2575],{},[2456,157195,157196],{},"整数",[2410,157198,157199,157201,157205],{},[2456,157200,2311],{},[2456,157202,157203],{},[73,157204,2319],{},[2456,157206,157207],{},"浮点数",[2410,157209,157210,157212,157216],{},[2456,157211,1402],{},[2456,157213,157214],{},[73,157215,127],{},[2456,157217,157218],{},"字符串",[2410,157220,157221,157223,157229],{},[2456,157222,3475],{},[2456,157224,157225,2478,157227],{},[73,157226,33519],{},[73,157228,36025],{},[2456,157230,68043],{},[2410,157232,157233,157236,157240],{},[2456,157234,157235],{},"NoneType",[2456,157237,157238],{},[73,157239,489],{},[2456,157241,157242],{},"空值",[2410,157244,157245,157247,157252],{},[2456,157246,156064],{},[2456,157248,157249],{},[73,157250,157251],{},"[1, 2, 3]",[2456,157253,157254],{},"列表",[2410,157256,157257,157260,157265],{},[2456,157258,157259],{},"tuple",[2456,157261,157262],{},[73,157263,157264],{},"(1, 2, 3)",[2456,157266,157267],{},"元组",[2410,157269,157270,157272,157277],{},[2456,157271,116566],{},[2456,157273,157274],{},[73,157275,157276],{},"{\"name\": \"张三\"}",[2456,157278,157279],{},"字典",[2410,157281,157282,157285,157290],{},[2456,157283,157284],{},"set",[2456,157286,157287],{},[73,157288,157289],{},"{1, 2, 3}",[2456,157291,157292],{},"集合",[14,157294,157296],{"id":157295},"_23-变量","2.3 变量",[19,157298,157299],{},"变量是保存数据的名字。",[66,157301,157303],{"className":68,"code":157302,"language":70,"meta":71,"style":71},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[73,157304,157305,157313,157321,157331],{"__ignoreMap":71},[76,157306,157307,157309,157311],{"class":78,"line":79},[76,157308,966],{"class":90},[76,157310,370],{"class":82},[76,157312,971],{"class":126},[76,157314,157315,157317,157319],{"class":78,"line":94},[76,157316,148565],{"class":90},[76,157318,370],{"class":82},[76,157320,148570],{"class":119},[76,157322,157323,157326,157328],{"class":78,"line":133},[76,157324,157325],{"class":90},"height ",[76,157327,370],{"class":82},[76,157329,157330],{"class":119}," 1.75\n",[76,157332,157333,157336,157338],{"class":78,"line":145},[76,157334,157335],{"class":90},"is_student ",[76,157337,370],{"class":82},[76,157339,155593],{"class":119},[19,157341,157342],{},"Python 的变量不需要提前声明类型：",[66,157344,157346],{"className":68,"code":157345,"language":70,"meta":71,"style":71},"score = 100\nscore = \"满分\"\n",[73,157347,157348,157358],{"__ignoreMap":71},[76,157349,157350,157353,157355],{"class":78,"line":79},[76,157351,157352],{"class":90},"score ",[76,157354,370],{"class":82},[76,157356,157357],{"class":119}," 100\n",[76,157359,157360,157362,157364],{"class":78,"line":94},[76,157361,157352],{"class":90},[76,157363,370],{"class":82},[76,157365,157366],{"class":126}," \"满分\"\n",[19,157368,157369],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157371,157373],{"id":157372},"_24-变量命名规则","2.4 变量命名规则",[19,157375,157376],{},"硬性规则：",[26,157378,157379,157382,157385,157388],{},[29,157380,157381],{},"只能由字母、数字、下划线组成。",[29,157383,157384],{},"不能以数字开头。",[29,157386,157387],{},"不能使用 Python 关键字。",[29,157389,157390],{},"区分大小写。",[66,157392,157394],{"className":68,"code":157393,"language":70,"meta":71,"style":71},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[73,157395,157396,157405,157414],{"__ignoreMap":71},[76,157397,157398,157401,157403],{"class":78,"line":79},[76,157399,157400],{"class":90},"user_name ",[76,157402,370],{"class":82},[76,157404,148560],{"class":126},[76,157406,157407,157410,157412],{"class":78,"line":94},[76,157408,157409],{"class":90},"age2 ",[76,157411,370],{"class":82},[76,157413,148570],{"class":119},[76,157415,157416,157419,157421],{"class":78,"line":133},[76,157417,157418],{"class":90},"_token ",[76,157420,370],{"class":82},[76,157422,157423],{"class":126}," \"abc\"\n",[19,157425,157426],{},"错误写法：",[66,157428,157430],{"className":68,"code":157429,"language":70,"meta":71,"style":71},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[73,157431,157432,157441,157453],{"__ignoreMap":71},[76,157433,157434,157437,157439],{"class":78,"line":79},[76,157435,157436],{"class":79429},"2age",[76,157438,15617],{"class":82},[76,157440,148570],{"class":119},[76,157442,157443,157445,157447,157449,157451],{"class":78,"line":94},[76,157444,133604],{"class":90},[76,157446,666],{"class":82},[76,157448,966],{"class":90},[76,157450,370],{"class":82},[76,157452,148560],{"class":126},[76,157454,157455,157457,157459],{"class":78,"line":133},[76,157456,16747],{"class":82},[76,157458,15617],{"class":82},[76,157460,157461],{"class":126}," \"一班\"\n",[19,157463,157464],{},"查看关键字：",[66,157466,157468],{"className":68,"code":157467,"language":70,"meta":71,"style":71},"import keyword\n\nprint(keyword.kwlist)\n",[73,157469,157470,157477,157481],{"__ignoreMap":71},[76,157471,157472,157474],{"class":78,"line":79},[76,157473,32438],{"class":82},[76,157475,157476],{"class":90}," keyword\n",[76,157478,157479],{"class":78,"line":94},[76,157480,149],{"emptyLinePlaceholder":148},[76,157482,157483,157485],{"class":78,"line":133},[76,157484,478],{"class":119},[76,157486,157487],{"class":90},"(keyword.kwlist)\n",[19,157489,157490],{},"推荐命名风格：",[66,157492,157494],{"className":68,"code":157493,"language":70,"meta":71,"style":71},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[73,157495,157496,157505,157515],{"__ignoreMap":71},[76,157497,157498,157501,157503],{"class":78,"line":79},[76,157499,157500],{"class":90},"student_name ",[76,157502,370],{"class":82},[76,157504,971],{"class":126},[76,157506,157507,157510,157512],{"class":78,"line":94},[76,157508,157509],{"class":90},"total_price ",[76,157511,370],{"class":82},[76,157513,157514],{"class":119}," 99.8\n",[76,157516,157517,157520,157522],{"class":78,"line":133},[76,157518,157519],{"class":90},"is_finished ",[76,157521,370],{"class":82},[76,157523,127827],{"class":119},[19,157525,157526],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157528,52764],{"id":52763},[19,157530,106388,157531,157534],{},[73,157532,157533],{},"type()"," 查看数据类型：",[66,157536,157538],{"className":68,"code":157537,"language":70,"meta":71,"style":71},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[73,157539,157540,157554,157568,157582,157596],{"__ignoreMap":71},[76,157541,157542,157544,157546,157548,157550,157552],{"class":78,"line":79},[76,157543,478],{"class":119},[76,157545,123],{"class":90},[76,157547,105129],{"class":119},[76,157549,123],{"class":90},[76,157551,2575],{"class":119},[76,157553,656],{"class":90},[76,157555,157556,157558,157560,157562,157564,157566],{"class":78,"line":94},[76,157557,478],{"class":119},[76,157559,123],{"class":90},[76,157561,105129],{"class":119},[76,157563,123],{"class":90},[76,157565,2319],{"class":119},[76,157567,656],{"class":90},[76,157569,157570,157572,157574,157576,157578,157580],{"class":78,"line":133},[76,157571,478],{"class":119},[76,157573,123],{"class":90},[76,157575,105129],{"class":119},[76,157577,123],{"class":90},[76,157579,127],{"class":126},[76,157581,656],{"class":90},[76,157583,157584,157586,157588,157590,157592,157594],{"class":78,"line":145},[76,157585,478],{"class":119},[76,157587,123],{"class":90},[76,157589,105129],{"class":119},[76,157591,123],{"class":90},[76,157593,33519],{"class":119},[76,157595,656],{"class":90},[76,157597,157598,157600,157602,157604,157606,157608],{"class":78,"line":152},[76,157599,478],{"class":119},[76,157601,123],{"class":90},[76,157603,105129],{"class":119},[76,157605,123],{"class":90},[76,157607,489],{"class":119},[76,157609,656],{"class":90},[19,157611,157612],{},"输出类似：",[66,157614,157617],{"className":157615,"code":157616,"language":7268,"meta":71},[7266],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[73,157618,157616],{"__ignoreMap":71},[19,157620,163,157621,109305,157623,157625,157626,157628,157629,23549,157631,157628,157633,157635],{},[73,157622,3475],{},[73,157624,1360],{}," 的子类，",[73,157627,33519],{}," 可以当作 ",[73,157630,669],{},[73,157632,36025],{},[73,157634,1294],{},"，但业务代码中不要滥用。",[66,157637,157639],{"className":68,"code":157638,"language":70,"meta":71,"style":71},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[73,157640,157641,157659],{"__ignoreMap":71},[76,157642,157643,157645,157647,157649,157651,157653,157656],{"class":78,"line":79},[76,157644,478],{"class":119},[76,157646,123],{"class":90},[76,157648,33519],{"class":119},[76,157650,47601],{"class":82},[76,157652,27168],{"class":119},[76,157654,157655],{"class":90},")   ",[76,157657,157658],{"class":540},"# 2\n",[76,157660,157661,157663,157665,157667,157669,157671,157673],{"class":78,"line":94},[76,157662,478],{"class":119},[76,157664,123],{"class":90},[76,157666,36025],{"class":119},[76,157668,47601],{"class":82},[76,157670,27168],{"class":119},[76,157672,47842],{"class":90},[76,157674,157675],{"class":540},"# 1\n",[14,157677,157679],{"id":157678},"_26-类型转换","2.6 类型转换",[19,157681,157682],{},"常用转换函数：",[66,157684,157686],{"className":68,"code":157685,"language":70,"meta":71,"style":71},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[73,157687,157688,157698,157709,157719],{"__ignoreMap":71},[76,157689,157690,157692,157694,157696],{"class":78,"line":79},[76,157691,1360],{"class":119},[76,157693,123],{"class":90},[76,157695,56347],{"class":126},[76,157697,130],{"class":90},[76,157699,157700,157702,157704,157707],{"class":78,"line":94},[76,157701,2311],{"class":119},[76,157703,123],{"class":90},[76,157705,157706],{"class":126},"\"3.14\"",[76,157708,130],{"class":90},[76,157710,157711,157713,157715,157717],{"class":78,"line":133},[76,157712,1402],{"class":119},[76,157714,123],{"class":90},[76,157716,2575],{"class":119},[76,157718,130],{"class":90},[76,157720,157721,157723,157725,157727],{"class":78,"line":145},[76,157722,3475],{"class":119},[76,157724,123],{"class":90},[76,157726,669],{"class":119},[76,157728,130],{"class":90},[19,157730,100],{},[66,157732,157734],{"className":68,"code":157733,"language":70,"meta":71,"style":71},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[73,157735,157736,157745,157756],{"__ignoreMap":71},[76,157737,157738,157740,157742],{"class":78,"line":79},[76,157739,148565],{"class":90},[76,157741,370],{"class":82},[76,157743,157744],{"class":126}," \"18\"\n",[76,157746,157747,157749,157751,157753],{"class":78,"line":94},[76,157748,148565],{"class":90},[76,157750,370],{"class":82},[76,157752,4478],{"class":119},[76,157754,157755],{"class":90},"(age)\n",[76,157757,157758,157760,157763,157765,157767],{"class":78,"line":133},[76,157759,478],{"class":119},[76,157761,157762],{"class":90},"(age ",[76,157764,376],{"class":82},[76,157766,27168],{"class":119},[76,157768,130],{"class":90},[19,157770,157771],{},"输入得到的内容永远是字符串：",[66,157773,157775],{"className":68,"code":157774,"language":70,"meta":71,"style":71},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[73,157776,157777,157793],{"__ignoreMap":71},[76,157778,157779,157782,157784,157786,157788,157791],{"class":78,"line":79},[76,157780,157781],{"class":90},"num ",[76,157783,370],{"class":82},[76,157785,1914],{"class":119},[76,157787,123],{"class":90},[76,157789,157790],{"class":126},"\"请输入数字:\"",[76,157792,130],{"class":90},[76,157794,157795,157797,157799,157801,157804],{"class":78,"line":94},[76,157796,478],{"class":119},[76,157798,123],{"class":90},[76,157800,105129],{"class":119},[76,157802,157803],{"class":90},"(num))  ",[76,157805,157806],{"class":540},"# str\n",[19,157808,157809],{},"如果要做数学运算，必须转换：",[66,157811,157813],{"className":68,"code":157812,"language":70,"meta":71,"style":71},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[73,157814,157815,157833],{"__ignoreMap":71},[76,157816,157817,157819,157821,157823,157825,157827,157829,157831],{"class":78,"line":79},[76,157818,157781],{"class":90},[76,157820,370],{"class":82},[76,157822,4478],{"class":119},[76,157824,123],{"class":90},[76,157826,1673],{"class":119},[76,157828,123],{"class":90},[76,157830,157790],{"class":126},[76,157832,656],{"class":90},[76,157834,157835,157837,157839,157841,157843],{"class":78,"line":94},[76,157836,478],{"class":119},[76,157838,47653],{"class":90},[76,157840,376],{"class":82},[76,157842,4134],{"class":119},[76,157844,130],{"class":90},[19,157846,157847],{},"常见错误：",[66,157849,157851],{"className":68,"code":157850,"language":70,"meta":71,"style":71},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[73,157852,157853,157866],{"__ignoreMap":71},[76,157854,157855,157857,157859,157861,157863],{"class":78,"line":79},[76,157856,1360],{"class":119},[76,157858,123],{"class":90},[76,157860,157706],{"class":126},[76,157862,157655],{"class":90},[76,157864,157865],{"class":540},"# 错误\n",[76,157867,157868,157870,157872,157875,157878],{"class":78,"line":94},[76,157869,1360],{"class":119},[76,157871,123],{"class":90},[76,157873,157874],{"class":126},"\"abc\"",[76,157876,157877],{"class":90},")    ",[76,157879,157865],{"class":540},[19,157881,157882],{},"正确写法：",[66,157884,157886],{"className":68,"code":157885,"language":70,"meta":71,"style":71},"num = float(\"3.14\")\n",[73,157887,157888],{"__ignoreMap":71},[76,157889,157890,157892,157894,157896,157898,157900],{"class":78,"line":79},[76,157891,157781],{"class":90},[76,157893,370],{"class":82},[76,157895,1668],{"class":119},[76,157897,123],{"class":90},[76,157899,157706],{"class":126},[76,157901,130],{"class":90},[14,157903,157905],{"id":157904},"_27-运算符","2.7 运算符",[889,157907,157909],{"id":157908},"_271-算术运算符","2.7.1 算术运算符",[2404,157911,157912,157923],{},[2407,157913,157914],{},[2410,157915,157916,157919,157921],{},[2413,157917,157918],{},"运算符",[2413,157920,27919],{},[2413,157922,29541],{},[2451,157924,157925,157939,157953,157967,157981,157995,158009],{},[2410,157926,157927,157931,157934],{},[2456,157928,157929],{},[73,157930,376],{},[2456,157932,157933],{},"加法",[2456,157935,157936],{},[73,157937,157938],{},"1 + 2",[2410,157940,157941,157945,157948],{},[2456,157942,157943],{},[73,157944,666],{},[2456,157946,157947],{},"减法",[2456,157949,157950],{},[73,157951,157952],{},"5 - 3",[2410,157954,157955,157959,157962],{},[2456,157956,157957],{},[73,157958,2718],{},[2456,157960,157961],{},"乘法",[2456,157963,157964],{},[73,157965,157966],{},"2 * 3",[2410,157968,157969,157973,157976],{},[2456,157970,157971],{},[73,157972,795],{},[2456,157974,157975],{},"除法，结果是浮点数",[2456,157977,157978],{},[73,157979,157980],{},"5 \u002F 2",[2410,157982,157983,157987,157990],{},[2456,157984,157985],{},[73,157986,35367],{},[2456,157988,157989],{},"整除",[2456,157991,157992],{},[73,157993,157994],{},"5 \u002F\u002F 2",[2410,157996,157997,158001,158004],{},[2456,157998,157999],{},[73,158000,2592],{},[2456,158002,158003],{},"取余",[2456,158005,158006],{},[73,158007,158008],{},"5 % 2",[2410,158010,158011,158015,158018],{},[2456,158012,158013],{},[73,158014,801],{},[2456,158016,158017],{},"幂运算",[2456,158019,158020],{},[73,158021,158022],{},"2 ** 3",[19,158024,100],{},[66,158026,158028],{"className":68,"code":158027,"language":70,"meta":71,"style":71},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[73,158029,158030,158048,158065,158082],{"__ignoreMap":71},[76,158031,158032,158034,158036,158038,158041,158043,158045],{"class":78,"line":79},[76,158033,478],{"class":119},[76,158035,123],{"class":90},[76,158037,2583],{"class":119},[76,158039,158040],{"class":82}," \u002F",[76,158042,16807],{"class":119},[76,158044,157655],{"class":90},[76,158046,158047],{"class":540},"# 2.5\n",[76,158049,158050,158052,158054,158056,158059,158061,158063],{"class":78,"line":94},[76,158051,478],{"class":119},[76,158053,123],{"class":90},[76,158055,2583],{"class":119},[76,158057,158058],{"class":82}," \u002F\u002F",[76,158060,16807],{"class":119},[76,158062,47842],{"class":90},[76,158064,157658],{"class":540},[76,158066,158067,158069,158071,158073,158076,158078,158080],{"class":78,"line":133},[76,158068,478],{"class":119},[76,158070,123],{"class":90},[76,158072,2583],{"class":119},[76,158074,158075],{"class":82}," %",[76,158077,16807],{"class":119},[76,158079,157655],{"class":90},[76,158081,157675],{"class":540},[76,158083,158084,158086,158088,158090,158093,158095,158097],{"class":78,"line":145},[76,158085,478],{"class":119},[76,158087,123],{"class":90},[76,158089,2345],{"class":119},[76,158091,158092],{"class":82}," **",[76,158094,80096],{"class":119},[76,158096,47842],{"class":90},[76,158098,158099],{"class":540},"# 8\n",[889,158101,158103],{"id":158102},"_272-赋值运算符","2.7.2 赋值运算符",[66,158105,158107],{"className":68,"code":158106,"language":70,"meta":71,"style":71},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[73,158108,158109,158117,158125,158133,158141],{"__ignoreMap":71},[76,158110,158111,158113,158115],{"class":78,"line":79},[76,158112,157781],{"class":90},[76,158114,370],{"class":82},[76,158116,919],{"class":119},[76,158118,158119,158121,158123],{"class":78,"line":94},[76,158120,157781],{"class":90},[76,158122,1060],{"class":82},[76,158124,56458],{"class":119},[76,158126,158127,158129,158131],{"class":78,"line":133},[76,158128,157781],{"class":90},[76,158130,1857],{"class":82},[76,158132,804],{"class":119},[76,158134,158135,158137,158139],{"class":78,"line":145},[76,158136,157781],{"class":90},[76,158138,139168],{"class":82},[76,158140,122056],{"class":119},[76,158142,158143,158145,158148],{"class":78,"line":152},[76,158144,157781],{"class":90},[76,158146,158147],{"class":82},"\u002F=",[76,158149,804],{"class":119},[19,158151,158152],{},"等价关系：",[66,158154,158156],{"className":68,"code":158155,"language":70,"meta":71,"style":71},"num += 1\nnum = num + 1\n",[73,158157,158158,158166],{"__ignoreMap":71},[76,158159,158160,158162,158164],{"class":78,"line":79},[76,158161,157781],{"class":90},[76,158163,1060],{"class":82},[76,158165,1063],{"class":119},[76,158167,158168,158170,158172,158175,158177],{"class":78,"line":94},[76,158169,157781],{"class":90},[76,158171,370],{"class":82},[76,158173,158174],{"class":90}," num ",[76,158176,376],{"class":82},[76,158178,1063],{"class":119},[19,158180,158181,158182,103040,158185,490],{},"Python 没有 ",[73,158183,158184],{},"num++",[73,158186,158187],{},"num--",[889,158189,158191],{"id":158190},"_273-比较运算符","2.7.3 比较运算符",[19,158193,158194],{},"比较运算结果是布尔值。",[66,158196,158198],{"className":68,"code":158197,"language":70,"meta":71,"style":71},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[73,158199,158200,158214,158229,158243],{"__ignoreMap":71},[76,158201,158202,158204,158206,158208,158210,158212],{"class":78,"line":79},[76,158203,478],{"class":119},[76,158205,123],{"class":90},[76,158207,402],{"class":119},[76,158209,28271],{"class":82},[76,158211,4244],{"class":119},[76,158213,130],{"class":90},[76,158215,158216,158218,158220,158222,158225,158227],{"class":78,"line":94},[76,158217,478],{"class":119},[76,158219,123],{"class":90},[76,158221,402],{"class":119},[76,158223,158224],{"class":82}," >=",[76,158226,4134],{"class":119},[76,158228,130],{"class":90},[76,158230,158231,158233,158235,158237,158239,158241],{"class":78,"line":133},[76,158232,478],{"class":119},[76,158234,123],{"class":90},[76,158236,402],{"class":119},[76,158238,103581],{"class":82},[76,158240,4179],{"class":119},[76,158242,130],{"class":90},[76,158244,158245,158247,158249,158251,158254,158256],{"class":78,"line":145},[76,158246,478],{"class":119},[76,158248,123],{"class":90},[76,158250,402],{"class":119},[76,158252,158253],{"class":82}," !=",[76,158255,4179],{"class":119},[76,158257,130],{"class":90},[19,158259,158260,158261,158263,158264,490],{},"注意：判断相等用 ",[73,158262,1250],{},"，赋值用 ",[73,158265,370],{},[66,158267,158269],{"className":68,"code":158268,"language":70,"meta":71,"style":71},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[73,158270,158271,158282],{"__ignoreMap":71},[76,158272,158273,158275,158277,158279],{"class":78,"line":79},[76,158274,148565],{"class":90},[76,158276,370],{"class":82},[76,158278,614],{"class":119},[76,158280,158281],{"class":540},"       # 赋值\n",[76,158283,158284,158286,158288,158290],{"class":78,"line":94},[76,158285,148565],{"class":90},[76,158287,1250],{"class":82},[76,158289,614],{"class":119},[76,158291,158292],{"class":540},"      # 判断是否相等\n",[889,158294,158296],{"id":158295},"_274-逻辑运算符","2.7.4 逻辑运算符",[2404,158298,158299,158307],{},[2407,158300,158301],{},[2410,158302,158303,158305],{},[2413,158304,157918],{},[2413,158306,27919],{},[2451,158308,158309,158318,158327],{},[2410,158310,158311,158315],{},[2456,158312,158313],{},[73,158314,32507],{},[2456,158316,158317],{},"并且",[2410,158319,158320,158324],{},[2456,158321,158322],{},[73,158323,117110],{},[2456,158325,158326],{},"或者",[2410,158328,158329,158334],{},[2456,158330,158331],{},[73,158332,158333],{},"not",[2456,158335,158336],{},"取反",[66,158338,158340],{"className":68,"code":158339,"language":70,"meta":71,"style":71},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[73,158341,158342,158350,158359,158363,158378,158392],{"__ignoreMap":71},[76,158343,158344,158346,158348],{"class":78,"line":79},[76,158345,148565],{"class":90},[76,158347,370],{"class":82},[76,158349,90089],{"class":119},[76,158351,158352,158355,158357],{"class":78,"line":94},[76,158353,158354],{"class":90},"has_ticket ",[76,158356,370],{"class":82},[76,158358,155593],{"class":119},[76,158360,158361],{"class":78,"line":133},[76,158362,149],{"emptyLinePlaceholder":148},[76,158364,158365,158367,158369,158371,158373,158375],{"class":78,"line":145},[76,158366,478],{"class":119},[76,158368,157762],{"class":90},[76,158370,611],{"class":82},[76,158372,614],{"class":119},[76,158374,122449],{"class":82},[76,158376,158377],{"class":90}," has_ticket)\n",[76,158379,158380,158382,158384,158386,158388,158390],{"class":78,"line":152},[76,158381,478],{"class":119},[76,158383,157762],{"class":90},[76,158385,584],{"class":82},[76,158387,614],{"class":119},[76,158389,116221],{"class":82},[76,158391,158377],{"class":90},[76,158393,158394,158396,158398,158400],{"class":78,"line":157},[76,158395,478],{"class":119},[76,158397,123],{"class":90},[76,158399,158333],{"class":82},[76,158401,158377],{"class":90},[14,158403,158405],{"id":158404},"_28-字符串定义","2.8 字符串定义",[19,158407,158408],{},"三种常见写法：",[66,158410,158412],{"className":68,"code":158411,"language":70,"meta":71,"style":71},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[73,158413,158414,158424,158433,158443],{"__ignoreMap":71},[76,158415,158416,158419,158421],{"class":78,"line":79},[76,158417,158418],{"class":90},"name1 ",[76,158420,370],{"class":82},[76,158422,158423],{"class":126}," '小明'\n",[76,158425,158426,158429,158431],{"class":78,"line":94},[76,158427,158428],{"class":90},"name2 ",[76,158430,370],{"class":82},[76,158432,971],{"class":126},[76,158434,158435,158438,158440],{"class":78,"line":133},[76,158436,158437],{"class":90},"text ",[76,158439,370],{"class":82},[76,158441,158442],{"class":126}," \"\"\"这是多行字符串\n",[76,158444,158445],{"class":78,"line":145},[76,158446,158447],{"class":126},"可以换行\"\"\"\n",[19,158449,158450],{},"字符串中包含引号：",[66,158452,158454],{"className":68,"code":158453,"language":70,"meta":71,"style":71},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[73,158455,158456,158466,158476],{"__ignoreMap":71},[76,158457,158458,158461,158463],{"class":78,"line":79},[76,158459,158460],{"class":90},"msg ",[76,158462,370],{"class":82},[76,158464,158465],{"class":126}," \"他说:'你好'\"\n",[76,158467,158468,158471,158473],{"class":78,"line":94},[76,158469,158470],{"class":90},"msg2 ",[76,158472,370],{"class":82},[76,158474,158475],{"class":126}," '他说:\"你好\"'\n",[76,158477,158478,158481,158483,158486,158489,158492,158494],{"class":78,"line":133},[76,158479,158480],{"class":90},"msg3 ",[76,158482,370],{"class":82},[76,158484,158485],{"class":126}," \"他说:",[76,158487,158488],{"class":119},"\\\"",[76,158490,158491],{"class":126},"你好",[76,158493,158488],{"class":119},[76,158495,27183],{"class":126},[19,158497,158498],{},"常见转义字符：",[2404,158500,158501,158510],{},[2407,158502,158503],{},[2410,158504,158505,158508],{},[2413,158506,158507],{},"写法",[2413,158509,102722],{},[2451,158511,158512,158522,158531,158541,158550],{},[2410,158513,158514,158519],{},[2456,158515,158516],{},[73,158517,158518],{},"\\n",[2456,158520,158521],{},"换行",[2410,158523,158524,158528],{},[2456,158525,158526],{},[73,158527,3355],{},[2456,158529,158530],{},"制表符",[2410,158532,158533,158538],{},[2456,158534,158535],{},[73,158536,158537],{},"\\\\",[2456,158539,158540],{},"反斜杠",[2410,158542,158543,158547],{},[2456,158544,158545],{},[73,158546,158488],{},[2456,158548,158549],{},"双引号",[2410,158551,158552,158557],{},[2456,158553,158554],{},[73,158555,158556],{},"\\'",[2456,158558,158559],{},"单引号",[14,158561,158563],{"id":158562},"_29-字符串拼接","2.9 字符串拼接",[66,158565,158567],{"className":68,"code":158566,"language":70,"meta":71,"style":71},"name = \"小明\"\nprint(\"你好，\" + name)\n",[73,158568,158569,158577],{"__ignoreMap":71},[76,158570,158571,158573,158575],{"class":78,"line":79},[76,158572,966],{"class":90},[76,158574,370],{"class":82},[76,158576,971],{"class":126},[76,158578,158579,158581,158583,158586,158588],{"class":78,"line":94},[76,158580,478],{"class":119},[76,158582,123],{"class":90},[76,158584,158585],{"class":126},"\"你好，\"",[76,158587,47601],{"class":82},[76,158589,158590],{"class":90}," name)\n",[19,158592,158593],{},"字符串只能和字符串拼接：",[66,158595,158597],{"className":68,"code":158596,"language":70,"meta":71,"style":71},"age = 18\nprint(\"年龄:\" + str(age))\n",[73,158598,158599,158607],{"__ignoreMap":71},[76,158600,158601,158603,158605],{"class":78,"line":79},[76,158602,148565],{"class":90},[76,158604,370],{"class":82},[76,158606,148570],{"class":119},[76,158608,158609,158611,158613,158615,158617,158619],{"class":78,"line":94},[76,158610,478],{"class":119},[76,158612,123],{"class":90},[76,158614,148537],{"class":126},[76,158616,47601],{"class":82},[76,158618,75946],{"class":119},[76,158620,158621],{"class":90},"(age))\n",[19,158623,158624],{},"更推荐使用格式化字符串。",[14,158626,158628],{"id":158627},"_210-字符串格式化","2.10 字符串格式化",[889,158630,158632],{"id":158631},"_2101-百分号格式化","2.10.1 百分号格式化",[66,158634,158636],{"className":68,"code":158635,"language":70,"meta":71,"style":71},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[73,158637,158638,158646,158654,158663,158667],{"__ignoreMap":71},[76,158639,158640,158642,158644],{"class":78,"line":79},[76,158641,966],{"class":90},[76,158643,370],{"class":82},[76,158645,971],{"class":126},[76,158647,158648,158650,158652],{"class":78,"line":94},[76,158649,148565],{"class":90},[76,158651,370],{"class":82},[76,158653,148570],{"class":119},[76,158655,158656,158658,158660],{"class":78,"line":133},[76,158657,157352],{"class":90},[76,158659,370],{"class":82},[76,158661,158662],{"class":119}," 95.5\n",[76,158664,158665],{"class":78,"line":145},[76,158666,149],{"emptyLinePlaceholder":148},[76,158668,158669,158671,158673,158675,158678,158681,158684,158687,158690,158692,158694],{"class":78,"line":152},[76,158670,478],{"class":119},[76,158672,123],{"class":90},[76,158674,1158],{"class":126},[76,158676,158677],{"class":119},"%s",[76,158679,158680],{"class":126}," 年龄:",[76,158682,158683],{"class":119},"%d",[76,158685,158686],{"class":126}," 分数:",[76,158688,158689],{"class":119},"%.1f",[76,158691,307],{"class":126},[76,158693,158075],{"class":82},[76,158695,158696],{"class":90}," (name, age, score))\n",[19,158698,158699],{},"常用占位符：",[2404,158701,158702,158711],{},[2407,158703,158704],{},[2410,158705,158706,158709],{},[2413,158707,158708],{},"占位符",[2413,158710,27919],{},[2451,158712,158713,158721,158729],{},[2410,158714,158715,158719],{},[2456,158716,158717],{},[73,158718,158677],{},[2456,158720,157218],{},[2410,158722,158723,158727],{},[2456,158724,158725],{},[73,158726,158683],{},[2456,158728,157196],{},[2410,158730,158731,158736],{},[2456,158732,158733],{},[73,158734,158735],{},"%f",[2456,158737,157207],{},[19,158739,158740],{},"精度控制：",[66,158742,158744],{"className":68,"code":158743,"language":70,"meta":71,"style":71},"price = 12.3456\nprint(\"%.2f\" % price)\n",[73,158745,158746,158755],{"__ignoreMap":71},[76,158747,158748,158750,158752],{"class":78,"line":79},[76,158749,148699],{"class":90},[76,158751,370],{"class":82},[76,158753,158754],{"class":119}," 12.3456\n",[76,158756,158757,158759,158761,158763,158766,158768,158770],{"class":78,"line":94},[76,158758,478],{"class":119},[76,158760,123],{"class":90},[76,158762,307],{"class":126},[76,158764,158765],{"class":119},"%.2f",[76,158767,307],{"class":126},[76,158769,158075],{"class":82},[76,158771,158772],{"class":90}," price)\n",[889,158774,158776],{"id":158775},"_2102-format方法","2.10.2 format方法",[66,158778,158780],{"className":68,"code":158779,"language":70,"meta":71,"style":71},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[73,158781,158782,158790,158798,158802,158821,158841],{"__ignoreMap":71},[76,158783,158784,158786,158788],{"class":78,"line":79},[76,158785,966],{"class":90},[76,158787,370],{"class":82},[76,158789,971],{"class":126},[76,158791,158792,158794,158796],{"class":78,"line":94},[76,158793,148565],{"class":90},[76,158795,370],{"class":82},[76,158797,148570],{"class":119},[76,158799,158800],{"class":78,"line":133},[76,158801,149],{"emptyLinePlaceholder":148},[76,158803,158804,158806,158808,158810,158812,158814,158816,158818],{"class":78,"line":145},[76,158805,478],{"class":119},[76,158807,123],{"class":90},[76,158809,1158],{"class":126},[76,158811,34498],{"class":119},[76,158813,158680],{"class":126},[76,158815,34498],{"class":119},[76,158817,307],{"class":126},[76,158819,158820],{"class":90},".format(name, age))\n",[76,158822,158823,158825,158827,158829,158832,158834,158837,158839],{"class":78,"line":152},[76,158824,478],{"class":119},[76,158826,123],{"class":90},[76,158828,1158],{"class":126},[76,158830,158831],{"class":119},"{0}",[76,158833,158680],{"class":126},[76,158835,158836],{"class":119},"{1}",[76,158838,307],{"class":126},[76,158840,158820],{"class":90},[76,158842,158843,158845,158847,158849,158852,158854,158857,158859,158862,158864,158866,158869,158871,158873],{"class":78,"line":157},[76,158844,478],{"class":119},[76,158846,123],{"class":90},[76,158848,1158],{"class":126},[76,158850,158851],{"class":119},"{name}",[76,158853,158680],{"class":126},[76,158855,158856],{"class":119},"{age}",[76,158858,307],{"class":126},[76,158860,158861],{"class":90},".format(",[76,158863,301],{"class":7296},[76,158865,370],{"class":82},[76,158867,158868],{"class":90},"name, ",[76,158870,1184],{"class":7296},[76,158872,370],{"class":82},[76,158874,158875],{"class":90},"age))\n",[889,158877,158879],{"id":158878},"_2103-f-string","2.10.3 f-string",[19,158881,158882],{},"推荐写法：",[66,158884,158886],{"className":68,"code":158885,"language":70,"meta":71,"style":71},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[73,158887,158888,158896,158904,158912,158916],{"__ignoreMap":71},[76,158889,158890,158892,158894],{"class":78,"line":79},[76,158891,966],{"class":90},[76,158893,370],{"class":82},[76,158895,971],{"class":126},[76,158897,158898,158900,158902],{"class":78,"line":94},[76,158899,148565],{"class":90},[76,158901,370],{"class":82},[76,158903,148570],{"class":119},[76,158905,158906,158908,158910],{"class":78,"line":133},[76,158907,157352],{"class":90},[76,158909,370],{"class":82},[76,158911,158662],{"class":119},[76,158913,158914],{"class":78,"line":145},[76,158915,149],{"emptyLinePlaceholder":148},[76,158917,158918,158920,158922,158924,158926,158928,158930,158932,158934,158936,158938,158940,158942,158944,158947,158950,158952,158954],{"class":78,"line":152},[76,158919,478],{"class":119},[76,158921,123],{"class":90},[76,158923,292],{"class":82},[76,158925,1158],{"class":126},[76,158927,298],{"class":119},[76,158929,301],{"class":90},[76,158931,304],{"class":119},[76,158933,158680],{"class":126},[76,158935,298],{"class":119},[76,158937,1184],{"class":90},[76,158939,304],{"class":119},[76,158941,158686],{"class":126},[76,158943,298],{"class":119},[76,158945,158946],{"class":90},"score",[76,158948,158949],{"class":82},":.1f",[76,158951,304],{"class":119},[76,158953,307],{"class":126},[76,158955,130],{"class":90},[19,158957,158958],{},"表达式也可以放进去：",[66,158960,158962],{"className":68,"code":158961,"language":70,"meta":71,"style":71},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[73,158963,158964,158972,158980],{"__ignoreMap":71},[76,158965,158966,158968,158970],{"class":78,"line":79},[76,158967,148699],{"class":90},[76,158969,370],{"class":82},[76,158971,148704],{"class":119},[76,158973,158974,158976,158978],{"class":78,"line":94},[76,158975,1022],{"class":90},[76,158977,370],{"class":82},[76,158979,56458],{"class":119},[76,158981,158982,158984,158986,158988,158991,158993,158995,158997,159000,159002,159004],{"class":78,"line":133},[76,158983,478],{"class":119},[76,158985,123],{"class":90},[76,158987,292],{"class":82},[76,158989,158990],{"class":126},"\"总价:",[76,158992,298],{"class":119},[76,158994,148699],{"class":90},[76,158996,2718],{"class":82},[76,158998,158999],{"class":90}," count",[76,159001,304],{"class":119},[76,159003,1627],{"class":126},[76,159005,130],{"class":90},[14,159007,159009],{"id":159008},"_211-input输入","2.11 input输入",[19,159011,159012,159015],{},[73,159013,159014],{},"input()"," 会暂停程序，等待用户输入。",[66,159017,159019],{"className":68,"code":159018,"language":70,"meta":71,"style":71},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[73,159020,159021,159035],{"__ignoreMap":71},[76,159022,159023,159025,159027,159029,159031,159033],{"class":78,"line":79},[76,159024,966],{"class":90},[76,159026,370],{"class":82},[76,159028,1914],{"class":119},[76,159030,123],{"class":90},[76,159032,154381],{"class":126},[76,159034,130],{"class":90},[76,159036,159037,159039,159041,159043,159045,159047,159049,159051,159053],{"class":78,"line":94},[76,159038,478],{"class":119},[76,159040,123],{"class":90},[76,159042,292],{"class":82},[76,159044,295],{"class":126},[76,159046,298],{"class":119},[76,159048,301],{"class":90},[76,159050,304],{"class":119},[76,159052,307],{"class":126},[76,159054,130],{"class":90},[19,159056,159057],{},"输入整数：",[66,159059,159061],{"className":68,"code":159060,"language":70,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[73,159062,159063,159081],{"__ignoreMap":71},[76,159064,159065,159067,159069,159071,159073,159075,159077,159079],{"class":78,"line":79},[76,159066,148565],{"class":90},[76,159068,370],{"class":82},[76,159070,4478],{"class":119},[76,159072,123],{"class":90},[76,159074,1673],{"class":119},[76,159076,123],{"class":90},[76,159078,154396],{"class":126},[76,159080,656],{"class":90},[76,159082,159083,159085,159087,159089,159092,159094,159096,159098,159101,159103],{"class":78,"line":94},[76,159084,478],{"class":119},[76,159086,123],{"class":90},[76,159088,292],{"class":82},[76,159090,159091],{"class":126},"\"明年你",[76,159093,298],{"class":119},[76,159095,148565],{"class":90},[76,159097,376],{"class":82},[76,159099,159100],{"class":119}," 1}",[76,159102,151419],{"class":126},[76,159104,130],{"class":90},[19,159106,159107],{},"输入小数：",[66,159109,159111],{"className":68,"code":159110,"language":70,"meta":71,"style":71},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[73,159112,159113,159132],{"__ignoreMap":71},[76,159114,159115,159117,159119,159121,159123,159125,159127,159130],{"class":78,"line":79},[76,159116,157325],{"class":90},[76,159118,370],{"class":82},[76,159120,1668],{"class":119},[76,159122,123],{"class":90},[76,159124,1673],{"class":119},[76,159126,123],{"class":90},[76,159128,159129],{"class":126},"\"请输入身高:\"",[76,159131,656],{"class":90},[76,159133,159134,159136,159138,159140,159143,159145,159147,159150,159152,159155],{"class":78,"line":94},[76,159135,478],{"class":119},[76,159137,123],{"class":90},[76,159139,292],{"class":82},[76,159141,159142],{"class":126},"\"身高:",[76,159144,298],{"class":119},[76,159146,27031],{"class":90},[76,159148,159149],{"class":82},":.2f",[76,159151,304],{"class":119},[76,159153,159154],{"class":126},"米\"",[76,159156,130],{"class":90},[14,159158,159160],{"id":159159},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159162,125312],{},[26,159164,159165,159168,159171,159174],{},[29,159166,159167],{},"输入商品单价。",[29,159169,159170],{},"输入购买数量。",[29,159172,159173],{},"输入折扣，例如 0.8 表示八折。",[29,159175,159176],{},"输出最终金额，保留两位小数。",[19,159178,12092],{},[66,159180,159182],{"className":68,"code":159181,"language":70,"meta":71,"style":71},"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",[73,159183,159184,159203,159222,159242,159246,159266,159270,159293,159314,159336],{"__ignoreMap":71},[76,159185,159186,159188,159190,159192,159194,159196,159198,159201],{"class":78,"line":79},[76,159187,148699],{"class":90},[76,159189,370],{"class":82},[76,159191,1668],{"class":119},[76,159193,123],{"class":90},[76,159195,1673],{"class":119},[76,159197,123],{"class":90},[76,159199,159200],{"class":126},"\"请输入商品单价:\"",[76,159202,656],{"class":90},[76,159204,159205,159207,159209,159211,159213,159215,159217,159220],{"class":78,"line":94},[76,159206,1022],{"class":90},[76,159208,370],{"class":82},[76,159210,4478],{"class":119},[76,159212,123],{"class":90},[76,159214,1673],{"class":119},[76,159216,123],{"class":90},[76,159218,159219],{"class":126},"\"请输入购买数量:\"",[76,159221,656],{"class":90},[76,159223,159224,159227,159229,159231,159233,159235,159237,159240],{"class":78,"line":133},[76,159225,159226],{"class":90},"discount ",[76,159228,370],{"class":82},[76,159230,1668],{"class":119},[76,159232,123],{"class":90},[76,159234,1673],{"class":119},[76,159236,123],{"class":90},[76,159238,159239],{"class":126},"\"请输入折扣:\"",[76,159241,656],{"class":90},[76,159243,159244],{"class":78,"line":145},[76,159245,149],{"emptyLinePlaceholder":148},[76,159247,159248,159251,159253,159256,159258,159261,159263],{"class":78,"line":152},[76,159249,159250],{"class":90},"total ",[76,159252,370],{"class":82},[76,159254,159255],{"class":90}," price ",[76,159257,2718],{"class":82},[76,159259,159260],{"class":90}," count ",[76,159262,2718],{"class":82},[76,159264,159265],{"class":90}," discount\n",[76,159267,159268],{"class":78,"line":157},[76,159269,149],{"emptyLinePlaceholder":148},[76,159271,159272,159274,159276,159278,159281,159283,159285,159287,159289,159291],{"class":78,"line":246},[76,159273,478],{"class":119},[76,159275,123],{"class":90},[76,159277,292],{"class":82},[76,159279,159280],{"class":126},"\"商品单价:",[76,159282,298],{"class":119},[76,159284,81839],{"class":90},[76,159286,159149],{"class":82},[76,159288,304],{"class":119},[76,159290,307],{"class":126},[76,159292,130],{"class":90},[76,159294,159295,159297,159299,159301,159304,159306,159308,159310,159312],{"class":78,"line":251},[76,159296,478],{"class":119},[76,159298,123],{"class":90},[76,159300,292],{"class":82},[76,159302,159303],{"class":126},"\"购买数量:",[76,159305,298],{"class":119},[76,159307,86458],{"class":90},[76,159309,304],{"class":119},[76,159311,307],{"class":126},[76,159313,130],{"class":90},[76,159315,159316,159318,159320,159322,159325,159327,159330,159332,159334],{"class":78,"line":257},[76,159317,478],{"class":119},[76,159319,123],{"class":90},[76,159321,292],{"class":82},[76,159323,159324],{"class":126},"\"折扣:",[76,159326,298],{"class":119},[76,159328,159329],{"class":90},"discount",[76,159331,304],{"class":119},[76,159333,307],{"class":126},[76,159335,130],{"class":90},[76,159337,159338,159340,159342,159344,159347,159349,159352,159354,159356,159358],{"class":78,"line":641},[76,159339,478],{"class":119},[76,159341,123],{"class":90},[76,159343,292],{"class":82},[76,159345,159346],{"class":126},"\"应付金额:",[76,159348,298],{"class":119},[76,159350,159351],{"class":90},"total",[76,159353,159149],{"class":82},[76,159355,304],{"class":119},[76,159357,1627],{"class":126},[76,159359,130],{"class":90},[14,159361,159363],{"id":159362},"_213-易错点","2.13 易错点",[26,159365,159366,159371,159377,159385,159388],{},[29,159367,159368,159370],{},[73,159369,159014],{}," 的结果是字符串，做运算前要转换。",[29,159372,159373,159374,490],{},"字符串拼接时，数字要先 ",[73,159375,159376],{},"str()",[29,159378,159379,159381,159382,159384],{},[73,159380,370],{}," 是赋值，",[73,159383,1250],{}," 是比较。",[29,159386,159387],{},"Python 没有自增自减运算符。",[29,159389,159390],{},"浮点数计算可能有精度误差：",[66,159392,159394],{"className":68,"code":159393,"language":70,"meta":71,"style":71},"print(0.1 + 0.2)\n",[73,159395,159396],{"__ignoreMap":71},[76,159397,159398,159400,159402,159404,159406,159409],{"class":78,"line":79},[76,159399,478],{"class":119},[76,159401,123],{"class":90},[76,159403,88234],{"class":119},[76,159405,47601],{"class":82},[76,159407,159408],{"class":119}," 0.2",[76,159410,130],{"class":90},[19,159412,159413,159414,159417],{},"金额计算如果要求严格，可以后续学习 ",[73,159415,159416],{},"decimal"," 模块。",[14,159419,159421],{"id":159420},"_214-本章练习","2.14 本章练习",[26,159423,159424,159427,159430,159433,159436],{},[29,159425,159426],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,159428,159429],{},"输入圆的半径，计算面积，保留两位小数。",[29,159431,159432],{},"输入工资和奖金，计算总收入。",[29,159434,159435],{},"输入摄氏温度，转换为华氏温度。",[29,159437,159438],{},"写一个 BMI 计算程序：",[66,159440,159443],{"className":159441,"code":159442,"language":7268,"meta":71},[7266],"BMI = 体重kg \u002F 身高m ** 2\n",[73,159444,159442],{"__ignoreMap":71},[2178,159446,159447],{},"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":71,"searchDepth":94,"depth":94,"links":159449},[159450,159451,159452,159453,159454,159455,159456,159462,159463,159464,159469,159470,159471,159472],{"id":157015,"depth":94,"text":157016},{"id":157124,"depth":94,"text":157125},{"id":157295,"depth":94,"text":157296},{"id":157372,"depth":94,"text":157373},{"id":52763,"depth":94,"text":52764},{"id":157678,"depth":94,"text":157679},{"id":157904,"depth":94,"text":157905,"children":159457},[159458,159459,159460,159461],{"id":157908,"depth":133,"text":157909},{"id":158102,"depth":133,"text":158103},{"id":158190,"depth":133,"text":158191},{"id":158295,"depth":133,"text":158296},{"id":158404,"depth":94,"text":158405},{"id":158562,"depth":94,"text":158563},{"id":158627,"depth":94,"text":158628,"children":159465},[159466,159467,159468],{"id":158631,"depth":133,"text":158632},{"id":158775,"depth":133,"text":158776},{"id":158878,"depth":133,"text":158879},{"id":159008,"depth":94,"text":159009},{"id":159159,"depth":94,"text":159160},{"id":159362,"depth":94,"text":159363},{"id":159420,"depth":94,"text":159421},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157007,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159479,"title":159480,"body":159481,"description":2201,"extension":2202,"meta":161116,"navigation":148,"path":161117,"seo":161118,"stem":161119,"__hash__":161120},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159482,"toc":161097},[159483,159486,159490,159493,159508,159511,159539,159543,159593,159595,159611,159614,159640,159643,159647,159714,159717,159733,159737,159740,159858,159861,159868,159917,159923,159927,159930,160042,160045,160049,160053,160056,160106,160110,160113,160163,160167,160170,160208,160212,160215,160261,160264,160299,160303,160308,160311,160357,160359,160426,160430,160436,160547,160556,160560,160562,160573,160575,160741,160745,160747,160761,160763,160977,160981,161000,161017,161020,161066,161070,161094],[10,159484,159480],{"id":159485},"_3-判断语句",[14,159487,159489],{"id":159488},"_31-布尔值","3.1 布尔值",[19,159491,159492],{},"判断语句依赖布尔值：",[66,159494,159496],{"className":68,"code":159495,"language":70,"meta":71,"style":71},"True\nFalse\n",[73,159497,159498,159503],{"__ignoreMap":71},[76,159499,159500],{"class":78,"line":79},[76,159501,159502],{"class":119},"True\n",[76,159504,159505],{"class":78,"line":94},[76,159506,159507],{"class":119},"False\n",[19,159509,159510],{},"比较表达式会产生布尔值：",[66,159512,159514],{"className":68,"code":159513,"language":70,"meta":71,"style":71},"age = 18\nprint(age >= 18)  # True\n",[73,159515,159516,159524],{"__ignoreMap":71},[76,159517,159518,159520,159522],{"class":78,"line":79},[76,159519,148565],{"class":90},[76,159521,370],{"class":82},[76,159523,148570],{"class":119},[76,159525,159526,159528,159530,159532,159534,159536],{"class":78,"line":94},[76,159527,478],{"class":119},[76,159529,157762],{"class":90},[76,159531,611],{"class":82},[76,159533,614],{"class":119},[76,159535,47842],{"class":90},[76,159537,159538],{"class":540},"# True\n",[14,159540,159542],{"id":159541},"_32-if基础语法","3.2 if基础语法",[66,159544,159546],{"className":68,"code":159545,"language":70,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[73,159547,159548,159566,159570,159582],{"__ignoreMap":71},[76,159549,159550,159552,159554,159556,159558,159560,159562,159564],{"class":78,"line":79},[76,159551,148565],{"class":90},[76,159553,370],{"class":82},[76,159555,4478],{"class":119},[76,159557,123],{"class":90},[76,159559,1673],{"class":119},[76,159561,123],{"class":90},[76,159563,154396],{"class":126},[76,159565,656],{"class":90},[76,159567,159568],{"class":78,"line":94},[76,159569,149],{"emptyLinePlaceholder":148},[76,159571,159572,159574,159576,159578,159580],{"class":78,"line":133},[76,159573,723],{"class":82},[76,159575,581],{"class":90},[76,159577,611],{"class":82},[76,159579,614],{"class":119},[76,159581,590],{"class":90},[76,159583,159584,159586,159588,159591],{"class":78,"line":145},[76,159585,120],{"class":119},[76,159587,123],{"class":90},[76,159589,159590],{"class":126},"\"可以进入网吧\"",[76,159592,130],{"class":90},[19,159594,163],{},[26,159596,159597,159602,159605,159608],{},[29,159598,159599,159601],{},[73,159600,723],{}," 后面是条件表达式。",[29,159603,159604],{},"条件后面必须写冒号。",[29,159606,159607],{},"条件成立时执行缩进代码块。",[29,159609,159610],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159612,159613],{},"错误示例：",[66,159615,159617],{"className":68,"code":159616,"language":70,"meta":71,"style":71},"if age >= 18\n    print(\"可以进入\")\n",[73,159618,159619,159629],{"__ignoreMap":71},[76,159620,159621,159623,159625,159627],{"class":78,"line":79},[76,159622,723],{"class":82},[76,159624,581],{"class":90},[76,159626,611],{"class":82},[76,159628,148570],{"class":119},[76,159630,159631,159633,159635,159638],{"class":78,"line":94},[76,159632,120],{"class":119},[76,159634,123],{"class":90},[76,159636,159637],{"class":126},"\"可以进入\"",[76,159639,130],{"class":90},[19,159641,159642],{},"缺少冒号。",[14,159644,159646],{"id":159645},"_33-if-else","3.3 if else",[66,159648,159650],{"className":68,"code":159649,"language":70,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[73,159651,159652,159670,159674,159686,159697,159703],{"__ignoreMap":71},[76,159653,159654,159656,159658,159660,159662,159664,159666,159668],{"class":78,"line":79},[76,159655,148565],{"class":90},[76,159657,370],{"class":82},[76,159659,4478],{"class":119},[76,159661,123],{"class":90},[76,159663,1673],{"class":119},[76,159665,123],{"class":90},[76,159667,154396],{"class":126},[76,159669,656],{"class":90},[76,159671,159672],{"class":78,"line":94},[76,159673,149],{"emptyLinePlaceholder":148},[76,159675,159676,159678,159680,159682,159684],{"class":78,"line":133},[76,159677,723],{"class":82},[76,159679,581],{"class":90},[76,159681,611],{"class":82},[76,159683,614],{"class":119},[76,159685,590],{"class":90},[76,159687,159688,159690,159692,159695],{"class":78,"line":145},[76,159689,120],{"class":119},[76,159691,123],{"class":90},[76,159693,159694],{"class":126},"\"成年人\"",[76,159696,130],{"class":90},[76,159698,159699,159701],{"class":78,"line":152},[76,159700,1328],{"class":82},[76,159702,590],{"class":90},[76,159704,159705,159707,159709,159712],{"class":78,"line":157},[76,159706,120],{"class":119},[76,159708,123],{"class":90},[76,159710,159711],{"class":126},"\"未成年人\"",[76,159713,130],{"class":90},[19,159715,159716],{},"执行逻辑：",[26,159718,159719,159725,159730],{},[29,159720,159721,159722,159724],{},"条件成立，执行 ",[73,159723,723],{}," 代码块。",[29,159726,159727,159728,159724],{},"条件不成立，执行 ",[73,159729,1328],{},[29,159731,159732],{},"两个代码块只会执行其中一个。",[14,159734,159736],{"id":159735},"_34-if-elif-else","3.4 if elif else",[19,159738,159739],{},"多条件判断：",[66,159741,159743],{"className":68,"code":159742,"language":70,"meta":71,"style":71},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[73,159744,159745,159763,159767,159781,159792,159806,159817,159830,159841,159847],{"__ignoreMap":71},[76,159746,159747,159749,159751,159753,159755,159757,159759,159761],{"class":78,"line":79},[76,159748,157352],{"class":90},[76,159750,370],{"class":82},[76,159752,4478],{"class":119},[76,159754,123],{"class":90},[76,159756,1673],{"class":119},[76,159758,123],{"class":90},[76,159760,154411],{"class":126},[76,159762,656],{"class":90},[76,159764,159765],{"class":78,"line":94},[76,159766,149],{"emptyLinePlaceholder":148},[76,159768,159769,159771,159774,159776,159779],{"class":78,"line":133},[76,159770,723],{"class":82},[76,159772,159773],{"class":90}," score ",[76,159775,611],{"class":82},[76,159777,159778],{"class":119}," 90",[76,159780,590],{"class":90},[76,159782,159783,159785,159787,159790],{"class":78,"line":145},[76,159784,120],{"class":119},[76,159786,123],{"class":90},[76,159788,159789],{"class":126},"\"优秀\"",[76,159791,130],{"class":90},[76,159793,159794,159797,159799,159801,159804],{"class":78,"line":152},[76,159795,159796],{"class":82},"elif",[76,159798,159773],{"class":90},[76,159800,611],{"class":82},[76,159802,159803],{"class":119}," 80",[76,159805,590],{"class":90},[76,159807,159808,159810,159812,159815],{"class":78,"line":157},[76,159809,120],{"class":119},[76,159811,123],{"class":90},[76,159813,159814],{"class":126},"\"良好\"",[76,159816,130],{"class":90},[76,159818,159819,159821,159823,159825,159828],{"class":78,"line":246},[76,159820,159796],{"class":82},[76,159822,159773],{"class":90},[76,159824,611],{"class":82},[76,159826,159827],{"class":119}," 60",[76,159829,590],{"class":90},[76,159831,159832,159834,159836,159839],{"class":78,"line":251},[76,159833,120],{"class":119},[76,159835,123],{"class":90},[76,159837,159838],{"class":126},"\"及格\"",[76,159840,130],{"class":90},[76,159842,159843,159845],{"class":78,"line":257},[76,159844,1328],{"class":82},[76,159846,590],{"class":90},[76,159848,159849,159851,159853,159856],{"class":78,"line":641},[76,159850,120],{"class":119},[76,159852,123],{"class":90},[76,159854,159855],{"class":126},"\"不及格\"",[76,159857,130],{"class":90},[19,159859,159860],{},"注意判断顺序很重要。",[19,159862,159863,159864,159867],{},"如果把 ",[73,159865,159866],{},"score >= 60"," 放在最前面：",[66,159869,159871],{"className":68,"code":159870,"language":70,"meta":71,"style":71},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[73,159872,159873,159885,159895,159907],{"__ignoreMap":71},[76,159874,159875,159877,159879,159881,159883],{"class":78,"line":79},[76,159876,723],{"class":82},[76,159878,159773],{"class":90},[76,159880,611],{"class":82},[76,159882,159827],{"class":119},[76,159884,590],{"class":90},[76,159886,159887,159889,159891,159893],{"class":78,"line":94},[76,159888,120],{"class":119},[76,159890,123],{"class":90},[76,159892,159838],{"class":126},[76,159894,130],{"class":90},[76,159896,159897,159899,159901,159903,159905],{"class":78,"line":133},[76,159898,159796],{"class":82},[76,159900,159773],{"class":90},[76,159902,611],{"class":82},[76,159904,159778],{"class":119},[76,159906,590],{"class":90},[76,159908,159909,159911,159913,159915],{"class":78,"line":145},[76,159910,120],{"class":119},[76,159912,123],{"class":90},[76,159914,159789],{"class":126},[76,159916,130],{"class":90},[19,159918,159919,159920,159922],{},"成绩 95 会先满足 ",[73,159921,159866],{},"，后面的优秀分支就不会执行。",[14,159924,159926],{"id":159925},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159928,159929],{},"嵌套判断就是在一个判断内部再写判断。",[66,159931,159933],{"className":68,"code":159932,"language":70,"meta":71,"style":71},"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",[73,159934,159935,159953,159968,159972,159984,159998,160008,160014,160025,160031],{"__ignoreMap":71},[76,159936,159937,159939,159941,159943,159945,159947,159949,159951],{"class":78,"line":79},[76,159938,148565],{"class":90},[76,159940,370],{"class":82},[76,159942,4478],{"class":119},[76,159944,123],{"class":90},[76,159946,1673],{"class":119},[76,159948,123],{"class":90},[76,159950,154396],{"class":126},[76,159952,656],{"class":90},[76,159954,159955,159957,159959,159961,159963,159966],{"class":78,"line":94},[76,159956,158354],{"class":90},[76,159958,370],{"class":82},[76,159960,1914],{"class":119},[76,159962,123],{"class":90},[76,159964,159965],{"class":126},"\"是否有票(y\u002Fn):\"",[76,159967,130],{"class":90},[76,159969,159970],{"class":78,"line":133},[76,159971,149],{"emptyLinePlaceholder":148},[76,159973,159974,159976,159978,159980,159982],{"class":78,"line":145},[76,159975,723],{"class":82},[76,159977,581],{"class":90},[76,159979,611],{"class":82},[76,159981,614],{"class":119},[76,159983,590],{"class":90},[76,159985,159986,159988,159991,159993,159996],{"class":78,"line":152},[76,159987,578],{"class":82},[76,159989,159990],{"class":90}," has_ticket ",[76,159992,1250],{"class":82},[76,159994,159995],{"class":126}," \"y\"",[76,159997,590],{"class":90},[76,159999,160000,160002,160004,160006],{"class":78,"line":157},[76,160001,1701],{"class":119},[76,160003,123],{"class":90},[76,160005,159637],{"class":126},[76,160007,130],{"class":90},[76,160009,160010,160012],{"class":78,"line":246},[76,160011,2026],{"class":82},[76,160013,590],{"class":90},[76,160015,160016,160018,160020,160023],{"class":78,"line":251},[76,160017,1701],{"class":119},[76,160019,123],{"class":90},[76,160021,160022],{"class":126},"\"请先买票\"",[76,160024,130],{"class":90},[76,160026,160027,160029],{"class":78,"line":257},[76,160028,1328],{"class":82},[76,160030,590],{"class":90},[76,160032,160033,160035,160037,160040],{"class":78,"line":641},[76,160034,120],{"class":119},[76,160036,123],{"class":90},[76,160038,160039],{"class":126},"\"未成年人禁止进入\"",[76,160041,130],{"class":90},[19,160043,160044],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160046,160048],{"id":160047},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[889,160050,160052],{"id":160051},"_361-and","3.6.1 and",[19,160054,160055],{},"两个条件都成立才成立。",[66,160057,160059],{"className":68,"code":160058,"language":70,"meta":71,"style":71},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[73,160060,160061,160069,160077,160081,160096],{"__ignoreMap":71},[76,160062,160063,160065,160067],{"class":78,"line":79},[76,160064,148565],{"class":90},[76,160066,370],{"class":82},[76,160068,90089],{"class":119},[76,160070,160071,160073,160075],{"class":78,"line":94},[76,160072,158354],{"class":90},[76,160074,370],{"class":82},[76,160076,155593],{"class":119},[76,160078,160079],{"class":78,"line":133},[76,160080,149],{"emptyLinePlaceholder":148},[76,160082,160083,160085,160087,160089,160091,160093],{"class":78,"line":145},[76,160084,723],{"class":82},[76,160086,581],{"class":90},[76,160088,611],{"class":82},[76,160090,614],{"class":119},[76,160092,122449],{"class":82},[76,160094,160095],{"class":90}," has_ticket:\n",[76,160097,160098,160100,160102,160104],{"class":78,"line":152},[76,160099,120],{"class":119},[76,160101,123],{"class":90},[76,160103,159637],{"class":126},[76,160105,130],{"class":90},[889,160107,160109],{"id":160108},"_362-or","3.6.2 or",[19,160111,160112],{},"只要一个条件成立就成立。",[66,160114,160116],{"className":68,"code":160115,"language":70,"meta":71,"style":71},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[73,160117,160118,160127,160136,160140,160152],{"__ignoreMap":71},[76,160119,160120,160123,160125],{"class":78,"line":79},[76,160121,160122],{"class":90},"is_vip ",[76,160124,370],{"class":82},[76,160126,127827],{"class":119},[76,160128,160129,160132,160134],{"class":78,"line":94},[76,160130,160131],{"class":90},"coupon ",[76,160133,370],{"class":82},[76,160135,155593],{"class":119},[76,160137,160138],{"class":78,"line":133},[76,160139,149],{"emptyLinePlaceholder":148},[76,160141,160142,160144,160147,160149],{"class":78,"line":145},[76,160143,723],{"class":82},[76,160145,160146],{"class":90}," is_vip ",[76,160148,117110],{"class":82},[76,160150,160151],{"class":90}," coupon:\n",[76,160153,160154,160156,160158,160161],{"class":78,"line":152},[76,160155,120],{"class":119},[76,160157,123],{"class":90},[76,160159,160160],{"class":126},"\"可以享受优惠\"",[76,160162,130],{"class":90},[889,160164,160166],{"id":160165},"_363-not","3.6.3 not",[19,160168,160169],{},"取反。",[66,160171,160173],{"className":68,"code":160172,"language":70,"meta":71,"style":71},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[73,160174,160175,160184,160188,160197],{"__ignoreMap":71},[76,160176,160177,160180,160182],{"class":78,"line":79},[76,160178,160179],{"class":90},"is_closed ",[76,160181,370],{"class":82},[76,160183,127827],{"class":119},[76,160185,160186],{"class":78,"line":94},[76,160187,149],{"emptyLinePlaceholder":148},[76,160189,160190,160192,160194],{"class":78,"line":133},[76,160191,723],{"class":82},[76,160193,40967],{"class":82},[76,160195,160196],{"class":90}," is_closed:\n",[76,160198,160199,160201,160203,160206],{"class":78,"line":145},[76,160200,120],{"class":119},[76,160202,123],{"class":90},[76,160204,160205],{"class":126},"\"店铺营业中\"",[76,160207,130],{"class":90},[14,160209,160211],{"id":160210},"_37-链式比较","3.7 链式比较",[19,160213,160214],{},"Python 支持链式比较：",[66,160216,160218],{"className":68,"code":160217,"language":70,"meta":71,"style":71},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[73,160219,160220,160229,160233,160250],{"__ignoreMap":71},[76,160221,160222,160224,160226],{"class":78,"line":79},[76,160223,157352],{"class":90},[76,160225,370],{"class":82},[76,160227,160228],{"class":119}," 85\n",[76,160230,160231],{"class":78,"line":94},[76,160232,149],{"emptyLinePlaceholder":148},[76,160234,160235,160237,160239,160242,160244,160246,160248],{"class":78,"line":133},[76,160236,723],{"class":82},[76,160238,587],{"class":119},[76,160240,160241],{"class":82}," \u003C=",[76,160243,159773],{"class":90},[76,160245,1691],{"class":82},[76,160247,7834],{"class":119},[76,160249,590],{"class":90},[76,160251,160252,160254,160256,160259],{"class":78,"line":145},[76,160253,120],{"class":119},[76,160255,123],{"class":90},[76,160257,160258],{"class":126},"\"成绩合法\"",[76,160260,130],{"class":90},[19,160262,160263],{},"等价于：",[66,160265,160267],{"className":68,"code":160266,"language":70,"meta":71,"style":71},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[73,160268,160269,160289],{"__ignoreMap":71},[76,160270,160271,160273,160275,160277,160279,160281,160283,160285,160287],{"class":78,"line":79},[76,160272,723],{"class":82},[76,160274,159773],{"class":90},[76,160276,611],{"class":82},[76,160278,587],{"class":119},[76,160280,122449],{"class":82},[76,160282,159773],{"class":90},[76,160284,1691],{"class":82},[76,160286,7834],{"class":119},[76,160288,590],{"class":90},[76,160290,160291,160293,160295,160297],{"class":78,"line":94},[76,160292,120],{"class":119},[76,160294,123],{"class":90},[76,160296,160258],{"class":126},[76,160298,130],{"class":90},[14,160300,160302],{"id":160301},"_38-真值和假值","3.8 真值和假值",[19,160304,118487,160305,160307],{},[73,160306,723],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160309,160310],{},"假值：",[66,160312,160314],{"className":68,"code":160313,"language":70,"meta":71,"style":71},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[73,160315,160316,160320,160325,160329,160333,160338,160342,160346,160351],{"__ignoreMap":71},[76,160317,160318],{"class":78,"line":79},[76,160319,159507],{"class":119},[76,160321,160322],{"class":78,"line":94},[76,160323,160324],{"class":119},"None\n",[76,160326,160327],{"class":78,"line":133},[76,160328,5172],{"class":119},[76,160330,160331],{"class":78,"line":145},[76,160332,34382],{"class":119},[76,160334,160335],{"class":78,"line":152},[76,160336,160337],{"class":126},"\"\"\n",[76,160339,160340],{"class":78,"line":157},[76,160341,34397],{"class":90},[76,160343,160344],{"class":78,"line":246},[76,160345,4072],{"class":90},[76,160347,160348],{"class":78,"line":251},[76,160349,160350],{"class":90},"{}\n",[76,160352,160353,160355],{"class":78,"line":257},[76,160354,157284],{"class":119},[76,160356,4072],{"class":90},[19,160358,100],{},[66,160360,160362],{"className":68,"code":160361,"language":70,"meta":71,"style":71},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[73,160363,160364,160378,160382,160389,160409,160415],{"__ignoreMap":71},[76,160365,160366,160368,160370,160372,160374,160376],{"class":78,"line":79},[76,160367,966],{"class":90},[76,160369,370],{"class":82},[76,160371,1914],{"class":119},[76,160373,123],{"class":90},[76,160375,154381],{"class":126},[76,160377,130],{"class":90},[76,160379,160380],{"class":78,"line":94},[76,160381,149],{"emptyLinePlaceholder":148},[76,160383,160384,160386],{"class":78,"line":133},[76,160385,723],{"class":82},[76,160387,160388],{"class":90}," name:\n",[76,160390,160391,160393,160395,160397,160399,160401,160403,160405,160407],{"class":78,"line":145},[76,160392,120],{"class":119},[76,160394,123],{"class":90},[76,160396,292],{"class":82},[76,160398,295],{"class":126},[76,160400,298],{"class":119},[76,160402,301],{"class":90},[76,160404,304],{"class":119},[76,160406,307],{"class":126},[76,160408,130],{"class":90},[76,160410,160411,160413],{"class":78,"line":152},[76,160412,1328],{"class":82},[76,160414,590],{"class":90},[76,160416,160417,160419,160421,160424],{"class":78,"line":157},[76,160418,120],{"class":119},[76,160420,123],{"class":90},[76,160422,160423],{"class":126},"\"姓名不能为空\"",[76,160425,130],{"class":90},[14,160427,160429],{"id":160428},"_39-match语句","3.9 match语句",[19,160431,160432,160433,160435],{},"Python 3.10 开始支持 ",[73,160434,73292],{},"。它适合处理固定选项。",[66,160437,160439],{"className":68,"code":160438,"language":70,"meta":71,"style":71},"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",[73,160440,160441,160457,160461,160468,160478,160489,160498,160509,160518,160529,160536],{"__ignoreMap":71},[76,160442,160443,160446,160448,160450,160452,160455],{"class":78,"line":79},[76,160444,160445],{"class":90},"command ",[76,160447,370],{"class":82},[76,160449,1914],{"class":119},[76,160451,123],{"class":90},[76,160453,160454],{"class":126},"\"请输入命令:\"",[76,160456,130],{"class":90},[76,160458,160459],{"class":78,"line":94},[76,160460,149],{"emptyLinePlaceholder":148},[76,160462,160463,160465],{"class":78,"line":133},[76,160464,73292],{"class":82},[76,160466,160467],{"class":90}," command:\n",[76,160469,160470,160473,160476],{"class":78,"line":145},[76,160471,160472],{"class":82},"    case",[76,160474,160475],{"class":126}," \"start\"",[76,160477,590],{"class":90},[76,160479,160480,160482,160484,160487],{"class":78,"line":152},[76,160481,1701],{"class":119},[76,160483,123],{"class":90},[76,160485,160486],{"class":126},"\"启动\"",[76,160488,130],{"class":90},[76,160490,160491,160493,160496],{"class":78,"line":157},[76,160492,160472],{"class":82},[76,160494,160495],{"class":126}," \"stop\"",[76,160497,590],{"class":90},[76,160499,160500,160502,160504,160507],{"class":78,"line":246},[76,160501,1701],{"class":119},[76,160503,123],{"class":90},[76,160505,160506],{"class":126},"\"停止\"",[76,160508,130],{"class":90},[76,160510,160511,160513,160516],{"class":78,"line":251},[76,160512,160472],{"class":82},[76,160514,160515],{"class":126}," \"restart\"",[76,160517,590],{"class":90},[76,160519,160520,160522,160524,160527],{"class":78,"line":257},[76,160521,1701],{"class":119},[76,160523,123],{"class":90},[76,160525,160526],{"class":126},"\"重启\"",[76,160528,130],{"class":90},[76,160530,160531,160533],{"class":78,"line":641},[76,160532,160472],{"class":82},[76,160534,160535],{"class":90}," _:\n",[76,160537,160538,160540,160542,160545],{"class":78,"line":646},[76,160539,1701],{"class":119},[76,160541,123],{"class":90},[76,160543,160544],{"class":126},"\"未知命令\"",[76,160546,130],{"class":90},[19,160548,160549,160550,160552,160553,160555],{},"入门阶段掌握 ",[73,160551,156652],{}," 更重要，",[73,160554,73292],{}," 可以作为补充。",[14,160557,160559],{"id":160558},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160561,125312],{},[26,160563,160564,160567,160570],{},[29,160565,160566],{},"输入成绩。",[29,160568,160569],{},"判断成绩是否合法。",[29,160571,160572],{},"输出等级。",[19,160574,12092],{},[66,160576,160578],{"className":68,"code":160577,"language":70,"meta":71,"style":71},"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",[73,160579,160580,160598,160602,160620,160631,160643,160654,160666,160677,160690,160701,160713,160724,160730],{"__ignoreMap":71},[76,160581,160582,160584,160586,160588,160590,160592,160594,160596],{"class":78,"line":79},[76,160583,157352],{"class":90},[76,160585,370],{"class":82},[76,160587,1668],{"class":119},[76,160589,123],{"class":90},[76,160591,1673],{"class":119},[76,160593,123],{"class":90},[76,160595,154411],{"class":126},[76,160597,656],{"class":90},[76,160599,160600],{"class":78,"line":94},[76,160601,149],{"emptyLinePlaceholder":148},[76,160603,160604,160606,160608,160610,160612,160614,160616,160618],{"class":78,"line":133},[76,160605,723],{"class":82},[76,160607,40967],{"class":82},[76,160609,587],{"class":119},[76,160611,160241],{"class":82},[76,160613,159773],{"class":90},[76,160615,1691],{"class":82},[76,160617,7834],{"class":119},[76,160619,590],{"class":90},[76,160621,160622,160624,160626,160629],{"class":78,"line":145},[76,160623,120],{"class":119},[76,160625,123],{"class":90},[76,160627,160628],{"class":126},"\"成绩不合法\"",[76,160630,130],{"class":90},[76,160632,160633,160635,160637,160639,160641],{"class":78,"line":152},[76,160634,159796],{"class":82},[76,160636,159773],{"class":90},[76,160638,611],{"class":82},[76,160640,159778],{"class":119},[76,160642,590],{"class":90},[76,160644,160645,160647,160649,160652],{"class":78,"line":157},[76,160646,120],{"class":119},[76,160648,123],{"class":90},[76,160650,160651],{"class":126},"\"等级:A\"",[76,160653,130],{"class":90},[76,160655,160656,160658,160660,160662,160664],{"class":78,"line":246},[76,160657,159796],{"class":82},[76,160659,159773],{"class":90},[76,160661,611],{"class":82},[76,160663,159803],{"class":119},[76,160665,590],{"class":90},[76,160667,160668,160670,160672,160675],{"class":78,"line":251},[76,160669,120],{"class":119},[76,160671,123],{"class":90},[76,160673,160674],{"class":126},"\"等级:B\"",[76,160676,130],{"class":90},[76,160678,160679,160681,160683,160685,160688],{"class":78,"line":257},[76,160680,159796],{"class":82},[76,160682,159773],{"class":90},[76,160684,611],{"class":82},[76,160686,160687],{"class":119}," 70",[76,160689,590],{"class":90},[76,160691,160692,160694,160696,160699],{"class":78,"line":641},[76,160693,120],{"class":119},[76,160695,123],{"class":90},[76,160697,160698],{"class":126},"\"等级:C\"",[76,160700,130],{"class":90},[76,160702,160703,160705,160707,160709,160711],{"class":78,"line":646},[76,160704,159796],{"class":82},[76,160706,159773],{"class":90},[76,160708,611],{"class":82},[76,160710,159827],{"class":119},[76,160712,590],{"class":90},[76,160714,160715,160717,160719,160722],{"class":78,"line":659},[76,160716,120],{"class":119},[76,160718,123],{"class":90},[76,160720,160721],{"class":126},"\"等级:D\"",[76,160723,130],{"class":90},[76,160725,160726,160728],{"class":78,"line":1608},[76,160727,1328],{"class":82},[76,160729,590],{"class":90},[76,160731,160732,160734,160736,160739],{"class":78,"line":1632},[76,160733,120],{"class":119},[76,160735,123],{"class":90},[76,160737,160738],{"class":126},"\"等级:E\"",[76,160740,130],{"class":90},[14,160742,160744],{"id":160743},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160746,125312],{},[26,160748,160749,160752,160755,160758],{},[29,160750,160751],{},"输入消费金额。",[29,160753,160754],{},"输入会员等级，普通、银卡、金卡。",[29,160756,160757],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160759,160760],{},"满 500 再减 50。",[19,160762,12092],{},[66,160764,160766],{"className":68,"code":160765,"language":70,"meta":71,"style":71},"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",[73,160767,160768,160788,160804,160808,160816,160820,160834,160844,160857,160866,160879,160887,160893,160904,160908,160922,160926,160940,160950,160954],{"__ignoreMap":71},[76,160769,160770,160773,160775,160777,160779,160781,160783,160786],{"class":78,"line":79},[76,160771,160772],{"class":90},"amount ",[76,160774,370],{"class":82},[76,160776,1668],{"class":119},[76,160778,123],{"class":90},[76,160780,1673],{"class":119},[76,160782,123],{"class":90},[76,160784,160785],{"class":126},"\"请输入消费金额:\"",[76,160787,656],{"class":90},[76,160789,160790,160793,160795,160797,160799,160802],{"class":78,"line":94},[76,160791,160792],{"class":90},"level ",[76,160794,370],{"class":82},[76,160796,1914],{"class":119},[76,160798,123],{"class":90},[76,160800,160801],{"class":126},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[76,160803,130],{"class":90},[76,160805,160806],{"class":78,"line":133},[76,160807,149],{"emptyLinePlaceholder":148},[76,160809,160810,160812,160814],{"class":78,"line":145},[76,160811,159226],{"class":90},[76,160813,370],{"class":82},[76,160815,1063],{"class":119},[76,160817,160818],{"class":78,"line":152},[76,160819,149],{"emptyLinePlaceholder":148},[76,160821,160822,160824,160827,160829,160832],{"class":78,"line":157},[76,160823,723],{"class":82},[76,160825,160826],{"class":90}," level ",[76,160828,1250],{"class":82},[76,160830,160831],{"class":126}," \"银卡\"",[76,160833,590],{"class":90},[76,160835,160836,160839,160841],{"class":78,"line":246},[76,160837,160838],{"class":90},"    discount ",[76,160840,370],{"class":82},[76,160842,160843],{"class":119}," 0.9\n",[76,160845,160846,160848,160850,160852,160855],{"class":78,"line":251},[76,160847,159796],{"class":82},[76,160849,160826],{"class":90},[76,160851,1250],{"class":82},[76,160853,160854],{"class":126}," \"金卡\"",[76,160856,590],{"class":90},[76,160858,160859,160861,160863],{"class":78,"line":257},[76,160860,160838],{"class":90},[76,160862,370],{"class":82},[76,160864,160865],{"class":119}," 0.8\n",[76,160867,160868,160870,160872,160874,160877],{"class":78,"line":641},[76,160869,159796],{"class":82},[76,160871,160826],{"class":90},[76,160873,1250],{"class":82},[76,160875,160876],{"class":126}," \"普通\"",[76,160878,590],{"class":90},[76,160880,160881,160883,160885],{"class":78,"line":646},[76,160882,160838],{"class":90},[76,160884,370],{"class":82},[76,160886,1063],{"class":119},[76,160888,160889,160891],{"class":78,"line":659},[76,160890,1328],{"class":82},[76,160892,590],{"class":90},[76,160894,160895,160897,160899,160902],{"class":78,"line":1608},[76,160896,120],{"class":119},[76,160898,123],{"class":90},[76,160900,160901],{"class":126},"\"会员等级输入错误，按普通会员计算\"",[76,160903,130],{"class":90},[76,160905,160906],{"class":78,"line":1632},[76,160907,149],{"emptyLinePlaceholder":148},[76,160909,160910,160913,160915,160918,160920],{"class":78,"line":1637},[76,160911,160912],{"class":90},"pay ",[76,160914,370],{"class":82},[76,160916,160917],{"class":90}," amount ",[76,160919,2718],{"class":82},[76,160921,159265],{"class":90},[76,160923,160924],{"class":78,"line":1642},[76,160925,149],{"emptyLinePlaceholder":148},[76,160927,160928,160930,160933,160935,160938],{"class":78,"line":1652},[76,160929,723],{"class":82},[76,160931,160932],{"class":90}," pay ",[76,160934,611],{"class":82},[76,160936,160937],{"class":119}," 500",[76,160939,590],{"class":90},[76,160941,160942,160945,160947],{"class":78,"line":1660},[76,160943,160944],{"class":90},"    pay ",[76,160946,1857],{"class":82},[76,160948,160949],{"class":119}," 50\n",[76,160951,160952],{"class":78,"line":1683},[76,160953,149],{"emptyLinePlaceholder":148},[76,160955,160956,160958,160960,160962,160964,160966,160969,160971,160973,160975],{"class":78,"line":1698},[76,160957,478],{"class":119},[76,160959,123],{"class":90},[76,160961,292],{"class":82},[76,160963,159346],{"class":126},[76,160965,298],{"class":119},[76,160967,160968],{"class":90},"pay",[76,160970,159149],{"class":82},[76,160972,304],{"class":119},[76,160974,1627],{"class":126},[76,160976,130],{"class":90},[14,160978,160980],{"id":160979},"_312-易错点","3.12 易错点",[26,160982,160983,160986,160989,160992,160997],{},[29,160984,160985],{},"冒号不能漏。",[29,160987,160988],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160990,160991],{},"多分支判断要注意顺序。",[29,160993,160994,160995,490],{},"判断相等用 ",[73,160996,1250],{},[29,160998,160999],{},"字符串比较区分大小写：",[66,161001,161003],{"className":68,"code":161002,"language":70,"meta":71,"style":71},"\"Y\" == \"y\"  # False\n",[73,161004,161005],{"__ignoreMap":71},[76,161006,161007,161010,161012,161014],{"class":78,"line":79},[76,161008,161009],{"class":126},"\"Y\"",[76,161011,103581],{"class":82},[76,161013,159995],{"class":126},[76,161015,161016],{"class":540},"  # False\n",[19,161018,161019],{},"可转换后再判断：",[66,161021,161023],{"className":68,"code":161022,"language":70,"meta":71,"style":71},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[73,161024,161025,161042,161055],{"__ignoreMap":71},[76,161026,161027,161030,161032,161034,161036,161039],{"class":78,"line":79},[76,161028,161029],{"class":90},"answer ",[76,161031,370],{"class":82},[76,161033,1914],{"class":119},[76,161035,123],{"class":90},[76,161037,161038],{"class":126},"\"是否继续(y\u002Fn):\"",[76,161040,161041],{"class":90},").lower()\n",[76,161043,161044,161046,161049,161051,161053],{"class":78,"line":94},[76,161045,723],{"class":82},[76,161047,161048],{"class":90}," answer ",[76,161050,1250],{"class":82},[76,161052,159995],{"class":126},[76,161054,590],{"class":90},[76,161056,161057,161059,161061,161064],{"class":78,"line":133},[76,161058,120],{"class":119},[76,161060,123],{"class":90},[76,161062,161063],{"class":126},"\"继续\"",[76,161065,130],{"class":90},[14,161067,161069],{"id":161068},"_313-本章练习","3.13 本章练习",[26,161071,161072,161075,161078,161081,161091],{},[29,161073,161074],{},"输入年龄，判断是否成年。",[29,161076,161077],{},"输入年份，判断是否为闰年。",[29,161079,161080],{},"输入三个数字，输出最大值。",[29,161082,161083,161084,161087,161088,161090],{},"写登录判断：用户名是 ",[73,161085,161086],{},"admin"," 且密码是 ",[73,161089,17136],{}," 才登录成功。",[29,161092,161093],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2178,161095,161096],{},"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":71,"searchDepth":94,"depth":94,"links":161098},[161099,161100,161101,161102,161103,161104,161109,161110,161111,161112,161113,161114,161115],{"id":159488,"depth":94,"text":159489},{"id":159541,"depth":94,"text":159542},{"id":159645,"depth":94,"text":159646},{"id":159735,"depth":94,"text":159736},{"id":159925,"depth":94,"text":159926},{"id":160047,"depth":94,"text":160048,"children":161105},[161106,161107,161108],{"id":160051,"depth":133,"text":160052},{"id":160108,"depth":133,"text":160109},{"id":160165,"depth":133,"text":160166},{"id":160210,"depth":94,"text":160211},{"id":160301,"depth":94,"text":160302},{"id":160428,"depth":94,"text":160429},{"id":160558,"depth":94,"text":160559},{"id":160743,"depth":94,"text":160744},{"id":160979,"depth":94,"text":160980},{"id":161068,"depth":94,"text":161069},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159480,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161122,"title":161123,"body":161124,"description":2201,"extension":2202,"meta":162885,"navigation":148,"path":162886,"seo":162887,"stem":162888,"__hash__":162889},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161125,"toc":162865},[161126,161129,161133,161139,161142,161159,161163,161165,161182,161184,161229,161231,161248,161252,161255,161320,161323,161341,161345,161505,161514,161518,161522,161527,161574,161576,161582,161586,161591,161638,161640,161646,161650,161655,161691,161694,161741,161745,161751,161809,161814,161845,161850,161854,161909,161912,161983,161986,162045,162049,162052,162127,162130,162134,162240,162243,162269,162273,162285,162354,162357,162449,162453,162455,162466,162468,162598,162602,162799,162807,162811,162841,162845,162862],[10,161127,161123],{"id":161128},"_4-循环语句",[14,161130,161132],{"id":161131},"_41-为什么需要循环","4.1 为什么需要循环",[19,161134,161135,161136,161138],{},"如果要输出 1 到 100，不应该写 100 行 ",[73,161137,148492],{},"，而应该用循环。",[19,161140,161141],{},"循环适合处理重复任务：",[26,161143,161144,161147,161150,161153,161156],{},[29,161145,161146],{},"重复输出。",[29,161148,161149],{},"重复输入。",[29,161151,161152],{},"遍历数据。",[29,161154,161155],{},"持续执行菜单。",[29,161157,161158],{},"批量处理文件或数据。",[14,161160,161162],{"id":161161},"_42-while循环","4.2 while循环",[19,161164,64],{},[66,161166,161168],{"className":68,"code":161167,"language":70,"meta":71,"style":71},"while 条件:\n    循环体\n",[73,161169,161170,161177],{"__ignoreMap":71},[76,161171,161172,161174],{"class":78,"line":79},[76,161173,1892],{"class":82},[76,161175,161176],{"class":90}," 条件:\n",[76,161178,161179],{"class":78,"line":94},[76,161180,161181],{"class":90},"    循环体\n",[19,161183,100],{},[66,161185,161187],{"className":68,"code":161186,"language":70,"meta":71,"style":71},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[73,161188,161189,161197,161201,161213,161220],{"__ignoreMap":71},[76,161190,161191,161193,161195],{"class":78,"line":79},[76,161192,102170],{"class":90},[76,161194,370],{"class":82},[76,161196,1063],{"class":119},[76,161198,161199],{"class":78,"line":94},[76,161200,149],{"emptyLinePlaceholder":148},[76,161202,161203,161205,161207,161209,161211],{"class":78,"line":133},[76,161204,1892],{"class":82},[76,161206,11505],{"class":90},[76,161208,1691],{"class":82},[76,161210,4244],{"class":119},[76,161212,590],{"class":90},[76,161214,161215,161217],{"class":78,"line":145},[76,161216,120],{"class":119},[76,161218,161219],{"class":90},"(i)\n",[76,161221,161222,161225,161227],{"class":78,"line":152},[76,161223,161224],{"class":90},"    i ",[76,161226,1060],{"class":82},[76,161228,1063],{"class":119},[19,161230,82953],{},[26,161232,161233,161239,161242,161245],{},[29,161234,161235,161236,490],{},"判断条件 ",[73,161237,161238],{},"i \u003C= 5",[29,161240,161241],{},"条件成立，执行循环体。",[29,161243,161244],{},"执行完后回到条件判断。",[29,161246,161247],{},"条件不成立，退出循环。",[14,161249,161251],{"id":161250},"_43-while累加","4.3 while累加",[19,161253,161254],{},"计算 1 到 100 的和：",[66,161256,161258],{"className":68,"code":161257,"language":70,"meta":71,"style":71},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[73,161259,161260,161268,161276,161280,161292,161301,161309,161313],{"__ignoreMap":71},[76,161261,161262,161264,161266],{"class":78,"line":79},[76,161263,102170],{"class":90},[76,161265,370],{"class":82},[76,161267,1063],{"class":119},[76,161269,161270,161272,161274],{"class":78,"line":94},[76,161271,159250],{"class":90},[76,161273,370],{"class":82},[76,161275,1027],{"class":119},[76,161277,161278],{"class":78,"line":133},[76,161279,149],{"emptyLinePlaceholder":148},[76,161281,161282,161284,161286,161288,161290],{"class":78,"line":145},[76,161283,1892],{"class":82},[76,161285,11505],{"class":90},[76,161287,1691],{"class":82},[76,161289,7834],{"class":119},[76,161291,590],{"class":90},[76,161293,161294,161296,161298],{"class":78,"line":152},[76,161295,1460],{"class":90},[76,161297,1060],{"class":82},[76,161299,161300],{"class":90}," i\n",[76,161302,161303,161305,161307],{"class":78,"line":157},[76,161304,161224],{"class":90},[76,161306,1060],{"class":82},[76,161308,1063],{"class":119},[76,161310,161311],{"class":78,"line":246},[76,161312,149],{"emptyLinePlaceholder":148},[76,161314,161315,161317],{"class":78,"line":251},[76,161316,478],{"class":119},[76,161318,161319],{"class":90},"(total)\n",[19,161321,161322],{},"核心思想：",[26,161324,161325,161330,161335],{},[29,161326,161327,161329],{},[73,161328,2705],{}," 控制循环次数。",[29,161331,161332,161334],{},[73,161333,159351],{}," 保存累加结果。",[29,161336,161337,161338,161340],{},"每轮循环都要更新 ",[73,161339,2705],{},"，否则可能死循环。",[14,161342,161344],{"id":161343},"_44-while猜数字","4.4 while猜数字",[66,161346,161348],{"className":68,"code":161347,"language":70,"meta":71,"style":71},"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",[73,161349,161350,161356,161360,161377,161385,161389,161397,161417,161425,161429,161441,161452,161462,161473,161479,161501],{"__ignoreMap":71},[76,161351,161352,161354],{"class":78,"line":79},[76,161353,32438],{"class":82},[76,161355,47363],{"class":90},[76,161357,161358],{"class":78,"line":94},[76,161359,149],{"emptyLinePlaceholder":148},[76,161361,161362,161364,161366,161369,161371,161373,161375],{"class":78,"line":133},[76,161363,161029],{"class":90},[76,161365,370],{"class":82},[76,161367,161368],{"class":90}," random.randint(",[76,161370,669],{"class":119},[76,161372,405],{"class":90},[76,161374,2575],{"class":119},[76,161376,130],{"class":90},[76,161378,161379,161381,161383],{"class":78,"line":145},[76,161380,1022],{"class":90},[76,161382,370],{"class":82},[76,161384,1027],{"class":119},[76,161386,161387],{"class":78,"line":152},[76,161388,149],{"emptyLinePlaceholder":148},[76,161390,161391,161393,161395],{"class":78,"line":157},[76,161392,1892],{"class":82},[76,161394,1895],{"class":119},[76,161396,590],{"class":90},[76,161398,161399,161402,161404,161406,161408,161410,161412,161415],{"class":78,"line":246},[76,161400,161401],{"class":90},"    guess ",[76,161403,370],{"class":82},[76,161405,4478],{"class":119},[76,161407,123],{"class":90},[76,161409,1673],{"class":119},[76,161411,123],{"class":90},[76,161413,161414],{"class":126},"\"请输入1到100之间的数字:\"",[76,161416,656],{"class":90},[76,161418,161419,161421,161423],{"class":78,"line":251},[76,161420,1057],{"class":90},[76,161422,1060],{"class":82},[76,161424,1063],{"class":119},[76,161426,161427],{"class":78,"line":257},[76,161428,149],{"emptyLinePlaceholder":148},[76,161430,161431,161433,161436,161438],{"class":78,"line":641},[76,161432,578],{"class":82},[76,161434,161435],{"class":90}," guess ",[76,161437,1829],{"class":82},[76,161439,161440],{"class":90}," answer:\n",[76,161442,161443,161445,161447,161450],{"class":78,"line":646},[76,161444,1701],{"class":119},[76,161446,123],{"class":90},[76,161448,161449],{"class":126},"\"猜大了\"",[76,161451,130],{"class":90},[76,161453,161454,161456,161458,161460],{"class":78,"line":659},[76,161455,1953],{"class":82},[76,161457,161435],{"class":90},[76,161459,584],{"class":82},[76,161461,161440],{"class":90},[76,161463,161464,161466,161468,161471],{"class":78,"line":1608},[76,161465,1701],{"class":119},[76,161467,123],{"class":90},[76,161469,161470],{"class":126},"\"猜小了\"",[76,161472,130],{"class":90},[76,161474,161475,161477],{"class":78,"line":1632},[76,161476,2026],{"class":82},[76,161478,590],{"class":90},[76,161480,161481,161483,161485,161487,161490,161492,161494,161496,161499],{"class":78,"line":1637},[76,161482,1701],{"class":119},[76,161484,123],{"class":90},[76,161486,292],{"class":82},[76,161488,161489],{"class":126},"\"猜对了，一共猜了",[76,161491,298],{"class":119},[76,161493,86458],{"class":90},[76,161495,304],{"class":119},[76,161497,161498],{"class":126},"次\"",[76,161500,130],{"class":90},[76,161502,161503],{"class":78,"line":1642},[76,161504,2020],{"class":82},[19,161506,161507,161510,161511,161513],{},[73,161508,161509],{},"while True"," 表示无限循环，通常配合 ",[73,161512,4149],{}," 使用。",[14,161515,161517],{"id":161516},"_45-break和continue","4.5 break和continue",[889,161519,161521],{"id":161520},"_451-break","4.5.1 break",[19,161523,161524,161526],{},[73,161525,4149],{}," 直接结束整个循环。",[66,161528,161530],{"className":68,"code":161529,"language":70,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[73,161531,161532,161552,161564,161568],{"__ignoreMap":71},[76,161533,161534,161536,161538,161540,161542,161544,161546,161548,161550],{"class":78,"line":79},[76,161535,5112],{"class":82},[76,161537,11505],{"class":90},[76,161539,1475],{"class":82},[76,161541,34483],{"class":119},[76,161543,123],{"class":90},[76,161545,669],{"class":119},[76,161547,405],{"class":90},[76,161549,2608],{"class":119},[76,161551,32830],{"class":90},[76,161553,161554,161556,161558,161560,161562],{"class":78,"line":94},[76,161555,578],{"class":82},[76,161557,11505],{"class":90},[76,161559,1250],{"class":82},[76,161561,80096],{"class":119},[76,161563,590],{"class":90},[76,161565,161566],{"class":78,"line":133},[76,161567,2020],{"class":82},[76,161569,161570,161572],{"class":78,"line":145},[76,161571,120],{"class":119},[76,161573,161219],{"class":90},[19,161575,148477],{},[66,161577,161580],{"className":161578,"code":161579,"language":7268,"meta":71},[7266],"1\n2\n",[73,161581,161579],{"__ignoreMap":71},[889,161583,161585],{"id":161584},"_452-continue","4.5.2 continue",[19,161587,161588,161590],{},[73,161589,156666],{}," 跳过本轮剩余代码，进入下一轮循环。",[66,161592,161594],{"className":68,"code":161593,"language":70,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[73,161595,161596,161616,161628,161632],{"__ignoreMap":71},[76,161597,161598,161600,161602,161604,161606,161608,161610,161612,161614],{"class":78,"line":79},[76,161599,5112],{"class":82},[76,161601,11505],{"class":90},[76,161603,1475],{"class":82},[76,161605,34483],{"class":119},[76,161607,123],{"class":90},[76,161609,669],{"class":119},[76,161611,405],{"class":90},[76,161613,2608],{"class":119},[76,161615,32830],{"class":90},[76,161617,161618,161620,161622,161624,161626],{"class":78,"line":94},[76,161619,578],{"class":82},[76,161621,11505],{"class":90},[76,161623,1250],{"class":82},[76,161625,80096],{"class":119},[76,161627,590],{"class":90},[76,161629,161630],{"class":78,"line":133},[76,161631,150529],{"class":82},[76,161633,161634,161636],{"class":78,"line":145},[76,161635,120],{"class":119},[76,161637,161219],{"class":90},[19,161639,148477],{},[66,161641,161644],{"className":161642,"code":161643,"language":7268,"meta":71},[7266],"1\n2\n4\n5\n",[73,161645,161643],{"__ignoreMap":71},[14,161647,161649],{"id":161648},"_46-for循环","4.6 for循环",[19,161651,161652,161654],{},[73,161653,5112],{}," 常用于遍历序列。",[66,161656,161658],{"className":68,"code":161657,"language":70,"meta":71,"style":71},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[73,161659,161660,161669,161673,161684],{"__ignoreMap":71},[76,161661,161662,161664,161666],{"class":78,"line":79},[76,161663,966],{"class":90},[76,161665,370],{"class":82},[76,161667,161668],{"class":126}," \"python\"\n",[76,161670,161671],{"class":78,"line":94},[76,161672,149],{"emptyLinePlaceholder":148},[76,161674,161675,161677,161680,161682],{"class":78,"line":133},[76,161676,5112],{"class":82},[76,161678,161679],{"class":90}," ch ",[76,161681,1475],{"class":82},[76,161683,160388],{"class":90},[76,161685,161686,161688],{"class":78,"line":145},[76,161687,120],{"class":119},[76,161689,161690],{"class":90},"(ch)\n",[19,161692,161693],{},"遍历列表：",[66,161695,161697],{"className":68,"code":161696,"language":70,"meta":71,"style":71},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[73,161698,161699,161721,161725,161735],{"__ignoreMap":71},[76,161700,161701,161704,161706,161708,161710,161712,161714,161716,161719],{"class":78,"line":79},[76,161702,161703],{"class":90},"students ",[76,161705,370],{"class":82},[76,161707,54258],{"class":90},[76,161709,325],{"class":126},[76,161711,405],{"class":90},[76,161713,334],{"class":126},[76,161715,405],{"class":90},[76,161717,161718],{"class":126},"\"小刚\"",[76,161720,35284],{"class":90},[76,161722,161723],{"class":78,"line":94},[76,161724,149],{"emptyLinePlaceholder":148},[76,161726,161727,161729,161731,161733],{"class":78,"line":133},[76,161728,5112],{"class":82},[76,161730,154141],{"class":90},[76,161732,1475],{"class":82},[76,161734,154146],{"class":90},[76,161736,161737,161739],{"class":78,"line":145},[76,161738,120],{"class":119},[76,161740,152056],{"class":90},[14,161742,161744],{"id":161743},"_47-range函数","4.7 range函数",[19,161746,161747,161750],{},[73,161748,161749],{},"range()"," 用于生成整数序列。",[66,161752,161754],{"className":68,"code":161753,"language":70,"meta":71,"style":71},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[73,161755,161756,161770,161788],{"__ignoreMap":71},[76,161757,161758,161760,161762,161764,161767],{"class":78,"line":79},[76,161759,35454],{"class":119},[76,161761,123],{"class":90},[76,161763,2583],{"class":119},[76,161765,161766],{"class":90},")          ",[76,161768,161769],{"class":540},"# 0,1,2,3,4\n",[76,161771,161772,161774,161776,161778,161780,161782,161785],{"class":78,"line":94},[76,161773,35454],{"class":119},[76,161775,123],{"class":90},[76,161777,669],{"class":119},[76,161779,405],{"class":90},[76,161781,2583],{"class":119},[76,161783,161784],{"class":90},")       ",[76,161786,161787],{"class":540},"# 1,2,3,4\n",[76,161789,161790,161792,161794,161796,161798,161800,161802,161804,161806],{"class":78,"line":133},[76,161791,35454],{"class":119},[76,161793,123],{"class":90},[76,161795,669],{"class":119},[76,161797,405],{"class":90},[76,161799,402],{"class":119},[76,161801,405],{"class":90},[76,161803,2345],{"class":119},[76,161805,157655],{"class":90},[76,161807,161808],{"class":540},"# 1,3,5,7,9\n",[19,161810,161811,161812,26668],{},"配合 ",[73,161813,5112],{},[66,161815,161817],{"className":68,"code":161816,"language":70,"meta":71,"style":71},"for i in range(1, 6):\n    print(i)\n",[73,161818,161819,161839],{"__ignoreMap":71},[76,161820,161821,161823,161825,161827,161829,161831,161833,161835,161837],{"class":78,"line":79},[76,161822,5112],{"class":82},[76,161824,11505],{"class":90},[76,161826,1475],{"class":82},[76,161828,34483],{"class":119},[76,161830,123],{"class":90},[76,161832,669],{"class":119},[76,161834,405],{"class":90},[76,161836,2608],{"class":119},[76,161838,32830],{"class":90},[76,161840,161841,161843],{"class":78,"line":94},[76,161842,120],{"class":119},[76,161844,161219],{"class":90},[19,161846,163,161847,161849],{},[73,161848,35454],{}," 的结束值不包含在内。",[14,161851,161853],{"id":161852},"_48-for循环求和","4.8 for循环求和",[66,161855,161857],{"className":68,"code":161856,"language":70,"meta":71,"style":71},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[73,161858,161859,161867,161871,161891,161899,161903],{"__ignoreMap":71},[76,161860,161861,161863,161865],{"class":78,"line":79},[76,161862,159250],{"class":90},[76,161864,370],{"class":82},[76,161866,1027],{"class":119},[76,161868,161869],{"class":78,"line":94},[76,161870,149],{"emptyLinePlaceholder":148},[76,161872,161873,161875,161877,161879,161881,161883,161885,161887,161889],{"class":78,"line":133},[76,161874,5112],{"class":82},[76,161876,11505],{"class":90},[76,161878,1475],{"class":82},[76,161880,34483],{"class":119},[76,161882,123],{"class":90},[76,161884,669],{"class":119},[76,161886,405],{"class":90},[76,161888,2601],{"class":119},[76,161890,32830],{"class":90},[76,161892,161893,161895,161897],{"class":78,"line":145},[76,161894,1460],{"class":90},[76,161896,1060],{"class":82},[76,161898,161300],{"class":90},[76,161900,161901],{"class":78,"line":152},[76,161902,149],{"emptyLinePlaceholder":148},[76,161904,161905,161907],{"class":78,"line":157},[76,161906,478],{"class":119},[76,161908,161319],{"class":90},[19,161910,161911],{},"求偶数和：",[66,161913,161915],{"className":68,"code":161914,"language":70,"meta":71,"style":71},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[73,161916,161917,161925,161929,161949,161965,161973,161977],{"__ignoreMap":71},[76,161918,161919,161921,161923],{"class":78,"line":79},[76,161920,159250],{"class":90},[76,161922,370],{"class":82},[76,161924,1027],{"class":119},[76,161926,161927],{"class":78,"line":94},[76,161928,149],{"emptyLinePlaceholder":148},[76,161930,161931,161933,161935,161937,161939,161941,161943,161945,161947],{"class":78,"line":133},[76,161932,5112],{"class":82},[76,161934,11505],{"class":90},[76,161936,1475],{"class":82},[76,161938,34483],{"class":119},[76,161940,123],{"class":90},[76,161942,669],{"class":119},[76,161944,405],{"class":90},[76,161946,2601],{"class":119},[76,161948,32830],{"class":90},[76,161950,161951,161953,161955,161957,161959,161961,161963],{"class":78,"line":145},[76,161952,578],{"class":82},[76,161954,11505],{"class":90},[76,161956,2592],{"class":82},[76,161958,16807],{"class":119},[76,161960,103581],{"class":82},[76,161962,587],{"class":119},[76,161964,590],{"class":90},[76,161966,161967,161969,161971],{"class":78,"line":152},[76,161968,1483],{"class":90},[76,161970,1060],{"class":82},[76,161972,161300],{"class":90},[76,161974,161975],{"class":78,"line":157},[76,161976,149],{"emptyLinePlaceholder":148},[76,161978,161979,161981],{"class":78,"line":246},[76,161980,478],{"class":119},[76,161982,161319],{"class":90},[19,161984,161985],{},"也可以：",[66,161987,161989],{"className":68,"code":161988,"language":70,"meta":71,"style":71},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[73,161990,161991,161999,162003,162027,162035,162039],{"__ignoreMap":71},[76,161992,161993,161995,161997],{"class":78,"line":79},[76,161994,159250],{"class":90},[76,161996,370],{"class":82},[76,161998,1027],{"class":119},[76,162000,162001],{"class":78,"line":94},[76,162002,149],{"emptyLinePlaceholder":148},[76,162004,162005,162007,162009,162011,162013,162015,162017,162019,162021,162023,162025],{"class":78,"line":133},[76,162006,5112],{"class":82},[76,162008,11505],{"class":90},[76,162010,1475],{"class":82},[76,162012,34483],{"class":119},[76,162014,123],{"class":90},[76,162016,2345],{"class":119},[76,162018,405],{"class":90},[76,162020,2601],{"class":119},[76,162022,405],{"class":90},[76,162024,2345],{"class":119},[76,162026,32830],{"class":90},[76,162028,162029,162031,162033],{"class":78,"line":145},[76,162030,1460],{"class":90},[76,162032,1060],{"class":82},[76,162034,161300],{"class":90},[76,162036,162037],{"class":78,"line":152},[76,162038,149],{"emptyLinePlaceholder":148},[76,162040,162041,162043],{"class":78,"line":157},[76,162042,478],{"class":119},[76,162044,161319],{"class":90},[14,162046,162048],{"id":162047},"_49-循环嵌套","4.9 循环嵌套",[19,162050,162051],{},"嵌套循环就是循环里面再写循环。",[66,162053,162055],{"className":68,"code":162054,"language":70,"meta":71,"style":71},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[73,162056,162057,162077,162097],{"__ignoreMap":71},[76,162058,162059,162061,162063,162065,162067,162069,162071,162073,162075],{"class":78,"line":79},[76,162060,5112],{"class":82},[76,162062,11505],{"class":90},[76,162064,1475],{"class":82},[76,162066,34483],{"class":119},[76,162068,123],{"class":90},[76,162070,669],{"class":119},[76,162072,405],{"class":90},[76,162074,2557],{"class":119},[76,162076,32830],{"class":90},[76,162078,162079,162081,162083,162085,162087,162089,162091,162093,162095],{"class":78,"line":94},[76,162080,1469],{"class":82},[76,162082,11566],{"class":90},[76,162084,1475],{"class":82},[76,162086,34483],{"class":119},[76,162088,123],{"class":90},[76,162090,669],{"class":119},[76,162092,405],{"class":90},[76,162094,2557],{"class":119},[76,162096,32830],{"class":90},[76,162098,162099,162101,162103,162105,162108,162110,162112,162114,162117,162119,162121,162123,162125],{"class":78,"line":133},[76,162100,1701],{"class":119},[76,162102,123],{"class":90},[76,162104,292],{"class":82},[76,162106,162107],{"class":126},"\"i=",[76,162109,298],{"class":119},[76,162111,2705],{"class":90},[76,162113,304],{"class":119},[76,162115,162116],{"class":126},", j=",[76,162118,298],{"class":119},[76,162120,2730],{"class":90},[76,162122,304],{"class":119},[76,162124,307],{"class":126},[76,162126,130],{"class":90},[19,162128,162129],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162131,162133],{"id":162132},"_410-九九乘法表","4.10 九九乘法表",[66,162135,162137],{"className":68,"code":162136,"language":70,"meta":71,"style":71},"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",[73,162138,162139,162159,162182,162234],{"__ignoreMap":71},[76,162140,162141,162143,162145,162147,162149,162151,162153,162155,162157],{"class":78,"line":79},[76,162142,5112],{"class":82},[76,162144,11505],{"class":90},[76,162146,1475],{"class":82},[76,162148,34483],{"class":119},[76,162150,123],{"class":90},[76,162152,669],{"class":119},[76,162154,405],{"class":90},[76,162156,402],{"class":119},[76,162158,32830],{"class":90},[76,162160,162161,162163,162165,162167,162169,162171,162173,162176,162178,162180],{"class":78,"line":94},[76,162162,1469],{"class":82},[76,162164,11566],{"class":90},[76,162166,1475],{"class":82},[76,162168,34483],{"class":119},[76,162170,123],{"class":90},[76,162172,669],{"class":119},[76,162174,162175],{"class":90},", i ",[76,162177,376],{"class":82},[76,162179,27168],{"class":119},[76,162181,32830],{"class":90},[76,162183,162184,162186,162188,162190,162192,162194,162196,162198,162200,162202,162204,162206,162208,162210,162212,162214,162216,162218,162220,162222,162224,162226,162228,162230,162232],{"class":78,"line":133},[76,162185,1701],{"class":119},[76,162187,123],{"class":90},[76,162189,292],{"class":82},[76,162191,307],{"class":126},[76,162193,298],{"class":119},[76,162195,2730],{"class":90},[76,162197,304],{"class":119},[76,162199,2718],{"class":126},[76,162201,298],{"class":119},[76,162203,2705],{"class":90},[76,162205,304],{"class":119},[76,162207,370],{"class":126},[76,162209,298],{"class":119},[76,162211,102170],{"class":90},[76,162213,2718],{"class":82},[76,162215,5495],{"class":90},[76,162217,304],{"class":119},[76,162219,307],{"class":126},[76,162221,405],{"class":90},[76,162223,47835],{"class":7296},[76,162225,370],{"class":82},[76,162227,307],{"class":126},[76,162229,3355],{"class":119},[76,162231,307],{"class":126},[76,162233,130],{"class":90},[76,162235,162236,162238],{"class":78,"line":145},[76,162237,120],{"class":119},[76,162239,4072],{"class":90},[19,162241,162242],{},"关键点：",[26,162244,162245,162251,162257,162263],{},[29,162246,162247,162248,162250],{},"外层 ",[73,162249,2705],{}," 控制行。",[29,162252,162253,162254,162256],{},"内层 ",[73,162255,2730],{}," 控制列。",[29,162258,162259,162260,162262],{},"每行结束后用 ",[73,162261,148492],{}," 换行。",[29,162264,162265,162268],{},[73,162266,162267],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162270,162272],{"id":162271},"_411-循环else","4.11 循环else",[19,162274,162275,162276,162278,162279,162281,162282,162284],{},"Python 的循环可以带 ",[73,162277,1328],{},"。当循环正常结束时执行 ",[73,162280,1328],{},"，如果被 ",[73,162283,4149],{}," 打断，则不执行。",[66,162286,162288],{"className":68,"code":162287,"language":70,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,162289,162290,162310,162322,162333,162337,162343],{"__ignoreMap":71},[76,162291,162292,162294,162296,162298,162300,162302,162304,162306,162308],{"class":78,"line":79},[76,162293,5112],{"class":82},[76,162295,11505],{"class":90},[76,162297,1475],{"class":82},[76,162299,34483],{"class":119},[76,162301,123],{"class":90},[76,162303,669],{"class":119},[76,162305,405],{"class":90},[76,162307,2608],{"class":119},[76,162309,32830],{"class":90},[76,162311,162312,162314,162316,162318,162320],{"class":78,"line":94},[76,162313,578],{"class":82},[76,162315,11505],{"class":90},[76,162317,1250],{"class":82},[76,162319,4134],{"class":119},[76,162321,590],{"class":90},[76,162323,162324,162326,162328,162331],{"class":78,"line":133},[76,162325,1701],{"class":119},[76,162327,123],{"class":90},[76,162329,162330],{"class":126},"\"找到了\"",[76,162332,130],{"class":90},[76,162334,162335],{"class":78,"line":145},[76,162336,2020],{"class":82},[76,162338,162339,162341],{"class":78,"line":152},[76,162340,1328],{"class":82},[76,162342,590],{"class":90},[76,162344,162345,162347,162349,162352],{"class":78,"line":157},[76,162346,120],{"class":119},[76,162348,123],{"class":90},[76,162350,162351],{"class":126},"\"没找到\"",[76,162353,130],{"class":90},[19,162355,162356],{},"常用于搜索。",[66,162358,162360],{"className":68,"code":162359,"language":70,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,162361,162362,162383,162392,162396,162408,162419,162429,162433,162439],{"__ignoreMap":71},[76,162363,162364,162367,162369,162371,162373,162375,162377,162379,162381],{"class":78,"line":79},[76,162365,162366],{"class":90},"names ",[76,162368,370],{"class":82},[76,162370,54258],{"class":90},[76,162372,325],{"class":126},[76,162374,405],{"class":90},[76,162376,334],{"class":126},[76,162378,405],{"class":90},[76,162380,161718],{"class":126},[76,162382,35284],{"class":90},[76,162384,162385,162387,162389],{"class":78,"line":94},[76,162386,113598],{"class":90},[76,162388,370],{"class":82},[76,162390,162391],{"class":126}," \"小李\"\n",[76,162393,162394],{"class":78,"line":133},[76,162395,149],{"emptyLinePlaceholder":148},[76,162397,162398,162400,162403,162405],{"class":78,"line":145},[76,162399,5112],{"class":82},[76,162401,162402],{"class":90}," name ",[76,162404,1475],{"class":82},[76,162406,162407],{"class":90}," names:\n",[76,162409,162410,162412,162414,162416],{"class":78,"line":152},[76,162411,578],{"class":82},[76,162413,162402],{"class":90},[76,162415,1250],{"class":82},[76,162417,162418],{"class":90}," target:\n",[76,162420,162421,162423,162425,162427],{"class":78,"line":157},[76,162422,1701],{"class":119},[76,162424,123],{"class":90},[76,162426,162330],{"class":126},[76,162428,130],{"class":90},[76,162430,162431],{"class":78,"line":246},[76,162432,2020],{"class":82},[76,162434,162435,162437],{"class":78,"line":251},[76,162436,1328],{"class":82},[76,162438,590],{"class":90},[76,162440,162441,162443,162445,162447],{"class":78,"line":257},[76,162442,120],{"class":119},[76,162444,123],{"class":90},[76,162446,162351],{"class":126},[76,162448,130],{"class":90},[14,162450,162452],{"id":162451},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162454,125312],{},[26,162456,162457,162460,162463],{},[29,162458,162459],{},"用户最多输入 3 次密码。",[29,162461,162462],{},"密码正确则登录成功。",[29,162464,162465],{},"3 次都错误则锁定账号。",[19,162467,12092],{},[66,162469,162471],{"className":68,"code":162470,"language":70,"meta":71,"style":71},"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",[73,162472,162473,162483,162487,162503,162519,162523,162535,162546,162550,162556,162581,162587],{"__ignoreMap":71},[76,162474,162475,162478,162480],{"class":78,"line":79},[76,162476,162477],{"class":90},"password ",[76,162479,370],{"class":82},[76,162481,162482],{"class":126}," \"123456\"\n",[76,162484,162485],{"class":78,"line":94},[76,162486,149],{"emptyLinePlaceholder":148},[76,162488,162489,162491,162493,162495,162497,162499,162501],{"class":78,"line":133},[76,162490,5112],{"class":82},[76,162492,11505],{"class":90},[76,162494,1475],{"class":82},[76,162496,34483],{"class":119},[76,162498,123],{"class":90},[76,162500,2339],{"class":119},[76,162502,32830],{"class":90},[76,162504,162505,162508,162510,162512,162514,162517],{"class":78,"line":145},[76,162506,162507],{"class":90},"    user_password ",[76,162509,370],{"class":82},[76,162511,1914],{"class":119},[76,162513,123],{"class":90},[76,162515,162516],{"class":126},"\"请输入密码:\"",[76,162518,130],{"class":90},[76,162520,162521],{"class":78,"line":152},[76,162522,149],{"emptyLinePlaceholder":148},[76,162524,162525,162527,162530,162532],{"class":78,"line":157},[76,162526,578],{"class":82},[76,162528,162529],{"class":90}," user_password ",[76,162531,1250],{"class":82},[76,162533,162534],{"class":90}," password:\n",[76,162536,162537,162539,162541,162544],{"class":78,"line":246},[76,162538,1701],{"class":119},[76,162540,123],{"class":90},[76,162542,162543],{"class":126},"\"登录成功\"",[76,162545,130],{"class":90},[76,162547,162548],{"class":78,"line":251},[76,162549,2020],{"class":82},[76,162551,162552,162554],{"class":78,"line":257},[76,162553,2026],{"class":82},[76,162555,590],{"class":90},[76,162557,162558,162560,162562,162564,162567,162570,162572,162574,162576,162579],{"class":78,"line":641},[76,162559,1701],{"class":119},[76,162561,123],{"class":90},[76,162563,292],{"class":82},[76,162565,162566],{"class":126},"\"密码错误，还剩",[76,162568,162569],{"class":119},"{2",[76,162571,54303],{"class":82},[76,162573,5119],{"class":90},[76,162575,304],{"class":119},[76,162577,162578],{"class":126},"次机会\"",[76,162580,130],{"class":90},[76,162582,162583,162585],{"class":78,"line":646},[76,162584,1328],{"class":82},[76,162586,590],{"class":90},[76,162588,162589,162591,162593,162596],{"class":78,"line":659},[76,162590,120],{"class":119},[76,162592,123],{"class":90},[76,162594,162595],{"class":126},"\"账号已锁定\"",[76,162597,130],{"class":90},[14,162599,162601],{"id":162600},"_413-小案例菜单程序","4.13 小案例：菜单程序",[66,162603,162605],{"className":68,"code":162604,"language":70,"meta":71,"style":71},"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",[73,162606,162607,162615,162626,162636,162646,162656,162666,162670,162684,162688,162700,162711,162723,162734,162746,162757,162769,162779,162783,162789],{"__ignoreMap":71},[76,162608,162609,162611,162613],{"class":78,"line":79},[76,162610,1892],{"class":82},[76,162612,1895],{"class":119},[76,162614,590],{"class":90},[76,162616,162617,162619,162621,162624],{"class":78,"line":94},[76,162618,120],{"class":119},[76,162620,123],{"class":90},[76,162622,162623],{"class":126},"\"====== 菜单 ======\"",[76,162625,130],{"class":90},[76,162627,162628,162630,162632,162634],{"class":78,"line":133},[76,162629,120],{"class":119},[76,162631,123],{"class":90},[76,162633,1554],{"class":126},[76,162635,130],{"class":90},[76,162637,162638,162640,162642,162644],{"class":78,"line":145},[76,162639,120],{"class":119},[76,162641,123],{"class":90},[76,162643,1565],{"class":126},[76,162645,130],{"class":90},[76,162647,162648,162650,162652,162654],{"class":78,"line":152},[76,162649,120],{"class":119},[76,162651,123],{"class":90},[76,162653,1576],{"class":126},[76,162655,130],{"class":90},[76,162657,162658,162660,162662,162664],{"class":78,"line":157},[76,162659,120],{"class":119},[76,162661,123],{"class":90},[76,162663,237],{"class":126},[76,162665,130],{"class":90},[76,162667,162668],{"class":78,"line":246},[76,162669,149],{"emptyLinePlaceholder":148},[76,162671,162672,162674,162676,162678,162680,162682],{"class":78,"line":251},[76,162673,1909],{"class":90},[76,162675,370],{"class":82},[76,162677,1914],{"class":119},[76,162679,123],{"class":90},[76,162681,1919],{"class":126},[76,162683,130],{"class":90},[76,162685,162686],{"class":78,"line":257},[76,162687,149],{"emptyLinePlaceholder":148},[76,162689,162690,162692,162694,162696,162698],{"class":78,"line":641},[76,162691,578],{"class":82},[76,162693,1934],{"class":90},[76,162695,1250],{"class":82},[76,162697,1939],{"class":126},[76,162699,590],{"class":90},[76,162701,162702,162704,162706,162709],{"class":78,"line":646},[76,162703,1701],{"class":119},[76,162705,123],{"class":90},[76,162707,162708],{"class":126},"\"余额为1000元\"",[76,162710,130],{"class":90},[76,162712,162713,162715,162717,162719,162721],{"class":78,"line":659},[76,162714,1953],{"class":82},[76,162716,1934],{"class":90},[76,162718,1250],{"class":82},[76,162720,1960],{"class":126},[76,162722,590],{"class":90},[76,162724,162725,162727,162729,162732],{"class":78,"line":1608},[76,162726,1701],{"class":119},[76,162728,123],{"class":90},[76,162730,162731],{"class":126},"\"存款功能\"",[76,162733,130],{"class":90},[76,162735,162736,162738,162740,162742,162744],{"class":78,"line":1632},[76,162737,1953],{"class":82},[76,162739,1934],{"class":90},[76,162741,1250],{"class":82},[76,162743,1980],{"class":126},[76,162745,590],{"class":90},[76,162747,162748,162750,162752,162755],{"class":78,"line":1637},[76,162749,1701],{"class":119},[76,162751,123],{"class":90},[76,162753,162754],{"class":126},"\"取款功能\"",[76,162756,130],{"class":90},[76,162758,162759,162761,162763,162765,162767],{"class":78,"line":1642},[76,162760,1953],{"class":82},[76,162762,1934],{"class":90},[76,162764,1250],{"class":82},[76,162766,2000],{"class":126},[76,162768,590],{"class":90},[76,162770,162771,162773,162775,162777],{"class":78,"line":1652},[76,162772,1701],{"class":119},[76,162774,123],{"class":90},[76,162776,2012],{"class":126},[76,162778,130],{"class":90},[76,162780,162781],{"class":78,"line":1660},[76,162782,2020],{"class":82},[76,162784,162785,162787],{"class":78,"line":1683},[76,162786,2026],{"class":82},[76,162788,590],{"class":90},[76,162790,162791,162793,162795,162797],{"class":78,"line":1698},[76,162792,1701],{"class":119},[76,162794,123],{"class":90},[76,162796,2038],{"class":126},[76,162798,130],{"class":90},[19,162800,162801,162802,162804,162805,490],{},"菜单类程序通常使用 ",[73,162803,161509],{},"，用户选择退出时 ",[73,162806,4149],{},[14,162808,162810],{"id":162809},"_414-易错点","4.14 易错点",[26,162812,162813,162818,162824,162832,162838],{},[29,162814,162815,162817],{},[73,162816,1892],{}," 循环必须更新控制变量。",[29,162819,162820,162823],{},[73,162821,162822],{},"range(1, 10)"," 不包含 10。",[29,162825,162826,162828,162829,162831],{},[73,162827,4149],{}," 结束整个循环，",[73,162830,156666],{}," 只跳过本轮。",[29,162833,162834,162835,162837],{},"嵌套循环中，",[73,162836,4149],{}," 只跳出当前所在的一层循环。",[29,162839,162840],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162842,162844],{"id":162843},"_415-本章练习","4.15 本章练习",[26,162846,162847,162850,162853,162856,162859],{},[29,162848,162849],{},"输出 1 到 100。",[29,162851,162852],{},"计算 1 到 100 的偶数和。",[29,162854,162855],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162857,162858],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162860,162861],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2178,162863,162864],{},"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":71,"searchDepth":94,"depth":94,"links":162866},[162867,162868,162869,162870,162871,162875,162876,162877,162878,162879,162880,162881,162882,162883,162884],{"id":161131,"depth":94,"text":161132},{"id":161161,"depth":94,"text":161162},{"id":161250,"depth":94,"text":161251},{"id":161343,"depth":94,"text":161344},{"id":161516,"depth":94,"text":161517,"children":162872},[162873,162874],{"id":161520,"depth":133,"text":161521},{"id":161584,"depth":133,"text":161585},{"id":161648,"depth":94,"text":161649},{"id":161743,"depth":94,"text":161744},{"id":161852,"depth":94,"text":161853},{"id":162047,"depth":94,"text":162048},{"id":162132,"depth":94,"text":162133},{"id":162271,"depth":94,"text":162272},{"id":162451,"depth":94,"text":162452},{"id":162600,"depth":94,"text":162601},{"id":162809,"depth":94,"text":162810},{"id":162843,"depth":94,"text":162844},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161123,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":4,"title":5,"body":162891,"description":2201,"extension":2202,"meta":164673,"navigation":148,"path":2204,"seo":164674,"stem":2206,"__hash__":2207},{"type":7,"value":162892,"toc":164653},[162893,162895,162897,162899,162901,162911,162913,162923,162925,162927,162943,162945,162989,162991,163001,163003,163071,163073,163075,163077,163133,163139,163141,163191,163193,163195,163199,163251,163257,163303,163305,163309,163315,163407,163411,163413,163417,163419,163427,163465,163473,163475,163477,163507,163509,163519,163521,163575,163577,163579,163581,163627,163629,163631,163677,163681,163741,163743,163745,163747,163857,163859,163861,163863,163965,163967,163969,164003,164005,164045,164047,164099,164101,164103,164545,164547,164549,164569,164573,164629,164631,164651],[10,162894,5],{"id":12},[14,162896,17],{"id":16},[19,162898,21],{},[19,162900,24],{},[26,162902,162903,162905,162907,162909],{},[29,162904,31],{},[29,162906,34],{},[29,162908,37],{},[29,162910,40],{},[19,162912,43],{},[26,162914,162915,162917,162919,162921],{},[29,162916,48],{},[29,162918,51],{},[29,162920,54],{},[29,162922,57],{},[14,162924,61],{"id":60},[19,162926,64],{},[66,162928,162929],{"className":68,"code":69,"language":70,"meta":71,"style":71},[73,162930,162931,162939],{"__ignoreMap":71},[76,162932,162933,162935,162937],{"class":78,"line":79},[76,162934,83],{"class":82},[76,162936,87],{"class":86},[76,162938,91],{"class":90},[76,162940,162941],{"class":78,"line":94},[76,162942,97],{"class":90},[19,162944,100],{},[66,162946,162947],{"className":68,"code":103,"language":70,"meta":71,"style":71},[73,162948,162949,162957,162967,162977,162981,162985],{"__ignoreMap":71},[76,162950,162951,162953,162955],{"class":78,"line":79},[76,162952,83],{"class":82},[76,162954,112],{"class":86},[76,162956,91],{"class":90},[76,162958,162959,162961,162963,162965],{"class":78,"line":94},[76,162960,120],{"class":119},[76,162962,123],{"class":90},[76,162964,127],{"class":126},[76,162966,130],{"class":90},[76,162968,162969,162971,162973,162975],{"class":78,"line":133},[76,162970,120],{"class":119},[76,162972,123],{"class":90},[76,162974,140],{"class":126},[76,162976,130],{"class":90},[76,162978,162979],{"class":78,"line":145},[76,162980,149],{"emptyLinePlaceholder":148},[76,162982,162983],{"class":78,"line":152},[76,162984,149],{"emptyLinePlaceholder":148},[76,162986,162987],{"class":78,"line":157},[76,162988,160],{"class":90},[19,162990,163],{},[26,162992,162993,162995,162997,162999],{},[29,162994,168],{},[29,162996,171],{},[29,162998,174],{},[29,163000,177],{},[14,163002,181],{"id":180},[66,163004,163005],{"className":68,"code":184,"language":70,"meta":71,"style":71},[73,163006,163007,163015,163025,163035,163045,163055,163059,163063,163067],{"__ignoreMap":71},[76,163008,163009,163011,163013],{"class":78,"line":79},[76,163010,83],{"class":82},[76,163012,193],{"class":86},[76,163014,91],{"class":90},[76,163016,163017,163019,163021,163023],{"class":78,"line":94},[76,163018,120],{"class":119},[76,163020,123],{"class":90},[76,163022,204],{"class":126},[76,163024,130],{"class":90},[76,163026,163027,163029,163031,163033],{"class":78,"line":133},[76,163028,120],{"class":119},[76,163030,123],{"class":90},[76,163032,215],{"class":126},[76,163034,130],{"class":90},[76,163036,163037,163039,163041,163043],{"class":78,"line":145},[76,163038,120],{"class":119},[76,163040,123],{"class":90},[76,163042,226],{"class":126},[76,163044,130],{"class":90},[76,163046,163047,163049,163051,163053],{"class":78,"line":152},[76,163048,120],{"class":119},[76,163050,123],{"class":90},[76,163052,237],{"class":126},[76,163054,130],{"class":90},[76,163056,163057],{"class":78,"line":157},[76,163058,149],{"emptyLinePlaceholder":148},[76,163060,163061],{"class":78,"line":246},[76,163062,149],{"emptyLinePlaceholder":148},[76,163064,163065],{"class":78,"line":251},[76,163066,254],{"class":90},[76,163068,163069],{"class":78,"line":257},[76,163070,254],{"class":90},[19,163072,262],{},[14,163074,266],{"id":265},[19,163076,269],{},[66,163078,163079],{"className":68,"code":272,"language":70,"meta":71,"style":71},[73,163080,163081,163089,163109,163113,163117,163125],{"__ignoreMap":71},[76,163082,163083,163085,163087],{"class":78,"line":79},[76,163084,83],{"class":82},[76,163086,112],{"class":86},[76,163088,283],{"class":90},[76,163090,163091,163093,163095,163097,163099,163101,163103,163105,163107],{"class":78,"line":94},[76,163092,120],{"class":119},[76,163094,123],{"class":90},[76,163096,292],{"class":82},[76,163098,295],{"class":126},[76,163100,298],{"class":119},[76,163102,301],{"class":90},[76,163104,304],{"class":119},[76,163106,307],{"class":126},[76,163108,130],{"class":90},[76,163110,163111],{"class":78,"line":133},[76,163112,149],{"emptyLinePlaceholder":148},[76,163114,163115],{"class":78,"line":145},[76,163116,149],{"emptyLinePlaceholder":148},[76,163118,163119,163121,163123],{"class":78,"line":152},[76,163120,322],{"class":90},[76,163122,325],{"class":126},[76,163124,130],{"class":90},[76,163126,163127,163129,163131],{"class":78,"line":157},[76,163128,322],{"class":90},[76,163130,334],{"class":126},[76,163132,130],{"class":90},[19,163134,163135,341,163137,344],{},[73,163136,301],{},[73,163138,325],{},[19,163140,347],{},[66,163142,163143],{"className":68,"code":350,"language":70,"meta":71,"style":71},[73,163144,163145,163153,163165,163171,163175,163179],{"__ignoreMap":71},[76,163146,163147,163149,163151],{"class":78,"line":79},[76,163148,83],{"class":82},[76,163150,359],{"class":86},[76,163152,362],{"class":90},[76,163154,163155,163157,163159,163161,163163],{"class":78,"line":94},[76,163156,367],{"class":90},[76,163158,370],{"class":82},[76,163160,373],{"class":90},[76,163162,376],{"class":82},[76,163164,379],{"class":90},[76,163166,163167,163169],{"class":78,"line":133},[76,163168,120],{"class":119},[76,163170,386],{"class":90},[76,163172,163173],{"class":78,"line":145},[76,163174,149],{"emptyLinePlaceholder":148},[76,163176,163177],{"class":78,"line":152},[76,163178,149],{"emptyLinePlaceholder":148},[76,163180,163181,163183,163185,163187,163189],{"class":78,"line":157},[76,163182,399],{"class":90},[76,163184,402],{"class":119},[76,163186,405],{"class":90},[76,163188,408],{"class":119},[76,163190,130],{"class":90},[19,163192,413],{},[14,163194,417],{"id":416},[19,163196,163197,423],{},[73,163198,422],{},[66,163200,163201],{"className":68,"code":426,"language":70,"meta":71,"style":71},[73,163202,163203,163211,163221,163225,163229,163245],{"__ignoreMap":71},[76,163204,163205,163207,163209],{"class":78,"line":79},[76,163206,83],{"class":82},[76,163208,359],{"class":86},[76,163210,362],{"class":90},[76,163212,163213,163215,163217,163219],{"class":78,"line":94},[76,163214,441],{"class":82},[76,163216,373],{"class":90},[76,163218,376],{"class":82},[76,163220,379],{"class":90},[76,163222,163223],{"class":78,"line":133},[76,163224,149],{"emptyLinePlaceholder":148},[76,163226,163227],{"class":78,"line":145},[76,163228,149],{"emptyLinePlaceholder":148},[76,163230,163231,163233,163235,163237,163239,163241,163243],{"class":78,"line":152},[76,163232,460],{"class":90},[76,163234,370],{"class":82},[76,163236,465],{"class":90},[76,163238,402],{"class":119},[76,163240,405],{"class":90},[76,163242,408],{"class":119},[76,163244,130],{"class":90},[76,163246,163247,163249],{"class":78,"line":157},[76,163248,478],{"class":119},[76,163250,386],{"class":90},[19,163252,483,163253,486,163255,490],{},[73,163254,422],{},[73,163256,489],{},[66,163258,163259],{"className":68,"code":493,"language":70,"meta":71,"style":71},[73,163260,163261,163269,163279,163283,163287,163295],{"__ignoreMap":71},[76,163262,163263,163265,163267],{"class":78,"line":79},[76,163264,83],{"class":82},[76,163266,112],{"class":86},[76,163268,91],{"class":90},[76,163270,163271,163273,163275,163277],{"class":78,"line":94},[76,163272,120],{"class":119},[76,163274,123],{"class":90},[76,163276,127],{"class":126},[76,163278,130],{"class":90},[76,163280,163281],{"class":78,"line":133},[76,163282,149],{"emptyLinePlaceholder":148},[76,163284,163285],{"class":78,"line":145},[76,163286,149],{"emptyLinePlaceholder":148},[76,163288,163289,163291,163293],{"class":78,"line":152},[76,163290,460],{"class":90},[76,163292,370],{"class":82},[76,163294,530],{"class":90},[76,163296,163297,163299,163301],{"class":78,"line":157},[76,163298,478],{"class":119},[76,163300,537],{"class":90},[76,163302,541],{"class":540},[14,163304,545],{"id":544},[19,163306,163307,550],{},[73,163308,422],{},[26,163310,163311,163313],{},[29,163312,555],{},[29,163314,558],{},[66,163316,163317],{"className":68,"code":561,"language":70,"meta":71,"style":71},[73,163318,163319,163327,163339,163345,163349,163361,163367,163371,163377,163381,163385,163395],{"__ignoreMap":71},[76,163320,163321,163323,163325],{"class":78,"line":79},[76,163322,83],{"class":82},[76,163324,570],{"class":86},[76,163326,573],{"class":90},[76,163328,163329,163331,163333,163335,163337],{"class":78,"line":94},[76,163330,578],{"class":82},[76,163332,581],{"class":90},[76,163334,584],{"class":82},[76,163336,587],{"class":119},[76,163338,590],{"class":90},[76,163340,163341,163343],{"class":78,"line":133},[76,163342,595],{"class":82},[76,163344,598],{"class":126},[76,163346,163347],{"class":78,"line":145},[76,163348,149],{"emptyLinePlaceholder":148},[76,163350,163351,163353,163355,163357,163359],{"class":78,"line":152},[76,163352,578],{"class":82},[76,163354,581],{"class":90},[76,163356,611],{"class":82},[76,163358,614],{"class":119},[76,163360,590],{"class":90},[76,163362,163363,163365],{"class":78,"line":157},[76,163364,595],{"class":82},[76,163366,623],{"class":126},[76,163368,163369],{"class":78,"line":246},[76,163370,149],{"emptyLinePlaceholder":148},[76,163372,163373,163375],{"class":78,"line":251},[76,163374,441],{"class":82},[76,163376,634],{"class":126},[76,163378,163379],{"class":78,"line":257},[76,163380,149],{"emptyLinePlaceholder":148},[76,163382,163383],{"class":78,"line":641},[76,163384,149],{"emptyLinePlaceholder":148},[76,163386,163387,163389,163391,163393],{"class":78,"line":646},[76,163388,478],{"class":119},[76,163390,651],{"class":90},[76,163392,408],{"class":119},[76,163394,656],{"class":90},[76,163396,163397,163399,163401,163403,163405],{"class":78,"line":659},[76,163398,478],{"class":119},[76,163400,651],{"class":90},[76,163402,666],{"class":82},[76,163404,669],{"class":119},[76,163406,656],{"class":90},[19,163408,674,163409,677],{},[73,163410,422],{},[14,163412,681],{"id":680},[19,163414,163415,686],{},[73,163416,489],{},[19,163418,689],{},[26,163420,163421,163423,163425],{},[29,163422,694],{},[29,163424,697],{},[29,163426,700],{},[66,163428,163429],{"className":68,"code":703,"language":70,"meta":71,"style":71},[73,163430,163431,163439,163443,163455],{"__ignoreMap":71},[76,163432,163433,163435,163437],{"class":78,"line":79},[76,163434,460],{"class":90},[76,163436,370],{"class":82},[76,163438,714],{"class":119},[76,163440,163441],{"class":78,"line":94},[76,163442,149],{"emptyLinePlaceholder":148},[76,163444,163445,163447,163449,163451,163453],{"class":78,"line":133},[76,163446,723],{"class":82},[76,163448,726],{"class":90},[76,163450,729],{"class":82},[76,163452,732],{"class":119},[76,163454,590],{"class":90},[76,163456,163457,163459,163461,163463],{"class":78,"line":145},[76,163458,120],{"class":119},[76,163460,123],{"class":90},[76,163462,743],{"class":126},[76,163464,130],{"class":90},[19,163466,748,163467,751,163469,755,163471,490],{},[73,163468,489],{},[73,163470,754],{},[73,163472,758],{},[14,163474,762],{"id":761},[19,163476,765],{},[66,163478,163479],{"className":68,"code":768,"language":70,"meta":71,"style":71},[73,163480,163481,163489,163493],{"__ignoreMap":71},[76,163482,163483,163485,163487],{"class":78,"line":79},[76,163484,83],{"class":82},[76,163486,777],{"class":86},[76,163488,780],{"class":90},[76,163490,163491],{"class":78,"line":94},[76,163492,785],{"class":126},[76,163494,163495,163497,163499,163501,163503,163505],{"class":78,"line":133},[76,163496,441],{"class":82},[76,163498,792],{"class":90},[76,163500,795],{"class":82},[76,163502,798],{"class":90},[76,163504,801],{"class":82},[76,163506,804],{"class":119},[19,163508,807],{},[66,163510,163511],{"className":68,"code":810,"language":70,"meta":71,"style":71},[73,163512,163513],{"__ignoreMap":71},[76,163514,163515,163517],{"class":78,"line":79},[76,163516,817],{"class":119},[76,163518,820],{"class":90},[19,163520,823],{},[66,163522,163523],{"className":68,"code":826,"language":70,"meta":71,"style":71},[73,163524,163525,163533,163537,163541,163545,163549,163553,163557,163561],{"__ignoreMap":71},[76,163526,163527,163529,163531],{"class":78,"line":79},[76,163528,83],{"class":82},[76,163530,777],{"class":86},[76,163532,780],{"class":90},[76,163534,163535],{"class":78,"line":94},[76,163536,841],{"class":126},[76,163538,163539],{"class":78,"line":133},[76,163540,846],{"class":126},[76,163542,163543],{"class":78,"line":145},[76,163544,149],{"emptyLinePlaceholder":148},[76,163546,163547],{"class":78,"line":152},[76,163548,855],{"class":126},[76,163550,163551],{"class":78,"line":157},[76,163552,860],{"class":126},[76,163554,163555],{"class":78,"line":246},[76,163556,865],{"class":126},[76,163558,163559],{"class":78,"line":251},[76,163560,841],{"class":126},[76,163562,163563,163565,163567,163569,163571,163573],{"class":78,"line":257},[76,163564,441],{"class":82},[76,163566,792],{"class":90},[76,163568,795],{"class":82},[76,163570,798],{"class":90},[76,163572,801],{"class":82},[76,163574,804],{"class":119},[14,163576,887],{"id":886},[889,163578,892],{"id":891},[19,163580,895],{},[66,163582,163583],{"className":68,"code":898,"language":70,"meta":71,"style":71},[73,163584,163585,163593,163601,163607,163611,163615,163619],{"__ignoreMap":71},[76,163586,163587,163589,163591],{"class":78,"line":79},[76,163588,83],{"class":82},[76,163590,907],{"class":86},[76,163592,91],{"class":90},[76,163594,163595,163597,163599],{"class":78,"line":94},[76,163596,914],{"class":90},[76,163598,370],{"class":82},[76,163600,919],{"class":119},[76,163602,163603,163605],{"class":78,"line":133},[76,163604,120],{"class":119},[76,163606,926],{"class":90},[76,163608,163609],{"class":78,"line":145},[76,163610,149],{"emptyLinePlaceholder":148},[76,163612,163613],{"class":78,"line":152},[76,163614,149],{"emptyLinePlaceholder":148},[76,163616,163617],{"class":78,"line":157},[76,163618,939],{"class":90},[76,163620,163621,163623,163625],{"class":78,"line":246},[76,163622,478],{"class":119},[76,163624,946],{"class":90},[76,163626,949],{"class":540},[889,163628,953],{"id":952},[19,163630,956],{},[66,163632,163633],{"className":68,"code":959,"language":70,"meta":71,"style":71},[73,163634,163635,163643,163647,163651,163659,163665,163669,163673],{"__ignoreMap":71},[76,163636,163637,163639,163641],{"class":78,"line":79},[76,163638,966],{"class":90},[76,163640,370],{"class":82},[76,163642,971],{"class":126},[76,163644,163645],{"class":78,"line":94},[76,163646,149],{"emptyLinePlaceholder":148},[76,163648,163649],{"class":78,"line":133},[76,163650,149],{"emptyLinePlaceholder":148},[76,163652,163653,163655,163657],{"class":78,"line":145},[76,163654,83],{"class":82},[76,163656,112],{"class":86},[76,163658,91],{"class":90},[76,163660,163661,163663],{"class":78,"line":152},[76,163662,120],{"class":119},[76,163664,994],{"class":90},[76,163666,163667],{"class":78,"line":157},[76,163668,149],{"emptyLinePlaceholder":148},[76,163670,163671],{"class":78,"line":246},[76,163672,149],{"emptyLinePlaceholder":148},[76,163674,163675],{"class":78,"line":251},[76,163676,160],{"class":90},[19,163678,1009,163679,490],{},[73,163680,1012],{},[66,163682,163683],{"className":68,"code":1015,"language":70,"meta":71,"style":71},[73,163684,163685,163693,163697,163701,163709,163715,163723,163727,163731,163735],{"__ignoreMap":71},[76,163686,163687,163689,163691],{"class":78,"line":79},[76,163688,1022],{"class":90},[76,163690,370],{"class":82},[76,163692,1027],{"class":119},[76,163694,163695],{"class":78,"line":94},[76,163696,149],{"emptyLinePlaceholder":148},[76,163698,163699],{"class":78,"line":133},[76,163700,149],{"emptyLinePlaceholder":148},[76,163702,163703,163705,163707],{"class":78,"line":145},[76,163704,83],{"class":82},[76,163706,1042],{"class":86},[76,163708,91],{"class":90},[76,163710,163711,163713],{"class":78,"line":152},[76,163712,1049],{"class":82},[76,163714,1052],{"class":90},[76,163716,163717,163719,163721],{"class":78,"line":157},[76,163718,1057],{"class":90},[76,163720,1060],{"class":82},[76,163722,1063],{"class":119},[76,163724,163725],{"class":78,"line":246},[76,163726,149],{"emptyLinePlaceholder":148},[76,163728,163729],{"class":78,"line":251},[76,163730,149],{"emptyLinePlaceholder":148},[76,163732,163733],{"class":78,"line":257},[76,163734,1076],{"class":90},[76,163736,163737,163739],{"class":78,"line":641},[76,163738,478],{"class":119},[76,163740,1083],{"class":90},[19,163742,1086],{},[14,163744,1090],{"id":1089},[19,163746,1093],{},[66,163748,163749],{"className":68,"code":1096,"language":70,"meta":71,"style":71},[73,163750,163751,163759,163773,163777,163781,163789,163793,163813,163833,163837,163841,163845],{"__ignoreMap":71},[76,163752,163753,163755,163757],{"class":78,"line":79},[76,163754,83],{"class":82},[76,163756,1105],{"class":86},[76,163758,91],{"class":90},[76,163760,163761,163763,163765,163767,163769,163771],{"class":78,"line":94},[76,163762,120],{"class":119},[76,163764,123],{"class":90},[76,163766,1116],{"class":126},[76,163768,1119],{"class":82},[76,163770,1122],{"class":119},[76,163772,130],{"class":90},[76,163774,163775],{"class":78,"line":133},[76,163776,149],{"emptyLinePlaceholder":148},[76,163778,163779],{"class":78,"line":145},[76,163780,149],{"emptyLinePlaceholder":148},[76,163782,163783,163785,163787],{"class":78,"line":152},[76,163784,83],{"class":82},[76,163786,1139],{"class":86},[76,163788,1142],{"class":90},[76,163790,163791],{"class":78,"line":157},[76,163792,1147],{"class":90},[76,163794,163795,163797,163799,163801,163803,163805,163807,163809,163811],{"class":78,"line":246},[76,163796,120],{"class":119},[76,163798,123],{"class":90},[76,163800,292],{"class":82},[76,163802,1158],{"class":126},[76,163804,298],{"class":119},[76,163806,301],{"class":90},[76,163808,304],{"class":119},[76,163810,307],{"class":126},[76,163812,130],{"class":90},[76,163814,163815,163817,163819,163821,163823,163825,163827,163829,163831],{"class":78,"line":251},[76,163816,120],{"class":119},[76,163818,123],{"class":90},[76,163820,292],{"class":82},[76,163822,1179],{"class":126},[76,163824,298],{"class":119},[76,163826,1184],{"class":90},[76,163828,304],{"class":119},[76,163830,307],{"class":126},[76,163832,130],{"class":90},[76,163834,163835],{"class":78,"line":257},[76,163836,1147],{"class":90},[76,163838,163839],{"class":78,"line":641},[76,163840,149],{"emptyLinePlaceholder":148},[76,163842,163843],{"class":78,"line":646},[76,163844,149],{"emptyLinePlaceholder":148},[76,163846,163847,163849,163851,163853,163855],{"class":78,"line":659},[76,163848,1207],{"class":90},[76,163850,325],{"class":126},[76,163852,405],{"class":90},[76,163854,1214],{"class":119},[76,163856,130],{"class":90},[19,163858,1219],{},[14,163860,1223],{"id":1222},[19,163862,1226],{},[66,163864,163865],{"className":68,"code":1229,"language":70,"meta":71,"style":71},[73,163866,163867,163875,163887,163893,163903,163907,163911,163927,163931,163943,163953,163959],{"__ignoreMap":71},[76,163868,163869,163871,163873],{"class":78,"line":79},[76,163870,83],{"class":82},[76,163872,1238],{"class":86},[76,163874,362],{"class":90},[76,163876,163877,163879,163881,163883,163885],{"class":78,"line":94},[76,163878,578],{"class":82},[76,163880,1247],{"class":90},[76,163882,1250],{"class":82},[76,163884,587],{"class":119},[76,163886,590],{"class":90},[76,163888,163889,163891],{"class":78,"line":133},[76,163890,595],{"class":82},[76,163892,714],{"class":119},[76,163894,163895,163897,163899,163901],{"class":78,"line":145},[76,163896,441],{"class":82},[76,163898,373],{"class":90},[76,163900,795],{"class":82},[76,163902,379],{"class":90},[76,163904,163905],{"class":78,"line":152},[76,163906,149],{"emptyLinePlaceholder":148},[76,163908,163909],{"class":78,"line":157},[76,163910,149],{"emptyLinePlaceholder":148},[76,163912,163913,163915,163917,163919,163921,163923,163925],{"class":78,"line":246},[76,163914,460],{"class":90},[76,163916,370],{"class":82},[76,163918,1287],{"class":90},[76,163920,402],{"class":119},[76,163922,405],{"class":90},[76,163924,1294],{"class":119},[76,163926,130],{"class":90},[76,163928,163929],{"class":78,"line":251},[76,163930,149],{"emptyLinePlaceholder":148},[76,163932,163933,163935,163937,163939,163941],{"class":78,"line":257},[76,163934,723],{"class":82},[76,163936,726],{"class":90},[76,163938,729],{"class":82},[76,163940,732],{"class":119},[76,163942,590],{"class":90},[76,163944,163945,163947,163949,163951],{"class":78,"line":641},[76,163946,120],{"class":119},[76,163948,123],{"class":90},[76,163950,1321],{"class":126},[76,163952,130],{"class":90},[76,163954,163955,163957],{"class":78,"line":646},[76,163956,1328],{"class":82},[76,163958,590],{"class":90},[76,163960,163961,163963],{"class":78,"line":659},[76,163962,120],{"class":119},[76,163964,386],{"class":90},[14,163966,1340],{"id":1339},[19,163968,1343],{},[66,163970,163971],{"className":68,"code":1346,"language":70,"meta":71,"style":71},[73,163972,163973,163993],{"__ignoreMap":71},[76,163974,163975,163977,163979,163981,163983,163985,163987,163989,163991],{"class":78,"line":79},[76,163976,83],{"class":82},[76,163978,359],{"class":86},[76,163980,1357],{"class":90},[76,163982,1360],{"class":119},[76,163984,1363],{"class":90},[76,163986,1360],{"class":119},[76,163988,1368],{"class":90},[76,163990,1360],{"class":119},[76,163992,590],{"class":90},[76,163994,163995,163997,163999,164001],{"class":78,"line":94},[76,163996,441],{"class":82},[76,163998,373],{"class":90},[76,164000,376],{"class":82},[76,164002,379],{"class":90},[19,164004,1385],{},[66,164006,164007],{"className":68,"code":1388,"language":70,"meta":71,"style":71},[73,164008,164009,164025],{"__ignoreMap":71},[76,164010,164011,164013,164015,164017,164019,164021,164023],{"class":78,"line":79},[76,164012,83],{"class":82},[76,164014,112],{"class":86},[76,164016,1399],{"class":90},[76,164018,1402],{"class":119},[76,164020,1368],{"class":90},[76,164022,489],{"class":119},[76,164024,590],{"class":90},[76,164026,164027,164029,164031,164033,164035,164037,164039,164041,164043],{"class":78,"line":94},[76,164028,120],{"class":119},[76,164030,123],{"class":90},[76,164032,292],{"class":82},[76,164034,295],{"class":126},[76,164036,298],{"class":119},[76,164038,301],{"class":90},[76,164040,304],{"class":119},[76,164042,307],{"class":126},[76,164044,130],{"class":90},[19,164046,1431],{},[66,164048,164049],{"className":68,"code":1434,"language":70,"meta":71,"style":71},[73,164050,164051,164067,164075,164085,164093],{"__ignoreMap":71},[76,164052,164053,164055,164057,164059,164061,164063,164065],{"class":78,"line":79},[76,164054,83],{"class":82},[76,164056,1443],{"class":86},[76,164058,1446],{"class":90},[76,164060,1360],{"class":119},[76,164062,1451],{"class":90},[76,164064,1360],{"class":119},[76,164066,590],{"class":90},[76,164068,164069,164071,164073],{"class":78,"line":94},[76,164070,1460],{"class":90},[76,164072,370],{"class":82},[76,164074,1027],{"class":119},[76,164076,164077,164079,164081,164083],{"class":78,"line":133},[76,164078,1469],{"class":82},[76,164080,1472],{"class":90},[76,164082,1475],{"class":82},[76,164084,1478],{"class":90},[76,164086,164087,164089,164091],{"class":78,"line":145},[76,164088,1483],{"class":90},[76,164090,1060],{"class":82},[76,164092,1488],{"class":90},[76,164094,164095,164097],{"class":78,"line":152},[76,164096,441],{"class":82},[76,164098,1495],{"class":90},[19,164100,1498],{},[14,164102,1502],{"id":1501},[66,164104,164105],{"className":68,"code":1505,"language":70,"meta":71,"style":71},[73,164106,164107,164115,164119,164123,164131,164141,164151,164161,164171,164181,164185,164189,164197,164217,164221,164225,164233,164239,164257,164269,164279,164283,164291,164301,164305,164309,164313,164321,164327,164345,164357,164367,164371,164381,164391,164395,164403,164413,164417,164421,164425,164433,164437,164451,164455,164467,164471,164483,164487,164499,164503,164515,164525,164529,164535],{"__ignoreMap":71},[76,164108,164109,164111,164113],{"class":78,"line":79},[76,164110,1512],{"class":90},[76,164112,370],{"class":82},[76,164114,1517],{"class":119},[76,164116,164117],{"class":78,"line":94},[76,164118,149],{"emptyLinePlaceholder":148},[76,164120,164121],{"class":78,"line":133},[76,164122,149],{"emptyLinePlaceholder":148},[76,164124,164125,164127,164129],{"class":78,"line":145},[76,164126,83],{"class":82},[76,164128,1532],{"class":86},[76,164130,91],{"class":90},[76,164132,164133,164135,164137,164139],{"class":78,"line":152},[76,164134,120],{"class":119},[76,164136,123],{"class":90},[76,164138,1543],{"class":126},[76,164140,130],{"class":90},[76,164142,164143,164145,164147,164149],{"class":78,"line":157},[76,164144,120],{"class":119},[76,164146,123],{"class":90},[76,164148,1554],{"class":126},[76,164150,130],{"class":90},[76,164152,164153,164155,164157,164159],{"class":78,"line":246},[76,164154,120],{"class":119},[76,164156,123],{"class":90},[76,164158,1565],{"class":126},[76,164160,130],{"class":90},[76,164162,164163,164165,164167,164169],{"class":78,"line":251},[76,164164,120],{"class":119},[76,164166,123],{"class":90},[76,164168,1576],{"class":126},[76,164170,130],{"class":90},[76,164172,164173,164175,164177,164179],{"class":78,"line":257},[76,164174,120],{"class":119},[76,164176,123],{"class":90},[76,164178,237],{"class":126},[76,164180,130],{"class":90},[76,164182,164183],{"class":78,"line":641},[76,164184,149],{"emptyLinePlaceholder":148},[76,164186,164187],{"class":78,"line":646},[76,164188,149],{"emptyLinePlaceholder":148},[76,164190,164191,164193,164195],{"class":78,"line":659},[76,164192,83],{"class":82},[76,164194,1603],{"class":86},[76,164196,91],{"class":90},[76,164198,164199,164201,164203,164205,164207,164209,164211,164213,164215],{"class":78,"line":1608},[76,164200,120],{"class":119},[76,164202,123],{"class":90},[76,164204,292],{"class":82},[76,164206,1617],{"class":126},[76,164208,298],{"class":119},[76,164210,1622],{"class":90},[76,164212,304],{"class":119},[76,164214,1627],{"class":126},[76,164216,130],{"class":90},[76,164218,164219],{"class":78,"line":1632},[76,164220,149],{"emptyLinePlaceholder":148},[76,164222,164223],{"class":78,"line":1637},[76,164224,149],{"emptyLinePlaceholder":148},[76,164226,164227,164229,164231],{"class":78,"line":1642},[76,164228,83],{"class":82},[76,164230,1647],{"class":86},[76,164232,91],{"class":90},[76,164234,164235,164237],{"class":78,"line":1652},[76,164236,1049],{"class":82},[76,164238,1657],{"class":90},[76,164240,164241,164243,164245,164247,164249,164251,164253,164255],{"class":78,"line":1660},[76,164242,1663],{"class":90},[76,164244,370],{"class":82},[76,164246,1668],{"class":119},[76,164248,123],{"class":90},[76,164250,1673],{"class":119},[76,164252,123],{"class":90},[76,164254,1678],{"class":126},[76,164256,656],{"class":90},[76,164258,164259,164261,164263,164265,164267],{"class":78,"line":1683},[76,164260,578],{"class":82},[76,164262,1688],{"class":90},[76,164264,1691],{"class":82},[76,164266,587],{"class":119},[76,164268,590],{"class":90},[76,164270,164271,164273,164275,164277],{"class":78,"line":1698},[76,164272,1701],{"class":119},[76,164274,123],{"class":90},[76,164276,1706],{"class":126},[76,164278,130],{"class":90},[76,164280,164281],{"class":78,"line":1711},[76,164282,1714],{"class":82},[76,164284,164285,164287,164289],{"class":78,"line":1717},[76,164286,1720],{"class":90},[76,164288,1060],{"class":82},[76,164290,1725],{"class":90},[76,164292,164293,164295,164297,164299],{"class":78,"line":1728},[76,164294,120],{"class":119},[76,164296,123],{"class":90},[76,164298,1735],{"class":126},[76,164300,130],{"class":90},[76,164302,164303],{"class":78,"line":1740},[76,164304,1743],{"class":90},[76,164306,164307],{"class":78,"line":1746},[76,164308,149],{"emptyLinePlaceholder":148},[76,164310,164311],{"class":78,"line":1751},[76,164312,149],{"emptyLinePlaceholder":148},[76,164314,164315,164317,164319],{"class":78,"line":1756},[76,164316,83],{"class":82},[76,164318,1761],{"class":86},[76,164320,91],{"class":90},[76,164322,164323,164325],{"class":78,"line":1766},[76,164324,1049],{"class":82},[76,164326,1657],{"class":90},[76,164328,164329,164331,164333,164335,164337,164339,164341,164343],{"class":78,"line":1773},[76,164330,1663],{"class":90},[76,164332,370],{"class":82},[76,164334,1668],{"class":119},[76,164336,123],{"class":90},[76,164338,1673],{"class":119},[76,164340,123],{"class":90},[76,164342,1788],{"class":126},[76,164344,656],{"class":90},[76,164346,164347,164349,164351,164353,164355],{"class":78,"line":1793},[76,164348,578],{"class":82},[76,164350,1688],{"class":90},[76,164352,1691],{"class":82},[76,164354,587],{"class":119},[76,164356,590],{"class":90},[76,164358,164359,164361,164363,164365],{"class":78,"line":1806},[76,164360,1701],{"class":119},[76,164362,123],{"class":90},[76,164364,1706],{"class":126},[76,164366,130],{"class":90},[76,164368,164369],{"class":78,"line":1817},[76,164370,1714],{"class":82},[76,164372,164373,164375,164377,164379],{"class":78,"line":1822},[76,164374,578],{"class":82},[76,164376,1688],{"class":90},[76,164378,1829],{"class":82},[76,164380,1832],{"class":90},[76,164382,164383,164385,164387,164389],{"class":78,"line":1835},[76,164384,1701],{"class":119},[76,164386,123],{"class":90},[76,164388,1842],{"class":126},[76,164390,130],{"class":90},[76,164392,164393],{"class":78,"line":1847},[76,164394,1714],{"class":82},[76,164396,164397,164399,164401],{"class":78,"line":1852},[76,164398,1720],{"class":90},[76,164400,1857],{"class":82},[76,164402,1725],{"class":90},[76,164404,164405,164407,164409,164411],{"class":78,"line":1862},[76,164406,120],{"class":119},[76,164408,123],{"class":90},[76,164410,1869],{"class":126},[76,164412,130],{"class":90},[76,164414,164415],{"class":78,"line":1874},[76,164416,1743],{"class":90},[76,164418,164419],{"class":78,"line":1879},[76,164420,149],{"emptyLinePlaceholder":148},[76,164422,164423],{"class":78,"line":1884},[76,164424,149],{"emptyLinePlaceholder":148},[76,164426,164427,164429,164431],{"class":78,"line":1889},[76,164428,1892],{"class":82},[76,164430,1895],{"class":119},[76,164432,590],{"class":90},[76,164434,164435],{"class":78,"line":1900},[76,164436,1903],{"class":90},[76,164438,164439,164441,164443,164445,164447,164449],{"class":78,"line":1906},[76,164440,1909],{"class":90},[76,164442,370],{"class":82},[76,164444,1914],{"class":119},[76,164446,123],{"class":90},[76,164448,1919],{"class":126},[76,164450,130],{"class":90},[76,164452,164453],{"class":78,"line":1924},[76,164454,149],{"emptyLinePlaceholder":148},[76,164456,164457,164459,164461,164463,164465],{"class":78,"line":1929},[76,164458,578],{"class":82},[76,164460,1934],{"class":90},[76,164462,1250],{"class":82},[76,164464,1939],{"class":126},[76,164466,590],{"class":90},[76,164468,164469],{"class":78,"line":1944},[76,164470,1947],{"class":90},[76,164472,164473,164475,164477,164479,164481],{"class":78,"line":1950},[76,164474,1953],{"class":82},[76,164476,1934],{"class":90},[76,164478,1250],{"class":82},[76,164480,1960],{"class":126},[76,164482,590],{"class":90},[76,164484,164485],{"class":78,"line":1965},[76,164486,1968],{"class":90},[76,164488,164489,164491,164493,164495,164497],{"class":78,"line":1971},[76,164490,1953],{"class":82},[76,164492,1934],{"class":90},[76,164494,1250],{"class":82},[76,164496,1980],{"class":126},[76,164498,590],{"class":90},[76,164500,164501],{"class":78,"line":1985},[76,164502,1988],{"class":90},[76,164504,164505,164507,164509,164511,164513],{"class":78,"line":1991},[76,164506,1953],{"class":82},[76,164508,1934],{"class":90},[76,164510,1250],{"class":82},[76,164512,2000],{"class":126},[76,164514,590],{"class":90},[76,164516,164517,164519,164521,164523],{"class":78,"line":2005},[76,164518,1701],{"class":119},[76,164520,123],{"class":90},[76,164522,2012],{"class":126},[76,164524,130],{"class":90},[76,164526,164527],{"class":78,"line":2017},[76,164528,2020],{"class":82},[76,164530,164531,164533],{"class":78,"line":2023},[76,164532,2026],{"class":82},[76,164534,590],{"class":90},[76,164536,164537,164539,164541,164543],{"class":78,"line":2031},[76,164538,1701],{"class":119},[76,164540,123],{"class":90},[76,164542,2038],{"class":126},[76,164544,130],{"class":90},[19,164546,2043],{},[14,164548,2047],{"id":2046},[26,164550,164551,164553,164555,164559,164563,164565],{},[29,164552,2052],{},[29,164554,2055],{},[29,164556,164557,2060],{},[73,164558,422],{},[29,164560,2063,164561,490],{},[73,164562,489],{},[29,164564,2068],{},[29,164566,2071,164567,2074],{},[73,164568,1012],{},[19,164570,2077,164571,2080],{},[73,164572,1012],{},[66,164574,164575],{"className":68,"code":2083,"language":70,"meta":71,"style":71},[73,164576,164577,164585,164595,164599,164603,164611,164623],{"__ignoreMap":71},[76,164578,164579,164581,164583],{"class":78,"line":79},[76,164580,83],{"class":82},[76,164582,1647],{"class":86},[76,164584,2094],{"class":90},[76,164586,164587,164589,164591,164593],{"class":78,"line":94},[76,164588,441],{"class":82},[76,164590,2101],{"class":90},[76,164592,376],{"class":82},[76,164594,1725],{"class":90},[76,164596,164597],{"class":78,"line":133},[76,164598,149],{"emptyLinePlaceholder":148},[76,164600,164601],{"class":78,"line":145},[76,164602,149],{"emptyLinePlaceholder":148},[76,164604,164605,164607,164609],{"class":78,"line":152},[76,164606,1512],{"class":90},[76,164608,370],{"class":82},[76,164610,1517],{"class":119},[76,164612,164613,164615,164617,164619,164621],{"class":78,"line":157},[76,164614,1512],{"class":90},[76,164616,370],{"class":82},[76,164618,2130],{"class":90},[76,164620,2133],{"class":119},[76,164622,130],{"class":90},[76,164624,164625,164627],{"class":78,"line":246},[76,164626,478],{"class":119},[76,164628,2142],{"class":90},[14,164630,2146],{"id":2145},[26,164632,164633,164637,164641,164645,164649],{},[29,164634,2151,164635,2155],{},[73,164636,2154],{},[29,164638,2151,164639,2161],{},[73,164640,2160],{},[29,164642,2151,164643,2167],{},[73,164644,2166],{},[29,164646,2151,164647,2173],{},[73,164648,2172],{},[29,164650,2176],{},[2178,164652,2180],{},{"title":71,"searchDepth":94,"depth":94,"links":164654},[164655,164656,164657,164658,164659,164660,164661,164662,164663,164667,164668,164669,164670,164671,164672],{"id":16,"depth":94,"text":17},{"id":60,"depth":94,"text":61},{"id":180,"depth":94,"text":181},{"id":265,"depth":94,"text":266},{"id":416,"depth":94,"text":417},{"id":544,"depth":94,"text":545},{"id":680,"depth":94,"text":681},{"id":761,"depth":94,"text":762},{"id":886,"depth":94,"text":887,"children":164664},[164665,164666],{"id":891,"depth":133,"text":892},{"id":952,"depth":133,"text":953},{"id":1089,"depth":94,"text":1090},{"id":1222,"depth":94,"text":1223},{"id":1339,"depth":94,"text":1340},{"id":1501,"depth":94,"text":1502},{"id":2046,"depth":94,"text":2047},{"id":2145,"depth":94,"text":2146},{},{"title":5,"description":2201},{"id":164676,"title":164677,"body":164678,"description":2201,"extension":2202,"meta":167722,"navigation":148,"path":167723,"seo":167724,"stem":167725,"__hash__":167726},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164679,"toc":167703},[164680,164683,164687,164690,164693,164797,164800,164804,164807,164887,164890,164894,164897,164957,164960,164996,164999,165014,165018,165091,165094,165149,165152,165222,165225,165309,165319,165377,165381,165426,165429,165455,165458,165564,165568,165571,165613,165616,165680,165683,165687,165690,165751,165754,165784,165787,165825,165829,165832,165841,165844,165968,165971,166012,166016,166019,166030,166070,166073,166088,166093,166096,166163,166166,166256,166260,166263,166311,166314,166341,166343,166373,166376,166396,166399,166430,166433,166466,166470,166473,166497,166500,166524,166527,166551,166555,166558,166688,166691,166771,166774,166849,166853,166856,166906,166909,166951,166954,166978,166980,167004,167007,167062,167065,167131,167135,167138,167141,167179,167182,167235,167238,167284,167287,167320,167323,167327,167646,167650,167679,167683,167700],[10,164681,164677],{"id":164682},"_6-数据容器",[14,164684,164686],{"id":164685},"_61-什么是数据容器","6.1 什么是数据容器",[19,164688,164689],{},"数据容器用于一次保存多个数据。",[19,164691,164692],{},"常见容器：",[2404,164694,164695,164712],{},[2407,164696,164697],{},[2410,164698,164699,164701,164704,164707,164710],{},[2413,164700,27821],{},[2413,164702,164703],{},"是否有序",[2413,164705,164706],{},"是否可变",[2413,164708,164709],{},"是否允许重复",[2413,164711,29541],{},[2451,164713,164714,164732,164748,164763,164780],{},[2410,164715,164716,164719,164722,164725,164728],{},[2456,164717,164718],{},"list列表",[2456,164720,164721],{},"有序",[2456,164723,164724],{},"可变",[2456,164726,164727],{},"允许",[2456,164729,164730],{},[73,164731,157251],{},[2410,164733,164734,164737,164739,164742,164744],{},[2456,164735,164736],{},"tuple元组",[2456,164738,164721],{},[2456,164740,164741],{},"不可变",[2456,164743,164727],{},[2456,164745,164746],{},[73,164747,157264],{},[2410,164749,164750,164753,164755,164757,164759],{},[2456,164751,164752],{},"str字符串",[2456,164754,164721],{},[2456,164756,164741],{},[2456,164758,164727],{},[2456,164760,164761],{},[73,164762,157874],{},[2410,164764,164765,164768,164771,164773,164776],{},[2456,164766,164767],{},"set集合",[2456,164769,164770],{},"无序",[2456,164772,164724],{},[2456,164774,164775],{},"不允许",[2456,164777,164778],{},[73,164779,157289],{},[2410,164781,164782,164785,164787,164789,164792],{},[2456,164783,164784],{},"dict字典",[2456,164786,164721],{},[2456,164788,164724],{},[2456,164790,164791],{},"key不允许重复",[2456,164793,164794],{},[73,164795,164796],{},"{\"name\": \"小明\"}",[19,164798,164799],{},"Python 3.7 之后，字典保持插入顺序。",[14,164801,164803],{"id":164802},"_62-列表list","6.2 列表list",[19,164805,164806],{},"列表用于保存一组有顺序的数据。",[66,164808,164810],{"className":68,"code":164809,"language":70,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[73,164811,164812,164832,164857,164878],{"__ignoreMap":71},[76,164813,164814,164816,164818,164820,164822,164824,164826,164828,164830],{"class":78,"line":79},[76,164815,162366],{"class":90},[76,164817,370],{"class":82},[76,164819,54258],{"class":90},[76,164821,325],{"class":126},[76,164823,405],{"class":90},[76,164825,334],{"class":126},[76,164827,405],{"class":90},[76,164829,161718],{"class":126},[76,164831,35284],{"class":90},[76,164833,164834,164837,164839,164841,164843,164845,164847,164849,164851,164853,164855],{"class":78,"line":94},[76,164835,164836],{"class":90},"numbers ",[76,164838,370],{"class":82},[76,164840,54258],{"class":90},[76,164842,669],{"class":119},[76,164844,405],{"class":90},[76,164846,2345],{"class":119},[76,164848,405],{"class":90},[76,164850,2339],{"class":119},[76,164852,405],{"class":90},[76,164854,2557],{"class":119},[76,164856,35284],{"class":90},[76,164858,164859,164862,164864,164866,164868,164870,164872,164874,164876],{"class":78,"line":133},[76,164860,164861],{"class":90},"mixed ",[76,164863,370],{"class":82},[76,164865,54258],{"class":90},[76,164867,325],{"class":126},[76,164869,405],{"class":90},[76,164871,1214],{"class":119},[76,164873,405],{"class":90},[76,164875,33519],{"class":119},[76,164877,35284],{"class":90},[76,164879,164880,164883,164885],{"class":78,"line":145},[76,164881,164882],{"class":90},"empty ",[76,164884,370],{"class":82},[76,164886,53870],{"class":90},[19,164888,164889],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164891,164893],{"id":164892},"_63-列表索引","6.3 列表索引",[19,164895,164896],{},"正向索引从 0 开始：",[66,164898,164900],{"className":68,"code":164899,"language":70,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[73,164901,164902,164922,164926,164937,164947],{"__ignoreMap":71},[76,164903,164904,164906,164908,164910,164912,164914,164916,164918,164920],{"class":78,"line":79},[76,164905,162366],{"class":90},[76,164907,370],{"class":82},[76,164909,54258],{"class":90},[76,164911,325],{"class":126},[76,164913,405],{"class":90},[76,164915,334],{"class":126},[76,164917,405],{"class":90},[76,164919,161718],{"class":126},[76,164921,35284],{"class":90},[76,164923,164924],{"class":78,"line":94},[76,164925,149],{"emptyLinePlaceholder":148},[76,164927,164928,164930,164933,164935],{"class":78,"line":133},[76,164929,478],{"class":119},[76,164931,164932],{"class":90},"(names[",[76,164934,1294],{"class":119},[76,164936,6739],{"class":90},[76,164938,164939,164941,164943,164945],{"class":78,"line":145},[76,164940,478],{"class":119},[76,164942,164932],{"class":90},[76,164944,669],{"class":119},[76,164946,6739],{"class":90},[76,164948,164949,164951,164953,164955],{"class":78,"line":152},[76,164950,478],{"class":119},[76,164952,164932],{"class":90},[76,164954,2345],{"class":119},[76,164956,6739],{"class":90},[19,164958,164959],{},"反向索引从 -1 开始：",[66,164961,164963],{"className":68,"code":164962,"language":70,"meta":71,"style":71},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[73,164964,164965,164981],{"__ignoreMap":71},[76,164966,164967,164969,164971,164973,164975,164978],{"class":78,"line":79},[76,164968,478],{"class":119},[76,164970,164932],{"class":90},[76,164972,666],{"class":82},[76,164974,669],{"class":119},[76,164976,164977],{"class":90},"])  ",[76,164979,164980],{"class":540},"# 小刚\n",[76,164982,164983,164985,164987,164989,164991,164993],{"class":78,"line":94},[76,164984,478],{"class":119},[76,164986,164932],{"class":90},[76,164988,666],{"class":82},[76,164990,2345],{"class":119},[76,164992,164977],{"class":90},[76,164994,164995],{"class":540},"# 小红\n",[19,164997,164998],{},"索引越界会报错：",[66,165000,165002],{"className":68,"code":165001,"language":70,"meta":71,"style":71},"print(names[3])\n",[73,165003,165004],{"__ignoreMap":71},[76,165005,165006,165008,165010,165012],{"class":78,"line":79},[76,165007,478],{"class":119},[76,165009,164932],{"class":90},[76,165011,2339],{"class":119},[76,165013,6739],{"class":90},[14,165015,165017],{"id":165016},"_64-列表常用方法","6.4 列表常用方法",[66,165019,165021],{"className":68,"code":165020,"language":70,"meta":71,"style":71},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[73,165022,165023,165039,165043,165052,165066,165080,165084],{"__ignoreMap":71},[76,165024,165025,165027,165029,165031,165033,165035,165037],{"class":78,"line":79},[76,165026,162366],{"class":90},[76,165028,370],{"class":82},[76,165030,54258],{"class":90},[76,165032,325],{"class":126},[76,165034,405],{"class":90},[76,165036,334],{"class":126},[76,165038,35284],{"class":90},[76,165040,165041],{"class":78,"line":94},[76,165042,149],{"emptyLinePlaceholder":148},[76,165044,165045,165048,165050],{"class":78,"line":133},[76,165046,165047],{"class":90},"names.append(",[76,165049,161718],{"class":126},[76,165051,130],{"class":90},[76,165053,165054,165057,165059,165061,165064],{"class":78,"line":145},[76,165055,165056],{"class":90},"names.insert(",[76,165058,669],{"class":119},[76,165060,405],{"class":90},[76,165062,165063],{"class":126},"\"小李\"",[76,165065,130],{"class":90},[76,165067,165068,165071,165073,165075,165078],{"class":78,"line":152},[76,165069,165070],{"class":90},"names.extend([",[76,165072,10751],{"class":126},[76,165074,405],{"class":90},[76,165076,165077],{"class":126},"\"小赵\"",[76,165079,6739],{"class":90},[76,165081,165082],{"class":78,"line":157},[76,165083,149],{"emptyLinePlaceholder":148},[76,165085,165086,165088],{"class":78,"line":246},[76,165087,478],{"class":119},[76,165089,165090],{"class":90},"(names)\n",[19,165092,165093],{},"删除元素：",[66,165095,165097],{"className":68,"code":165096,"language":70,"meta":71,"style":71},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[73,165098,165099,165108,165118,165132,165144],{"__ignoreMap":71},[76,165100,165101,165104,165106],{"class":78,"line":79},[76,165102,165103],{"class":90},"names.remove(",[76,165105,334],{"class":126},[76,165107,130],{"class":90},[76,165109,165110,165113,165115],{"class":78,"line":94},[76,165111,165112],{"class":90},"last ",[76,165114,370],{"class":82},[76,165116,165117],{"class":90}," names.pop()\n",[76,165119,165120,165123,165125,165128,165130],{"class":78,"line":133},[76,165121,165122],{"class":90},"first ",[76,165124,370],{"class":82},[76,165126,165127],{"class":90}," names.pop(",[76,165129,1294],{"class":119},[76,165131,130],{"class":90},[76,165133,165134,165137,165140,165142],{"class":78,"line":145},[76,165135,165136],{"class":82},"del",[76,165138,165139],{"class":90}," names[",[76,165141,1294],{"class":119},[76,165143,35284],{"class":90},[76,165145,165146],{"class":78,"line":152},[76,165147,165148],{"class":90},"names.clear()\n",[19,165150,165151],{},"查询和统计：",[66,165153,165155],{"className":68,"code":165154,"language":70,"meta":71,"style":71},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[73,165156,165157,165185,165189,165200,165211],{"__ignoreMap":71},[76,165158,165159,165161,165163,165165,165167,165169,165171,165173,165175,165177,165179,165181,165183],{"class":78,"line":79},[76,165160,164836],{"class":90},[76,165162,370],{"class":82},[76,165164,54258],{"class":90},[76,165166,669],{"class":119},[76,165168,405],{"class":90},[76,165170,2345],{"class":119},[76,165172,405],{"class":90},[76,165174,2339],{"class":119},[76,165176,405],{"class":90},[76,165178,2345],{"class":119},[76,165180,405],{"class":90},[76,165182,2557],{"class":119},[76,165184,35284],{"class":90},[76,165186,165187],{"class":78,"line":94},[76,165188,149],{"emptyLinePlaceholder":148},[76,165190,165191,165193,165196,165198],{"class":78,"line":133},[76,165192,478],{"class":119},[76,165194,165195],{"class":90},"(numbers.index(",[76,165197,2339],{"class":119},[76,165199,656],{"class":90},[76,165201,165202,165204,165207,165209],{"class":78,"line":145},[76,165203,478],{"class":119},[76,165205,165206],{"class":90},"(numbers.count(",[76,165208,2345],{"class":119},[76,165210,656],{"class":90},[76,165212,165213,165215,165217,165219],{"class":78,"line":152},[76,165214,478],{"class":119},[76,165216,123],{"class":90},[76,165218,9436],{"class":119},[76,165220,165221],{"class":90},"(numbers))\n",[19,165223,165224],{},"排序：",[66,165226,165228],{"className":68,"code":165227,"language":70,"meta":71,"style":71},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[73,165229,165230,165254,165258,165263,165270,165274,165288,165294,165298,165303],{"__ignoreMap":71},[76,165231,165232,165234,165236,165238,165240,165242,165244,165246,165248,165250,165252],{"class":78,"line":79},[76,165233,164836],{"class":90},[76,165235,370],{"class":82},[76,165237,54258],{"class":90},[76,165239,2339],{"class":119},[76,165241,405],{"class":90},[76,165243,669],{"class":119},[76,165245,405],{"class":90},[76,165247,2583],{"class":119},[76,165249,405],{"class":90},[76,165251,2345],{"class":119},[76,165253,35284],{"class":90},[76,165255,165256],{"class":78,"line":94},[76,165257,149],{"emptyLinePlaceholder":148},[76,165259,165260],{"class":78,"line":133},[76,165261,165262],{"class":90},"numbers.sort()\n",[76,165264,165265,165267],{"class":78,"line":145},[76,165266,478],{"class":119},[76,165268,165269],{"class":90},"(numbers)\n",[76,165271,165272],{"class":78,"line":152},[76,165273,149],{"emptyLinePlaceholder":148},[76,165275,165276,165279,165282,165284,165286],{"class":78,"line":157},[76,165277,165278],{"class":90},"numbers.sort(",[76,165280,165281],{"class":7296},"reverse",[76,165283,370],{"class":82},[76,165285,33519],{"class":119},[76,165287,130],{"class":90},[76,165289,165290,165292],{"class":78,"line":246},[76,165291,478],{"class":119},[76,165293,165269],{"class":90},[76,165295,165296],{"class":78,"line":251},[76,165297,149],{"emptyLinePlaceholder":148},[76,165299,165300],{"class":78,"line":257},[76,165301,165302],{"class":90},"numbers.reverse()\n",[76,165304,165305,165307],{"class":78,"line":641},[76,165306,478],{"class":119},[76,165308,165269],{"class":90},[19,165310,165311,165314,165315,165318],{},[73,165312,165313],{},"sort()"," 会修改原列表，",[73,165316,165317],{},"sorted()"," 返回新列表。",[66,165320,165322],{"className":68,"code":165321,"language":70,"meta":71,"style":71},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[73,165323,165324,165348,165360,165364,165370],{"__ignoreMap":71},[76,165325,165326,165328,165330,165332,165334,165336,165338,165340,165342,165344,165346],{"class":78,"line":79},[76,165327,164836],{"class":90},[76,165329,370],{"class":82},[76,165331,54258],{"class":90},[76,165333,2339],{"class":119},[76,165335,405],{"class":90},[76,165337,669],{"class":119},[76,165339,405],{"class":90},[76,165341,2583],{"class":119},[76,165343,405],{"class":90},[76,165345,2345],{"class":119},[76,165347,35284],{"class":90},[76,165349,165350,165353,165355,165358],{"class":78,"line":94},[76,165351,165352],{"class":90},"new_numbers ",[76,165354,370],{"class":82},[76,165356,165357],{"class":119}," sorted",[76,165359,165269],{"class":90},[76,165361,165362],{"class":78,"line":133},[76,165363,149],{"emptyLinePlaceholder":148},[76,165365,165366,165368],{"class":78,"line":145},[76,165367,478],{"class":119},[76,165369,165269],{"class":90},[76,165371,165372,165374],{"class":78,"line":152},[76,165373,478],{"class":119},[76,165375,165376],{"class":90},"(new_numbers)\n",[14,165378,165380],{"id":165379},"_65-列表遍历","6.5 列表遍历",[66,165382,165384],{"className":68,"code":165383,"language":70,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[73,165385,165386,165406,165410,165420],{"__ignoreMap":71},[76,165387,165388,165390,165392,165394,165396,165398,165400,165402,165404],{"class":78,"line":79},[76,165389,162366],{"class":90},[76,165391,370],{"class":82},[76,165393,54258],{"class":90},[76,165395,325],{"class":126},[76,165397,405],{"class":90},[76,165399,334],{"class":126},[76,165401,405],{"class":90},[76,165403,161718],{"class":126},[76,165405,35284],{"class":90},[76,165407,165408],{"class":78,"line":94},[76,165409,149],{"emptyLinePlaceholder":148},[76,165411,165412,165414,165416,165418],{"class":78,"line":133},[76,165413,5112],{"class":82},[76,165415,162402],{"class":90},[76,165417,1475],{"class":82},[76,165419,162407],{"class":90},[76,165421,165422,165424],{"class":78,"line":145},[76,165423,120],{"class":119},[76,165425,994],{"class":90},[19,165427,165428],{},"需要索引时：",[66,165430,165432],{"className":68,"code":165431,"language":70,"meta":71,"style":71},"for index, name in enumerate(names):\n    print(index, name)\n",[73,165433,165434,165448],{"__ignoreMap":71},[76,165435,165436,165438,165441,165443,165445],{"class":78,"line":79},[76,165437,5112],{"class":82},[76,165439,165440],{"class":90}," index, name ",[76,165442,1475],{"class":82},[76,165444,33649],{"class":119},[76,165446,165447],{"class":90},"(names):\n",[76,165449,165450,165452],{"class":78,"line":94},[76,165451,120],{"class":119},[76,165453,165454],{"class":90},"(index, name)\n",[19,165456,165457],{},"统计总分：",[66,165459,165461],{"className":68,"code":165460,"language":70,"meta":71,"style":71},"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",[73,165462,165463,165488,165496,165500,165511,165519,165523,165540],{"__ignoreMap":71},[76,165464,165465,165468,165470,165472,165474,165476,165478,165480,165482,165484,165486],{"class":78,"line":79},[76,165466,165467],{"class":90},"scores ",[76,165469,370],{"class":82},[76,165471,54258],{"class":90},[76,165473,3120],{"class":119},[76,165475,405],{"class":90},[76,165477,2994],{"class":119},[76,165479,405],{"class":90},[76,165481,2518],{"class":119},[76,165483,405],{"class":90},[76,165485,2822],{"class":119},[76,165487,35284],{"class":90},[76,165489,165490,165492,165494],{"class":78,"line":94},[76,165491,159250],{"class":90},[76,165493,370],{"class":82},[76,165495,1027],{"class":119},[76,165497,165498],{"class":78,"line":133},[76,165499,149],{"emptyLinePlaceholder":148},[76,165501,165502,165504,165506,165508],{"class":78,"line":145},[76,165503,5112],{"class":82},[76,165505,159773],{"class":90},[76,165507,1475],{"class":82},[76,165509,165510],{"class":90}," scores:\n",[76,165512,165513,165515,165517],{"class":78,"line":152},[76,165514,1460],{"class":90},[76,165516,1060],{"class":82},[76,165518,3699],{"class":90},[76,165520,165521],{"class":78,"line":157},[76,165522,149],{"emptyLinePlaceholder":148},[76,165524,165525,165528,165530,165533,165535,165537],{"class":78,"line":246},[76,165526,165527],{"class":90},"avg ",[76,165529,370],{"class":82},[76,165531,165532],{"class":90}," total ",[76,165534,795],{"class":82},[76,165536,9409],{"class":119},[76,165538,165539],{"class":90},"(scores)\n",[76,165541,165542,165544,165546,165548,165551,165553,165556,165558,165560,165562],{"class":78,"line":251},[76,165543,478],{"class":119},[76,165545,123],{"class":90},[76,165547,292],{"class":82},[76,165549,165550],{"class":126},"\"平均分:",[76,165552,298],{"class":119},[76,165554,165555],{"class":90},"avg",[76,165557,159149],{"class":82},[76,165559,304],{"class":119},[76,165561,307],{"class":126},[76,165563,130],{"class":90},[14,165565,165567],{"id":165566},"_66-元组tuple","6.6 元组tuple",[19,165569,165570],{},"元组和列表类似，但不可修改。",[66,165572,165574],{"className":68,"code":165573,"language":70,"meta":71,"style":71},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[73,165575,165576,165593],{"__ignoreMap":71},[76,165577,165578,165581,165583,165585,165587,165589,165591],{"class":78,"line":79},[76,165579,165580],{"class":90},"point ",[76,165582,370],{"class":82},[76,165584,3770],{"class":90},[76,165586,402],{"class":119},[76,165588,405],{"class":90},[76,165590,408],{"class":119},[76,165592,130],{"class":90},[76,165594,165595,165597,165599,165601,165603,165605,165607,165609,165611],{"class":78,"line":94},[76,165596,118334],{"class":90},[76,165598,370],{"class":82},[76,165600,3770],{"class":90},[76,165602,325],{"class":126},[76,165604,405],{"class":90},[76,165606,1214],{"class":119},[76,165608,405],{"class":90},[76,165610,71297],{"class":126},[76,165612,130],{"class":90},[19,165614,165615],{},"单元素元组必须加逗号：",[66,165617,165619],{"className":68,"code":165618,"language":70,"meta":71,"style":71},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[73,165620,165621,165635,165648,165652,165666],{"__ignoreMap":71},[76,165622,165623,165626,165628,165630,165632],{"class":78,"line":79},[76,165624,165625],{"class":90},"t1 ",[76,165627,370],{"class":82},[76,165629,3770],{"class":90},[76,165631,402],{"class":119},[76,165633,165634],{"class":90},",)\n",[76,165636,165637,165640,165642,165644,165646],{"class":78,"line":94},[76,165638,165639],{"class":90},"t2 ",[76,165641,370],{"class":82},[76,165643,3770],{"class":90},[76,165645,402],{"class":119},[76,165647,130],{"class":90},[76,165649,165650],{"class":78,"line":133},[76,165651,149],{"emptyLinePlaceholder":148},[76,165653,165654,165656,165658,165660,165663],{"class":78,"line":145},[76,165655,478],{"class":119},[76,165657,123],{"class":90},[76,165659,105129],{"class":119},[76,165661,165662],{"class":90},"(t1))  ",[76,165664,165665],{"class":540},"# tuple\n",[76,165667,165668,165670,165672,165674,165677],{"class":78,"line":152},[76,165669,478],{"class":119},[76,165671,123],{"class":90},[76,165673,105129],{"class":119},[76,165675,165676],{"class":90},"(t2))  ",[76,165678,165679],{"class":540},"# int\n",[19,165681,165682],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165684,165686],{"id":165685},"_67-字符串str","6.7 字符串str",[19,165688,165689],{},"字符串也是序列，可以索引、切片和遍历。",[66,165691,165693],{"className":68,"code":165692,"language":70,"meta":71,"style":71},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[73,165694,165695,165703,165707,165718,165730,165734,165745],{"__ignoreMap":71},[76,165696,165697,165699,165701],{"class":78,"line":79},[76,165698,158437],{"class":90},[76,165700,370],{"class":82},[76,165702,161668],{"class":126},[76,165704,165705],{"class":78,"line":94},[76,165706,149],{"emptyLinePlaceholder":148},[76,165708,165709,165711,165714,165716],{"class":78,"line":133},[76,165710,478],{"class":119},[76,165712,165713],{"class":90},"(text[",[76,165715,1294],{"class":119},[76,165717,6739],{"class":90},[76,165719,165720,165722,165724,165726,165728],{"class":78,"line":145},[76,165721,478],{"class":119},[76,165723,165713],{"class":90},[76,165725,666],{"class":82},[76,165727,669],{"class":119},[76,165729,6739],{"class":90},[76,165731,165732],{"class":78,"line":152},[76,165733,149],{"emptyLinePlaceholder":148},[76,165735,165736,165738,165740,165742],{"class":78,"line":157},[76,165737,5112],{"class":82},[76,165739,161679],{"class":90},[76,165741,1475],{"class":82},[76,165743,165744],{"class":90}," text:\n",[76,165746,165747,165749],{"class":78,"line":246},[76,165748,120],{"class":119},[76,165750,161690],{"class":90},[19,165752,165753],{},"字符串不可变：",[66,165755,165757],{"className":68,"code":165756,"language":70,"meta":71,"style":71},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[73,165758,165759,165767],{"__ignoreMap":71},[76,165760,165761,165763,165765],{"class":78,"line":79},[76,165762,158437],{"class":90},[76,165764,370],{"class":82},[76,165766,161668],{"class":126},[76,165768,165769,165772,165774,165776,165778,165781],{"class":78,"line":94},[76,165770,165771],{"class":90},"text[",[76,165773,1294],{"class":119},[76,165775,6525],{"class":90},[76,165777,370],{"class":82},[76,165779,165780],{"class":126}," \"P\"",[76,165782,165783],{"class":540},"  # 报错\n",[19,165785,165786],{},"如果要得到新字符串：",[66,165788,165790],{"className":68,"code":165789,"language":70,"meta":71,"style":71},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[73,165791,165792,165800,165818],{"__ignoreMap":71},[76,165793,165794,165796,165798],{"class":78,"line":79},[76,165795,158437],{"class":90},[76,165797,370],{"class":82},[76,165799,161668],{"class":126},[76,165801,165802,165804,165806,165808,165810,165813,165815],{"class":78,"line":94},[76,165803,158437],{"class":90},[76,165805,370],{"class":82},[76,165807,165780],{"class":126},[76,165809,47601],{"class":82},[76,165811,165812],{"class":90}," text[",[76,165814,669],{"class":119},[76,165816,165817],{"class":90},":]\n",[76,165819,165820,165822],{"class":78,"line":133},[76,165821,478],{"class":119},[76,165823,165824],{"class":90},"(text)\n",[14,165826,165828],{"id":165827},"_68-切片","6.8 切片",[19,165830,165831],{},"切片用于从序列中取一部分。",[66,165833,165835],{"className":68,"code":165834,"language":70,"meta":71,"style":71},"序列[开始:结束:步长]\n",[73,165836,165837],{"__ignoreMap":71},[76,165838,165839],{"class":78,"line":79},[76,165840,165834],{"class":90},[19,165842,165843],{},"结束位置不包含。",[66,165845,165847],{"className":68,"code":165846,"language":70,"meta":71,"style":71},"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",[73,165848,165849,165886,165890,165909,165924,165938,165952],{"__ignoreMap":71},[76,165850,165851,165854,165856,165858,165860,165862,165864,165866,165868,165870,165872,165874,165876,165878,165880,165882,165884],{"class":78,"line":79},[76,165852,165853],{"class":90},"nums ",[76,165855,370],{"class":82},[76,165857,54258],{"class":90},[76,165859,1294],{"class":119},[76,165861,405],{"class":90},[76,165863,669],{"class":119},[76,165865,405],{"class":90},[76,165867,2345],{"class":119},[76,165869,405],{"class":90},[76,165871,2339],{"class":119},[76,165873,405],{"class":90},[76,165875,2557],{"class":119},[76,165877,405],{"class":90},[76,165879,2583],{"class":119},[76,165881,405],{"class":90},[76,165883,2608],{"class":119},[76,165885,35284],{"class":90},[76,165887,165888],{"class":78,"line":94},[76,165889,149],{"emptyLinePlaceholder":148},[76,165891,165892,165894,165897,165899,165901,165903,165906],{"class":78,"line":133},[76,165893,478],{"class":119},[76,165895,165896],{"class":90},"(nums[",[76,165898,669],{"class":119},[76,165900,3117],{"class":90},[76,165902,2557],{"class":119},[76,165904,165905],{"class":90},"])    ",[76,165907,165908],{"class":540},"# [1, 2, 3]\n",[76,165910,165911,165913,165916,165918,165921],{"class":78,"line":145},[76,165912,478],{"class":119},[76,165914,165915],{"class":90},"(nums[:",[76,165917,2339],{"class":119},[76,165919,165920],{"class":90},"])     ",[76,165922,165923],{"class":540},"# [0, 1, 2]\n",[76,165925,165926,165928,165930,165932,165935],{"class":78,"line":152},[76,165927,478],{"class":119},[76,165929,165896],{"class":90},[76,165931,2339],{"class":119},[76,165933,165934],{"class":90},":])     ",[76,165936,165937],{"class":540},"# [3, 4, 5, 6]\n",[76,165939,165940,165942,165945,165947,165949],{"class":78,"line":157},[76,165941,478],{"class":119},[76,165943,165944],{"class":90},"(nums[::",[76,165946,2345],{"class":119},[76,165948,165905],{"class":90},[76,165950,165951],{"class":540},"# [0, 2, 4, 6]\n",[76,165953,165954,165956,165958,165960,165962,165965],{"class":78,"line":246},[76,165955,478],{"class":119},[76,165957,165944],{"class":90},[76,165959,666],{"class":82},[76,165961,669],{"class":119},[76,165963,165964],{"class":90},"])   ",[76,165966,165967],{"class":540},"# 反转\n",[19,165969,165970],{},"字符串切片：",[66,165972,165974],{"className":68,"code":165973,"language":70,"meta":71,"style":71},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[73,165975,165976,165985,165999],{"__ignoreMap":71},[76,165977,165978,165980,165982],{"class":78,"line":79},[76,165979,158437],{"class":90},[76,165981,370],{"class":82},[76,165983,165984],{"class":126}," \"abcdef\"\n",[76,165986,165987,165989,165991,165993,165995,165997],{"class":78,"line":94},[76,165988,478],{"class":119},[76,165990,165713],{"class":90},[76,165992,669],{"class":119},[76,165994,3117],{"class":90},[76,165996,2557],{"class":119},[76,165998,6739],{"class":90},[76,166000,166001,166003,166006,166008,166010],{"class":78,"line":133},[76,166002,478],{"class":119},[76,166004,166005],{"class":90},"(text[::",[76,166007,666],{"class":82},[76,166009,669],{"class":119},[76,166011,6739],{"class":90},[14,166013,166015],{"id":166014},"_69-集合set","6.9 集合set",[19,166017,166018],{},"集合特点：",[26,166020,166021,166024,166027],{},[29,166022,166023],{},"无序。",[29,166025,166026],{},"元素不重复。",[29,166028,166029],{},"可以做交集、并集、差集。",[66,166031,166033],{"className":68,"code":166032,"language":70,"meta":71,"style":71},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[73,166034,166035,166063],{"__ignoreMap":71},[76,166036,166037,166039,166041,166043,166045,166047,166049,166051,166053,166055,166057,166059,166061],{"class":78,"line":79},[76,166038,165853],{"class":90},[76,166040,370],{"class":82},[76,166042,6530],{"class":90},[76,166044,669],{"class":119},[76,166046,405],{"class":90},[76,166048,2345],{"class":119},[76,166050,405],{"class":90},[76,166052,2339],{"class":119},[76,166054,405],{"class":90},[76,166056,2339],{"class":119},[76,166058,405],{"class":90},[76,166060,2557],{"class":119},[76,166062,3685],{"class":90},[76,166064,166065,166067],{"class":78,"line":94},[76,166066,478],{"class":119},[76,166068,166069],{"class":90},"(nums)\n",[19,166071,166072],{},"创建空集合：",[66,166074,166076],{"className":68,"code":166075,"language":70,"meta":71,"style":71},"s = set()\n",[73,166077,166078],{"__ignoreMap":71},[76,166079,166080,166082,166084,166086],{"class":78,"line":79},[76,166081,12636],{"class":90},[76,166083,370],{"class":82},[76,166085,121742],{"class":119},[76,166087,4072],{"class":90},[19,166089,163,166090,166092],{},[73,166091,34498],{}," 是空字典，不是空集合。",[19,166094,166095],{},"集合常用操作：",[66,166097,166099],{"className":68,"code":166098,"language":70,"meta":71,"style":71},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[73,166100,166101,166121,166125,166134,166143,166152],{"__ignoreMap":71},[76,166102,166103,166105,166107,166109,166111,166113,166115,166117,166119],{"class":78,"line":79},[76,166104,12636],{"class":90},[76,166106,370],{"class":82},[76,166108,6530],{"class":90},[76,166110,669],{"class":119},[76,166112,405],{"class":90},[76,166114,2345],{"class":119},[76,166116,405],{"class":90},[76,166118,2339],{"class":119},[76,166120,3685],{"class":90},[76,166122,166123],{"class":78,"line":94},[76,166124,149],{"emptyLinePlaceholder":148},[76,166126,166127,166130,166132],{"class":78,"line":133},[76,166128,166129],{"class":90},"s.add(",[76,166131,2557],{"class":119},[76,166133,130],{"class":90},[76,166135,166136,166139,166141],{"class":78,"line":145},[76,166137,166138],{"class":90},"s.remove(",[76,166140,2345],{"class":119},[76,166142,130],{"class":90},[76,166144,166145,166148,166150],{"class":78,"line":152},[76,166146,166147],{"class":90},"s.discard(",[76,166149,402],{"class":119},[76,166151,130],{"class":90},[76,166153,166154,166156,166158,166160],{"class":78,"line":157},[76,166155,478],{"class":119},[76,166157,123],{"class":90},[76,166159,9436],{"class":119},[76,166161,166162],{"class":90},"(s))\n",[19,166164,166165],{},"交并差：",[66,166167,166169],{"className":68,"code":166168,"language":70,"meta":71,"style":71},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[73,166170,166171,166191,166211,166215,166230,166243],{"__ignoreMap":71},[76,166172,166173,166175,166177,166179,166181,166183,166185,166187,166189],{"class":78,"line":79},[76,166174,12973],{"class":90},[76,166176,370],{"class":82},[76,166178,6530],{"class":90},[76,166180,669],{"class":119},[76,166182,405],{"class":90},[76,166184,2345],{"class":119},[76,166186,405],{"class":90},[76,166188,2339],{"class":119},[76,166190,3685],{"class":90},[76,166192,166193,166195,166197,166199,166201,166203,166205,166207,166209],{"class":78,"line":94},[76,166194,12999],{"class":90},[76,166196,370],{"class":82},[76,166198,6530],{"class":90},[76,166200,2339],{"class":119},[76,166202,405],{"class":90},[76,166204,2557],{"class":119},[76,166206,405],{"class":90},[76,166208,2583],{"class":119},[76,166210,3685],{"class":90},[76,166212,166213],{"class":78,"line":133},[76,166214,149],{"emptyLinePlaceholder":148},[76,166216,166217,166219,166222,166224,166227],{"class":78,"line":145},[76,166218,478],{"class":119},[76,166220,166221],{"class":90},"(a ",[76,166223,2617],{"class":82},[76,166225,166226],{"class":90}," b)  ",[76,166228,166229],{"class":540},"# 交集\n",[76,166231,166232,166234,166236,166238,166240],{"class":78,"line":152},[76,166233,478],{"class":119},[76,166235,166221],{"class":90},[76,166237,3177],{"class":82},[76,166239,166226],{"class":90},[76,166241,166242],{"class":540},"# 并集\n",[76,166244,166245,166247,166249,166251,166253],{"class":78,"line":157},[76,166246,478],{"class":119},[76,166248,166221],{"class":90},[76,166250,666],{"class":82},[76,166252,166226],{"class":90},[76,166254,166255],{"class":540},"# 差集\n",[14,166257,166259],{"id":166258},"_610-字典dict","6.10 字典dict",[19,166261,166262],{},"字典通过 key-value 保存数据。",[66,166264,166266],{"className":68,"code":166265,"language":70,"meta":71,"style":71},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[73,166267,166268,166276,166286,166297,166307],{"__ignoreMap":71},[76,166269,166270,166272,166274],{"class":78,"line":79},[76,166271,151496],{"class":90},[76,166273,370],{"class":82},[76,166275,17623],{"class":90},[76,166277,166278,166280,166282,166284],{"class":78,"line":94},[76,166279,149037],{"class":126},[76,166281,53469],{"class":90},[76,166283,325],{"class":126},[76,166285,33509],{"class":90},[76,166287,166288,166291,166293,166295],{"class":78,"line":133},[76,166289,166290],{"class":126},"    \"age\"",[76,166292,53469],{"class":90},[76,166294,1214],{"class":119},[76,166296,33509],{"class":90},[76,166298,166299,166302,166304],{"class":78,"line":145},[76,166300,166301],{"class":126},"    \"score\"",[76,166303,53469],{"class":90},[76,166305,166306],{"class":119},"95\n",[76,166308,166309],{"class":78,"line":152},[76,166310,3685],{"class":90},[19,166312,166313],{},"获取值：",[66,166315,166317],{"className":68,"code":166316,"language":70,"meta":71,"style":71},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[73,166318,166319,166330],{"__ignoreMap":71},[76,166320,166321,166323,166326,166328],{"class":78,"line":79},[76,166322,478],{"class":119},[76,166324,166325],{"class":90},"(student[",[76,166327,64707],{"class":126},[76,166329,6739],{"class":90},[76,166331,166332,166334,166337,166339],{"class":78,"line":94},[76,166333,478],{"class":119},[76,166335,166336],{"class":90},"(student.get(",[76,166338,64707],{"class":126},[76,166340,656],{"class":90},[19,166342,17439],{},[66,166344,166346],{"className":68,"code":166345,"language":70,"meta":71,"style":71},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[73,166347,166348,166361],{"__ignoreMap":71},[76,166349,166350,166352,166355,166358],{"class":78,"line":79},[76,166351,154861],{"class":90},[76,166353,166354],{"class":126},"\"address\"",[76,166356,166357],{"class":90},"]     ",[76,166359,166360],{"class":540},"# key不存在会报错\n",[76,166362,166363,166366,166368,166370],{"class":78,"line":94},[76,166364,166365],{"class":90},"student.get(",[76,166367,166354],{"class":126},[76,166369,15767],{"class":90},[76,166371,166372],{"class":540},"# key不存在返回None\n",[19,166374,166375],{},"设置默认值：",[66,166377,166379],{"className":68,"code":166378,"language":70,"meta":71,"style":71},"print(student.get(\"address\", \"未知\"))\n",[73,166380,166381],{"__ignoreMap":71},[76,166382,166383,166385,166387,166389,166391,166394],{"class":78,"line":79},[76,166384,478],{"class":119},[76,166386,166336],{"class":90},[76,166388,166354],{"class":126},[76,166390,405],{"class":90},[76,166392,166393],{"class":126},"\"未知\"",[76,166395,656],{"class":90},[19,166397,166398],{},"新增和修改：",[66,166400,166402],{"className":68,"code":166401,"language":70,"meta":71,"style":71},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[73,166403,166404,166417],{"__ignoreMap":71},[76,166405,166406,166408,166410,166412,166414],{"class":78,"line":79},[76,166407,154861],{"class":90},[76,166409,71152],{"class":126},[76,166411,6525],{"class":90},[76,166413,370],{"class":82},[76,166415,166416],{"class":119}," 19\n",[76,166418,166419,166421,166423,166425,166427],{"class":78,"line":94},[76,166420,154861],{"class":90},[76,166422,166354],{"class":126},[76,166424,6525],{"class":90},[76,166426,370],{"class":82},[76,166428,166429],{"class":126}," \"北京\"\n",[19,166431,166432],{},"删除：",[66,166434,166436],{"className":68,"code":166435,"language":70,"meta":71,"style":71},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[73,166437,166438,166451,166461],{"__ignoreMap":71},[76,166439,166440,166442,166444,166447,166449],{"class":78,"line":79},[76,166441,157352],{"class":90},[76,166443,370],{"class":82},[76,166445,166446],{"class":90}," student.pop(",[76,166448,153477],{"class":126},[76,166450,130],{"class":90},[76,166452,166453,166455,166457,166459],{"class":78,"line":94},[76,166454,165136],{"class":82},[76,166456,154153],{"class":90},[76,166458,71152],{"class":126},[76,166460,35284],{"class":90},[76,166462,166463],{"class":78,"line":133},[76,166464,166465],{"class":90},"student.clear()\n",[14,166467,166469],{"id":166468},"_611-字典遍历","6.11 字典遍历",[19,166471,166472],{},"遍历 key：",[66,166474,166476],{"className":68,"code":166475,"language":70,"meta":71,"style":71},"for key in student:\n    print(key, student[key])\n",[73,166477,166478,166490],{"__ignoreMap":71},[76,166479,166480,166482,166485,166487],{"class":78,"line":79},[76,166481,5112],{"class":82},[76,166483,166484],{"class":90}," key ",[76,166486,1475],{"class":82},[76,166488,166489],{"class":90}," student:\n",[76,166491,166492,166494],{"class":78,"line":94},[76,166493,120],{"class":119},[76,166495,166496],{"class":90},"(key, student[key])\n",[19,166498,166499],{},"遍历 value：",[66,166501,166503],{"className":68,"code":166502,"language":70,"meta":71,"style":71},"for value in student.values():\n    print(value)\n",[73,166504,166505,166517],{"__ignoreMap":71},[76,166506,166507,166509,166512,166514],{"class":78,"line":79},[76,166508,5112],{"class":82},[76,166510,166511],{"class":90}," value ",[76,166513,1475],{"class":82},[76,166515,166516],{"class":90}," student.values():\n",[76,166518,166519,166521],{"class":78,"line":94},[76,166520,120],{"class":119},[76,166522,166523],{"class":90},"(value)\n",[19,166525,166526],{},"遍历 key 和 value：",[66,166528,166530],{"className":68,"code":166529,"language":70,"meta":71,"style":71},"for key, value in student.items():\n    print(key, value)\n",[73,166531,166532,166544],{"__ignoreMap":71},[76,166533,166534,166536,166539,166541],{"class":78,"line":79},[76,166535,5112],{"class":82},[76,166537,166538],{"class":90}," key, value ",[76,166540,1475],{"class":82},[76,166542,166543],{"class":90}," student.items():\n",[76,166545,166546,166548],{"class":78,"line":94},[76,166547,120],{"class":119},[76,166549,166550],{"class":90},"(key, value)\n",[14,166552,166554],{"id":166553},"_612-嵌套容器","6.12 嵌套容器",[19,166556,166557],{},"列表中保存字典，是项目中最常见的结构之一。",[66,166559,166561],{"className":68,"code":166560,"language":70,"meta":71,"style":71},"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",[73,166562,166563,166571,166599,166627,166655,166659,166663,166673],{"__ignoreMap":71},[76,166564,166565,166567,166569],{"class":78,"line":79},[76,166566,161703],{"class":90},[76,166568,370],{"class":82},[76,166570,57478],{"class":90},[76,166572,166573,166575,166577,166579,166581,166583,166585,166587,166589,166591,166593,166595,166597],{"class":78,"line":94},[76,166574,150402],{"class":90},[76,166576,64707],{"class":126},[76,166578,53469],{"class":90},[76,166580,325],{"class":126},[76,166582,405],{"class":90},[76,166584,71152],{"class":126},[76,166586,53469],{"class":90},[76,166588,1214],{"class":119},[76,166590,405],{"class":90},[76,166592,153477],{"class":126},[76,166594,53469],{"class":90},[76,166596,3243],{"class":119},[76,166598,7012],{"class":90},[76,166600,166601,166603,166605,166607,166609,166611,166613,166615,166617,166619,166621,166623,166625],{"class":78,"line":133},[76,166602,150402],{"class":90},[76,166604,64707],{"class":126},[76,166606,53469],{"class":90},[76,166608,334],{"class":126},[76,166610,405],{"class":90},[76,166612,71152],{"class":126},[76,166614,53469],{"class":90},[76,166616,2885],{"class":119},[76,166618,405],{"class":90},[76,166620,153477],{"class":126},[76,166622,53469],{"class":90},[76,166624,3069],{"class":119},[76,166626,7012],{"class":90},[76,166628,166629,166631,166633,166635,166637,166639,166641,166643,166645,166647,166649,166651,166653],{"class":78,"line":145},[76,166630,150402],{"class":90},[76,166632,64707],{"class":126},[76,166634,53469],{"class":90},[76,166636,161718],{"class":126},[76,166638,405],{"class":90},[76,166640,71152],{"class":126},[76,166642,53469],{"class":90},[76,166644,2934],{"class":119},[76,166646,405],{"class":90},[76,166648,153477],{"class":126},[76,166650,53469],{"class":90},[76,166652,2670],{"class":119},[76,166654,7012],{"class":90},[76,166656,166657],{"class":78,"line":152},[76,166658,35284],{"class":90},[76,166660,166661],{"class":78,"line":157},[76,166662,149],{"emptyLinePlaceholder":148},[76,166664,166665,166667,166669,166671],{"class":78,"line":246},[76,166666,5112],{"class":82},[76,166668,154141],{"class":90},[76,166670,1475],{"class":82},[76,166672,154146],{"class":90},[76,166674,166675,166677,166679,166681,166684,166686],{"class":78,"line":251},[76,166676,120],{"class":119},[76,166678,166325],{"class":90},[76,166680,64707],{"class":126},[76,166682,166683],{"class":90},"], student[",[76,166685,153477],{"class":126},[76,166687,6739],{"class":90},[19,166689,166690],{},"统计平均分：",[66,166692,166694],{"className":68,"code":166693,"language":70,"meta":71,"style":71},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[73,166695,166696,166704,166708,166718,166730,166734,166749],{"__ignoreMap":71},[76,166697,166698,166700,166702],{"class":78,"line":79},[76,166699,159250],{"class":90},[76,166701,370],{"class":82},[76,166703,1027],{"class":119},[76,166705,166706],{"class":78,"line":94},[76,166707,149],{"emptyLinePlaceholder":148},[76,166709,166710,166712,166714,166716],{"class":78,"line":133},[76,166711,5112],{"class":82},[76,166713,154141],{"class":90},[76,166715,1475],{"class":82},[76,166717,154146],{"class":90},[76,166719,166720,166722,166724,166726,166728],{"class":78,"line":145},[76,166721,1460],{"class":90},[76,166723,1060],{"class":82},[76,166725,154153],{"class":90},[76,166727,153477],{"class":126},[76,166729,35284],{"class":90},[76,166731,166732],{"class":78,"line":152},[76,166733,149],{"emptyLinePlaceholder":148},[76,166735,166736,166738,166740,166742,166744,166746],{"class":78,"line":157},[76,166737,165527],{"class":90},[76,166739,370],{"class":82},[76,166741,165532],{"class":90},[76,166743,795],{"class":82},[76,166745,9409],{"class":119},[76,166747,166748],{"class":90},"(students)\n",[76,166750,166751,166753,166755,166757,166759,166761,166763,166765,166767,166769],{"class":78,"line":246},[76,166752,478],{"class":119},[76,166754,123],{"class":90},[76,166756,292],{"class":82},[76,166758,165550],{"class":126},[76,166760,298],{"class":119},[76,166762,165555],{"class":90},[76,166764,159149],{"class":82},[76,166766,304],{"class":119},[76,166768,307],{"class":126},[76,166770,130],{"class":90},[19,166772,166773],{},"查找学生：",[66,166775,166777],{"className":68,"code":166776,"language":70,"meta":71,"style":71},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[73,166778,166779,166794,166798,166808,166822,166828,166832,166838],{"__ignoreMap":71},[76,166780,166781,166783,166785,166787,166789,166792],{"class":78,"line":79},[76,166782,113598],{"class":90},[76,166784,370],{"class":82},[76,166786,1914],{"class":119},[76,166788,123],{"class":90},[76,166790,166791],{"class":126},"\"请输入学生姓名:\"",[76,166793,130],{"class":90},[76,166795,166796],{"class":78,"line":94},[76,166797,149],{"emptyLinePlaceholder":148},[76,166799,166800,166802,166804,166806],{"class":78,"line":133},[76,166801,5112],{"class":82},[76,166803,154141],{"class":90},[76,166805,1475],{"class":82},[76,166807,154146],{"class":90},[76,166809,166810,166812,166814,166816,166818,166820],{"class":78,"line":145},[76,166811,578],{"class":82},[76,166813,154153],{"class":90},[76,166815,64707],{"class":126},[76,166817,6525],{"class":90},[76,166819,1250],{"class":82},[76,166821,162418],{"class":90},[76,166823,166824,166826],{"class":78,"line":152},[76,166825,1701],{"class":119},[76,166827,152056],{"class":90},[76,166829,166830],{"class":78,"line":157},[76,166831,2020],{"class":82},[76,166833,166834,166836],{"class":78,"line":246},[76,166835,1328],{"class":82},[76,166837,590],{"class":90},[76,166839,166840,166842,166844,166847],{"class":78,"line":251},[76,166841,120],{"class":119},[76,166843,123],{"class":90},[76,166845,166846],{"class":126},"\"没有找到\"",[76,166848,130],{"class":90},[14,166850,166852],{"id":166851},"_613-容器通用操作","6.13 容器通用操作",[19,166854,166855],{},"长度：",[66,166857,166859],{"className":68,"code":166858,"language":70,"meta":71,"style":71},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[73,166860,166861,166880,166890],{"__ignoreMap":71},[76,166862,166863,166865,166868,166870,166872,166874,166876,166878],{"class":78,"line":79},[76,166864,9436],{"class":119},[76,166866,166867],{"class":90},"([",[76,166869,669],{"class":119},[76,166871,405],{"class":90},[76,166873,2345],{"class":119},[76,166875,405],{"class":90},[76,166877,2339],{"class":119},[76,166879,6739],{"class":90},[76,166881,166882,166884,166886,166888],{"class":78,"line":94},[76,166883,9436],{"class":119},[76,166885,123],{"class":90},[76,166887,157874],{"class":126},[76,166889,130],{"class":90},[76,166891,166892,166894,166897,166899,166901,166903],{"class":78,"line":133},[76,166893,9436],{"class":119},[76,166895,166896],{"class":90},"({",[76,166898,64707],{"class":126},[76,166900,53469],{"class":90},[76,166902,325],{"class":126},[76,166904,166905],{"class":90},"})\n",[19,166907,166908],{},"最大最小：",[66,166910,166912],{"className":68,"code":166911,"language":70,"meta":71,"style":71},"max([1, 2, 3])\nmin([1, 2, 3])\n",[73,166913,166914,166932],{"__ignoreMap":71},[76,166915,166916,166918,166920,166922,166924,166926,166928,166930],{"class":78,"line":79},[76,166917,8094],{"class":119},[76,166919,166867],{"class":90},[76,166921,669],{"class":119},[76,166923,405],{"class":90},[76,166925,2345],{"class":119},[76,166927,405],{"class":90},[76,166929,2339],{"class":119},[76,166931,6739],{"class":90},[76,166933,166934,166937,166939,166941,166943,166945,166947,166949],{"class":78,"line":94},[76,166935,166936],{"class":119},"min",[76,166938,166867],{"class":90},[76,166940,669],{"class":119},[76,166942,405],{"class":90},[76,166944,2345],{"class":119},[76,166946,405],{"class":90},[76,166948,2339],{"class":119},[76,166950,6739],{"class":90},[19,166952,166953],{},"求和：",[66,166955,166957],{"className":68,"code":166956,"language":70,"meta":71,"style":71},"sum([1, 2, 3])\n",[73,166958,166959],{"__ignoreMap":71},[76,166960,166961,166964,166966,166968,166970,166972,166974,166976],{"class":78,"line":79},[76,166962,166963],{"class":119},"sum",[76,166965,166867],{"class":90},[76,166967,669],{"class":119},[76,166969,405],{"class":90},[76,166971,2345],{"class":119},[76,166973,405],{"class":90},[76,166975,2339],{"class":119},[76,166977,6739],{"class":90},[19,166979,165224],{},[66,166981,166983],{"className":68,"code":166982,"language":70,"meta":71,"style":71},"sorted([3, 1, 2])\n",[73,166984,166985],{"__ignoreMap":71},[76,166986,166987,166990,166992,166994,166996,166998,167000,167002],{"class":78,"line":79},[76,166988,166989],{"class":119},"sorted",[76,166991,166867],{"class":90},[76,166993,2339],{"class":119},[76,166995,405],{"class":90},[76,166997,669],{"class":119},[76,166999,405],{"class":90},[76,167001,2345],{"class":119},[76,167003,6739],{"class":90},[19,167005,167006],{},"类型转换：",[66,167008,167010],{"className":68,"code":167009,"language":70,"meta":71,"style":71},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[73,167011,167012,167022,167040],{"__ignoreMap":71},[76,167013,167014,167016,167018,167020],{"class":78,"line":79},[76,167015,156064],{"class":119},[76,167017,123],{"class":90},[76,167019,157874],{"class":126},[76,167021,130],{"class":90},[76,167023,167024,167026,167028,167030,167032,167034,167036,167038],{"class":78,"line":94},[76,167025,157259],{"class":119},[76,167027,166867],{"class":90},[76,167029,669],{"class":119},[76,167031,405],{"class":90},[76,167033,2345],{"class":119},[76,167035,405],{"class":90},[76,167037,2339],{"class":119},[76,167039,6739],{"class":90},[76,167041,167042,167044,167046,167048,167050,167052,167054,167056,167058,167060],{"class":78,"line":133},[76,167043,157284],{"class":119},[76,167045,166867],{"class":90},[76,167047,669],{"class":119},[76,167049,405],{"class":90},[76,167051,669],{"class":119},[76,167053,405],{"class":90},[76,167055,2345],{"class":119},[76,167057,405],{"class":90},[76,167059,2339],{"class":119},[76,167061,6739],{"class":90},[19,167063,167064],{},"成员判断：",[66,167066,167068],{"className":68,"code":167067,"language":70,"meta":71,"style":71},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[73,167069,167070,167087,167111],{"__ignoreMap":71},[76,167071,167072,167074,167076,167079,167082,167085],{"class":78,"line":79},[76,167073,478],{"class":119},[76,167075,123],{"class":90},[76,167077,167078],{"class":126},"\"a\"",[76,167080,167081],{"class":82}," in",[76,167083,167084],{"class":126}," \"abc\"",[76,167086,130],{"class":90},[76,167088,167089,167091,167093,167095,167097,167099,167101,167103,167105,167107,167109],{"class":78,"line":94},[76,167090,478],{"class":119},[76,167092,123],{"class":90},[76,167094,669],{"class":119},[76,167096,167081],{"class":82},[76,167098,54258],{"class":90},[76,167100,669],{"class":119},[76,167102,405],{"class":90},[76,167104,2345],{"class":119},[76,167106,405],{"class":90},[76,167108,2339],{"class":119},[76,167110,6739],{"class":90},[76,167112,167113,167115,167117,167119,167121,167123,167125,167127,167129],{"class":78,"line":133},[76,167114,478],{"class":119},[76,167116,123],{"class":90},[76,167118,64707],{"class":126},[76,167120,167081],{"class":82},[76,167122,6530],{"class":90},[76,167124,64707],{"class":126},[76,167126,53469],{"class":90},[76,167128,325],{"class":126},[76,167130,166905],{"class":90},[14,167132,167134],{"id":167133},"_614-推导式","6.14 推导式",[19,167136,167137],{},"推导式用于快速生成容器。",[19,167139,167140],{},"列表推导式：",[66,167142,167144],{"className":68,"code":167143,"language":70,"meta":71,"style":71},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[73,167145,167146,167173],{"__ignoreMap":71},[76,167147,167148,167150,167152,167155,167157,167159,167161,167163,167165,167167,167169,167171],{"class":78,"line":79},[76,167149,165853],{"class":90},[76,167151,370],{"class":82},[76,167153,167154],{"class":90}," [i ",[76,167156,5112],{"class":82},[76,167158,11505],{"class":90},[76,167160,1475],{"class":82},[76,167162,34483],{"class":119},[76,167164,123],{"class":90},[76,167166,669],{"class":119},[76,167168,405],{"class":90},[76,167170,2608],{"class":119},[76,167172,99322],{"class":90},[76,167174,167175,167177],{"class":78,"line":94},[76,167176,478],{"class":119},[76,167178,166069],{"class":90},[19,167180,167181],{},"带条件：",[66,167183,167185],{"className":68,"code":167184,"language":70,"meta":71,"style":71},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[73,167186,167187,167228],{"__ignoreMap":71},[76,167188,167189,167192,167194,167196,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224,167226],{"class":78,"line":79},[76,167190,167191],{"class":90},"even_nums ",[76,167193,370],{"class":82},[76,167195,167154],{"class":90},[76,167197,5112],{"class":82},[76,167199,11505],{"class":90},[76,167201,1475],{"class":82},[76,167203,34483],{"class":119},[76,167205,123],{"class":90},[76,167207,669],{"class":119},[76,167209,405],{"class":90},[76,167211,2601],{"class":119},[76,167213,15767],{"class":90},[76,167215,723],{"class":82},[76,167217,11505],{"class":90},[76,167219,2592],{"class":82},[76,167221,16807],{"class":119},[76,167223,103581],{"class":82},[76,167225,587],{"class":119},[76,167227,35284],{"class":90},[76,167229,167230,167232],{"class":78,"line":94},[76,167231,478],{"class":119},[76,167233,167234],{"class":90},"(even_nums)\n",[19,167236,167237],{},"字典推导式：",[66,167239,167241],{"className":68,"code":167240,"language":70,"meta":71,"style":71},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[73,167242,167243,167277],{"__ignoreMap":71},[76,167244,167245,167248,167250,167253,167255,167257,167260,167262,167264,167266,167268,167270,167272,167274],{"class":78,"line":79},[76,167246,167247],{"class":90},"squares ",[76,167249,370],{"class":82},[76,167251,167252],{"class":90}," {i: i ",[76,167254,801],{"class":82},[76,167256,16807],{"class":119},[76,167258,167259],{"class":82}," for",[76,167261,11505],{"class":90},[76,167263,1475],{"class":82},[76,167265,34483],{"class":119},[76,167267,123],{"class":90},[76,167269,669],{"class":119},[76,167271,405],{"class":90},[76,167273,2608],{"class":119},[76,167275,167276],{"class":90},")}\n",[76,167278,167279,167281],{"class":78,"line":94},[76,167280,478],{"class":119},[76,167282,167283],{"class":90},"(squares)\n",[19,167285,167286],{},"集合推导式：",[66,167288,167290],{"className":68,"code":167289,"language":70,"meta":71,"style":71},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[73,167291,167292,167313],{"__ignoreMap":71},[76,167293,167294,167297,167299,167302,167304,167306,167308,167311],{"class":78,"line":79},[76,167295,167296],{"class":90},"chars ",[76,167298,370],{"class":82},[76,167300,167301],{"class":90}," {ch ",[76,167303,5112],{"class":82},[76,167305,161679],{"class":90},[76,167307,1475],{"class":82},[76,167309,167310],{"class":126}," \"hello\"",[76,167312,3685],{"class":90},[76,167314,167315,167317],{"class":78,"line":94},[76,167316,478],{"class":119},[76,167318,167319],{"class":90},"(chars)\n",[19,167321,167322],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167324,167326],{"id":167325},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[66,167328,167330],{"className":68,"code":167329,"language":70,"meta":71,"style":71},"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",[73,167331,167332,167340,167360,167380,167400,167420,167424,167428,167436,167450,167459,167463,167473,167485,167489,167509,167518,167522,167538,167543,167547,167561,167565,167587,167623],{"__ignoreMap":71},[76,167333,167334,167336,167338],{"class":78,"line":79},[76,167335,161703],{"class":90},[76,167337,370],{"class":82},[76,167339,57478],{"class":90},[76,167341,167342,167344,167346,167348,167350,167352,167354,167356,167358],{"class":78,"line":94},[76,167343,150402],{"class":90},[76,167345,64707],{"class":126},[76,167347,53469],{"class":90},[76,167349,325],{"class":126},[76,167351,405],{"class":90},[76,167353,153477],{"class":126},[76,167355,53469],{"class":90},[76,167357,3243],{"class":119},[76,167359,7012],{"class":90},[76,167361,167362,167364,167366,167368,167370,167372,167374,167376,167378],{"class":78,"line":133},[76,167363,150402],{"class":90},[76,167365,64707],{"class":126},[76,167367,53469],{"class":90},[76,167369,334],{"class":126},[76,167371,405],{"class":90},[76,167373,153477],{"class":126},[76,167375,53469],{"class":90},[76,167377,3069],{"class":119},[76,167379,7012],{"class":90},[76,167381,167382,167384,167386,167388,167390,167392,167394,167396,167398],{"class":78,"line":145},[76,167383,150402],{"class":90},[76,167385,64707],{"class":126},[76,167387,53469],{"class":90},[76,167389,161718],{"class":126},[76,167391,405],{"class":90},[76,167393,153477],{"class":126},[76,167395,53469],{"class":90},[76,167397,2670],{"class":119},[76,167399,7012],{"class":90},[76,167401,167402,167404,167406,167408,167410,167412,167414,167416,167418],{"class":78,"line":152},[76,167403,150402],{"class":90},[76,167405,64707],{"class":126},[76,167407,53469],{"class":90},[76,167409,165063],{"class":126},[76,167411,405],{"class":90},[76,167413,153477],{"class":126},[76,167415,53469],{"class":90},[76,167417,3140],{"class":119},[76,167419,7012],{"class":90},[76,167421,167422],{"class":78,"line":157},[76,167423,35284],{"class":90},[76,167425,167426],{"class":78,"line":246},[76,167427,149],{"emptyLinePlaceholder":148},[76,167429,167430,167432,167434],{"class":78,"line":251},[76,167431,159250],{"class":90},[76,167433,370],{"class":82},[76,167435,1027],{"class":119},[76,167437,167438,167441,167443,167446,167448],{"class":78,"line":257},[76,167439,167440],{"class":90},"max_student ",[76,167442,370],{"class":82},[76,167444,167445],{"class":90}," students[",[76,167447,1294],{"class":119},[76,167449,35284],{"class":90},[76,167451,167452,167455,167457],{"class":78,"line":641},[76,167453,167454],{"class":90},"passed ",[76,167456,370],{"class":82},[76,167458,53870],{"class":90},[76,167460,167461],{"class":78,"line":646},[76,167462,149],{"emptyLinePlaceholder":148},[76,167464,167465,167467,167469,167471],{"class":78,"line":659},[76,167466,5112],{"class":82},[76,167468,154141],{"class":90},[76,167470,1475],{"class":82},[76,167472,154146],{"class":90},[76,167474,167475,167477,167479,167481,167483],{"class":78,"line":1608},[76,167476,1460],{"class":90},[76,167478,1060],{"class":82},[76,167480,154153],{"class":90},[76,167482,153477],{"class":126},[76,167484,35284],{"class":90},[76,167486,167487],{"class":78,"line":1632},[76,167488,149],{"emptyLinePlaceholder":148},[76,167490,167491,167493,167495,167497,167499,167501,167504,167506],{"class":78,"line":1637},[76,167492,578],{"class":82},[76,167494,154153],{"class":90},[76,167496,153477],{"class":126},[76,167498,6525],{"class":90},[76,167500,1829],{"class":82},[76,167502,167503],{"class":90}," max_student[",[76,167505,153477],{"class":126},[76,167507,167508],{"class":90},"]:\n",[76,167510,167511,167514,167516],{"class":78,"line":1642},[76,167512,167513],{"class":90},"        max_student ",[76,167515,370],{"class":82},[76,167517,154169],{"class":90},[76,167519,167520],{"class":78,"line":1652},[76,167521,149],{"emptyLinePlaceholder":148},[76,167523,167524,167526,167528,167530,167532,167534,167536],{"class":78,"line":1660},[76,167525,578],{"class":82},[76,167527,154153],{"class":90},[76,167529,153477],{"class":126},[76,167531,6525],{"class":90},[76,167533,611],{"class":82},[76,167535,159827],{"class":119},[76,167537,590],{"class":90},[76,167539,167540],{"class":78,"line":1683},[76,167541,167542],{"class":90},"        passed.append(student)\n",[76,167544,167545],{"class":78,"line":1698},[76,167546,149],{"emptyLinePlaceholder":148},[76,167548,167549,167551,167553,167555,167557,167559],{"class":78,"line":1711},[76,167550,165527],{"class":90},[76,167552,370],{"class":82},[76,167554,165532],{"class":90},[76,167556,795],{"class":82},[76,167558,9409],{"class":119},[76,167560,166748],{"class":90},[76,167562,167563],{"class":78,"line":1717},[76,167564,149],{"emptyLinePlaceholder":148},[76,167566,167567,167569,167571,167573,167575,167577,167579,167581,167583,167585],{"class":78,"line":1728},[76,167568,478],{"class":119},[76,167570,123],{"class":90},[76,167572,292],{"class":82},[76,167574,165550],{"class":126},[76,167576,298],{"class":119},[76,167578,165555],{"class":90},[76,167580,159149],{"class":82},[76,167582,304],{"class":119},[76,167584,307],{"class":126},[76,167586,130],{"class":90},[76,167588,167589,167591,167593,167595,167598,167600,167603,167605,167607,167609,167611,167613,167615,167617,167619,167621],{"class":78,"line":1740},[76,167590,478],{"class":119},[76,167592,123],{"class":90},[76,167594,292],{"class":82},[76,167596,167597],{"class":126},"\"最高分学生:",[76,167599,298],{"class":119},[76,167601,167602],{"class":90},"max_student[",[76,167604,154884],{"class":126},[76,167606,3196],{"class":90},[76,167608,304],{"class":119},[76,167610,6530],{"class":119},[76,167612,167602],{"class":90},[76,167614,154922],{"class":126},[76,167616,3196],{"class":90},[76,167618,304],{"class":119},[76,167620,307],{"class":126},[76,167622,130],{"class":90},[76,167624,167625,167627,167629,167631,167634,167637,167640,167642,167644],{"class":78,"line":1746},[76,167626,478],{"class":119},[76,167628,123],{"class":90},[76,167630,292],{"class":82},[76,167632,167633],{"class":126},"\"及格人数:",[76,167635,167636],{"class":119},"{len",[76,167638,167639],{"class":90},"(passed)",[76,167641,304],{"class":119},[76,167643,307],{"class":126},[76,167645,130],{"class":90},[14,167647,167649],{"id":167648},"_616-易错点","6.16 易错点",[26,167651,167652,167655,167658,167661,167667,167676],{},[29,167653,167654],{},"列表可变，元组和字符串不可变。",[29,167656,167657],{},"切片结束位置不包含。",[29,167659,167660],{},"字典通过 key 取值，不是通过索引。",[29,167662,167663,167664,490],{},"空集合要用 ",[73,167665,167666],{},"set()",[29,167668,106388,167669,167672,167673,490],{},[73,167670,167671],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[73,167674,167675],{},"get()",[29,167677,167678],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167680,167682],{"id":167681},"_617-本章练习","6.17 本章练习",[26,167684,167685,167688,167691,167694,167697],{},[29,167686,167687],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167689,167690],{},"输入一句话，统计每个字符出现次数。",[29,167692,167693],{},"使用集合去除列表中的重复元素。",[29,167695,167696],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167698,167699],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2178,167701,167702],{},"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":71,"searchDepth":94,"depth":94,"links":167704},[167705,167706,167707,167708,167709,167710,167711,167712,167713,167714,167715,167716,167717,167718,167719,167720,167721],{"id":164685,"depth":94,"text":164686},{"id":164802,"depth":94,"text":164803},{"id":164892,"depth":94,"text":164893},{"id":165016,"depth":94,"text":165017},{"id":165379,"depth":94,"text":165380},{"id":165566,"depth":94,"text":165567},{"id":165685,"depth":94,"text":165686},{"id":165827,"depth":94,"text":165828},{"id":166014,"depth":94,"text":166015},{"id":166258,"depth":94,"text":166259},{"id":166468,"depth":94,"text":166469},{"id":166553,"depth":94,"text":166554},{"id":166851,"depth":94,"text":166852},{"id":167133,"depth":94,"text":167134},{"id":167325,"depth":94,"text":167326},{"id":167648,"depth":94,"text":167649},{"id":167681,"depth":94,"text":167682},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164677,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167728,"title":167729,"body":167730,"description":2201,"extension":2202,"meta":169902,"navigation":148,"path":169903,"seo":169904,"stem":169905,"__hash__":169906},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167731,"toc":169877},[167732,167735,167739,167742,167822,167825,167846,167849,167853,167856,167918,167921,167938,167942,167945,167990,167992,168000,168004,168007,168089,168092,168095,168120,168123,168146,168150,168153,168155,168217,168220,168222,168273,168277,168281,168287,168392,168396,168402,168473,168477,168480,168548,168551,168631,168635,168641,168677,168680,168683,168793,168799,168803,168806,168878,168881,168885,168889,168894,168956,168960,168965,169033,169037,169042,169158,169162,169165,169245,169248,169252,169255,169359,169361,169376,169379,169383,169521,169529,169533,169535,169546,169548,169806,169810,169842,169846,169874],[10,167733,167729],{"id":167734},"_7-函数进阶",[14,167736,167738],{"id":167737},"_71-多返回值","7.1 多返回值",[19,167740,167741],{},"Python 函数可以返回多个值，本质上返回的是元组。",[66,167743,167745],{"className":68,"code":167744,"language":70,"meta":71,"style":71},"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",[73,167746,167747,167756,167764,167772,167781,167788,167792,167796,167805,167811],{"__ignoreMap":71},[76,167748,167749,167751,167754],{"class":78,"line":79},[76,167750,83],{"class":82},[76,167752,167753],{"class":86}," get_info",[76,167755,91],{"class":90},[76,167757,167758,167760,167762],{"class":78,"line":94},[76,167759,154372],{"class":90},[76,167761,370],{"class":82},[76,167763,971],{"class":126},[76,167765,167766,167768,167770],{"class":78,"line":133},[76,167767,154388],{"class":90},[76,167769,370],{"class":82},[76,167771,148570],{"class":119},[76,167773,167774,167776,167778],{"class":78,"line":145},[76,167775,154403],{"class":90},[76,167777,370],{"class":82},[76,167779,167780],{"class":119}," 95\n",[76,167782,167783,167785],{"class":78,"line":152},[76,167784,441],{"class":82},[76,167786,167787],{"class":90}," name, age, score\n",[76,167789,167790],{"class":78,"line":157},[76,167791,149],{"emptyLinePlaceholder":148},[76,167793,167794],{"class":78,"line":246},[76,167795,149],{"emptyLinePlaceholder":148},[76,167797,167798,167800,167802],{"class":78,"line":251},[76,167799,460],{"class":90},[76,167801,370],{"class":82},[76,167803,167804],{"class":90}," get_info()\n",[76,167806,167807,167809],{"class":78,"line":257},[76,167808,478],{"class":119},[76,167810,386],{"class":90},[76,167812,167813,167815,167817,167819],{"class":78,"line":641},[76,167814,478],{"class":119},[76,167816,123],{"class":90},[76,167818,105129],{"class":119},[76,167820,167821],{"class":90},"(result))\n",[19,167823,167824],{},"可以直接解包：",[66,167826,167828],{"className":68,"code":167827,"language":70,"meta":71,"style":71},"name, age, score = get_info()\nprint(name, age, score)\n",[73,167829,167830,167839],{"__ignoreMap":71},[76,167831,167832,167835,167837],{"class":78,"line":79},[76,167833,167834],{"class":90},"name, age, score ",[76,167836,370],{"class":82},[76,167838,167804],{"class":90},[76,167840,167841,167843],{"class":78,"line":94},[76,167842,478],{"class":119},[76,167844,167845],{"class":90},"(name, age, score)\n",[19,167847,167848],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167850,167852],{"id":167851},"_72-位置参数","7.2 位置参数",[19,167854,167855],{},"位置参数按顺序传递。",[66,167857,167859],{"className":68,"code":167858,"language":70,"meta":71,"style":71},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[73,167860,167861,167869,167897,167901,167905],{"__ignoreMap":71},[76,167862,167863,167865,167867],{"class":78,"line":79},[76,167864,83],{"class":82},[76,167866,151388],{"class":86},[76,167868,1142],{"class":90},[76,167870,167871,167873,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893,167895],{"class":78,"line":94},[76,167872,120],{"class":119},[76,167874,123],{"class":90},[76,167876,292],{"class":82},[76,167878,151401],{"class":126},[76,167880,298],{"class":119},[76,167882,301],{"class":90},[76,167884,304],{"class":119},[76,167886,151410],{"class":126},[76,167888,298],{"class":119},[76,167890,1184],{"class":90},[76,167892,304],{"class":119},[76,167894,151419],{"class":126},[76,167896,130],{"class":90},[76,167898,167899],{"class":78,"line":133},[76,167900,149],{"emptyLinePlaceholder":148},[76,167902,167903],{"class":78,"line":145},[76,167904,149],{"emptyLinePlaceholder":148},[76,167906,167907,167910,167912,167914,167916],{"class":78,"line":152},[76,167908,167909],{"class":90},"introduce(",[76,167911,325],{"class":126},[76,167913,405],{"class":90},[76,167915,1214],{"class":119},[76,167917,130],{"class":90},[19,167919,167920],{},"顺序错了就会得到错误含义：",[66,167922,167924],{"className":68,"code":167923,"language":70,"meta":71,"style":71},"introduce(18, \"小明\")\n",[73,167925,167926],{"__ignoreMap":71},[76,167927,167928,167930,167932,167934,167936],{"class":78,"line":79},[76,167929,167909],{"class":90},[76,167931,1214],{"class":119},[76,167933,405],{"class":90},[76,167935,325],{"class":126},[76,167937,130],{"class":90},[14,167939,167941],{"id":167940},"_73-关键字参数","7.3 关键字参数",[19,167943,167944],{},"关键字参数按参数名传递。",[66,167946,167948],{"className":68,"code":167947,"language":70,"meta":71,"style":71},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[73,167949,167950,167970],{"__ignoreMap":71},[76,167951,167952,167954,167956,167958,167960,167962,167964,167966,167968],{"class":78,"line":79},[76,167953,167909],{"class":90},[76,167955,301],{"class":7296},[76,167957,370],{"class":82},[76,167959,325],{"class":126},[76,167961,405],{"class":90},[76,167963,1184],{"class":7296},[76,167965,370],{"class":82},[76,167967,1214],{"class":119},[76,167969,130],{"class":90},[76,167971,167972,167974,167976,167978,167980,167982,167984,167986,167988],{"class":78,"line":94},[76,167973,167909],{"class":90},[76,167975,1184],{"class":7296},[76,167977,370],{"class":82},[76,167979,1214],{"class":119},[76,167981,405],{"class":90},[76,167983,301],{"class":7296},[76,167985,370],{"class":82},[76,167987,325],{"class":126},[76,167989,130],{"class":90},[19,167991,119954],{},[26,167993,167994,167997],{},[29,167995,167996],{},"顺序不容易错。",[29,167998,167999],{},"调用时可读性更强。",[14,168001,168003],{"id":168002},"_74-默认参数","7.4 默认参数",[19,168005,168006],{},"默认参数给参数设置默认值。",[66,168008,168010],{"className":68,"code":168009,"language":70,"meta":71,"style":71},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[73,168011,168012,168028,168058,168062,168066,168076],{"__ignoreMap":71},[76,168013,168014,168016,168018,168021,168023,168026],{"class":78,"line":79},[76,168015,83],{"class":82},[76,168017,124113],{"class":86},[76,168019,168020],{"class":90},"(host, port",[76,168022,370],{"class":82},[76,168024,168025],{"class":119},"3306",[76,168027,32830],{"class":90},[76,168029,168030,168032,168034,168036,168039,168041,168043,168045,168047,168049,168052,168054,168056],{"class":78,"line":94},[76,168031,120],{"class":119},[76,168033,123],{"class":90},[76,168035,292],{"class":82},[76,168037,168038],{"class":126},"\"连接",[76,168040,298],{"class":119},[76,168042,29444],{"class":90},[76,168044,304],{"class":119},[76,168046,3117],{"class":126},[76,168048,298],{"class":119},[76,168050,168051],{"class":90},"port",[76,168053,304],{"class":119},[76,168055,307],{"class":126},[76,168057,130],{"class":90},[76,168059,168060],{"class":78,"line":133},[76,168061,149],{"emptyLinePlaceholder":148},[76,168063,168064],{"class":78,"line":145},[76,168065,149],{"emptyLinePlaceholder":148},[76,168067,168068,168071,168074],{"class":78,"line":152},[76,168069,168070],{"class":90},"connect(",[76,168072,168073],{"class":126},"\"localhost\"",[76,168075,130],{"class":90},[76,168077,168078,168080,168082,168084,168087],{"class":78,"line":157},[76,168079,168070],{"class":90},[76,168081,168073],{"class":126},[76,168083,405],{"class":90},[76,168085,168086],{"class":119},"6379",[76,168088,130],{"class":90},[19,168090,168091],{},"注意：默认参数必须放在非默认参数后面。",[19,168093,168094],{},"错误：",[66,168096,168098],{"className":68,"code":168097,"language":70,"meta":71,"style":71},"def connect(port=3306, host):\n    pass\n",[73,168099,168100,168116],{"__ignoreMap":71},[76,168101,168102,168104,168106,168109,168111,168113],{"class":78,"line":79},[76,168103,83],{"class":82},[76,168105,124113],{"class":86},[76,168107,168108],{"class":90},"(port",[76,168110,370],{"class":82},[76,168112,168025],{"class":119},[76,168114,168115],{"class":90},", host):\n",[76,168117,168118],{"class":78,"line":94},[76,168119,151552],{"class":82},[19,168121,168122],{},"正确：",[66,168124,168126],{"className":68,"code":168125,"language":70,"meta":71,"style":71},"def connect(host, port=3306):\n    pass\n",[73,168127,168128,168142],{"__ignoreMap":71},[76,168129,168130,168132,168134,168136,168138,168140],{"class":78,"line":79},[76,168131,83],{"class":82},[76,168133,124113],{"class":86},[76,168135,168020],{"class":90},[76,168137,370],{"class":82},[76,168139,168025],{"class":119},[76,168141,32830],{"class":90},[76,168143,168144],{"class":78,"line":94},[76,168145,151552],{"class":82},[14,168147,168149],{"id":168148},"_75-默认参数的坑","7.5 默认参数的坑",[19,168151,168152],{},"不要使用可变对象作为默认参数。",[19,168154,159613],{},[66,168156,168158],{"className":68,"code":168157,"language":70,"meta":71,"style":71},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[73,168159,168160,168175,168180,168187,168191,168195,168206],{"__ignoreMap":71},[76,168161,168162,168164,168167,168170,168172],{"class":78,"line":79},[76,168163,83],{"class":82},[76,168165,168166],{"class":86}," add_item",[76,168168,168169],{"class":90},"(item, items",[76,168171,370],{"class":82},[76,168173,168174],{"class":90},"[]):\n",[76,168176,168177],{"class":78,"line":94},[76,168178,168179],{"class":90},"    items.append(item)\n",[76,168181,168182,168184],{"class":78,"line":133},[76,168183,441],{"class":82},[76,168185,168186],{"class":90}," items\n",[76,168188,168189],{"class":78,"line":145},[76,168190,149],{"emptyLinePlaceholder":148},[76,168192,168193],{"class":78,"line":152},[76,168194,149],{"emptyLinePlaceholder":148},[76,168196,168197,168199,168202,168204],{"class":78,"line":157},[76,168198,478],{"class":119},[76,168200,168201],{"class":90},"(add_item(",[76,168203,167078],{"class":126},[76,168205,656],{"class":90},[76,168207,168208,168210,168212,168215],{"class":78,"line":246},[76,168209,478],{"class":119},[76,168211,168201],{"class":90},[76,168213,168214],{"class":126},"\"b\"",[76,168216,656],{"class":90},[19,168218,168219],{},"第二次调用会复用第一次的列表。",[19,168221,157882],{},[66,168223,168225],{"className":68,"code":168224,"language":70,"meta":71,"style":71},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[73,168226,168227,168241,168254,168263,168267],{"__ignoreMap":71},[76,168228,168229,168231,168233,168235,168237,168239],{"class":78,"line":79},[76,168230,83],{"class":82},[76,168232,168166],{"class":86},[76,168234,168169],{"class":90},[76,168236,370],{"class":82},[76,168238,489],{"class":119},[76,168240,32830],{"class":90},[76,168242,168243,168245,168248,168250,168252],{"class":78,"line":94},[76,168244,578],{"class":82},[76,168246,168247],{"class":90}," items ",[76,168249,729],{"class":82},[76,168251,732],{"class":119},[76,168253,590],{"class":90},[76,168255,168256,168259,168261],{"class":78,"line":133},[76,168257,168258],{"class":90},"        items ",[76,168260,370],{"class":82},[76,168262,53870],{"class":90},[76,168264,168265],{"class":78,"line":145},[76,168266,168179],{"class":90},[76,168268,168269,168271],{"class":78,"line":152},[76,168270,441],{"class":82},[76,168272,168186],{"class":90},[14,168274,168276],{"id":168275},"_76-不定长参数","7.6 不定长参数",[889,168278,168280],{"id":168279},"_761-args","7.6.1 *args",[19,168282,168283,168286],{},[73,168284,168285],{},"*args"," 接收任意数量的位置参数，得到元组。",[66,168288,168290],{"className":68,"code":168289,"language":70,"meta":71,"style":71},"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",[73,168291,168292,168305,168313,168324,168333,168339,168343,168347,168366],{"__ignoreMap":71},[76,168293,168294,168296,168298,168300,168302],{"class":78,"line":79},[76,168295,83],{"class":82},[76,168297,359],{"class":86},[76,168299,123],{"class":90},[76,168301,2718],{"class":82},[76,168303,168304],{"class":90},"args):\n",[76,168306,168307,168309,168311],{"class":78,"line":94},[76,168308,1460],{"class":90},[76,168310,370],{"class":82},[76,168312,1027],{"class":119},[76,168314,168315,168317,168319,168321],{"class":78,"line":133},[76,168316,1469],{"class":82},[76,168318,158174],{"class":90},[76,168320,1475],{"class":82},[76,168322,168323],{"class":90}," args:\n",[76,168325,168326,168328,168330],{"class":78,"line":145},[76,168327,1483],{"class":90},[76,168329,1060],{"class":82},[76,168331,168332],{"class":90}," num\n",[76,168334,168335,168337],{"class":78,"line":152},[76,168336,441],{"class":82},[76,168338,1495],{"class":90},[76,168340,168341],{"class":78,"line":157},[76,168342,149],{"emptyLinePlaceholder":148},[76,168344,168345],{"class":78,"line":246},[76,168346,149],{"emptyLinePlaceholder":148},[76,168348,168349,168351,168354,168356,168358,168360,168362,168364],{"class":78,"line":251},[76,168350,478],{"class":119},[76,168352,168353],{"class":90},"(add(",[76,168355,669],{"class":119},[76,168357,405],{"class":90},[76,168359,2345],{"class":119},[76,168361,405],{"class":90},[76,168363,2339],{"class":119},[76,168365,656],{"class":90},[76,168367,168368,168370,168372,168374,168376,168378,168380,168382,168384,168386,168388,168390],{"class":78,"line":257},[76,168369,478],{"class":119},[76,168371,168353],{"class":90},[76,168373,669],{"class":119},[76,168375,405],{"class":90},[76,168377,2345],{"class":119},[76,168379,405],{"class":90},[76,168381,2339],{"class":119},[76,168383,405],{"class":90},[76,168385,2557],{"class":119},[76,168387,405],{"class":90},[76,168389,2583],{"class":119},[76,168391,656],{"class":90},[889,168393,168395],{"id":168394},"_762-kwargs","7.6.2 **kwargs",[19,168397,168398,168401],{},[73,168399,168400],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[66,168403,168405],{"className":68,"code":168404,"language":70,"meta":71,"style":71},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[73,168406,168407,168420,168431,168437,168441,168445],{"__ignoreMap":71},[76,168408,168409,168411,168413,168415,168417],{"class":78,"line":79},[76,168410,83],{"class":82},[76,168412,1139],{"class":86},[76,168414,123],{"class":90},[76,168416,801],{"class":82},[76,168418,168419],{"class":90},"kwargs):\n",[76,168421,168422,168424,168426,168428],{"class":78,"line":94},[76,168423,1469],{"class":82},[76,168425,166538],{"class":90},[76,168427,1475],{"class":82},[76,168429,168430],{"class":90}," kwargs.items():\n",[76,168432,168433,168435],{"class":78,"line":133},[76,168434,1701],{"class":119},[76,168436,166550],{"class":90},[76,168438,168439],{"class":78,"line":145},[76,168440,149],{"emptyLinePlaceholder":148},[76,168442,168443],{"class":78,"line":152},[76,168444,149],{"emptyLinePlaceholder":148},[76,168446,168447,168449,168451,168453,168455,168457,168459,168461,168463,168465,168467,168469,168471],{"class":78,"line":157},[76,168448,1207],{"class":90},[76,168450,301],{"class":7296},[76,168452,370],{"class":82},[76,168454,325],{"class":126},[76,168456,405],{"class":90},[76,168458,1184],{"class":7296},[76,168460,370],{"class":82},[76,168462,1214],{"class":119},[76,168464,405],{"class":90},[76,168466,72299],{"class":7296},[76,168468,370],{"class":82},[76,168470,71297],{"class":126},[76,168472,130],{"class":90},[14,168474,168476],{"id":168475},"_77-参数解包","7.7 参数解包",[19,168478,168479],{},"列表或元组解包为位置参数：",[66,168481,168483],{"className":68,"code":168482,"language":70,"meta":71,"style":71},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[73,168484,168485,168494,168509,168513,168517,168537],{"__ignoreMap":71},[76,168486,168487,168489,168491],{"class":78,"line":79},[76,168488,83],{"class":82},[76,168490,359],{"class":86},[76,168492,168493],{"class":90},"(a, b, c):\n",[76,168495,168496,168498,168500,168502,168504,168506],{"class":78,"line":94},[76,168497,441],{"class":82},[76,168499,373],{"class":90},[76,168501,376],{"class":82},[76,168503,1247],{"class":90},[76,168505,376],{"class":82},[76,168507,168508],{"class":90}," c\n",[76,168510,168511],{"class":78,"line":133},[76,168512,149],{"emptyLinePlaceholder":148},[76,168514,168515],{"class":78,"line":145},[76,168516,149],{"emptyLinePlaceholder":148},[76,168518,168519,168521,168523,168525,168527,168529,168531,168533,168535],{"class":78,"line":152},[76,168520,165853],{"class":90},[76,168522,370],{"class":82},[76,168524,54258],{"class":90},[76,168526,669],{"class":119},[76,168528,405],{"class":90},[76,168530,2345],{"class":119},[76,168532,405],{"class":90},[76,168534,2339],{"class":119},[76,168536,35284],{"class":90},[76,168538,168539,168541,168543,168545],{"class":78,"line":157},[76,168540,478],{"class":119},[76,168542,168353],{"class":90},[76,168544,2718],{"class":82},[76,168546,168547],{"class":90},"nums))\n",[19,168549,168550],{},"字典解包为关键字参数：",[66,168552,168554],{"className":68,"code":168553,"language":70,"meta":71,"style":71},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[73,168555,168556,168564,168590,168594,168598,168622],{"__ignoreMap":71},[76,168557,168558,168560,168562],{"class":78,"line":79},[76,168559,83],{"class":82},[76,168561,151388],{"class":86},[76,168563,1142],{"class":90},[76,168565,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584,168586,168588],{"class":78,"line":94},[76,168567,120],{"class":119},[76,168569,123],{"class":90},[76,168571,292],{"class":82},[76,168573,307],{"class":126},[76,168575,298],{"class":119},[76,168577,301],{"class":90},[76,168579,304],{"class":119},[76,168581,6530],{"class":119},[76,168583,1184],{"class":90},[76,168585,304],{"class":119},[76,168587,307],{"class":126},[76,168589,130],{"class":90},[76,168591,168592],{"class":78,"line":133},[76,168593,149],{"emptyLinePlaceholder":148},[76,168595,168596],{"class":78,"line":145},[76,168597,149],{"emptyLinePlaceholder":148},[76,168599,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620],{"class":78,"line":152},[76,168601,118334],{"class":90},[76,168603,370],{"class":82},[76,168605,6530],{"class":90},[76,168607,64707],{"class":126},[76,168609,53469],{"class":90},[76,168611,325],{"class":126},[76,168613,405],{"class":90},[76,168615,71152],{"class":126},[76,168617,53469],{"class":90},[76,168619,1214],{"class":119},[76,168621,3685],{"class":90},[76,168623,168624,168626,168628],{"class":78,"line":157},[76,168625,167909],{"class":90},[76,168627,801],{"class":82},[76,168629,168630],{"class":90},"info)\n",[14,168632,168634],{"id":168633},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168636,168637,168640],{},[73,168638,168639],{},"lambda"," 用于定义简单匿名函数。",[66,168642,168644],{"className":68,"code":168643,"language":70,"meta":71,"style":71},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[73,168645,168646,168663],{"__ignoreMap":71},[76,168647,168648,168651,168653,168656,168659,168661],{"class":78,"line":79},[76,168649,168650],{"class":90},"add ",[76,168652,370],{"class":82},[76,168654,168655],{"class":82}," lambda",[76,168657,168658],{"class":90}," a, b: a ",[76,168660,376],{"class":82},[76,168662,379],{"class":90},[76,168664,168665,168667,168669,168671,168673,168675],{"class":78,"line":94},[76,168666,478],{"class":119},[76,168668,168353],{"class":90},[76,168670,669],{"class":119},[76,168672,405],{"class":90},[76,168674,2345],{"class":119},[76,168676,656],{"class":90},[19,168678,168679],{},"常和排序、过滤等函数一起使用。",[19,168681,168682],{},"按分数排序：",[66,168684,168686],{"className":68,"code":168685,"language":70,"meta":71,"style":71},"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",[73,168687,168688,168696,168716,168736,168756,168760,168764,168787],{"__ignoreMap":71},[76,168689,168690,168692,168694],{"class":78,"line":79},[76,168691,161703],{"class":90},[76,168693,370],{"class":82},[76,168695,57478],{"class":90},[76,168697,168698,168700,168702,168704,168706,168708,168710,168712,168714],{"class":78,"line":94},[76,168699,150402],{"class":90},[76,168701,64707],{"class":126},[76,168703,53469],{"class":90},[76,168705,325],{"class":126},[76,168707,405],{"class":90},[76,168709,153477],{"class":126},[76,168711,53469],{"class":90},[76,168713,3243],{"class":119},[76,168715,7012],{"class":90},[76,168717,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":78,"line":133},[76,168719,150402],{"class":90},[76,168721,64707],{"class":126},[76,168723,53469],{"class":90},[76,168725,334],{"class":126},[76,168727,405],{"class":90},[76,168729,153477],{"class":126},[76,168731,53469],{"class":90},[76,168733,3069],{"class":119},[76,168735,7012],{"class":90},[76,168737,168738,168740,168742,168744,168746,168748,168750,168752,168754],{"class":78,"line":145},[76,168739,150402],{"class":90},[76,168741,64707],{"class":126},[76,168743,53469],{"class":90},[76,168745,161718],{"class":126},[76,168747,405],{"class":90},[76,168749,153477],{"class":126},[76,168751,53469],{"class":90},[76,168753,2670],{"class":119},[76,168755,7012],{"class":90},[76,168757,168758],{"class":78,"line":152},[76,168759,35284],{"class":90},[76,168761,168762],{"class":78,"line":157},[76,168763,149],{"emptyLinePlaceholder":148},[76,168765,168766,168769,168771,168773,168775,168777,168779,168781,168783,168785],{"class":78,"line":246},[76,168767,168768],{"class":90},"students.sort(",[76,168770,155940],{"class":7296},[76,168772,155943],{"class":82},[76,168774,155946],{"class":90},[76,168776,153477],{"class":126},[76,168778,114222],{"class":90},[76,168780,165281],{"class":7296},[76,168782,370],{"class":82},[76,168784,33519],{"class":119},[76,168786,130],{"class":90},[76,168788,168789,168791],{"class":78,"line":251},[76,168790,478],{"class":119},[76,168792,166748],{"class":90},[19,168794,168795,168796,168798],{},"如果逻辑复杂，不要硬写 ",[73,168797,168639],{},"，定义普通函数更清晰。",[14,168800,168802],{"id":168801},"_79-函数作为参数","7.9 函数作为参数",[19,168804,168805],{},"函数可以作为参数传给另一个函数。",[66,168807,168809],{"className":68,"code":168808,"language":70,"meta":71,"style":71},"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",[73,168810,168811,168819,168829,168833,168837,168847,168854,168858,168862],{"__ignoreMap":71},[76,168812,168813,168815,168817],{"class":78,"line":79},[76,168814,83],{"class":82},[76,168816,359],{"class":86},[76,168818,362],{"class":90},[76,168820,168821,168823,168825,168827],{"class":78,"line":94},[76,168822,441],{"class":82},[76,168824,373],{"class":90},[76,168826,376],{"class":82},[76,168828,379],{"class":90},[76,168830,168831],{"class":78,"line":133},[76,168832,149],{"emptyLinePlaceholder":148},[76,168834,168835],{"class":78,"line":145},[76,168836,149],{"emptyLinePlaceholder":148},[76,168838,168839,168841,168844],{"class":78,"line":152},[76,168840,83],{"class":82},[76,168842,168843],{"class":86}," calculate",[76,168845,168846],{"class":90},"(a, b, func):\n",[76,168848,168849,168851],{"class":78,"line":157},[76,168850,441],{"class":82},[76,168852,168853],{"class":90}," func(a, b)\n",[76,168855,168856],{"class":78,"line":246},[76,168857,149],{"emptyLinePlaceholder":148},[76,168859,168860],{"class":78,"line":251},[76,168861,149],{"emptyLinePlaceholder":148},[76,168863,168864,168866,168869,168871,168873,168875],{"class":78,"line":257},[76,168865,478],{"class":119},[76,168867,168868],{"class":90},"(calculate(",[76,168870,402],{"class":119},[76,168872,405],{"class":90},[76,168874,408],{"class":119},[76,168876,168877],{"class":90},", add))\n",[19,168879,168880],{},"这种思想在排序、回调、框架中经常出现。",[14,168882,168884],{"id":168883},"_710-mapfiltersorted","7.10 map、filter、sorted",[889,168886,168888],{"id":168887},"_7101-map","7.10.1 map",[19,168890,168891,168893],{},[73,168892,76071],{}," 对每个元素执行函数。",[66,168895,168897],{"className":68,"code":168896,"language":70,"meta":71,"style":71},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[73,168898,168899,168923,168946],{"__ignoreMap":71},[76,168900,168901,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921],{"class":78,"line":79},[76,168902,165853],{"class":90},[76,168904,370],{"class":82},[76,168906,54258],{"class":90},[76,168908,669],{"class":119},[76,168910,405],{"class":90},[76,168912,2345],{"class":119},[76,168914,405],{"class":90},[76,168916,2339],{"class":119},[76,168918,405],{"class":90},[76,168920,2557],{"class":119},[76,168922,35284],{"class":90},[76,168924,168925,168927,168929,168932,168934,168936,168939,168941,168943],{"class":78,"line":94},[76,168926,460],{"class":90},[76,168928,370],{"class":82},[76,168930,168931],{"class":119}," map",[76,168933,123],{"class":90},[76,168935,168639],{"class":82},[76,168937,168938],{"class":90}," x: x ",[76,168940,2718],{"class":82},[76,168942,16807],{"class":119},[76,168944,168945],{"class":90},", nums)\n",[76,168947,168948,168950,168952,168954],{"class":78,"line":133},[76,168949,478],{"class":119},[76,168951,123],{"class":90},[76,168953,156064],{"class":119},[76,168955,167821],{"class":90},[889,168957,168959],{"id":168958},"_7102-filter","7.10.2 filter",[19,168961,168962,168964],{},[73,168963,82075],{}," 保留满足条件的元素。",[66,168966,168968],{"className":68,"code":168967,"language":70,"meta":71,"style":71},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[73,168969,168970,168998,169023],{"__ignoreMap":71},[76,168971,168972,168974,168976,168978,168980,168982,168984,168986,168988,168990,168992,168994,168996],{"class":78,"line":79},[76,168973,165853],{"class":90},[76,168975,370],{"class":82},[76,168977,54258],{"class":90},[76,168979,669],{"class":119},[76,168981,405],{"class":90},[76,168983,2345],{"class":119},[76,168985,405],{"class":90},[76,168987,2339],{"class":119},[76,168989,405],{"class":90},[76,168991,2557],{"class":119},[76,168993,405],{"class":90},[76,168995,2583],{"class":119},[76,168997,35284],{"class":90},[76,168999,169000,169002,169004,169007,169009,169011,169013,169015,169017,169019,169021],{"class":78,"line":94},[76,169001,460],{"class":90},[76,169003,370],{"class":82},[76,169005,169006],{"class":119}," filter",[76,169008,123],{"class":90},[76,169010,168639],{"class":82},[76,169012,168938],{"class":90},[76,169014,2592],{"class":82},[76,169016,16807],{"class":119},[76,169018,103581],{"class":82},[76,169020,587],{"class":119},[76,169022,168945],{"class":90},[76,169024,169025,169027,169029,169031],{"class":78,"line":133},[76,169026,478],{"class":119},[76,169028,123],{"class":90},[76,169030,156064],{"class":119},[76,169032,167821],{"class":90},[889,169034,169036],{"id":169035},"_7103-sorted","7.10.3 sorted",[19,169038,169039,169041],{},[73,169040,166989],{}," 返回排序后的新列表。",[66,169043,169045],{"className":68,"code":169044,"language":70,"meta":71,"style":71},"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",[73,169046,169047,169055,169075,169095,169115,169119,169123,169152],{"__ignoreMap":71},[76,169048,169049,169051,169053],{"class":78,"line":79},[76,169050,161703],{"class":90},[76,169052,370],{"class":82},[76,169054,57478],{"class":90},[76,169056,169057,169059,169061,169063,169065,169067,169069,169071,169073],{"class":78,"line":94},[76,169058,150402],{"class":90},[76,169060,64707],{"class":126},[76,169062,53469],{"class":90},[76,169064,325],{"class":126},[76,169066,405],{"class":90},[76,169068,153477],{"class":126},[76,169070,53469],{"class":90},[76,169072,3243],{"class":119},[76,169074,7012],{"class":90},[76,169076,169077,169079,169081,169083,169085,169087,169089,169091,169093],{"class":78,"line":133},[76,169078,150402],{"class":90},[76,169080,64707],{"class":126},[76,169082,53469],{"class":90},[76,169084,334],{"class":126},[76,169086,405],{"class":90},[76,169088,153477],{"class":126},[76,169090,53469],{"class":90},[76,169092,3069],{"class":119},[76,169094,7012],{"class":90},[76,169096,169097,169099,169101,169103,169105,169107,169109,169111,169113],{"class":78,"line":145},[76,169098,150402],{"class":90},[76,169100,64707],{"class":126},[76,169102,53469],{"class":90},[76,169104,161718],{"class":126},[76,169106,405],{"class":90},[76,169108,153477],{"class":126},[76,169110,53469],{"class":90},[76,169112,2670],{"class":119},[76,169114,7012],{"class":90},[76,169116,169117],{"class":78,"line":152},[76,169118,35284],{"class":90},[76,169120,169121],{"class":78,"line":157},[76,169122,149],{"emptyLinePlaceholder":148},[76,169124,169125,169127,169129,169131,169134,169136,169138,169140,169142,169144,169146,169148,169150],{"class":78,"line":246},[76,169126,460],{"class":90},[76,169128,370],{"class":82},[76,169130,165357],{"class":119},[76,169132,169133],{"class":90},"(students, ",[76,169135,155940],{"class":7296},[76,169137,155943],{"class":82},[76,169139,155946],{"class":90},[76,169141,153477],{"class":126},[76,169143,114222],{"class":90},[76,169145,165281],{"class":7296},[76,169147,370],{"class":82},[76,169149,33519],{"class":119},[76,169151,130],{"class":90},[76,169153,169154,169156],{"class":78,"line":251},[76,169155,478],{"class":119},[76,169157,386],{"class":90},[14,169159,169161],{"id":169160},"_711-闭包入门","7.11 闭包入门",[19,169163,169164],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[66,169166,169168],{"className":68,"code":169167,"language":70,"meta":71,"style":71},"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",[73,169169,169170,169180,169190,169201,169205,169212,169216,169220,169234],{"__ignoreMap":71},[76,169171,169172,169174,169177],{"class":78,"line":79},[76,169173,83],{"class":82},[76,169175,169176],{"class":86}," outer",[76,169178,169179],{"class":90},"(base):\n",[76,169181,169182,169184,169187],{"class":78,"line":94},[76,169183,32845],{"class":82},[76,169185,169186],{"class":86}," inner",[76,169188,169189],{"class":90},"(num):\n",[76,169191,169192,169194,169197,169199],{"class":78,"line":133},[76,169193,595],{"class":82},[76,169195,169196],{"class":90}," base ",[76,169198,376],{"class":82},[76,169200,168332],{"class":90},[76,169202,169203],{"class":78,"line":145},[76,169204,149],{"emptyLinePlaceholder":148},[76,169206,169207,169209],{"class":78,"line":152},[76,169208,441],{"class":82},[76,169210,169211],{"class":90}," inner\n",[76,169213,169214],{"class":78,"line":157},[76,169215,149],{"emptyLinePlaceholder":148},[76,169217,169218],{"class":78,"line":246},[76,169219,149],{"emptyLinePlaceholder":148},[76,169221,169222,169225,169227,169230,169232],{"class":78,"line":251},[76,169223,169224],{"class":90},"add_10 ",[76,169226,370],{"class":82},[76,169228,169229],{"class":90}," outer(",[76,169231,402],{"class":119},[76,169233,130],{"class":90},[76,169235,169236,169238,169241,169243],{"class":78,"line":257},[76,169237,478],{"class":119},[76,169239,169240],{"class":90},"(add_10(",[76,169242,2583],{"class":119},[76,169244,656],{"class":90},[19,169246,169247],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169249,169251],{"id":169250},"_712-装饰器入门","7.12 装饰器入门",[19,169253,169254],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[66,169256,169258],{"className":68,"code":169257,"language":70,"meta":71,"style":71},"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",[73,169259,169260,169269,169278,169289,169294,169305,169309,169316,169320,169324,169329,169337,169347,169351,169355],{"__ignoreMap":71},[76,169261,169262,169264,169266],{"class":78,"line":79},[76,169263,83],{"class":82},[76,169265,89215],{"class":86},[76,169267,169268],{"class":90},"(func):\n",[76,169270,169271,169273,169276],{"class":78,"line":94},[76,169272,32845],{"class":82},[76,169274,169275],{"class":86}," wrapper",[76,169277,91],{"class":90},[76,169279,169280,169282,169284,169287],{"class":78,"line":133},[76,169281,1701],{"class":119},[76,169283,123],{"class":90},[76,169285,169286],{"class":126},"\"函数开始执行\"",[76,169288,130],{"class":90},[76,169290,169291],{"class":78,"line":145},[76,169292,169293],{"class":90},"        func()\n",[76,169295,169296,169298,169300,169303],{"class":78,"line":152},[76,169297,1701],{"class":119},[76,169299,123],{"class":90},[76,169301,169302],{"class":126},"\"函数执行结束\"",[76,169304,130],{"class":90},[76,169306,169307],{"class":78,"line":157},[76,169308,149],{"emptyLinePlaceholder":148},[76,169310,169311,169313],{"class":78,"line":246},[76,169312,441],{"class":82},[76,169314,169315],{"class":90}," wrapper\n",[76,169317,169318],{"class":78,"line":251},[76,169319,149],{"emptyLinePlaceholder":148},[76,169321,169322],{"class":78,"line":257},[76,169323,149],{"emptyLinePlaceholder":148},[76,169325,169326],{"class":78,"line":641},[76,169327,169328],{"class":86},"@log\n",[76,169330,169331,169333,169335],{"class":78,"line":646},[76,169332,83],{"class":82},[76,169334,112],{"class":86},[76,169336,91],{"class":90},[76,169338,169339,169341,169343,169345],{"class":78,"line":659},[76,169340,120],{"class":119},[76,169342,123],{"class":90},[76,169344,127],{"class":126},[76,169346,130],{"class":90},[76,169348,169349],{"class":78,"line":1608},[76,169350,149],{"emptyLinePlaceholder":148},[76,169352,169353],{"class":78,"line":1632},[76,169354,149],{"emptyLinePlaceholder":148},[76,169356,169357],{"class":78,"line":1637},[76,169358,160],{"class":90},[19,169360,160263],{},[66,169362,169364],{"className":68,"code":169363,"language":70,"meta":71,"style":71},"say_hello = log(say_hello)\n",[73,169365,169366],{"__ignoreMap":71},[76,169367,169368,169371,169373],{"class":78,"line":79},[76,169369,169370],{"class":90},"say_hello ",[76,169372,370],{"class":82},[76,169374,169375],{"class":90}," log(say_hello)\n",[19,169377,169378],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169380,169382],{"id":169381},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[66,169384,169386],{"className":68,"code":169385,"language":70,"meta":71,"style":71},"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",[73,169387,169388,169396,169413,169423,169442,169452,169459,169463,169469,169473,169477,169481,169489,169499,169503,169507],{"__ignoreMap":71},[76,169389,169390,169392,169394],{"class":78,"line":79},[76,169391,83],{"class":82},[76,169393,89215],{"class":86},[76,169395,169268],{"class":90},[76,169397,169398,169400,169402,169404,169406,169409,169411],{"class":78,"line":94},[76,169399,32845],{"class":82},[76,169401,169275],{"class":86},[76,169403,123],{"class":90},[76,169405,2718],{"class":82},[76,169407,169408],{"class":90},"args, ",[76,169410,801],{"class":82},[76,169412,168419],{"class":90},[76,169414,169415,169417,169419,169421],{"class":78,"line":133},[76,169416,1701],{"class":119},[76,169418,123],{"class":90},[76,169420,169286],{"class":126},[76,169422,130],{"class":90},[76,169424,169425,169428,169430,169433,169435,169437,169439],{"class":78,"line":145},[76,169426,169427],{"class":90},"        result ",[76,169429,370],{"class":82},[76,169431,169432],{"class":90}," func(",[76,169434,2718],{"class":82},[76,169436,169408],{"class":90},[76,169438,801],{"class":82},[76,169440,169441],{"class":90},"kwargs)\n",[76,169443,169444,169446,169448,169450],{"class":78,"line":152},[76,169445,1701],{"class":119},[76,169447,123],{"class":90},[76,169449,169302],{"class":126},[76,169451,130],{"class":90},[76,169453,169454,169456],{"class":78,"line":157},[76,169455,595],{"class":82},[76,169457,169458],{"class":90}," result\n",[76,169460,169461],{"class":78,"line":246},[76,169462,149],{"emptyLinePlaceholder":148},[76,169464,169465,169467],{"class":78,"line":251},[76,169466,441],{"class":82},[76,169468,169315],{"class":90},[76,169470,169471],{"class":78,"line":257},[76,169472,149],{"emptyLinePlaceholder":148},[76,169474,169475],{"class":78,"line":641},[76,169476,149],{"emptyLinePlaceholder":148},[76,169478,169479],{"class":78,"line":646},[76,169480,169328],{"class":86},[76,169482,169483,169485,169487],{"class":78,"line":659},[76,169484,83],{"class":82},[76,169486,359],{"class":86},[76,169488,362],{"class":90},[76,169490,169491,169493,169495,169497],{"class":78,"line":1608},[76,169492,441],{"class":82},[76,169494,373],{"class":90},[76,169496,376],{"class":82},[76,169498,379],{"class":90},[76,169500,169501],{"class":78,"line":1632},[76,169502,149],{"emptyLinePlaceholder":148},[76,169504,169505],{"class":78,"line":1637},[76,169506,149],{"emptyLinePlaceholder":148},[76,169508,169509,169511,169513,169515,169517,169519],{"class":78,"line":1642},[76,169510,478],{"class":119},[76,169512,168353],{"class":90},[76,169514,402],{"class":119},[76,169516,405],{"class":90},[76,169518,408],{"class":119},[76,169520,656],{"class":90},[19,169522,169523,169524,103040,169526,169528],{},"这个写法使用 ",[73,169525,168285],{},[73,169527,168400],{}," 接收原函数的所有参数。",[14,169530,169532],{"id":169531},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169534,125312],{},[26,169536,169537,169540,169543],{},[29,169538,169539],{},"给定一组学生数据。",[29,169541,169542],{},"封装函数，根据传入规则筛选学生。",[29,169544,169545],{},"筛选及格、优秀、未成年学生。",[19,169547,12092],{},[66,169549,169551],{"className":68,"code":169550,"language":70,"meta":71,"style":71},"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",[73,169552,169553,169561,169589,169617,169645,169649,169653,169657,169667,169675,169685,169692,169697,169703,169707,169711,169735,169758,169781,169785,169792,169799],{"__ignoreMap":71},[76,169554,169555,169557,169559],{"class":78,"line":79},[76,169556,161703],{"class":90},[76,169558,370],{"class":82},[76,169560,57478],{"class":90},[76,169562,169563,169565,169567,169569,169571,169573,169575,169577,169579,169581,169583,169585,169587],{"class":78,"line":94},[76,169564,150402],{"class":90},[76,169566,64707],{"class":126},[76,169568,53469],{"class":90},[76,169570,325],{"class":126},[76,169572,405],{"class":90},[76,169574,71152],{"class":126},[76,169576,53469],{"class":90},[76,169578,1214],{"class":119},[76,169580,405],{"class":90},[76,169582,153477],{"class":126},[76,169584,53469],{"class":90},[76,169586,3243],{"class":119},[76,169588,7012],{"class":90},[76,169590,169591,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611,169613,169615],{"class":78,"line":133},[76,169592,150402],{"class":90},[76,169594,64707],{"class":126},[76,169596,53469],{"class":90},[76,169598,334],{"class":126},[76,169600,405],{"class":90},[76,169602,71152],{"class":126},[76,169604,53469],{"class":90},[76,169606,2885],{"class":119},[76,169608,405],{"class":90},[76,169610,153477],{"class":126},[76,169612,53469],{"class":90},[76,169614,3069],{"class":119},[76,169616,7012],{"class":90},[76,169618,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643],{"class":78,"line":145},[76,169620,150402],{"class":90},[76,169622,64707],{"class":126},[76,169624,53469],{"class":90},[76,169626,161718],{"class":126},[76,169628,405],{"class":90},[76,169630,71152],{"class":126},[76,169632,53469],{"class":90},[76,169634,2934],{"class":119},[76,169636,405],{"class":90},[76,169638,153477],{"class":126},[76,169640,53469],{"class":90},[76,169642,3140],{"class":119},[76,169644,7012],{"class":90},[76,169646,169647],{"class":78,"line":152},[76,169648,35284],{"class":90},[76,169650,169651],{"class":78,"line":157},[76,169652,149],{"emptyLinePlaceholder":148},[76,169654,169655],{"class":78,"line":246},[76,169656,149],{"emptyLinePlaceholder":148},[76,169658,169659,169661,169664],{"class":78,"line":251},[76,169660,83],{"class":82},[76,169662,169663],{"class":86}," filter_students",[76,169665,169666],{"class":90},"(students, condition):\n",[76,169668,169669,169671,169673],{"class":78,"line":257},[76,169670,367],{"class":90},[76,169672,370],{"class":82},[76,169674,53870],{"class":90},[76,169676,169677,169679,169681,169683],{"class":78,"line":641},[76,169678,1469],{"class":82},[76,169680,154141],{"class":90},[76,169682,1475],{"class":82},[76,169684,154146],{"class":90},[76,169686,169687,169689],{"class":78,"line":646},[76,169688,4592],{"class":82},[76,169690,169691],{"class":90}," condition(student):\n",[76,169693,169694],{"class":78,"line":659},[76,169695,169696],{"class":90},"            result.append(student)\n",[76,169698,169699,169701],{"class":78,"line":1608},[76,169700,441],{"class":82},[76,169702,169458],{"class":90},[76,169704,169705],{"class":78,"line":1632},[76,169706,149],{"emptyLinePlaceholder":148},[76,169708,169709],{"class":78,"line":1637},[76,169710,149],{"emptyLinePlaceholder":148},[76,169712,169713,169715,169717,169720,169722,169725,169727,169729,169731,169733],{"class":78,"line":1642},[76,169714,167454],{"class":90},[76,169716,370],{"class":82},[76,169718,169719],{"class":90}," filter_students(students, ",[76,169721,168639],{"class":82},[76,169723,169724],{"class":90}," s: s[",[76,169726,153477],{"class":126},[76,169728,6525],{"class":90},[76,169730,611],{"class":82},[76,169732,159827],{"class":119},[76,169734,130],{"class":90},[76,169736,169737,169740,169742,169744,169746,169748,169750,169752,169754,169756],{"class":78,"line":1652},[76,169738,169739],{"class":90},"excellent ",[76,169741,370],{"class":82},[76,169743,169719],{"class":90},[76,169745,168639],{"class":82},[76,169747,169724],{"class":90},[76,169749,153477],{"class":126},[76,169751,6525],{"class":90},[76,169753,611],{"class":82},[76,169755,159778],{"class":119},[76,169757,130],{"class":90},[76,169759,169760,169763,169765,169767,169769,169771,169773,169775,169777,169779],{"class":78,"line":1660},[76,169761,169762],{"class":90},"under_age ",[76,169764,370],{"class":82},[76,169766,169719],{"class":90},[76,169768,168639],{"class":82},[76,169770,169724],{"class":90},[76,169772,71152],{"class":126},[76,169774,6525],{"class":90},[76,169776,584],{"class":82},[76,169778,614],{"class":119},[76,169780,130],{"class":90},[76,169782,169783],{"class":78,"line":1683},[76,169784,149],{"emptyLinePlaceholder":148},[76,169786,169787,169789],{"class":78,"line":1698},[76,169788,478],{"class":119},[76,169790,169791],{"class":90},"(passed)\n",[76,169793,169794,169796],{"class":78,"line":1711},[76,169795,478],{"class":119},[76,169797,169798],{"class":90},"(excellent)\n",[76,169800,169801,169803],{"class":78,"line":1717},[76,169802,478],{"class":119},[76,169804,169805],{"class":90},"(under_age)\n",[14,169807,169809],{"id":169808},"_715-易错点","7.15 易错点",[26,169811,169812,169815,169823,169828,169839],{},[29,169813,169814],{},"默认参数不要写可变对象。",[29,169816,169817,169819,169820,169822],{},[73,169818,168285],{}," 是元组，",[73,169821,168400],{}," 是字典。",[29,169824,169825,169827],{},[73,169826,168639],{}," 只适合简单表达式。",[29,169829,169830,103040,169832,169834,169835,169838],{},[73,169831,76071],{},[73,169833,82075],{}," 的结果是迭代器，常用 ",[73,169836,169837],{},"list()"," 转换查看。",[29,169840,169841],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169843,169845],{"id":169844},"_716-本章练习","7.16 本章练习",[26,169847,169848,169855,169861,169866,169871],{},[29,169849,169850,169851,169854],{},"写函数 ",[73,169852,169853],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169856,169850,169857,169860],{},[73,169858,169859],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169862,106388,169863,169865],{},[73,169864,168639],{}," 对学生列表按年龄排序。",[29,169867,106388,169868,169870],{},[73,169869,82075],{}," 找出成绩不及格的学生。",[29,169872,169873],{},"写一个装饰器，统计函数执行前后的提示信息。",[2178,169875,169876],{},"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":71,"searchDepth":94,"depth":94,"links":169878},[169879,169880,169881,169882,169883,169884,169888,169889,169890,169891,169896,169897,169898,169899,169900,169901],{"id":167737,"depth":94,"text":167738},{"id":167851,"depth":94,"text":167852},{"id":167940,"depth":94,"text":167941},{"id":168002,"depth":94,"text":168003},{"id":168148,"depth":94,"text":168149},{"id":168275,"depth":94,"text":168276,"children":169885},[169886,169887],{"id":168279,"depth":133,"text":168280},{"id":168394,"depth":133,"text":168395},{"id":168475,"depth":94,"text":168476},{"id":168633,"depth":94,"text":168634},{"id":168801,"depth":94,"text":168802},{"id":168883,"depth":94,"text":168884,"children":169892},[169893,169894,169895],{"id":168887,"depth":133,"text":168888},{"id":168958,"depth":133,"text":168959},{"id":169035,"depth":133,"text":169036},{"id":169160,"depth":94,"text":169161},{"id":169250,"depth":94,"text":169251},{"id":169381,"depth":94,"text":169382},{"id":169531,"depth":94,"text":169532},{"id":169808,"depth":94,"text":169809},{"id":169844,"depth":94,"text":169845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167729,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169908,"title":169909,"body":169910,"description":2201,"extension":2202,"meta":172429,"navigation":148,"path":172430,"seo":172431,"stem":172432,"__hash__":172433},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169911,"toc":172404},[169912,169915,169919,169922,169925,169956,169960,169964,169967,169994,169998,170001,170052,170055,170070,170073,170108,170112,170114,170138,170141,170201,170205,170209,170212,170269,170272,170292,170296,170299,170362,170366,170369,170425,170432,170456,170460,170463,170526,170530,170535,170586,170589,170593,170598,170665,170668,170750,170754,170759,170810,170813,170817,170820,170823,170831,170834,170880,170883,170929,170933,170939,170983,170986,171032,171035,171075,171078,171139,171143,171146,171236,171239,171381,171384,171451,171455,171458,171461,171602,171605,171683,171686,171862,171866,171868,171879,171881,172080,172084,172328,172332,172366,172370,172401],[10,169913,169909],{"id":169914},"_8-文件操作",[14,169916,169918],{"id":169917},"_81-文件操作的意义","8.1 文件操作的意义",[19,169920,169921],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169923,169924],{},"常见文件类型：",[26,169926,169927,169933,169939,169945,169951],{},[29,169928,169929,169932],{},[73,169930,169931],{},".txt","：普通文本。",[29,169934,169935,169938],{},[73,169936,169937],{},".csv","：表格文本。",[29,169940,169941,169944],{},[73,169942,169943],{},".json","：结构化数据。",[29,169946,169947,169950],{},[73,169948,169949],{},".log","：日志文件。",[29,169952,169953,169955],{},[73,169954,148372],{},"：Python 源代码。",[14,169957,169959],{"id":169958},"_82-路径","8.2 路径",[889,169961,169963],{"id":169962},"_821-相对路径","8.2.1 相对路径",[19,169965,169966],{},"相对当前运行目录：",[66,169968,169970],{"className":68,"code":169969,"language":70,"meta":71,"style":71},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[73,169971,169972],{"__ignoreMap":71},[76,169973,169974,169976,169978,169980,169982,169984,169986,169988,169990,169992],{"class":78,"line":79},[76,169975,88939],{"class":119},[76,169977,123],{"class":90},[76,169979,148813],{"class":126},[76,169981,405],{"class":90},[76,169983,148818],{"class":126},[76,169985,405],{"class":90},[76,169987,148823],{"class":7296},[76,169989,370],{"class":82},[76,169991,148828],{"class":126},[76,169993,130],{"class":90},[889,169995,169997],{"id":169996},"_822-绝对路径","8.2.2 绝对路径",[19,169999,170000],{},"从根目录或盘符开始：",[66,170002,170004],{"className":68,"code":170003,"language":70,"meta":71,"style":71},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[73,170005,170006,170029],{"__ignoreMap":71},[76,170007,170008,170010,170012,170015,170017,170019,170021,170023,170025,170027],{"class":78,"line":79},[76,170009,88939],{"class":119},[76,170011,123],{"class":90},[76,170013,170014],{"class":126},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[76,170016,405],{"class":90},[76,170018,148818],{"class":126},[76,170020,405],{"class":90},[76,170022,148823],{"class":7296},[76,170024,370],{"class":82},[76,170026,148828],{"class":126},[76,170028,130],{"class":90},[76,170030,170031,170033,170035,170038,170040,170042,170044,170046,170048,170050],{"class":78,"line":94},[76,170032,88939],{"class":119},[76,170034,123],{"class":90},[76,170036,170037],{"class":126},"\"D:\u002Fdata\u002Fdata.txt\"",[76,170039,405],{"class":90},[76,170041,148818],{"class":126},[76,170043,405],{"class":90},[76,170045,148823],{"class":7296},[76,170047,370],{"class":82},[76,170049,148828],{"class":126},[76,170051,130],{"class":90},[19,170053,170054],{},"Windows 路径建议写成：",[66,170056,170058],{"className":68,"code":170057,"language":70,"meta":71,"style":71},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[73,170059,170060],{"__ignoreMap":71},[76,170061,170062,170065,170067],{"class":78,"line":79},[76,170063,170064],{"class":90},"path ",[76,170066,370],{"class":82},[76,170068,170069],{"class":126}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170071,170072],{},"或原始字符串：",[66,170074,170076],{"className":68,"code":170075,"language":70,"meta":71,"style":71},"path = r\"D:\\data\\data.txt\"\n",[73,170077,170078],{"__ignoreMap":71},[76,170079,170080,170082,170084,170086,170088,170091,170094,170097,170099,170101,170103,170106],{"class":78,"line":79},[76,170081,170064],{"class":90},[76,170083,370],{"class":82},[76,170085,19170],{"class":82},[76,170087,307],{"class":126},[76,170089,170090],{"class":50009},"D:",[76,170092,170093],{"class":119},"\\d",[76,170095,170096],{"class":50009},"ata",[76,170098,170093],{"class":119},[76,170100,170096],{"class":50009},[76,170102,2819],{"class":119},[76,170104,170105],{"class":50009},"txt",[76,170107,27183],{"class":126},[14,170109,170111],{"id":170110},"_83-open函数","8.3 open函数",[19,170113,64],{},[66,170115,170117],{"className":68,"code":170116,"language":70,"meta":71,"style":71},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[73,170118,170119],{"__ignoreMap":71},[76,170120,170121,170123,170125,170127,170130,170132,170134,170136],{"class":78,"line":79},[76,170122,47389],{"class":7296},[76,170124,15617],{"class":82},[76,170126,148808],{"class":119},[76,170128,170129],{"class":90},"(文件路径, 打开模式, ",[76,170131,148823],{"class":7296},[76,170133,370],{"class":82},[76,170135,148828],{"class":126},[76,170137,130],{"class":90},[19,170139,170140],{},"常见模式：",[2404,170142,170143,170152],{},[2407,170144,170145],{},[2410,170146,170147,170150],{},[2413,170148,170149],{},"模式",[2413,170151,27919],{},[2451,170153,170154,170163,170172,170181,170191],{},[2410,170155,170156,170160],{},[2456,170157,170158],{},[73,170159,2929],{},[2456,170161,170162],{},"只读，文件不存在会报错",[2410,170164,170165,170169],{},[2456,170166,170167],{},[73,170168,3053],{},[2456,170170,170171],{},"只写，文件不存在会创建，存在会清空",[2410,170173,170174,170178],{},[2456,170175,170176],{},[73,170177,2503],{},[2456,170179,170180],{},"追加，文件不存在会创建",[2410,170182,170183,170188],{},[2456,170184,170185],{},[73,170186,170187],{},"rb",[2456,170189,170190],{},"二进制只读",[2410,170192,170193,170198],{},[2456,170194,170195],{},[73,170196,170197],{},"wb",[2456,170199,170200],{},"二进制只写",[14,170202,170204],{"id":170203},"_84-读取文件","8.4 读取文件",[889,170206,170208],{"id":170207},"_841-read","8.4.1 read",[19,170210,170211],{},"一次读取全部内容：",[66,170213,170215],{"className":68,"code":170214,"language":70,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[73,170216,170217,170243,170255,170262],{"__ignoreMap":71},[76,170218,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241],{"class":78,"line":79},[76,170220,47389],{"class":7296},[76,170222,15617],{"class":82},[76,170224,148808],{"class":119},[76,170226,123],{"class":90},[76,170228,148813],{"class":126},[76,170230,405],{"class":90},[76,170232,148818],{"class":126},[76,170234,405],{"class":90},[76,170236,148823],{"class":7296},[76,170238,370],{"class":82},[76,170240,148828],{"class":126},[76,170242,130],{"class":90},[76,170244,170245,170248,170250,170252],{"class":78,"line":94},[76,170246,170247],{"class":90},"content ",[76,170249,370],{"class":82},[76,170251,150170],{"class":7296},[76,170253,170254],{"class":90},".read()\n",[76,170256,170257,170259],{"class":78,"line":133},[76,170258,478],{"class":119},[76,170260,170261],{"class":90},"(content)\n",[76,170263,170264,170266],{"class":78,"line":145},[76,170265,47389],{"class":7296},[76,170267,170268],{"class":90},".close()\n",[19,170270,170271],{},"可以指定读取字符数：",[66,170273,170275],{"className":68,"code":170274,"language":70,"meta":71,"style":71},"content = file.read(10)\n",[73,170276,170277],{"__ignoreMap":71},[76,170278,170279,170281,170283,170285,170288,170290],{"class":78,"line":79},[76,170280,170247],{"class":90},[76,170282,370],{"class":82},[76,170284,150170],{"class":7296},[76,170286,170287],{"class":90},".read(",[76,170289,402],{"class":119},[76,170291,130],{"class":90},[889,170293,170295],{"id":170294},"_842-readline","8.4.2 readline",[19,170297,170298],{},"一次读取一行：",[66,170300,170302],{"className":68,"code":170301,"language":70,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[73,170303,170304,170330,170334,170345,170352,170356],{"__ignoreMap":71},[76,170305,170306,170308,170310,170312,170314,170316,170318,170320,170322,170324,170326,170328],{"class":78,"line":79},[76,170307,47389],{"class":7296},[76,170309,15617],{"class":82},[76,170311,148808],{"class":119},[76,170313,123],{"class":90},[76,170315,148813],{"class":126},[76,170317,405],{"class":90},[76,170319,148818],{"class":126},[76,170321,405],{"class":90},[76,170323,148823],{"class":7296},[76,170325,370],{"class":82},[76,170327,148828],{"class":126},[76,170329,130],{"class":90},[76,170331,170332],{"class":78,"line":94},[76,170333,149],{"emptyLinePlaceholder":148},[76,170335,170336,170338,170340,170342],{"class":78,"line":133},[76,170337,149269],{"class":90},[76,170339,370],{"class":82},[76,170341,150170],{"class":7296},[76,170343,170344],{"class":90},".readline()\n",[76,170346,170347,170349],{"class":78,"line":145},[76,170348,478],{"class":119},[76,170350,170351],{"class":90},"(line)\n",[76,170353,170354],{"class":78,"line":152},[76,170355,149],{"emptyLinePlaceholder":148},[76,170357,170358,170360],{"class":78,"line":157},[76,170359,47389],{"class":7296},[76,170361,170268],{"class":90},[889,170363,170365],{"id":170364},"_843-readlines","8.4.3 readlines",[19,170367,170368],{},"读取所有行，返回列表：",[66,170370,170372],{"className":68,"code":170371,"language":70,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[73,170373,170374,170400,170412,170419],{"__ignoreMap":71},[76,170375,170376,170378,170380,170382,170384,170386,170388,170390,170392,170394,170396,170398],{"class":78,"line":79},[76,170377,47389],{"class":7296},[76,170379,15617],{"class":82},[76,170381,148808],{"class":119},[76,170383,123],{"class":90},[76,170385,148813],{"class":126},[76,170387,405],{"class":90},[76,170389,148818],{"class":126},[76,170391,405],{"class":90},[76,170393,148823],{"class":7296},[76,170395,370],{"class":82},[76,170397,148828],{"class":126},[76,170399,130],{"class":90},[76,170401,170402,170405,170407,170409],{"class":78,"line":94},[76,170403,170404],{"class":90},"lines ",[76,170406,370],{"class":82},[76,170408,150170],{"class":7296},[76,170410,170411],{"class":90},".readlines()\n",[76,170413,170414,170416],{"class":78,"line":133},[76,170415,478],{"class":119},[76,170417,170418],{"class":90},"(lines)\n",[76,170420,170421,170423],{"class":78,"line":145},[76,170422,47389],{"class":7296},[76,170424,170268],{"class":90},[19,170426,170427,170428,170431],{},"每一行通常带有换行符，可以用 ",[73,170429,170430],{},"strip()"," 去掉：",[66,170433,170435],{"className":68,"code":170434,"language":70,"meta":71,"style":71},"for line in lines:\n    print(line.strip())\n",[73,170436,170437,170449],{"__ignoreMap":71},[76,170438,170439,170441,170444,170446],{"class":78,"line":79},[76,170440,5112],{"class":82},[76,170442,170443],{"class":90}," line ",[76,170445,1475],{"class":82},[76,170447,170448],{"class":90}," lines:\n",[76,170450,170451,170453],{"class":78,"line":94},[76,170452,120],{"class":119},[76,170454,170455],{"class":90},"(line.strip())\n",[889,170457,170459],{"id":170458},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170461,170462],{},"推荐读取大文件时使用：",[66,170464,170466],{"className":68,"code":170465,"language":70,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[73,170467,170468,170494,170498,170510,170516,170520],{"__ignoreMap":71},[76,170469,170470,170472,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492],{"class":78,"line":79},[76,170471,47389],{"class":7296},[76,170473,15617],{"class":82},[76,170475,148808],{"class":119},[76,170477,123],{"class":90},[76,170479,148813],{"class":126},[76,170481,405],{"class":90},[76,170483,148818],{"class":126},[76,170485,405],{"class":90},[76,170487,148823],{"class":7296},[76,170489,370],{"class":82},[76,170491,148828],{"class":126},[76,170493,130],{"class":90},[76,170495,170496],{"class":78,"line":94},[76,170497,149],{"emptyLinePlaceholder":148},[76,170499,170500,170502,170504,170506,170508],{"class":78,"line":133},[76,170501,5112],{"class":82},[76,170503,170443],{"class":90},[76,170505,1475],{"class":82},[76,170507,150170],{"class":7296},[76,170509,590],{"class":90},[76,170511,170512,170514],{"class":78,"line":145},[76,170513,120],{"class":119},[76,170515,170455],{"class":90},[76,170517,170518],{"class":78,"line":152},[76,170519,149],{"emptyLinePlaceholder":148},[76,170521,170522,170524],{"class":78,"line":157},[76,170523,47389],{"class":7296},[76,170525,170268],{"class":90},[14,170527,170529],{"id":170528},"_85-with语句","8.5 with语句",[19,170531,170532,170534],{},[73,170533,109855],{}," 会自动关闭文件，推荐使用。",[66,170536,170538],{"className":68,"code":170537,"language":70,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[73,170539,170540,170570,170580],{"__ignoreMap":71},[76,170541,170542,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568],{"class":78,"line":79},[76,170543,109855],{"class":82},[76,170545,148808],{"class":119},[76,170547,123],{"class":90},[76,170549,148813],{"class":126},[76,170551,405],{"class":90},[76,170553,148818],{"class":126},[76,170555,405],{"class":90},[76,170557,148823],{"class":7296},[76,170559,370],{"class":82},[76,170561,148828],{"class":126},[76,170563,15767],{"class":90},[76,170565,33426],{"class":82},[76,170567,150170],{"class":7296},[76,170569,590],{"class":90},[76,170571,170572,170574,170576,170578],{"class":78,"line":94},[76,170573,148840],{"class":90},[76,170575,370],{"class":82},[76,170577,150170],{"class":7296},[76,170579,170254],{"class":90},[76,170581,170582,170584],{"class":78,"line":133},[76,170583,120],{"class":119},[76,170585,170261],{"class":90},[19,170587,170588],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170590,170592],{"id":170591},"_86-写入文件","8.6 写入文件",[19,170594,170595,170597],{},[73,170596,3053],{}," 模式会清空原文件。",[66,170599,170601],{"className":68,"code":170600,"language":70,"meta":71,"style":71},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[73,170602,170603,170633,170650],{"__ignoreMap":71},[76,170604,170605,170607,170609,170611,170613,170615,170617,170619,170621,170623,170625,170627,170629,170631],{"class":78,"line":79},[76,170606,109855],{"class":82},[76,170608,148808],{"class":119},[76,170610,123],{"class":90},[76,170612,148813],{"class":126},[76,170614,405],{"class":90},[76,170616,153981],{"class":126},[76,170618,405],{"class":90},[76,170620,148823],{"class":7296},[76,170622,370],{"class":82},[76,170624,148828],{"class":126},[76,170626,15767],{"class":90},[76,170628,33426],{"class":82},[76,170630,150170],{"class":7296},[76,170632,590],{"class":90},[76,170634,170635,170638,170641,170644,170646,170648],{"class":78,"line":94},[76,170636,170637],{"class":7296},"    file",[76,170639,170640],{"class":90},".write(",[76,170642,170643],{"class":126},"\"hello",[76,170645,158518],{"class":119},[76,170647,307],{"class":126},[76,170649,130],{"class":90},[76,170651,170652,170654,170656,170659,170661,170663],{"class":78,"line":133},[76,170653,170637],{"class":7296},[76,170655,170640],{"class":90},[76,170657,170658],{"class":126},"\"python",[76,170660,158518],{"class":119},[76,170662,307],{"class":126},[76,170664,130],{"class":90},[19,170666,170667],{},"写入多行：",[66,170669,170671],{"className":68,"code":170670,"language":70,"meta":71,"style":71},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[73,170672,170673,170708,170712,170743],{"__ignoreMap":71},[76,170674,170675,170677,170679,170681,170684,170686,170688,170690,170693,170695,170697,170699,170702,170704,170706],{"class":78,"line":79},[76,170676,170404],{"class":90},[76,170678,370],{"class":82},[76,170680,54258],{"class":90},[76,170682,170683],{"class":126},"\"小明,18",[76,170685,158518],{"class":119},[76,170687,307],{"class":126},[76,170689,405],{"class":90},[76,170691,170692],{"class":126},"\"小红,17",[76,170694,158518],{"class":119},[76,170696,307],{"class":126},[76,170698,405],{"class":90},[76,170700,170701],{"class":126},"\"小刚,19",[76,170703,158518],{"class":119},[76,170705,307],{"class":126},[76,170707,35284],{"class":90},[76,170709,170710],{"class":78,"line":94},[76,170711,149],{"emptyLinePlaceholder":148},[76,170713,170714,170716,170718,170720,170723,170725,170727,170729,170731,170733,170735,170737,170739,170741],{"class":78,"line":133},[76,170715,109855],{"class":82},[76,170717,148808],{"class":119},[76,170719,123],{"class":90},[76,170721,170722],{"class":126},"\"students.txt\"",[76,170724,405],{"class":90},[76,170726,153981],{"class":126},[76,170728,405],{"class":90},[76,170730,148823],{"class":7296},[76,170732,370],{"class":82},[76,170734,148828],{"class":126},[76,170736,15767],{"class":90},[76,170738,33426],{"class":82},[76,170740,150170],{"class":7296},[76,170742,590],{"class":90},[76,170744,170745,170747],{"class":78,"line":145},[76,170746,170637],{"class":7296},[76,170748,170749],{"class":90},".writelines(lines)\n",[14,170751,170753],{"id":170752},"_87-追加文件","8.7 追加文件",[19,170755,170756,170758],{},[73,170757,2503],{}," 模式不会清空原内容，而是在末尾追加。",[66,170760,170762],{"className":68,"code":170761,"language":70,"meta":71,"style":71},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[73,170763,170764,170795],{"__ignoreMap":71},[76,170765,170766,170768,170770,170772,170775,170777,170779,170781,170783,170785,170787,170789,170791,170793],{"class":78,"line":79},[76,170767,109855],{"class":82},[76,170769,148808],{"class":119},[76,170771,123],{"class":90},[76,170773,170774],{"class":126},"\"log.txt\"",[76,170776,405],{"class":90},[76,170778,167078],{"class":126},[76,170780,405],{"class":90},[76,170782,148823],{"class":7296},[76,170784,370],{"class":82},[76,170786,148828],{"class":126},[76,170788,15767],{"class":90},[76,170790,33426],{"class":82},[76,170792,150170],{"class":7296},[76,170794,590],{"class":90},[76,170796,170797,170799,170801,170804,170806,170808],{"class":78,"line":94},[76,170798,170637],{"class":7296},[76,170800,170640],{"class":90},[76,170802,170803],{"class":126},"\"程序启动",[76,170805,158518],{"class":119},[76,170807,307],{"class":126},[76,170809,130],{"class":90},[19,170811,170812],{},"日志类文件常用追加模式。",[14,170814,170816],{"id":170815},"_88-文件编码","8.8 文件编码",[19,170818,170819],{},"编码决定文字如何保存为字节。",[19,170821,170822],{},"常见编码：",[26,170824,170825,170828],{},[29,170826,170827],{},"UTF-8：推荐。",[29,170829,170830],{},"GBK：部分 Windows 中文文件常见。",[19,170832,170833],{},"读取文件乱码时，可以尝试：",[66,170835,170837],{"className":68,"code":170836,"language":70,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[73,170838,170839,170870],{"__ignoreMap":71},[76,170840,170841,170843,170845,170847,170849,170851,170853,170855,170857,170859,170862,170864,170866,170868],{"class":78,"line":79},[76,170842,109855],{"class":82},[76,170844,148808],{"class":119},[76,170846,123],{"class":90},[76,170848,148813],{"class":126},[76,170850,405],{"class":90},[76,170852,148818],{"class":126},[76,170854,405],{"class":90},[76,170856,148823],{"class":7296},[76,170858,370],{"class":82},[76,170860,170861],{"class":126},"\"gbk\"",[76,170863,15767],{"class":90},[76,170865,33426],{"class":82},[76,170867,150170],{"class":7296},[76,170869,590],{"class":90},[76,170871,170872,170874,170876,170878],{"class":78,"line":94},[76,170873,148840],{"class":90},[76,170875,370],{"class":82},[76,170877,150170],{"class":7296},[76,170879,170254],{"class":90},[19,170881,170882],{},"写文件时建议统一 UTF-8：",[66,170884,170886],{"className":68,"code":170885,"language":70,"meta":71,"style":71},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[73,170887,170888,170918],{"__ignoreMap":71},[76,170889,170890,170892,170894,170896,170898,170900,170902,170904,170906,170908,170910,170912,170914,170916],{"class":78,"line":79},[76,170891,109855],{"class":82},[76,170893,148808],{"class":119},[76,170895,123],{"class":90},[76,170897,148813],{"class":126},[76,170899,405],{"class":90},[76,170901,153981],{"class":126},[76,170903,405],{"class":90},[76,170905,148823],{"class":7296},[76,170907,370],{"class":82},[76,170909,148828],{"class":126},[76,170911,15767],{"class":90},[76,170913,33426],{"class":82},[76,170915,150170],{"class":7296},[76,170917,590],{"class":90},[76,170919,170920,170922,170924,170927],{"class":78,"line":94},[76,170921,170637],{"class":7296},[76,170923,170640],{"class":90},[76,170925,170926],{"class":126},"\"中文内容\"",[76,170928,130],{"class":90},[14,170930,170932],{"id":170931},"_89-pathlib","8.9 pathlib",[19,170934,170935,170938],{},[73,170936,170937],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[66,170940,170942],{"className":68,"code":170941,"language":70,"meta":71,"style":71},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[73,170943,170944,170954,170958,170976],{"__ignoreMap":71},[76,170945,170946,170948,170950,170952],{"class":78,"line":79},[76,170947,32781],{"class":82},[76,170949,110333],{"class":90},[76,170951,32438],{"class":82},[76,170953,110338],{"class":90},[76,170955,170956],{"class":78,"line":94},[76,170957,149],{"emptyLinePlaceholder":148},[76,170959,170960,170962,170964,170966,170969,170971,170973],{"class":78,"line":133},[76,170961,170064],{"class":90},[76,170963,370],{"class":82},[76,170965,110567],{"class":90},[76,170967,170968],{"class":126},"\"data\"",[76,170970,15767],{"class":90},[76,170972,795],{"class":82},[76,170974,170975],{"class":126}," \"students.txt\"\n",[76,170977,170978,170980],{"class":78,"line":145},[76,170979,478],{"class":119},[76,170981,170982],{"class":90},"(path)\n",[19,170984,170985],{},"创建目录：",[66,170987,170989],{"className":68,"code":170988,"language":70,"meta":71,"style":71},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[73,170990,170991,171001,171005,171018],{"__ignoreMap":71},[76,170992,170993,170995,170997,170999],{"class":78,"line":79},[76,170994,32781],{"class":82},[76,170996,110333],{"class":90},[76,170998,32438],{"class":82},[76,171000,110338],{"class":90},[76,171002,171003],{"class":78,"line":94},[76,171004,149],{"emptyLinePlaceholder":148},[76,171006,171007,171010,171012,171014,171016],{"class":78,"line":133},[76,171008,171009],{"class":90},"data_dir ",[76,171011,370],{"class":82},[76,171013,110567],{"class":90},[76,171015,170968],{"class":126},[76,171017,130],{"class":90},[76,171019,171020,171023,171026,171028,171030],{"class":78,"line":145},[76,171021,171022],{"class":90},"data_dir.mkdir(",[76,171024,171025],{"class":7296},"exist_ok",[76,171027,370],{"class":82},[76,171029,33519],{"class":119},[76,171031,130],{"class":90},[19,171033,171034],{},"判断文件是否存在：",[66,171036,171038],{"className":68,"code":171037,"language":70,"meta":71,"style":71},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[73,171039,171040,171053,171057,171064],{"__ignoreMap":71},[76,171041,171042,171044,171046,171048,171051],{"class":78,"line":79},[76,171043,170064],{"class":90},[76,171045,370],{"class":82},[76,171047,110567],{"class":90},[76,171049,171050],{"class":126},"\"data\u002Fstudents.txt\"",[76,171052,130],{"class":90},[76,171054,171055],{"class":78,"line":94},[76,171056,149],{"emptyLinePlaceholder":148},[76,171058,171059,171061],{"class":78,"line":133},[76,171060,723],{"class":82},[76,171062,171063],{"class":90}," path.exists():\n",[76,171065,171066,171068,171070,171073],{"class":78,"line":145},[76,171067,120],{"class":119},[76,171069,123],{"class":90},[76,171071,171072],{"class":126},"\"文件存在\"",[76,171074,130],{"class":90},[19,171076,171077],{},"读写文本：",[66,171079,171081],{"className":68,"code":171080,"language":70,"meta":71,"style":71},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[73,171082,171083,171095,171099,171116,171133],{"__ignoreMap":71},[76,171084,171085,171087,171089,171091,171093],{"class":78,"line":79},[76,171086,170064],{"class":90},[76,171088,370],{"class":82},[76,171090,110567],{"class":90},[76,171092,148813],{"class":126},[76,171094,130],{"class":90},[76,171096,171097],{"class":78,"line":94},[76,171098,149],{"emptyLinePlaceholder":148},[76,171100,171101,171104,171106,171108,171110,171112,171114],{"class":78,"line":133},[76,171102,171103],{"class":90},"path.write_text(",[76,171105,147896],{"class":126},[76,171107,405],{"class":90},[76,171109,148823],{"class":7296},[76,171111,370],{"class":82},[76,171113,148828],{"class":126},[76,171115,130],{"class":90},[76,171117,171118,171120,171122,171125,171127,171129,171131],{"class":78,"line":145},[76,171119,170247],{"class":90},[76,171121,370],{"class":82},[76,171123,171124],{"class":90}," path.read_text(",[76,171126,148823],{"class":7296},[76,171128,370],{"class":82},[76,171130,148828],{"class":126},[76,171132,130],{"class":90},[76,171134,171135,171137],{"class":78,"line":152},[76,171136,478],{"class":119},[76,171138,170261],{"class":90},[14,171140,171142],{"id":171141},"_810-json文件","8.10 JSON文件",[19,171144,171145],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[66,171147,171149],{"className":68,"code":171148,"language":70,"meta":71,"style":71},"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",[73,171150,171151,171157,171161,171169,171179,171189,171197,171201,171205,171230],{"__ignoreMap":71},[76,171152,171153,171155],{"class":78,"line":79},[76,171154,32438],{"class":82},[76,171156,149108],{"class":90},[76,171158,171159],{"class":78,"line":94},[76,171160,149],{"emptyLinePlaceholder":148},[76,171162,171163,171165,171167],{"class":78,"line":133},[76,171164,151496],{"class":90},[76,171166,370],{"class":82},[76,171168,17623],{"class":90},[76,171170,171171,171173,171175,171177],{"class":78,"line":145},[76,171172,149037],{"class":126},[76,171174,53469],{"class":90},[76,171176,325],{"class":126},[76,171178,33509],{"class":90},[76,171180,171181,171183,171185,171187],{"class":78,"line":152},[76,171182,166290],{"class":126},[76,171184,53469],{"class":90},[76,171186,1214],{"class":119},[76,171188,33509],{"class":90},[76,171190,171191,171193,171195],{"class":78,"line":157},[76,171192,166301],{"class":126},[76,171194,53469],{"class":90},[76,171196,166306],{"class":119},[76,171198,171199],{"class":78,"line":246},[76,171200,3685],{"class":90},[76,171202,171203],{"class":78,"line":251},[76,171204,149],{"emptyLinePlaceholder":148},[76,171206,171207,171209,171211,171214,171216,171218,171220,171222,171224,171226,171228],{"class":78,"line":257},[76,171208,158437],{"class":90},[76,171210,370],{"class":82},[76,171212,171213],{"class":90}," json.dumps(student, ",[76,171215,149154],{"class":7296},[76,171217,370],{"class":82},[76,171219,36025],{"class":119},[76,171221,405],{"class":90},[76,171223,154017],{"class":7296},[76,171225,370],{"class":82},[76,171227,2345],{"class":119},[76,171229,130],{"class":90},[76,171231,171232,171234],{"class":78,"line":641},[76,171233,478],{"class":119},[76,171235,165824],{"class":90},[19,171237,171238],{},"写入 JSON 文件：",[66,171240,171242],{"className":68,"code":171241,"language":70,"meta":71,"style":71},"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",[73,171243,171244,171250,171254,171262,171290,171318,171322,171326,171356],{"__ignoreMap":71},[76,171245,171246,171248],{"class":78,"line":79},[76,171247,32438],{"class":82},[76,171249,149108],{"class":90},[76,171251,171252],{"class":78,"line":94},[76,171253,149],{"emptyLinePlaceholder":148},[76,171255,171256,171258,171260],{"class":78,"line":133},[76,171257,161703],{"class":90},[76,171259,370],{"class":82},[76,171261,57478],{"class":90},[76,171263,171264,171266,171268,171270,171272,171274,171276,171278,171280,171282,171284,171286,171288],{"class":78,"line":145},[76,171265,150402],{"class":90},[76,171267,64707],{"class":126},[76,171269,53469],{"class":90},[76,171271,325],{"class":126},[76,171273,405],{"class":90},[76,171275,71152],{"class":126},[76,171277,53469],{"class":90},[76,171279,1214],{"class":119},[76,171281,405],{"class":90},[76,171283,153477],{"class":126},[76,171285,53469],{"class":90},[76,171287,3243],{"class":119},[76,171289,7012],{"class":90},[76,171291,171292,171294,171296,171298,171300,171302,171304,171306,171308,171310,171312,171314,171316],{"class":78,"line":152},[76,171293,150402],{"class":90},[76,171295,64707],{"class":126},[76,171297,53469],{"class":90},[76,171299,334],{"class":126},[76,171301,405],{"class":90},[76,171303,71152],{"class":126},[76,171305,53469],{"class":90},[76,171307,2885],{"class":119},[76,171309,405],{"class":90},[76,171311,153477],{"class":126},[76,171313,53469],{"class":90},[76,171315,3069],{"class":119},[76,171317,7012],{"class":90},[76,171319,171320],{"class":78,"line":157},[76,171321,35284],{"class":90},[76,171323,171324],{"class":78,"line":246},[76,171325,149],{"emptyLinePlaceholder":148},[76,171327,171328,171330,171332,171334,171336,171338,171340,171342,171344,171346,171348,171350,171352,171354],{"class":78,"line":251},[76,171329,109855],{"class":82},[76,171331,148808],{"class":119},[76,171333,123],{"class":90},[76,171335,153836],{"class":126},[76,171337,405],{"class":90},[76,171339,153981],{"class":126},[76,171341,405],{"class":90},[76,171343,148823],{"class":7296},[76,171345,370],{"class":82},[76,171347,148828],{"class":126},[76,171349,15767],{"class":90},[76,171351,33426],{"class":82},[76,171353,150170],{"class":7296},[76,171355,590],{"class":90},[76,171357,171358,171361,171363,171365,171367,171369,171371,171373,171375,171377,171379],{"class":78,"line":257},[76,171359,171360],{"class":90},"    json.dump(students, ",[76,171362,47389],{"class":7296},[76,171364,405],{"class":90},[76,171366,149154],{"class":7296},[76,171368,370],{"class":82},[76,171370,36025],{"class":119},[76,171372,405],{"class":90},[76,171374,154017],{"class":7296},[76,171376,370],{"class":82},[76,171378,2345],{"class":119},[76,171380,130],{"class":90},[19,171382,171383],{},"读取 JSON 文件：",[66,171385,171387],{"className":68,"code":171386,"language":70,"meta":71,"style":71},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[73,171388,171389,171395,171399,171429,171441,171445],{"__ignoreMap":71},[76,171390,171391,171393],{"class":78,"line":79},[76,171392,32438],{"class":82},[76,171394,149108],{"class":90},[76,171396,171397],{"class":78,"line":94},[76,171398,149],{"emptyLinePlaceholder":148},[76,171400,171401,171403,171405,171407,171409,171411,171413,171415,171417,171419,171421,171423,171425,171427],{"class":78,"line":133},[76,171402,109855],{"class":82},[76,171404,148808],{"class":119},[76,171406,123],{"class":90},[76,171408,153836],{"class":126},[76,171410,405],{"class":90},[76,171412,148818],{"class":126},[76,171414,405],{"class":90},[76,171416,148823],{"class":7296},[76,171418,370],{"class":82},[76,171420,148828],{"class":126},[76,171422,15767],{"class":90},[76,171424,33426],{"class":82},[76,171426,150170],{"class":7296},[76,171428,590],{"class":90},[76,171430,171431,171433,171435,171437,171439],{"class":78,"line":145},[76,171432,155039],{"class":90},[76,171434,370],{"class":82},[76,171436,150181],{"class":90},[76,171438,47389],{"class":7296},[76,171440,130],{"class":90},[76,171442,171443],{"class":78,"line":152},[76,171444,149],{"emptyLinePlaceholder":148},[76,171446,171447,171449],{"class":78,"line":157},[76,171448,478],{"class":119},[76,171450,166748],{"class":90},[14,171452,171454],{"id":171453},"_811-csv文件","8.11 CSV文件",[19,171456,171457],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171459,171460],{},"写入 CSV：",[66,171462,171464],{"className":68,"code":171463,"language":70,"meta":71,"style":71},"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",[73,171465,171466,171473,171477,171485,171503,171519,171535,171539,171543,171583,171597],{"__ignoreMap":71},[76,171467,171468,171470],{"class":78,"line":79},[76,171469,32438],{"class":82},[76,171471,171472],{"class":90}," csv\n",[76,171474,171475],{"class":78,"line":94},[76,171476,149],{"emptyLinePlaceholder":148},[76,171478,171479,171481,171483],{"class":78,"line":133},[76,171480,161703],{"class":90},[76,171482,370],{"class":82},[76,171484,57478],{"class":90},[76,171486,171487,171490,171492,171494,171496,171498,171501],{"class":78,"line":145},[76,171488,171489],{"class":90},"    [",[76,171491,75126],{"class":126},[76,171493,405],{"class":90},[76,171495,75159],{"class":126},[76,171497,405],{"class":90},[76,171499,171500],{"class":126},"\"成绩\"",[76,171502,89860],{"class":90},[76,171504,171505,171507,171509,171511,171513,171515,171517],{"class":78,"line":152},[76,171506,171489],{"class":90},[76,171508,325],{"class":126},[76,171510,405],{"class":90},[76,171512,1214],{"class":119},[76,171514,405],{"class":90},[76,171516,3243],{"class":119},[76,171518,89860],{"class":90},[76,171520,171521,171523,171525,171527,171529,171531,171533],{"class":78,"line":157},[76,171522,171489],{"class":90},[76,171524,334],{"class":126},[76,171526,405],{"class":90},[76,171528,2885],{"class":119},[76,171530,405],{"class":90},[76,171532,3069],{"class":119},[76,171534,89860],{"class":90},[76,171536,171537],{"class":78,"line":246},[76,171538,35284],{"class":90},[76,171540,171541],{"class":78,"line":251},[76,171542,149],{"emptyLinePlaceholder":148},[76,171544,171545,171547,171549,171551,171554,171556,171558,171560,171562,171564,171566,171568,171571,171573,171575,171577,171579,171581],{"class":78,"line":257},[76,171546,109855],{"class":82},[76,171548,148808],{"class":119},[76,171550,123],{"class":90},[76,171552,171553],{"class":126},"\"students.csv\"",[76,171555,405],{"class":90},[76,171557,153981],{"class":126},[76,171559,405],{"class":90},[76,171561,148823],{"class":7296},[76,171563,370],{"class":82},[76,171565,148828],{"class":126},[76,171567,405],{"class":90},[76,171569,171570],{"class":7296},"newline",[76,171572,370],{"class":82},[76,171574,9730],{"class":126},[76,171576,15767],{"class":90},[76,171578,33426],{"class":82},[76,171580,150170],{"class":7296},[76,171582,590],{"class":90},[76,171584,171585,171588,171590,171593,171595],{"class":78,"line":641},[76,171586,171587],{"class":90},"    writer ",[76,171589,370],{"class":82},[76,171591,171592],{"class":90}," csv.writer(",[76,171594,47389],{"class":7296},[76,171596,130],{"class":90},[76,171598,171599],{"class":78,"line":646},[76,171600,171601],{"class":90},"    writer.writerows(students)\n",[19,171603,171604],{},"读取 CSV：",[66,171606,171608],{"className":68,"code":171607,"language":70,"meta":71,"style":71},"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",[73,171609,171610,171616,171620,171650,171664,171676],{"__ignoreMap":71},[76,171611,171612,171614],{"class":78,"line":79},[76,171613,32438],{"class":82},[76,171615,171472],{"class":90},[76,171617,171618],{"class":78,"line":94},[76,171619,149],{"emptyLinePlaceholder":148},[76,171621,171622,171624,171626,171628,171630,171632,171634,171636,171638,171640,171642,171644,171646,171648],{"class":78,"line":133},[76,171623,109855],{"class":82},[76,171625,148808],{"class":119},[76,171627,123],{"class":90},[76,171629,171553],{"class":126},[76,171631,405],{"class":90},[76,171633,148818],{"class":126},[76,171635,405],{"class":90},[76,171637,148823],{"class":7296},[76,171639,370],{"class":82},[76,171641,148828],{"class":126},[76,171643,15767],{"class":90},[76,171645,33426],{"class":82},[76,171647,150170],{"class":7296},[76,171649,590],{"class":90},[76,171651,171652,171655,171657,171660,171662],{"class":78,"line":145},[76,171653,171654],{"class":90},"    reader ",[76,171656,370],{"class":82},[76,171658,171659],{"class":90}," csv.reader(",[76,171661,47389],{"class":7296},[76,171663,130],{"class":90},[76,171665,171666,171668,171671,171673],{"class":78,"line":152},[76,171667,1469],{"class":82},[76,171669,171670],{"class":90}," row ",[76,171672,1475],{"class":82},[76,171674,171675],{"class":90}," reader:\n",[76,171677,171678,171680],{"class":78,"line":157},[76,171679,1701],{"class":119},[76,171681,171682],{"class":90},"(row)\n",[19,171684,171685],{},"使用字典写入：",[66,171687,171689],{"className":68,"code":171688,"language":70,"meta":71,"style":71},"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",[73,171690,171691,171697,171701,171709,171737,171765,171769,171773,171811,171832,171853,171858],{"__ignoreMap":71},[76,171692,171693,171695],{"class":78,"line":79},[76,171694,32438],{"class":82},[76,171696,171472],{"class":90},[76,171698,171699],{"class":78,"line":94},[76,171700,149],{"emptyLinePlaceholder":148},[76,171702,171703,171705,171707],{"class":78,"line":133},[76,171704,161703],{"class":90},[76,171706,370],{"class":82},[76,171708,57478],{"class":90},[76,171710,171711,171713,171715,171717,171719,171721,171723,171725,171727,171729,171731,171733,171735],{"class":78,"line":145},[76,171712,150402],{"class":90},[76,171714,64707],{"class":126},[76,171716,53469],{"class":90},[76,171718,325],{"class":126},[76,171720,405],{"class":90},[76,171722,71152],{"class":126},[76,171724,53469],{"class":90},[76,171726,1214],{"class":119},[76,171728,405],{"class":90},[76,171730,153477],{"class":126},[76,171732,53469],{"class":90},[76,171734,3243],{"class":119},[76,171736,7012],{"class":90},[76,171738,171739,171741,171743,171745,171747,171749,171751,171753,171755,171757,171759,171761,171763],{"class":78,"line":152},[76,171740,150402],{"class":90},[76,171742,64707],{"class":126},[76,171744,53469],{"class":90},[76,171746,334],{"class":126},[76,171748,405],{"class":90},[76,171750,71152],{"class":126},[76,171752,53469],{"class":90},[76,171754,2885],{"class":119},[76,171756,405],{"class":90},[76,171758,153477],{"class":126},[76,171760,53469],{"class":90},[76,171762,3069],{"class":119},[76,171764,7012],{"class":90},[76,171766,171767],{"class":78,"line":157},[76,171768,35284],{"class":90},[76,171770,171771],{"class":78,"line":246},[76,171772,149],{"emptyLinePlaceholder":148},[76,171774,171775,171777,171779,171781,171783,171785,171787,171789,171791,171793,171795,171797,171799,171801,171803,171805,171807,171809],{"class":78,"line":251},[76,171776,109855],{"class":82},[76,171778,148808],{"class":119},[76,171780,123],{"class":90},[76,171782,171553],{"class":126},[76,171784,405],{"class":90},[76,171786,153981],{"class":126},[76,171788,405],{"class":90},[76,171790,148823],{"class":7296},[76,171792,370],{"class":82},[76,171794,148828],{"class":126},[76,171796,405],{"class":90},[76,171798,171570],{"class":7296},[76,171800,370],{"class":82},[76,171802,9730],{"class":126},[76,171804,15767],{"class":90},[76,171806,33426],{"class":82},[76,171808,150170],{"class":7296},[76,171810,590],{"class":90},[76,171812,171813,171816,171818,171820,171822,171824,171826,171828,171830],{"class":78,"line":257},[76,171814,171815],{"class":90},"    fieldnames ",[76,171817,370],{"class":82},[76,171819,54258],{"class":90},[76,171821,64707],{"class":126},[76,171823,405],{"class":90},[76,171825,71152],{"class":126},[76,171827,405],{"class":90},[76,171829,153477],{"class":126},[76,171831,35284],{"class":90},[76,171833,171834,171836,171838,171841,171843,171845,171848,171850],{"class":78,"line":641},[76,171835,171587],{"class":90},[76,171837,370],{"class":82},[76,171839,171840],{"class":90}," csv.DictWriter(",[76,171842,47389],{"class":7296},[76,171844,405],{"class":90},[76,171846,171847],{"class":7296},"fieldnames",[76,171849,370],{"class":82},[76,171851,171852],{"class":90},"fieldnames)\n",[76,171854,171855],{"class":78,"line":646},[76,171856,171857],{"class":90},"    writer.writeheader()\n",[76,171859,171860],{"class":78,"line":659},[76,171861,171601],{"class":90},[14,171863,171865],{"id":171864},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171867,125312],{},[26,171869,171870,171873,171876],{},[29,171871,171872],{},"读取文本文件。",[29,171874,171875],{},"统计每个单词出现次数。",[29,171877,171878],{},"输出出现次数最多的前 10 个单词。",[19,171880,12092],{},[66,171882,171884],{"className":68,"code":171883,"language":70,"meta":71,"style":71},"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",[73,171885,171886,171896,171900,171913,171929,171933,171943,171952,171956,171968,171988,171997,172001,172019,172023,172053,172057,172073],{"__ignoreMap":71},[76,171887,171888,171890,171892,171894],{"class":78,"line":79},[76,171889,32781],{"class":82},[76,171891,110333],{"class":90},[76,171893,32438],{"class":82},[76,171895,110338],{"class":90},[76,171897,171898],{"class":78,"line":94},[76,171899,149],{"emptyLinePlaceholder":148},[76,171901,171902,171904,171906,171908,171911],{"class":78,"line":133},[76,171903,170064],{"class":90},[76,171905,370],{"class":82},[76,171907,110567],{"class":90},[76,171909,171910],{"class":126},"\"article.txt\"",[76,171912,130],{"class":90},[76,171914,171915,171917,171919,171921,171923,171925,171927],{"class":78,"line":145},[76,171916,170247],{"class":90},[76,171918,370],{"class":82},[76,171920,171124],{"class":90},[76,171922,148823],{"class":7296},[76,171924,370],{"class":82},[76,171926,148828],{"class":126},[76,171928,130],{"class":90},[76,171930,171931],{"class":78,"line":152},[76,171932,149],{"emptyLinePlaceholder":148},[76,171934,171935,171938,171940],{"class":78,"line":157},[76,171936,171937],{"class":90},"words ",[76,171939,370],{"class":82},[76,171941,171942],{"class":90}," content.lower().split()\n",[76,171944,171945,171948,171950],{"class":78,"line":246},[76,171946,171947],{"class":90},"counter ",[76,171949,370],{"class":82},[76,171951,89892],{"class":90},[76,171953,171954],{"class":78,"line":251},[76,171955,149],{"emptyLinePlaceholder":148},[76,171957,171958,171960,171963,171965],{"class":78,"line":257},[76,171959,5112],{"class":82},[76,171961,171962],{"class":90}," word ",[76,171964,1475],{"class":82},[76,171966,171967],{"class":90}," words:\n",[76,171969,171970,171973,171975,171978,171981,171983,171986],{"class":78,"line":641},[76,171971,171972],{"class":90},"    word ",[76,171974,370],{"class":82},[76,171976,171977],{"class":90}," word.strip(",[76,171979,171980],{"class":126},"\".,!?;:",[76,171982,158488],{"class":119},[76,171984,171985],{"class":126},"'()[]\"",[76,171987,130],{"class":90},[76,171989,171990,171992,171994],{"class":78,"line":646},[76,171991,578],{"class":82},[76,171993,40967],{"class":82},[76,171995,171996],{"class":90}," word:\n",[76,171998,171999],{"class":78,"line":659},[76,172000,150529],{"class":82},[76,172002,172003,172006,172008,172011,172013,172015,172017],{"class":78,"line":1608},[76,172004,172005],{"class":90},"    counter[word] ",[76,172007,370],{"class":82},[76,172009,172010],{"class":90}," counter.get(word, ",[76,172012,1294],{"class":119},[76,172014,15767],{"class":90},[76,172016,376],{"class":82},[76,172018,1063],{"class":119},[76,172020,172021],{"class":78,"line":1632},[76,172022,149],{"emptyLinePlaceholder":148},[76,172024,172025,172028,172030,172032,172035,172037,172039,172041,172043,172045,172047,172049,172051],{"class":78,"line":1637},[76,172026,172027],{"class":90},"items ",[76,172029,370],{"class":82},[76,172031,165357],{"class":119},[76,172033,172034],{"class":90},"(counter.items(), ",[76,172036,155940],{"class":7296},[76,172038,155943],{"class":82},[76,172040,155946],{"class":90},[76,172042,669],{"class":119},[76,172044,114222],{"class":90},[76,172046,165281],{"class":7296},[76,172048,370],{"class":82},[76,172050,33519],{"class":119},[76,172052,130],{"class":90},[76,172054,172055],{"class":78,"line":1642},[76,172056,149],{"emptyLinePlaceholder":148},[76,172058,172059,172061,172064,172066,172069,172071],{"class":78,"line":1652},[76,172060,5112],{"class":82},[76,172062,172063],{"class":90}," word, count ",[76,172065,1475],{"class":82},[76,172067,172068],{"class":90}," items[:",[76,172070,402],{"class":119},[76,172072,167508],{"class":90},[76,172074,172075,172077],{"class":78,"line":1660},[76,172076,120],{"class":119},[76,172078,172079],{"class":90},"(word, count)\n",[14,172081,172083],{"id":172082},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[66,172085,172087],{"className":68,"code":172086,"language":70,"meta":71,"style":71},"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",[73,172088,172089,172095,172105,172109,172121,172125,172129,172137,172147,172153,172157,172187,172197,172201,172205,172213,172243,172267,172271,172275,172283,172312,172317],{"__ignoreMap":71},[76,172090,172091,172093],{"class":78,"line":79},[76,172092,32438],{"class":82},[76,172094,149108],{"class":90},[76,172096,172097,172099,172101,172103],{"class":78,"line":94},[76,172098,32781],{"class":82},[76,172100,110333],{"class":90},[76,172102,32438],{"class":82},[76,172104,110338],{"class":90},[76,172106,172107],{"class":78,"line":133},[76,172108,149],{"emptyLinePlaceholder":148},[76,172110,172111,172113,172115,172117,172119],{"class":78,"line":145},[76,172112,153829],{"class":119},[76,172114,15617],{"class":82},[76,172116,110567],{"class":90},[76,172118,153836],{"class":126},[76,172120,130],{"class":90},[76,172122,172123],{"class":78,"line":152},[76,172124,149],{"emptyLinePlaceholder":148},[76,172126,172127],{"class":78,"line":157},[76,172128,149],{"emptyLinePlaceholder":148},[76,172130,172131,172133,172135],{"class":78,"line":246},[76,172132,83],{"class":82},[76,172134,153853],{"class":86},[76,172136,91],{"class":90},[76,172138,172139,172141,172143,172145],{"class":78,"line":251},[76,172140,578],{"class":82},[76,172142,40967],{"class":82},[76,172144,153864],{"class":119},[76,172146,153867],{"class":90},[76,172148,172149,172151],{"class":78,"line":257},[76,172150,595],{"class":82},[76,172152,53870],{"class":90},[76,172154,172155],{"class":78,"line":641},[76,172156,149],{"emptyLinePlaceholder":148},[76,172158,172159,172161,172163,172165,172167,172169,172171,172173,172175,172177,172179,172181,172183,172185],{"class":78,"line":646},[76,172160,36216],{"class":82},[76,172162,148808],{"class":119},[76,172164,123],{"class":90},[76,172166,153829],{"class":119},[76,172168,405],{"class":90},[76,172170,148818],{"class":126},[76,172172,405],{"class":90},[76,172174,148823],{"class":7296},[76,172176,370],{"class":82},[76,172178,148828],{"class":126},[76,172180,15767],{"class":90},[76,172182,33426],{"class":82},[76,172184,150170],{"class":7296},[76,172186,590],{"class":90},[76,172188,172189,172191,172193,172195],{"class":78,"line":659},[76,172190,595],{"class":82},[76,172192,150181],{"class":90},[76,172194,47389],{"class":7296},[76,172196,130],{"class":90},[76,172198,172199],{"class":78,"line":1608},[76,172200,149],{"emptyLinePlaceholder":148},[76,172202,172203],{"class":78,"line":1632},[76,172204,149],{"emptyLinePlaceholder":148},[76,172206,172207,172209,172211],{"class":78,"line":1637},[76,172208,83],{"class":82},[76,172210,153963],{"class":86},[76,172212,153966],{"class":90},[76,172214,172215,172217,172219,172221,172223,172225,172227,172229,172231,172233,172235,172237,172239,172241],{"class":78,"line":1642},[76,172216,36216],{"class":82},[76,172218,148808],{"class":119},[76,172220,123],{"class":90},[76,172222,153829],{"class":119},[76,172224,405],{"class":90},[76,172226,153981],{"class":126},[76,172228,405],{"class":90},[76,172230,148823],{"class":7296},[76,172232,370],{"class":82},[76,172234,148828],{"class":126},[76,172236,15767],{"class":90},[76,172238,33426],{"class":82},[76,172240,150170],{"class":7296},[76,172242,590],{"class":90},[76,172244,172245,172247,172249,172251,172253,172255,172257,172259,172261,172263,172265],{"class":78,"line":1652},[76,172246,154002],{"class":90},[76,172248,47389],{"class":7296},[76,172250,405],{"class":90},[76,172252,149154],{"class":7296},[76,172254,370],{"class":82},[76,172256,36025],{"class":119},[76,172258,405],{"class":90},[76,172260,154017],{"class":7296},[76,172262,370],{"class":82},[76,172264,2345],{"class":119},[76,172266,130],{"class":90},[76,172268,172269],{"class":78,"line":1660},[76,172270,149],{"emptyLinePlaceholder":148},[76,172272,172273],{"class":78,"line":1683},[76,172274,149],{"emptyLinePlaceholder":148},[76,172276,172277,172279,172281],{"class":78,"line":1698},[76,172278,161703],{"class":90},[76,172280,370],{"class":82},[76,172282,155044],{"class":90},[76,172284,172285,172288,172290,172292,172294,172296,172298,172300,172302,172304,172306,172308,172310],{"class":78,"line":1711},[76,172286,172287],{"class":90},"students.append({",[76,172289,64707],{"class":126},[76,172291,53469],{"class":90},[76,172293,325],{"class":126},[76,172295,405],{"class":90},[76,172297,71152],{"class":126},[76,172299,53469],{"class":90},[76,172301,1214],{"class":119},[76,172303,405],{"class":90},[76,172305,153477],{"class":126},[76,172307,53469],{"class":90},[76,172309,3243],{"class":119},[76,172311,166905],{"class":90},[76,172313,172314],{"class":78,"line":1717},[76,172315,172316],{"class":90},"save_students(students)\n",[76,172318,172319,172321,172323,172326],{"class":78,"line":1728},[76,172320,478],{"class":119},[76,172322,123],{"class":90},[76,172324,172325],{"class":126},"\"保存成功\"",[76,172327,130],{"class":90},[14,172329,172331],{"id":172330},"_814-易错点","8.14 易错点",[26,172333,172334,172338,172344,172349,172356,172363],{},[29,172335,172336,170597],{},[73,172337,3053],{},[29,172339,172340,172341,490],{},"读写中文要指定 ",[73,172342,172343],{},"encoding=\"utf-8\"",[29,172345,172346,172347,490],{},"打开文件后要关闭，推荐使用 ",[73,172348,109855],{},[29,172350,172351,172352,172355],{},"读取大文件不要直接 ",[73,172353,172354],{},"read()"," 全部内容。",[29,172357,172358,172359,172362],{},"Windows 写 CSV 时建议加 ",[73,172360,172361],{},"newline=\"\"","，避免空行。",[29,172364,172365],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172367,172369],{"id":172368},"_815-本章练习","8.15 本章练习",[26,172371,172372,172379,172384,172387,172390],{},[29,172373,172374,172375,172378],{},"写入一个 ",[73,172376,172377],{},"students.txt","，每行保存一个学生姓名。",[29,172380,106377,172381,172383],{},[73,172382,172377],{}," 并输出所有学生。",[29,172385,172386],{},"把学生列表保存为 JSON 文件。",[29,172388,172389],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172391,172392,172393,172396,172397,172400],{},"写一个日志函数 ",[73,172394,172395],{},"write_log(message)","，每次调用向 ",[73,172398,172399],{},"app.log"," 追加一行。",[2178,172402,172403],{},"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":71,"searchDepth":94,"depth":94,"links":172405},[172406,172407,172411,172412,172418,172419,172420,172421,172422,172423,172424,172425,172426,172427,172428],{"id":169917,"depth":94,"text":169918},{"id":169958,"depth":94,"text":169959,"children":172408},[172409,172410],{"id":169962,"depth":133,"text":169963},{"id":169996,"depth":133,"text":169997},{"id":170110,"depth":94,"text":170111},{"id":170203,"depth":94,"text":170204,"children":172413},[172414,172415,172416,172417],{"id":170207,"depth":133,"text":170208},{"id":170294,"depth":133,"text":170295},{"id":170364,"depth":133,"text":170365},{"id":170458,"depth":133,"text":170459},{"id":170528,"depth":94,"text":170529},{"id":170591,"depth":94,"text":170592},{"id":170752,"depth":94,"text":170753},{"id":170815,"depth":94,"text":170816},{"id":170931,"depth":94,"text":170932},{"id":171141,"depth":94,"text":171142},{"id":171453,"depth":94,"text":171454},{"id":171864,"depth":94,"text":171865},{"id":172082,"depth":94,"text":172083},{"id":172330,"depth":94,"text":172331},{"id":172368,"depth":94,"text":172369},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169909,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172435,"title":172436,"body":172437,"description":2201,"extension":2202,"meta":174623,"navigation":148,"path":174624,"seo":174625,"stem":174626,"__hash__":174627},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172438,"toc":174590},[172439,172442,172446,172449,172452,172544,172546,172565,172570,172574,172577,172580,172609,172616,172619,172623,172626,172655,172657,172709,172715,172768,172772,172870,172873,172940,172944,173001,173003,173009,173013,173018,173024,173115,173120,173124,173127,173205,173208,173246,173250,173368,173371,173375,173378,173423,173426,173430,173435,173441,173491,173494,173525,173529,173533,173563,173567,173602,173606,173641,173681,173685,173701,173704,173708,173712,173791,173795,173836,173840,173895,173899,173933,173937,173967,173976,173983,173989,174046,174049,174057,174060,174064,174071,174074,174080,174083,174100,174105,174109,174115,174128,174131,174168,174171,174182,174185,174199,174202,174216,174220,174227,174260,174263,174265,174271,174274,174278,174280,174286,174291,174464,174468,174531,174535,174559,174563,174587],[10,172440,172436],{"id":172441},"_9-异常模块与包",[14,172443,172445],{"id":172444},"_91-什么是异常","9.1 什么是异常",[19,172447,172448],{},"异常是程序运行过程中出现的错误。",[19,172450,172451],{},"常见异常：",[2404,172453,172454,172463],{},[2407,172455,172456],{},[2410,172457,172458,172461],{},[2413,172459,172460],{},"异常",[2413,172462,27919],{},[2451,172464,172465,172475,172485,172494,172504,172514,172524,172534],{},[2410,172466,172467,172472],{},[2456,172468,172469],{},[73,172470,172471],{},"NameError",[2456,172473,172474],{},"使用了未定义变量",[2410,172476,172477,172482],{},[2456,172478,172479],{},[73,172480,172481],{},"TypeError",[2456,172483,172484],{},"类型不匹配",[2410,172486,172487,172491],{},[2456,172488,172489],{},[73,172490,156828],{},[2456,172492,172493],{},"值不合法",[2410,172495,172496,172501],{},[2456,172497,172498],{},[73,172499,172500],{},"IndexError",[2456,172502,172503],{},"列表索引越界",[2410,172505,172506,172511],{},[2456,172507,172508],{},[73,172509,172510],{},"KeyError",[2456,172512,172513],{},"字典 key 不存在",[2410,172515,172516,172521],{},[2456,172517,172518],{},[73,172519,172520],{},"FileNotFoundError",[2456,172522,172523],{},"文件不存在",[2410,172525,172526,172531],{},[2456,172527,172528],{},[73,172529,172530],{},"ZeroDivisionError",[2456,172532,172533],{},"除数为 0",[2410,172535,172536,172541],{},[2456,172537,172538],{},[73,172539,172540],{},"ImportError",[2456,172542,172543],{},"导入失败",[19,172545,100],{},[66,172547,172549],{"className":68,"code":172548,"language":70,"meta":71,"style":71},"num = int(\"abc\")\n",[73,172550,172551],{"__ignoreMap":71},[76,172552,172553,172555,172557,172559,172561,172563],{"class":78,"line":79},[76,172554,157781],{"class":90},[76,172556,370],{"class":82},[76,172558,4478],{"class":119},[76,172560,123],{"class":90},[76,172562,157874],{"class":126},[76,172564,130],{"class":90},[19,172566,172567,172568,490],{},"会触发 ",[73,172569,156828],{},[14,172571,172573],{"id":172572},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172575,172576],{},"如果不处理异常，程序会直接终止。",[19,172578,172579],{},"例如用户输入年龄：",[66,172581,172583],{"className":68,"code":172582,"language":70,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[73,172584,172585,172603],{"__ignoreMap":71},[76,172586,172587,172589,172591,172593,172595,172597,172599,172601],{"class":78,"line":79},[76,172588,148565],{"class":90},[76,172590,370],{"class":82},[76,172592,4478],{"class":119},[76,172594,123],{"class":90},[76,172596,1673],{"class":119},[76,172598,123],{"class":90},[76,172600,154396],{"class":126},[76,172602,656],{"class":90},[76,172604,172605,172607],{"class":78,"line":94},[76,172606,478],{"class":119},[76,172608,157755],{"class":90},[19,172610,172611,172612,172615],{},"用户输入 ",[73,172613,172614],{},"abc","，程序就会报错退出。",[19,172617,172618],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172620,172622],{"id":172621},"_93-try-except","9.3 try except",[19,172624,172625],{},"基础语法：",[66,172627,172629],{"className":68,"code":172628,"language":70,"meta":71,"style":71},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[73,172630,172631,172638,172643,172650],{"__ignoreMap":71},[76,172632,172633,172636],{"class":78,"line":79},[76,172634,172635],{"class":82},"try",[76,172637,590],{"class":90},[76,172639,172640],{"class":78,"line":94},[76,172641,172642],{"class":90},"    可能出错的代码\n",[76,172644,172645,172648],{"class":78,"line":133},[76,172646,172647],{"class":82},"except",[76,172649,590],{"class":90},[76,172651,172652],{"class":78,"line":145},[76,172653,172654],{"class":90},"    出错后的处理代码\n",[19,172656,100],{},[66,172658,172660],{"className":68,"code":172659,"language":70,"meta":71,"style":71},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[73,172661,172662,172668,172686,172692,172698],{"__ignoreMap":71},[76,172663,172664,172666],{"class":78,"line":79},[76,172665,172635],{"class":82},[76,172667,590],{"class":90},[76,172669,172670,172672,172674,172676,172678,172680,172682,172684],{"class":78,"line":94},[76,172671,154388],{"class":90},[76,172673,370],{"class":82},[76,172675,4478],{"class":119},[76,172677,123],{"class":90},[76,172679,1673],{"class":119},[76,172681,123],{"class":90},[76,172683,154396],{"class":126},[76,172685,656],{"class":90},[76,172687,172688,172690],{"class":78,"line":133},[76,172689,120],{"class":119},[76,172691,157755],{"class":90},[76,172693,172694,172696],{"class":78,"line":145},[76,172695,172647],{"class":82},[76,172697,590],{"class":90},[76,172699,172700,172702,172704,172707],{"class":78,"line":152},[76,172701,120],{"class":119},[76,172703,123],{"class":90},[76,172705,172706],{"class":126},"\"年龄必须是数字\"",[76,172708,130],{"class":90},[19,172710,172711,172712,172714],{},"不建议裸写 ",[73,172713,172647],{},"，最好指定异常类型。",[66,172716,172718],{"className":68,"code":172717,"language":70,"meta":71,"style":71},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[73,172719,172720,172726,172744,172750,172758],{"__ignoreMap":71},[76,172721,172722,172724],{"class":78,"line":79},[76,172723,172635],{"class":82},[76,172725,590],{"class":90},[76,172727,172728,172730,172732,172734,172736,172738,172740,172742],{"class":78,"line":94},[76,172729,154388],{"class":90},[76,172731,370],{"class":82},[76,172733,4478],{"class":119},[76,172735,123],{"class":90},[76,172737,1673],{"class":119},[76,172739,123],{"class":90},[76,172741,154396],{"class":126},[76,172743,656],{"class":90},[76,172745,172746,172748],{"class":78,"line":133},[76,172747,120],{"class":119},[76,172749,157755],{"class":90},[76,172751,172752,172754,172756],{"class":78,"line":145},[76,172753,172647],{"class":82},[76,172755,154229],{"class":119},[76,172757,590],{"class":90},[76,172759,172760,172762,172764,172766],{"class":78,"line":152},[76,172761,120],{"class":119},[76,172763,123],{"class":90},[76,172765,172706],{"class":126},[76,172767,130],{"class":90},[14,172769,172771],{"id":172770},"_94-捕获多个异常","9.4 捕获多个异常",[66,172773,172775],{"className":68,"code":172774,"language":70,"meta":71,"style":71},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[73,172776,172777,172783,172804,172824,172831,172839,172850,172859],{"__ignoreMap":71},[76,172778,172779,172781],{"class":78,"line":79},[76,172780,172635],{"class":82},[76,172782,590],{"class":90},[76,172784,172785,172788,172790,172792,172794,172796,172798,172800,172802],{"class":78,"line":94},[76,172786,172787],{"class":90},"    nums ",[76,172789,370],{"class":82},[76,172791,54258],{"class":90},[76,172793,669],{"class":119},[76,172795,405],{"class":90},[76,172797,2345],{"class":119},[76,172799,405],{"class":90},[76,172801,2339],{"class":119},[76,172803,35284],{"class":90},[76,172805,172806,172809,172811,172813,172815,172817,172819,172822],{"class":78,"line":133},[76,172807,172808],{"class":90},"    index ",[76,172810,370],{"class":82},[76,172812,4478],{"class":119},[76,172814,123],{"class":90},[76,172816,1673],{"class":119},[76,172818,123],{"class":90},[76,172820,172821],{"class":126},"\"请输入索引:\"",[76,172823,656],{"class":90},[76,172825,172826,172828],{"class":78,"line":145},[76,172827,120],{"class":119},[76,172829,172830],{"class":90},"(nums[index])\n",[76,172832,172833,172835,172837],{"class":78,"line":152},[76,172834,172647],{"class":82},[76,172836,154229],{"class":119},[76,172838,590],{"class":90},[76,172840,172841,172843,172845,172848],{"class":78,"line":157},[76,172842,120],{"class":119},[76,172844,123],{"class":90},[76,172846,172847],{"class":126},"\"索引必须是整数\"",[76,172849,130],{"class":90},[76,172851,172852,172854,172857],{"class":78,"line":246},[76,172853,172647],{"class":82},[76,172855,172856],{"class":119}," IndexError",[76,172858,590],{"class":90},[76,172860,172861,172863,172865,172868],{"class":78,"line":251},[76,172862,120],{"class":119},[76,172864,123],{"class":90},[76,172866,172867],{"class":126},"\"索引越界\"",[76,172869,130],{"class":90},[19,172871,172872],{},"多个异常使用相同处理逻辑：",[66,172874,172876],{"className":68,"code":172875,"language":70,"meta":71,"style":71},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[73,172877,172878,172884,172902,172915,172929],{"__ignoreMap":71},[76,172879,172880,172882],{"class":78,"line":79},[76,172881,172635],{"class":82},[76,172883,590],{"class":90},[76,172885,172886,172888,172890,172892,172894,172896,172898,172900],{"class":78,"line":94},[76,172887,914],{"class":90},[76,172889,370],{"class":82},[76,172891,4478],{"class":119},[76,172893,123],{"class":90},[76,172895,1673],{"class":119},[76,172897,123],{"class":90},[76,172899,157790],{"class":126},[76,172901,656],{"class":90},[76,172903,172904,172906,172908,172910,172912],{"class":78,"line":133},[76,172905,120],{"class":119},[76,172907,123],{"class":90},[76,172909,402],{"class":119},[76,172911,158040],{"class":82},[76,172913,172914],{"class":90}," num)\n",[76,172916,172917,172919,172921,172923,172925,172927],{"class":78,"line":145},[76,172918,172647],{"class":82},[76,172920,3770],{"class":90},[76,172922,156828],{"class":119},[76,172924,405],{"class":90},[76,172926,172530],{"class":119},[76,172928,32830],{"class":90},[76,172930,172931,172933,172935,172938],{"class":78,"line":152},[76,172932,120],{"class":119},[76,172934,123],{"class":90},[76,172936,172937],{"class":126},"\"输入不合法\"",[76,172939,130],{"class":90},[14,172941,172943],{"id":172942},"_95-获取异常信息","9.5 获取异常信息",[66,172945,172947],{"className":68,"code":172946,"language":70,"meta":71,"style":71},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[73,172948,172949,172955,172969,172980],{"__ignoreMap":71},[76,172950,172951,172953],{"class":78,"line":79},[76,172952,172635],{"class":82},[76,172954,590],{"class":90},[76,172956,172957,172959,172961,172963,172965,172967],{"class":78,"line":94},[76,172958,914],{"class":90},[76,172960,370],{"class":82},[76,172962,4478],{"class":119},[76,172964,123],{"class":90},[76,172966,157874],{"class":126},[76,172968,130],{"class":90},[76,172970,172971,172973,172975,172977],{"class":78,"line":133},[76,172972,172647],{"class":82},[76,172974,154229],{"class":119},[76,172976,66632],{"class":82},[76,172978,172979],{"class":90}," e:\n",[76,172981,172982,172984,172986,172988,172991,172993,172995,172997,172999],{"class":78,"line":145},[76,172983,120],{"class":119},[76,172985,123],{"class":90},[76,172987,292],{"class":82},[76,172989,172990],{"class":126},"\"出错了:",[76,172992,298],{"class":119},[76,172994,2342],{"class":90},[76,172996,304],{"class":119},[76,172998,307],{"class":126},[76,173000,130],{"class":90},[19,173002,148477],{},[66,173004,173007],{"className":173005,"code":173006,"language":7268,"meta":71},[7266],"出错了:invalid literal for int() with base 10: 'abc'\n",[73,173008,173006],{"__ignoreMap":71},[14,173010,173012],{"id":173011},"_96-else和finally","9.6 else和finally",[19,173014,173015,173017],{},[73,173016,1328],{},"：没有异常时执行。",[19,173019,173020,173023],{},[73,173021,173022],{},"finally","：无论是否异常都会执行。",[66,173025,173027],{"className":68,"code":173026,"language":70,"meta":71,"style":71},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[73,173028,173029,173035,173053,173061,173071,173077,173098,173104],{"__ignoreMap":71},[76,173030,173031,173033],{"class":78,"line":79},[76,173032,172635],{"class":82},[76,173034,590],{"class":90},[76,173036,173037,173039,173041,173043,173045,173047,173049,173051],{"class":78,"line":94},[76,173038,914],{"class":90},[76,173040,370],{"class":82},[76,173042,4478],{"class":119},[76,173044,123],{"class":90},[76,173046,1673],{"class":119},[76,173048,123],{"class":90},[76,173050,157790],{"class":126},[76,173052,656],{"class":90},[76,173054,173055,173057,173059],{"class":78,"line":133},[76,173056,172647],{"class":82},[76,173058,154229],{"class":119},[76,173060,590],{"class":90},[76,173062,173063,173065,173067,173069],{"class":78,"line":145},[76,173064,120],{"class":119},[76,173066,123],{"class":90},[76,173068,2038],{"class":126},[76,173070,130],{"class":90},[76,173072,173073,173075],{"class":78,"line":152},[76,173074,1328],{"class":82},[76,173076,590],{"class":90},[76,173078,173079,173081,173083,173085,173088,173090,173092,173094,173096],{"class":78,"line":157},[76,173080,120],{"class":119},[76,173082,123],{"class":90},[76,173084,292],{"class":82},[76,173086,173087],{"class":126},"\"输入正确:",[76,173089,298],{"class":119},[76,173091,3777],{"class":90},[76,173093,304],{"class":119},[76,173095,307],{"class":126},[76,173097,130],{"class":90},[76,173099,173100,173102],{"class":78,"line":246},[76,173101,173022],{"class":82},[76,173103,590],{"class":90},[76,173105,173106,173108,173110,173113],{"class":78,"line":251},[76,173107,120],{"class":119},[76,173109,123],{"class":90},[76,173111,173112],{"class":126},"\"程序结束\"",[76,173114,130],{"class":90},[19,173116,173117,173119],{},[73,173118,173022],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173121,173123],{"id":173122},"_97-抛出异常","9.7 抛出异常",[19,173125,173126],{},"程序可以主动抛出异常。",[66,173128,173130],{"className":68,"code":173129,"language":70,"meta":71,"style":71},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[73,173131,173132,173141,173153,173166,173186,173190,173194],{"__ignoreMap":71},[76,173133,173134,173136,173139],{"class":78,"line":79},[76,173135,83],{"class":82},[76,173137,173138],{"class":86}," set_age",[76,173140,573],{"class":90},[76,173142,173143,173145,173147,173149,173151],{"class":78,"line":94},[76,173144,578],{"class":82},[76,173146,581],{"class":90},[76,173148,584],{"class":82},[76,173150,587],{"class":119},[76,173152,590],{"class":90},[76,173154,173155,173157,173159,173161,173164],{"class":78,"line":133},[76,173156,105454],{"class":82},[76,173158,154229],{"class":119},[76,173160,123],{"class":90},[76,173162,173163],{"class":126},"\"年龄不能为负数\"",[76,173165,130],{"class":90},[76,173167,173168,173170,173172,173174,173176,173178,173180,173182,173184],{"class":78,"line":145},[76,173169,120],{"class":119},[76,173171,123],{"class":90},[76,173173,292],{"class":82},[76,173175,1179],{"class":126},[76,173177,298],{"class":119},[76,173179,1184],{"class":90},[76,173181,304],{"class":119},[76,173183,307],{"class":126},[76,173185,130],{"class":90},[76,173187,173188],{"class":78,"line":152},[76,173189,149],{"emptyLinePlaceholder":148},[76,173191,173192],{"class":78,"line":157},[76,173193,149],{"emptyLinePlaceholder":148},[76,173195,173196,173199,173201,173203],{"class":78,"line":246},[76,173197,173198],{"class":90},"set_age(",[76,173200,666],{"class":82},[76,173202,669],{"class":119},[76,173204,130],{"class":90},[19,173206,173207],{},"调用者可以捕获：",[66,173209,173211],{"className":68,"code":173210,"language":70,"meta":71,"style":71},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[73,173212,173213,173219,173230,173240],{"__ignoreMap":71},[76,173214,173215,173217],{"class":78,"line":79},[76,173216,172635],{"class":82},[76,173218,590],{"class":90},[76,173220,173221,173224,173226,173228],{"class":78,"line":94},[76,173222,173223],{"class":90},"    set_age(",[76,173225,666],{"class":82},[76,173227,669],{"class":119},[76,173229,130],{"class":90},[76,173231,173232,173234,173236,173238],{"class":78,"line":133},[76,173233,172647],{"class":82},[76,173235,154229],{"class":119},[76,173237,66632],{"class":82},[76,173239,172979],{"class":90},[76,173241,173242,173244],{"class":78,"line":145},[76,173243,120],{"class":119},[76,173245,69027],{"class":90},[14,173247,173249],{"id":173248},"_98-自定义异常","9.8 自定义异常",[66,173251,173253],{"className":68,"code":173252,"language":70,"meta":71,"style":71},"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",[73,173254,173255,173269,173273,173277,173281,173289,173299,173310,173320,173324,173328,173334,173351,173362],{"__ignoreMap":71},[76,173256,173257,173259,173262,173264,173267],{"class":78,"line":79},[76,173258,16747],{"class":82},[76,173260,173261],{"class":86}," BalanceNotEnoughError",[76,173263,123],{"class":90},[76,173265,173266],{"class":119},"Exception",[76,173268,32830],{"class":90},[76,173270,173271],{"class":78,"line":94},[76,173272,151552],{"class":82},[76,173274,173275],{"class":78,"line":133},[76,173276,149],{"emptyLinePlaceholder":148},[76,173278,173279],{"class":78,"line":145},[76,173280,149],{"emptyLinePlaceholder":148},[76,173282,173283,173285,173287],{"class":78,"line":152},[76,173284,83],{"class":82},[76,173286,152197],{"class":86},[76,173288,2094],{"class":90},[76,173290,173291,173293,173295,173297],{"class":78,"line":157},[76,173292,578],{"class":82},[76,173294,1688],{"class":90},[76,173296,1829],{"class":82},[76,173298,1832],{"class":90},[76,173300,173301,173303,173306,173308],{"class":78,"line":246},[76,173302,105454],{"class":82},[76,173304,173305],{"class":90}," BalanceNotEnoughError(",[76,173307,1842],{"class":126},[76,173309,130],{"class":90},[76,173311,173312,173314,173316,173318],{"class":78,"line":251},[76,173313,441],{"class":82},[76,173315,2101],{"class":90},[76,173317,666],{"class":82},[76,173319,1725],{"class":90},[76,173321,173322],{"class":78,"line":257},[76,173323,149],{"emptyLinePlaceholder":148},[76,173325,173326],{"class":78,"line":641},[76,173327,149],{"emptyLinePlaceholder":148},[76,173329,173330,173332],{"class":78,"line":646},[76,173331,172635],{"class":82},[76,173333,590],{"class":90},[76,173335,173336,173338,173340,173343,173345,173347,173349],{"class":78,"line":659},[76,173337,1720],{"class":90},[76,173339,370],{"class":82},[76,173341,173342],{"class":90}," withdraw(",[76,173344,2575],{"class":119},[76,173346,405],{"class":90},[76,173348,2133],{"class":119},[76,173350,130],{"class":90},[76,173352,173353,173355,173358,173360],{"class":78,"line":1608},[76,173354,172647],{"class":82},[76,173356,173357],{"class":90}," BalanceNotEnoughError ",[76,173359,33426],{"class":82},[76,173361,172979],{"class":90},[76,173363,173364,173366],{"class":78,"line":1632},[76,173365,120],{"class":119},[76,173367,69027],{"class":90},[19,173369,173370],{},"入门阶段大多数情况使用内置异常即可。",[14,173372,173374],{"id":173373},"_99-traceback","9.9 traceback",[19,173376,173377],{},"调试时可以输出完整异常堆栈。",[66,173379,173381],{"className":68,"code":173380,"language":70,"meta":71,"style":71},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[73,173382,173383,173390,173394,173400,173410,173418],{"__ignoreMap":71},[76,173384,173385,173387],{"class":78,"line":79},[76,173386,32438],{"class":82},[76,173388,173389],{"class":90}," traceback\n",[76,173391,173392],{"class":78,"line":94},[76,173393,149],{"emptyLinePlaceholder":148},[76,173395,173396,173398],{"class":78,"line":133},[76,173397,172635],{"class":82},[76,173399,590],{"class":90},[76,173401,173402,173404,173406,173408],{"class":78,"line":145},[76,173403,4081],{"class":119},[76,173405,123],{"class":90},[76,173407,157874],{"class":126},[76,173409,130],{"class":90},[76,173411,173412,173414,173416],{"class":78,"line":152},[76,173413,172647],{"class":82},[76,173415,154229],{"class":119},[76,173417,590],{"class":90},[76,173419,173420],{"class":78,"line":157},[76,173421,173422],{"class":90},"    traceback.print_exc()\n",[19,173424,173425],{},"日志系统中常把异常堆栈记录到文件。",[14,173427,173429],{"id":173428},"_910-什么是模块","9.10 什么是模块",[19,173431,173432,173433,128003],{},"模块就是一个 ",[73,173434,148372],{},[19,173436,173437,173438,26668],{},"例如创建 ",[73,173439,173440],{},"my_math.py",[66,173442,173444],{"className":68,"code":173443,"language":70,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[73,173445,173446,173454,173464,173468,173472,173481],{"__ignoreMap":71},[76,173447,173448,173450,173452],{"class":78,"line":79},[76,173449,83],{"class":82},[76,173451,359],{"class":86},[76,173453,362],{"class":90},[76,173455,173456,173458,173460,173462],{"class":78,"line":94},[76,173457,441],{"class":82},[76,173459,373],{"class":90},[76,173461,376],{"class":82},[76,173463,379],{"class":90},[76,173465,173466],{"class":78,"line":133},[76,173467,149],{"emptyLinePlaceholder":148},[76,173469,173470],{"class":78,"line":145},[76,173471,149],{"emptyLinePlaceholder":148},[76,173473,173474,173476,173479],{"class":78,"line":152},[76,173475,83],{"class":82},[76,173477,173478],{"class":86}," sub",[76,173480,362],{"class":90},[76,173482,173483,173485,173487,173489],{"class":78,"line":157},[76,173484,441],{"class":82},[76,173486,373],{"class":90},[76,173488,666],{"class":82},[76,173490,379],{"class":90},[19,173492,173493],{},"在另一个文件中导入：",[66,173495,173497],{"className":68,"code":173496,"language":70,"meta":71,"style":71},"import my_math\n\nprint(my_math.add(1, 2))\n",[73,173498,173499,173506,173510],{"__ignoreMap":71},[76,173500,173501,173503],{"class":78,"line":79},[76,173502,32438],{"class":82},[76,173504,173505],{"class":90}," my_math\n",[76,173507,173508],{"class":78,"line":94},[76,173509,149],{"emptyLinePlaceholder":148},[76,173511,173512,173514,173517,173519,173521,173523],{"class":78,"line":133},[76,173513,478],{"class":119},[76,173515,173516],{"class":90},"(my_math.add(",[76,173518,669],{"class":119},[76,173520,405],{"class":90},[76,173522,2345],{"class":119},[76,173524,656],{"class":90},[14,173526,173528],{"id":173527},"_911-import导入","9.11 import导入",[889,173530,173532],{"id":173531},"_9111-导入模块","9.11.1 导入模块",[66,173534,173536],{"className":68,"code":173535,"language":70,"meta":71,"style":71},"import random\n\nprint(random.randint(1, 10))\n",[73,173537,173538,173544,173548],{"__ignoreMap":71},[76,173539,173540,173542],{"class":78,"line":79},[76,173541,32438],{"class":82},[76,173543,47363],{"class":90},[76,173545,173546],{"class":78,"line":94},[76,173547,149],{"emptyLinePlaceholder":148},[76,173549,173550,173552,173555,173557,173559,173561],{"class":78,"line":133},[76,173551,478],{"class":119},[76,173553,173554],{"class":90},"(random.randint(",[76,173556,669],{"class":119},[76,173558,405],{"class":90},[76,173560,402],{"class":119},[76,173562,656],{"class":90},[889,173564,173566],{"id":173565},"_9112-导入指定内容","9.11.2 导入指定内容",[66,173568,173570],{"className":68,"code":173569,"language":70,"meta":71,"style":71},"from random import randint\n\nprint(randint(1, 10))\n",[73,173571,173572,173583,173587],{"__ignoreMap":71},[76,173573,173574,173576,173578,173580],{"class":78,"line":79},[76,173575,32781],{"class":82},[76,173577,59826],{"class":90},[76,173579,32438],{"class":82},[76,173581,173582],{"class":90}," randint\n",[76,173584,173585],{"class":78,"line":94},[76,173586,149],{"emptyLinePlaceholder":148},[76,173588,173589,173591,173594,173596,173598,173600],{"class":78,"line":133},[76,173590,478],{"class":119},[76,173592,173593],{"class":90},"(randint(",[76,173595,669],{"class":119},[76,173597,405],{"class":90},[76,173599,402],{"class":119},[76,173601,656],{"class":90},[889,173603,173605],{"id":173604},"_9113-起别名","9.11.3 起别名",[66,173607,173609],{"className":68,"code":173608,"language":70,"meta":71,"style":71},"import random as rd\n\nprint(rd.randint(1, 10))\n",[73,173610,173611,173622,173626],{"__ignoreMap":71},[76,173612,173613,173615,173617,173619],{"class":78,"line":79},[76,173614,32438],{"class":82},[76,173616,59826],{"class":90},[76,173618,33426],{"class":82},[76,173620,173621],{"class":90}," rd\n",[76,173623,173624],{"class":78,"line":94},[76,173625,149],{"emptyLinePlaceholder":148},[76,173627,173628,173630,173633,173635,173637,173639],{"class":78,"line":133},[76,173629,478],{"class":119},[76,173631,173632],{"class":90},"(rd.randint(",[76,173634,669],{"class":119},[76,173636,405],{"class":90},[76,173638,402],{"class":119},[76,173640,656],{"class":90},[66,173642,173644],{"className":68,"code":173643,"language":70,"meta":71,"style":71},"from random import randint as rint\n\nprint(rint(1, 10))\n",[73,173645,173646,173662,173666],{"__ignoreMap":71},[76,173647,173648,173650,173652,173654,173657,173659],{"class":78,"line":79},[76,173649,32781],{"class":82},[76,173651,59826],{"class":90},[76,173653,32438],{"class":82},[76,173655,173656],{"class":90}," randint ",[76,173658,33426],{"class":82},[76,173660,173661],{"class":90}," rint\n",[76,173663,173664],{"class":78,"line":94},[76,173665,149],{"emptyLinePlaceholder":148},[76,173667,173668,173670,173673,173675,173677,173679],{"class":78,"line":133},[76,173669,478],{"class":119},[76,173671,173672],{"class":90},"(rint(",[76,173674,669],{"class":119},[76,173676,405],{"class":90},[76,173678,402],{"class":119},[76,173680,656],{"class":90},[889,173682,173684],{"id":173683},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[66,173686,173688],{"className":68,"code":173687,"language":70,"meta":71,"style":71},"from random import *\n",[73,173689,173690],{"__ignoreMap":71},[76,173691,173692,173694,173696,173698],{"class":78,"line":79},[76,173693,32781],{"class":82},[76,173695,59826],{"class":90},[76,173697,32438],{"class":82},[76,173699,173700],{"class":82}," *\n",[19,173702,173703],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173705,173707],{"id":173706},"_912-常用内置模块","9.12 常用内置模块",[889,173709,173711],{"id":173710},"_9121-random","9.12.1 random",[66,173713,173715],{"className":68,"code":173714,"language":70,"meta":71,"style":71},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[73,173716,173717,173723,173727,173741,173760],{"__ignoreMap":71},[76,173718,173719,173721],{"class":78,"line":79},[76,173720,32438],{"class":82},[76,173722,47363],{"class":90},[76,173724,173725],{"class":78,"line":94},[76,173726,149],{"emptyLinePlaceholder":148},[76,173728,173729,173731,173733,173735,173737,173739],{"class":78,"line":133},[76,173730,478],{"class":119},[76,173732,173554],{"class":90},[76,173734,669],{"class":119},[76,173736,405],{"class":90},[76,173738,402],{"class":119},[76,173740,656],{"class":90},[76,173742,173743,173745,173748,173750,173752,173754,173756,173758],{"class":78,"line":145},[76,173744,478],{"class":119},[76,173746,173747],{"class":90},"(random.choice([",[76,173749,325],{"class":126},[76,173751,405],{"class":90},[76,173753,334],{"class":126},[76,173755,405],{"class":90},[76,173757,161718],{"class":126},[76,173759,35181],{"class":90},[76,173761,173762,173764,173767,173769,173771,173773,173775,173777,173779,173781,173783,173785,173787,173789],{"class":78,"line":152},[76,173763,478],{"class":119},[76,173765,173766],{"class":90},"(random.sample([",[76,173768,669],{"class":119},[76,173770,405],{"class":90},[76,173772,2345],{"class":119},[76,173774,405],{"class":90},[76,173776,2339],{"class":119},[76,173778,405],{"class":90},[76,173780,2557],{"class":119},[76,173782,405],{"class":90},[76,173784,2583],{"class":119},[76,173786,114222],{"class":90},[76,173788,2345],{"class":119},[76,173790,656],{"class":90},[889,173792,173794],{"id":173793},"_9122-time","9.12.2 time",[66,173796,173798],{"className":68,"code":173797,"language":70,"meta":71,"style":71},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[73,173799,173800,173806,173810,173817,173825],{"__ignoreMap":71},[76,173801,173802,173804],{"class":78,"line":79},[76,173803,32438],{"class":82},[76,173805,33871],{"class":90},[76,173807,173808],{"class":78,"line":94},[76,173809,149],{"emptyLinePlaceholder":148},[76,173811,173812,173814],{"class":78,"line":133},[76,173813,478],{"class":119},[76,173815,173816],{"class":90},"(time.time())\n",[76,173818,173819,173821,173823],{"class":78,"line":145},[76,173820,97095],{"class":90},[76,173822,669],{"class":119},[76,173824,130],{"class":90},[76,173826,173827,173829,173831,173834],{"class":78,"line":152},[76,173828,478],{"class":119},[76,173830,123],{"class":90},[76,173832,173833],{"class":126},"\"1秒后执行\"",[76,173835,130],{"class":90},[889,173837,173839],{"id":173838},"_9123-datetime","9.12.3 datetime",[66,173841,173843],{"className":68,"code":173842,"language":70,"meta":71,"style":71},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[73,173844,173845,173857,173861,173871,173878],{"__ignoreMap":71},[76,173846,173847,173849,173852,173854],{"class":78,"line":79},[76,173848,32781],{"class":82},[76,173850,173851],{"class":90}," datetime ",[76,173853,32438],{"class":82},[76,173855,173856],{"class":90}," datetime\n",[76,173858,173859],{"class":78,"line":94},[76,173860,149],{"emptyLinePlaceholder":148},[76,173862,173863,173866,173868],{"class":78,"line":133},[76,173864,173865],{"class":90},"now ",[76,173867,370],{"class":82},[76,173869,173870],{"class":90}," datetime.now()\n",[76,173872,173873,173875],{"class":78,"line":145},[76,173874,478],{"class":119},[76,173876,173877],{"class":90},"(now)\n",[76,173879,173880,173882,173885,173888,173890,173893],{"class":78,"line":152},[76,173881,478],{"class":119},[76,173883,173884],{"class":90},"(now.strftime(",[76,173886,173887],{"class":126},"\"%Y-%m-",[76,173889,158683],{"class":119},[76,173891,173892],{"class":126}," %H:%M:%S\"",[76,173894,656],{"class":90},[889,173896,173898],{"id":173897},"_9124-os","9.12.4 os",[66,173900,173902],{"className":68,"code":173901,"language":70,"meta":71,"style":71},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[73,173903,173904,173910,173914,173921],{"__ignoreMap":71},[76,173905,173906,173908],{"class":78,"line":79},[76,173907,32438],{"class":82},[76,173909,47340],{"class":90},[76,173911,173912],{"class":78,"line":94},[76,173913,149],{"emptyLinePlaceholder":148},[76,173915,173916,173918],{"class":78,"line":133},[76,173917,478],{"class":119},[76,173919,173920],{"class":90},"(os.getcwd())\n",[76,173922,173923,173925,173928,173931],{"class":78,"line":145},[76,173924,478],{"class":119},[76,173926,173927],{"class":90},"(os.listdir(",[76,173929,173930],{"class":126},"\".\"",[76,173932,656],{"class":90},[889,173934,173936],{"id":173935},"_9125-sys","9.12.5 sys",[66,173938,173940],{"className":68,"code":173939,"language":70,"meta":71,"style":71},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[73,173941,173942,173949,173953,173960],{"__ignoreMap":71},[76,173943,173944,173946],{"class":78,"line":79},[76,173945,32438],{"class":82},[76,173947,173948],{"class":90}," sys\n",[76,173950,173951],{"class":78,"line":94},[76,173952,149],{"emptyLinePlaceholder":148},[76,173954,173955,173957],{"class":78,"line":133},[76,173956,478],{"class":119},[76,173958,173959],{"class":90},"(sys.version)\n",[76,173961,173962,173964],{"class":78,"line":145},[76,173963,478],{"class":119},[76,173965,173966],{"class":90},"(sys.path)\n",[14,173968,173970,173971,173973,173974,307],{"id":173969},"_913-if-name-main","9.13 if ",[2416,173972,301],{}," == \"",[2416,173975,104080],{},[19,173977,173978,173979,173982],{},"模块被直接运行和被导入时，",[73,173980,173981],{},"__name__"," 的值不同。",[19,173984,173985,173986,26668],{},"创建 ",[73,173987,173988],{},"my_module.py",[66,173990,173992],{"className":68,"code":173991,"language":70,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[73,173993,173994,174002,174012,174016,174020,174032],{"__ignoreMap":71},[76,173995,173996,173998,174000],{"class":78,"line":79},[76,173997,83],{"class":82},[76,173999,359],{"class":86},[76,174001,362],{"class":90},[76,174003,174004,174006,174008,174010],{"class":78,"line":94},[76,174005,441],{"class":82},[76,174007,373],{"class":90},[76,174009,376],{"class":82},[76,174011,379],{"class":90},[76,174013,174014],{"class":78,"line":133},[76,174015,149],{"emptyLinePlaceholder":148},[76,174017,174018],{"class":78,"line":145},[76,174019,149],{"emptyLinePlaceholder":148},[76,174021,174022,174024,174026,174028,174030],{"class":78,"line":152},[76,174023,723],{"class":82},[76,174025,33264],{"class":119},[76,174027,103581],{"class":82},[76,174029,103584],{"class":126},[76,174031,590],{"class":90},[76,174033,174034,174036,174038,174040,174042,174044],{"class":78,"line":157},[76,174035,120],{"class":119},[76,174037,168353],{"class":90},[76,174039,669],{"class":119},[76,174041,405],{"class":90},[76,174043,2345],{"class":119},[76,174045,656],{"class":90},[19,174047,174048],{},"作用：",[26,174050,174051,174054],{},[29,174052,174053],{},"直接运行该文件时，执行测试代码。",[29,174055,174056],{},"被其他文件导入时，不执行测试代码。",[19,174058,174059],{},"这是写模块时很常用的习惯。",[14,174061,174063],{"id":174062},"_914-包","9.14 包",[19,174065,174066,174067,174070],{},"包是包含 ",[73,174068,174069],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174072,174073],{},"目录结构：",[66,174075,174078],{"className":174076,"code":174077,"language":7268,"meta":71},[7266],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[73,174079,174077],{"__ignoreMap":71},[19,174081,174082],{},"导入：",[66,174084,174086],{"className":68,"code":174085,"language":70,"meta":71,"style":71},"from utils.file_utils import read_file\n",[73,174087,174088],{"__ignoreMap":71},[76,174089,174090,174092,174095,174097],{"class":78,"line":79},[76,174091,32781],{"class":82},[76,174093,174094],{"class":90}," utils.file_utils ",[76,174096,32438],{"class":82},[76,174098,174099],{"class":90}," read_file\n",[19,174101,174102,174104],{},[73,174103,174069],{}," 可以为空，也可以写包初始化逻辑。",[14,174106,174108],{"id":174107},"_915-第三方包","9.15 第三方包",[19,174110,174111,174112,174114],{},"第三方包通过 ",[73,174113,25880],{}," 安装。",[66,174116,174118],{"className":25871,"code":174117,"language":25873,"meta":71,"style":71},"pip install requests\n",[73,174119,174120],{"__ignoreMap":71},[76,174121,174122,174124,174126],{"class":78,"line":79},[76,174123,25880],{"class":86},[76,174125,25883],{"class":126},[76,174127,148118],{"class":126},[19,174129,174130],{},"使用：",[66,174132,174134],{"className":68,"code":174133,"language":70,"meta":71,"style":71},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[73,174135,174136,174142,174146,174161],{"__ignoreMap":71},[76,174137,174138,174140],{"class":78,"line":79},[76,174139,32438],{"class":82},[76,174141,148118],{"class":90},[76,174143,174144],{"class":78,"line":94},[76,174145,149],{"emptyLinePlaceholder":148},[76,174147,174148,174151,174153,174156,174159],{"class":78,"line":133},[76,174149,174150],{"class":90},"response ",[76,174152,370],{"class":82},[76,174154,174155],{"class":90}," requests.get(",[76,174157,174158],{"class":126},"\"https:\u002F\u002Fwww.example.com\"",[76,174160,130],{"class":90},[76,174162,174163,174165],{"class":78,"line":145},[76,174164,478],{"class":119},[76,174166,174167],{"class":90},"(response.status_code)\n",[19,174169,174170],{},"查看已安装包：",[66,174172,174174],{"className":25871,"code":174173,"language":25873,"meta":71,"style":71},"pip list\n",[73,174175,174176],{"__ignoreMap":71},[76,174177,174178,174180],{"class":78,"line":79},[76,174179,25880],{"class":86},[76,174181,120975],{"class":126},[19,174183,174184],{},"导出项目依赖：",[66,174186,174187],{"className":25871,"code":148313,"language":25873,"meta":71,"style":71},[73,174188,174189],{"__ignoreMap":71},[76,174190,174191,174193,174195,174197],{"class":78,"line":79},[76,174192,25880],{"class":86},[76,174194,148322],{"class":126},[76,174196,28271],{"class":82},[76,174198,148327],{"class":126},[19,174200,174201],{},"安装项目依赖：",[66,174203,174204],{"className":25871,"code":148333,"language":25873,"meta":71,"style":71},[73,174205,174206],{"__ignoreMap":71},[76,174207,174208,174210,174212,174214],{"class":78,"line":79},[76,174209,25880],{"class":86},[76,174211,25883],{"class":126},[76,174213,121659],{"class":119},[76,174215,148327],{"class":126},[14,174217,174219],{"id":174218},"_916-模块搜索路径","9.16 模块搜索路径",[19,174221,174222,174223,174226],{},"Python 导入模块时会在 ",[73,174224,174225],{},"sys.path"," 中查找。",[66,174228,174230],{"className":68,"code":174229,"language":70,"meta":71,"style":71},"import sys\n\nfor path in sys.path:\n    print(path)\n",[73,174231,174232,174238,174242,174254],{"__ignoreMap":71},[76,174233,174234,174236],{"class":78,"line":79},[76,174235,32438],{"class":82},[76,174237,173948],{"class":90},[76,174239,174240],{"class":78,"line":94},[76,174241,149],{"emptyLinePlaceholder":148},[76,174243,174244,174246,174249,174251],{"class":78,"line":133},[76,174245,5112],{"class":82},[76,174247,174248],{"class":90}," path ",[76,174250,1475],{"class":82},[76,174252,174253],{"class":90}," sys.path:\n",[76,174255,174256,174258],{"class":78,"line":145},[76,174257,120],{"class":119},[76,174259,170982],{"class":90},[19,174261,174262],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174264,159613],{},[66,174266,174269],{"className":174267,"code":174268,"language":7268,"meta":71},[7266],"random.py\njson.py\ntime.py\n",[73,174270,174268],{"__ignoreMap":71},[19,174272,174273],{},"这些文件名可能导致导入异常。",[14,174275,174277],{"id":174276},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174279,174073],{},[66,174281,174284],{"className":174282,"code":174283,"language":7268,"meta":71},[7266],"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",[73,174285,174283],{"__ignoreMap":71},[19,174287,174288,26668],{},[73,174289,174290],{},"utils\u002Ffile_utils.py",[66,174292,174294],{"className":68,"code":174293,"language":70,"meta":71,"style":71},"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",[73,174295,174296,174302,174312,174316,174320,174330,174340,174348,174354,174358,174385,174395,174399,174403,174413,174439],{"__ignoreMap":71},[76,174297,174298,174300],{"class":78,"line":79},[76,174299,32438],{"class":82},[76,174301,149108],{"class":90},[76,174303,174304,174306,174308,174310],{"class":78,"line":94},[76,174305,32781],{"class":82},[76,174307,110333],{"class":90},[76,174309,32438],{"class":82},[76,174311,110338],{"class":90},[76,174313,174314],{"class":78,"line":133},[76,174315,149],{"emptyLinePlaceholder":148},[76,174317,174318],{"class":78,"line":145},[76,174319,149],{"emptyLinePlaceholder":148},[76,174321,174322,174324,174327],{"class":78,"line":152},[76,174323,83],{"class":82},[76,174325,174326],{"class":86}," read_json",[76,174328,174329],{"class":90},"(path):\n",[76,174331,174332,174335,174337],{"class":78,"line":157},[76,174333,174334],{"class":90},"    path ",[76,174336,370],{"class":82},[76,174338,174339],{"class":90}," Path(path)\n",[76,174341,174342,174344,174346],{"class":78,"line":246},[76,174343,578],{"class":82},[76,174345,40967],{"class":82},[76,174347,171063],{"class":90},[76,174349,174350,174352],{"class":78,"line":251},[76,174351,595],{"class":82},[76,174353,53870],{"class":90},[76,174355,174356],{"class":78,"line":257},[76,174357,149],{"emptyLinePlaceholder":148},[76,174359,174360,174362,174364,174367,174369,174371,174373,174375,174377,174379,174381,174383],{"class":78,"line":641},[76,174361,36216],{"class":82},[76,174363,148808],{"class":119},[76,174365,174366],{"class":90},"(path, ",[76,174368,148818],{"class":126},[76,174370,405],{"class":90},[76,174372,148823],{"class":7296},[76,174374,370],{"class":82},[76,174376,148828],{"class":126},[76,174378,15767],{"class":90},[76,174380,33426],{"class":82},[76,174382,150170],{"class":7296},[76,174384,590],{"class":90},[76,174386,174387,174389,174391,174393],{"class":78,"line":646},[76,174388,595],{"class":82},[76,174390,150181],{"class":90},[76,174392,47389],{"class":7296},[76,174394,130],{"class":90},[76,174396,174397],{"class":78,"line":659},[76,174398,149],{"emptyLinePlaceholder":148},[76,174400,174401],{"class":78,"line":1608},[76,174402,149],{"emptyLinePlaceholder":148},[76,174404,174405,174407,174410],{"class":78,"line":1632},[76,174406,83],{"class":82},[76,174408,174409],{"class":86}," write_json",[76,174411,174412],{"class":90},"(path, data):\n",[76,174414,174415,174417,174419,174421,174423,174425,174427,174429,174431,174433,174435,174437],{"class":78,"line":1637},[76,174416,36216],{"class":82},[76,174418,148808],{"class":119},[76,174420,174366],{"class":90},[76,174422,153981],{"class":126},[76,174424,405],{"class":90},[76,174426,148823],{"class":7296},[76,174428,370],{"class":82},[76,174430,148828],{"class":126},[76,174432,15767],{"class":90},[76,174434,33426],{"class":82},[76,174436,150170],{"class":7296},[76,174438,590],{"class":90},[76,174440,174441,174444,174446,174448,174450,174452,174454,174456,174458,174460,174462],{"class":78,"line":1642},[76,174442,174443],{"class":90},"        json.dump(data, ",[76,174445,47389],{"class":7296},[76,174447,405],{"class":90},[76,174449,149154],{"class":7296},[76,174451,370],{"class":82},[76,174453,36025],{"class":119},[76,174455,405],{"class":90},[76,174457,154017],{"class":7296},[76,174459,370],{"class":82},[76,174461,2345],{"class":119},[76,174463,130],{"class":90},[19,174465,174466,26668],{},[73,174467,156601],{},[66,174469,174471],{"className":68,"code":174470,"language":70,"meta":71,"style":71},"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",[73,174472,174473,174484,174488,174501,174521],{"__ignoreMap":71},[76,174474,174475,174477,174479,174481],{"class":78,"line":79},[76,174476,32781],{"class":82},[76,174478,174094],{"class":90},[76,174480,32438],{"class":82},[76,174482,174483],{"class":90}," read_json, write_json\n",[76,174485,174486],{"class":78,"line":94},[76,174487,149],{"emptyLinePlaceholder":148},[76,174489,174490,174492,174494,174497,174499],{"class":78,"line":133},[76,174491,161703],{"class":90},[76,174493,370],{"class":82},[76,174495,174496],{"class":90}," read_json(",[76,174498,153836],{"class":126},[76,174500,130],{"class":90},[76,174502,174503,174505,174507,174509,174511,174513,174515,174517,174519],{"class":78,"line":145},[76,174504,172287],{"class":90},[76,174506,64707],{"class":126},[76,174508,53469],{"class":90},[76,174510,325],{"class":126},[76,174512,405],{"class":90},[76,174514,153477],{"class":126},[76,174516,53469],{"class":90},[76,174518,3243],{"class":119},[76,174520,166905],{"class":90},[76,174522,174523,174526,174528],{"class":78,"line":152},[76,174524,174525],{"class":90},"write_json(",[76,174527,153836],{"class":126},[76,174529,174530],{"class":90},", students)\n",[14,174532,174534],{"id":174533},"_918-易错点","9.18 易错点",[26,174536,174537,174540,174545,174550,174553,174556],{},[29,174538,174539],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174541,174542,174543,490],{},"能指定异常类型就不要裸写 ",[73,174544,172647],{},[29,174546,174547,174549],{},[73,174548,173022],{}," 无论是否出错都会执行。",[29,174551,174552],{},"模块文件名不要和标准库重名。",[29,174554,174555],{},"导入自己写的模块时，要注意运行目录。",[29,174557,174558],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174560,174562],{"id":174561},"_919-本章练习","9.19 本章练习",[26,174564,174565,174568,174571,174577,174584],{},[29,174566,174567],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174569,174570],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174572,173985,174573,174576],{},[73,174574,174575],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174578,174579,174580,174583],{},"创建一个 ",[73,174581,174582],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174585,174586],{},"写一个程序，捕获除零异常和输入格式异常。",[2178,174588,174589],{},"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":71,"searchDepth":94,"depth":94,"links":174591},[174592,174593,174594,174595,174596,174597,174598,174599,174600,174601,174602,174608,174615,174617,174618,174619,174620,174621,174622],{"id":172444,"depth":94,"text":172445},{"id":172572,"depth":94,"text":172573},{"id":172621,"depth":94,"text":172622},{"id":172770,"depth":94,"text":172771},{"id":172942,"depth":94,"text":172943},{"id":173011,"depth":94,"text":173012},{"id":173122,"depth":94,"text":173123},{"id":173248,"depth":94,"text":173249},{"id":173373,"depth":94,"text":173374},{"id":173428,"depth":94,"text":173429},{"id":173527,"depth":94,"text":173528,"children":174603},[174604,174605,174606,174607],{"id":173531,"depth":133,"text":173532},{"id":173565,"depth":133,"text":173566},{"id":173604,"depth":133,"text":173605},{"id":173683,"depth":133,"text":173684},{"id":173706,"depth":94,"text":173707,"children":174609},[174610,174611,174612,174613,174614],{"id":173710,"depth":133,"text":173711},{"id":173793,"depth":133,"text":173794},{"id":173838,"depth":133,"text":173839},{"id":173897,"depth":133,"text":173898},{"id":173935,"depth":133,"text":173936},{"id":173969,"depth":94,"text":174616},"9.13 if name == \"main\"",{"id":174062,"depth":94,"text":174063},{"id":174107,"depth":94,"text":174108},{"id":174218,"depth":94,"text":174219},{"id":174276,"depth":94,"text":174277},{"id":174533,"depth":94,"text":174534},{"id":174561,"depth":94,"text":174562},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172436,"description":2201},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174629,"title":174630,"body":174631,"description":174794,"extension":2202,"meta":174795,"navigation":148,"path":174796,"seo":174797,"stem":174798,"__hash__":174799},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174632,"toc":174789},[174633,174636,174639,174642,174653,174655,174729,174732,174735,174738,174741,174744,174747,174750,174753,174756,174759],[10,174634,174630],{"id":174635},"python教程",[19,174637,174638],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174640,174641],{},"建议学习环境：",[26,174643,174644,174647,174650],{},[29,174645,174646],{},"Python 版本：Python 3.10 及以上。",[29,174648,174649],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174651,174652],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174654,119098],{"id":119098},[26,174656,174657,174663,174669,174675,174681,174687,174693,174699,174705,174711,174717,174723],{},[29,174658,174659],{},[2503,174660,174662],{"href":174661},".\u002Fch1-Python","Python环境与第一个程序",[29,174664,174665],{},[2503,174666,174668],{"href":174667},".\u002Fch2","基础语法、变量与字符串",[29,174670,174671],{},[2503,174672,174674],{"href":174673},".\u002Fch3","判断语句",[29,174676,174677],{},[2503,174678,174680],{"href":174679},".\u002Fch4","循环语句",[29,174682,174683],{},[2503,174684,174686],{"href":174685},".\u002Fch5","函数基础",[29,174688,174689],{},[2503,174690,174692],{"href":174691},".\u002Fch6","数据容器",[29,174694,174695],{},[2503,174696,174698],{"href":174697},".\u002Fch7","函数进阶",[29,174700,174701],{},[2503,174702,174704],{"href":174703},".\u002Fch8","文件操作",[29,174706,174707],{},[2503,174708,174710],{"href":174709},".\u002Fch9","异常、模块与包",[29,174712,174713],{},[2503,174714,174716],{"href":174715},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174718,174719],{},[2503,174720,174722],{"href":174721},".\u002Fch11","面向对象基础",[29,174724,174725],{},[2503,174726,174728],{"href":174727},".\u002Fch12","综合案例与复习路线",[14,174730,174731],{"id":174731},"学习路线",[19,174733,174734],{},"第一阶段：能运行程序。",[19,174736,174737],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174739,174740],{},"第二阶段：能组织数据。",[19,174742,174743],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174745,174746],{},"第三阶段：能封装逻辑。",[19,174748,174749],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174751,174752],{},"第四阶段：能做小项目。",[19,174754,174755],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174757,174758],{"id":174758},"参考资料",[26,174760,174761,174768,174775,174782],{},[29,174762,174763,174764],{},"黑马程序员 Python 入门教程推荐：",[2503,174765,174766],{"href":174766,"rel":174767},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25914],[29,174769,174770,174771],{},"Python 官方中文教程：",[2503,174772,174773],{"href":174773,"rel":174774},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25914],[29,174776,174777,174778],{},"Python 标准库文档：",[2503,174779,174780],{"href":174780,"rel":174781},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25914],[29,174783,174784,174785],{},"pyecharts 文档：",[2503,174786,174787],{"href":174787,"rel":174788},"https:\u002F\u002Fpyecharts.org\u002F",[25914],{"title":71,"searchDepth":94,"depth":94,"links":174790},[174791,174792,174793],{"id":119098,"depth":94,"text":119098},{"id":174731,"depth":94,"text":174731},{"id":174758,"depth":94,"text":174758},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25427},"\u002Fwiki\u002F2024-10-10-python",{"title":174630,"description":174794},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331478881]