[{"data":1,"prerenderedAt":174944},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch9-yi-chang-mo-kuai-yu-bao":3,"wiki-doc-nav":2391},{"id":4,"title":5,"body":6,"description":2384,"extension":2385,"meta":2386,"navigation":842,"path":2387,"seo":2388,"stem":2389,"__hash__":2390},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":8,"toc":2351},"minimark",[9,13,18,22,25,126,129,165,171,175,178,181,217,224,227,231,234,266,268,323,329,383,387,494,497,570,574,637,640,648,652,658,664,757,762,766,769,860,863,902,906,1045,1048,1052,1055,1102,1105,1109,1116,1123,1178,1181,1212,1216,1221,1252,1256,1293,1297,1332,1372,1376,1392,1395,1399,1403,1489,1493,1536,1540,1596,1600,1635,1639,1669,1681,1688,1694,1756,1759,1769,1772,1776,1783,1786,1792,1795,1812,1817,1821,1828,1845,1848,1885,1888,1900,1903,1921,1924,1940,1944,1951,1987,1990,1993,1999,2002,2006,2008,2014,2019,2215,2220,2291,2295,2319,2323,2347],[10,11,5],"h1",{"id":12},"_9-异常模块与包",[14,15,17],"h2",{"id":16},"_91-什么是异常","9.1 什么是异常",[19,20,21],"p",{},"异常是程序运行过程中出现的错误。",[19,23,24],{},"常见异常：",[26,27,28,41],"table",{},[29,30,31],"thead",{},[32,33,34,38],"tr",{},[35,36,37],"th",{},"异常",[35,39,40],{},"说明",[42,43,44,56,66,76,86,96,106,116],"tbody",{},[32,45,46,53],{},[47,48,49],"td",{},[50,51,52],"code",{},"NameError",[47,54,55],{},"使用了未定义变量",[32,57,58,63],{},[47,59,60],{},[50,61,62],{},"TypeError",[47,64,65],{},"类型不匹配",[32,67,68,73],{},[47,69,70],{},[50,71,72],{},"ValueError",[47,74,75],{},"值不合法",[32,77,78,83],{},[47,79,80],{},[50,81,82],{},"IndexError",[47,84,85],{},"列表索引越界",[32,87,88,93],{},[47,89,90],{},[50,91,92],{},"KeyError",[47,94,95],{},"字典 key 不存在",[32,97,98,103],{},[47,99,100],{},[50,101,102],{},"FileNotFoundError",[47,104,105],{},"文件不存在",[32,107,108,113],{},[47,109,110],{},[50,111,112],{},"ZeroDivisionError",[47,114,115],{},"除数为 0",[32,117,118,123],{},[47,119,120],{},[50,121,122],{},"ImportError",[47,124,125],{},"导入失败",[19,127,128],{},"示例：",[130,131,136],"pre",{"className":132,"code":133,"language":134,"meta":135,"style":135},"language-python shiki shiki-themes github-light github-dark","num = int(\"abc\")\n","python","",[50,137,138],{"__ignoreMap":135},[139,140,143,147,151,155,158,162],"span",{"class":141,"line":142},"line",1,[139,144,146],{"class":145},"sVt8B","num ",[139,148,150],{"class":149},"szBVR","=",[139,152,154],{"class":153},"sj4cs"," int",[139,156,157],{"class":145},"(",[139,159,161],{"class":160},"sZZnC","\"abc\"",[139,163,164],{"class":145},")\n",[19,166,167,168,170],{},"会触发 ",[50,169,72],{},"。",[14,172,174],{"id":173},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,176,177],{},"如果不处理异常，程序会直接终止。",[19,179,180],{},"例如用户输入年龄：",[130,182,184],{"className":132,"code":183,"language":134,"meta":135,"style":135},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[50,185,186,208],{"__ignoreMap":135},[139,187,188,191,193,195,197,200,202,205],{"class":141,"line":142},[139,189,190],{"class":145},"age ",[139,192,150],{"class":149},[139,194,154],{"class":153},[139,196,157],{"class":145},[139,198,199],{"class":153},"input",[139,201,157],{"class":145},[139,203,204],{"class":160},"\"请输入年龄:\"",[139,206,207],{"class":145},"))\n",[139,209,211,214],{"class":141,"line":210},2,[139,212,213],{"class":153},"print",[139,215,216],{"class":145},"(age)\n",[19,218,219,220,223],{},"用户输入 ",[50,221,222],{},"abc","，程序就会报错退出。",[19,225,226],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,228,230],{"id":229},"_93-try-except","9.3 try except",[19,232,233],{},"基础语法：",[130,235,237],{"className":132,"code":236,"language":134,"meta":135,"style":135},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[50,238,239,247,252,260],{"__ignoreMap":135},[139,240,241,244],{"class":141,"line":142},[139,242,243],{"class":149},"try",[139,245,246],{"class":145},":\n",[139,248,249],{"class":141,"line":210},[139,250,251],{"class":145},"    可能出错的代码\n",[139,253,255,258],{"class":141,"line":254},3,[139,256,257],{"class":149},"except",[139,259,246],{"class":145},[139,261,263],{"class":141,"line":262},4,[139,264,265],{"class":145},"    出错后的处理代码\n",[19,267,128],{},[130,269,271],{"className":132,"code":270,"language":134,"meta":135,"style":135},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[50,272,273,279,298,305,311],{"__ignoreMap":135},[139,274,275,277],{"class":141,"line":142},[139,276,243],{"class":149},[139,278,246],{"class":145},[139,280,281,284,286,288,290,292,294,296],{"class":141,"line":210},[139,282,283],{"class":145},"    age ",[139,285,150],{"class":149},[139,287,154],{"class":153},[139,289,157],{"class":145},[139,291,199],{"class":153},[139,293,157],{"class":145},[139,295,204],{"class":160},[139,297,207],{"class":145},[139,299,300,303],{"class":141,"line":254},[139,301,302],{"class":153},"    print",[139,304,216],{"class":145},[139,306,307,309],{"class":141,"line":262},[139,308,257],{"class":149},[139,310,246],{"class":145},[139,312,314,316,318,321],{"class":141,"line":313},5,[139,315,302],{"class":153},[139,317,157],{"class":145},[139,319,320],{"class":160},"\"年龄必须是数字\"",[139,322,164],{"class":145},[19,324,325,326,328],{},"不建议裸写 ",[50,327,257],{},"，最好指定异常类型。",[130,330,332],{"className":132,"code":331,"language":134,"meta":135,"style":135},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[50,333,334,340,358,364,373],{"__ignoreMap":135},[139,335,336,338],{"class":141,"line":142},[139,337,243],{"class":149},[139,339,246],{"class":145},[139,341,342,344,346,348,350,352,354,356],{"class":141,"line":210},[139,343,283],{"class":145},[139,345,150],{"class":149},[139,347,154],{"class":153},[139,349,157],{"class":145},[139,351,199],{"class":153},[139,353,157],{"class":145},[139,355,204],{"class":160},[139,357,207],{"class":145},[139,359,360,362],{"class":141,"line":254},[139,361,302],{"class":153},[139,363,216],{"class":145},[139,365,366,368,371],{"class":141,"line":262},[139,367,257],{"class":149},[139,369,370],{"class":153}," ValueError",[139,372,246],{"class":145},[139,374,375,377,379,381],{"class":141,"line":313},[139,376,302],{"class":153},[139,378,157],{"class":145},[139,380,320],{"class":160},[139,382,164],{"class":145},[14,384,386],{"id":385},"_94-捕获多个异常","9.4 捕获多个异常",[130,388,390],{"className":132,"code":389,"language":134,"meta":135,"style":135},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[50,391,392,398,425,445,452,460,472,482],{"__ignoreMap":135},[139,393,394,396],{"class":141,"line":142},[139,395,243],{"class":149},[139,397,246],{"class":145},[139,399,400,403,405,408,411,414,417,419,422],{"class":141,"line":210},[139,401,402],{"class":145},"    nums ",[139,404,150],{"class":149},[139,406,407],{"class":145}," [",[139,409,410],{"class":153},"1",[139,412,413],{"class":145},", ",[139,415,416],{"class":153},"2",[139,418,413],{"class":145},[139,420,421],{"class":153},"3",[139,423,424],{"class":145},"]\n",[139,426,427,430,432,434,436,438,440,443],{"class":141,"line":254},[139,428,429],{"class":145},"    index ",[139,431,150],{"class":149},[139,433,154],{"class":153},[139,435,157],{"class":145},[139,437,199],{"class":153},[139,439,157],{"class":145},[139,441,442],{"class":160},"\"请输入索引:\"",[139,444,207],{"class":145},[139,446,447,449],{"class":141,"line":262},[139,448,302],{"class":153},[139,450,451],{"class":145},"(nums[index])\n",[139,453,454,456,458],{"class":141,"line":313},[139,455,257],{"class":149},[139,457,370],{"class":153},[139,459,246],{"class":145},[139,461,463,465,467,470],{"class":141,"line":462},6,[139,464,302],{"class":153},[139,466,157],{"class":145},[139,468,469],{"class":160},"\"索引必须是整数\"",[139,471,164],{"class":145},[139,473,475,477,480],{"class":141,"line":474},7,[139,476,257],{"class":149},[139,478,479],{"class":153}," IndexError",[139,481,246],{"class":145},[139,483,485,487,489,492],{"class":141,"line":484},8,[139,486,302],{"class":153},[139,488,157],{"class":145},[139,490,491],{"class":160},"\"索引越界\"",[139,493,164],{"class":145},[19,495,496],{},"多个异常使用相同处理逻辑：",[130,498,500],{"className":132,"code":499,"language":134,"meta":135,"style":135},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[50,501,502,508,528,543,559],{"__ignoreMap":135},[139,503,504,506],{"class":141,"line":142},[139,505,243],{"class":149},[139,507,246],{"class":145},[139,509,510,513,515,517,519,521,523,526],{"class":141,"line":210},[139,511,512],{"class":145},"    num ",[139,514,150],{"class":149},[139,516,154],{"class":153},[139,518,157],{"class":145},[139,520,199],{"class":153},[139,522,157],{"class":145},[139,524,525],{"class":160},"\"请输入数字:\"",[139,527,207],{"class":145},[139,529,530,532,534,537,540],{"class":141,"line":254},[139,531,302],{"class":153},[139,533,157],{"class":145},[139,535,536],{"class":153},"10",[139,538,539],{"class":149}," \u002F",[139,541,542],{"class":145}," num)\n",[139,544,545,547,550,552,554,556],{"class":141,"line":262},[139,546,257],{"class":149},[139,548,549],{"class":145}," (",[139,551,72],{"class":153},[139,553,413],{"class":145},[139,555,112],{"class":153},[139,557,558],{"class":145},"):\n",[139,560,561,563,565,568],{"class":141,"line":313},[139,562,302],{"class":153},[139,564,157],{"class":145},[139,566,567],{"class":160},"\"输入不合法\"",[139,569,164],{"class":145},[14,571,573],{"id":572},"_95-获取异常信息","9.5 获取异常信息",[130,575,577],{"className":132,"code":576,"language":134,"meta":135,"style":135},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[50,578,579,585,599,611],{"__ignoreMap":135},[139,580,581,583],{"class":141,"line":142},[139,582,243],{"class":149},[139,584,246],{"class":145},[139,586,587,589,591,593,595,597],{"class":141,"line":210},[139,588,512],{"class":145},[139,590,150],{"class":149},[139,592,154],{"class":153},[139,594,157],{"class":145},[139,596,161],{"class":160},[139,598,164],{"class":145},[139,600,601,603,605,608],{"class":141,"line":254},[139,602,257],{"class":149},[139,604,370],{"class":153},[139,606,607],{"class":149}," as",[139,609,610],{"class":145}," e:\n",[139,612,613,615,617,620,623,626,629,632,635],{"class":141,"line":262},[139,614,302],{"class":153},[139,616,157],{"class":145},[139,618,619],{"class":149},"f",[139,621,622],{"class":160},"\"出错了:",[139,624,625],{"class":153},"{",[139,627,628],{"class":145},"e",[139,630,631],{"class":153},"}",[139,633,634],{"class":160},"\"",[139,636,164],{"class":145},[19,638,639],{},"输出：",[130,641,646],{"className":642,"code":644,"language":645,"meta":135},[643],"language-text","出错了:invalid literal for int() with base 10: 'abc'\n","text",[50,647,644],{"__ignoreMap":135},[14,649,651],{"id":650},"_96-else和finally","9.6 else和finally",[19,653,654,657],{},[50,655,656],{},"else","：没有异常时执行。",[19,659,660,663],{},[50,661,662],{},"finally","：无论是否异常都会执行。",[130,665,667],{"className":132,"code":666,"language":134,"meta":135,"style":135},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[50,668,669,675,693,701,712,718,740,746],{"__ignoreMap":135},[139,670,671,673],{"class":141,"line":142},[139,672,243],{"class":149},[139,674,246],{"class":145},[139,676,677,679,681,683,685,687,689,691],{"class":141,"line":210},[139,678,512],{"class":145},[139,680,150],{"class":149},[139,682,154],{"class":153},[139,684,157],{"class":145},[139,686,199],{"class":153},[139,688,157],{"class":145},[139,690,525],{"class":160},[139,692,207],{"class":145},[139,694,695,697,699],{"class":141,"line":254},[139,696,257],{"class":149},[139,698,370],{"class":153},[139,700,246],{"class":145},[139,702,703,705,707,710],{"class":141,"line":262},[139,704,302],{"class":153},[139,706,157],{"class":145},[139,708,709],{"class":160},"\"输入错误\"",[139,711,164],{"class":145},[139,713,714,716],{"class":141,"line":313},[139,715,656],{"class":149},[139,717,246],{"class":145},[139,719,720,722,724,726,729,731,734,736,738],{"class":141,"line":462},[139,721,302],{"class":153},[139,723,157],{"class":145},[139,725,619],{"class":149},[139,727,728],{"class":160},"\"输入正确:",[139,730,625],{"class":153},[139,732,733],{"class":145},"num",[139,735,631],{"class":153},[139,737,634],{"class":160},[139,739,164],{"class":145},[139,741,742,744],{"class":141,"line":474},[139,743,662],{"class":149},[139,745,246],{"class":145},[139,747,748,750,752,755],{"class":141,"line":484},[139,749,302],{"class":153},[139,751,157],{"class":145},[139,753,754],{"class":160},"\"程序结束\"",[139,756,164],{"class":145},[19,758,759,761],{},[50,760,662],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,763,765],{"id":764},"_97-抛出异常","9.7 抛出异常",[19,767,768],{},"程序可以主动抛出异常。",[130,770,772],{"className":132,"code":771,"language":134,"meta":135,"style":135},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[50,773,774,786,802,816,838,844,848],{"__ignoreMap":135},[139,775,776,779,783],{"class":141,"line":142},[139,777,778],{"class":149},"def",[139,780,782],{"class":781},"sScJk"," set_age",[139,784,785],{"class":145},"(age):\n",[139,787,788,791,794,797,800],{"class":141,"line":210},[139,789,790],{"class":149},"    if",[139,792,793],{"class":145}," age ",[139,795,796],{"class":149},"\u003C",[139,798,799],{"class":153}," 0",[139,801,246],{"class":145},[139,803,804,807,809,811,814],{"class":141,"line":254},[139,805,806],{"class":149},"        raise",[139,808,370],{"class":153},[139,810,157],{"class":145},[139,812,813],{"class":160},"\"年龄不能为负数\"",[139,815,164],{"class":145},[139,817,818,820,822,824,827,829,832,834,836],{"class":141,"line":262},[139,819,302],{"class":153},[139,821,157],{"class":145},[139,823,619],{"class":149},[139,825,826],{"class":160},"\"年龄:",[139,828,625],{"class":153},[139,830,831],{"class":145},"age",[139,833,631],{"class":153},[139,835,634],{"class":160},[139,837,164],{"class":145},[139,839,840],{"class":141,"line":313},[139,841,843],{"emptyLinePlaceholder":842},true,"\n",[139,845,846],{"class":141,"line":462},[139,847,843],{"emptyLinePlaceholder":842},[139,849,850,853,856,858],{"class":141,"line":474},[139,851,852],{"class":145},"set_age(",[139,854,855],{"class":149},"-",[139,857,410],{"class":153},[139,859,164],{"class":145},[19,861,862],{},"调用者可以捕获：",[130,864,866],{"className":132,"code":865,"language":134,"meta":135,"style":135},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[50,867,868,874,885,895],{"__ignoreMap":135},[139,869,870,872],{"class":141,"line":142},[139,871,243],{"class":149},[139,873,246],{"class":145},[139,875,876,879,881,883],{"class":141,"line":210},[139,877,878],{"class":145},"    set_age(",[139,880,855],{"class":149},[139,882,410],{"class":153},[139,884,164],{"class":145},[139,886,887,889,891,893],{"class":141,"line":254},[139,888,257],{"class":149},[139,890,370],{"class":153},[139,892,607],{"class":149},[139,894,610],{"class":145},[139,896,897,899],{"class":141,"line":262},[139,898,302],{"class":153},[139,900,901],{"class":145},"(e)\n",[14,903,905],{"id":904},"_98-自定义异常","9.8 自定义异常",[130,907,909],{"className":132,"code":908,"language":134,"meta":135,"style":135},"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",[50,910,911,926,931,935,939,949,962,974,987,992,997,1004,1025,1038],{"__ignoreMap":135},[139,912,913,916,919,921,924],{"class":141,"line":142},[139,914,915],{"class":149},"class",[139,917,918],{"class":781}," BalanceNotEnoughError",[139,920,157],{"class":145},[139,922,923],{"class":153},"Exception",[139,925,558],{"class":145},[139,927,928],{"class":141,"line":210},[139,929,930],{"class":149},"    pass\n",[139,932,933],{"class":141,"line":254},[139,934,843],{"emptyLinePlaceholder":842},[139,936,937],{"class":141,"line":262},[139,938,843],{"emptyLinePlaceholder":842},[139,940,941,943,946],{"class":141,"line":313},[139,942,778],{"class":149},[139,944,945],{"class":781}," withdraw",[139,947,948],{"class":145},"(balance, money):\n",[139,950,951,953,956,959],{"class":141,"line":462},[139,952,790],{"class":149},[139,954,955],{"class":145}," money ",[139,957,958],{"class":149},">",[139,960,961],{"class":145}," balance:\n",[139,963,964,966,969,972],{"class":141,"line":474},[139,965,806],{"class":149},[139,967,968],{"class":145}," BalanceNotEnoughError(",[139,970,971],{"class":160},"\"余额不足\"",[139,973,164],{"class":145},[139,975,976,979,982,984],{"class":141,"line":484},[139,977,978],{"class":149},"    return",[139,980,981],{"class":145}," balance ",[139,983,855],{"class":149},[139,985,986],{"class":145}," money\n",[139,988,990],{"class":141,"line":989},9,[139,991,843],{"emptyLinePlaceholder":842},[139,993,995],{"class":141,"line":994},10,[139,996,843],{"emptyLinePlaceholder":842},[139,998,1000,1002],{"class":141,"line":999},11,[139,1001,243],{"class":149},[139,1003,246],{"class":145},[139,1005,1007,1010,1012,1015,1018,1020,1023],{"class":141,"line":1006},12,[139,1008,1009],{"class":145},"    balance ",[139,1011,150],{"class":149},[139,1013,1014],{"class":145}," withdraw(",[139,1016,1017],{"class":153},"100",[139,1019,413],{"class":145},[139,1021,1022],{"class":153},"200",[139,1024,164],{"class":145},[139,1026,1028,1030,1033,1036],{"class":141,"line":1027},13,[139,1029,257],{"class":149},[139,1031,1032],{"class":145}," BalanceNotEnoughError ",[139,1034,1035],{"class":149},"as",[139,1037,610],{"class":145},[139,1039,1041,1043],{"class":141,"line":1040},14,[139,1042,302],{"class":153},[139,1044,901],{"class":145},[19,1046,1047],{},"入门阶段大多数情况使用内置异常即可。",[14,1049,1051],{"id":1050},"_99-traceback","9.9 traceback",[19,1053,1054],{},"调试时可以输出完整异常堆栈。",[130,1056,1058],{"className":132,"code":1057,"language":134,"meta":135,"style":135},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[50,1059,1060,1068,1072,1078,1089,1097],{"__ignoreMap":135},[139,1061,1062,1065],{"class":141,"line":142},[139,1063,1064],{"class":149},"import",[139,1066,1067],{"class":145}," traceback\n",[139,1069,1070],{"class":141,"line":210},[139,1071,843],{"emptyLinePlaceholder":842},[139,1073,1074,1076],{"class":141,"line":254},[139,1075,243],{"class":149},[139,1077,246],{"class":145},[139,1079,1080,1083,1085,1087],{"class":141,"line":262},[139,1081,1082],{"class":153},"    int",[139,1084,157],{"class":145},[139,1086,161],{"class":160},[139,1088,164],{"class":145},[139,1090,1091,1093,1095],{"class":141,"line":313},[139,1092,257],{"class":149},[139,1094,370],{"class":153},[139,1096,246],{"class":145},[139,1098,1099],{"class":141,"line":462},[139,1100,1101],{"class":145},"    traceback.print_exc()\n",[19,1103,1104],{},"日志系统中常把异常堆栈记录到文件。",[14,1106,1108],{"id":1107},"_910-什么是模块","9.10 什么是模块",[19,1110,1111,1112,1115],{},"模块就是一个 ",[50,1113,1114],{},".py"," 文件。",[19,1117,1118,1119,1122],{},"例如创建 ",[50,1120,1121],{},"my_math.py","：",[130,1124,1126],{"className":132,"code":1125,"language":134,"meta":135,"style":135},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[50,1127,1128,1138,1151,1155,1159,1168],{"__ignoreMap":135},[139,1129,1130,1132,1135],{"class":141,"line":142},[139,1131,778],{"class":149},[139,1133,1134],{"class":781}," add",[139,1136,1137],{"class":145},"(a, b):\n",[139,1139,1140,1142,1145,1148],{"class":141,"line":210},[139,1141,978],{"class":149},[139,1143,1144],{"class":145}," a ",[139,1146,1147],{"class":149},"+",[139,1149,1150],{"class":145}," b\n",[139,1152,1153],{"class":141,"line":254},[139,1154,843],{"emptyLinePlaceholder":842},[139,1156,1157],{"class":141,"line":262},[139,1158,843],{"emptyLinePlaceholder":842},[139,1160,1161,1163,1166],{"class":141,"line":313},[139,1162,778],{"class":149},[139,1164,1165],{"class":781}," sub",[139,1167,1137],{"class":145},[139,1169,1170,1172,1174,1176],{"class":141,"line":462},[139,1171,978],{"class":149},[139,1173,1144],{"class":145},[139,1175,855],{"class":149},[139,1177,1150],{"class":145},[19,1179,1180],{},"在另一个文件中导入：",[130,1182,1184],{"className":132,"code":1183,"language":134,"meta":135,"style":135},"import my_math\n\nprint(my_math.add(1, 2))\n",[50,1185,1186,1193,1197],{"__ignoreMap":135},[139,1187,1188,1190],{"class":141,"line":142},[139,1189,1064],{"class":149},[139,1191,1192],{"class":145}," my_math\n",[139,1194,1195],{"class":141,"line":210},[139,1196,843],{"emptyLinePlaceholder":842},[139,1198,1199,1201,1204,1206,1208,1210],{"class":141,"line":254},[139,1200,213],{"class":153},[139,1202,1203],{"class":145},"(my_math.add(",[139,1205,410],{"class":153},[139,1207,413],{"class":145},[139,1209,416],{"class":153},[139,1211,207],{"class":145},[14,1213,1215],{"id":1214},"_911-import导入","9.11 import导入",[1217,1218,1220],"h3",{"id":1219},"_9111-导入模块","9.11.1 导入模块",[130,1222,1224],{"className":132,"code":1223,"language":134,"meta":135,"style":135},"import random\n\nprint(random.randint(1, 10))\n",[50,1225,1226,1233,1237],{"__ignoreMap":135},[139,1227,1228,1230],{"class":141,"line":142},[139,1229,1064],{"class":149},[139,1231,1232],{"class":145}," random\n",[139,1234,1235],{"class":141,"line":210},[139,1236,843],{"emptyLinePlaceholder":842},[139,1238,1239,1241,1244,1246,1248,1250],{"class":141,"line":254},[139,1240,213],{"class":153},[139,1242,1243],{"class":145},"(random.randint(",[139,1245,410],{"class":153},[139,1247,413],{"class":145},[139,1249,536],{"class":153},[139,1251,207],{"class":145},[1217,1253,1255],{"id":1254},"_9112-导入指定内容","9.11.2 导入指定内容",[130,1257,1259],{"className":132,"code":1258,"language":134,"meta":135,"style":135},"from random import randint\n\nprint(randint(1, 10))\n",[50,1260,1261,1274,1278],{"__ignoreMap":135},[139,1262,1263,1266,1269,1271],{"class":141,"line":142},[139,1264,1265],{"class":149},"from",[139,1267,1268],{"class":145}," random ",[139,1270,1064],{"class":149},[139,1272,1273],{"class":145}," randint\n",[139,1275,1276],{"class":141,"line":210},[139,1277,843],{"emptyLinePlaceholder":842},[139,1279,1280,1282,1285,1287,1289,1291],{"class":141,"line":254},[139,1281,213],{"class":153},[139,1283,1284],{"class":145},"(randint(",[139,1286,410],{"class":153},[139,1288,413],{"class":145},[139,1290,536],{"class":153},[139,1292,207],{"class":145},[1217,1294,1296],{"id":1295},"_9113-起别名","9.11.3 起别名",[130,1298,1300],{"className":132,"code":1299,"language":134,"meta":135,"style":135},"import random as rd\n\nprint(rd.randint(1, 10))\n",[50,1301,1302,1313,1317],{"__ignoreMap":135},[139,1303,1304,1306,1308,1310],{"class":141,"line":142},[139,1305,1064],{"class":149},[139,1307,1268],{"class":145},[139,1309,1035],{"class":149},[139,1311,1312],{"class":145}," rd\n",[139,1314,1315],{"class":141,"line":210},[139,1316,843],{"emptyLinePlaceholder":842},[139,1318,1319,1321,1324,1326,1328,1330],{"class":141,"line":254},[139,1320,213],{"class":153},[139,1322,1323],{"class":145},"(rd.randint(",[139,1325,410],{"class":153},[139,1327,413],{"class":145},[139,1329,536],{"class":153},[139,1331,207],{"class":145},[130,1333,1335],{"className":132,"code":1334,"language":134,"meta":135,"style":135},"from random import randint as rint\n\nprint(rint(1, 10))\n",[50,1336,1337,1353,1357],{"__ignoreMap":135},[139,1338,1339,1341,1343,1345,1348,1350],{"class":141,"line":142},[139,1340,1265],{"class":149},[139,1342,1268],{"class":145},[139,1344,1064],{"class":149},[139,1346,1347],{"class":145}," randint ",[139,1349,1035],{"class":149},[139,1351,1352],{"class":145}," rint\n",[139,1354,1355],{"class":141,"line":210},[139,1356,843],{"emptyLinePlaceholder":842},[139,1358,1359,1361,1364,1366,1368,1370],{"class":141,"line":254},[139,1360,213],{"class":153},[139,1362,1363],{"class":145},"(rint(",[139,1365,410],{"class":153},[139,1367,413],{"class":145},[139,1369,536],{"class":153},[139,1371,207],{"class":145},[1217,1373,1375],{"id":1374},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[130,1377,1379],{"className":132,"code":1378,"language":134,"meta":135,"style":135},"from random import *\n",[50,1380,1381],{"__ignoreMap":135},[139,1382,1383,1385,1387,1389],{"class":141,"line":142},[139,1384,1265],{"class":149},[139,1386,1268],{"class":145},[139,1388,1064],{"class":149},[139,1390,1391],{"class":149}," *\n",[19,1393,1394],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,1396,1398],{"id":1397},"_912-常用内置模块","9.12 常用内置模块",[1217,1400,1402],{"id":1401},"_9121-random","9.12.1 random",[130,1404,1406],{"className":132,"code":1405,"language":134,"meta":135,"style":135},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[50,1407,1408,1414,1418,1432,1455],{"__ignoreMap":135},[139,1409,1410,1412],{"class":141,"line":142},[139,1411,1064],{"class":149},[139,1413,1232],{"class":145},[139,1415,1416],{"class":141,"line":210},[139,1417,843],{"emptyLinePlaceholder":842},[139,1419,1420,1422,1424,1426,1428,1430],{"class":141,"line":254},[139,1421,213],{"class":153},[139,1423,1243],{"class":145},[139,1425,410],{"class":153},[139,1427,413],{"class":145},[139,1429,536],{"class":153},[139,1431,207],{"class":145},[139,1433,1434,1436,1439,1442,1444,1447,1449,1452],{"class":141,"line":262},[139,1435,213],{"class":153},[139,1437,1438],{"class":145},"(random.choice([",[139,1440,1441],{"class":160},"\"小明\"",[139,1443,413],{"class":145},[139,1445,1446],{"class":160},"\"小红\"",[139,1448,413],{"class":145},[139,1450,1451],{"class":160},"\"小刚\"",[139,1453,1454],{"class":145},"]))\n",[139,1456,1457,1459,1462,1464,1466,1468,1470,1472,1474,1477,1479,1482,1485,1487],{"class":141,"line":313},[139,1458,213],{"class":153},[139,1460,1461],{"class":145},"(random.sample([",[139,1463,410],{"class":153},[139,1465,413],{"class":145},[139,1467,416],{"class":153},[139,1469,413],{"class":145},[139,1471,421],{"class":153},[139,1473,413],{"class":145},[139,1475,1476],{"class":153},"4",[139,1478,413],{"class":145},[139,1480,1481],{"class":153},"5",[139,1483,1484],{"class":145},"], ",[139,1486,416],{"class":153},[139,1488,207],{"class":145},[1217,1490,1492],{"id":1491},"_9122-time","9.12.2 time",[130,1494,1496],{"className":132,"code":1495,"language":134,"meta":135,"style":135},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[50,1497,1498,1505,1509,1516,1525],{"__ignoreMap":135},[139,1499,1500,1502],{"class":141,"line":142},[139,1501,1064],{"class":149},[139,1503,1504],{"class":145}," time\n",[139,1506,1507],{"class":141,"line":210},[139,1508,843],{"emptyLinePlaceholder":842},[139,1510,1511,1513],{"class":141,"line":254},[139,1512,213],{"class":153},[139,1514,1515],{"class":145},"(time.time())\n",[139,1517,1518,1521,1523],{"class":141,"line":262},[139,1519,1520],{"class":145},"time.sleep(",[139,1522,410],{"class":153},[139,1524,164],{"class":145},[139,1526,1527,1529,1531,1534],{"class":141,"line":313},[139,1528,213],{"class":153},[139,1530,157],{"class":145},[139,1532,1533],{"class":160},"\"1秒后执行\"",[139,1535,164],{"class":145},[1217,1537,1539],{"id":1538},"_9123-datetime","9.12.3 datetime",[130,1541,1543],{"className":132,"code":1542,"language":134,"meta":135,"style":135},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[50,1544,1545,1557,1561,1571,1578],{"__ignoreMap":135},[139,1546,1547,1549,1552,1554],{"class":141,"line":142},[139,1548,1265],{"class":149},[139,1550,1551],{"class":145}," datetime ",[139,1553,1064],{"class":149},[139,1555,1556],{"class":145}," datetime\n",[139,1558,1559],{"class":141,"line":210},[139,1560,843],{"emptyLinePlaceholder":842},[139,1562,1563,1566,1568],{"class":141,"line":254},[139,1564,1565],{"class":145},"now ",[139,1567,150],{"class":149},[139,1569,1570],{"class":145}," datetime.now()\n",[139,1572,1573,1575],{"class":141,"line":262},[139,1574,213],{"class":153},[139,1576,1577],{"class":145},"(now)\n",[139,1579,1580,1582,1585,1588,1591,1594],{"class":141,"line":313},[139,1581,213],{"class":153},[139,1583,1584],{"class":145},"(now.strftime(",[139,1586,1587],{"class":160},"\"%Y-%m-",[139,1589,1590],{"class":153},"%d",[139,1592,1593],{"class":160}," %H:%M:%S\"",[139,1595,207],{"class":145},[1217,1597,1599],{"id":1598},"_9124-os","9.12.4 os",[130,1601,1603],{"className":132,"code":1602,"language":134,"meta":135,"style":135},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[50,1604,1605,1612,1616,1623],{"__ignoreMap":135},[139,1606,1607,1609],{"class":141,"line":142},[139,1608,1064],{"class":149},[139,1610,1611],{"class":145}," os\n",[139,1613,1614],{"class":141,"line":210},[139,1615,843],{"emptyLinePlaceholder":842},[139,1617,1618,1620],{"class":141,"line":254},[139,1619,213],{"class":153},[139,1621,1622],{"class":145},"(os.getcwd())\n",[139,1624,1625,1627,1630,1633],{"class":141,"line":262},[139,1626,213],{"class":153},[139,1628,1629],{"class":145},"(os.listdir(",[139,1631,1632],{"class":160},"\".\"",[139,1634,207],{"class":145},[1217,1636,1638],{"id":1637},"_9125-sys","9.12.5 sys",[130,1640,1642],{"className":132,"code":1641,"language":134,"meta":135,"style":135},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[50,1643,1644,1651,1655,1662],{"__ignoreMap":135},[139,1645,1646,1648],{"class":141,"line":142},[139,1647,1064],{"class":149},[139,1649,1650],{"class":145}," sys\n",[139,1652,1653],{"class":141,"line":210},[139,1654,843],{"emptyLinePlaceholder":842},[139,1656,1657,1659],{"class":141,"line":254},[139,1658,213],{"class":153},[139,1660,1661],{"class":145},"(sys.version)\n",[139,1663,1664,1666],{"class":141,"line":262},[139,1665,213],{"class":153},[139,1667,1668],{"class":145},"(sys.path)\n",[14,1670,1672,1673,1677,1678,634],{"id":1671},"_913-if-name-main","9.13 if ",[1674,1675,1676],"strong",{},"name"," == \"",[1674,1679,1680],{},"main",[19,1682,1683,1684,1687],{},"模块被直接运行和被导入时，",[50,1685,1686],{},"__name__"," 的值不同。",[19,1689,1690,1691,1122],{},"创建 ",[50,1692,1693],{},"my_module.py",[130,1695,1697],{"className":132,"code":1696,"language":134,"meta":135,"style":135},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[50,1698,1699,1707,1717,1721,1725,1741],{"__ignoreMap":135},[139,1700,1701,1703,1705],{"class":141,"line":142},[139,1702,778],{"class":149},[139,1704,1134],{"class":781},[139,1706,1137],{"class":145},[139,1708,1709,1711,1713,1715],{"class":141,"line":210},[139,1710,978],{"class":149},[139,1712,1144],{"class":145},[139,1714,1147],{"class":149},[139,1716,1150],{"class":145},[139,1718,1719],{"class":141,"line":254},[139,1720,843],{"emptyLinePlaceholder":842},[139,1722,1723],{"class":141,"line":262},[139,1724,843],{"emptyLinePlaceholder":842},[139,1726,1727,1730,1733,1736,1739],{"class":141,"line":313},[139,1728,1729],{"class":149},"if",[139,1731,1732],{"class":153}," __name__",[139,1734,1735],{"class":149}," ==",[139,1737,1738],{"class":160}," \"__main__\"",[139,1740,246],{"class":145},[139,1742,1743,1745,1748,1750,1752,1754],{"class":141,"line":462},[139,1744,302],{"class":153},[139,1746,1747],{"class":145},"(add(",[139,1749,410],{"class":153},[139,1751,413],{"class":145},[139,1753,416],{"class":153},[139,1755,207],{"class":145},[19,1757,1758],{},"作用：",[1760,1761,1762,1766],"ol",{},[1763,1764,1765],"li",{},"直接运行该文件时，执行测试代码。",[1763,1767,1768],{},"被其他文件导入时，不执行测试代码。",[19,1770,1771],{},"这是写模块时很常用的习惯。",[14,1773,1775],{"id":1774},"_914-包","9.14 包",[19,1777,1778,1779,1782],{},"包是包含 ",[50,1780,1781],{},"__init__.py"," 的目录，用于组织多个模块。",[19,1784,1785],{},"目录结构：",[130,1787,1790],{"className":1788,"code":1789,"language":645,"meta":135},[643],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[50,1791,1789],{"__ignoreMap":135},[19,1793,1794],{},"导入：",[130,1796,1798],{"className":132,"code":1797,"language":134,"meta":135,"style":135},"from utils.file_utils import read_file\n",[50,1799,1800],{"__ignoreMap":135},[139,1801,1802,1804,1807,1809],{"class":141,"line":142},[139,1803,1265],{"class":149},[139,1805,1806],{"class":145}," utils.file_utils ",[139,1808,1064],{"class":149},[139,1810,1811],{"class":145}," read_file\n",[19,1813,1814,1816],{},[50,1815,1781],{}," 可以为空，也可以写包初始化逻辑。",[14,1818,1820],{"id":1819},"_915-第三方包","9.15 第三方包",[19,1822,1823,1824,1827],{},"第三方包通过 ",[50,1825,1826],{},"pip"," 安装。",[130,1829,1833],{"className":1830,"code":1831,"language":1832,"meta":135,"style":135},"language-bash shiki shiki-themes github-light github-dark","pip install requests\n","bash",[50,1834,1835],{"__ignoreMap":135},[139,1836,1837,1839,1842],{"class":141,"line":142},[139,1838,1826],{"class":781},[139,1840,1841],{"class":160}," install",[139,1843,1844],{"class":160}," requests\n",[19,1846,1847],{},"使用：",[130,1849,1851],{"className":132,"code":1850,"language":134,"meta":135,"style":135},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[50,1852,1853,1859,1863,1878],{"__ignoreMap":135},[139,1854,1855,1857],{"class":141,"line":142},[139,1856,1064],{"class":149},[139,1858,1844],{"class":145},[139,1860,1861],{"class":141,"line":210},[139,1862,843],{"emptyLinePlaceholder":842},[139,1864,1865,1868,1870,1873,1876],{"class":141,"line":254},[139,1866,1867],{"class":145},"response ",[139,1869,150],{"class":149},[139,1871,1872],{"class":145}," requests.get(",[139,1874,1875],{"class":160},"\"https:\u002F\u002Fwww.example.com\"",[139,1877,164],{"class":145},[139,1879,1880,1882],{"class":141,"line":262},[139,1881,213],{"class":153},[139,1883,1884],{"class":145},"(response.status_code)\n",[19,1886,1887],{},"查看已安装包：",[130,1889,1891],{"className":1830,"code":1890,"language":1832,"meta":135,"style":135},"pip list\n",[50,1892,1893],{"__ignoreMap":135},[139,1894,1895,1897],{"class":141,"line":142},[139,1896,1826],{"class":781},[139,1898,1899],{"class":160}," list\n",[19,1901,1902],{},"导出项目依赖：",[130,1904,1906],{"className":1830,"code":1905,"language":1832,"meta":135,"style":135},"pip freeze > requirements.txt\n",[50,1907,1908],{"__ignoreMap":135},[139,1909,1910,1912,1915,1918],{"class":141,"line":142},[139,1911,1826],{"class":781},[139,1913,1914],{"class":160}," freeze",[139,1916,1917],{"class":149}," >",[139,1919,1920],{"class":160}," requirements.txt\n",[19,1922,1923],{},"安装项目依赖：",[130,1925,1927],{"className":1830,"code":1926,"language":1832,"meta":135,"style":135},"pip install -r requirements.txt\n",[50,1928,1929],{"__ignoreMap":135},[139,1930,1931,1933,1935,1938],{"class":141,"line":142},[139,1932,1826],{"class":781},[139,1934,1841],{"class":160},[139,1936,1937],{"class":153}," -r",[139,1939,1920],{"class":160},[14,1941,1943],{"id":1942},"_916-模块搜索路径","9.16 模块搜索路径",[19,1945,1946,1947,1950],{},"Python 导入模块时会在 ",[50,1948,1949],{},"sys.path"," 中查找。",[130,1952,1954],{"className":132,"code":1953,"language":134,"meta":135,"style":135},"import sys\n\nfor path in sys.path:\n    print(path)\n",[50,1955,1956,1962,1966,1980],{"__ignoreMap":135},[139,1957,1958,1960],{"class":141,"line":142},[139,1959,1064],{"class":149},[139,1961,1650],{"class":145},[139,1963,1964],{"class":141,"line":210},[139,1965,843],{"emptyLinePlaceholder":842},[139,1967,1968,1971,1974,1977],{"class":141,"line":254},[139,1969,1970],{"class":149},"for",[139,1972,1973],{"class":145}," path ",[139,1975,1976],{"class":149},"in",[139,1978,1979],{"class":145}," sys.path:\n",[139,1981,1982,1984],{"class":141,"line":262},[139,1983,302],{"class":153},[139,1985,1986],{"class":145},"(path)\n",[19,1988,1989],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,1991,1992],{},"错误示例：",[130,1994,1997],{"className":1995,"code":1996,"language":645,"meta":135},[643],"random.py\njson.py\ntime.py\n",[50,1998,1996],{"__ignoreMap":135},[19,2000,2001],{},"这些文件名可能导致导入异常。",[14,2003,2005],{"id":2004},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,2007,1785],{},[130,2009,2012],{"className":2010,"code":2011,"language":645,"meta":135},[643],"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",[50,2013,2011],{"__ignoreMap":135},[19,2015,2016,1122],{},[50,2017,2018],{},"utils\u002Ffile_utils.py",[130,2020,2022],{"className":132,"code":2021,"language":134,"meta":135,"style":135},"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",[50,2023,2024,2031,2043,2047,2051,2061,2071,2081,2089,2093,2128,2140,2144,2148,2158,2186],{"__ignoreMap":135},[139,2025,2026,2028],{"class":141,"line":142},[139,2027,1064],{"class":149},[139,2029,2030],{"class":145}," json\n",[139,2032,2033,2035,2038,2040],{"class":141,"line":210},[139,2034,1265],{"class":149},[139,2036,2037],{"class":145}," pathlib ",[139,2039,1064],{"class":149},[139,2041,2042],{"class":145}," Path\n",[139,2044,2045],{"class":141,"line":254},[139,2046,843],{"emptyLinePlaceholder":842},[139,2048,2049],{"class":141,"line":262},[139,2050,843],{"emptyLinePlaceholder":842},[139,2052,2053,2055,2058],{"class":141,"line":313},[139,2054,778],{"class":149},[139,2056,2057],{"class":781}," read_json",[139,2059,2060],{"class":145},"(path):\n",[139,2062,2063,2066,2068],{"class":141,"line":462},[139,2064,2065],{"class":145},"    path ",[139,2067,150],{"class":149},[139,2069,2070],{"class":145}," Path(path)\n",[139,2072,2073,2075,2078],{"class":141,"line":474},[139,2074,790],{"class":149},[139,2076,2077],{"class":149}," not",[139,2079,2080],{"class":145}," path.exists():\n",[139,2082,2083,2086],{"class":141,"line":484},[139,2084,2085],{"class":149},"        return",[139,2087,2088],{"class":145}," []\n",[139,2090,2091],{"class":141,"line":989},[139,2092,843],{"emptyLinePlaceholder":842},[139,2094,2095,2098,2101,2104,2107,2109,2113,2115,2118,2121,2123,2126],{"class":141,"line":994},[139,2096,2097],{"class":149},"    with",[139,2099,2100],{"class":153}," open",[139,2102,2103],{"class":145},"(path, ",[139,2105,2106],{"class":160},"\"r\"",[139,2108,413],{"class":145},[139,2110,2112],{"class":2111},"s4XuR","encoding",[139,2114,150],{"class":149},[139,2116,2117],{"class":160},"\"utf-8\"",[139,2119,2120],{"class":145},") ",[139,2122,1035],{"class":149},[139,2124,2125],{"class":2111}," file",[139,2127,246],{"class":145},[139,2129,2130,2132,2135,2138],{"class":141,"line":999},[139,2131,2085],{"class":149},[139,2133,2134],{"class":145}," json.load(",[139,2136,2137],{"class":2111},"file",[139,2139,164],{"class":145},[139,2141,2142],{"class":141,"line":1006},[139,2143,843],{"emptyLinePlaceholder":842},[139,2145,2146],{"class":141,"line":1027},[139,2147,843],{"emptyLinePlaceholder":842},[139,2149,2150,2152,2155],{"class":141,"line":1040},[139,2151,778],{"class":149},[139,2153,2154],{"class":781}," write_json",[139,2156,2157],{"class":145},"(path, data):\n",[139,2159,2161,2163,2165,2167,2170,2172,2174,2176,2178,2180,2182,2184],{"class":141,"line":2160},15,[139,2162,2097],{"class":149},[139,2164,2100],{"class":153},[139,2166,2103],{"class":145},[139,2168,2169],{"class":160},"\"w\"",[139,2171,413],{"class":145},[139,2173,2112],{"class":2111},[139,2175,150],{"class":149},[139,2177,2117],{"class":160},[139,2179,2120],{"class":145},[139,2181,1035],{"class":149},[139,2183,2125],{"class":2111},[139,2185,246],{"class":145},[139,2187,2189,2192,2194,2196,2199,2201,2204,2206,2209,2211,2213],{"class":141,"line":2188},16,[139,2190,2191],{"class":145},"        json.dump(data, ",[139,2193,2137],{"class":2111},[139,2195,413],{"class":145},[139,2197,2198],{"class":2111},"ensure_ascii",[139,2200,150],{"class":149},[139,2202,2203],{"class":153},"False",[139,2205,413],{"class":145},[139,2207,2208],{"class":2111},"indent",[139,2210,150],{"class":149},[139,2212,416],{"class":153},[139,2214,164],{"class":145},[19,2216,2217,1122],{},[50,2218,2219],{},"main.py",[130,2221,2223],{"className":132,"code":2222,"language":134,"meta":135,"style":135},"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",[50,2224,2225,2236,2240,2255,2281],{"__ignoreMap":135},[139,2226,2227,2229,2231,2233],{"class":141,"line":142},[139,2228,1265],{"class":149},[139,2230,1806],{"class":145},[139,2232,1064],{"class":149},[139,2234,2235],{"class":145}," read_json, write_json\n",[139,2237,2238],{"class":141,"line":210},[139,2239,843],{"emptyLinePlaceholder":842},[139,2241,2242,2245,2247,2250,2253],{"class":141,"line":254},[139,2243,2244],{"class":145},"students ",[139,2246,150],{"class":149},[139,2248,2249],{"class":145}," read_json(",[139,2251,2252],{"class":160},"\"students.json\"",[139,2254,164],{"class":145},[139,2256,2257,2260,2263,2266,2268,2270,2273,2275,2278],{"class":141,"line":262},[139,2258,2259],{"class":145},"students.append({",[139,2261,2262],{"class":160},"\"name\"",[139,2264,2265],{"class":145},": ",[139,2267,1441],{"class":160},[139,2269,413],{"class":145},[139,2271,2272],{"class":160},"\"score\"",[139,2274,2265],{"class":145},[139,2276,2277],{"class":153},"95",[139,2279,2280],{"class":145},"})\n",[139,2282,2283,2286,2288],{"class":141,"line":313},[139,2284,2285],{"class":145},"write_json(",[139,2287,2252],{"class":160},[139,2289,2290],{"class":145},", students)\n",[14,2292,2294],{"id":2293},"_918-易错点","9.18 易错点",[1760,2296,2297,2300,2305,2310,2313,2316],{},[1763,2298,2299],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1763,2301,2302,2303,170],{},"能指定异常类型就不要裸写 ",[50,2304,257],{},[1763,2306,2307,2309],{},[50,2308,662],{}," 无论是否出错都会执行。",[1763,2311,2312],{},"模块文件名不要和标准库重名。",[1763,2314,2315],{},"导入自己写的模块时，要注意运行目录。",[1763,2317,2318],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,2320,2322],{"id":2321},"_919-本章练习","9.19 本章练习",[1760,2324,2325,2328,2331,2337,2344],{},[1763,2326,2327],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1763,2329,2330],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1763,2332,1690,2333,2336],{},[50,2334,2335],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1763,2338,2339,2340,2343],{},"创建一个 ",[50,2341,2342],{},"utils"," 包，把 JSON 读写函数放进去。",[1763,2345,2346],{},"写一个程序，捕获除零异常和输入格式异常。",[2348,2349,2350],"style",{},"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":135,"searchDepth":210,"depth":210,"links":2352},[2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2369,2376,2378,2379,2380,2381,2382,2383],{"id":16,"depth":210,"text":17},{"id":173,"depth":210,"text":174},{"id":229,"depth":210,"text":230},{"id":385,"depth":210,"text":386},{"id":572,"depth":210,"text":573},{"id":650,"depth":210,"text":651},{"id":764,"depth":210,"text":765},{"id":904,"depth":210,"text":905},{"id":1050,"depth":210,"text":1051},{"id":1107,"depth":210,"text":1108},{"id":1214,"depth":210,"text":1215,"children":2364},[2365,2366,2367,2368],{"id":1219,"depth":254,"text":1220},{"id":1254,"depth":254,"text":1255},{"id":1295,"depth":254,"text":1296},{"id":1374,"depth":254,"text":1375},{"id":1397,"depth":210,"text":1398,"children":2370},[2371,2372,2373,2374,2375],{"id":1401,"depth":254,"text":1402},{"id":1491,"depth":254,"text":1492},{"id":1538,"depth":254,"text":1539},{"id":1598,"depth":254,"text":1599},{"id":1637,"depth":254,"text":1638},{"id":1671,"depth":210,"text":2377},"9.13 if name == \"main\"",{"id":1774,"depth":210,"text":1775},{"id":1819,"depth":210,"text":1820},{"id":1942,"depth":210,"text":1943},{"id":2004,"depth":210,"text":2005},{"id":2293,"depth":210,"text":2294},{"id":2321,"depth":210,"text":2322},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":5,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",[2392,7440,8544,9964,12953,14303,15791,16879,25638,25650,26245,26271,26395,26636,26701,26719,26732,26779,26902,27071,27270,27450,27655,27791,27886,27923,27936,28245,28984,29692,29713,30732,32363,32514,32527,32539,32835,52631,52646,52663,52696,55565,78907,95051,95072,95185,95306,96076,96739,97100,97138,97244,97343,97386,97412,97473,99127,99228,99253,99744,100244,101324,101607,102349,102851,102863,104876,106539,108042,109740,111655,113574,115595,119065,119497,119960,120709,123651,123999,124021,124377,127684,127696,128099,128122,128268,128435,128640,128941,129498,130155,132086,133684,134333,135827,137258,138493,140187,141939,144349,144465,145400,145611,146496,147731,147959,147972,149115,151523,153881,157193,159664,161307,163082,165089,168140,170319,172843,174772],{"id":2393,"title":2394,"body":2395,"description":135,"extension":2385,"meta":7435,"navigation":842,"path":7436,"seo":7437,"stem":7438,"__hash__":7439},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2396,"toc":7407},[2397,2400,2404,2407,2411,2422,2426,2430,2433,2436,2439,2442,2445,2471,2475,2478,2481,2484,2487,2534,2538,2556,2558,2572,2575,2583,2586,3429,3436,3453,3457,3543,3547,3553,3639,3643,3681,3685,3749,3753,3757,3764,3775,3779,3784,3788,3793,3797,3802,3806,3810,3815,4074,4079,4217,4222,4477,4480,4488,4492,4497,4600,4603,4907,4916,5017,5020,5023,5026,5029,5289,5294,5432,5435,5614,5617,5745,5748,5900,5904,5909,5912,5923,5931,5934,6040,6044,6048,6053,6103,6108,6113,6137,6142,6195,6198,6203,6378,6383,6668,6673,7070,7074,7079,7136,7141,7149,7152,7292,7295,7404],[10,2398,2394],{"id":2399},"_1基础入门",[14,2401,2403],{"id":2402},"_11注释","1.1注释",[19,2405,2406],{},"\u002F\u002F或者\u002F* *\u002F",[14,2408,2410],{"id":2409},"_12命名","1.2命名",[1760,2412,2413,2416,2419],{},[1763,2414,2415],{},"字母数字下划线",[1763,2417,2418],{},"开头必须是字母或_",[1763,2420,2421],{},"不能使用关键词",[14,2423,2425],{"id":2424},"_13数据类型","1.3数据类型",[1217,2427,2429],{"id":2428},"_131整形","1.3.1整形",[19,2431,2432],{},"short 短整形 2",[19,2434,2435],{},"int 整形 4",[19,2437,2438],{},"long 长整形 win4 linux32位4 linux64位8",[19,2440,2441],{},"long long 长长整形 8",[19,2443,2444],{},"利用sizeof可以求数据类型占用的内存空间大小",[130,2446,2450],{"className":2447,"code":2448,"language":2449,"meta":135,"style":135},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[50,2451,2452,2464],{"__ignoreMap":135},[139,2453,2454,2457,2459,2462],{"class":141,"line":142},[139,2455,2456],{"class":149},"sizeof",[139,2458,157],{"class":145},[139,2460,2461],{"class":149},"int",[139,2463,164],{"class":145},[139,2465,2466,2468],{"class":141,"line":210},[139,2467,2456],{"class":149},[139,2469,2470],{"class":145},"(num)\n",[1217,2472,2474],{"id":2473},"_132浮点型","1.3.2浮点型",[19,2476,2477],{},"float 单精度 4节 7位有效数字",[19,2479,2480],{},"double 双精度 8节 15-16有效数字",[19,2482,2483],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2485,2486],{},"注意点：",[130,2488,2490],{"className":2447,"code":2489,"language":2449,"meta":135,"style":135},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[50,2491,2492,2514],{"__ignoreMap":135},[139,2493,2494,2497,2500,2502,2505,2507,2510],{"class":141,"line":142},[139,2495,2496],{"class":149},"float",[139,2498,2499],{"class":145}," f1",[139,2501,150],{"class":149},[139,2503,2504],{"class":153},"3.14",[139,2506,619],{"class":149},[139,2508,2509],{"class":145},";",[139,2511,2513],{"class":2512},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[139,2515,2516,2518,2521,2523,2525,2527,2529,2531],{"class":141,"line":210},[139,2517,2496],{"class":149},[139,2519,2520],{"class":145}," f2",[139,2522,150],{"class":149},[139,2524,421],{"class":153},[139,2526,628],{"class":149},[139,2528,416],{"class":153},[139,2530,2509],{"class":145},[139,2532,2533],{"class":2512}," \u002F\u002F科学记数法\n",[1217,2535,2537],{"id":2536},"_133字符型","1.3.3字符型",[130,2539,2541],{"className":2447,"code":2540,"language":2449,"meta":135,"style":135},"char ch='a'\n",[50,2542,2543],{"__ignoreMap":135},[139,2544,2545,2548,2551,2553],{"class":141,"line":142},[139,2546,2547],{"class":149},"char",[139,2549,2550],{"class":145}," ch",[139,2552,150],{"class":149},[139,2554,2555],{"class":160},"'a'\n",[19,2557,2486],{},[1760,2559,2560,2563,2566,2569],{},[1763,2561,2562],{},"在显示字符型变量时，只能单引号，双引号x",[1763,2564,2565],{},"单引号内只能一个字符，不能字符串",[1763,2567,2568],{},"c和c++字符型变量只占用一个字符",[1763,2570,2571],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2573,2574],{},"ASCII码大致由以下两部分组成：",[1760,2576,2577,2580],{},[1763,2578,2579],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1763,2581,2582],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2584,2585],{},"ASCII码表格：",[26,2587,2588,2628],{},[29,2589,2590],{},[32,2591,2592,2598,2603,2607,2612,2616,2620,2624],{},[35,2593,2594,2597],{},[1674,2595,2596],{},"ASCII","值",[35,2599,2600],{},[1674,2601,2602],{},"控制字符",[35,2604,2605,2597],{},[1674,2606,2596],{},[35,2608,2609],{},[1674,2610,2611],{},"字符",[35,2613,2614,2597],{},[1674,2615,2596],{},[35,2617,2618],{},[1674,2619,2611],{},[35,2621,2622,2597],{},[1674,2623,2596],{},[35,2625,2626],{},[1674,2627,2611],{},[42,2629,2630,2656,2681,2705,2730,2754,2778,2803,2829,2854,2880,2905,2930,2955,2980,3006,3032,3056,3081,3106,3131,3156,3181,3206,3231,3256,3281,3307,3331,3355,3379,3404],{},[32,2631,2632,2635,2638,2641,2644,2647,2650,2653],{},[47,2633,2634],{},"0",[47,2636,2637],{},"NUT",[47,2639,2640],{},"32",[47,2642,2643],{},"(space)",[47,2645,2646],{},"64",[47,2648,2649],{},"@",[47,2651,2652],{},"96",[47,2654,2655],{},"、",[32,2657,2658,2660,2663,2666,2669,2672,2675,2678],{},[47,2659,410],{},[47,2661,2662],{},"SOH",[47,2664,2665],{},"33",[47,2667,2668],{},"!",[47,2670,2671],{},"65",[47,2673,2674],{},"A",[47,2676,2677],{},"97",[47,2679,2680],{},"a",[32,2682,2683,2685,2688,2691,2693,2696,2699,2702],{},[47,2684,416],{},[47,2686,2687],{},"STX",[47,2689,2690],{},"34",[47,2692,634],{},[47,2694,2695],{},"66",[47,2697,2698],{},"B",[47,2700,2701],{},"98",[47,2703,2704],{},"b",[32,2706,2707,2709,2712,2715,2718,2721,2724,2727],{},[47,2708,421],{},[47,2710,2711],{},"ETX",[47,2713,2714],{},"35",[47,2716,2717],{},"#",[47,2719,2720],{},"67",[47,2722,2723],{},"C",[47,2725,2726],{},"99",[47,2728,2729],{},"c",[32,2731,2732,2734,2737,2740,2743,2746,2749,2751],{},[47,2733,1476],{},[47,2735,2736],{},"EOT",[47,2738,2739],{},"36",[47,2741,2742],{},"$",[47,2744,2745],{},"68",[47,2747,2748],{},"D",[47,2750,1017],{},[47,2752,2753],{},"d",[32,2755,2756,2758,2761,2764,2767,2770,2773,2776],{},[47,2757,1481],{},[47,2759,2760],{},"ENQ",[47,2762,2763],{},"37",[47,2765,2766],{},"%",[47,2768,2769],{},"69",[47,2771,2772],{},"E",[47,2774,2775],{},"101",[47,2777,628],{},[32,2779,2780,2783,2786,2789,2792,2795,2798,2801],{},[47,2781,2782],{},"6",[47,2784,2785],{},"ACK",[47,2787,2788],{},"38",[47,2790,2791],{},"&",[47,2793,2794],{},"70",[47,2796,2797],{},"F",[47,2799,2800],{},"102",[47,2802,619],{},[32,2804,2805,2808,2811,2814,2817,2820,2823,2826],{},[47,2806,2807],{},"7",[47,2809,2810],{},"BEL",[47,2812,2813],{},"39",[47,2815,2816],{},",",[47,2818,2819],{},"71",[47,2821,2822],{},"G",[47,2824,2825],{},"103",[47,2827,2828],{},"g",[32,2830,2831,2834,2837,2840,2842,2845,2848,2851],{},[47,2832,2833],{},"8",[47,2835,2836],{},"BS",[47,2838,2839],{},"40",[47,2841,157],{},[47,2843,2844],{},"72",[47,2846,2847],{},"H",[47,2849,2850],{},"104",[47,2852,2853],{},"h",[32,2855,2856,2859,2862,2865,2868,2871,2874,2877],{},[47,2857,2858],{},"9",[47,2860,2861],{},"HT",[47,2863,2864],{},"41",[47,2866,2867],{},")",[47,2869,2870],{},"73",[47,2872,2873],{},"I",[47,2875,2876],{},"105",[47,2878,2879],{},"i",[32,2881,2882,2884,2887,2890,2893,2896,2899,2902],{},[47,2883,536],{},[47,2885,2886],{},"LF",[47,2888,2889],{},"42",[47,2891,2892],{},"*",[47,2894,2895],{},"74",[47,2897,2898],{},"J",[47,2900,2901],{},"106",[47,2903,2904],{},"j",[32,2906,2907,2910,2913,2916,2918,2921,2924,2927],{},[47,2908,2909],{},"11",[47,2911,2912],{},"VT",[47,2914,2915],{},"43",[47,2917,1147],{},[47,2919,2920],{},"75",[47,2922,2923],{},"K",[47,2925,2926],{},"107",[47,2928,2929],{},"k",[32,2931,2932,2935,2938,2941,2943,2946,2949,2952],{},[47,2933,2934],{},"12",[47,2936,2937],{},"FF",[47,2939,2940],{},"44",[47,2942,2816],{},[47,2944,2945],{},"76",[47,2947,2948],{},"L",[47,2950,2951],{},"108",[47,2953,2954],{},"l",[32,2956,2957,2960,2963,2966,2968,2971,2974,2977],{},[47,2958,2959],{},"13",[47,2961,2962],{},"CR",[47,2964,2965],{},"45",[47,2967,855],{},[47,2969,2970],{},"77",[47,2972,2973],{},"M",[47,2975,2976],{},"109",[47,2978,2979],{},"m",[32,2981,2982,2985,2988,2991,2994,2997,3000,3003],{},[47,2983,2984],{},"14",[47,2986,2987],{},"SO",[47,2989,2990],{},"46",[47,2992,2993],{},".",[47,2995,2996],{},"78",[47,2998,2999],{},"N",[47,3001,3002],{},"110",[47,3004,3005],{},"n",[32,3007,3008,3011,3014,3017,3020,3023,3026,3029],{},[47,3009,3010],{},"15",[47,3012,3013],{},"SI",[47,3015,3016],{},"47",[47,3018,3019],{},"\u002F",[47,3021,3022],{},"79",[47,3024,3025],{},"O",[47,3027,3028],{},"111",[47,3030,3031],{},"o",[32,3033,3034,3037,3040,3043,3045,3048,3051,3054],{},[47,3035,3036],{},"16",[47,3038,3039],{},"DLE",[47,3041,3042],{},"48",[47,3044,2634],{},[47,3046,3047],{},"80",[47,3049,3050],{},"P",[47,3052,3053],{},"112",[47,3055,19],{},[32,3057,3058,3061,3064,3067,3069,3072,3075,3078],{},[47,3059,3060],{},"17",[47,3062,3063],{},"DCI",[47,3065,3066],{},"49",[47,3068,410],{},[47,3070,3071],{},"81",[47,3073,3074],{},"Q",[47,3076,3077],{},"113",[47,3079,3080],{},"q",[32,3082,3083,3086,3089,3092,3094,3097,3100,3103],{},[47,3084,3085],{},"18",[47,3087,3088],{},"DC2",[47,3090,3091],{},"50",[47,3093,416],{},[47,3095,3096],{},"82",[47,3098,3099],{},"R",[47,3101,3102],{},"114",[47,3104,3105],{},"r",[32,3107,3108,3111,3114,3117,3119,3122,3125,3128],{},[47,3109,3110],{},"19",[47,3112,3113],{},"DC3",[47,3115,3116],{},"51",[47,3118,421],{},[47,3120,3121],{},"83",[47,3123,3124],{},"S",[47,3126,3127],{},"115",[47,3129,3130],{},"s",[32,3132,3133,3136,3139,3142,3144,3147,3150,3153],{},[47,3134,3135],{},"20",[47,3137,3138],{},"DC4",[47,3140,3141],{},"52",[47,3143,1476],{},[47,3145,3146],{},"84",[47,3148,3149],{},"T",[47,3151,3152],{},"116",[47,3154,3155],{},"t",[32,3157,3158,3161,3164,3167,3169,3172,3175,3178],{},[47,3159,3160],{},"21",[47,3162,3163],{},"NAK",[47,3165,3166],{},"53",[47,3168,1481],{},[47,3170,3171],{},"85",[47,3173,3174],{},"U",[47,3176,3177],{},"117",[47,3179,3180],{},"u",[32,3182,3183,3186,3189,3192,3194,3197,3200,3203],{},[47,3184,3185],{},"22",[47,3187,3188],{},"SYN",[47,3190,3191],{},"54",[47,3193,2782],{},[47,3195,3196],{},"86",[47,3198,3199],{},"V",[47,3201,3202],{},"118",[47,3204,3205],{},"v",[32,3207,3208,3211,3214,3217,3219,3222,3225,3228],{},[47,3209,3210],{},"23",[47,3212,3213],{},"TB",[47,3215,3216],{},"55",[47,3218,2807],{},[47,3220,3221],{},"87",[47,3223,3224],{},"W",[47,3226,3227],{},"119",[47,3229,3230],{},"w",[32,3232,3233,3236,3239,3242,3244,3247,3250,3253],{},[47,3234,3235],{},"24",[47,3237,3238],{},"CAN",[47,3240,3241],{},"56",[47,3243,2833],{},[47,3245,3246],{},"88",[47,3248,3249],{},"X",[47,3251,3252],{},"120",[47,3254,3255],{},"x",[32,3257,3258,3261,3264,3267,3269,3272,3275,3278],{},[47,3259,3260],{},"25",[47,3262,3263],{},"EM",[47,3265,3266],{},"57",[47,3268,2858],{},[47,3270,3271],{},"89",[47,3273,3274],{},"Y",[47,3276,3277],{},"121",[47,3279,3280],{},"y",[32,3282,3283,3286,3289,3292,3295,3298,3301,3304],{},[47,3284,3285],{},"26",[47,3287,3288],{},"SUB",[47,3290,3291],{},"58",[47,3293,3294],{},":",[47,3296,3297],{},"90",[47,3299,3300],{},"Z",[47,3302,3303],{},"122",[47,3305,3306],{},"z",[32,3308,3309,3312,3315,3318,3320,3323,3326,3329],{},[47,3310,3311],{},"27",[47,3313,3314],{},"ESC",[47,3316,3317],{},"59",[47,3319,2509],{},[47,3321,3322],{},"91",[47,3324,3325],{},"[",[47,3327,3328],{},"123",[47,3330,625],{},[32,3332,3333,3336,3339,3342,3344,3347,3349,3352],{},[47,3334,3335],{},"28",[47,3337,3338],{},"FS",[47,3340,3341],{},"60",[47,3343,796],{},[47,3345,3346],{},"92",[47,3348,3019],{},[47,3350,3351],{},"124",[47,3353,3354],{},"|",[32,3356,3357,3360,3363,3366,3368,3371,3374,3377],{},[47,3358,3359],{},"29",[47,3361,3362],{},"GS",[47,3364,3365],{},"61",[47,3367,150],{},[47,3369,3370],{},"93",[47,3372,3373],{},"]",[47,3375,3376],{},"125",[47,3378,631],{},[32,3380,3381,3384,3387,3390,3392,3395,3398,3401],{},[47,3382,3383],{},"30",[47,3385,3386],{},"RS",[47,3388,3389],{},"62",[47,3391,958],{},[47,3393,3394],{},"94",[47,3396,3397],{},"^",[47,3399,3400],{},"126",[47,3402,3403],{},"`",[32,3405,3406,3409,3412,3415,3418,3420,3423,3426],{},[47,3407,3408],{},"31",[47,3410,3411],{},"US",[47,3413,3414],{},"63",[47,3416,3417],{},"?",[47,3419,2277],{},[47,3421,3422],{},"_",[47,3424,3425],{},"127",[47,3427,3428],{},"DEL",[19,3430,3431,3432,3435],{},"ASCII 码大致由以下",[1674,3433,3434],{},"两部分组","成：",[3437,3438,3439,3446],"ul",{},[1763,3440,3441,3442,3445],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1674,3443,3444],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1763,3447,3448,3449,3452],{},"ASCII 打印字符：数字 ",[1674,3450,3451],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1217,3454,3456],{"id":3455},"_134转义字符","1.3.4转义字符",[130,3458,3460],{"className":2447,"code":3459,"language":2449,"meta":135,"style":135},"\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",[50,3461,3462,3467,3483,3497,3502,3515,3520],{"__ignoreMap":135},[139,3463,3464],{"class":141,"line":142},[139,3465,3466],{"class":2512},"\u002F\u002F换行符\n",[139,3468,3469,3472,3475,3478,3480],{"class":141,"line":210},[139,3470,3471],{"class":145},"cout ",[139,3473,3474],{"class":149},"\u003C\u003C",[139,3476,3477],{"class":160},"\"hello world\u002Fn\"",[139,3479,2509],{"class":145},[139,3481,3482],{"class":2512}," \u002F\u002F就等同于如下：\n",[139,3484,3485,3487,3489,3492,3494],{"class":141,"line":254},[139,3486,3471],{"class":145},[139,3488,3474],{"class":149},[139,3490,3491],{"class":160},"\"hello world\"",[139,3493,3474],{"class":149},[139,3495,3496],{"class":145},"endl;\n",[139,3498,3499],{"class":141,"line":262},[139,3500,3501],{"class":2512},"\u002F\u002F反斜杠\n",[139,3503,3504,3506,3508,3511,3513],{"class":141,"line":313},[139,3505,3471],{"class":145},[139,3507,3474],{"class":149},[139,3509,3510],{"class":160},"\"\u002F\u002F\"",[139,3512,3474],{"class":149},[139,3514,3496],{"class":145},[139,3516,3517],{"class":141,"line":462},[139,3518,3519],{"class":2512},"\u002F\u002F水平制表符\n",[139,3521,3522,3524,3526,3529,3532,3535,3537,3540],{"class":141,"line":474},[139,3523,3471],{"class":145},[139,3525,3474],{"class":149},[139,3527,3528],{"class":160},"\"aaaa",[139,3530,3531],{"class":153},"\\t",[139,3533,3534],{"class":160},"helloworld\"",[139,3536,3474],{"class":149},[139,3538,3539],{"class":145},"endl;",[139,3541,3542],{"class":2512}," \u002F\u002F输出窗口时有对齐效果\n",[1217,3544,3546],{"id":3545},"_135字符串型","1.3.5字符串型",[19,3548,3549,3550,3552],{},"char 变量名",[139,3551],{},"=\"字符串值\"",[130,3554,3556],{"className":2447,"code":3555,"language":2449,"meta":135,"style":135},"\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",[50,3557,3558,3563,3568,3573,3578,3592,3605,3610,3615,3626],{"__ignoreMap":135},[139,3559,3560],{"class":141,"line":142},[139,3561,3562],{"class":2512},"\u002F\u002Fc风格字符串\n",[139,3564,3565],{"class":141,"line":210},[139,3566,3567],{"class":2512},"\u002F\u002F注意事项：\n",[139,3569,3570],{"class":141,"line":254},[139,3571,3572],{"class":2512},"\u002F\u002F1.char字符串名[]\n",[139,3574,3575],{"class":141,"line":262},[139,3576,3577],{"class":2512},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[139,3579,3580,3582,3585,3587,3589],{"class":141,"line":313},[139,3581,2547],{"class":149},[139,3583,3584],{"class":145}," str[]",[139,3586,150],{"class":149},[139,3588,3491],{"class":160},[139,3590,3591],{"class":145},";\n",[139,3593,3594,3596,3598,3601,3603],{"class":141,"line":462},[139,3595,3471],{"class":145},[139,3597,3474],{"class":149},[139,3599,3600],{"class":145},"str",[139,3602,3474],{"class":149},[139,3604,3496],{"class":145},[139,3606,3607],{"class":141,"line":474},[139,3608,3609],{"class":2512},"\u002F\u002Fc++风格字符串\n",[139,3611,3612],{"class":141,"line":484},[139,3613,3614],{"class":2512},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[139,3616,3617,3620,3622,3624],{"class":141,"line":989},[139,3618,3619],{"class":145},"string str2",[139,3621,150],{"class":149},[139,3623,3491],{"class":160},[139,3625,3591],{"class":145},[139,3627,3628,3630,3632,3635,3637],{"class":141,"line":994},[139,3629,3471],{"class":145},[139,3631,3474],{"class":149},[139,3633,3634],{"class":145},"str2",[139,3636,3474],{"class":149},[139,3638,3496],{"class":145},[1217,3640,3642],{"id":3641},"_136布尔类型bool","1.3.6布尔类型bool",[130,3644,3646],{"className":2447,"code":3645,"language":2449,"meta":135,"style":135},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[50,3647,3648,3663],{"__ignoreMap":135},[139,3649,3650,3653,3656,3658,3661],{"class":141,"line":142},[139,3651,3652],{"class":149},"bool",[139,3654,3655],{"class":145}," flag",[139,3657,150],{"class":149},[139,3659,3660],{"class":153},"true",[139,3662,3591],{"class":145},[139,3664,3665,3668,3671,3674,3676,3678],{"class":141,"line":210},[139,3666,3667],{"class":145},"cout",[139,3669,3670],{"class":149},"\u003C\u003Csizeof",[139,3672,3673],{"class":145},"(flag)",[139,3675,3474],{"class":149},[139,3677,3539],{"class":145},[139,3679,3680],{"class":2512}," \u002F\u002F查看布尔占内存空间\n",[14,3682,3684],{"id":3683},"_14键盘输入cin","1.4键盘输入cin",[130,3686,3688],{"className":2447,"code":3687,"language":2449,"meta":135,"style":135},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[50,3689,3690,3703,3720,3731],{"__ignoreMap":135},[139,3691,3692,3694,3697,3699,3701],{"class":141,"line":142},[139,3693,2461],{"class":149},[139,3695,3696],{"class":145}," a",[139,3698,150],{"class":149},[139,3700,2634],{"class":153},[139,3702,3591],{"class":145},[139,3704,3705,3707,3709,3712,3714,3716,3718],{"class":141,"line":210},[139,3706,3667],{"class":145},[139,3708,3474],{"class":149},[139,3710,3711],{"class":160},"\"请给整型变量a赋值\"",[139,3713,3474],{"class":149},[139,3715,2680],{"class":145},[139,3717,3474],{"class":149},[139,3719,3496],{"class":145},[139,3721,3722,3725,3728],{"class":141,"line":254},[139,3723,3724],{"class":145},"cin ",[139,3726,3727],{"class":149},">>",[139,3729,3730],{"class":145}," a;\n",[139,3732,3733,3735,3737,3740,3743,3745,3747],{"class":141,"line":262},[139,3734,3471],{"class":145},[139,3736,3474],{"class":149},[139,3738,3739],{"class":160}," \"整型变量a=\"",[139,3741,3742],{"class":149}," \u003C\u003C",[139,3744,2680],{"class":145},[139,3746,3474],{"class":149},[139,3748,3496],{"class":145},[14,3750,3752],{"id":3751},"_15运算符","1.5运算符",[1217,3754,3756],{"id":3755},"_151算术运算符","1.5.1算术运算符",[19,3758,3759,3763],{},[3760,3761],"img",{"alt":135,"src":3762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1760,3765,3766,3769,3772],{},[1763,3767,3768],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1763,3770,3771],{},"两个小数不可以做取模运算",[1763,3773,3774],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1217,3776,3778],{"id":3777},"_152赋值运算符","1.5.2赋值运算符",[19,3780,3781],{},[3760,3782],{"alt":135,"src":3783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1217,3785,3787],{"id":3786},"_153比较运算符","1.5.3比较运算符",[19,3789,3790],{},[3760,3791],{"alt":135,"src":3792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1217,3794,3796],{"id":3795},"_154逻辑运算符","1.5.4逻辑运算符",[19,3798,3799],{},[3760,3800],{"alt":135,"src":3801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3803,3805],{"id":3804},"_16程序流程结构","1.6程序流程结构",[1217,3807,3809],{"id":3808},"_161选择结构","1.6.1选择结构",[1760,3811,3812],{},[1763,3813,3814],{},"if语句\n单行、多行、多条件if语句",[130,3816,3818],{"className":2447,"code":3817,"language":2449,"meta":135,"style":135},"\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",[50,3819,3820,3825,3839,3844,3858,3863,3868,3877,3890,3894,3907,3911,3916,3920,3933,3937,3942,3961,3966,3980,3985,4012,4017,4034,4039,4044,4049,4063,4068],{"__ignoreMap":135},[139,3821,3822],{"class":141,"line":142},[139,3823,3824],{"class":2512},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[139,3826,3827,3829,3832,3834,3837],{"class":141,"line":210},[139,3828,1729],{"class":149},[139,3830,3831],{"class":145},"(score",[139,3833,958],{"class":149},[139,3835,3836],{"class":153},"600",[139,3838,164],{"class":145},[139,3840,3841],{"class":141,"line":254},[139,3842,3843],{"class":145},"{\n",[139,3845,3846,3849,3851,3854,3856],{"class":141,"line":262},[139,3847,3848],{"class":145},"    cout",[139,3850,3474],{"class":149},[139,3852,3853],{"class":160},"'这是单行if语句'",[139,3855,3474],{"class":149},[139,3857,3496],{"class":145},[139,3859,3860],{"class":141,"line":313},[139,3861,3862],{"class":145},"}\n",[139,3864,3865],{"class":141,"line":462},[139,3866,3867],{"class":2512},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[139,3869,3870,3872,3874],{"class":141,"line":474},[139,3871,3724],{"class":145},[139,3873,3727],{"class":149},[139,3875,3876],{"class":145}," score\n",[139,3878,3879,3881,3883,3886,3888],{"class":141,"line":484},[139,3880,1729],{"class":149},[139,3882,3831],{"class":145},[139,3884,3885],{"class":149},"\u003C=",[139,3887,3836],{"class":153},[139,3889,164],{"class":145},[139,3891,3892],{"class":141,"line":989},[139,3893,3843],{"class":145},[139,3895,3896,3898,3900,3903,3905],{"class":141,"line":994},[139,3897,3848],{"class":145},[139,3899,3727],{"class":149},[139,3901,3902],{"class":160},"\"小于等于600\"",[139,3904,3474],{"class":149},[139,3906,3496],{"class":145},[139,3908,3909],{"class":141,"line":999},[139,3910,3862],{"class":145},[139,3912,3913],{"class":141,"line":1006},[139,3914,3915],{"class":149},"else\n",[139,3917,3918],{"class":141,"line":1027},[139,3919,3843],{"class":145},[139,3921,3922,3924,3926,3929,3931],{"class":141,"line":1040},[139,3923,3848],{"class":145},[139,3925,3727],{"class":149},[139,3927,3928],{"class":160},"\"大于600\"",[139,3930,3727],{"class":149},[139,3932,3496],{"class":145},[139,3934,3935],{"class":141,"line":2160},[139,3936,3862],{"class":145},[139,3938,3939],{"class":141,"line":2188},[139,3940,3941],{"class":2512},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[139,3943,3945,3947,3949,3951,3953,3955,3957,3959],{"class":141,"line":3944},17,[139,3946,1729],{"class":149},[139,3948,549],{"class":145},[139,3950,2634],{"class":153},[139,3952,796],{"class":149},[139,3954,733],{"class":145},[139,3956,796],{"class":149},[139,3958,1017],{"class":153},[139,3960,164],{"class":145},[139,3962,3964],{"class":141,"line":3963},18,[139,3965,3843],{"class":145},[139,3967,3969,3971,3973,3976,3978],{"class":141,"line":3968},19,[139,3970,3848],{"class":145},[139,3972,3474],{"class":149},[139,3974,3975],{"class":160},"\"小于100\"",[139,3977,3474],{"class":149},[139,3979,3496],{"class":145},[139,3981,3983],{"class":141,"line":3982},20,[139,3984,3862],{"class":145},[139,3986,3988,3990,3993,3996,3999,4001,4004,4006,4008,4010],{"class":141,"line":3987},21,[139,3989,656],{"class":149},[139,3991,3992],{"class":149}," if",[139,3994,3995],{"class":145}," (nmu",[139,3997,3998],{"class":149},">=",[139,4000,1017],{"class":153},[139,4002,4003],{"class":149},"&&",[139,4005,733],{"class":145},[139,4007,796],{"class":149},[139,4009,1022],{"class":153},[139,4011,164],{"class":145},[139,4013,4015],{"class":141,"line":4014},22,[139,4016,3843],{"class":145},[139,4018,4020,4022,4024,4027,4029,4031],{"class":141,"line":4019},23,[139,4021,3848],{"class":145},[139,4023,3474],{"class":149},[139,4025,4026],{"class":160},"\"不小于100且小于200\"",[139,4028,3474],{"class":149},[139,4030,3539],{"class":145},[139,4032,4033],{"class":2512}," \u002F\u002F可以无限else if,python中是elif：\n",[139,4035,4037],{"class":141,"line":4036},24,[139,4038,3862],{"class":145},[139,4040,4042],{"class":141,"line":4041},25,[139,4043,3915],{"class":149},[139,4045,4047],{"class":141,"line":4046},26,[139,4048,3843],{"class":145},[139,4050,4052,4054,4056,4059,4061],{"class":141,"line":4051},27,[139,4053,3848],{"class":145},[139,4055,3474],{"class":149},[139,4057,4058],{"class":160},"\"不小于200\"",[139,4060,3474],{"class":149},[139,4062,3496],{"class":145},[139,4064,4066],{"class":141,"line":4065},28,[139,4067,3862],{"class":145},[139,4069,4071],{"class":141,"line":4070},29,[139,4072,4073],{"class":2512},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1760,4075,4076],{"start":210},[1763,4077,4078],{},"三目运算符",[130,4080,4082],{"className":2447,"code":4081,"language":2449,"meta":135,"style":135},"\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",[50,4083,4084,4089,4094,4120,4142,4159,4164,4187,4202],{"__ignoreMap":135},[139,4085,4086],{"class":141,"line":142},[139,4087,4088],{"class":2512},"\u002F\u002F创建三个变量a,b,c\n",[139,4090,4091],{"class":141,"line":210},[139,4092,4093],{"class":2512},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[139,4095,4096,4098,4100,4102,4104,4107,4109,4111,4114,4116,4118],{"class":141,"line":254},[139,4097,2461],{"class":149},[139,4099,3696],{"class":145},[139,4101,150],{"class":149},[139,4103,3135],{"class":153},[139,4105,4106],{"class":145},",b",[139,4108,150],{"class":149},[139,4110,536],{"class":153},[139,4112,4113],{"class":145},",c",[139,4115,150],{"class":149},[139,4117,2634],{"class":153},[139,4119,3591],{"class":145},[139,4121,4122,4124,4126,4129,4131,4133,4135,4137,4139],{"class":141,"line":262},[139,4123,2729],{"class":145},[139,4125,150],{"class":149},[139,4127,4128],{"class":145},"(a",[139,4130,958],{"class":149},[139,4132,2704],{"class":145},[139,4134,3417],{"class":149},[139,4136,2680],{"class":145},[139,4138,3294],{"class":149},[139,4140,4141],{"class":145},"b)\n",[139,4143,4144,4146,4148,4151,4153,4155,4157],{"class":141,"line":313},[139,4145,3667],{"class":145},[139,4147,3474],{"class":149},[139,4149,4150],{"class":160},"\"c=\"",[139,4152,3474],{"class":149},[139,4154,2729],{"class":145},[139,4156,3474],{"class":149},[139,4158,3496],{"class":145},[139,4160,4161],{"class":141,"line":462},[139,4162,4163],{"class":2512},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[139,4165,4166,4168,4170,4172,4174,4176,4178,4181,4183,4185],{"class":141,"line":474},[139,4167,4128],{"class":145},[139,4169,958],{"class":149},[139,4171,2704],{"class":145},[139,4173,3417],{"class":149},[139,4175,2680],{"class":145},[139,4177,3294],{"class":149},[139,4179,4180],{"class":145},"b)",[139,4182,150],{"class":149},[139,4184,1017],{"class":153},[139,4186,3591],{"class":145},[139,4188,4189,4191,4193,4195,4197,4199],{"class":141,"line":484},[139,4190,3667],{"class":145},[139,4192,3474],{"class":149},[139,4194,2680],{"class":145},[139,4196,3474],{"class":149},[139,4198,3539],{"class":145},[139,4200,4201],{"class":2512}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[139,4203,4204,4206,4208,4210,4212,4214],{"class":141,"line":989},[139,4205,3667],{"class":145},[139,4207,3474],{"class":149},[139,4209,2704],{"class":145},[139,4211,3474],{"class":149},[139,4213,3539],{"class":145},[139,4215,4216],{"class":2512}," \u002F\u002F10   a>b,b还是原值\n",[1760,4218,4219],{"start":254},[1763,4220,4221],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[130,4223,4225],{"className":2447,"code":4224,"language":2449,"meta":135,"style":135},"\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",[50,4226,4227,4232,4240,4253,4263,4267,4280,4293,4303,4311,4316,4341,4362,4384,4405,4427,4448,4468,4473],{"__ignoreMap":135},[139,4228,4229],{"class":141,"line":142},[139,4230,4231],{"class":2512},"\u002F\u002F案例-电影打分\n",[139,4233,4234,4237],{"class":141,"line":210},[139,4235,4236],{"class":149},"#include",[139,4238,4239],{"class":160},"\u003Ciostream>\n",[139,4241,4242,4245,4248,4251],{"class":141,"line":254},[139,4243,4244],{"class":149},"using",[139,4246,4247],{"class":149}," namespace",[139,4249,4250],{"class":781}," std",[139,4252,3591],{"class":145},[139,4254,4255,4257,4260],{"class":141,"line":262},[139,4256,2461],{"class":149},[139,4258,4259],{"class":781}," main",[139,4261,4262],{"class":145},"()\n",[139,4264,4265],{"class":141,"line":313},[139,4266,3843],{"class":145},[139,4268,4269,4271,4274,4276,4278],{"class":141,"line":462},[139,4270,1082],{"class":149},[139,4272,4273],{"class":145}," score",[139,4275,150],{"class":149},[139,4277,2634],{"class":153},[139,4279,3591],{"class":145},[139,4281,4282,4284,4286,4289,4291],{"class":141,"line":474},[139,4283,3848],{"class":145},[139,4285,3474],{"class":149},[139,4287,4288],{"class":160},"\"电影打分：\"",[139,4290,3474],{"class":149},[139,4292,3496],{"class":145},[139,4294,4295,4298,4300],{"class":141,"line":484},[139,4296,4297],{"class":145},"    cin",[139,4299,3727],{"class":149},[139,4301,4302],{"class":145},"score;\n",[139,4304,4305,4308],{"class":141,"line":989},[139,4306,4307],{"class":149},"    switch",[139,4309,4310],{"class":145},"(score)\n",[139,4312,4313],{"class":141,"line":994},[139,4314,4315],{"class":145},"    {\n",[139,4317,4318,4321,4324,4327,4329,4332,4334,4336,4339],{"class":141,"line":999},[139,4319,4320],{"class":149},"        case",[139,4322,4323],{"class":153}," 10",[139,4325,4326],{"class":145},":cout",[139,4328,3474],{"class":149},[139,4330,4331],{"class":160},"\"经典\"",[139,4333,3474],{"class":149},[139,4335,3539],{"class":145},[139,4337,4338],{"class":149},"break",[139,4340,3591],{"class":145},[139,4342,4343,4345,4348,4350,4352,4354,4356,4358,4360],{"class":141,"line":1006},[139,4344,4320],{"class":149},[139,4346,4347],{"class":153}," 9",[139,4349,4326],{"class":145},[139,4351,3474],{"class":149},[139,4353,4331],{"class":160},[139,4355,3474],{"class":149},[139,4357,3539],{"class":145},[139,4359,4338],{"class":149},[139,4361,3591],{"class":145},[139,4363,4364,4366,4369,4371,4373,4376,4378,4380,4382],{"class":141,"line":1027},[139,4365,4320],{"class":149},[139,4367,4368],{"class":153}," 8",[139,4370,4326],{"class":145},[139,4372,3474],{"class":149},[139,4374,4375],{"class":160},"\"非常好\"",[139,4377,3474],{"class":149},[139,4379,3539],{"class":145},[139,4381,4338],{"class":149},[139,4383,3591],{"class":145},[139,4385,4386,4388,4391,4393,4395,4397,4399,4401,4403],{"class":141,"line":1040},[139,4387,4320],{"class":149},[139,4389,4390],{"class":153}," 7",[139,4392,4326],{"class":145},[139,4394,3474],{"class":149},[139,4396,4375],{"class":160},[139,4398,3474],{"class":149},[139,4400,3539],{"class":145},[139,4402,4338],{"class":149},[139,4404,3591],{"class":145},[139,4406,4407,4409,4412,4414,4416,4419,4421,4423,4425],{"class":141,"line":2160},[139,4408,4320],{"class":149},[139,4410,4411],{"class":153}," 6",[139,4413,4326],{"class":145},[139,4415,3474],{"class":149},[139,4417,4418],{"class":160},"\"一般\"",[139,4420,3474],{"class":149},[139,4422,3539],{"class":145},[139,4424,4338],{"class":149},[139,4426,3591],{"class":145},[139,4428,4429,4431,4434,4436,4438,4440,4442,4444,4446],{"class":141,"line":2188},[139,4430,4320],{"class":149},[139,4432,4433],{"class":153}," 5",[139,4435,4326],{"class":145},[139,4437,3474],{"class":149},[139,4439,4418],{"class":160},[139,4441,3474],{"class":149},[139,4443,3539],{"class":145},[139,4445,4338],{"class":149},[139,4447,3591],{"class":145},[139,4449,4450,4453,4455,4457,4460,4462,4464,4466],{"class":141,"line":3944},[139,4451,4452],{"class":149},"        default",[139,4454,4326],{"class":145},[139,4456,3474],{"class":149},[139,4458,4459],{"class":160},"\"烂片\"",[139,4461,3474],{"class":149},[139,4463,3539],{"class":145},[139,4465,4338],{"class":149},[139,4467,3591],{"class":145},[139,4469,4470],{"class":141,"line":3963},[139,4471,4472],{"class":145},"    }\n",[139,4474,4475],{"class":141,"line":3968},[139,4476,3862],{"class":145},[19,4478,4479],{},"if和switch区别：",[3437,4481,4482,4485],{},[1763,4483,4484],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1763,4486,4487],{},"switch优点：结构清晰，执行效率高",[1217,4489,4491],{"id":4490},"_162循环结构","1.6.2循环结构",[1760,4493,4494],{},[1763,4495,4496],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[130,4498,4500],{"className":2447,"code":4499,"language":2449,"meta":135,"style":135},"\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",[50,4501,4502,4507,4515,4519,4532,4546,4550,4570,4580,4584,4596],{"__ignoreMap":135},[139,4503,4504],{"class":141,"line":142},[139,4505,4506],{"class":2512},"\u002F\u002F打印0-9数字\n",[139,4508,4509,4511,4513],{"class":141,"line":210},[139,4510,2461],{"class":149},[139,4512,4259],{"class":781},[139,4514,4262],{"class":145},[139,4516,4517],{"class":141,"line":254},[139,4518,3843],{"class":145},[139,4520,4521,4523,4526,4528,4530],{"class":141,"line":262},[139,4522,1082],{"class":149},[139,4524,4525],{"class":145}," num",[139,4527,150],{"class":149},[139,4529,2634],{"class":153},[139,4531,3591],{"class":145},[139,4533,4534,4537,4540,4542,4544],{"class":141,"line":313},[139,4535,4536],{"class":149},"    while",[139,4538,4539],{"class":145},"(num",[139,4541,796],{"class":149},[139,4543,536],{"class":153},[139,4545,164],{"class":145},[139,4547,4548],{"class":141,"line":462},[139,4549,4315],{"class":145},[139,4551,4552,4555,4558,4560,4562,4564,4567],{"class":141,"line":474},[139,4553,4554],{"class":781},"       std",[139,4556,4557],{"class":145},"::cout",[139,4559,3474],{"class":149},[139,4561,733],{"class":145},[139,4563,3474],{"class":149},[139,4565,4566],{"class":781},"std",[139,4568,4569],{"class":145},"::endl;\n",[139,4571,4572,4575,4578],{"class":141,"line":484},[139,4573,4574],{"class":145},"        num",[139,4576,4577],{"class":149},"++",[139,4579,3591],{"class":145},[139,4581,4582],{"class":141,"line":989},[139,4583,4472],{"class":145},[139,4585,4586,4589,4591,4594],{"class":141,"line":994},[139,4587,4588],{"class":781},"    system",[139,4590,157],{"class":145},[139,4592,4593],{"class":160},"\"pause\"",[139,4595,164],{"class":145},[139,4597,4598],{"class":141,"line":999},[139,4599,3862],{"class":145},[19,4601,4602],{},"注意：写好循环条件，避免死循环情况",[130,4604,4606],{"className":2447,"code":4605,"language":2449,"meta":135,"style":135},"\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",[50,4607,4608,4613,4620,4627,4637,4645,4649,4654,4680,4684,4689,4697,4724,4729,4734,4747,4757,4761,4771,4776,4789,4794,4808,4813,4828,4832,4845,4849,4854,4858,4872,4880,4885,4891,4897,4902],{"__ignoreMap":135},[139,4609,4610],{"class":141,"line":142},[139,4611,4612],{"class":2512},"\u002F\u002F循环结构-猜数字\n",[139,4614,4615,4617],{"class":141,"line":210},[139,4616,4236],{"class":149},[139,4618,4619],{"class":160}," \u003Ciostream>\n",[139,4621,4622,4624],{"class":141,"line":254},[139,4623,4236],{"class":149},[139,4625,4626],{"class":160}," \u003Cctime>\n",[139,4628,4629,4631,4633,4635],{"class":141,"line":262},[139,4630,4244],{"class":149},[139,4632,4247],{"class":149},[139,4634,4250],{"class":781},[139,4636,3591],{"class":145},[139,4638,4639,4641,4643],{"class":141,"line":313},[139,4640,2461],{"class":149},[139,4642,4259],{"class":781},[139,4644,4262],{"class":145},[139,4646,4647],{"class":141,"line":462},[139,4648,3843],{"class":145},[139,4650,4651],{"class":141,"line":474},[139,4652,4653],{"class":2512},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[139,4655,4656,4659,4662,4665,4667,4669,4672,4674,4677],{"class":141,"line":484},[139,4657,4658],{"class":781},"    srand",[139,4660,4661],{"class":145},"((",[139,4663,4664],{"class":149},"unsigned",[139,4666,154],{"class":149},[139,4668,2867],{"class":145},[139,4670,4671],{"class":781},"time",[139,4673,157],{"class":145},[139,4675,4676],{"class":153},"NULL",[139,4678,4679],{"class":145},"));\n",[139,4681,4682],{"class":141,"line":989},[139,4683,843],{"emptyLinePlaceholder":842},[139,4685,4686],{"class":141,"line":994},[139,4687,4688],{"class":2512},"    \u002F\u002F1.系统生成随机数\n",[139,4690,4691,4694],{"class":141,"line":999},[139,4692,4693],{"class":2512},"    \u002F\u002Frand()%100",[139,4695,4696],{"class":2512}," \u002F\u002F生成0-99的随机数\n",[139,4698,4699,4701,4703,4705,4708,4711,4713,4715,4717,4719,4721],{"class":141,"line":1006},[139,4700,1082],{"class":149},[139,4702,4525],{"class":145},[139,4704,150],{"class":149},[139,4706,4707],{"class":781},"rand",[139,4709,4710],{"class":145},"()",[139,4712,2766],{"class":149},[139,4714,1017],{"class":153},[139,4716,1147],{"class":149},[139,4718,410],{"class":153},[139,4720,2509],{"class":145},[139,4722,4723],{"class":2512}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[139,4725,4726],{"class":141,"line":1027},[139,4727,4728],{"class":2512},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[139,4730,4731],{"class":141,"line":1040},[139,4732,4733],{"class":2512},"    \u002F\u002F2.玩家猜测\n",[139,4735,4736,4738,4741,4743,4745],{"class":141,"line":2160},[139,4737,1082],{"class":149},[139,4739,4740],{"class":145}," val",[139,4742,150],{"class":149},[139,4744,2634],{"class":153},[139,4746,3591],{"class":145},[139,4748,4749,4751,4753,4755],{"class":141,"line":2188},[139,4750,4536],{"class":149},[139,4752,549],{"class":145},[139,4754,410],{"class":153},[139,4756,164],{"class":145},[139,4758,4759],{"class":141,"line":3944},[139,4760,4315],{"class":145},[139,4762,4763,4766,4768],{"class":141,"line":3963},[139,4764,4765],{"class":145},"        cin",[139,4767,3727],{"class":149},[139,4769,4770],{"class":145},"val;\n",[139,4772,4773],{"class":141,"line":3968},[139,4774,4775],{"class":2512},"        \u002F\u002F3.判断玩家猜测\n",[139,4777,4778,4781,4784,4786],{"class":141,"line":3982},[139,4779,4780],{"class":149},"        if",[139,4782,4783],{"class":145},"(val",[139,4785,796],{"class":149},[139,4787,4788],{"class":145},"num) \n",[139,4790,4791],{"class":141,"line":3987},[139,4792,4793],{"class":145},"        {\n",[139,4795,4796,4799,4801,4804,4806],{"class":141,"line":4014},[139,4797,4798],{"class":145},"            cout",[139,4800,3474],{"class":149},[139,4802,4803],{"class":160},"\"猜小了！\"",[139,4805,3474],{"class":149},[139,4807,3496],{"class":145},[139,4809,4810],{"class":141,"line":4019},[139,4811,4812],{"class":145},"        }\n",[139,4814,4815,4818,4820,4823,4825],{"class":141,"line":4036},[139,4816,4817],{"class":149},"        else",[139,4819,3992],{"class":149},[139,4821,4822],{"class":145}," (val",[139,4824,958],{"class":149},[139,4826,4827],{"class":145},"num)\n",[139,4829,4830],{"class":141,"line":4041},[139,4831,4793],{"class":145},[139,4833,4834,4836,4838,4841,4843],{"class":141,"line":4046},[139,4835,4798],{"class":145},[139,4837,3474],{"class":149},[139,4839,4840],{"class":160},"\"猜大了！\"",[139,4842,3474],{"class":149},[139,4844,3496],{"class":145},[139,4846,4847],{"class":141,"line":4051},[139,4848,4812],{"class":145},[139,4850,4851],{"class":141,"line":4065},[139,4852,4853],{"class":149},"        else\n",[139,4855,4856],{"class":141,"line":4070},[139,4857,4793],{"class":145},[139,4859,4861,4863,4865,4868,4870],{"class":141,"line":4860},30,[139,4862,4798],{"class":145},[139,4864,3474],{"class":149},[139,4866,4867],{"class":160},"\"猜对了！\"",[139,4869,3474],{"class":149},[139,4871,3496],{"class":145},[139,4873,4875,4878],{"class":141,"line":4874},31,[139,4876,4877],{"class":149},"            break",[139,4879,3591],{"class":145},[139,4881,4883],{"class":141,"line":4882},32,[139,4884,4812],{"class":145},[139,4886,4888],{"class":141,"line":4887},33,[139,4889,4890],{"class":2512},"        \u002F\u002F猜对 退出游戏\n",[139,4892,4894],{"class":141,"line":4893},34,[139,4895,4896],{"class":2512},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[139,4898,4900],{"class":141,"line":4899},35,[139,4901,4472],{"class":145},[139,4903,4905],{"class":141,"line":4904},36,[139,4906,3862],{"class":145},[1760,4908,4909],{"start":210},[1763,4910,4911,4912,4915],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1674,4913,4914],{},"do...while会先执行一次循环语句","，在判断循环语句",[130,4917,4919],{"className":2447,"code":4918,"language":2449,"meta":135,"style":135},"\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",[50,4920,4921,4926,4934,4938,4950,4958,4962,4979,4986,4990,5003,5013],{"__ignoreMap":135},[139,4922,4923],{"class":141,"line":142},[139,4924,4925],{"class":2512},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[139,4927,4928,4930,4932],{"class":141,"line":210},[139,4929,2461],{"class":149},[139,4931,4259],{"class":781},[139,4933,4262],{"class":145},[139,4935,4936],{"class":141,"line":254},[139,4937,3843],{"class":145},[139,4939,4940,4942,4944,4946,4948],{"class":141,"line":262},[139,4941,1082],{"class":149},[139,4943,4525],{"class":145},[139,4945,150],{"class":149},[139,4947,2634],{"class":153},[139,4949,3591],{"class":145},[139,4951,4952,4955],{"class":141,"line":313},[139,4953,4954],{"class":149},"    do",[139,4956,4957],{"class":145}," \n",[139,4959,4960],{"class":141,"line":462},[139,4961,4315],{"class":145},[139,4963,4964,4967,4969,4971,4973,4975,4977],{"class":141,"line":474},[139,4965,4966],{"class":781},"        std",[139,4968,4557],{"class":145},[139,4970,3474],{"class":149},[139,4972,733],{"class":145},[139,4974,3474],{"class":149},[139,4976,4566],{"class":781},[139,4978,4569],{"class":145},[139,4980,4981,4983],{"class":141,"line":484},[139,4982,4574],{"class":145},[139,4984,4985],{"class":149},"++\n",[139,4987,4988],{"class":141,"line":989},[139,4989,4472],{"class":145},[139,4991,4992,4994,4996,4998,5000],{"class":141,"line":994},[139,4993,4536],{"class":149},[139,4995,4539],{"class":145},[139,4997,796],{"class":149},[139,4999,536],{"class":153},[139,5001,5002],{"class":145},");\n",[139,5004,5005,5007,5009,5011],{"class":141,"line":999},[139,5006,4588],{"class":781},[139,5008,157],{"class":145},[139,5010,4593],{"class":160},[139,5012,5002],{"class":145},[139,5014,5015],{"class":141,"line":1006},[139,5016,3862],{"class":145},[19,5018,5019],{},"案例-水仙花数",[19,5021,5022],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5024,5025],{},"例如：1^3+5^3+3^3=153",[19,5027,5028],{},"请用do...while语句，求出所有3位数的水仙花数",[130,5030,5032],{"className":2447,"code":5031,"language":2449,"meta":135,"style":135},"#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",[50,5033,5034,5040,5050,5058,5062,5067,5079,5085,5089,5094,5110,5126,5142,5157,5176,5191,5239,5243,5255,5259,5267,5271,5285],{"__ignoreMap":135},[139,5035,5036,5038],{"class":141,"line":142},[139,5037,4236],{"class":149},[139,5039,4619],{"class":160},[139,5041,5042,5044,5046,5048],{"class":141,"line":210},[139,5043,4244],{"class":149},[139,5045,4247],{"class":149},[139,5047,4250],{"class":781},[139,5049,3591],{"class":145},[139,5051,5052,5054,5056],{"class":141,"line":254},[139,5053,2461],{"class":149},[139,5055,4259],{"class":781},[139,5057,4262],{"class":145},[139,5059,5060],{"class":141,"line":262},[139,5061,3843],{"class":145},[139,5063,5064],{"class":141,"line":313},[139,5065,5066],{"class":2512},"    \u002F\u002F1.先打印所有三位数字\n",[139,5068,5069,5071,5073,5075,5077],{"class":141,"line":462},[139,5070,1082],{"class":149},[139,5072,4525],{"class":145},[139,5074,150],{"class":149},[139,5076,1017],{"class":153},[139,5078,3591],{"class":145},[139,5080,5081,5083],{"class":141,"line":474},[139,5082,4954],{"class":149},[139,5084,4957],{"class":145},[139,5086,5087],{"class":141,"line":484},[139,5088,4315],{"class":145},[139,5090,5091],{"class":141,"line":989},[139,5092,5093],{"class":2512},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[139,5095,5096,5099,5101,5103,5105,5107],{"class":141,"line":994},[139,5097,5098],{"class":149},"        int",[139,5100,3696],{"class":145},[139,5102,150],{"class":149},[139,5104,2634],{"class":153},[139,5106,2509],{"class":145},[139,5108,5109],{"class":2512}," \u002F\u002F个位\n",[139,5111,5112,5114,5117,5119,5121,5123],{"class":141,"line":999},[139,5113,5098],{"class":149},[139,5115,5116],{"class":145}," b",[139,5118,150],{"class":149},[139,5120,2634],{"class":153},[139,5122,2509],{"class":145},[139,5124,5125],{"class":2512}," \u002F\u002F十位\n",[139,5127,5128,5130,5133,5135,5137,5139],{"class":141,"line":1006},[139,5129,5098],{"class":149},[139,5131,5132],{"class":145}," c",[139,5134,150],{"class":149},[139,5136,2634],{"class":153},[139,5138,2509],{"class":145},[139,5140,5141],{"class":2512}," \u002F\u002F百位\n",[139,5143,5144,5147,5149,5151,5153,5155],{"class":141,"line":1027},[139,5145,5146],{"class":145},"        a",[139,5148,150],{"class":149},[139,5150,733],{"class":145},[139,5152,2766],{"class":149},[139,5154,536],{"class":153},[139,5156,3591],{"class":145},[139,5158,5159,5162,5164,5166,5168,5170,5172,5174],{"class":141,"line":1040},[139,5160,5161],{"class":145},"        b",[139,5163,150],{"class":149},[139,5165,733],{"class":145},[139,5167,3019],{"class":149},[139,5169,536],{"class":153},[139,5171,2766],{"class":149},[139,5173,536],{"class":153},[139,5175,3591],{"class":145},[139,5177,5178,5181,5183,5185,5187,5189],{"class":141,"line":2160},[139,5179,5180],{"class":145},"        c",[139,5182,150],{"class":149},[139,5184,733],{"class":145},[139,5186,3019],{"class":149},[139,5188,1017],{"class":153},[139,5190,3591],{"class":145},[139,5192,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211,5213,5215,5217,5219,5221,5223,5225,5227,5230,5233,5236],{"class":141,"line":2188},[139,5194,4780],{"class":149},[139,5196,4128],{"class":145},[139,5198,2892],{"class":149},[139,5200,2680],{"class":145},[139,5202,2892],{"class":149},[139,5204,2680],{"class":145},[139,5206,1147],{"class":149},[139,5208,2704],{"class":145},[139,5210,2892],{"class":149},[139,5212,2704],{"class":145},[139,5214,2892],{"class":149},[139,5216,2704],{"class":145},[139,5218,1147],{"class":149},[139,5220,2729],{"class":145},[139,5222,2892],{"class":149},[139,5224,2729],{"class":145},[139,5226,2892],{"class":149},[139,5228,5229],{"class":145},"c ",[139,5231,5232],{"class":149},"==",[139,5234,5235],{"class":145}," num)",[139,5237,5238],{"class":2512}," \u002F\u002F如果是水仙花数，才打印\n",[139,5240,5241],{"class":141,"line":3944},[139,5242,4793],{"class":145},[139,5244,5245,5247,5249,5251,5253],{"class":141,"line":3963},[139,5246,4798],{"class":145},[139,5248,3474],{"class":149},[139,5250,733],{"class":145},[139,5252,3474],{"class":149},[139,5254,3496],{"class":145},[139,5256,5257],{"class":141,"line":3968},[139,5258,4812],{"class":145},[139,5260,5261,5263,5265],{"class":141,"line":3982},[139,5262,4574],{"class":145},[139,5264,4577],{"class":149},[139,5266,3591],{"class":145},[139,5268,5269],{"class":141,"line":3987},[139,5270,4472],{"class":145},[139,5272,5273,5275,5278,5280,5283],{"class":141,"line":4014},[139,5274,4536],{"class":149},[139,5276,5277],{"class":145}," (num ",[139,5279,796],{"class":149},[139,5281,5282],{"class":153}," 1000",[139,5284,5002],{"class":145},[139,5286,5287],{"class":141,"line":4019},[139,5288,3862],{"class":145},[1760,5290,5291],{"start":254},[1763,5292,5293],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[130,5295,5297],{"className":2447,"code":5296,"language":2449,"meta":135,"style":135},"\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",[50,5298,5299,5304,5332,5336,5348,5352,5357,5368,5375,5379,5392,5396,5403,5407,5419,5428],{"__ignoreMap":135},[139,5300,5301],{"class":141,"line":142},[139,5302,5303],{"class":2512},"\u002F\u002F从数字0-9打印\n",[139,5305,5306,5308,5310,5312,5315,5317,5319,5322,5324,5326,5328,5330],{"class":141,"line":210},[139,5307,1970],{"class":149},[139,5309,157],{"class":145},[139,5311,2461],{"class":149},[139,5313,5314],{"class":145}," i",[139,5316,150],{"class":149},[139,5318,2634],{"class":153},[139,5320,5321],{"class":145},";i",[139,5323,796],{"class":149},[139,5325,536],{"class":153},[139,5327,5321],{"class":145},[139,5329,4577],{"class":149},[139,5331,164],{"class":145},[139,5333,5334],{"class":141,"line":254},[139,5335,3843],{"class":145},[139,5337,5338,5340,5342,5344,5346],{"class":141,"line":262},[139,5339,3848],{"class":145},[139,5341,3474],{"class":149},[139,5343,2879],{"class":145},[139,5345,3474],{"class":149},[139,5347,3496],{"class":145},[139,5349,5350],{"class":141,"line":313},[139,5351,3862],{"class":145},[139,5353,5354],{"class":141,"line":462},[139,5355,5356],{"class":2512},"\u002F\u002F上式可以进行拆分\n",[139,5358,5359,5361,5363,5365],{"class":141,"line":474},[139,5360,2461],{"class":149},[139,5362,5314],{"class":145},[139,5364,150],{"class":149},[139,5366,5367],{"class":153},"0\n",[139,5369,5370,5372],{"class":141,"line":484},[139,5371,1970],{"class":149},[139,5373,5374],{"class":145},"(;;;)\n",[139,5376,5377],{"class":141,"line":989},[139,5378,3843],{"class":145},[139,5380,5381,5383,5386,5388,5390],{"class":141,"line":994},[139,5382,790],{"class":149},[139,5384,5385],{"class":145},"(i",[139,5387,3998],{"class":149},[139,5389,536],{"class":153},[139,5391,164],{"class":145},[139,5393,5394],{"class":141,"line":999},[139,5395,4315],{"class":145},[139,5397,5398,5401],{"class":141,"line":1006},[139,5399,5400],{"class":149},"        break",[139,5402,3591],{"class":145},[139,5404,5405],{"class":141,"line":1027},[139,5406,4472],{"class":145},[139,5408,5409,5411,5413,5415,5417],{"class":141,"line":1040},[139,5410,3848],{"class":145},[139,5412,3474],{"class":149},[139,5414,2879],{"class":145},[139,5416,3474],{"class":149},[139,5418,3496],{"class":145},[139,5420,5421,5424,5426],{"class":141,"line":2160},[139,5422,5423],{"class":145},"    i",[139,5425,4577],{"class":149},[139,5427,3591],{"class":145},[139,5429,5430],{"class":141,"line":2188},[139,5431,3862],{"class":145},[19,5433,5434],{},"小练习",[130,5436,5438],{"className":2447,"code":5437,"language":2449,"meta":135,"style":135},"#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",[50,5439,5440,5446,5456,5464,5468,5473,5478,5506,5510,5515,5520,5561,5565,5578,5582,5586,5590,5602,5606,5610],{"__ignoreMap":135},[139,5441,5442,5444],{"class":141,"line":142},[139,5443,4236],{"class":149},[139,5445,4239],{"class":160},[139,5447,5448,5450,5452,5454],{"class":141,"line":210},[139,5449,4244],{"class":149},[139,5451,4247],{"class":149},[139,5453,4250],{"class":781},[139,5455,3591],{"class":145},[139,5457,5458,5460,5462],{"class":141,"line":254},[139,5459,2461],{"class":149},[139,5461,4259],{"class":781},[139,5463,4262],{"class":145},[139,5465,5466],{"class":141,"line":262},[139,5467,3843],{"class":145},[139,5469,5470],{"class":141,"line":313},[139,5471,5472],{"class":2512},"    \u002F\u002F敲桌子案例\n",[139,5474,5475],{"class":141,"line":462},[139,5476,5477],{"class":2512},"    \u002F\u002F1.先输出1-100的数字\n",[139,5479,5480,5483,5485,5487,5489,5491,5493,5496,5498,5500,5502,5504],{"class":141,"line":474},[139,5481,5482],{"class":149},"    for",[139,5484,157],{"class":145},[139,5486,2461],{"class":149},[139,5488,5314],{"class":145},[139,5490,150],{"class":149},[139,5492,410],{"class":153},[139,5494,5495],{"class":145},"; i",[139,5497,3885],{"class":149},[139,5499,1017],{"class":153},[139,5501,5495],{"class":145},[139,5503,4577],{"class":149},[139,5505,164],{"class":145},[139,5507,5508],{"class":141,"line":484},[139,5509,4315],{"class":145},[139,5511,5512],{"class":141,"line":989},[139,5513,5514],{"class":2512},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[139,5516,5517],{"class":141,"line":994},[139,5518,5519],{"class":2512},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[139,5521,5522,5524,5526,5528,5530,5532,5534,5537,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557,5559],{"class":141,"line":999},[139,5523,4780],{"class":149},[139,5525,5385],{"class":145},[139,5527,2766],{"class":149},[139,5529,2807],{"class":153},[139,5531,5232],{"class":149},[139,5533,2634],{"class":153},[139,5535,5536],{"class":149}," ||",[139,5538,5314],{"class":145},[139,5540,2766],{"class":149},[139,5542,536],{"class":153},[139,5544,5232],{"class":149},[139,5546,2807],{"class":153},[139,5548,5536],{"class":149},[139,5550,5314],{"class":145},[139,5552,3019],{"class":149},[139,5554,536],{"class":153},[139,5556,5232],{"class":149},[139,5558,2807],{"class":153},[139,5560,164],{"class":145},[139,5562,5563],{"class":141,"line":1006},[139,5564,4793],{"class":145},[139,5566,5567,5569,5571,5574,5576],{"class":141,"line":1027},[139,5568,4798],{"class":145},[139,5570,3474],{"class":149},[139,5572,5573],{"class":160},"\"敲桌子\"",[139,5575,3474],{"class":149},[139,5577,3496],{"class":145},[139,5579,5580],{"class":141,"line":1040},[139,5581,4812],{"class":145},[139,5583,5584],{"class":141,"line":2160},[139,5585,4853],{"class":149},[139,5587,5588],{"class":141,"line":2188},[139,5589,4793],{"class":145},[139,5591,5592,5594,5596,5598,5600],{"class":141,"line":3944},[139,5593,4798],{"class":145},[139,5595,3474],{"class":149},[139,5597,2879],{"class":145},[139,5599,3474],{"class":149},[139,5601,3496],{"class":145},[139,5603,5604],{"class":141,"line":3963},[139,5605,4812],{"class":145},[139,5607,5608],{"class":141,"line":3968},[139,5609,4472],{"class":145},[139,5611,5612],{"class":141,"line":3982},[139,5613,3862],{"class":145},[19,5615,5616],{},"嵌套实现星图",[130,5618,5620],{"className":2447,"code":5619,"language":2449,"meta":135,"style":135},"#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",[50,5621,5622,5628,5638,5646,5650,5676,5680,5709,5713,5724,5728,5737,5741],{"__ignoreMap":135},[139,5623,5624,5626],{"class":141,"line":142},[139,5625,4236],{"class":149},[139,5627,4239],{"class":160},[139,5629,5630,5632,5634,5636],{"class":141,"line":210},[139,5631,4244],{"class":149},[139,5633,4247],{"class":149},[139,5635,4250],{"class":781},[139,5637,3591],{"class":145},[139,5639,5640,5642,5644],{"class":141,"line":254},[139,5641,2461],{"class":149},[139,5643,4259],{"class":781},[139,5645,4262],{"class":145},[139,5647,5648],{"class":141,"line":262},[139,5649,3843],{"class":145},[139,5651,5652,5654,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674],{"class":141,"line":313},[139,5653,5482],{"class":149},[139,5655,549],{"class":145},[139,5657,2461],{"class":149},[139,5659,5314],{"class":145},[139,5661,150],{"class":149},[139,5663,2634],{"class":153},[139,5665,5321],{"class":145},[139,5667,796],{"class":149},[139,5669,536],{"class":153},[139,5671,5321],{"class":145},[139,5673,4577],{"class":149},[139,5675,164],{"class":145},[139,5677,5678],{"class":141,"line":462},[139,5679,4315],{"class":145},[139,5681,5682,5685,5687,5689,5692,5694,5696,5699,5701,5703,5705,5707],{"class":141,"line":474},[139,5683,5684],{"class":149},"        for",[139,5686,549],{"class":145},[139,5688,2461],{"class":149},[139,5690,5691],{"class":145}," j",[139,5693,150],{"class":149},[139,5695,2634],{"class":153},[139,5697,5698],{"class":145},";j",[139,5700,796],{"class":149},[139,5702,536],{"class":153},[139,5704,5698],{"class":145},[139,5706,4577],{"class":149},[139,5708,164],{"class":145},[139,5710,5711],{"class":141,"line":484},[139,5712,4793],{"class":145},[139,5714,5715,5717,5719,5722],{"class":141,"line":989},[139,5716,4798],{"class":145},[139,5718,3474],{"class":149},[139,5720,5721],{"class":160},"\"*\"",[139,5723,3591],{"class":145},[139,5725,5726],{"class":141,"line":994},[139,5727,4812],{"class":145},[139,5729,5730,5733,5735],{"class":141,"line":999},[139,5731,5732],{"class":145},"        cout",[139,5734,3474],{"class":149},[139,5736,3496],{"class":145},[139,5738,5739],{"class":141,"line":1006},[139,5740,4472],{"class":145},[139,5742,5743],{"class":141,"line":1027},[139,5744,3862],{"class":145},[19,5746,5747],{},"乘法口诀表",[130,5749,5751],{"className":2447,"code":5750,"language":2449,"meta":135,"style":135},"#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",[50,5752,5753,5759,5769,5777,5781,5807,5811,5836,5840,5880,5884,5892,5896],{"__ignoreMap":135},[139,5754,5755,5757],{"class":141,"line":142},[139,5756,4236],{"class":149},[139,5758,4619],{"class":160},[139,5760,5761,5763,5765,5767],{"class":141,"line":210},[139,5762,4244],{"class":149},[139,5764,4247],{"class":149},[139,5766,4250],{"class":781},[139,5768,3591],{"class":145},[139,5770,5771,5773,5775],{"class":141,"line":254},[139,5772,2461],{"class":149},[139,5774,4259],{"class":781},[139,5776,4262],{"class":145},[139,5778,5779],{"class":141,"line":262},[139,5780,3843],{"class":145},[139,5782,5783,5785,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805],{"class":141,"line":313},[139,5784,5482],{"class":149},[139,5786,157],{"class":145},[139,5788,2461],{"class":149},[139,5790,5314],{"class":145},[139,5792,150],{"class":149},[139,5794,410],{"class":153},[139,5796,5321],{"class":145},[139,5798,796],{"class":149},[139,5800,536],{"class":153},[139,5802,5321],{"class":145},[139,5804,4577],{"class":149},[139,5806,164],{"class":145},[139,5808,5809],{"class":141,"line":462},[139,5810,4315],{"class":145},[139,5812,5813,5815,5817,5819,5821,5823,5825,5827,5829,5832,5834],{"class":141,"line":474},[139,5814,5684],{"class":149},[139,5816,157],{"class":145},[139,5818,2461],{"class":149},[139,5820,5691],{"class":145},[139,5822,150],{"class":149},[139,5824,410],{"class":153},[139,5826,5698],{"class":145},[139,5828,3885],{"class":149},[139,5830,5831],{"class":145},"i;j",[139,5833,4577],{"class":149},[139,5835,164],{"class":145},[139,5837,5838],{"class":141,"line":484},[139,5839,4793],{"class":145},[139,5841,5842,5844,5846,5848,5850,5852,5854,5856,5858,5861,5863,5865,5867,5869,5871,5874,5876,5878],{"class":141,"line":989},[139,5843,4798],{"class":145},[139,5845,3474],{"class":149},[139,5847,2904],{"class":145},[139,5849,3474],{"class":149},[139,5851,5721],{"class":160},[139,5853,3474],{"class":149},[139,5855,2879],{"class":145},[139,5857,3474],{"class":149},[139,5859,5860],{"class":160},"\"=\"",[139,5862,3474],{"class":149},[139,5864,2879],{"class":145},[139,5866,2892],{"class":149},[139,5868,2904],{"class":145},[139,5870,3474],{"class":149},[139,5872,5873],{"class":160},"'",[139,5875,3531],{"class":153},[139,5877,5873],{"class":160},[139,5879,3591],{"class":145},[139,5881,5882],{"class":141,"line":994},[139,5883,4812],{"class":145},[139,5885,5886,5888,5890],{"class":141,"line":999},[139,5887,5732],{"class":145},[139,5889,3474],{"class":149},[139,5891,3496],{"class":145},[139,5893,5894],{"class":141,"line":1006},[139,5895,4472],{"class":145},[139,5897,5898],{"class":141,"line":1027},[139,5899,3862],{"class":145},[1217,5901,5903],{"id":5902},"_163跳出语句","1.6.3跳出语句",[1760,5905,5906],{},[1763,5907,5908],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5910,5911],{},"break使用时机：",[3437,5913,5914,5917,5920],{},[1763,5915,5916],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1763,5918,5919],{},"出现在循环结构中，作用是跳出当前的循环结构",[1763,5921,5922],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1760,5924,5925,5928],{"start":210},[1763,5926,5927],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1763,5929,5930],{},"goto语句\n语法：goto 标记;",[19,5932,5933],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[130,5935,5937],{"className":2447,"code":5936,"language":2449,"meta":135,"style":135},"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",[50,5938,5939,5947,5951,5964,5974,5987,6000,6013,6020,6036],{"__ignoreMap":135},[139,5940,5941,5943,5945],{"class":141,"line":142},[139,5942,2461],{"class":149},[139,5944,4259],{"class":781},[139,5946,4262],{"class":145},[139,5948,5949],{"class":141,"line":210},[139,5950,3843],{"class":145},[139,5952,5953,5955,5957,5960,5962],{"class":141,"line":254},[139,5954,3848],{"class":145},[139,5956,3474],{"class":149},[139,5958,5959],{"class":160},"\"1\"",[139,5961,3474],{"class":149},[139,5963,3496],{"class":145},[139,5965,5966,5969,5972],{"class":141,"line":262},[139,5967,5968],{"class":149},"    goto",[139,5970,5971],{"class":781}," FLAG",[139,5973,3591],{"class":145},[139,5975,5976,5978,5980,5983,5985],{"class":141,"line":313},[139,5977,3848],{"class":145},[139,5979,3474],{"class":149},[139,5981,5982],{"class":160},"\"2\"",[139,5984,3474],{"class":149},[139,5986,3496],{"class":145},[139,5988,5989,5991,5993,5996,5998],{"class":141,"line":462},[139,5990,3848],{"class":145},[139,5992,3474],{"class":149},[139,5994,5995],{"class":160},"\"3\"",[139,5997,3474],{"class":149},[139,5999,3496],{"class":145},[139,6001,6002,6004,6006,6009,6011],{"class":141,"line":474},[139,6003,3848],{"class":145},[139,6005,3474],{"class":149},[139,6007,6008],{"class":160},"\"4\"",[139,6010,3474],{"class":149},[139,6012,3496],{"class":145},[139,6014,6015,6018],{"class":141,"line":484},[139,6016,6017],{"class":781},"    FLAG",[139,6019,246],{"class":145},[139,6021,6022,6024,6026,6029,6031,6033],{"class":141,"line":989},[139,6023,3848],{"class":145},[139,6025,3474],{"class":149},[139,6027,6028],{"class":160},"\"5\"",[139,6030,3474],{"class":149},[139,6032,3539],{"class":145},[139,6034,6035],{"class":2512},"\u002F\u002F跳过了2,3,4,直接到5\n",[139,6037,6038],{"class":141,"line":994},[139,6039,3862],{"class":145},[14,6041,6043],{"id":6042},"_17数组","1.7数组",[1217,6045,6047],{"id":6046},"_171一维数组","1.7.1一维数组",[1760,6049,6050],{},[1763,6051,6052],{},"一维数组定义方式",[26,6054,6055,6065],{},[29,6056,6057],{},[32,6058,6059,6062],{},[35,6060,6061],{},"方式",[35,6063,6064],{},"注意事项",[42,6066,6067,6081,6091],{},[32,6068,6069,6075],{},[47,6070,6071,6072,2509],{},"数据类型 数组名",[139,6073,6074],{},"数组长度",[47,6076,6077,6078,6080],{},"这种方式是先定义再arr",[139,6079,2879],{},"赋值",[32,6082,6083,6088],{},[47,6084,6071,6085,6087],{},[139,6086,6074],{},"={值1,值2....};",[47,6089,6090],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[32,6092,6093,6097],{},[47,6094,6071,6095,6087],{},[139,6096],{},[47,6098,6099,6100,6102],{},"int arr",[139,6101],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1760,6104,6105],{"start":210},[1763,6106,6107],{},"一维数组数组名\n用途：",[3437,6109,6110],{},[1763,6111,6112],{},"1.可以统计整个数组在内存中的长度：",[130,6114,6116],{"className":2447,"code":6115,"language":2449,"meta":135,"style":135},"sizeof(arr);\nsizeof(arr[0]);\n",[50,6117,6118,6125],{"__ignoreMap":135},[139,6119,6120,6122],{"class":141,"line":142},[139,6121,2456],{"class":149},[139,6123,6124],{"class":145},"(arr);\n",[139,6126,6127,6129,6132,6134],{"class":141,"line":210},[139,6128,2456],{"class":149},[139,6130,6131],{"class":145},"(arr[",[139,6133,2634],{"class":153},[139,6135,6136],{"class":145},"]);\n",[3437,6138,6139],{},[1763,6140,6141],{},"2.可以获取数组在内存中的首地址:",[130,6143,6145],{"className":2447,"code":6144,"language":2449,"meta":135,"style":135},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[50,6146,6147,6152,6165,6170],{"__ignoreMap":135},[139,6148,6149],{"class":141,"line":142},[139,6150,6151],{"class":2512},"\u002F\u002F查看16进制的首地址\n",[139,6153,6154,6156,6158,6161,6163],{"class":141,"line":210},[139,6155,3667],{"class":145},[139,6157,3474],{"class":149},[139,6159,6160],{"class":145},"arr",[139,6162,3474],{"class":149},[139,6164,3496],{"class":145},[139,6166,6167],{"class":141,"line":254},[139,6168,6169],{"class":2512},"\u002F\u002F看10进制数\n",[139,6171,6172,6174,6176,6178,6180,6182,6184,6187,6189,6191,6193],{"class":141,"line":262},[139,6173,3667],{"class":145},[139,6175,3474],{"class":149},[139,6177,157],{"class":145},[139,6179,2461],{"class":149},[139,6181,2867],{"class":145},[139,6183,2791],{"class":149},[139,6185,6186],{"class":145},"arr[",[139,6188,2634],{"class":153},[139,6190,3373],{"class":145},[139,6192,3474],{"class":149},[139,6194,3496],{"class":145},[19,6196,6197],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3437,6199,6200],{},[1763,6201,6202],{},"1️⃣五只小猪称体重",[130,6204,6206],{"className":2447,"code":6205,"language":2449,"meta":135,"style":135},"#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",[50,6207,6208,6214,6224,6232,6236,6276,6289,6315,6319,6331,6335,6345,6349,6353,6366,6374],{"__ignoreMap":135},[139,6209,6210,6212],{"class":141,"line":142},[139,6211,4236],{"class":149},[139,6213,4239],{"class":160},[139,6215,6216,6218,6220,6222],{"class":141,"line":210},[139,6217,4244],{"class":149},[139,6219,4247],{"class":149},[139,6221,4250],{"class":781},[139,6223,3591],{"class":145},[139,6225,6226,6228,6230],{"class":141,"line":254},[139,6227,2461],{"class":149},[139,6229,4259],{"class":781},[139,6231,4262],{"class":145},[139,6233,6234],{"class":141,"line":262},[139,6235,3843],{"class":145},[139,6237,6238,6240,6243,6245,6247,6249,6251,6254,6256,6259,6261,6263,6265,6268,6270,6273],{"class":141,"line":313},[139,6239,1082],{"class":149},[139,6241,6242],{"class":145}," arr[",[139,6244,1481],{"class":153},[139,6246,3373],{"class":145},[139,6248,150],{"class":149},[139,6250,625],{"class":145},[139,6252,6253],{"class":153},"300",[139,6255,2816],{"class":145},[139,6257,6258],{"class":153},"350",[139,6260,2816],{"class":145},[139,6262,1022],{"class":153},[139,6264,2816],{"class":145},[139,6266,6267],{"class":153},"400",[139,6269,2816],{"class":145},[139,6271,6272],{"class":153},"250",[139,6274,6275],{"class":145},"};\n",[139,6277,6278,6280,6283,6285,6287],{"class":141,"line":462},[139,6279,1082],{"class":149},[139,6281,6282],{"class":145}," tmp",[139,6284,150],{"class":149},[139,6286,2634],{"class":153},[139,6288,3591],{"class":145},[139,6290,6291,6293,6295,6297,6299,6301,6303,6305,6307,6309,6311,6313],{"class":141,"line":474},[139,6292,5482],{"class":149},[139,6294,549],{"class":145},[139,6296,2461],{"class":149},[139,6298,5314],{"class":145},[139,6300,150],{"class":149},[139,6302,2634],{"class":153},[139,6304,5321],{"class":145},[139,6306,796],{"class":149},[139,6308,1481],{"class":153},[139,6310,5321],{"class":145},[139,6312,4577],{"class":149},[139,6314,164],{"class":145},[139,6316,6317],{"class":141,"line":484},[139,6318,4315],{"class":145},[139,6320,6321,6323,6326,6328],{"class":141,"line":989},[139,6322,4780],{"class":149},[139,6324,6325],{"class":145},"(tmp",[139,6327,796],{"class":149},[139,6329,6330],{"class":145},"arr[i])\n",[139,6332,6333],{"class":141,"line":994},[139,6334,4793],{"class":145},[139,6336,6337,6340,6342],{"class":141,"line":999},[139,6338,6339],{"class":145},"            tmp",[139,6341,150],{"class":149},[139,6343,6344],{"class":145},"arr[i];\n",[139,6346,6347],{"class":141,"line":1006},[139,6348,4812],{"class":145},[139,6350,6351],{"class":141,"line":1027},[139,6352,4472],{"class":145},[139,6354,6355,6357,6359,6362,6364],{"class":141,"line":1040},[139,6356,3848],{"class":145},[139,6358,3474],{"class":149},[139,6360,6361],{"class":145},"tmp",[139,6363,3474],{"class":149},[139,6365,3496],{"class":145},[139,6367,6368,6370,6372],{"class":141,"line":2160},[139,6369,978],{"class":149},[139,6371,799],{"class":153},[139,6373,3591],{"class":145},[139,6375,6376],{"class":141,"line":2188},[139,6377,3862],{"class":145},[3437,6379,6380],{},[1763,6381,6382],{},"2️⃣数组元素逆置",[130,6384,6386],{"className":2447,"code":6385,"language":2449,"meta":135,"style":135},"\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",[50,6387,6388,6393,6399,6409,6417,6421,6456,6472,6504,6517,6522,6527,6539,6549,6559,6564,6573,6583,6588,6593,6620,6624,6640,6644,6655,6664],{"__ignoreMap":135},[139,6389,6390],{"class":141,"line":142},[139,6391,6392],{"class":2512},"\u002F\u002F元素逆置\n",[139,6394,6395,6397],{"class":141,"line":210},[139,6396,4236],{"class":149},[139,6398,4239],{"class":160},[139,6400,6401,6403,6405,6407],{"class":141,"line":254},[139,6402,4244],{"class":149},[139,6404,4247],{"class":149},[139,6406,4250],{"class":781},[139,6408,3591],{"class":145},[139,6410,6411,6413,6415],{"class":141,"line":262},[139,6412,2461],{"class":149},[139,6414,4259],{"class":781},[139,6416,4262],{"class":145},[139,6418,6419],{"class":141,"line":313},[139,6420,3843],{"class":145},[139,6422,6423,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448,6450,6452,6454],{"class":141,"line":462},[139,6424,6425],{"class":149},"   int",[139,6427,6242],{"class":145},[139,6429,1481],{"class":153},[139,6431,3373],{"class":145},[139,6433,150],{"class":149},[139,6435,625],{"class":145},[139,6437,410],{"class":153},[139,6439,2816],{"class":145},[139,6441,416],{"class":153},[139,6443,2816],{"class":145},[139,6445,421],{"class":153},[139,6447,2816],{"class":145},[139,6449,1476],{"class":153},[139,6451,2816],{"class":145},[139,6453,1481],{"class":153},[139,6455,6275],{"class":145},[139,6457,6458,6460,6463,6465,6467,6469],{"class":141,"line":474},[139,6459,6425],{"class":149},[139,6461,6462],{"class":145}," start",[139,6464,150],{"class":149},[139,6466,2634],{"class":153},[139,6468,2509],{"class":145},[139,6470,6471],{"class":2512},"\u002F\u002F起始下标\n",[139,6473,6474,6476,6479,6482,6485,6488,6490,6492,6495,6497,6499,6501],{"class":141,"line":484},[139,6475,6425],{"class":149},[139,6477,6478],{"class":145}," end",[139,6480,6481],{"class":149},"=sizeof",[139,6483,6484],{"class":145},"(arr)",[139,6486,6487],{"class":149},"\u002Fsizeof",[139,6489,6131],{"class":145},[139,6491,2634],{"class":153},[139,6493,6494],{"class":145},"])",[139,6496,855],{"class":149},[139,6498,410],{"class":153},[139,6500,2509],{"class":145},[139,6502,6503],{"class":2512},"\u002F\u002F结束下标\n",[139,6505,6506,6509,6512,6514],{"class":141,"line":989},[139,6507,6508],{"class":149},"   while",[139,6510,6511],{"class":145}," (start",[139,6513,796],{"class":149},[139,6515,6516],{"class":145},"end)\n",[139,6518,6519],{"class":141,"line":994},[139,6520,6521],{"class":145},"   {\n",[139,6523,6524],{"class":141,"line":999},[139,6525,6526],{"class":2512},"    \u002F\u002F实现元素互换代码\n",[139,6528,6529,6531,6534,6536],{"class":141,"line":1006},[139,6530,1082],{"class":149},[139,6532,6533],{"class":145}," temp",[139,6535,150],{"class":149},[139,6537,6538],{"class":145},"arr[start];\n",[139,6540,6541,6544,6546],{"class":141,"line":1027},[139,6542,6543],{"class":145},"    arr[start]",[139,6545,150],{"class":149},[139,6547,6548],{"class":145},"arr[end];\n",[139,6550,6551,6554,6556],{"class":141,"line":1040},[139,6552,6553],{"class":145},"    arr[end]",[139,6555,150],{"class":149},[139,6557,6558],{"class":145},"temp;\n",[139,6560,6561],{"class":141,"line":2160},[139,6562,6563],{"class":2512},"    \u002F\u002F下标更新\n",[139,6565,6566,6569,6571],{"class":141,"line":2188},[139,6567,6568],{"class":145},"    start",[139,6570,4577],{"class":149},[139,6572,3591],{"class":145},[139,6574,6575,6578,6581],{"class":141,"line":3944},[139,6576,6577],{"class":145},"    end",[139,6579,6580],{"class":149},"--",[139,6582,3591],{"class":145},[139,6584,6585],{"class":141,"line":3963},[139,6586,6587],{"class":145},"   }\n",[139,6589,6590],{"class":141,"line":3968},[139,6591,6592],{"class":2512},"   \u002F\u002F输出逆置后的数组\n",[139,6594,6595,6598,6600,6602,6604,6606,6608,6610,6612,6614,6616,6618],{"class":141,"line":3982},[139,6596,6597],{"class":149},"   for",[139,6599,549],{"class":145},[139,6601,2461],{"class":149},[139,6603,5314],{"class":145},[139,6605,150],{"class":149},[139,6607,2634],{"class":153},[139,6609,5321],{"class":145},[139,6611,796],{"class":149},[139,6613,1481],{"class":153},[139,6615,5321],{"class":145},[139,6617,4577],{"class":149},[139,6619,164],{"class":145},[139,6621,6622],{"class":141,"line":3987},[139,6623,6521],{"class":145},[139,6625,6626,6628,6630,6633,6635,6638],{"class":141,"line":4014},[139,6627,3848],{"class":145},[139,6629,3474],{"class":149},[139,6631,6632],{"class":145},"arr[i]",[139,6634,3474],{"class":149},[139,6636,6637],{"class":160},"\" \"",[139,6639,3591],{"class":145},[139,6641,6642],{"class":141,"line":4019},[139,6643,6587],{"class":145},[139,6645,6646,6649,6651,6653],{"class":141,"line":4036},[139,6647,6648],{"class":781},"   system",[139,6650,157],{"class":145},[139,6652,4593],{"class":160},[139,6654,5002],{"class":145},[139,6656,6657,6660,6662],{"class":141,"line":4041},[139,6658,6659],{"class":149},"   return",[139,6661,799],{"class":153},[139,6663,3591],{"class":145},[139,6665,6666],{"class":141,"line":4046},[139,6667,3862],{"class":145},[3437,6669,6670],{},[1763,6671,6672],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[130,6674,6676],{"className":2447,"code":6675,"language":2449,"meta":135,"style":135},"\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",[50,6677,6678,6683,6689,6699,6707,6711,6763,6776,6802,6806,6820,6824,6829,6834,6864,6868,6873,6907,6911,6916,6936,6941,6953,6969,6984,6989,6993,6997,7010,7036,7040,7054,7058,7066],{"__ignoreMap":135},[139,6679,6680],{"class":141,"line":142},[139,6681,6682],{"class":2512},"\u002F\u002F冒泡排序,升序\n",[139,6684,6685,6687],{"class":141,"line":210},[139,6686,4236],{"class":149},[139,6688,4239],{"class":160},[139,6690,6691,6693,6695,6697],{"class":141,"line":254},[139,6692,4244],{"class":149},[139,6694,4247],{"class":149},[139,6696,4250],{"class":781},[139,6698,3591],{"class":145},[139,6700,6701,6703,6705],{"class":141,"line":262},[139,6702,2461],{"class":149},[139,6704,4259],{"class":781},[139,6706,4262],{"class":145},[139,6708,6709],{"class":141,"line":313},[139,6710,3843],{"class":145},[139,6712,6713,6715,6717,6719,6722,6724,6727,6729,6731,6733,6735,6737,6739,6741,6743,6745,6747,6749,6751,6753,6755,6757,6759,6761],{"class":141,"line":462},[139,6714,1082],{"class":149},[139,6716,6242],{"class":145},[139,6718,2858],{"class":153},[139,6720,6721],{"class":145},"] ",[139,6723,150],{"class":149},[139,6725,6726],{"class":145}," {",[139,6728,1476],{"class":153},[139,6730,2816],{"class":145},[139,6732,416],{"class":153},[139,6734,2816],{"class":145},[139,6736,2833],{"class":153},[139,6738,2816],{"class":145},[139,6740,2634],{"class":153},[139,6742,2816],{"class":145},[139,6744,1481],{"class":153},[139,6746,2816],{"class":145},[139,6748,2807],{"class":153},[139,6750,2816],{"class":145},[139,6752,410],{"class":153},[139,6754,2816],{"class":145},[139,6756,421],{"class":153},[139,6758,2816],{"class":145},[139,6760,2858],{"class":153},[139,6762,6275],{"class":145},[139,6764,6765,6767,6769,6772,6774],{"class":141,"line":474},[139,6766,3848],{"class":145},[139,6768,3474],{"class":149},[139,6770,6771],{"class":160},"\"排序前：\"",[139,6773,3474],{"class":149},[139,6775,3496],{"class":145},[139,6777,6778,6780,6782,6784,6786,6788,6790,6792,6794,6796,6798,6800],{"class":141,"line":484},[139,6779,5482],{"class":149},[139,6781,549],{"class":145},[139,6783,2461],{"class":149},[139,6785,5314],{"class":145},[139,6787,150],{"class":149},[139,6789,2634],{"class":153},[139,6791,5321],{"class":145},[139,6793,796],{"class":149},[139,6795,2858],{"class":153},[139,6797,5321],{"class":145},[139,6799,4577],{"class":149},[139,6801,164],{"class":145},[139,6803,6804],{"class":141,"line":989},[139,6805,4315],{"class":145},[139,6807,6808,6810,6812,6814,6816,6818],{"class":141,"line":994},[139,6809,5732],{"class":145},[139,6811,3474],{"class":149},[139,6813,6632],{"class":145},[139,6815,3474],{"class":149},[139,6817,6637],{"class":160},[139,6819,3591],{"class":145},[139,6821,6822],{"class":141,"line":999},[139,6823,4472],{"class":145},[139,6825,6826],{"class":141,"line":1006},[139,6827,6828],{"class":2512},"    \u002F\u002F开始冒泡排序\n",[139,6830,6831],{"class":141,"line":1027},[139,6832,6833],{"class":2512},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[139,6835,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856,6858,6860,6862],{"class":141,"line":1040},[139,6837,5482],{"class":149},[139,6839,549],{"class":145},[139,6841,2461],{"class":149},[139,6843,5314],{"class":145},[139,6845,150],{"class":149},[139,6847,2634],{"class":153},[139,6849,5321],{"class":145},[139,6851,796],{"class":149},[139,6853,2858],{"class":153},[139,6855,855],{"class":149},[139,6857,410],{"class":153},[139,6859,5321],{"class":145},[139,6861,4577],{"class":149},[139,6863,164],{"class":145},[139,6865,6866],{"class":141,"line":2160},[139,6867,4315],{"class":145},[139,6869,6870],{"class":141,"line":2188},[139,6871,6872],{"class":2512},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[139,6874,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905],{"class":141,"line":3944},[139,6876,5684],{"class":149},[139,6878,549],{"class":145},[139,6880,2461],{"class":149},[139,6882,5691],{"class":145},[139,6884,150],{"class":149},[139,6886,2634],{"class":153},[139,6888,5698],{"class":145},[139,6890,796],{"class":149},[139,6892,2858],{"class":153},[139,6894,855],{"class":149},[139,6896,2879],{"class":145},[139,6898,855],{"class":149},[139,6900,410],{"class":153},[139,6902,5698],{"class":145},[139,6904,4577],{"class":149},[139,6906,164],{"class":145},[139,6908,6909],{"class":141,"line":3963},[139,6910,4793],{"class":145},[139,6912,6913],{"class":141,"line":3968},[139,6914,6915],{"class":2512},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[139,6917,6918,6921,6924,6926,6929,6931,6933],{"class":141,"line":3982},[139,6919,6920],{"class":149},"            if",[139,6922,6923],{"class":145},"(arr[j]",[139,6925,958],{"class":149},[139,6927,6928],{"class":145},"arr[j",[139,6930,1147],{"class":149},[139,6932,410],{"class":153},[139,6934,6935],{"class":145},"])\n",[139,6937,6938],{"class":141,"line":3987},[139,6939,6940],{"class":145},"            {\n",[139,6942,6943,6946,6948,6950],{"class":141,"line":4014},[139,6944,6945],{"class":149},"                int",[139,6947,6533],{"class":145},[139,6949,150],{"class":149},[139,6951,6952],{"class":145},"arr[j];\n",[139,6954,6955,6958,6960,6962,6964,6966],{"class":141,"line":4019},[139,6956,6957],{"class":145},"                arr[j]",[139,6959,150],{"class":149},[139,6961,6928],{"class":145},[139,6963,1147],{"class":149},[139,6965,410],{"class":153},[139,6967,6968],{"class":145},"];\n",[139,6970,6971,6974,6976,6978,6980,6982],{"class":141,"line":4036},[139,6972,6973],{"class":145},"                arr[j",[139,6975,1147],{"class":149},[139,6977,410],{"class":153},[139,6979,3373],{"class":145},[139,6981,150],{"class":149},[139,6983,6558],{"class":145},[139,6985,6986],{"class":141,"line":4041},[139,6987,6988],{"class":145},"            }\n",[139,6990,6991],{"class":141,"line":4046},[139,6992,4812],{"class":145},[139,6994,6995],{"class":141,"line":4051},[139,6996,4472],{"class":145},[139,6998,6999,7001,7003,7006,7008],{"class":141,"line":4065},[139,7000,3848],{"class":145},[139,7002,3474],{"class":149},[139,7004,7005],{"class":160},"\"排序后：\"",[139,7007,3474],{"class":149},[139,7009,3496],{"class":145},[139,7011,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030,7032,7034],{"class":141,"line":4070},[139,7013,5482],{"class":149},[139,7015,549],{"class":145},[139,7017,2461],{"class":149},[139,7019,5314],{"class":145},[139,7021,150],{"class":149},[139,7023,2634],{"class":153},[139,7025,5321],{"class":145},[139,7027,796],{"class":149},[139,7029,2858],{"class":153},[139,7031,5321],{"class":145},[139,7033,4577],{"class":149},[139,7035,164],{"class":145},[139,7037,7038],{"class":141,"line":4860},[139,7039,4315],{"class":145},[139,7041,7042,7044,7046,7048,7050,7052],{"class":141,"line":4874},[139,7043,5732],{"class":145},[139,7045,3474],{"class":149},[139,7047,6632],{"class":145},[139,7049,3474],{"class":149},[139,7051,6637],{"class":160},[139,7053,3591],{"class":145},[139,7055,7056],{"class":141,"line":4882},[139,7057,4472],{"class":145},[139,7059,7060,7062,7064],{"class":141,"line":4887},[139,7061,978],{"class":149},[139,7063,799],{"class":153},[139,7065,3591],{"class":145},[139,7067,7068],{"class":141,"line":4893},[139,7069,3862],{"class":145},[1217,7071,7073],{"id":7072},"_172二维数组","1.7.2二维数组",[1760,7075,7076],{},[1763,7077,7078],{},"二维数组的四种定义方式",[26,7080,7081,7090],{},[29,7082,7083],{},[32,7084,7085,7088],{},[35,7086,7087],{},"序号",[35,7089,6061],{},[42,7091,7092,7102,7111,7120,7129],{},[32,7093,7094,7096],{},[47,7095,410],{},[47,7097,7098,7099,2509],{},"数据类型 数组名[行数]",[139,7100,7101],{},"列数",[32,7103,7104,7106],{},[47,7105,416],{},[47,7107,7098,7108,7110],{},[139,7109,7101],{},"={ {数据1,数据2}，{数据3，数据4}... }",[32,7112,7113,7115],{},[47,7114,421],{},[47,7116,7098,7117,7119],{},[139,7118,7101],{},"={数据1,数据2,数据3...}",[32,7121,7122,7124],{},[47,7123,1476],{},[47,7125,7126,7127,7119],{},"数据类型 数组名[]",[139,7128,7101],{},[32,7130,7131,7134],{},[47,7132,7133],{},"注意：不能只省略列数",[47,7135],{},[1760,7137,7138],{"start":210},[1763,7139,7140],{},"二维数组数组名",[3437,7142,7143,7146],{},[1763,7144,7145],{},"1.查看二维数组所占内存空间",[1763,7147,7148],{},"2.获取二维数组首地址",[19,7150,7151],{},"已知二维数组，求二维数组的行数与列数",[130,7153,7155],{"className":2447,"code":7154,"language":2449,"meta":135,"style":135},"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",[50,7156,7157,7165,7169,7187,7191,7209,7225,7230,7255,7288],{"__ignoreMap":135},[139,7158,7159,7161,7163],{"class":141,"line":142},[139,7160,2461],{"class":149},[139,7162,4259],{"class":781},[139,7164,4262],{"class":145},[139,7166,7167],{"class":141,"line":210},[139,7168,3843],{"class":145},[139,7170,7171,7173,7175,7177,7180,7182,7184],{"class":141,"line":254},[139,7172,1082],{"class":149},[139,7174,6242],{"class":145},[139,7176,416],{"class":153},[139,7178,7179],{"class":145},"][",[139,7181,421],{"class":153},[139,7183,3373],{"class":145},[139,7185,7186],{"class":149},"=\n",[139,7188,7189],{"class":141,"line":262},[139,7190,4315],{"class":145},[139,7192,7193,7196,7198,7200,7202,7204,7206],{"class":141,"line":313},[139,7194,7195],{"class":145},"        {",[139,7197,410],{"class":153},[139,7199,2816],{"class":145},[139,7201,416],{"class":153},[139,7203,2816],{"class":145},[139,7205,421],{"class":153},[139,7207,7208],{"class":145},"},\n",[139,7210,7211,7213,7215,7217,7219,7221,7223],{"class":141,"line":462},[139,7212,7195],{"class":145},[139,7214,1476],{"class":153},[139,7216,2816],{"class":145},[139,7218,1481],{"class":153},[139,7220,2816],{"class":145},[139,7222,2782],{"class":153},[139,7224,3862],{"class":145},[139,7226,7227],{"class":141,"line":474},[139,7228,7229],{"class":145},"    };\n",[139,7231,7232,7234,7236,7239,7241,7243,7245,7247,7249,7251,7253],{"class":141,"line":484},[139,7233,3848],{"class":145},[139,7235,3474],{"class":149},[139,7237,7238],{"class":160},"\"二维数组的行数\"",[139,7240,3670],{"class":149},[139,7242,6484],{"class":145},[139,7244,6487],{"class":149},[139,7246,6131],{"class":145},[139,7248,2634],{"class":153},[139,7250,6494],{"class":145},[139,7252,3474],{"class":149},[139,7254,3496],{"class":145},[139,7256,7257,7259,7261,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286],{"class":141,"line":989},[139,7258,3848],{"class":145},[139,7260,3474],{"class":149},[139,7262,7263],{"class":160},"\"二维数组的列数\"",[139,7265,3670],{"class":149},[139,7267,6131],{"class":145},[139,7269,2634],{"class":153},[139,7271,6494],{"class":145},[139,7273,6487],{"class":149},[139,7275,6131],{"class":145},[139,7277,2634],{"class":153},[139,7279,7179],{"class":145},[139,7281,2634],{"class":153},[139,7283,6494],{"class":145},[139,7285,3474],{"class":149},[139,7287,3496],{"class":145},[139,7289,7290],{"class":141,"line":994},[139,7291,3862],{"class":145},[19,7293,7294],{},"查看二维数组首地址",[130,7296,7298],{"className":2447,"code":7297,"language":2449,"meta":135,"style":135},"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",[50,7299,7300,7317,7343,7368],{"__ignoreMap":135},[139,7301,7302,7304,7306,7309,7311,7313,7315],{"class":141,"line":142},[139,7303,3667],{"class":145},[139,7305,3474],{"class":149},[139,7307,7308],{"class":160},"\"二维数组首地址：\"",[139,7310,3474],{"class":149},[139,7312,6160],{"class":145},[139,7314,3474],{"class":149},[139,7316,3496],{"class":145},[139,7318,7319,7321,7323,7326,7328,7330,7332,7335,7337,7339,7341],{"class":141,"line":210},[139,7320,3667],{"class":145},[139,7322,3474],{"class":149},[139,7324,7325],{"class":160},"\"二维数组第一行的首地址：\"",[139,7327,3474],{"class":149},[139,7329,157],{"class":145},[139,7331,2461],{"class":149},[139,7333,7334],{"class":145},")arr[",[139,7336,2634],{"class":153},[139,7338,3373],{"class":145},[139,7340,3474],{"class":149},[139,7342,3496],{"class":145},[139,7344,7345,7347,7349,7352,7354,7356,7358,7360,7362,7364,7366],{"class":141,"line":254},[139,7346,3667],{"class":145},[139,7348,3474],{"class":149},[139,7350,7351],{"class":160},"\"二维数组第二行的首地址：\"",[139,7353,3474],{"class":149},[139,7355,157],{"class":145},[139,7357,2461],{"class":149},[139,7359,7334],{"class":145},[139,7361,410],{"class":153},[139,7363,3373],{"class":145},[139,7365,3474],{"class":149},[139,7367,3496],{"class":145},[139,7369,7370,7372,7374,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397,7399,7401],{"class":141,"line":262},[139,7371,3667],{"class":145},[139,7373,3474],{"class":149},[139,7375,7376],{"class":160},"\"二维数组第一个元素的首地址:\"",[139,7378,3474],{"class":149},[139,7380,157],{"class":145},[139,7382,2461],{"class":149},[139,7384,2867],{"class":145},[139,7386,2791],{"class":149},[139,7388,6186],{"class":145},[139,7390,2634],{"class":153},[139,7392,7179],{"class":145},[139,7394,2634],{"class":153},[139,7396,3373],{"class":145},[139,7398,3474],{"class":149},[139,7400,3539],{"class":145},[139,7402,7403],{"class":2512},"\u002F\u002F对于数，要加取址符\n",[2348,7405,7406],{},"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":135,"searchDepth":210,"depth":210,"links":7408},[7409,7410,7411,7419,7420,7426,7431],{"id":2402,"depth":210,"text":2403},{"id":2409,"depth":210,"text":2410},{"id":2424,"depth":210,"text":2425,"children":7412},[7413,7414,7415,7416,7417,7418],{"id":2428,"depth":254,"text":2429},{"id":2473,"depth":254,"text":2474},{"id":2536,"depth":254,"text":2537},{"id":3455,"depth":254,"text":3456},{"id":3545,"depth":254,"text":3546},{"id":3641,"depth":254,"text":3642},{"id":3683,"depth":210,"text":3684},{"id":3751,"depth":210,"text":3752,"children":7421},[7422,7423,7424,7425],{"id":3755,"depth":254,"text":3756},{"id":3777,"depth":254,"text":3778},{"id":3786,"depth":254,"text":3787},{"id":3795,"depth":254,"text":3796},{"id":3804,"depth":210,"text":3805,"children":7427},[7428,7429,7430],{"id":3808,"depth":254,"text":3809},{"id":4490,"depth":254,"text":4491},{"id":5902,"depth":254,"text":5903},{"id":6042,"depth":210,"text":6043,"children":7432},[7433,7434],{"id":6046,"depth":254,"text":6047},{"id":7072,"depth":254,"text":7073},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2394,"description":135},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7441,"title":7442,"body":7443,"description":135,"extension":2385,"meta":8539,"navigation":842,"path":8540,"seo":8541,"stem":8542,"__hash__":8543},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7444,"toc":8531},[7445,7448,7452,7460,7466,7469,7533,7537,7540,7616,7620,7623,7626,7629,7842,7846,7851,7915,7920,7987,7992,8083,8086,8191,8195,8198,8204,8348,8352,8355,8369,8372,8417,8420,8528],[10,7446,7442],{"id":7447},"_2函数",[14,7449,7451],{"id":7450},"_21函数概述","2.1函数概述",[1760,7453,7454,7457],{},[1763,7455,7456],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1763,7458,7459],{},"语法：",[130,7461,7464],{"className":7462,"code":7463,"language":645,"meta":135},[643],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[50,7465,7463],{"__ignoreMap":135},[19,7467,7468],{},"小案例",[130,7470,7472],{"className":2447,"code":7471,"language":2449,"meta":135,"style":135},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[50,7473,7474,7479,7501,7505,7522,7529],{"__ignoreMap":135},[139,7475,7476],{"class":141,"line":142},[139,7477,7478],{"class":2512},"\u002F\u002Fnum1,num2形参\n",[139,7480,7481,7483,7485,7487,7489,7492,7494,7496,7499],{"class":141,"line":210},[139,7482,2461],{"class":149},[139,7484,1134],{"class":781},[139,7486,157],{"class":145},[139,7488,2461],{"class":149},[139,7490,7491],{"class":2111}," num1",[139,7493,2816],{"class":145},[139,7495,2461],{"class":149},[139,7497,7498],{"class":2111}," num2",[139,7500,164],{"class":145},[139,7502,7503],{"class":141,"line":254},[139,7504,3843],{"class":145},[139,7506,7507,7509,7512,7514,7517,7519],{"class":141,"line":262},[139,7508,1082],{"class":149},[139,7510,7511],{"class":145}," sum",[139,7513,150],{"class":149},[139,7515,7516],{"class":145},"num1",[139,7518,1147],{"class":149},[139,7520,7521],{"class":145},"num2;\n",[139,7523,7524,7526],{"class":141,"line":313},[139,7525,978],{"class":149},[139,7527,7528],{"class":145}," sum;\n",[139,7530,7531],{"class":141,"line":462},[139,7532,3862],{"class":145},[14,7534,7536],{"id":7535},"_22函数调用","2.2函数调用",[19,7538,7539],{},"调用刚刚写的求和函数",[130,7541,7543],{"className":2447,"code":7542,"language":2449,"meta":135,"style":135},"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",[50,7544,7545,7553,7557,7562,7574,7586,7595,7600,7612],{"__ignoreMap":135},[139,7546,7547,7549,7551],{"class":141,"line":142},[139,7548,2461],{"class":149},[139,7550,4259],{"class":781},[139,7552,4262],{"class":145},[139,7554,7555],{"class":141,"line":210},[139,7556,3843],{"class":145},[139,7558,7559],{"class":141,"line":254},[139,7560,7561],{"class":2512},"    \u002F\u002Fa,b实参\n",[139,7563,7564,7566,7568,7570,7572],{"class":141,"line":262},[139,7565,1082],{"class":149},[139,7567,3696],{"class":145},[139,7569,150],{"class":149},[139,7571,2634],{"class":153},[139,7573,3591],{"class":145},[139,7575,7576,7578,7580,7582,7584],{"class":141,"line":313},[139,7577,1082],{"class":149},[139,7579,5116],{"class":145},[139,7581,150],{"class":149},[139,7583,2634],{"class":153},[139,7585,3591],{"class":145},[139,7587,7588,7590,7592],{"class":141,"line":462},[139,7589,4297],{"class":145},[139,7591,3727],{"class":149},[139,7593,7594],{"class":145},"a,b;\n",[139,7596,7597],{"class":141,"line":474},[139,7598,7599],{"class":2512},"    \u002F\u002F调用函数时，实参值传给了形参\n",[139,7601,7602,7604,7606,7609],{"class":141,"line":484},[139,7603,3848],{"class":145},[139,7605,3474],{"class":149},[139,7607,7608],{"class":781},"add",[139,7610,7611],{"class":145},"(a,b);\n",[139,7613,7614],{"class":141,"line":989},[139,7615,3862],{"class":145},[14,7617,7619],{"id":7618},"_23值传递","2.3值传递",[19,7621,7622],{},"值传递就是函数调用时实参将数值传给形参",[19,7624,7625],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7627,7628],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[130,7630,7632],{"className":2447,"code":7631,"language":2449,"meta":135,"style":135},"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",[50,7633,7634,7656,7660,7673,7690,7708,7719,7728,7737,7750,7766,7782,7791,7795,7803,7807,7819,7831,7838],{"__ignoreMap":135},[139,7635,7636,7639,7642,7644,7646,7648,7650,7652,7654],{"class":141,"line":142},[139,7637,7638],{"class":149},"void",[139,7640,7641],{"class":781}," swap",[139,7643,157],{"class":145},[139,7645,2461],{"class":149},[139,7647,7491],{"class":2111},[139,7649,2816],{"class":145},[139,7651,2461],{"class":149},[139,7653,7498],{"class":2111},[139,7655,164],{"class":145},[139,7657,7658],{"class":141,"line":210},[139,7659,3843],{"class":145},[139,7661,7662,7664,7666,7669,7671],{"class":141,"line":254},[139,7663,3848],{"class":145},[139,7665,3474],{"class":149},[139,7667,7668],{"class":160},"\"交换前：\"",[139,7670,3474],{"class":149},[139,7672,3496],{"class":145},[139,7674,7675,7677,7679,7682,7684,7686,7688],{"class":141,"line":262},[139,7676,3848],{"class":145},[139,7678,3474],{"class":149},[139,7680,7681],{"class":160},"\"num1=\"",[139,7683,3474],{"class":149},[139,7685,7516],{"class":145},[139,7687,3474],{"class":149},[139,7689,3496],{"class":145},[139,7691,7692,7694,7696,7699,7701,7704,7706],{"class":141,"line":313},[139,7693,3848],{"class":145},[139,7695,3474],{"class":149},[139,7697,7698],{"class":160},"\"num2=\"",[139,7700,3474],{"class":149},[139,7702,7703],{"class":145},"num2",[139,7705,3474],{"class":149},[139,7707,3496],{"class":145},[139,7709,7710,7712,7714,7716],{"class":141,"line":462},[139,7711,1082],{"class":149},[139,7713,6533],{"class":145},[139,7715,150],{"class":149},[139,7717,7718],{"class":145},"num1;\n",[139,7720,7721,7724,7726],{"class":141,"line":474},[139,7722,7723],{"class":145},"    num1",[139,7725,150],{"class":149},[139,7727,7521],{"class":145},[139,7729,7730,7733,7735],{"class":141,"line":484},[139,7731,7732],{"class":145},"    num2",[139,7734,150],{"class":149},[139,7736,6558],{"class":145},[139,7738,7739,7741,7743,7746,7748],{"class":141,"line":989},[139,7740,3848],{"class":145},[139,7742,3474],{"class":149},[139,7744,7745],{"class":160},"\"交换后：\"",[139,7747,3474],{"class":149},[139,7749,3496],{"class":145},[139,7751,7752,7754,7756,7758,7760,7762,7764],{"class":141,"line":994},[139,7753,3848],{"class":145},[139,7755,3474],{"class":149},[139,7757,7681],{"class":160},[139,7759,3474],{"class":149},[139,7761,7516],{"class":145},[139,7763,3474],{"class":149},[139,7765,3496],{"class":145},[139,7767,7768,7770,7772,7774,7776,7778,7780],{"class":141,"line":999},[139,7769,3848],{"class":145},[139,7771,3474],{"class":149},[139,7773,7698],{"class":160},[139,7775,3474],{"class":149},[139,7777,7703],{"class":145},[139,7779,3474],{"class":149},[139,7781,3496],{"class":145},[139,7783,7784,7786,7788],{"class":141,"line":1006},[139,7785,978],{"class":149},[139,7787,2509],{"class":145},[139,7789,7790],{"class":2512},"\u002F\u002F或者不写\n",[139,7792,7793],{"class":141,"line":1027},[139,7794,3862],{"class":145},[139,7796,7797,7799,7801],{"class":141,"line":1040},[139,7798,2461],{"class":149},[139,7800,4259],{"class":781},[139,7802,4262],{"class":145},[139,7804,7805],{"class":141,"line":2160},[139,7806,3843],{"class":145},[139,7808,7809,7811,7813,7815,7817],{"class":141,"line":2188},[139,7810,1082],{"class":149},[139,7812,3696],{"class":145},[139,7814,150],{"class":149},[139,7816,536],{"class":153},[139,7818,3591],{"class":145},[139,7820,7821,7823,7825,7827,7829],{"class":141,"line":3944},[139,7822,1082],{"class":149},[139,7824,5116],{"class":145},[139,7826,150],{"class":149},[139,7828,3135],{"class":153},[139,7830,3591],{"class":145},[139,7832,7833,7836],{"class":141,"line":3963},[139,7834,7835],{"class":781},"    swap",[139,7837,7611],{"class":145},[139,7839,7840],{"class":141,"line":3968},[139,7841,3862],{"class":145},[14,7843,7845],{"id":7844},"_24函数的常见形式","2.4函数的常见形式",[1760,7847,7848],{},[1763,7849,7850],{},"无参无返",[130,7852,7854],{"className":2447,"code":7853,"language":2449,"meta":135,"style":135},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[50,7855,7856,7865,7869,7882,7886,7894,7898,7903,7911],{"__ignoreMap":135},[139,7857,7858,7860,7863],{"class":141,"line":142},[139,7859,7638],{"class":149},[139,7861,7862],{"class":781}," test01",[139,7864,4262],{"class":145},[139,7866,7867],{"class":141,"line":210},[139,7868,3843],{"class":145},[139,7870,7871,7873,7875,7878,7880],{"class":141,"line":254},[139,7872,3848],{"class":145},[139,7874,3474],{"class":149},[139,7876,7877],{"class":160},"\"你好\"",[139,7879,3474],{"class":149},[139,7881,3496],{"class":145},[139,7883,7884],{"class":141,"line":262},[139,7885,3862],{"class":145},[139,7887,7888,7890,7892],{"class":141,"line":313},[139,7889,2461],{"class":149},[139,7891,4259],{"class":781},[139,7893,4262],{"class":145},[139,7895,7896],{"class":141,"line":462},[139,7897,3843],{"class":145},[139,7899,7900],{"class":141,"line":474},[139,7901,7902],{"class":2512},"    \u002F\u002F函数调用\n",[139,7904,7905,7908],{"class":141,"line":484},[139,7906,7907],{"class":781},"    test01",[139,7909,7910],{"class":145},"();\n",[139,7912,7913],{"class":141,"line":989},[139,7914,3862],{"class":145},[1760,7916,7917],{"start":210},[1763,7918,7919],{},"有参无返",[130,7921,7923],{"className":2447,"code":7922,"language":2449,"meta":135,"style":135},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[50,7924,7925,7940,7944,7956,7960,7968,7972,7983],{"__ignoreMap":135},[139,7926,7927,7929,7932,7934,7936,7938],{"class":141,"line":142},[139,7928,7638],{"class":149},[139,7930,7931],{"class":781}," test02",[139,7933,157],{"class":145},[139,7935,2461],{"class":149},[139,7937,3696],{"class":2111},[139,7939,164],{"class":145},[139,7941,7942],{"class":141,"line":210},[139,7943,3843],{"class":145},[139,7945,7946,7948,7950,7952,7954],{"class":141,"line":254},[139,7947,3848],{"class":145},[139,7949,3474],{"class":149},[139,7951,7877],{"class":160},[139,7953,3474],{"class":149},[139,7955,3496],{"class":145},[139,7957,7958],{"class":141,"line":262},[139,7959,3862],{"class":145},[139,7961,7962,7964,7966],{"class":141,"line":313},[139,7963,2461],{"class":149},[139,7965,4259],{"class":781},[139,7967,4262],{"class":145},[139,7969,7970],{"class":141,"line":462},[139,7971,3843],{"class":145},[139,7973,7974,7977,7979,7981],{"class":141,"line":474},[139,7975,7976],{"class":781},"    test02",[139,7978,157],{"class":145},[139,7980,1017],{"class":153},[139,7982,5002],{"class":145},[139,7984,7985],{"class":141,"line":484},[139,7986,3862],{"class":145},[1760,7988,7989],{"start":254},[1763,7990,7991],{},"无参有返",[130,7993,7995],{"className":2447,"code":7994,"language":2449,"meta":135,"style":135},"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",[50,7996,7997,8006,8010,8022,8031,8035,8043,8047,8060,8079],{"__ignoreMap":135},[139,7998,7999,8001,8004],{"class":141,"line":142},[139,8000,2461],{"class":149},[139,8002,8003],{"class":781}," test03",[139,8005,4262],{"class":145},[139,8007,8008],{"class":141,"line":210},[139,8009,3843],{"class":145},[139,8011,8012,8014,8016,8018,8020],{"class":141,"line":254},[139,8013,3848],{"class":145},[139,8015,3474],{"class":149},[139,8017,7877],{"class":160},[139,8019,3474],{"class":149},[139,8021,3496],{"class":145},[139,8023,8024,8026,8029],{"class":141,"line":262},[139,8025,978],{"class":149},[139,8027,8028],{"class":153}," 100",[139,8030,3591],{"class":145},[139,8032,8033],{"class":141,"line":313},[139,8034,3862],{"class":145},[139,8036,8037,8039,8041],{"class":141,"line":462},[139,8038,2461],{"class":149},[139,8040,4259],{"class":781},[139,8042,4262],{"class":145},[139,8044,8045],{"class":141,"line":474},[139,8046,3843],{"class":145},[139,8048,8049,8051,8053,8055,8058],{"class":141,"line":484},[139,8050,1082],{"class":149},[139,8052,7491],{"class":145},[139,8054,150],{"class":149},[139,8056,8057],{"class":781},"test03",[139,8059,7910],{"class":145},[139,8061,8062,8064,8066,8068,8070,8072,8074,8076],{"class":141,"line":989},[139,8063,3848],{"class":145},[139,8065,3474],{"class":149},[139,8067,7681],{"class":160},[139,8069,3474],{"class":149},[139,8071,7516],{"class":145},[139,8073,3474],{"class":149},[139,8075,3539],{"class":145},[139,8077,8078],{"class":2512}," \u002F\u002F100\n",[139,8080,8081],{"class":141,"line":994},[139,8082,3862],{"class":145},[19,8084,8085],{},"4.有参有返",[130,8087,8089],{"className":2447,"code":8088,"language":2449,"meta":135,"style":135},"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",[50,8090,8091,8106,8110,8123,8129,8133,8142,8146,8158,8172,8187],{"__ignoreMap":135},[139,8092,8093,8095,8098,8100,8102,8104],{"class":141,"line":142},[139,8094,2461],{"class":149},[139,8096,8097],{"class":781}," test04",[139,8099,157],{"class":145},[139,8101,2461],{"class":149},[139,8103,3696],{"class":2111},[139,8105,164],{"class":145},[139,8107,8108],{"class":141,"line":210},[139,8109,3843],{"class":145},[139,8111,8112,8114,8116,8119,8121],{"class":141,"line":254},[139,8113,3848],{"class":145},[139,8115,3474],{"class":149},[139,8117,8118],{"class":160},"\"hello\"",[139,8120,3474],{"class":149},[139,8122,3496],{"class":145},[139,8124,8125,8127],{"class":141,"line":262},[139,8126,978],{"class":149},[139,8128,3730],{"class":145},[139,8130,8131],{"class":141,"line":313},[139,8132,3862],{"class":145},[139,8134,8135,8137,8140],{"class":141,"line":462},[139,8136,2461],{"class":149},[139,8138,8139],{"class":781}," mian",[139,8141,4262],{"class":145},[139,8143,8144],{"class":141,"line":474},[139,8145,3843],{"class":145},[139,8147,8148,8150,8152,8154,8156],{"class":141,"line":484},[139,8149,1082],{"class":149},[139,8151,5116],{"class":145},[139,8153,150],{"class":149},[139,8155,410],{"class":153},[139,8157,3591],{"class":145},[139,8159,8160,8162,8164,8166,8169],{"class":141,"line":989},[139,8161,1082],{"class":149},[139,8163,5132],{"class":145},[139,8165,150],{"class":149},[139,8167,8168],{"class":781},"test04",[139,8170,8171],{"class":145},"(b);\n",[139,8173,8174,8176,8178,8180,8182,8184],{"class":141,"line":994},[139,8175,3848],{"class":145},[139,8177,3474],{"class":149},[139,8179,2729],{"class":145},[139,8181,3474],{"class":149},[139,8183,3539],{"class":145},[139,8185,8186],{"class":2512}," \u002F\u002F1\n",[139,8188,8189],{"class":141,"line":999},[139,8190,3862],{"class":145},[14,8192,8194],{"id":8193},"_25函数的声明","2.5函数的声明",[19,8196,8197],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8199,8200,8201],{},"函数的",[1674,8202,8203],{},"声明可以多次，但是函数的定义只能有一次",[130,8205,8207],{"className":2447,"code":8206,"language":2449,"meta":135,"style":135},"\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",[50,8208,8209,8214,8219,8244,8253,8257,8269,8281,8297,8301,8321,8325,8344],{"__ignoreMap":135},[139,8210,8211],{"class":141,"line":142},[139,8212,8213],{"class":2512},"\u002F\u002F函数声明\n",[139,8215,8216],{"class":141,"line":210},[139,8217,8218],{"class":2512},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[139,8220,8221,8223,8226,8228,8230,8232,8234,8236,8238,8241],{"class":141,"line":254},[139,8222,2461],{"class":149},[139,8224,8225],{"class":781}," max",[139,8227,157],{"class":145},[139,8229,2461],{"class":149},[139,8231,3696],{"class":2111},[139,8233,2816],{"class":145},[139,8235,2461],{"class":149},[139,8237,5116],{"class":2111},[139,8239,8240],{"class":145},");",[139,8242,8243],{"class":2512},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[139,8245,8246,8248,8250],{"class":141,"line":262},[139,8247,2461],{"class":149},[139,8249,4259],{"class":781},[139,8251,8252],{"class":145},"() \n",[139,8254,8255],{"class":141,"line":313},[139,8256,3843],{"class":145},[139,8258,8259,8261,8263,8265,8267],{"class":141,"line":462},[139,8260,1082],{"class":149},[139,8262,3696],{"class":145},[139,8264,150],{"class":149},[139,8266,536],{"class":153},[139,8268,3591],{"class":145},[139,8270,8271,8273,8275,8277,8279],{"class":141,"line":474},[139,8272,1082],{"class":149},[139,8274,5116],{"class":145},[139,8276,150],{"class":149},[139,8278,3135],{"class":153},[139,8280,3591],{"class":145},[139,8282,8283,8285,8287,8290,8293,8295],{"class":141,"line":484},[139,8284,3848],{"class":145},[139,8286,3474],{"class":149},[139,8288,8289],{"class":781},"max",[139,8291,8292],{"class":145},"(a,b)",[139,8294,3474],{"class":149},[139,8296,3496],{"class":145},[139,8298,8299],{"class":141,"line":989},[139,8300,3862],{"class":145},[139,8302,8303,8305,8307,8309,8311,8313,8315,8317,8319],{"class":141,"line":994},[139,8304,2461],{"class":149},[139,8306,8225],{"class":781},[139,8308,157],{"class":145},[139,8310,2461],{"class":149},[139,8312,3696],{"class":2111},[139,8314,2816],{"class":145},[139,8316,2461],{"class":149},[139,8318,5116],{"class":2111},[139,8320,164],{"class":145},[139,8322,8323],{"class":141,"line":999},[139,8324,3843],{"class":145},[139,8326,8327,8329,8331,8333,8335,8337,8339,8341],{"class":141,"line":1006},[139,8328,978],{"class":149},[139,8330,3696],{"class":145},[139,8332,958],{"class":149},[139,8334,2704],{"class":145},[139,8336,3417],{"class":149},[139,8338,2680],{"class":145},[139,8340,3294],{"class":149},[139,8342,8343],{"class":145},"b;\n",[139,8345,8346],{"class":141,"line":1027},[139,8347,3862],{"class":145},[14,8349,8351],{"id":8350},"_26函数的分文件编写","2.6函数的分文件编写",[19,8353,8354],{},"4个步骤：",[3437,8356,8357,8360,8363,8366],{},[1763,8358,8359],{},"1.创建后缀名为.h的头文件",[1763,8361,8362],{},"2.创建后缀名为.cpp的源文件",[1763,8364,8365],{},"3.在头文件中写函数的定义",[1763,8367,8368],{},"4.在源文件中写函数的定义\n示例：",[19,8370,8371],{},"头文件：swap.h",[130,8373,8375],{"className":2447,"code":8374,"language":2449,"meta":135,"style":135},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[50,8376,8377,8383,8393,8397],{"__ignoreMap":135},[139,8378,8379,8381],{"class":141,"line":142},[139,8380,4236],{"class":149},[139,8382,4239],{"class":160},[139,8384,8385,8387,8389,8391],{"class":141,"line":210},[139,8386,4244],{"class":149},[139,8388,4247],{"class":149},[139,8390,4250],{"class":781},[139,8392,3591],{"class":145},[139,8394,8395],{"class":141,"line":254},[139,8396,8213],{"class":2512},[139,8398,8399,8401,8403,8405,8407,8409,8411,8413,8415],{"class":141,"line":262},[139,8400,7638],{"class":149},[139,8402,7641],{"class":781},[139,8404,157],{"class":145},[139,8406,2461],{"class":149},[139,8408,3696],{"class":2111},[139,8410,2816],{"class":145},[139,8412,2461],{"class":149},[139,8414,5116],{"class":2111},[139,8416,5002],{"class":145},[19,8418,8419],{},"源文件：swap.cpp",[130,8421,8423],{"className":2447,"code":8422,"language":2449,"meta":135,"style":135},"#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",[50,8424,8425,8432,8437,8457,8461,8472,8481,8490,8507,8524],{"__ignoreMap":135},[139,8426,8427,8429],{"class":141,"line":142},[139,8428,4236],{"class":149},[139,8430,8431],{"class":160}," \"swap.h\"\n",[139,8433,8434],{"class":141,"line":210},[139,8435,8436],{"class":2512},"\u002F\u002F函数的定义\n",[139,8438,8439,8441,8443,8445,8447,8449,8451,8453,8455],{"class":141,"line":254},[139,8440,7638],{"class":149},[139,8442,7641],{"class":781},[139,8444,157],{"class":145},[139,8446,2461],{"class":149},[139,8448,3696],{"class":2111},[139,8450,2816],{"class":145},[139,8452,2461],{"class":149},[139,8454,5116],{"class":2111},[139,8456,164],{"class":145},[139,8458,8459],{"class":141,"line":262},[139,8460,3843],{"class":145},[139,8462,8463,8465,8467,8469],{"class":141,"line":313},[139,8464,1082],{"class":149},[139,8466,6533],{"class":145},[139,8468,150],{"class":149},[139,8470,8471],{"class":145},"a;\n",[139,8473,8474,8477,8479],{"class":141,"line":462},[139,8475,8476],{"class":145},"    a",[139,8478,150],{"class":149},[139,8480,8343],{"class":145},[139,8482,8483,8486,8488],{"class":141,"line":474},[139,8484,8485],{"class":145},"    b",[139,8487,150],{"class":149},[139,8489,6558],{"class":145},[139,8491,8492,8494,8496,8499,8501,8503,8505],{"class":141,"line":484},[139,8493,3848],{"class":145},[139,8495,3474],{"class":149},[139,8497,8498],{"class":160},"\"a=\"",[139,8500,3474],{"class":149},[139,8502,2680],{"class":145},[139,8504,3474],{"class":149},[139,8506,3496],{"class":145},[139,8508,8509,8511,8513,8516,8518,8520,8522],{"class":141,"line":989},[139,8510,3848],{"class":145},[139,8512,3474],{"class":149},[139,8514,8515],{"class":160},"\"b=\"",[139,8517,3474],{"class":149},[139,8519,2704],{"class":145},[139,8521,3474],{"class":149},[139,8523,3496],{"class":145},[139,8525,8526],{"class":141,"line":994},[139,8527,3862],{"class":145},[2348,8529,8530],{},"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":135,"searchDepth":210,"depth":210,"links":8532},[8533,8534,8535,8536,8537,8538],{"id":7450,"depth":210,"text":7451},{"id":7535,"depth":210,"text":7536},{"id":7618,"depth":210,"text":7619},{"id":7844,"depth":210,"text":7845},{"id":8193,"depth":210,"text":8194},{"id":8350,"depth":210,"text":8351},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7442,"description":135},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8545,"title":8546,"body":8547,"description":8554,"extension":2385,"meta":9959,"navigation":842,"path":9960,"seo":9961,"stem":9962,"__hash__":9963},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8548,"toc":9949},[8549,8552,8555,8559,8721,8725,8728,8731,8734,8737,8877,8881,8884,8887,8890,8955,8959,8964,9031,9034,9038,9041,9052,9057,9077,9080,9085,9104,9107,9111,9130,9133,9137,9372,9376,9379,9382,9385,9547,9550,9554,9557,9563,9946],[10,8550,8546],{"id":8551},"_3指针",[19,8553,8554],{},"通过指针保存一个地址，指针就是个地址",[14,8556,8558],{"id":8557},"_31定义指针","3.1定义指针",[130,8560,8562],{"className":2447,"code":8561,"language":2449,"meta":135,"style":135},"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",[50,8563,8564,8572,8576,8581,8593,8598,8606,8616,8634,8654,8658,8663,8668,8673,8687,8703,8717],{"__ignoreMap":135},[139,8565,8566,8568,8570],{"class":141,"line":142},[139,8567,2461],{"class":149},[139,8569,4259],{"class":781},[139,8571,4262],{"class":145},[139,8573,8574],{"class":141,"line":210},[139,8575,3843],{"class":145},[139,8577,8578],{"class":141,"line":254},[139,8579,8580],{"class":2512},"    \u002F\u002F1.定义指针\n",[139,8582,8583,8585,8587,8589,8591],{"class":141,"line":262},[139,8584,1082],{"class":149},[139,8586,3696],{"class":145},[139,8588,150],{"class":149},[139,8590,536],{"class":153},[139,8592,3591],{"class":145},[139,8594,8595],{"class":141,"line":313},[139,8596,8597],{"class":2512},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[139,8599,8600,8603],{"class":141,"line":462},[139,8601,8602],{"class":149},"    int*",[139,8604,8605],{"class":145},"p;\n",[139,8607,8608,8611,8614],{"class":141,"line":474},[139,8609,8610],{"class":145},"    p",[139,8612,8613],{"class":149},"=&",[139,8615,8471],{"class":145},[139,8617,8618,8620,8622,8625,8628,8630,8632],{"class":141,"line":484},[139,8619,3848],{"class":145},[139,8621,3474],{"class":149},[139,8623,8624],{"class":160},"\"a的地址为：\"",[139,8626,8627],{"class":149},"\u003C\u003C&",[139,8629,2680],{"class":145},[139,8631,3474],{"class":149},[139,8633,3496],{"class":145},[139,8635,8636,8638,8640,8643,8645,8647,8649,8651],{"class":141,"line":989},[139,8637,3848],{"class":145},[139,8639,3474],{"class":149},[139,8641,8642],{"class":160},"\"指针p为：\"",[139,8644,3474],{"class":149},[139,8646,19],{"class":145},[139,8648,3474],{"class":149},[139,8650,3539],{"class":145},[139,8652,8653],{"class":2512},"\u002F\u002F指针p表示的就是a的地址\n",[139,8655,8656],{"class":141,"line":994},[139,8657,843],{"emptyLinePlaceholder":842},[139,8659,8660],{"class":141,"line":999},[139,8661,8662],{"class":2512},"    \u002F\u002F2.使用指针\n",[139,8664,8665],{"class":141,"line":1006},[139,8666,8667],{"class":2512},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[139,8669,8670],{"class":141,"line":1027},[139,8671,8672],{"class":2512},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[139,8674,8675,8678,8680,8682,8685],{"class":141,"line":1040},[139,8676,8677],{"class":149},"    *",[139,8679,19],{"class":145},[139,8681,150],{"class":149},[139,8683,8684],{"class":153},"1000",[139,8686,3591],{"class":145},[139,8688,8689,8691,8694,8696,8698,8700],{"class":141,"line":2160},[139,8690,3848],{"class":145},[139,8692,8693],{"class":149},"\u003C\u003C*",[139,8695,19],{"class":145},[139,8697,3474],{"class":149},[139,8699,3539],{"class":145},[139,8701,8702],{"class":2512},"\u002F\u002F1000\n",[139,8704,8705,8707,8709,8711,8713,8715],{"class":141,"line":2188},[139,8706,3848],{"class":145},[139,8708,3474],{"class":149},[139,8710,2680],{"class":145},[139,8712,3474],{"class":149},[139,8714,3539],{"class":145},[139,8716,8702],{"class":2512},[139,8718,8719],{"class":141,"line":3944},[139,8720,3862],{"class":145},[14,8722,8724],{"id":8723},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8726,8727],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8729,8730],{},"在32位操作系统下：占用4个字节空间",[19,8732,8733],{},"在64位操作系统下：占用8个字节空间",[19,8735,8736],{},"上方是不管啥数据类型的",[130,8738,8740],{"className":2447,"code":8739,"language":2449,"meta":135,"style":135},"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",[50,8741,8742,8750,8754,8759,8771,8776,8781,8786,8799,8821,8847,8873],{"__ignoreMap":135},[139,8743,8744,8746,8748],{"class":141,"line":142},[139,8745,2461],{"class":149},[139,8747,4259],{"class":781},[139,8749,4262],{"class":145},[139,8751,8752],{"class":141,"line":210},[139,8753,3843],{"class":145},[139,8755,8756],{"class":141,"line":254},[139,8757,8758],{"class":2512},"    \u002F\u002F指针所占内存空间\n",[139,8760,8761,8763,8765,8767,8769],{"class":141,"line":262},[139,8762,1082],{"class":149},[139,8764,3696],{"class":145},[139,8766,150],{"class":149},[139,8768,536],{"class":153},[139,8770,3591],{"class":145},[139,8772,8773],{"class":141,"line":313},[139,8774,8775],{"class":2512},"    \u002F\u002Fint *p;\n",[139,8777,8778],{"class":141,"line":462},[139,8779,8780],{"class":2512},"    \u002F\u002Fp=&a;\n",[139,8782,8783],{"class":141,"line":474},[139,8784,8785],{"class":2512},"    \u002F\u002F上述可以写为以下：\n",[139,8787,8788,8790,8793,8795,8797],{"class":141,"line":484},[139,8789,1082],{"class":149},[139,8791,8792],{"class":149}," *",[139,8794,19],{"class":145},[139,8796,8613],{"class":149},[139,8798,8471],{"class":145},[139,8800,8801,8804,8806,8809,8811,8814,8816,8818],{"class":141,"line":989},[139,8802,8803],{"class":145},"    cout ",[139,8805,3474],{"class":149},[139,8807,8808],{"class":160},"\"sizeof(int *)\"",[139,8810,3670],{"class":149},[139,8812,8813],{"class":145},"(p)",[139,8815,3474],{"class":149},[139,8817,3539],{"class":145},[139,8819,8820],{"class":2512},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[139,8822,8823,8825,8827,8829,8831,8833,8835,8837,8839,8841,8844],{"class":141,"line":994},[139,8824,8803],{"class":145},[139,8826,3474],{"class":149},[139,8828,8808],{"class":160},[139,8830,3670],{"class":149},[139,8832,157],{"class":145},[139,8834,2461],{"class":149},[139,8836,8792],{"class":149},[139,8838,2867],{"class":145},[139,8840,3474],{"class":149},[139,8842,8843],{"class":145},"endl",[139,8845,8846],{"class":2512},"  \u002F\u002F4字节(32位的话)\n",[139,8848,8849,8851,8853,8856,8858,8860,8862,8864,8866,8868,8870],{"class":141,"line":999},[139,8850,8803],{"class":145},[139,8852,3474],{"class":149},[139,8854,8855],{"class":160},"\"sizeof(char *)\"",[139,8857,3670],{"class":149},[139,8859,157],{"class":145},[139,8861,2547],{"class":149},[139,8863,8792],{"class":149},[139,8865,2867],{"class":145},[139,8867,3474],{"class":149},[139,8869,3539],{"class":145},[139,8871,8872],{"class":2512}," \u002F\u002F4字节(32位的话)\n",[139,8874,8875],{"class":141,"line":1006},[139,8876,3862],{"class":145},[14,8878,8880],{"id":8879},"_33空指针","3.3空指针",[19,8882,8883],{},"空指针：指针变量指向内存中编号为0的空间",[19,8885,8886],{},"用途：初始化指针变量",[19,8888,8889],{},"注意：空指针指向的内存是不可以访问的",[130,8891,8893],{"className":2447,"code":8892,"language":2449,"meta":135,"style":135},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[50,8894,8895,8903,8907,8912,8926,8931,8946,8951],{"__ignoreMap":135},[139,8896,8897,8899,8901],{"class":141,"line":142},[139,8898,2461],{"class":149},[139,8900,4259],{"class":781},[139,8902,4262],{"class":145},[139,8904,8905],{"class":141,"line":210},[139,8906,3843],{"class":145},[139,8908,8909],{"class":141,"line":254},[139,8910,8911],{"class":2512},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[139,8913,8914,8916,8918,8920,8922,8924],{"class":141,"line":262},[139,8915,1082],{"class":149},[139,8917,8792],{"class":149},[139,8919,19],{"class":145},[139,8921,150],{"class":149},[139,8923,4676],{"class":153},[139,8925,3591],{"class":145},[139,8927,8928],{"class":141,"line":313},[139,8929,8930],{"class":2512},"    \u002F\u002F2.空指针不能进行访问\n",[139,8932,8933,8935,8937,8939,8941,8943],{"class":141,"line":462},[139,8934,8677],{"class":149},[139,8936,19],{"class":145},[139,8938,150],{"class":149},[139,8940,1017],{"class":153},[139,8942,2509],{"class":145},[139,8944,8945],{"class":2512},"\u002F\u002F直接报错，压根不能访问\n",[139,8947,8948],{"class":141,"line":474},[139,8949,8950],{"class":2512},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[139,8952,8953],{"class":141,"line":484},[139,8954,3862],{"class":145},[14,8956,8958],{"id":8957},"_34野指针","3.4野指针",[19,8960,8961],{},[1674,8962,8963],{},"指针变量指向非法的内存空间",[130,8965,8967],{"className":2447,"code":8966,"language":2449,"meta":135,"style":135},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[50,8968,8969,8977,8981,9010,9015,9027],{"__ignoreMap":135},[139,8970,8971,8973,8975],{"class":141,"line":142},[139,8972,2461],{"class":149},[139,8974,4259],{"class":781},[139,8976,4262],{"class":145},[139,8978,8979],{"class":141,"line":210},[139,8980,3843],{"class":145},[139,8982,8983,8985,8987,8989,8991,8993,8995,8997,8999,9002,9005,9007],{"class":141,"line":254},[139,8984,1082],{"class":149},[139,8986,8792],{"class":149},[139,8988,19],{"class":145},[139,8990,150],{"class":149},[139,8992,157],{"class":145},[139,8994,2461],{"class":149},[139,8996,8792],{"class":149},[139,8998,2867],{"class":145},[139,9000,9001],{"class":149},"0x",[139,9003,9004],{"class":153},"1100",[139,9006,2509],{"class":145},[139,9008,9009],{"class":2512}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[139,9011,9012],{"class":141,"line":262},[139,9013,9014],{"class":2512},"    \u002F\u002F访问野指针报错\n",[139,9016,9017,9019,9021,9023,9025],{"class":141,"line":313},[139,9018,3848],{"class":145},[139,9020,8693],{"class":149},[139,9022,19],{"class":145},[139,9024,3474],{"class":149},[139,9026,3496],{"class":145},[139,9028,9029],{"class":141,"line":462},[139,9030,3862],{"class":145},[19,9032,9033],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9035,9037],{"id":9036},"_35const修饰指针","3.5const修饰指针",[19,9039,9040],{},"三种情况：",[3437,9042,9043,9046,9049],{},[1763,9044,9045],{},"const修饰指针 常量指针",[1763,9047,9048],{},"const修饰常量 指针常量",[1763,9050,9051],{},"const即修饰指针，又修饰常量",[1760,9053,9054],{},[1763,9055,9056],{},"常量指针",[130,9058,9060],{"className":2447,"code":9059,"language":2449,"meta":135,"style":135},"const int *p=&a;\n",[50,9061,9062],{"__ignoreMap":135},[139,9063,9064,9067,9069,9071,9073,9075],{"class":141,"line":142},[139,9065,9066],{"class":149},"const",[139,9068,154],{"class":149},[139,9070,8792],{"class":149},[139,9072,19],{"class":145},[139,9074,8613],{"class":149},[139,9076,8471],{"class":145},[19,9078,9079],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1760,9081,9082],{"start":210},[1763,9083,9084],{},"指针常量",[130,9086,9088],{"className":2447,"code":9087,"language":2449,"meta":135,"style":135},"int *const p=&a;\n",[50,9089,9090],{"__ignoreMap":135},[139,9091,9092,9094,9097,9100,9102],{"class":141,"line":142},[139,9093,2461],{"class":149},[139,9095,9096],{"class":149}," *const",[139,9098,9099],{"class":145}," p",[139,9101,8613],{"class":149},[139,9103,8471],{"class":145},[19,9105,9106],{},"指针的指向不可以改，指针指向的值可以改",[1760,9108,9109],{"start":254},[1763,9110,9051],{},[130,9112,9114],{"className":2447,"code":9113,"language":2449,"meta":135,"style":135},"const int *const p=&a;\n",[50,9115,9116],{"__ignoreMap":135},[139,9117,9118,9120,9122,9124,9126,9128],{"class":141,"line":142},[139,9119,9066],{"class":149},[139,9121,154],{"class":149},[139,9123,9096],{"class":149},[139,9125,9099],{"class":145},[139,9127,8613],{"class":149},[139,9129,8471],{"class":145},[19,9131,9132],{},"指针的指向和指针指向的值都不可以改变",[14,9134,9136],{"id":9135},"_36指针和数组","3.6指针和数组",[130,9138,9140],{"className":2447,"code":9139,"language":2449,"meta":135,"style":135},"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",[50,9141,9142,9150,9154,9159,9213,9234,9250,9266,9277,9294,9299,9313,9339,9343,9355,9364,9368],{"__ignoreMap":135},[139,9143,9144,9146,9148],{"class":141,"line":142},[139,9145,2461],{"class":149},[139,9147,4259],{"class":781},[139,9149,4262],{"class":145},[139,9151,9152],{"class":141,"line":210},[139,9153,3843],{"class":145},[139,9155,9156],{"class":141,"line":254},[139,9157,9158],{"class":2512},"    \u002F\u002F利用指针访问数组中的元素\n",[139,9160,9161,9163,9165,9167,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209,9211],{"class":141,"line":262},[139,9162,1082],{"class":149},[139,9164,6242],{"class":145},[139,9166,536],{"class":153},[139,9168,3373],{"class":145},[139,9170,150],{"class":149},[139,9172,625],{"class":145},[139,9174,410],{"class":153},[139,9176,2816],{"class":145},[139,9178,416],{"class":153},[139,9180,2816],{"class":145},[139,9182,421],{"class":153},[139,9184,2816],{"class":145},[139,9186,1476],{"class":153},[139,9188,2816],{"class":145},[139,9190,1481],{"class":153},[139,9192,2816],{"class":145},[139,9194,2782],{"class":153},[139,9196,2816],{"class":145},[139,9198,2807],{"class":153},[139,9200,2816],{"class":145},[139,9202,2833],{"class":153},[139,9204,2816],{"class":145},[139,9206,2858],{"class":153},[139,9208,2816],{"class":145},[139,9210,536],{"class":153},[139,9212,6275],{"class":145},[139,9214,9215,9217,9219,9222,9224,9226,9228,9230,9232],{"class":141,"line":313},[139,9216,3848],{"class":145},[139,9218,3474],{"class":149},[139,9220,9221],{"class":160},"\"数组的第一个元素为：\"",[139,9223,3474],{"class":149},[139,9225,6186],{"class":145},[139,9227,2634],{"class":153},[139,9229,3373],{"class":145},[139,9231,3474],{"class":149},[139,9233,3496],{"class":145},[139,9235,9236,9238,9240,9242,9244,9247],{"class":141,"line":462},[139,9237,1082],{"class":149},[139,9239,8792],{"class":149},[139,9241,19],{"class":145},[139,9243,150],{"class":149},[139,9245,9246],{"class":145},"arr;",[139,9248,9249],{"class":2512},"\u002F\u002F注意数才要加取地址符号&\n",[139,9251,9252,9254,9256,9258,9260,9262,9264],{"class":141,"line":474},[139,9253,3848],{"class":145},[139,9255,3474],{"class":149},[139,9257,9221],{"class":160},[139,9259,8693],{"class":149},[139,9261,19],{"class":145},[139,9263,3474],{"class":149},[139,9265,3496],{"class":145},[139,9267,9268,9270,9272,9274],{"class":141,"line":484},[139,9269,8610],{"class":145},[139,9271,4577],{"class":149},[139,9273,2509],{"class":145},[139,9275,9276],{"class":2512}," \u002F\u002F让指针向后偏移4个字节\n",[139,9278,9279,9281,9283,9286,9288,9290,9292],{"class":141,"line":989},[139,9280,3848],{"class":145},[139,9282,3474],{"class":149},[139,9284,9285],{"class":160},"\"数组的第二个元素为：\"",[139,9287,8693],{"class":149},[139,9289,19],{"class":145},[139,9291,3474],{"class":149},[139,9293,3496],{"class":145},[139,9295,9296],{"class":141,"line":994},[139,9297,9298],{"class":2512},"    \u002F\u002F利用指针遍历数组\n",[139,9300,9301,9303,9305,9308,9310],{"class":141,"line":999},[139,9302,1082],{"class":149},[139,9304,8792],{"class":149},[139,9306,9307],{"class":145},"p2",[139,9309,150],{"class":149},[139,9311,9312],{"class":145},"arr;\n",[139,9314,9315,9317,9319,9321,9323,9325,9327,9329,9331,9333,9335,9337],{"class":141,"line":1006},[139,9316,5482],{"class":149},[139,9318,549],{"class":145},[139,9320,2461],{"class":149},[139,9322,5314],{"class":145},[139,9324,150],{"class":149},[139,9326,2634],{"class":153},[139,9328,5321],{"class":145},[139,9330,796],{"class":149},[139,9332,536],{"class":153},[139,9334,5321],{"class":145},[139,9336,4577],{"class":149},[139,9338,164],{"class":145},[139,9340,9341],{"class":141,"line":1027},[139,9342,4315],{"class":145},[139,9344,9345,9347,9349,9351,9353],{"class":141,"line":1040},[139,9346,5732],{"class":145},[139,9348,8693],{"class":149},[139,9350,9307],{"class":145},[139,9352,3474],{"class":149},[139,9354,3496],{"class":145},[139,9356,9357,9360,9362],{"class":141,"line":2160},[139,9358,9359],{"class":145},"        p2",[139,9361,4577],{"class":149},[139,9363,3591],{"class":145},[139,9365,9366],{"class":141,"line":2188},[139,9367,4472],{"class":145},[139,9369,9370],{"class":141,"line":3944},[139,9371,3862],{"class":145},[14,9373,9375],{"id":9374},"_37指针和函数","3.7指针和函数",[19,9377,9378],{},"利用指针做函数参数，可以修改实参的值",[19,9380,9381],{},"值传递：只改变形参，不改变实参",[19,9383,9384],{},"地址传递：",[130,9386,9388],{"className":2447,"code":9387,"language":2449,"meta":135,"style":135},"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",[50,9389,9390,9415,9419,9431,9442,9452,9456,9464,9468,9480,9492,9497,9513,9528,9543],{"__ignoreMap":135},[139,9391,9392,9394,9396,9398,9400,9402,9405,9407,9409,9411,9413],{"class":141,"line":142},[139,9393,7638],{"class":149},[139,9395,7641],{"class":781},[139,9397,157],{"class":145},[139,9399,2461],{"class":149},[139,9401,8792],{"class":149},[139,9403,9404],{"class":2111},"p1",[139,9406,2816],{"class":145},[139,9408,2461],{"class":149},[139,9410,8792],{"class":149},[139,9412,9307],{"class":2111},[139,9414,164],{"class":145},[139,9416,9417],{"class":141,"line":210},[139,9418,3843],{"class":145},[139,9420,9421,9423,9425,9428],{"class":141,"line":254},[139,9422,1082],{"class":149},[139,9424,6533],{"class":145},[139,9426,9427],{"class":149},"=*",[139,9429,9430],{"class":145},"p1;\n",[139,9432,9433,9435,9437,9439],{"class":141,"line":262},[139,9434,8677],{"class":149},[139,9436,9404],{"class":145},[139,9438,9427],{"class":149},[139,9440,9441],{"class":145},"p2;\n",[139,9443,9444,9446,9448,9450],{"class":141,"line":313},[139,9445,8677],{"class":149},[139,9447,9307],{"class":145},[139,9449,150],{"class":149},[139,9451,6558],{"class":145},[139,9453,9454],{"class":141,"line":462},[139,9455,3862],{"class":145},[139,9457,9458,9460,9462],{"class":141,"line":474},[139,9459,2461],{"class":149},[139,9461,4259],{"class":781},[139,9463,4262],{"class":145},[139,9465,9466],{"class":141,"line":484},[139,9467,3843],{"class":145},[139,9469,9470,9472,9474,9476,9478],{"class":141,"line":989},[139,9471,1082],{"class":149},[139,9473,3696],{"class":145},[139,9475,150],{"class":149},[139,9477,536],{"class":153},[139,9479,3591],{"class":145},[139,9481,9482,9484,9486,9488,9490],{"class":141,"line":994},[139,9483,1082],{"class":149},[139,9485,5116],{"class":145},[139,9487,150],{"class":149},[139,9489,3135],{"class":153},[139,9491,3591],{"class":145},[139,9493,9494],{"class":141,"line":999},[139,9495,9496],{"class":2512},"    \u002F\u002F地址传递\n",[139,9498,9499,9501,9503,9505,9508,9510],{"class":141,"line":1006},[139,9500,7835],{"class":781},[139,9502,157],{"class":145},[139,9504,2791],{"class":149},[139,9506,9507],{"class":145},"a,",[139,9509,2791],{"class":149},[139,9511,9512],{"class":145},"b);\n",[139,9514,9515,9517,9519,9521,9523,9525],{"class":141,"line":1027},[139,9516,3848],{"class":145},[139,9518,3474],{"class":149},[139,9520,2680],{"class":145},[139,9522,3474],{"class":149},[139,9524,3539],{"class":145},[139,9526,9527],{"class":2512},"\u002F\u002F20\n",[139,9529,9530,9532,9534,9536,9538,9540],{"class":141,"line":1040},[139,9531,3848],{"class":145},[139,9533,3474],{"class":149},[139,9535,2704],{"class":145},[139,9537,3474],{"class":149},[139,9539,3539],{"class":145},[139,9541,9542],{"class":2512},"\u002F\u002F10\n",[139,9544,9545],{"class":141,"line":2160},[139,9546,3862],{"class":145},[19,9548,9549],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9551,9553],{"id":9552},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9555,9556],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9558,9559,9560,9562],{},"例如数组：int arr",[139,9561,536],{},"={4,3,6,9,1,2,10,8,7,5}",[130,9564,9566],{"className":2447,"code":9565,"language":2449,"meta":135,"style":135},"#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",[50,9567,9568,9574,9584,9608,9612,9643,9647,9681,9685,9703,9707,9718,9733,9748,9752,9756,9760,9764,9768,9776,9780,9785,9839,9851,9863,9868,9876,9880,9885,9910,9914,9929,9938,9942],{"__ignoreMap":135},[139,9569,9570,9572],{"class":141,"line":142},[139,9571,4236],{"class":149},[139,9573,4239],{"class":160},[139,9575,9576,9578,9580,9582],{"class":141,"line":210},[139,9577,4244],{"class":149},[139,9579,4247],{"class":149},[139,9581,4250],{"class":781},[139,9583,3591],{"class":145},[139,9585,9586,9588,9591,9593,9595,9597,9599,9601,9603,9606],{"class":141,"line":254},[139,9587,7638],{"class":149},[139,9589,9590],{"class":781}," bubbleSort",[139,9592,157],{"class":145},[139,9594,2461],{"class":149},[139,9596,8792],{"class":149},[139,9598,19],{"class":2111},[139,9600,2816],{"class":145},[139,9602,2461],{"class":149},[139,9604,9605],{"class":2111}," len",[139,9607,164],{"class":145},[139,9609,9610],{"class":141,"line":262},[139,9611,3843],{"class":145},[139,9613,9614,9616,9618,9620,9622,9624,9626,9628,9630,9633,9635,9637,9639,9641],{"class":141,"line":313},[139,9615,5482],{"class":149},[139,9617,157],{"class":145},[139,9619,2461],{"class":149},[139,9621,5314],{"class":145},[139,9623,150],{"class":149},[139,9625,2634],{"class":153},[139,9627,5321],{"class":145},[139,9629,796],{"class":149},[139,9631,9632],{"class":145},"len",[139,9634,855],{"class":149},[139,9636,410],{"class":153},[139,9638,5321],{"class":145},[139,9640,4577],{"class":149},[139,9642,164],{"class":145},[139,9644,9645],{"class":141,"line":462},[139,9646,4315],{"class":145},[139,9648,9649,9651,9653,9655,9657,9659,9661,9663,9665,9667,9669,9671,9673,9675,9677,9679],{"class":141,"line":474},[139,9650,5684],{"class":149},[139,9652,157],{"class":145},[139,9654,2461],{"class":149},[139,9656,5691],{"class":145},[139,9658,150],{"class":149},[139,9660,2634],{"class":153},[139,9662,5698],{"class":145},[139,9664,796],{"class":149},[139,9666,9632],{"class":145},[139,9668,855],{"class":149},[139,9670,2879],{"class":145},[139,9672,855],{"class":149},[139,9674,410],{"class":153},[139,9676,5698],{"class":145},[139,9678,4577],{"class":149},[139,9680,164],{"class":145},[139,9682,9683],{"class":141,"line":484},[139,9684,4793],{"class":145},[139,9686,9687,9689,9692,9694,9697,9699,9701],{"class":141,"line":989},[139,9688,6920],{"class":149},[139,9690,9691],{"class":145},"(p[j]",[139,9693,958],{"class":149},[139,9695,9696],{"class":145},"p[j",[139,9698,1147],{"class":149},[139,9700,410],{"class":153},[139,9702,6935],{"class":145},[139,9704,9705],{"class":141,"line":994},[139,9706,6940],{"class":145},[139,9708,9709,9711,9713,9715],{"class":141,"line":999},[139,9710,6945],{"class":149},[139,9712,6533],{"class":145},[139,9714,150],{"class":149},[139,9716,9717],{"class":145},"p[j];\n",[139,9719,9720,9723,9725,9727,9729,9731],{"class":141,"line":1006},[139,9721,9722],{"class":145},"                p[j]",[139,9724,150],{"class":149},[139,9726,9696],{"class":145},[139,9728,1147],{"class":149},[139,9730,410],{"class":153},[139,9732,6968],{"class":145},[139,9734,9735,9738,9740,9742,9744,9746],{"class":141,"line":1027},[139,9736,9737],{"class":145},"                p[j",[139,9739,1147],{"class":149},[139,9741,410],{"class":153},[139,9743,3373],{"class":145},[139,9745,150],{"class":149},[139,9747,6558],{"class":145},[139,9749,9750],{"class":141,"line":1040},[139,9751,6988],{"class":145},[139,9753,9754],{"class":141,"line":2160},[139,9755,4812],{"class":145},[139,9757,9758],{"class":141,"line":2188},[139,9759,4472],{"class":145},[139,9761,9762],{"class":141,"line":3944},[139,9763,3862],{"class":145},[139,9765,9766],{"class":141,"line":3963},[139,9767,843],{"emptyLinePlaceholder":842},[139,9769,9770,9772,9774],{"class":141,"line":3968},[139,9771,2461],{"class":149},[139,9773,4259],{"class":781},[139,9775,4262],{"class":145},[139,9777,9778],{"class":141,"line":3982},[139,9779,3843],{"class":145},[139,9781,9782],{"class":141,"line":3987},[139,9783,9784],{"class":2512},"    \u002F\u002F 1.创建数组\n",[139,9786,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819,9821,9823,9825,9827,9829,9831,9833,9835,9837],{"class":141,"line":4014},[139,9788,1082],{"class":149},[139,9790,6242],{"class":145},[139,9792,536],{"class":153},[139,9794,3373],{"class":145},[139,9796,150],{"class":149},[139,9798,625],{"class":145},[139,9800,1476],{"class":153},[139,9802,2816],{"class":145},[139,9804,421],{"class":153},[139,9806,2816],{"class":145},[139,9808,2782],{"class":153},[139,9810,2816],{"class":145},[139,9812,2858],{"class":153},[139,9814,2816],{"class":145},[139,9816,410],{"class":153},[139,9818,2816],{"class":145},[139,9820,416],{"class":153},[139,9822,2816],{"class":145},[139,9824,536],{"class":153},[139,9826,2816],{"class":145},[139,9828,2833],{"class":153},[139,9830,2816],{"class":145},[139,9832,2807],{"class":153},[139,9834,2816],{"class":145},[139,9836,1481],{"class":153},[139,9838,6275],{"class":145},[139,9840,9841,9843,9845,9847,9849],{"class":141,"line":4019},[139,9842,1082],{"class":149},[139,9844,9605],{"class":145},[139,9846,150],{"class":149},[139,9848,536],{"class":153},[139,9850,3591],{"class":145},[139,9852,9853,9855,9857,9859,9861],{"class":141,"line":4036},[139,9854,1082],{"class":149},[139,9856,8792],{"class":149},[139,9858,19],{"class":145},[139,9860,150],{"class":149},[139,9862,9312],{"class":145},[139,9864,9865],{"class":141,"line":4041},[139,9866,9867],{"class":2512},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[139,9869,9870,9873],{"class":141,"line":4046},[139,9871,9872],{"class":781},"    bubbleSort",[139,9874,9875],{"class":145},"(p,len);\n",[139,9877,9878],{"class":141,"line":4051},[139,9879,843],{"emptyLinePlaceholder":842},[139,9881,9882],{"class":141,"line":4065},[139,9883,9884],{"class":2512},"    \u002F\u002F 3.打印排序后的数组\n",[139,9886,9887,9889,9891,9893,9895,9897,9899,9901,9903,9906,9908],{"class":141,"line":4070},[139,9888,5482],{"class":149},[139,9890,549],{"class":145},[139,9892,2461],{"class":149},[139,9894,5314],{"class":145},[139,9896,150],{"class":149},[139,9898,2634],{"class":153},[139,9900,5495],{"class":145},[139,9902,796],{"class":149},[139,9904,9905],{"class":145},"len; i",[139,9907,4577],{"class":149},[139,9909,164],{"class":145},[139,9911,9912],{"class":141,"line":4860},[139,9913,4315],{"class":145},[139,9915,9916,9918,9920,9922,9924,9927],{"class":141,"line":4874},[139,9917,5732],{"class":145},[139,9919,8693],{"class":149},[139,9921,19],{"class":145},[139,9923,3474],{"class":149},[139,9925,9926],{"class":160},"\"\"",[139,9928,3591],{"class":145},[139,9930,9931,9934,9936],{"class":141,"line":4882},[139,9932,9933],{"class":145},"        p",[139,9935,4577],{"class":149},[139,9937,3591],{"class":145},[139,9939,9940],{"class":141,"line":4887},[139,9941,4472],{"class":145},[139,9943,9944],{"class":141,"line":4893},[139,9945,3862],{"class":145},[2348,9947,9948],{},"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":135,"searchDepth":210,"depth":210,"links":9950},[9951,9952,9953,9954,9955,9956,9957,9958],{"id":8557,"depth":210,"text":8558},{"id":8723,"depth":210,"text":8724},{"id":8879,"depth":210,"text":8880},{"id":8957,"depth":210,"text":8958},{"id":9036,"depth":210,"text":9037},{"id":9135,"depth":210,"text":9136},{"id":9374,"depth":210,"text":9375},{"id":9552,"depth":210,"text":9553},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8546,"description":8554},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9965,"title":9966,"body":9967,"description":9974,"extension":2385,"meta":12948,"navigation":842,"path":12949,"seo":12950,"stem":12951,"__hash__":12952},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9968,"toc":12939},[9969,9972,9975,9979,9982,9985,9996,10334,10337,10341,10344,10351,10606,10610,10613,10616,10771,10775,10778,10781,10987,10991,10994,11297,11300,11308,11312,11315,11466,11468,11479,11536,11540,11545,12202,12210,12213,12307,12310,12930,12936],[10,9970,9966],{"id":9971},"_4结构体",[19,9973,9974],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9976,9978],{"id":9977},"_41结构体定义与使用","4.1结构体定义与使用",[19,9980,9981],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9983,9984],{},"通过结构体创建变量的方式：",[3437,9986,9987,9990,9993],{},[1763,9988,9989],{},"struct 结构体名 变量名",[1763,9991,9992],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1763,9994,9995],{},"定义结构体时顺便创建变量",[130,9997,9999],{"className":2447,"code":9998,"language":2449,"meta":135,"style":135},"#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",[50,10000,10001,10007,10017,10024,10029,10037,10041,10046,10050,10055,10060,10065,10072,10077,10084,10088,10095,10099,10103,10107,10111,10115,10119,10125,10129,10135,10143,10151,10155,10160,10165,10176,10181,10193,10204,10215,10220,10244,10249,10255,10282,10287,10293,10305,10317,10329],{"__ignoreMap":135},[139,10002,10003,10005],{"class":141,"line":142},[139,10004,4236],{"class":149},[139,10006,4239],{"class":160},[139,10008,10009,10011,10013,10015],{"class":141,"line":210},[139,10010,4244],{"class":149},[139,10012,4247],{"class":149},[139,10014,4250],{"class":781},[139,10016,3591],{"class":145},[139,10018,10019,10021],{"class":141,"line":254},[139,10020,4236],{"class":149},[139,10022,10023],{"class":160},"\u003Cstring>\n",[139,10025,10026],{"class":141,"line":262},[139,10027,10028],{"class":2512},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[139,10030,10031,10034],{"class":141,"line":313},[139,10032,10033],{"class":149},"struct",[139,10035,10036],{"class":781}," Student\n",[139,10038,10039],{"class":141,"line":462},[139,10040,3843],{"class":145},[139,10042,10043],{"class":141,"line":474},[139,10044,10045],{"class":2512},"    \u002F\u002F成员列表\n",[139,10047,10048],{"class":141,"line":484},[139,10049,843],{"emptyLinePlaceholder":842},[139,10051,10052],{"class":141,"line":989},[139,10053,10054],{"class":2512},"    \u002F\u002F姓名\n",[139,10056,10057],{"class":141,"line":994},[139,10058,10059],{"class":145},"    string name;\n",[139,10061,10062],{"class":141,"line":999},[139,10063,10064],{"class":2512},"    \u002F\u002F年龄\n",[139,10066,10067,10069],{"class":141,"line":1006},[139,10068,1082],{"class":149},[139,10070,10071],{"class":145}," age;\n",[139,10073,10074],{"class":141,"line":1027},[139,10075,10076],{"class":2512},"    \u002F\u002F分数\n",[139,10078,10079,10081],{"class":141,"line":1040},[139,10080,1082],{"class":149},[139,10082,10083],{"class":145}," score;\n",[139,10085,10086],{"class":141,"line":2160},[139,10087,6275],{"class":145},[139,10089,10090,10092],{"class":141,"line":2188},[139,10091,10033],{"class":149},[139,10093,10094],{"class":781}," School\n",[139,10096,10097],{"class":141,"line":3944},[139,10098,3843],{"class":145},[139,10100,10101],{"class":141,"line":3963},[139,10102,10045],{"class":2512},[139,10104,10105],{"class":141,"line":3968},[139,10106,843],{"emptyLinePlaceholder":842},[139,10108,10109],{"class":141,"line":3982},[139,10110,10054],{"class":2512},[139,10112,10113],{"class":141,"line":3987},[139,10114,10059],{"class":145},[139,10116,10117],{"class":141,"line":4014},[139,10118,10064],{"class":2512},[139,10120,10121,10123],{"class":141,"line":4019},[139,10122,1082],{"class":149},[139,10124,10071],{"class":145},[139,10126,10127],{"class":141,"line":4036},[139,10128,10076],{"class":2512},[139,10130,10131,10133],{"class":141,"line":4041},[139,10132,1082],{"class":149},[139,10134,10083],{"class":145},[139,10136,10137,10140],{"class":141,"line":4046},[139,10138,10139],{"class":145},"} s3;",[139,10141,10142],{"class":2512}," \u002F\u002F创建结构体时就创建了变量\n",[139,10144,10145,10147,10149],{"class":141,"line":4051},[139,10146,2461],{"class":149},[139,10148,4259],{"class":781},[139,10150,4262],{"class":145},[139,10152,10153],{"class":141,"line":4065},[139,10154,3843],{"class":145},[139,10156,10157],{"class":141,"line":4070},[139,10158,10159],{"class":2512},"    \u002F\u002F2.通过学生类型创建具体学生\n",[139,10161,10162],{"class":141,"line":4860},[139,10163,10164],{"class":2512},"    \u002F\u002F2.1 struct Student s1;\n",[139,10166,10167,10170,10173],{"class":141,"line":4874},[139,10168,10169],{"class":149},"    struct",[139,10171,10172],{"class":781}," Student",[139,10174,10175],{"class":145}," s1;\n",[139,10177,10178],{"class":141,"line":4882},[139,10179,10180],{"class":2512},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[139,10182,10183,10186,10188,10191],{"class":141,"line":4887},[139,10184,10185],{"class":145},"    s1.name",[139,10187,150],{"class":149},[139,10189,10190],{"class":160},"\"张三\"",[139,10192,3591],{"class":145},[139,10194,10195,10198,10200,10202],{"class":141,"line":4893},[139,10196,10197],{"class":145},"    s1.age",[139,10199,150],{"class":149},[139,10201,3085],{"class":153},[139,10203,3591],{"class":145},[139,10205,10206,10209,10211,10213],{"class":141,"line":4899},[139,10207,10208],{"class":145},"    s1.score",[139,10210,150],{"class":149},[139,10212,2695],{"class":153},[139,10214,3591],{"class":145},[139,10216,10217],{"class":141,"line":4904},[139,10218,10219],{"class":2512},"    \u002F\u002F输出结果\n",[139,10221,10223,10225,10227,10230,10232,10235,10237,10240,10242],{"class":141,"line":10222},37,[139,10224,3848],{"class":145},[139,10226,3474],{"class":149},[139,10228,10229],{"class":145},"s1.name",[139,10231,3474],{"class":149},[139,10233,10234],{"class":145},"s1.age",[139,10236,3474],{"class":149},[139,10238,10239],{"class":145},"s1.score",[139,10241,3474],{"class":149},[139,10243,3496],{"class":145},[139,10245,10247],{"class":141,"line":10246},38,[139,10248,843],{"emptyLinePlaceholder":842},[139,10250,10252],{"class":141,"line":10251},39,[139,10253,10254],{"class":2512},"    \u002F\u002F2.2 struct Student s2={...}\n",[139,10256,10258,10260,10262,10265,10267,10269,10272,10274,10276,10278,10280],{"class":141,"line":10257},40,[139,10259,10169],{"class":149},[139,10261,10172],{"class":781},[139,10263,10264],{"class":145}," s2",[139,10266,150],{"class":149},[139,10268,625],{"class":145},[139,10270,10271],{"class":160},"\"王五\"",[139,10273,2816],{"class":145},[139,10275,3085],{"class":153},[139,10277,2816],{"class":145},[139,10279,2695],{"class":153},[139,10281,6275],{"class":145},[139,10283,10285],{"class":141,"line":10284},41,[139,10286,843],{"emptyLinePlaceholder":842},[139,10288,10290],{"class":141,"line":10289},42,[139,10291,10292],{"class":2512},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[139,10294,10296,10299,10301,10303],{"class":141,"line":10295},43,[139,10297,10298],{"class":145},"    s3.name",[139,10300,150],{"class":149},[139,10302,5959],{"class":160},[139,10304,3591],{"class":145},[139,10306,10308,10311,10313,10315],{"class":141,"line":10307},44,[139,10309,10310],{"class":145},"    s3.age",[139,10312,150],{"class":149},[139,10314,3085],{"class":153},[139,10316,3591],{"class":145},[139,10318,10320,10323,10325,10327],{"class":141,"line":10319},45,[139,10321,10322],{"class":145},"    s3.score",[139,10324,150],{"class":149},[139,10326,3135],{"class":153},[139,10328,3591],{"class":145},[139,10330,10332],{"class":141,"line":10331},46,[139,10333,3862],{"class":145},[19,10335,10336],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10338,10340],{"id":10339},"_42结构体数组","4.2结构体数组",[19,10342,10343],{},"将自定义的结构体放入到数组中方便维护",[19,10345,10346,10347,10350],{},"语法：struct 结构体名 数组名",[139,10348,10349],{},"元素个数","={ {}，{},...{} };",[130,10352,10354],{"className":2447,"code":10353,"language":2449,"meta":135,"style":135},"#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",[50,10355,10356,10362,10372,10378,10383,10389,10393,10397,10403,10409,10413,10417,10425,10429,10434,10449,10453,10469,10485,10489,10494,10510,10525,10540,10545,10571,10575,10598,10602],{"__ignoreMap":135},[139,10357,10358,10360],{"class":141,"line":142},[139,10359,4236],{"class":149},[139,10361,4239],{"class":160},[139,10363,10364,10366,10368,10370],{"class":141,"line":210},[139,10365,4244],{"class":149},[139,10367,4247],{"class":149},[139,10369,4250],{"class":781},[139,10371,3591],{"class":145},[139,10373,10374,10376],{"class":141,"line":254},[139,10375,4236],{"class":149},[139,10377,10023],{"class":160},[139,10379,10380],{"class":141,"line":262},[139,10381,10382],{"class":2512},"\u002F\u002F1.定义结构体\n",[139,10384,10385,10387],{"class":141,"line":313},[139,10386,10033],{"class":149},[139,10388,10036],{"class":781},[139,10390,10391],{"class":141,"line":462},[139,10392,3843],{"class":145},[139,10394,10395],{"class":141,"line":474},[139,10396,10059],{"class":145},[139,10398,10399,10401],{"class":141,"line":484},[139,10400,1082],{"class":149},[139,10402,10071],{"class":145},[139,10404,10405,10407],{"class":141,"line":989},[139,10406,1082],{"class":149},[139,10408,10083],{"class":145},[139,10410,10411],{"class":141,"line":994},[139,10412,843],{"emptyLinePlaceholder":842},[139,10414,10415],{"class":141,"line":999},[139,10416,6275],{"class":145},[139,10418,10419,10421,10423],{"class":141,"line":1006},[139,10420,2461],{"class":149},[139,10422,4259],{"class":781},[139,10424,4262],{"class":145},[139,10426,10427],{"class":141,"line":1027},[139,10428,3843],{"class":145},[139,10430,10431],{"class":141,"line":1040},[139,10432,10433],{"class":2512},"    \u002F\u002F2.创建结构体数组\n",[139,10435,10436,10438,10440,10443,10445,10447],{"class":141,"line":2160},[139,10437,10169],{"class":149},[139,10439,10172],{"class":781},[139,10441,10442],{"class":145}," stuArray[",[139,10444,416],{"class":153},[139,10446,3373],{"class":145},[139,10448,7186],{"class":149},[139,10450,10451],{"class":141,"line":2188},[139,10452,4315],{"class":145},[139,10454,10455,10457,10459,10461,10463,10465,10467],{"class":141,"line":3944},[139,10456,7195],{"class":145},[139,10458,10190],{"class":160},[139,10460,2816],{"class":145},[139,10462,3085],{"class":153},[139,10464,2816],{"class":145},[139,10466,1017],{"class":153},[139,10468,7208],{"class":145},[139,10470,10471,10473,10475,10477,10479,10481,10483],{"class":141,"line":3963},[139,10472,7195],{"class":145},[139,10474,5959],{"class":160},[139,10476,2816],{"class":145},[139,10478,3010],{"class":153},[139,10480,2816],{"class":145},[139,10482,3010],{"class":153},[139,10484,3862],{"class":145},[139,10486,10487],{"class":141,"line":3968},[139,10488,4472],{"class":145},[139,10490,10491],{"class":141,"line":3982},[139,10492,10493],{"class":2512},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[139,10495,10496,10499,10501,10504,10506,10508],{"class":141,"line":3987},[139,10497,10498],{"class":145},"    stuArray[",[139,10500,410],{"class":153},[139,10502,10503],{"class":145},"].name",[139,10505,150],{"class":149},[139,10507,5982],{"class":160},[139,10509,3591],{"class":145},[139,10511,10512,10514,10516,10519,10521,10523],{"class":141,"line":4014},[139,10513,10498],{"class":145},[139,10515,410],{"class":153},[139,10517,10518],{"class":145},"].age",[139,10520,150],{"class":149},[139,10522,416],{"class":153},[139,10524,3591],{"class":145},[139,10526,10527,10529,10531,10534,10536,10538],{"class":141,"line":4019},[139,10528,10498],{"class":145},[139,10530,410],{"class":153},[139,10532,10533],{"class":145},"].score",[139,10535,150],{"class":149},[139,10537,416],{"class":153},[139,10539,3591],{"class":145},[139,10541,10542],{"class":141,"line":4036},[139,10543,10544],{"class":2512},"    \u002F\u002F4.遍历结构体数组\n",[139,10546,10547,10549,10551,10553,10555,10557,10559,10561,10563,10565,10567,10569],{"class":141,"line":4041},[139,10548,5482],{"class":149},[139,10550,549],{"class":145},[139,10552,2461],{"class":149},[139,10554,5314],{"class":145},[139,10556,150],{"class":149},[139,10558,2634],{"class":153},[139,10560,5321],{"class":145},[139,10562,796],{"class":149},[139,10564,416],{"class":153},[139,10566,5321],{"class":145},[139,10568,4577],{"class":149},[139,10570,164],{"class":145},[139,10572,10573],{"class":141,"line":4046},[139,10574,4315],{"class":145},[139,10576,10577,10579,10581,10584,10586,10589,10591,10594,10596],{"class":141,"line":4051},[139,10578,5732],{"class":145},[139,10580,3474],{"class":149},[139,10582,10583],{"class":145},"stuArray[i].name",[139,10585,3474],{"class":149},[139,10587,10588],{"class":145},"stuArray[i].age",[139,10590,3474],{"class":149},[139,10592,10593],{"class":145},"stuArray[i].score",[139,10595,3474],{"class":149},[139,10597,3496],{"class":145},[139,10599,10600],{"class":141,"line":4065},[139,10601,4472],{"class":145},[139,10603,10604],{"class":141,"line":4070},[139,10605,3862],{"class":145},[14,10607,10609],{"id":10608},"_43结构体指针","4.3结构体指针",[19,10611,10612],{},"作用：通过指针访问结构体中的成员",[19,10614,10615],{},"利用操作符->可以通过结构体指针访问结构体属性",[130,10617,10619],{"className":2447,"code":10618,"language":2449,"meta":135,"style":135},"#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",[50,10620,10621,10627,10637,10643,10647,10653,10657,10661,10667,10673,10677,10685,10689,10694,10719,10724,10739,10744,10767],{"__ignoreMap":135},[139,10622,10623,10625],{"class":141,"line":142},[139,10624,4236],{"class":149},[139,10626,4239],{"class":160},[139,10628,10629,10631,10633,10635],{"class":141,"line":210},[139,10630,4244],{"class":149},[139,10632,4247],{"class":149},[139,10634,4250],{"class":781},[139,10636,3591],{"class":145},[139,10638,10639,10641],{"class":141,"line":254},[139,10640,4236],{"class":149},[139,10642,10023],{"class":160},[139,10644,10645],{"class":141,"line":262},[139,10646,10382],{"class":2512},[139,10648,10649,10651],{"class":141,"line":313},[139,10650,10033],{"class":149},[139,10652,10036],{"class":781},[139,10654,10655],{"class":141,"line":462},[139,10656,3843],{"class":145},[139,10658,10659],{"class":141,"line":474},[139,10660,10059],{"class":145},[139,10662,10663,10665],{"class":141,"line":484},[139,10664,1082],{"class":149},[139,10666,10071],{"class":145},[139,10668,10669,10671],{"class":141,"line":989},[139,10670,1082],{"class":149},[139,10672,10083],{"class":145},[139,10674,10675],{"class":141,"line":994},[139,10676,6275],{"class":145},[139,10678,10679,10681,10683],{"class":141,"line":999},[139,10680,2461],{"class":149},[139,10682,4259],{"class":781},[139,10684,4262],{"class":145},[139,10686,10687],{"class":141,"line":1006},[139,10688,3843],{"class":145},[139,10690,10691],{"class":141,"line":1027},[139,10692,10693],{"class":2512},"    \u002F\u002F创建学生结构体变量\n",[139,10695,10696,10698,10700,10703,10705,10707,10709,10711,10713,10715,10717],{"class":141,"line":1040},[139,10697,10169],{"class":149},[139,10699,10172],{"class":781},[139,10701,10702],{"class":145}," s",[139,10704,150],{"class":149},[139,10706,625],{"class":145},[139,10708,10190],{"class":160},[139,10710,2816],{"class":145},[139,10712,3085],{"class":153},[139,10714,2816],{"class":145},[139,10716,1022],{"class":153},[139,10718,6275],{"class":145},[139,10720,10721],{"class":141,"line":2160},[139,10722,10723],{"class":2512},"    \u002F\u002F通过指针指向结构体变量\n",[139,10725,10726,10728,10730,10732,10734,10736],{"class":141,"line":2188},[139,10727,10169],{"class":149},[139,10729,10172],{"class":781},[139,10731,8792],{"class":149},[139,10733,19],{"class":145},[139,10735,8613],{"class":149},[139,10737,10738],{"class":145},"s\n",[139,10740,10741],{"class":141,"line":3944},[139,10742,10743],{"class":2512},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[139,10745,10746,10748,10750,10753,10755,10758,10760,10763,10765],{"class":141,"line":3963},[139,10747,3848],{"class":145},[139,10749,3474],{"class":149},[139,10751,10752],{"class":145},"p->name",[139,10754,3474],{"class":149},[139,10756,10757],{"class":145},"p->age",[139,10759,3474],{"class":149},[139,10761,10762],{"class":145},"p->score",[139,10764,3474],{"class":149},[139,10766,3496],{"class":145},[139,10768,10769],{"class":141,"line":3968},[139,10770,3862],{"class":145},[14,10772,10774],{"id":10773},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10776,10777],{},"作用：结构体中的成员可以是另一个结构体",[19,10779,10780],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[130,10782,10784],{"className":2447,"code":10783,"language":2449,"meta":135,"style":135},"#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",[50,10785,10786,10792,10802,10808,10813,10821,10825,10829,10835,10841,10845,10850,10857,10861,10868,10872,10878,10883,10887,10895,10899,10904,10909,10914,10925,10937,10948,10961,10972,10983],{"__ignoreMap":135},[139,10787,10788,10790],{"class":141,"line":142},[139,10789,4236],{"class":149},[139,10791,4239],{"class":160},[139,10793,10794,10796,10798,10800],{"class":141,"line":210},[139,10795,4244],{"class":149},[139,10797,4247],{"class":149},[139,10799,4250],{"class":781},[139,10801,3591],{"class":145},[139,10803,10804,10806],{"class":141,"line":254},[139,10805,4236],{"class":149},[139,10807,10023],{"class":160},[139,10809,10810],{"class":141,"line":262},[139,10811,10812],{"class":2512},"\u002F\u002F定义学生结构体\n",[139,10814,10815,10817,10819],{"class":141,"line":313},[139,10816,10033],{"class":149},[139,10818,10172],{"class":781},[139,10820,4957],{"class":145},[139,10822,10823],{"class":141,"line":462},[139,10824,3843],{"class":145},[139,10826,10827],{"class":141,"line":474},[139,10828,10059],{"class":145},[139,10830,10831,10833],{"class":141,"line":484},[139,10832,1082],{"class":149},[139,10834,10071],{"class":145},[139,10836,10837,10839],{"class":141,"line":989},[139,10838,1082],{"class":149},[139,10840,10083],{"class":145},[139,10842,10843],{"class":141,"line":994},[139,10844,3862],{"class":145},[139,10846,10847],{"class":141,"line":999},[139,10848,10849],{"class":2512},"\u002F\u002F定义老师结构体\n",[139,10851,10852,10854],{"class":141,"line":1006},[139,10853,10033],{"class":149},[139,10855,10856],{"class":781}," Teacher\n",[139,10858,10859],{"class":141,"line":1027},[139,10860,3843],{"class":145},[139,10862,10863,10865],{"class":141,"line":1040},[139,10864,1082],{"class":149},[139,10866,10867],{"class":145}," id;\n",[139,10869,10870],{"class":141,"line":2160},[139,10871,10059],{"class":145},[139,10873,10874,10876],{"class":141,"line":2188},[139,10875,1082],{"class":149},[139,10877,10071],{"class":145},[139,10879,10880],{"class":141,"line":3944},[139,10881,10882],{"class":145},"    Student stu;\n",[139,10884,10885],{"class":141,"line":3963},[139,10886,3862],{"class":145},[139,10888,10889,10891,10893],{"class":141,"line":3968},[139,10890,2461],{"class":149},[139,10892,4259],{"class":781},[139,10894,8252],{"class":145},[139,10896,10897],{"class":141,"line":3982},[139,10898,3843],{"class":145},[139,10900,10901],{"class":141,"line":3987},[139,10902,10903],{"class":2512},"    \u002F\u002F结构体嵌套结构体\n",[139,10905,10906],{"class":141,"line":4014},[139,10907,10908],{"class":2512},"    \u002F\u002F创建老师\n",[139,10910,10911],{"class":141,"line":4019},[139,10912,10913],{"class":145},"    Teacher t;\n",[139,10915,10916,10919,10921,10923],{"class":141,"line":4036},[139,10917,10918],{"class":145},"    t.id",[139,10920,150],{"class":149},[139,10922,1017],{"class":153},[139,10924,3591],{"class":145},[139,10926,10927,10930,10932,10935],{"class":141,"line":4041},[139,10928,10929],{"class":145},"    t.name",[139,10931,150],{"class":149},[139,10933,10934],{"class":160},"\"老王\"",[139,10936,3591],{"class":145},[139,10938,10939,10942,10944,10946],{"class":141,"line":4046},[139,10940,10941],{"class":145},"    t.age",[139,10943,150],{"class":149},[139,10945,3085],{"class":153},[139,10947,3591],{"class":145},[139,10949,10950,10953,10955,10958],{"class":141,"line":4051},[139,10951,10952],{"class":145},"    t.stu.name",[139,10954,150],{"class":149},[139,10956,10957],{"class":160},"\"小王\"",[139,10959,10960],{"class":145},"；\n",[139,10962,10963,10966,10968,10970],{"class":141,"line":4065},[139,10964,10965],{"class":145},"    t.stu.age",[139,10967,150],{"class":149},[139,10969,3135],{"class":153},[139,10971,3591],{"class":145},[139,10973,10974,10977,10979,10981],{"class":141,"line":4070},[139,10975,10976],{"class":145},"    t.stu.score",[139,10978,150],{"class":149},[139,10980,2782],{"class":153},[139,10982,3591],{"class":145},[139,10984,10985],{"class":141,"line":4860},[139,10986,3862],{"class":145},[14,10988,10990],{"id":10989},"_45结构体做函数参数","4.5结构体做函数参数",[19,10992,10993],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[130,10995,10997],{"className":2447,"code":10996,"language":2449,"meta":135,"style":135},"#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",[50,10998,10999,11005,11015,11021,11027,11031,11035,11041,11047,11051,11056,11061,11078,11082,11115,11119,11124,11143,11147,11178,11182,11190,11194,11203,11215,11227,11239,11252,11260,11273,11285,11293],{"__ignoreMap":135},[139,11000,11001,11003],{"class":141,"line":142},[139,11002,4236],{"class":149},[139,11004,4239],{"class":160},[139,11006,11007,11009,11011,11013],{"class":141,"line":210},[139,11008,4244],{"class":149},[139,11010,4247],{"class":149},[139,11012,4250],{"class":781},[139,11014,3591],{"class":145},[139,11016,11017,11019],{"class":141,"line":254},[139,11018,4236],{"class":149},[139,11020,10023],{"class":160},[139,11022,11023,11025],{"class":141,"line":262},[139,11024,10033],{"class":149},[139,11026,10036],{"class":781},[139,11028,11029],{"class":141,"line":313},[139,11030,3843],{"class":145},[139,11032,11033],{"class":141,"line":462},[139,11034,10059],{"class":145},[139,11036,11037,11039],{"class":141,"line":474},[139,11038,1082],{"class":149},[139,11040,10071],{"class":145},[139,11042,11043,11045],{"class":141,"line":484},[139,11044,1082],{"class":149},[139,11046,10083],{"class":145},[139,11048,11049],{"class":141,"line":989},[139,11050,6275],{"class":145},[139,11052,11053],{"class":141,"line":994},[139,11054,11055],{"class":2512},"\u002F\u002F打印学生信息的函数\n",[139,11057,11058],{"class":141,"line":999},[139,11059,11060],{"class":2512},"\u002F\u002F值传递\n",[139,11062,11063,11065,11068,11070,11072,11074,11076],{"class":141,"line":1006},[139,11064,7638],{"class":149},[139,11066,11067],{"class":781}," printStudent1",[139,11069,157],{"class":145},[139,11071,10033],{"class":149},[139,11073,10172],{"class":781},[139,11075,10702],{"class":2111},[139,11077,164],{"class":145},[139,11079,11080],{"class":141,"line":1027},[139,11081,3843],{"class":145},[139,11083,11084,11086,11088,11091,11093,11096,11098,11101,11103,11105,11107,11110,11112],{"class":141,"line":1040},[139,11085,8803],{"class":145},[139,11087,3474],{"class":149},[139,11089,11090],{"class":145}," s.name ",[139,11092,3474],{"class":149},[139,11094,11095],{"class":160}," \" \"",[139,11097,3742],{"class":149},[139,11099,11100],{"class":145}," s.age ",[139,11102,3474],{"class":149},[139,11104,11095],{"class":160},[139,11106,3742],{"class":149},[139,11108,11109],{"class":145}," s.score ",[139,11111,3474],{"class":149},[139,11113,11114],{"class":145}," endl;\n",[139,11116,11117],{"class":141,"line":2160},[139,11118,3862],{"class":145},[139,11120,11121],{"class":141,"line":2188},[139,11122,11123],{"class":2512},"\u002F\u002F地址传递\n",[139,11125,11126,11128,11131,11133,11135,11137,11139,11141],{"class":141,"line":3944},[139,11127,7638],{"class":149},[139,11129,11130],{"class":781}," printStudent2",[139,11132,157],{"class":145},[139,11134,10033],{"class":149},[139,11136,10172],{"class":781},[139,11138,8792],{"class":149},[139,11140,3130],{"class":2111},[139,11142,164],{"class":145},[139,11144,11145],{"class":141,"line":3963},[139,11146,3843],{"class":145},[139,11148,11149,11151,11153,11156,11158,11160,11162,11165,11167,11169,11171,11174,11176],{"class":141,"line":3968},[139,11150,8803],{"class":145},[139,11152,3474],{"class":149},[139,11154,11155],{"class":145}," s->name ",[139,11157,3474],{"class":149},[139,11159,11095],{"class":160},[139,11161,3742],{"class":149},[139,11163,11164],{"class":145}," s->age ",[139,11166,3474],{"class":149},[139,11168,11095],{"class":160},[139,11170,3742],{"class":149},[139,11172,11173],{"class":145}," s->score ",[139,11175,3474],{"class":149},[139,11177,11114],{"class":145},[139,11179,11180],{"class":141,"line":3982},[139,11181,3862],{"class":145},[139,11183,11184,11186,11188],{"class":141,"line":3987},[139,11185,2461],{"class":149},[139,11187,4259],{"class":781},[139,11189,4262],{"class":145},[139,11191,11192],{"class":141,"line":4014},[139,11193,3843],{"class":145},[139,11195,11196,11198,11200],{"class":141,"line":4019},[139,11197,10169],{"class":149},[139,11199,10172],{"class":781},[139,11201,11202],{"class":145}," s;\n",[139,11204,11205,11208,11210,11213],{"class":141,"line":4036},[139,11206,11207],{"class":145},"    s.name ",[139,11209,150],{"class":149},[139,11211,11212],{"class":160}," \"张三\"",[139,11214,3591],{"class":145},[139,11216,11217,11220,11222,11225],{"class":141,"line":4041},[139,11218,11219],{"class":145},"    s.age ",[139,11221,150],{"class":149},[139,11223,11224],{"class":153}," 20",[139,11226,3591],{"class":145},[139,11228,11229,11232,11234,11237],{"class":141,"line":4046},[139,11230,11231],{"class":145},"    s.score ",[139,11233,150],{"class":149},[139,11235,11236],{"class":153}," 85",[139,11238,3591],{"class":145},[139,11240,11241,11243,11245,11248,11250],{"class":141,"line":4051},[139,11242,3848],{"class":145},[139,11244,3474],{"class":149},[139,11246,11247],{"class":160},"\"值传递:\"",[139,11249,3474],{"class":149},[139,11251,3496],{"class":145},[139,11253,11254,11257],{"class":141,"line":4065},[139,11255,11256],{"class":781},"    printStudent1",[139,11258,11259],{"class":145},"(s);\n",[139,11261,11262,11264,11266,11269,11271],{"class":141,"line":4070},[139,11263,3848],{"class":145},[139,11265,3474],{"class":149},[139,11267,11268],{"class":160},"\"地址传递:\"",[139,11270,3474],{"class":149},[139,11272,3496],{"class":145},[139,11274,11275,11278,11280,11282],{"class":141,"line":4860},[139,11276,11277],{"class":781},"    printStudent2",[139,11279,157],{"class":145},[139,11281,2791],{"class":149},[139,11283,11284],{"class":145},"s); \n",[139,11286,11287,11289,11291],{"class":141,"line":4874},[139,11288,978],{"class":149},[139,11290,799],{"class":153},[139,11292,3591],{"class":145},[139,11294,11295],{"class":141,"line":4882},[139,11296,3862],{"class":145},[19,11298,11299],{},"注意：",[3437,11301,11302,11305],{},[1763,11303,11304],{},"1.先定义结构体，不要在函数中写结构体的定义",[1763,11306,11307],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11309,11311],{"id":11310},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11313,11314],{},"用const防止误操作",[130,11316,11318],{"className":2447,"code":11317,"language":2449,"meta":135,"style":135},"#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",[50,11319,11320,11326,11336,11342,11347,11351,11355,11361,11367,11371,11387,11391,11414,11418,11426,11430,11451,11458,11462],{"__ignoreMap":135},[139,11321,11322,11324],{"class":141,"line":142},[139,11323,4236],{"class":149},[139,11325,4239],{"class":160},[139,11327,11328,11330,11332,11334],{"class":141,"line":210},[139,11329,4244],{"class":149},[139,11331,4247],{"class":149},[139,11333,4250],{"class":781},[139,11335,3591],{"class":145},[139,11337,11338,11340],{"class":141,"line":254},[139,11339,4236],{"class":149},[139,11341,10023],{"class":160},[139,11343,11344],{"class":141,"line":262},[139,11345,11346],{"class":145},"sctuct Student\n",[139,11348,11349],{"class":141,"line":313},[139,11350,3843],{"class":145},[139,11352,11353],{"class":141,"line":462},[139,11354,10059],{"class":145},[139,11356,11357,11359],{"class":141,"line":474},[139,11358,1082],{"class":149},[139,11360,10071],{"class":145},[139,11362,11363,11365],{"class":141,"line":484},[139,11364,1082],{"class":149},[139,11366,10083],{"class":145},[139,11368,11369],{"class":141,"line":989},[139,11370,6275],{"class":145},[139,11372,11373,11375,11378,11380,11383,11385],{"class":141,"line":994},[139,11374,7638],{"class":149},[139,11376,11377],{"class":781}," printStudents",[139,11379,157],{"class":145},[139,11381,11382],{"class":781},"student",[139,11384,10702],{"class":2111},[139,11386,164],{"class":145},[139,11388,11389],{"class":141,"line":999},[139,11390,3843],{"class":145},[139,11392,11393,11395,11397,11400,11402,11405,11407,11410,11412],{"class":141,"line":1006},[139,11394,3848],{"class":145},[139,11396,3474],{"class":149},[139,11398,11399],{"class":145},"s.name",[139,11401,3474],{"class":149},[139,11403,11404],{"class":145},"s.age",[139,11406,3474],{"class":149},[139,11408,11409],{"class":145},"s.score",[139,11411,3474],{"class":149},[139,11413,3496],{"class":145},[139,11415,11416],{"class":141,"line":1027},[139,11417,3862],{"class":145},[139,11419,11420,11422,11424],{"class":141,"line":1040},[139,11421,2461],{"class":149},[139,11423,4259],{"class":781},[139,11425,8252],{"class":145},[139,11427,11428],{"class":141,"line":2160},[139,11429,3843],{"class":145},[139,11431,11432,11435,11437,11439,11441,11443,11445,11447,11449],{"class":141,"line":2188},[139,11433,11434],{"class":145},"    Student s",[139,11436,150],{"class":149},[139,11438,625],{"class":145},[139,11440,10190],{"class":160},[139,11442,2816],{"class":145},[139,11444,3085],{"class":153},[139,11446,2816],{"class":145},[139,11448,3085],{"class":153},[139,11450,6275],{"class":145},[139,11452,11453,11456],{"class":141,"line":3944},[139,11454,11455],{"class":781},"    printStudent",[139,11457,11259],{"class":145},[139,11459,11460],{"class":141,"line":3963},[139,11461,843],{"emptyLinePlaceholder":842},[139,11463,11464],{"class":141,"line":3968},[139,11465,3862],{"class":145},[19,11467,11299],{},[3437,11469,11470,11473,11476],{},[1763,11471,11472],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1763,11474,11475],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1763,11477,11478],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[130,11480,11482],{"className":2447,"code":11481,"language":2449,"meta":135,"style":135},"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",[50,11483,11484,11503,11507,11512,11532],{"__ignoreMap":135},[139,11485,11486,11488,11490,11492,11494,11497,11499,11501],{"class":141,"line":142},[139,11487,7638],{"class":149},[139,11489,11377],{"class":781},[139,11491,157],{"class":145},[139,11493,9066],{"class":149},[139,11495,11496],{"class":781}," student",[139,11498,8792],{"class":149},[139,11500,3130],{"class":2111},[139,11502,164],{"class":145},[139,11504,11505],{"class":141,"line":210},[139,11506,3843],{"class":145},[139,11508,11509],{"class":141,"line":254},[139,11510,11511],{"class":2512},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[139,11513,11514,11516,11518,11520,11522,11524,11526,11528,11530],{"class":141,"line":262},[139,11515,3848],{"class":145},[139,11517,3474],{"class":149},[139,11519,11399],{"class":145},[139,11521,3474],{"class":149},[139,11523,11404],{"class":145},[139,11525,3474],{"class":149},[139,11527,11409],{"class":145},[139,11529,3474],{"class":149},[139,11531,3496],{"class":145},[139,11533,11534],{"class":141,"line":313},[139,11535,3862],{"class":145},[14,11537,11539],{"id":11538},"_47案例","4.7案例",[1760,11541,11542],{},[1763,11543,11544],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[130,11546,11548],{"className":2447,"code":11547,"language":2449,"meta":135,"style":135},"#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",[50,11549,11550,11556,11566,11572,11579,11583,11589,11593,11598,11604,11610,11614,11618,11624,11628,11633,11638,11651,11655,11660,11686,11690,11702,11729,11733,11745,11755,11759,11764,11793,11797,11809,11818,11845,11856,11866,11870,11874,11878,11883,11907,11911,11935,11939,11958,11984,11988,12013,12036,12060,12065,12070,12075,12084,12089,12095,12116,12122,12136,12142,12169,12178,12184,12192,12197],{"__ignoreMap":135},[139,11551,11552,11554],{"class":141,"line":142},[139,11553,4236],{"class":149},[139,11555,4239],{"class":160},[139,11557,11558,11560,11562,11564],{"class":141,"line":210},[139,11559,4244],{"class":149},[139,11561,4247],{"class":149},[139,11563,4250],{"class":781},[139,11565,3591],{"class":145},[139,11567,11568,11570],{"class":141,"line":254},[139,11569,4236],{"class":149},[139,11571,10023],{"class":160},[139,11573,11574,11576],{"class":141,"line":262},[139,11575,4236],{"class":149},[139,11577,11578],{"class":160},"\u003Cctime>\n",[139,11580,11581],{"class":141,"line":313},[139,11582,10812],{"class":2512},[139,11584,11585,11587],{"class":141,"line":462},[139,11586,10033],{"class":149},[139,11588,10036],{"class":781},[139,11590,11591],{"class":141,"line":474},[139,11592,3843],{"class":145},[139,11594,11595],{"class":141,"line":484},[139,11596,11597],{"class":145},"    string sName;\n",[139,11599,11600,11602],{"class":141,"line":989},[139,11601,1082],{"class":149},[139,11603,10071],{"class":145},[139,11605,11606,11608],{"class":141,"line":994},[139,11607,1082],{"class":149},[139,11609,10083],{"class":145},[139,11611,11612],{"class":141,"line":999},[139,11613,6275],{"class":145},[139,11615,11616],{"class":141,"line":1006},[139,11617,10849],{"class":2512},[139,11619,11620,11622],{"class":141,"line":1027},[139,11621,10033],{"class":149},[139,11623,10856],{"class":781},[139,11625,11626],{"class":141,"line":1040},[139,11627,3843],{"class":145},[139,11629,11630],{"class":141,"line":2160},[139,11631,11632],{"class":145},"    string tName;\n",[139,11634,11635],{"class":141,"line":2188},[139,11636,11637],{"class":2512},"    \u002F\u002F学生数组\n",[139,11639,11640,11642,11644,11647,11649],{"class":141,"line":3944},[139,11641,10169],{"class":149},[139,11643,10172],{"class":781},[139,11645,11646],{"class":145}," sArray[",[139,11648,1481],{"class":153},[139,11650,6968],{"class":145},[139,11652,11653],{"class":141,"line":3963},[139,11654,6275],{"class":145},[139,11656,11657],{"class":141,"line":3968},[139,11658,11659],{"class":2512},"\u002F\u002F给老师和学生赋值的函数\n",[139,11661,11662,11664,11667,11669,11671,11674,11677,11680,11682,11684],{"class":141,"line":3982},[139,11663,7638],{"class":149},[139,11665,11666],{"class":781}," allocateSpace",[139,11668,157],{"class":145},[139,11670,10033],{"class":149},[139,11672,11673],{"class":781}," Teacher",[139,11675,11676],{"class":2111}," tArray",[139,11678,11679],{"class":145},"[],",[139,11681,2461],{"class":149},[139,11683,9605],{"class":2111},[139,11685,164],{"class":145},[139,11687,11688],{"class":141,"line":3987},[139,11689,3843],{"class":145},[139,11691,11692,11695,11697,11700],{"class":141,"line":4014},[139,11693,11694],{"class":145},"    string nameSeed",[139,11696,150],{"class":149},[139,11698,11699],{"class":160},"\"ABCDE\"",[139,11701,3591],{"class":145},[139,11703,11704,11706,11708,11710,11713,11715,11717,11720,11722,11725,11727],{"class":141,"line":4019},[139,11705,5482],{"class":149},[139,11707,549],{"class":145},[139,11709,2461],{"class":149},[139,11711,11712],{"class":145}," i ",[139,11714,150],{"class":149},[139,11716,799],{"class":153},[139,11718,11719],{"class":145},"; i ",[139,11721,796],{"class":149},[139,11723,11724],{"class":145}," len; i",[139,11726,4577],{"class":149},[139,11728,164],{"class":145},[139,11730,11731],{"class":141,"line":4036},[139,11732,4315],{"class":145},[139,11734,11735,11738,11740,11743],{"class":141,"line":4041},[139,11736,11737],{"class":145},"        tArray[i].tName ",[139,11739,150],{"class":149},[139,11741,11742],{"class":160}," \"Teacher_\"",[139,11744,3591],{"class":145},[139,11746,11747,11749,11752],{"class":141,"line":4046},[139,11748,11737],{"class":145},[139,11750,11751],{"class":149},"+=",[139,11753,11754],{"class":145},"nameSeed[i];\n",[139,11756,11757],{"class":141,"line":4051},[139,11758,843],{"emptyLinePlaceholder":842},[139,11760,11761],{"class":141,"line":4065},[139,11762,11763],{"class":2512},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[139,11765,11766,11768,11770,11772,11775,11777,11779,11782,11784,11786,11789,11791],{"class":141,"line":4070},[139,11767,5684],{"class":149},[139,11769,549],{"class":145},[139,11771,2461],{"class":149},[139,11773,11774],{"class":145}," j ",[139,11776,150],{"class":149},[139,11778,799],{"class":153},[139,11780,11781],{"class":145},"; j ",[139,11783,796],{"class":149},[139,11785,4433],{"class":153},[139,11787,11788],{"class":145},"; j",[139,11790,4577],{"class":149},[139,11792,164],{"class":145},[139,11794,11795],{"class":141,"line":4860},[139,11796,4793],{"class":145},[139,11798,11799,11802,11804,11807],{"class":141,"line":4874},[139,11800,11801],{"class":145},"            tArray[i].sArray[j].sName ",[139,11803,150],{"class":149},[139,11805,11806],{"class":160}," \"Student_\"",[139,11808,3591],{"class":145},[139,11810,11811,11813,11815],{"class":141,"line":4882},[139,11812,11801],{"class":145},[139,11814,11751],{"class":149},[139,11816,11817],{"class":145}," nameSeed[j];\n",[139,11819,11820,11823,11826,11828,11830,11832,11834,11836,11838,11840,11842],{"class":141,"line":4887},[139,11821,11822],{"class":149},"            int",[139,11824,11825],{"class":145}," random",[139,11827,150],{"class":149},[139,11829,4707],{"class":781},[139,11831,4710],{"class":145},[139,11833,2766],{"class":149},[139,11835,3341],{"class":153},[139,11837,1147],{"class":149},[139,11839,2839],{"class":153},[139,11841,2509],{"class":145},[139,11843,11844],{"class":2512},"\u002F\u002F40~99\n",[139,11846,11847,11850,11852,11854],{"class":141,"line":4893},[139,11848,11849],{"class":145},"            tArray[i].sArray[j].age ",[139,11851,150],{"class":149},[139,11853,11224],{"class":153},[139,11855,3591],{"class":145},[139,11857,11858,11861,11863],{"class":141,"line":4899},[139,11859,11860],{"class":145},"            tArray[i].sArray[j].score ",[139,11862,150],{"class":149},[139,11864,11865],{"class":145}," random;\n",[139,11867,11868],{"class":141,"line":4904},[139,11869,4812],{"class":145},[139,11871,11872],{"class":141,"line":10222},[139,11873,4472],{"class":145},[139,11875,11876],{"class":141,"line":10246},[139,11877,3862],{"class":145},[139,11879,11880],{"class":141,"line":10251},[139,11881,11882],{"class":2512},"\u002F\u002F打印所有信息的函数\n",[139,11884,11885,11887,11890,11892,11894,11896,11898,11901,11903,11905],{"class":141,"line":10257},[139,11886,7638],{"class":149},[139,11888,11889],{"class":781}," printInfo",[139,11891,157],{"class":145},[139,11893,10033],{"class":149},[139,11895,11673],{"class":781},[139,11897,11676],{"class":2111},[139,11899,11900],{"class":145},"[], ",[139,11902,2461],{"class":149},[139,11904,9605],{"class":2111},[139,11906,164],{"class":145},[139,11908,11909],{"class":141,"line":10284},[139,11910,3843],{"class":145},[139,11912,11913,11915,11917,11919,11921,11923,11925,11927,11929,11931,11933],{"class":141,"line":10289},[139,11914,5482],{"class":149},[139,11916,549],{"class":145},[139,11918,2461],{"class":149},[139,11920,11712],{"class":145},[139,11922,150],{"class":149},[139,11924,799],{"class":153},[139,11926,11719],{"class":145},[139,11928,796],{"class":149},[139,11930,11724],{"class":145},[139,11932,4577],{"class":149},[139,11934,164],{"class":145},[139,11936,11937],{"class":141,"line":10295},[139,11938,4315],{"class":145},[139,11940,11941,11944,11946,11949,11951,11954,11956],{"class":141,"line":10307},[139,11942,11943],{"class":145},"        cout ",[139,11945,3474],{"class":149},[139,11947,11948],{"class":160}," \"Teacher: \"",[139,11950,3742],{"class":149},[139,11952,11953],{"class":145}," tArray[i].tName ",[139,11955,3474],{"class":149},[139,11957,11114],{"class":145},[139,11959,11960,11962,11964,11966,11968,11970,11972,11974,11976,11978,11980,11982],{"class":141,"line":10319},[139,11961,5684],{"class":149},[139,11963,549],{"class":145},[139,11965,2461],{"class":149},[139,11967,11774],{"class":145},[139,11969,150],{"class":149},[139,11971,799],{"class":153},[139,11973,11781],{"class":145},[139,11975,796],{"class":149},[139,11977,4433],{"class":153},[139,11979,11788],{"class":145},[139,11981,4577],{"class":149},[139,11983,164],{"class":145},[139,11985,11986],{"class":141,"line":10331},[139,11987,4793],{"class":145},[139,11989,11991,11994,11996,11999,12001,12004,12006,12009,12011],{"class":141,"line":11990},47,[139,11992,11993],{"class":145},"            cout ",[139,11995,3474],{"class":149},[139,11997,11998],{"class":160}," \"",[139,12000,3531],{"class":153},[139,12002,12003],{"class":160},"Student: \"",[139,12005,3742],{"class":149},[139,12007,12008],{"class":145}," tArray[i].sArray[j].sName",[139,12010,3474],{"class":149},[139,12012,3496],{"class":145},[139,12014,12016,12018,12020,12022,12024,12027,12029,12032,12034],{"class":141,"line":12015},48,[139,12017,11993],{"class":145},[139,12019,3474],{"class":149},[139,12021,11998],{"class":160},[139,12023,3531],{"class":153},[139,12025,12026],{"class":160},"Age: \"",[139,12028,3742],{"class":149},[139,12030,12031],{"class":145}," tArray[i].sArray[j].age ",[139,12033,3474],{"class":149},[139,12035,11114],{"class":145},[139,12037,12039,12041,12043,12045,12047,12050,12052,12055,12057],{"class":141,"line":12038},49,[139,12040,11993],{"class":145},[139,12042,3474],{"class":149},[139,12044,11998],{"class":160},[139,12046,3531],{"class":153},[139,12048,12049],{"class":160},"Score: \"",[139,12051,3742],{"class":149},[139,12053,12054],{"class":145}," tArray[i].sArray[j].score ",[139,12056,3474],{"class":149},[139,12058,12059],{"class":145}," endl;   \n",[139,12061,12063],{"class":141,"line":12062},50,[139,12064,4812],{"class":145},[139,12066,12068],{"class":141,"line":12067},51,[139,12069,4472],{"class":145},[139,12071,12073],{"class":141,"line":12072},52,[139,12074,3862],{"class":145},[139,12076,12078,12080,12082],{"class":141,"line":12077},53,[139,12079,2461],{"class":149},[139,12081,4259],{"class":781},[139,12083,4262],{"class":145},[139,12085,12087],{"class":141,"line":12086},54,[139,12088,3843],{"class":145},[139,12090,12092],{"class":141,"line":12091},55,[139,12093,12094],{"class":2512},"    \u002F\u002F随机数种子\n",[139,12096,12098,12100,12102,12104,12106,12108,12110,12112,12114],{"class":141,"line":12097},56,[139,12099,4658],{"class":781},[139,12101,4661],{"class":145},[139,12103,4664],{"class":149},[139,12105,154],{"class":149},[139,12107,2867],{"class":145},[139,12109,4671],{"class":781},[139,12111,157],{"class":145},[139,12113,4676],{"class":153},[139,12115,4679],{"class":145},[139,12117,12119],{"class":141,"line":12118},57,[139,12120,12121],{"class":2512},"    \u002F\u002F1.创建3名老师的数组\n",[139,12123,12125,12127,12129,12132,12134],{"class":141,"line":12124},58,[139,12126,10169],{"class":149},[139,12128,11673],{"class":781},[139,12130,12131],{"class":145}," tArray[",[139,12133,421],{"class":153},[139,12135,6968],{"class":145},[139,12137,12139],{"class":141,"line":12138},59,[139,12140,12141],{"class":2512},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[139,12143,12145,12147,12150,12152,12155,12158,12160,12162,12165,12167],{"class":141,"line":12144},60,[139,12146,1082],{"class":149},[139,12148,12149],{"class":145}," len ",[139,12151,150],{"class":149},[139,12153,12154],{"class":149}," sizeof",[139,12156,12157],{"class":145},"(tArray) ",[139,12159,3019],{"class":149},[139,12161,12154],{"class":149},[139,12163,12164],{"class":145},"(tArray[",[139,12166,2634],{"class":153},[139,12168,6136],{"class":145},[139,12170,12172,12175],{"class":141,"line":12171},61,[139,12173,12174],{"class":781},"    allocateSpace",[139,12176,12177],{"class":145},"(tArray, len);\n",[139,12179,12181],{"class":141,"line":12180},62,[139,12182,12183],{"class":2512},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[139,12185,12187,12190],{"class":141,"line":12186},63,[139,12188,12189],{"class":781},"    printInfo",[139,12191,12177],{"class":145},[139,12193,12195],{"class":141,"line":12194},64,[139,12196,843],{"emptyLinePlaceholder":842},[139,12198,12200],{"class":141,"line":12199},65,[139,12201,3862],{"class":145},[1760,12203,12204],{"start":210},[1763,12205,12206,12209],{},[1674,12207,12208],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12211,12212],{},"五名英雄信息如下：",[130,12214,12218],{"className":12215,"code":12216,"language":12217,"meta":135,"style":135},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[50,12219,12220,12238,12255,12272,12289],{"__ignoreMap":135},[139,12221,12222,12224,12227,12229,12231,12233,12236],{"class":141,"line":142},[139,12223,7195],{"class":145},[139,12225,12226],{"class":160},"\"刘备\"",[139,12228,2816],{"class":145},[139,12230,3210],{"class":153},[139,12232,2816],{"class":145},[139,12234,12235],{"class":160},"\"男\"",[139,12237,7208],{"class":145},[139,12239,12240,12242,12245,12247,12249,12251,12253],{"class":141,"line":210},[139,12241,7195],{"class":145},[139,12243,12244],{"class":160},"\"关羽\"",[139,12246,2816],{"class":145},[139,12248,3185],{"class":153},[139,12250,2816],{"class":145},[139,12252,12235],{"class":160},[139,12254,7208],{"class":145},[139,12256,12257,12259,12262,12264,12266,12268,12270],{"class":141,"line":254},[139,12258,7195],{"class":145},[139,12260,12261],{"class":160},"\"张飞\"",[139,12263,2816],{"class":145},[139,12265,3135],{"class":153},[139,12267,2816],{"class":145},[139,12269,12235],{"class":160},[139,12271,7208],{"class":145},[139,12273,12274,12276,12279,12281,12283,12285,12287],{"class":141,"line":262},[139,12275,7195],{"class":145},[139,12277,12278],{"class":160},"\"赵云\"",[139,12280,2816],{"class":145},[139,12282,3160],{"class":153},[139,12284,2816],{"class":145},[139,12286,12235],{"class":160},[139,12288,7208],{"class":145},[139,12290,12291,12293,12296,12298,12300,12302,12305],{"class":141,"line":313},[139,12292,7195],{"class":145},[139,12294,12295],{"class":160},"\"貂蝉\"",[139,12297,2816],{"class":145},[139,12299,3110],{"class":153},[139,12301,2816],{"class":145},[139,12303,12304],{"class":160},"\"女\"",[139,12306,7208],{"class":145},[19,12308,12309],{},"代码：",[130,12311,12313],{"className":2447,"code":12312,"language":2449,"meta":135,"style":135},"#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",[50,12314,12315,12321,12331,12337,12344,12348,12352,12358,12363,12367,12372,12395,12399,12424,12428,12461,12466,12495,12500,12515,12541,12561,12566,12571,12575,12579,12584,12606,12610,12634,12638,12700,12704,12708,12716,12720,12725,12736,12740,12756,12772,12788,12804,12820,12824,12844,12866,12871,12884,12891,12896,12902,12907,12920,12926],{"__ignoreMap":135},[139,12316,12317,12319],{"class":141,"line":142},[139,12318,4236],{"class":149},[139,12320,4239],{"class":160},[139,12322,12323,12325,12327,12329],{"class":141,"line":210},[139,12324,4244],{"class":149},[139,12326,4247],{"class":149},[139,12328,4250],{"class":781},[139,12330,3591],{"class":145},[139,12332,12333,12335],{"class":141,"line":254},[139,12334,4236],{"class":149},[139,12336,10023],{"class":160},[139,12338,12339,12341],{"class":141,"line":262},[139,12340,10033],{"class":149},[139,12342,12343],{"class":781}," Sanguo\n",[139,12345,12346],{"class":141,"line":313},[139,12347,3843],{"class":145},[139,12349,12350],{"class":141,"line":462},[139,12351,10059],{"class":145},[139,12353,12354,12356],{"class":141,"line":474},[139,12355,1082],{"class":149},[139,12357,10071],{"class":145},[139,12359,12360],{"class":141,"line":484},[139,12361,12362],{"class":145},"    string gender;\n",[139,12364,12365],{"class":141,"line":989},[139,12366,6275],{"class":145},[139,12368,12369],{"class":141,"line":994},[139,12370,12371],{"class":2512},"\u002F\u002F定义排序函数\n",[139,12373,12374,12376,12378,12380,12383,12385,12387,12389,12391,12393],{"class":141,"line":999},[139,12375,7638],{"class":149},[139,12377,9590],{"class":781},[139,12379,157],{"class":145},[139,12381,12382],{"class":781},"Sanguo",[139,12384,8792],{"class":149},[139,12386,3130],{"class":2111},[139,12388,2816],{"class":145},[139,12390,2461],{"class":149},[139,12392,9605],{"class":2111},[139,12394,164],{"class":145},[139,12396,12397],{"class":141,"line":1006},[139,12398,3843],{"class":145},[139,12400,12401,12403,12405,12407,12409,12411,12413,12415,12417,12420,12422],{"class":141,"line":1027},[139,12402,5482],{"class":149},[139,12404,157],{"class":145},[139,12406,2461],{"class":149},[139,12408,5314],{"class":145},[139,12410,150],{"class":149},[139,12412,2634],{"class":153},[139,12414,5321],{"class":145},[139,12416,796],{"class":149},[139,12418,12419],{"class":145},"len;i",[139,12421,4577],{"class":149},[139,12423,164],{"class":145},[139,12425,12426],{"class":141,"line":1040},[139,12427,4315],{"class":145},[139,12429,12430,12433,12435,12437,12439,12441,12443,12445,12447,12449,12451,12453,12455,12457,12459],{"class":141,"line":2160},[139,12431,12432],{"class":149},"     for",[139,12434,549],{"class":145},[139,12436,2461],{"class":149},[139,12438,5691],{"class":145},[139,12440,150],{"class":149},[139,12442,2634],{"class":153},[139,12444,5698],{"class":145},[139,12446,796],{"class":149},[139,12448,9632],{"class":145},[139,12450,855],{"class":149},[139,12452,410],{"class":153},[139,12454,855],{"class":149},[139,12456,5831],{"class":145},[139,12458,4577],{"class":149},[139,12460,164],{"class":145},[139,12462,12463],{"class":141,"line":2188},[139,12464,12465],{"class":145},"     {\n",[139,12467,12468,12471,12474,12476,12479,12481,12484,12486,12488,12490,12492],{"class":141,"line":3944},[139,12469,12470],{"class":149},"         if",[139,12472,12473],{"class":145}," ((s",[139,12475,1147],{"class":149},[139,12477,12478],{"class":145},"j)->age ",[139,12480,958],{"class":149},[139,12482,12483],{"class":145}," (s",[139,12485,1147],{"class":149},[139,12487,2904],{"class":145},[139,12489,1147],{"class":149},[139,12491,410],{"class":153},[139,12493,12494],{"class":145},")->age)\n",[139,12496,12497],{"class":141,"line":3963},[139,12498,12499],{"class":145},"         {\n",[139,12501,12502,12505,12507,12510,12512],{"class":141,"line":3968},[139,12503,12504],{"class":145},"             Sanguo temp",[139,12506,9427],{"class":149},[139,12508,12509],{"class":145},"(s",[139,12511,1147],{"class":149},[139,12513,12514],{"class":145},"j);\n",[139,12516,12517,12520,12522,12524,12527,12529,12531,12533,12535,12537,12539],{"class":141,"line":3982},[139,12518,12519],{"class":149},"             *",[139,12521,12509],{"class":145},[139,12523,1147],{"class":149},[139,12525,12526],{"class":145},"j)",[139,12528,9427],{"class":149},[139,12530,12509],{"class":145},[139,12532,1147],{"class":149},[139,12534,2904],{"class":145},[139,12536,1147],{"class":149},[139,12538,410],{"class":153},[139,12540,5002],{"class":145},[139,12542,12543,12545,12547,12549,12551,12553,12555,12557,12559],{"class":141,"line":3987},[139,12544,12519],{"class":149},[139,12546,12509],{"class":145},[139,12548,1147],{"class":149},[139,12550,2904],{"class":145},[139,12552,1147],{"class":149},[139,12554,410],{"class":153},[139,12556,2867],{"class":145},[139,12558,150],{"class":149},[139,12560,6558],{"class":145},[139,12562,12563],{"class":141,"line":4014},[139,12564,12565],{"class":145},"         }\n",[139,12567,12568],{"class":141,"line":4019},[139,12569,12570],{"class":145},"     }\n",[139,12572,12573],{"class":141,"line":4036},[139,12574,4472],{"class":145},[139,12576,12577],{"class":141,"line":4041},[139,12578,3862],{"class":145},[139,12580,12581],{"class":141,"line":4046},[139,12582,12583],{"class":2512},"\u002F\u002F定义打印函数\n",[139,12585,12586,12588,12590,12592,12594,12596,12598,12600,12602,12604],{"class":141,"line":4051},[139,12587,7638],{"class":149},[139,12589,11889],{"class":781},[139,12591,157],{"class":145},[139,12593,12382],{"class":781},[139,12595,8792],{"class":149},[139,12597,3130],{"class":2111},[139,12599,2816],{"class":145},[139,12601,2461],{"class":149},[139,12603,9605],{"class":2111},[139,12605,164],{"class":145},[139,12607,12608],{"class":141,"line":4065},[139,12609,3843],{"class":145},[139,12611,12612,12614,12616,12618,12620,12622,12624,12626,12628,12630,12632],{"class":141,"line":4070},[139,12613,5482],{"class":149},[139,12615,549],{"class":145},[139,12617,2461],{"class":149},[139,12619,5314],{"class":145},[139,12621,150],{"class":149},[139,12623,2634],{"class":153},[139,12625,5321],{"class":145},[139,12627,796],{"class":149},[139,12629,12419],{"class":145},[139,12631,4577],{"class":149},[139,12633,164],{"class":145},[139,12635,12636],{"class":141,"line":4860},[139,12637,4315],{"class":145},[139,12639,12640,12642,12644,12646,12648,12651,12653,12655,12657,12660,12662,12664,12666,12669,12671,12673,12675,12678,12680,12682,12684,12687,12689,12691,12693,12696,12698],{"class":141,"line":4874},[139,12641,5732],{"class":145},[139,12643,3474],{"class":149},[139,12645,634],{"class":160},[139,12647,3531],{"class":153},[139,12649,12650],{"class":160},"姓名：\"",[139,12652,3474],{"class":149},[139,12654,12509],{"class":145},[139,12656,1147],{"class":149},[139,12658,12659],{"class":145},"i)->name",[139,12661,3474],{"class":149},[139,12663,634],{"class":160},[139,12665,3531],{"class":153},[139,12667,12668],{"class":160},"年龄：\"",[139,12670,3474],{"class":149},[139,12672,12509],{"class":145},[139,12674,1147],{"class":149},[139,12676,12677],{"class":145},"i)->age",[139,12679,3474],{"class":149},[139,12681,634],{"class":160},[139,12683,3531],{"class":153},[139,12685,12686],{"class":160},"性别：\"",[139,12688,3474],{"class":149},[139,12690,12509],{"class":145},[139,12692,1147],{"class":149},[139,12694,12695],{"class":145},"i)->gender",[139,12697,3474],{"class":149},[139,12699,3496],{"class":145},[139,12701,12702],{"class":141,"line":4882},[139,12703,4472],{"class":145},[139,12705,12706],{"class":141,"line":4887},[139,12707,3862],{"class":145},[139,12709,12710,12712,12714],{"class":141,"line":4893},[139,12711,2461],{"class":149},[139,12713,4259],{"class":781},[139,12715,4262],{"class":145},[139,12717,12718],{"class":141,"line":4899},[139,12719,3843],{"class":145},[139,12721,12722],{"class":141,"line":4904},[139,12723,12724],{"class":2512},"    \u002F\u002F定义结构体变量\n",[139,12726,12727,12730,12732,12734],{"class":141,"line":10222},[139,12728,12729],{"class":145},"    Sanguo s1[",[139,12731,1481],{"class":153},[139,12733,3373],{"class":145},[139,12735,7186],{"class":149},[139,12737,12738],{"class":141,"line":10246},[139,12739,4315],{"class":145},[139,12741,12742,12744,12746,12748,12750,12752,12754],{"class":141,"line":10251},[139,12743,7195],{"class":145},[139,12745,12226],{"class":160},[139,12747,2816],{"class":145},[139,12749,3210],{"class":153},[139,12751,2816],{"class":145},[139,12753,12235],{"class":160},[139,12755,7208],{"class":145},[139,12757,12758,12760,12762,12764,12766,12768,12770],{"class":141,"line":10257},[139,12759,7195],{"class":145},[139,12761,12244],{"class":160},[139,12763,2816],{"class":145},[139,12765,3185],{"class":153},[139,12767,2816],{"class":145},[139,12769,12235],{"class":160},[139,12771,7208],{"class":145},[139,12773,12774,12776,12778,12780,12782,12784,12786],{"class":141,"line":10284},[139,12775,7195],{"class":145},[139,12777,12261],{"class":160},[139,12779,2816],{"class":145},[139,12781,3135],{"class":153},[139,12783,2816],{"class":145},[139,12785,12235],{"class":160},[139,12787,7208],{"class":145},[139,12789,12790,12792,12794,12796,12798,12800,12802],{"class":141,"line":10289},[139,12791,7195],{"class":145},[139,12793,12278],{"class":160},[139,12795,2816],{"class":145},[139,12797,3160],{"class":153},[139,12799,2816],{"class":145},[139,12801,12235],{"class":160},[139,12803,7208],{"class":145},[139,12805,12806,12808,12810,12812,12814,12816,12818],{"class":141,"line":10295},[139,12807,7195],{"class":145},[139,12809,12295],{"class":160},[139,12811,2816],{"class":145},[139,12813,3110],{"class":153},[139,12815,2816],{"class":145},[139,12817,12304],{"class":160},[139,12819,7208],{"class":145},[139,12821,12822],{"class":141,"line":10307},[139,12823,7229],{"class":145},[139,12825,12826,12828,12830,12832,12835,12837,12840,12842],{"class":141,"line":10319},[139,12827,1082],{"class":149},[139,12829,9605],{"class":145},[139,12831,6481],{"class":149},[139,12833,12834],{"class":145},"(s1)",[139,12836,6487],{"class":149},[139,12838,12839],{"class":145},"(s1[",[139,12841,2634],{"class":153},[139,12843,6136],{"class":145},[139,12845,12846,12849,12851,12854,12856,12859,12862,12864],{"class":141,"line":10331},[139,12847,12848],{"class":145},"    Sanguo ",[139,12850,2892],{"class":149},[139,12852,12853],{"class":145},"s ",[139,12855,150],{"class":149},[139,12857,12858],{"class":149}," &",[139,12860,12861],{"class":145},"s1[",[139,12863,2634],{"class":153},[139,12865,6968],{"class":145},[139,12867,12868],{"class":141,"line":11990},[139,12869,12870],{"class":2512},"    \u002F\u002F排序前：\n",[139,12872,12873,12875,12877,12880,12882],{"class":141,"line":12015},[139,12874,8803],{"class":145},[139,12876,3474],{"class":149},[139,12878,12879],{"class":160}," \"排序前：\"",[139,12881,3742],{"class":149},[139,12883,11114],{"class":145},[139,12885,12886,12888],{"class":141,"line":12038},[139,12887,12189],{"class":781},[139,12889,12890],{"class":145},"(s,len);\n",[139,12892,12893],{"class":141,"line":12062},[139,12894,12895],{"class":2512},"    \u002F\u002F调用排序函数\n",[139,12897,12898,12900],{"class":141,"line":12067},[139,12899,9872],{"class":781},[139,12901,12890],{"class":145},[139,12903,12904],{"class":141,"line":12072},[139,12905,12906],{"class":2512},"    \u002F\u002F排序后\n",[139,12908,12909,12911,12913,12916,12918],{"class":141,"line":12077},[139,12910,8803],{"class":145},[139,12912,3474],{"class":149},[139,12914,12915],{"class":160}," \"排序后：\"",[139,12917,3742],{"class":149},[139,12919,11114],{"class":145},[139,12921,12922,12924],{"class":141,"line":12086},[139,12923,12189],{"class":781},[139,12925,12890],{"class":145},[139,12927,12928],{"class":141,"line":12091},[139,12929,3862],{"class":145},[19,12931,12932,12933,12935],{},"注意：使用指针时直接用传首地址**&s",[139,12934,2634],{},"**",[2348,12937,12938],{},"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":135,"searchDepth":210,"depth":210,"links":12940},[12941,12942,12943,12944,12945,12946,12947],{"id":9977,"depth":210,"text":9978},{"id":10339,"depth":210,"text":10340},{"id":10608,"depth":210,"text":10609},{"id":10773,"depth":210,"text":10774},{"id":10989,"depth":210,"text":10990},{"id":11310,"depth":210,"text":11311},{"id":11538,"depth":210,"text":11539},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9966,"description":9974},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12954,"title":12955,"body":12956,"description":135,"extension":2385,"meta":14298,"navigation":842,"path":14299,"seo":14300,"stem":14301,"__hash__":14302},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12957,"toc":14292},[12958,12961,12965,12971,12985,12990,12993,12997,13004,13010,13013,13020,13026,13031,13034,13037,13040,13603,13606,13620,13624,13629,13645,13785,13788,13794,13797,13802,13810,13918,13921,13926,13929,13934,13937,13943,13946,14289],[10,12959,12955],{"id":12960},"_5程序内存模型",[14,12962,12964],{"id":12963},"_51内存分区模型","5.1内存分区模型",[19,12966,12967,12968],{},"C++程序在执行时，将内存大方向划分为",[1674,12969,12970],{},"4个区域",[3437,12972,12973,12976,12979,12982],{},[1763,12974,12975],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1763,12977,12978],{},"全局区：存放全局变量和静态变量以及常量",[1763,12980,12981],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1763,12983,12984],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12986,12987],{},[1674,12988,12989],{},"内存四区意义：",[19,12991,12992],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1217,12994,12996],{"id":12995},"_511程序运行前","5.1.1程序运行前",[19,12998,12999,13000,13003],{},"​\t在程序编译后，生成了exe可执行程序，",[1674,13001,13002],{},"未执行该程序前","分为两个区域",[19,13005,13006,13007],{},"​\t",[1674,13008,13009],{},"代码区：",[19,13011,13012],{},"​\t\t存放 CPU 执行的机器指令",[19,13014,13015,13016,13019],{},"​\t\t代码区是",[1674,13017,13018],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13021,13015,13022,13025],{},[1674,13023,13024],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13027,13006,13028],{},[1674,13029,13030],{},"全局区：",[19,13032,13033],{},"​\t\t全局变量和静态变量存放在此.",[19,13035,13036],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13038,13039],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[130,13041,13043],{"className":2447,"code":13042,"language":2449,"meta":135,"style":135},"\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",[50,13044,13045,13050,13063,13076,13080,13085,13100,13115,13119,13128,13132,13137,13149,13162,13166,13171,13197,13223,13227,13254,13280,13284,13289,13305,13320,13324,13350,13376,13380,13405,13430,13434,13460,13486,13490,13506,13521,13547,13573,13577,13587,13591,13599],{"__ignoreMap":135},[139,13046,13047],{"class":141,"line":142},[139,13048,13049],{"class":2512},"\u002F\u002F全局变量\n",[139,13051,13052,13054,13057,13059,13061],{"class":141,"line":210},[139,13053,2461],{"class":149},[139,13055,13056],{"class":145}," g_a ",[139,13058,150],{"class":149},[139,13060,4323],{"class":153},[139,13062,3591],{"class":145},[139,13064,13065,13067,13070,13072,13074],{"class":141,"line":254},[139,13066,2461],{"class":149},[139,13068,13069],{"class":145}," g_b ",[139,13071,150],{"class":149},[139,13073,4323],{"class":153},[139,13075,3591],{"class":145},[139,13077,13078],{"class":141,"line":262},[139,13079,843],{"emptyLinePlaceholder":842},[139,13081,13082],{"class":141,"line":313},[139,13083,13084],{"class":2512},"\u002F\u002F全局常量\n",[139,13086,13087,13089,13091,13094,13096,13098],{"class":141,"line":462},[139,13088,9066],{"class":149},[139,13090,154],{"class":149},[139,13092,13093],{"class":145}," c_g_a ",[139,13095,150],{"class":149},[139,13097,4323],{"class":153},[139,13099,3591],{"class":145},[139,13101,13102,13104,13106,13109,13111,13113],{"class":141,"line":474},[139,13103,9066],{"class":149},[139,13105,154],{"class":149},[139,13107,13108],{"class":145}," c_g_b ",[139,13110,150],{"class":149},[139,13112,4323],{"class":153},[139,13114,3591],{"class":145},[139,13116,13117],{"class":141,"line":484},[139,13118,843],{"emptyLinePlaceholder":842},[139,13120,13121,13123,13125],{"class":141,"line":989},[139,13122,2461],{"class":149},[139,13124,4259],{"class":781},[139,13126,13127],{"class":145},"() {\n",[139,13129,13130],{"class":141,"line":994},[139,13131,843],{"emptyLinePlaceholder":842},[139,13133,13134],{"class":141,"line":999},[139,13135,13136],{"class":2512},"    \u002F\u002F局部变量\n",[139,13138,13139,13141,13143,13145,13147],{"class":141,"line":1006},[139,13140,1082],{"class":149},[139,13142,1144],{"class":145},[139,13144,150],{"class":149},[139,13146,4323],{"class":153},[139,13148,3591],{"class":145},[139,13150,13151,13153,13156,13158,13160],{"class":141,"line":1027},[139,13152,1082],{"class":149},[139,13154,13155],{"class":145}," b ",[139,13157,150],{"class":149},[139,13159,4323],{"class":153},[139,13161,3591],{"class":145},[139,13163,13164],{"class":141,"line":1040},[139,13165,843],{"emptyLinePlaceholder":842},[139,13167,13168],{"class":141,"line":2160},[139,13169,13170],{"class":2512},"    \u002F\u002F打印地址\n",[139,13172,13173,13175,13177,13180,13182,13184,13186,13188,13190,13193,13195],{"class":141,"line":2188},[139,13174,8803],{"class":145},[139,13176,3474],{"class":149},[139,13178,13179],{"class":160}," \"局部变量a地址为： \"",[139,13181,3742],{"class":149},[139,13183,549],{"class":145},[139,13185,2461],{"class":149},[139,13187,2867],{"class":145},[139,13189,2791],{"class":149},[139,13191,13192],{"class":145},"a ",[139,13194,3474],{"class":149},[139,13196,11114],{"class":145},[139,13198,13199,13201,13203,13206,13208,13210,13212,13214,13216,13219,13221],{"class":141,"line":3944},[139,13200,8803],{"class":145},[139,13202,3474],{"class":149},[139,13204,13205],{"class":160}," \"局部变量b地址为： \"",[139,13207,3742],{"class":149},[139,13209,549],{"class":145},[139,13211,2461],{"class":149},[139,13213,2867],{"class":145},[139,13215,2791],{"class":149},[139,13217,13218],{"class":145},"b ",[139,13220,3474],{"class":149},[139,13222,11114],{"class":145},[139,13224,13225],{"class":141,"line":3963},[139,13226,843],{"emptyLinePlaceholder":842},[139,13228,13229,13231,13233,13236,13238,13241,13243,13245,13247,13250,13252],{"class":141,"line":3968},[139,13230,8803],{"class":145},[139,13232,3474],{"class":149},[139,13234,13235],{"class":160}," \"全局变量g_a地址为： \"",[139,13237,3742],{"class":149},[139,13239,13240],{"class":145},"  (",[139,13242,2461],{"class":149},[139,13244,2867],{"class":145},[139,13246,2791],{"class":149},[139,13248,13249],{"class":145},"g_a ",[139,13251,3474],{"class":149},[139,13253,11114],{"class":145},[139,13255,13256,13258,13260,13263,13265,13267,13269,13271,13273,13276,13278],{"class":141,"line":3982},[139,13257,8803],{"class":145},[139,13259,3474],{"class":149},[139,13261,13262],{"class":160}," \"全局变量g_b地址为： \"",[139,13264,3742],{"class":149},[139,13266,13240],{"class":145},[139,13268,2461],{"class":149},[139,13270,2867],{"class":145},[139,13272,2791],{"class":149},[139,13274,13275],{"class":145},"g_b ",[139,13277,3474],{"class":149},[139,13279,11114],{"class":145},[139,13281,13282],{"class":141,"line":3987},[139,13283,843],{"emptyLinePlaceholder":842},[139,13285,13286],{"class":141,"line":4014},[139,13287,13288],{"class":2512},"    \u002F\u002F静态变量\n",[139,13290,13291,13294,13296,13299,13301,13303],{"class":141,"line":4019},[139,13292,13293],{"class":149},"    static",[139,13295,154],{"class":149},[139,13297,13298],{"class":145}," s_a ",[139,13300,150],{"class":149},[139,13302,4323],{"class":153},[139,13304,3591],{"class":145},[139,13306,13307,13309,13311,13314,13316,13318],{"class":141,"line":4036},[139,13308,13293],{"class":149},[139,13310,154],{"class":149},[139,13312,13313],{"class":145}," s_b ",[139,13315,150],{"class":149},[139,13317,4323],{"class":153},[139,13319,3591],{"class":145},[139,13321,13322],{"class":141,"line":4041},[139,13323,843],{"emptyLinePlaceholder":842},[139,13325,13326,13328,13330,13333,13335,13337,13339,13341,13343,13346,13348],{"class":141,"line":4046},[139,13327,8803],{"class":145},[139,13329,3474],{"class":149},[139,13331,13332],{"class":160}," \"静态变量s_a地址为： \"",[139,13334,3742],{"class":149},[139,13336,549],{"class":145},[139,13338,2461],{"class":149},[139,13340,2867],{"class":145},[139,13342,2791],{"class":149},[139,13344,13345],{"class":145},"s_a ",[139,13347,3474],{"class":149},[139,13349,11114],{"class":145},[139,13351,13352,13354,13356,13359,13361,13363,13365,13367,13369,13372,13374],{"class":141,"line":4051},[139,13353,8803],{"class":145},[139,13355,3474],{"class":149},[139,13357,13358],{"class":160}," \"静态变量s_b地址为： \"",[139,13360,3742],{"class":149},[139,13362,549],{"class":145},[139,13364,2461],{"class":149},[139,13366,2867],{"class":145},[139,13368,2791],{"class":149},[139,13370,13371],{"class":145},"s_b ",[139,13373,3474],{"class":149},[139,13375,11114],{"class":145},[139,13377,13378],{"class":141,"line":4065},[139,13379,843],{"emptyLinePlaceholder":842},[139,13381,13382,13384,13386,13389,13391,13393,13395,13397,13399,13401,13403],{"class":141,"line":4070},[139,13383,8803],{"class":145},[139,13385,3474],{"class":149},[139,13387,13388],{"class":160}," \"字符串常量地址为： \"",[139,13390,3742],{"class":149},[139,13392,549],{"class":145},[139,13394,2461],{"class":149},[139,13396,2867],{"class":145},[139,13398,2791],{"class":149},[139,13400,3491],{"class":160},[139,13402,3742],{"class":149},[139,13404,11114],{"class":145},[139,13406,13407,13409,13411,13413,13415,13417,13419,13421,13423,13426,13428],{"class":141,"line":4860},[139,13408,8803],{"class":145},[139,13410,3474],{"class":149},[139,13412,13388],{"class":160},[139,13414,3742],{"class":149},[139,13416,549],{"class":145},[139,13418,2461],{"class":149},[139,13420,2867],{"class":145},[139,13422,2791],{"class":149},[139,13424,13425],{"class":160},"\"hello world1\"",[139,13427,3742],{"class":149},[139,13429,11114],{"class":145},[139,13431,13432],{"class":141,"line":4874},[139,13433,843],{"emptyLinePlaceholder":842},[139,13435,13436,13438,13440,13443,13445,13447,13449,13451,13453,13456,13458],{"class":141,"line":4882},[139,13437,8803],{"class":145},[139,13439,3474],{"class":149},[139,13441,13442],{"class":160}," \"全局常量c_g_a地址为： \"",[139,13444,3742],{"class":149},[139,13446,549],{"class":145},[139,13448,2461],{"class":149},[139,13450,2867],{"class":145},[139,13452,2791],{"class":149},[139,13454,13455],{"class":145},"c_g_a ",[139,13457,3474],{"class":149},[139,13459,11114],{"class":145},[139,13461,13462,13464,13466,13469,13471,13473,13475,13477,13479,13482,13484],{"class":141,"line":4887},[139,13463,8803],{"class":145},[139,13465,3474],{"class":149},[139,13467,13468],{"class":160}," \"全局常量c_g_b地址为： \"",[139,13470,3742],{"class":149},[139,13472,549],{"class":145},[139,13474,2461],{"class":149},[139,13476,2867],{"class":145},[139,13478,2791],{"class":149},[139,13480,13481],{"class":145},"c_g_b ",[139,13483,3474],{"class":149},[139,13485,11114],{"class":145},[139,13487,13488],{"class":141,"line":4893},[139,13489,843],{"emptyLinePlaceholder":842},[139,13491,13492,13495,13497,13500,13502,13504],{"class":141,"line":4899},[139,13493,13494],{"class":149},"    const",[139,13496,154],{"class":149},[139,13498,13499],{"class":145}," c_l_a ",[139,13501,150],{"class":149},[139,13503,4323],{"class":153},[139,13505,3591],{"class":145},[139,13507,13508,13510,13512,13515,13517,13519],{"class":141,"line":4904},[139,13509,13494],{"class":149},[139,13511,154],{"class":149},[139,13513,13514],{"class":145}," c_l_b ",[139,13516,150],{"class":149},[139,13518,4323],{"class":153},[139,13520,3591],{"class":145},[139,13522,13523,13525,13527,13530,13532,13534,13536,13538,13540,13543,13545],{"class":141,"line":10222},[139,13524,8803],{"class":145},[139,13526,3474],{"class":149},[139,13528,13529],{"class":160}," \"局部常量c_l_a地址为： \"",[139,13531,3742],{"class":149},[139,13533,549],{"class":145},[139,13535,2461],{"class":149},[139,13537,2867],{"class":145},[139,13539,2791],{"class":149},[139,13541,13542],{"class":145},"c_l_a ",[139,13544,3474],{"class":149},[139,13546,11114],{"class":145},[139,13548,13549,13551,13553,13556,13558,13560,13562,13564,13566,13569,13571],{"class":141,"line":10246},[139,13550,8803],{"class":145},[139,13552,3474],{"class":149},[139,13554,13555],{"class":160}," \"局部常量c_l_b地址为： \"",[139,13557,3742],{"class":149},[139,13559,549],{"class":145},[139,13561,2461],{"class":149},[139,13563,2867],{"class":145},[139,13565,2791],{"class":149},[139,13567,13568],{"class":145},"c_l_b ",[139,13570,3474],{"class":149},[139,13572,11114],{"class":145},[139,13574,13575],{"class":141,"line":10251},[139,13576,843],{"emptyLinePlaceholder":842},[139,13578,13579,13581,13583,13585],{"class":141,"line":10257},[139,13580,4588],{"class":781},[139,13582,157],{"class":145},[139,13584,4593],{"class":160},[139,13586,5002],{"class":145},[139,13588,13589],{"class":141,"line":10284},[139,13590,843],{"emptyLinePlaceholder":842},[139,13592,13593,13595,13597],{"class":141,"line":10289},[139,13594,978],{"class":149},[139,13596,799],{"class":153},[139,13598,3591],{"class":145},[139,13600,13601],{"class":141,"line":10295},[139,13602,3862],{"class":145},[19,13604,13605],{},"总结：",[3437,13607,13608,13611,13614,13617],{},[1763,13609,13610],{},"c++中程序运行前分为全局区和代码区",[1763,13612,13613],{},"代码区特点是共享和只读",[1763,13615,13616],{},"全局区中存放全局变量、静态变量、常量",[1763,13618,13619],{},"常量区中存放const修饰的全局常量和字符串常量",[1217,13621,13623],{"id":13622},"_512程序运行后","5.1.2程序运行后",[1760,13625,13626],{},[1763,13627,13628],{},"栈区：",[3437,13630,13631,13638],{},[1763,13632,13633,13634,13637],{},"由编译器自动分配释放, 存放",[1674,13635,13636],{},"函数的参数值,局部变量","等",[1763,13639,13640,13641,13644],{},"注意事项：",[1674,13642,13643],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[130,13646,13648],{"className":2447,"code":13647,"language":2449,"meta":135,"style":135},"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",[50,13649,13650,13661,13665,13680,13692,13696,13700,13708,13713,13728,13746,13763,13773,13781],{"__ignoreMap":135},[139,13651,13652,13654,13656,13659],{"class":141,"line":142},[139,13653,2461],{"class":149},[139,13655,8792],{"class":149},[139,13657,13658],{"class":781}," func",[139,13660,4262],{"class":145},[139,13662,13663],{"class":141,"line":210},[139,13664,3843],{"class":145},[139,13666,13667,13669,13671,13673,13675,13677],{"class":141,"line":254},[139,13668,1082],{"class":149},[139,13670,1144],{"class":145},[139,13672,150],{"class":149},[139,13674,4323],{"class":153},[139,13676,2509],{"class":145},[139,13678,13679],{"class":2512}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[139,13681,13682,13684,13686,13689],{"class":141,"line":262},[139,13683,978],{"class":149},[139,13685,12858],{"class":149},[139,13687,13688],{"class":145},"a;",[139,13690,13691],{"class":2512}," \u002F\u002F放回局部变量的地址\n",[139,13693,13694],{"class":141,"line":313},[139,13695,3862],{"class":145},[139,13697,13698],{"class":141,"line":462},[139,13699,843],{"emptyLinePlaceholder":842},[139,13701,13702,13704,13706],{"class":141,"line":474},[139,13703,2461],{"class":149},[139,13705,4259],{"class":781},[139,13707,13127],{"class":145},[139,13709,13710],{"class":141,"line":484},[139,13711,13712],{"class":2512},"    \u002F\u002F接受func的返回值\n",[139,13714,13715,13717,13719,13722,13724,13726],{"class":141,"line":989},[139,13716,1082],{"class":149},[139,13718,8792],{"class":149},[139,13720,13721],{"class":145},"p ",[139,13723,150],{"class":149},[139,13725,13658],{"class":781},[139,13727,7910],{"class":145},[139,13729,13730,13732,13734,13736,13738,13740,13743],{"class":141,"line":994},[139,13731,8803],{"class":145},[139,13733,3474],{"class":149},[139,13735,8792],{"class":149},[139,13737,13721],{"class":145},[139,13739,3474],{"class":149},[139,13741,13742],{"class":145}," endl;",[139,13744,13745],{"class":2512}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[139,13747,13748,13750,13752,13754,13756,13758,13760],{"class":141,"line":999},[139,13749,8803],{"class":145},[139,13751,3474],{"class":149},[139,13753,8792],{"class":149},[139,13755,13721],{"class":145},[139,13757,3474],{"class":149},[139,13759,13742],{"class":145},[139,13761,13762],{"class":2512}," \u002F\u002F第二次这个数据不再保留\n",[139,13764,13765,13767,13769,13771],{"class":141,"line":1006},[139,13766,4588],{"class":781},[139,13768,157],{"class":145},[139,13770,4593],{"class":160},[139,13772,5002],{"class":145},[139,13774,13775,13777,13779],{"class":141,"line":1027},[139,13776,978],{"class":149},[139,13778,799],{"class":153},[139,13780,3591],{"class":145},[139,13782,13783],{"class":141,"line":1040},[139,13784,3862],{"class":145},[19,13786,13787],{},"输出结果：",[19,13789,13790],{},[3760,13791],{"alt":13792,"src":13793},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13795,13796],{},"总结：不要返回局部变量的地址",[1760,13798,13799],{"start":210},[1763,13800,13801],{},"堆区",[3437,13803,13804,13807],{},[1763,13805,13806],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1763,13808,13809],{},"在c++中主要利用new在堆区开辟内存",[130,13811,13813],{"className":2447,"code":13812,"language":2449,"meta":135,"style":135},"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",[50,13814,13815,13830,13834,13839,13860,13867,13871,13879,13883,13888,13902,13914],{"__ignoreMap":135},[139,13816,13817,13819,13822,13825,13827],{"class":141,"line":142},[139,13818,2461],{"class":149},[139,13820,13821],{"class":149},"  *",[139,13823,13824],{"class":781},"func",[139,13826,4710],{"class":145},[139,13828,13829],{"class":2512},"  \u002F\u002F函数返回指针\n",[139,13831,13832],{"class":141,"line":210},[139,13833,3843],{"class":145},[139,13835,13836],{"class":141,"line":254},[139,13837,13838],{"class":2512},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[139,13840,13841,13843,13845,13847,13849,13852,13854,13856,13858],{"class":141,"line":262},[139,13842,6425],{"class":149},[139,13844,8792],{"class":149},[139,13846,19],{"class":145},[139,13848,150],{"class":149},[139,13850,13851],{"class":149}," new",[139,13853,154],{"class":149},[139,13855,157],{"class":145},[139,13857,536],{"class":153},[139,13859,5002],{"class":145},[139,13861,13862,13864],{"class":141,"line":313},[139,13863,6659],{"class":149},[139,13865,13866],{"class":145}," p;\n",[139,13868,13869],{"class":141,"line":462},[139,13870,3862],{"class":145},[139,13872,13873,13875,13877],{"class":141,"line":474},[139,13874,2461],{"class":149},[139,13876,4259],{"class":781},[139,13878,4262],{"class":145},[139,13880,13881],{"class":141,"line":484},[139,13882,3843],{"class":145},[139,13884,13885],{"class":141,"line":989},[139,13886,13887],{"class":2512},"    \u002F\u002F在堆区开辟数据\n",[139,13889,13890,13892,13894,13896,13898,13900],{"class":141,"line":994},[139,13891,1082],{"class":149},[139,13893,8792],{"class":149},[139,13895,19],{"class":145},[139,13897,150],{"class":149},[139,13899,13824],{"class":781},[139,13901,7910],{"class":145},[139,13903,13904,13906,13908,13910,13912],{"class":141,"line":999},[139,13905,3848],{"class":145},[139,13907,8693],{"class":149},[139,13909,19],{"class":145},[139,13911,3474],{"class":149},[139,13913,3496],{"class":145},[139,13915,13916],{"class":141,"line":1006},[139,13917,3862],{"class":145},[19,13919,13920],{},"图片展示：",[19,13922,13923],{},[3760,13924],{"alt":13792,"src":13925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13927,13928],{},"堆区内存由程序员管生死！！！",[1760,13930,13931],{"start":254},[1763,13932,13933],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13935,13936],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13938,13939,13940],{},"​语法：",[50,13941,13942],{}," new 数据类型",[19,13944,13945],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[130,13947,13949],{"className":2447,"code":13948,"language":2449,"meta":135,"style":135},"\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",[50,13950,13951,13956,13966,13970,13975,13980,14002,14006,14014,14018,14032,14044,14056,14068,14073,14078,14089,14093,14098,14106,14110,14115,14137,14163,14167,14185,14189,14215,14219,14231,14235,14240,14245,14253,14257,14261,14269,14273,14279,14285],{"__ignoreMap":135},[139,13952,13953],{"class":141,"line":142},[139,13954,13955],{"class":2512},"\u002F\u002F1.new的基本语法\n",[139,13957,13958,13960,13962,13964],{"class":141,"line":210},[139,13959,2461],{"class":149},[139,13961,8792],{"class":149},[139,13963,13824],{"class":781},[139,13965,4262],{"class":145},[139,13967,13968],{"class":141,"line":254},[139,13969,3843],{"class":145},[139,13971,13972],{"class":141,"line":262},[139,13973,13974],{"class":2512},"    \u002F\u002F在堆区创建整型数据\n",[139,13976,13977],{"class":141,"line":313},[139,13978,13979],{"class":2512},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[139,13981,13982,13984,13986,13988,13991,13993,13995,13997,13999],{"class":141,"line":462},[139,13983,1082],{"class":149},[139,13985,8792],{"class":149},[139,13987,19],{"class":145},[139,13989,13990],{"class":149},"=new",[139,13992,154],{"class":149},[139,13994,157],{"class":145},[139,13996,536],{"class":153},[139,13998,8240],{"class":145},[139,14000,14001],{"class":2512},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[139,14003,14004],{"class":141,"line":474},[139,14005,3862],{"class":145},[139,14007,14008,14010,14012],{"class":141,"line":484},[139,14009,7638],{"class":149},[139,14011,7862],{"class":781},[139,14013,4262],{"class":145},[139,14015,14016],{"class":141,"line":989},[139,14017,3843],{"class":145},[139,14019,14020,14022,14024,14026,14028,14030],{"class":141,"line":994},[139,14021,1082],{"class":149},[139,14023,8792],{"class":149},[139,14025,19],{"class":145},[139,14027,150],{"class":149},[139,14029,13824],{"class":781},[139,14031,7910],{"class":145},[139,14033,14034,14036,14038,14040,14042],{"class":141,"line":999},[139,14035,3848],{"class":145},[139,14037,8693],{"class":149},[139,14039,19],{"class":145},[139,14041,3474],{"class":149},[139,14043,3496],{"class":145},[139,14045,14046,14048,14050,14052,14054],{"class":141,"line":1006},[139,14047,3848],{"class":145},[139,14049,8693],{"class":149},[139,14051,19],{"class":145},[139,14053,3474],{"class":149},[139,14055,3496],{"class":145},[139,14057,14058,14060,14062,14064,14066],{"class":141,"line":1027},[139,14059,3848],{"class":145},[139,14061,8693],{"class":149},[139,14063,19],{"class":145},[139,14065,3474],{"class":149},[139,14067,3496],{"class":145},[139,14069,14070],{"class":141,"line":1040},[139,14071,14072],{"class":2512},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[139,14074,14075],{"class":141,"line":2160},[139,14076,14077],{"class":2512},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[139,14079,14080,14083,14086],{"class":141,"line":2188},[139,14081,14082],{"class":149},"    delete",[139,14084,14085],{"class":145}," p;",[139,14087,14088],{"class":2512},"\u002F\u002F删除这块地址\n",[139,14090,14091],{"class":141,"line":3944},[139,14092,3862],{"class":145},[139,14094,14095],{"class":141,"line":3963},[139,14096,14097],{"class":2512},"\u002F\u002F2.在堆区利用new开辟数组\n",[139,14099,14100,14102,14104],{"class":141,"line":3968},[139,14101,7638],{"class":149},[139,14103,7931],{"class":781},[139,14105,4262],{"class":145},[139,14107,14108],{"class":141,"line":3982},[139,14109,3843],{"class":145},[139,14111,14112],{"class":141,"line":3987},[139,14113,14114],{"class":2512},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[139,14116,14117,14119,14121,14123,14125,14127,14129,14131,14134],{"class":141,"line":4014},[139,14118,1082],{"class":149},[139,14120,8792],{"class":149},[139,14122,6160],{"class":145},[139,14124,13990],{"class":149},[139,14126,154],{"class":149},[139,14128,3325],{"class":145},[139,14130,536],{"class":153},[139,14132,14133],{"class":145},"];",[139,14135,14136],{"class":2512},"\u002F\u002F10代表数组有10个元素\n",[139,14138,14139,14141,14143,14145,14147,14149,14151,14153,14155,14157,14159,14161],{"class":141,"line":4019},[139,14140,5482],{"class":149},[139,14142,549],{"class":145},[139,14144,2461],{"class":149},[139,14146,5314],{"class":145},[139,14148,150],{"class":149},[139,14150,2634],{"class":153},[139,14152,5321],{"class":145},[139,14154,796],{"class":149},[139,14156,536],{"class":153},[139,14158,5321],{"class":145},[139,14160,4577],{"class":149},[139,14162,164],{"class":145},[139,14164,14165],{"class":141,"line":4036},[139,14166,4315],{"class":145},[139,14168,14169,14172,14174,14176,14178,14180,14182],{"class":141,"line":4041},[139,14170,14171],{"class":145},"        arr[i]",[139,14173,150],{"class":149},[139,14175,2879],{"class":145},[139,14177,1147],{"class":149},[139,14179,1017],{"class":153},[139,14181,2509],{"class":145},[139,14183,14184],{"class":2512},"\u002F\u002F给10个元素赋值100～109\n",[139,14186,14187],{"class":141,"line":4046},[139,14188,4472],{"class":145},[139,14190,14191,14193,14195,14197,14199,14201,14203,14205,14207,14209,14211,14213],{"class":141,"line":4051},[139,14192,5482],{"class":149},[139,14194,549],{"class":145},[139,14196,2461],{"class":149},[139,14198,5314],{"class":145},[139,14200,150],{"class":149},[139,14202,2634],{"class":153},[139,14204,5321],{"class":145},[139,14206,796],{"class":149},[139,14208,536],{"class":153},[139,14210,5321],{"class":145},[139,14212,4577],{"class":149},[139,14214,164],{"class":145},[139,14216,14217],{"class":141,"line":4065},[139,14218,4315],{"class":145},[139,14220,14221,14223,14225,14227,14229],{"class":141,"line":4070},[139,14222,5732],{"class":145},[139,14224,3474],{"class":149},[139,14226,6632],{"class":145},[139,14228,3474],{"class":149},[139,14230,3496],{"class":145},[139,14232,14233],{"class":141,"line":4860},[139,14234,4472],{"class":145},[139,14236,14237],{"class":141,"line":4874},[139,14238,14239],{"class":2512},"    \u002F\u002F释放堆区数组\n",[139,14241,14242],{"class":141,"line":4882},[139,14243,14244],{"class":2512},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[139,14246,14247,14250],{"class":141,"line":4887},[139,14248,14249],{"class":149},"    delete[]",[139,14251,14252],{"class":145}," arr;\n",[139,14254,14255],{"class":141,"line":4893},[139,14256,3862],{"class":145},[139,14258,14259],{"class":141,"line":4899},[139,14260,843],{"emptyLinePlaceholder":842},[139,14262,14263,14265,14267],{"class":141,"line":4904},[139,14264,2461],{"class":149},[139,14266,4259],{"class":781},[139,14268,4262],{"class":145},[139,14270,14271],{"class":141,"line":10222},[139,14272,3843],{"class":145},[139,14274,14275,14277],{"class":141,"line":10246},[139,14276,7907],{"class":781},[139,14278,7910],{"class":145},[139,14280,14281,14283],{"class":141,"line":10251},[139,14282,7976],{"class":781},[139,14284,7910],{"class":145},[139,14286,14287],{"class":141,"line":10257},[139,14288,3862],{"class":145},[2348,14290,14291],{},"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":135,"searchDepth":210,"depth":210,"links":14293},[14294],{"id":12963,"depth":210,"text":12964,"children":14295},[14296,14297],{"id":12995,"depth":254,"text":12996},{"id":13622,"depth":254,"text":13623},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12955,"description":135},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14304,"title":14305,"body":14306,"description":135,"extension":2385,"meta":15786,"navigation":842,"path":15787,"seo":15788,"stem":15789,"__hash__":15790},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14307,"toc":15778},[14308,14311,14315,14318,14321,14490,14494,14499,14516,14521,14673,14677,14680,14683,15076,15080,15083,15088,15091,15403,15407,15413,15573,15575,15583,15587,15590,15597,15775],[10,14309,14305],{"id":14310},"_6引用",[14,14312,14314],{"id":14313},"_61引用基本用法","6.1引用基本用法",[19,14316,14317],{},"引用的本质：给变量起别名",[19,14319,14320],{},"语法：数据类型 &别名=原名",[130,14322,14324],{"className":2447,"code":14323,"language":2449,"meta":135,"style":135},"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",[50,14325,14326,14334,14338,14350,14362,14366,14385,14404,14408,14419,14423,14442,14460,14464,14474,14478,14486],{"__ignoreMap":135},[139,14327,14328,14330,14332],{"class":141,"line":142},[139,14329,2461],{"class":149},[139,14331,4259],{"class":781},[139,14333,13127],{"class":145},[139,14335,14336],{"class":141,"line":210},[139,14337,843],{"emptyLinePlaceholder":842},[139,14339,14340,14342,14344,14346,14348],{"class":141,"line":254},[139,14341,1082],{"class":149},[139,14343,1144],{"class":145},[139,14345,150],{"class":149},[139,14347,4323],{"class":153},[139,14349,3591],{"class":145},[139,14351,14352,14354,14356,14358,14360],{"class":141,"line":262},[139,14353,1082],{"class":149},[139,14355,12858],{"class":149},[139,14357,13218],{"class":145},[139,14359,150],{"class":149},[139,14361,3730],{"class":145},[139,14363,14364],{"class":141,"line":313},[139,14365,843],{"emptyLinePlaceholder":842},[139,14367,14368,14370,14372,14375,14377,14379,14381,14383],{"class":141,"line":462},[139,14369,8803],{"class":145},[139,14371,3474],{"class":149},[139,14373,14374],{"class":160}," \"a = \"",[139,14376,3742],{"class":149},[139,14378,1144],{"class":145},[139,14380,3474],{"class":149},[139,14382,13742],{"class":145},[139,14384,9542],{"class":2512},[139,14386,14387,14389,14391,14394,14396,14398,14400,14402],{"class":141,"line":474},[139,14388,8803],{"class":145},[139,14390,3474],{"class":149},[139,14392,14393],{"class":160}," \"b = \"",[139,14395,3742],{"class":149},[139,14397,13155],{"class":145},[139,14399,3474],{"class":149},[139,14401,13742],{"class":145},[139,14403,9542],{"class":2512},[139,14405,14406],{"class":141,"line":484},[139,14407,843],{"emptyLinePlaceholder":842},[139,14409,14410,14413,14415,14417],{"class":141,"line":989},[139,14411,14412],{"class":145},"    b ",[139,14414,150],{"class":149},[139,14416,8028],{"class":153},[139,14418,3591],{"class":145},[139,14420,14421],{"class":141,"line":994},[139,14422,843],{"emptyLinePlaceholder":842},[139,14424,14425,14427,14429,14431,14433,14435,14437,14439],{"class":141,"line":999},[139,14426,8803],{"class":145},[139,14428,3474],{"class":149},[139,14430,14374],{"class":160},[139,14432,3742],{"class":149},[139,14434,1144],{"class":145},[139,14436,3474],{"class":149},[139,14438,13742],{"class":145},[139,14440,14441],{"class":2512},"\u002F\u002F100\n",[139,14443,14444,14446,14448,14450,14452,14454,14456,14458],{"class":141,"line":1006},[139,14445,8803],{"class":145},[139,14447,3474],{"class":149},[139,14449,14393],{"class":160},[139,14451,3742],{"class":149},[139,14453,13155],{"class":145},[139,14455,3474],{"class":149},[139,14457,13742],{"class":145},[139,14459,14441],{"class":2512},[139,14461,14462],{"class":141,"line":1027},[139,14463,843],{"emptyLinePlaceholder":842},[139,14465,14466,14468,14470,14472],{"class":141,"line":1040},[139,14467,4588],{"class":781},[139,14469,157],{"class":145},[139,14471,4593],{"class":160},[139,14473,5002],{"class":145},[139,14475,14476],{"class":141,"line":2160},[139,14477,843],{"emptyLinePlaceholder":842},[139,14479,14480,14482,14484],{"class":141,"line":2188},[139,14481,978],{"class":149},[139,14483,799],{"class":153},[139,14485,3591],{"class":145},[139,14487,14488],{"class":141,"line":3944},[139,14489,3862],{"class":145},[14,14491,14493],{"id":14492},"_62引用的注意事项","6.2引用的注意事项",[1760,14495,14496],{},[1763,14497,14498],{},"引用必须要初始化",[130,14500,14502],{"className":2447,"code":14501,"language":2449,"meta":135,"style":135},"int &b;\u002F\u002F非常错误！\n",[50,14503,14504],{"__ignoreMap":135},[139,14505,14506,14508,14510,14513],{"class":141,"line":142},[139,14507,2461],{"class":149},[139,14509,12858],{"class":149},[139,14511,14512],{"class":145},"b;",[139,14514,14515],{"class":2512},"\u002F\u002F非常错误！\n",[1760,14517,14518],{"start":210},[1763,14519,14520],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[130,14522,14524],{"className":2447,"code":14523,"language":2449,"meta":135,"style":135},"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",[50,14525,14526,14534,14546,14558,14566,14582,14595,14613,14631,14651,14661,14669],{"__ignoreMap":135},[139,14527,14528,14530,14532],{"class":141,"line":142},[139,14529,2461],{"class":149},[139,14531,4259],{"class":781},[139,14533,13127],{"class":145},[139,14535,14536,14538,14540,14542,14544],{"class":141,"line":210},[139,14537,1082],{"class":149},[139,14539,1144],{"class":145},[139,14541,150],{"class":149},[139,14543,4323],{"class":153},[139,14545,3591],{"class":145},[139,14547,14548,14550,14552,14554,14556],{"class":141,"line":254},[139,14549,1082],{"class":149},[139,14551,13155],{"class":145},[139,14553,150],{"class":149},[139,14555,11224],{"class":153},[139,14557,3591],{"class":145},[139,14559,14560,14563],{"class":141,"line":262},[139,14561,14562],{"class":2512},"    \u002F\u002Fint &c;",[139,14564,14565],{"class":2512}," \u002F\u002F错误，引用必须初始化\n",[139,14567,14568,14570,14572,14574,14576,14579],{"class":141,"line":313},[139,14569,1082],{"class":149},[139,14571,12858],{"class":149},[139,14573,5229],{"class":145},[139,14575,150],{"class":149},[139,14577,14578],{"class":145}," a;",[139,14580,14581],{"class":2512}," \u002F\u002F一旦初始化后，就不可以更改\n",[139,14583,14584,14587,14589,14592],{"class":141,"line":462},[139,14585,14586],{"class":145},"    c ",[139,14588,150],{"class":149},[139,14590,14591],{"class":145}," b;",[139,14593,14594],{"class":2512}," \u002F\u002F这是赋值操作，不是更改引用\n",[139,14596,14597,14599,14601,14603,14605,14607,14609,14611],{"class":141,"line":474},[139,14598,8803],{"class":145},[139,14600,3474],{"class":149},[139,14602,14374],{"class":160},[139,14604,3742],{"class":149},[139,14606,1144],{"class":145},[139,14608,3474],{"class":149},[139,14610,13742],{"class":145},[139,14612,9527],{"class":2512},[139,14614,14615,14617,14619,14621,14623,14625,14627,14629],{"class":141,"line":484},[139,14616,8803],{"class":145},[139,14618,3474],{"class":149},[139,14620,14393],{"class":160},[139,14622,3742],{"class":149},[139,14624,13155],{"class":145},[139,14626,3474],{"class":149},[139,14628,13742],{"class":145},[139,14630,9527],{"class":2512},[139,14632,14633,14635,14637,14640,14642,14645,14647,14649],{"class":141,"line":989},[139,14634,8803],{"class":145},[139,14636,3474],{"class":149},[139,14638,14639],{"class":160}," \"c = \"",[139,14641,3742],{"class":149},[139,14643,14644],{"class":145}," c ",[139,14646,3474],{"class":149},[139,14648,13742],{"class":145},[139,14650,9527],{"class":2512},[139,14652,14653,14655,14657,14659],{"class":141,"line":994},[139,14654,4588],{"class":781},[139,14656,157],{"class":145},[139,14658,4593],{"class":160},[139,14660,5002],{"class":145},[139,14662,14663,14665,14667],{"class":141,"line":999},[139,14664,978],{"class":149},[139,14666,799],{"class":153},[139,14668,3591],{"class":145},[139,14670,14671],{"class":141,"line":1006},[139,14672,3862],{"class":145},[14,14674,14676],{"id":14675},"_63引用做函数参数","6.3引用做函数参数",[19,14678,14679],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14681,14682],{},"优点：可以简化指针修改实参",[130,14684,14686],{"className":2447,"code":14685,"language":2449,"meta":135,"style":135},"\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",[50,14687,14688,14693,14715,14726,14736,14745,14749,14753,14758,14780,14792,14804,14814,14818,14822,14827,14849,14859,14867,14875,14879,14883,14891,14895,14907,14919,14923,14934,14960,14964,14984,15008,15012,15022,15046,15050,15060,15064,15072],{"__ignoreMap":135},[139,14689,14690],{"class":141,"line":142},[139,14691,14692],{"class":2512},"\u002F\u002F1. 值传递\n",[139,14694,14695,14697,14700,14702,14704,14706,14708,14710,14712],{"class":141,"line":210},[139,14696,7638],{"class":149},[139,14698,14699],{"class":781}," mySwap01",[139,14701,157],{"class":145},[139,14703,2461],{"class":149},[139,14705,3696],{"class":2111},[139,14707,413],{"class":145},[139,14709,2461],{"class":149},[139,14711,5116],{"class":2111},[139,14713,14714],{"class":145},") {\n",[139,14716,14717,14719,14722,14724],{"class":141,"line":254},[139,14718,1082],{"class":149},[139,14720,14721],{"class":145}," temp ",[139,14723,150],{"class":149},[139,14725,3730],{"class":145},[139,14727,14728,14731,14733],{"class":141,"line":262},[139,14729,14730],{"class":145},"    a ",[139,14732,150],{"class":149},[139,14734,14735],{"class":145}," b;\n",[139,14737,14738,14740,14742],{"class":141,"line":313},[139,14739,14412],{"class":145},[139,14741,150],{"class":149},[139,14743,14744],{"class":145}," temp;\n",[139,14746,14747],{"class":141,"line":462},[139,14748,3862],{"class":145},[139,14750,14751],{"class":141,"line":474},[139,14752,843],{"emptyLinePlaceholder":842},[139,14754,14755],{"class":141,"line":484},[139,14756,14757],{"class":2512},"\u002F\u002F2. 地址传递\n",[139,14759,14760,14762,14765,14767,14770,14772,14774,14776,14778],{"class":141,"line":989},[139,14761,7638],{"class":149},[139,14763,14764],{"class":781}," mySwap02",[139,14766,157],{"class":145},[139,14768,14769],{"class":149},"int*",[139,14771,3696],{"class":2111},[139,14773,413],{"class":145},[139,14775,14769],{"class":149},[139,14777,5116],{"class":2111},[139,14779,14714],{"class":145},[139,14781,14782,14784,14786,14788,14790],{"class":141,"line":994},[139,14783,1082],{"class":149},[139,14785,14721],{"class":145},[139,14787,150],{"class":149},[139,14789,8792],{"class":149},[139,14791,8471],{"class":145},[139,14793,14794,14796,14798,14800,14802],{"class":141,"line":999},[139,14795,8677],{"class":149},[139,14797,13192],{"class":145},[139,14799,150],{"class":149},[139,14801,8792],{"class":149},[139,14803,8343],{"class":145},[139,14805,14806,14808,14810,14812],{"class":141,"line":1006},[139,14807,8677],{"class":149},[139,14809,13218],{"class":145},[139,14811,150],{"class":149},[139,14813,14744],{"class":145},[139,14815,14816],{"class":141,"line":1027},[139,14817,3862],{"class":145},[139,14819,14820],{"class":141,"line":1040},[139,14821,843],{"emptyLinePlaceholder":842},[139,14823,14824],{"class":141,"line":2160},[139,14825,14826],{"class":2512},"\u002F\u002F3. 引用传递\n",[139,14828,14829,14831,14834,14836,14839,14841,14843,14845,14847],{"class":141,"line":2188},[139,14830,7638],{"class":149},[139,14832,14833],{"class":781}," mySwap03",[139,14835,157],{"class":145},[139,14837,14838],{"class":149},"int&",[139,14840,3696],{"class":2111},[139,14842,413],{"class":145},[139,14844,14838],{"class":149},[139,14846,5116],{"class":2111},[139,14848,14714],{"class":145},[139,14850,14851,14853,14855,14857],{"class":141,"line":3944},[139,14852,1082],{"class":149},[139,14854,14721],{"class":145},[139,14856,150],{"class":149},[139,14858,3730],{"class":145},[139,14860,14861,14863,14865],{"class":141,"line":3963},[139,14862,14730],{"class":145},[139,14864,150],{"class":149},[139,14866,14735],{"class":145},[139,14868,14869,14871,14873],{"class":141,"line":3968},[139,14870,14412],{"class":145},[139,14872,150],{"class":149},[139,14874,14744],{"class":145},[139,14876,14877],{"class":141,"line":3982},[139,14878,3862],{"class":145},[139,14880,14881],{"class":141,"line":3987},[139,14882,843],{"emptyLinePlaceholder":842},[139,14884,14885,14887,14889],{"class":141,"line":4014},[139,14886,2461],{"class":149},[139,14888,4259],{"class":781},[139,14890,13127],{"class":145},[139,14892,14893],{"class":141,"line":4019},[139,14894,843],{"emptyLinePlaceholder":842},[139,14896,14897,14899,14901,14903,14905],{"class":141,"line":4036},[139,14898,1082],{"class":149},[139,14900,1144],{"class":145},[139,14902,150],{"class":149},[139,14904,4323],{"class":153},[139,14906,3591],{"class":145},[139,14908,14909,14911,14913,14915,14917],{"class":141,"line":4041},[139,14910,1082],{"class":149},[139,14912,13155],{"class":145},[139,14914,150],{"class":149},[139,14916,11224],{"class":153},[139,14918,3591],{"class":145},[139,14920,14921],{"class":141,"line":4046},[139,14922,843],{"emptyLinePlaceholder":842},[139,14924,14925,14928,14931],{"class":141,"line":4051},[139,14926,14927],{"class":781},"    mySwap01",[139,14929,14930],{"class":145},"(a, b);",[139,14932,14933],{"class":2512},"\u002F\u002F值传递，形参不会修饰实参\n",[139,14935,14936,14938,14940,14943,14945,14947,14949,14952,14954,14956,14958],{"class":141,"line":4065},[139,14937,8803],{"class":145},[139,14939,3474],{"class":149},[139,14941,14942],{"class":160}," \"a:\"",[139,14944,3742],{"class":149},[139,14946,1144],{"class":145},[139,14948,3474],{"class":149},[139,14950,14951],{"class":160}," \" b:\"",[139,14953,3742],{"class":149},[139,14955,13155],{"class":145},[139,14957,3474],{"class":149},[139,14959,11114],{"class":145},[139,14961,14962],{"class":141,"line":4070},[139,14963,843],{"emptyLinePlaceholder":842},[139,14965,14966,14969,14971,14973,14976,14978,14981],{"class":141,"line":4860},[139,14967,14968],{"class":781},"    mySwap02",[139,14970,157],{"class":145},[139,14972,2791],{"class":149},[139,14974,14975],{"class":145},"a, ",[139,14977,2791],{"class":149},[139,14979,14980],{"class":145},"b);",[139,14982,14983],{"class":2512},"\u002F\u002F地址传递，形参会修饰实参\n",[139,14985,14986,14988,14990,14992,14994,14996,14998,15000,15002,15004,15006],{"class":141,"line":4874},[139,14987,8803],{"class":145},[139,14989,3474],{"class":149},[139,14991,14942],{"class":160},[139,14993,3742],{"class":149},[139,14995,1144],{"class":145},[139,14997,3474],{"class":149},[139,14999,14951],{"class":160},[139,15001,3742],{"class":149},[139,15003,13155],{"class":145},[139,15005,3474],{"class":149},[139,15007,11114],{"class":145},[139,15009,15010],{"class":141,"line":4882},[139,15011,843],{"emptyLinePlaceholder":842},[139,15013,15014,15017,15019],{"class":141,"line":4887},[139,15015,15016],{"class":781},"    mySwap03",[139,15018,14930],{"class":145},[139,15020,15021],{"class":2512},"\u002F\u002F引用传递，形参会修饰实参\n",[139,15023,15024,15026,15028,15030,15032,15034,15036,15038,15040,15042,15044],{"class":141,"line":4893},[139,15025,8803],{"class":145},[139,15027,3474],{"class":149},[139,15029,14942],{"class":160},[139,15031,3742],{"class":149},[139,15033,1144],{"class":145},[139,15035,3474],{"class":149},[139,15037,14951],{"class":160},[139,15039,3742],{"class":149},[139,15041,13155],{"class":145},[139,15043,3474],{"class":149},[139,15045,11114],{"class":145},[139,15047,15048],{"class":141,"line":4899},[139,15049,843],{"emptyLinePlaceholder":842},[139,15051,15052,15054,15056,15058],{"class":141,"line":4904},[139,15053,4588],{"class":781},[139,15055,157],{"class":145},[139,15057,4593],{"class":160},[139,15059,5002],{"class":145},[139,15061,15062],{"class":141,"line":10222},[139,15063,843],{"emptyLinePlaceholder":842},[139,15065,15066,15068,15070],{"class":141,"line":10246},[139,15067,978],{"class":149},[139,15069,799],{"class":153},[139,15071,3591],{"class":145},[139,15073,15074],{"class":141,"line":10251},[139,15075,3862],{"class":145},[14,15077,15079],{"id":15078},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15081,15082],{},"作用：引用是可以作为函数的返回值存在的",[19,15084,11299,15085],{},[1674,15086,15087],{},"不要返回局部变量引用",[19,15089,15090],{},"用法：函数调用作为左值",[130,15092,15094],{"className":12215,"code":15093,"language":12217,"meta":135,"style":135},"\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",[50,15095,15096,15101,15109,15124,15130,15134,15138,15143,15151,15168,15174,15178,15182,15190,15194,15199,15213,15233,15252,15256,15261,15274,15294,15312,15316,15332,15336,15355,15373,15377,15387,15391,15399],{"__ignoreMap":135},[139,15097,15098],{"class":141,"line":142},[139,15099,15100],{"class":2512},"\u002F\u002F返回局部变量引用\n",[139,15102,15103,15105,15107],{"class":141,"line":210},[139,15104,14838],{"class":149},[139,15106,7862],{"class":781},[139,15108,13127],{"class":145},[139,15110,15111,15113,15115,15117,15119,15121],{"class":141,"line":254},[139,15112,1082],{"class":149},[139,15114,1144],{"class":145},[139,15116,150],{"class":149},[139,15118,4323],{"class":153},[139,15120,2509],{"class":145},[139,15122,15123],{"class":2512}," \u002F\u002F局部变量\n",[139,15125,15126,15128],{"class":141,"line":262},[139,15127,978],{"class":149},[139,15129,3730],{"class":145},[139,15131,15132],{"class":141,"line":313},[139,15133,3862],{"class":145},[139,15135,15136],{"class":141,"line":462},[139,15137,843],{"emptyLinePlaceholder":842},[139,15139,15140],{"class":141,"line":474},[139,15141,15142],{"class":2512},"\u002F\u002F返回静态变量引用\n",[139,15144,15145,15147,15149],{"class":141,"line":484},[139,15146,14838],{"class":149},[139,15148,7931],{"class":781},[139,15150,13127],{"class":145},[139,15152,15153,15155,15157,15159,15161,15163,15165],{"class":141,"line":989},[139,15154,13293],{"class":149},[139,15156,154],{"class":149},[139,15158,1144],{"class":145},[139,15160,150],{"class":149},[139,15162,11224],{"class":153},[139,15164,2509],{"class":145},[139,15166,15167],{"class":2512},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[139,15169,15170,15172],{"class":141,"line":994},[139,15171,978],{"class":149},[139,15173,3730],{"class":145},[139,15175,15176],{"class":141,"line":999},[139,15177,3862],{"class":145},[139,15179,15180],{"class":141,"line":1006},[139,15181,843],{"emptyLinePlaceholder":842},[139,15183,15184,15186,15188],{"class":141,"line":1027},[139,15185,2461],{"class":149},[139,15187,4259],{"class":781},[139,15189,13127],{"class":145},[139,15191,15192],{"class":141,"line":1040},[139,15193,843],{"emptyLinePlaceholder":842},[139,15195,15196],{"class":141,"line":2160},[139,15197,15198],{"class":2512},"    \u002F\u002F不能返回局部变量的引用\n",[139,15200,15201,15204,15207,15209,15211],{"class":141,"line":2188},[139,15202,15203],{"class":149},"    int&",[139,15205,15206],{"class":145}," ref ",[139,15208,150],{"class":149},[139,15210,7862],{"class":781},[139,15212,7910],{"class":145},[139,15214,15215,15217,15219,15222,15224,15226,15228,15230],{"class":141,"line":3944},[139,15216,8803],{"class":145},[139,15218,3474],{"class":149},[139,15220,15221],{"class":160}," \"ref = \"",[139,15223,3742],{"class":149},[139,15225,15206],{"class":145},[139,15227,3474],{"class":149},[139,15229,13742],{"class":145},[139,15231,15232],{"class":2512},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[139,15234,15235,15237,15239,15241,15243,15245,15247,15249],{"class":141,"line":3963},[139,15236,8803],{"class":145},[139,15238,3474],{"class":149},[139,15240,15221],{"class":160},[139,15242,3742],{"class":149},[139,15244,15206],{"class":145},[139,15246,3474],{"class":149},[139,15248,13742],{"class":145},[139,15250,15251],{"class":2512},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[139,15253,15254],{"class":141,"line":3968},[139,15255,843],{"emptyLinePlaceholder":842},[139,15257,15258],{"class":141,"line":3982},[139,15259,15260],{"class":2512},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[139,15262,15263,15265,15268,15270,15272],{"class":141,"line":3987},[139,15264,15203],{"class":149},[139,15266,15267],{"class":145}," ref2 ",[139,15269,150],{"class":149},[139,15271,7931],{"class":781},[139,15273,7910],{"class":145},[139,15275,15276,15278,15280,15283,15285,15287,15289,15291],{"class":141,"line":4014},[139,15277,8803],{"class":145},[139,15279,3474],{"class":149},[139,15281,15282],{"class":160}," \"ref2 = \"",[139,15284,3742],{"class":149},[139,15286,15267],{"class":145},[139,15288,3474],{"class":149},[139,15290,13742],{"class":145},[139,15292,15293],{"class":2512}," \u002F\u002F20\n",[139,15295,15296,15298,15300,15302,15304,15306,15308,15310],{"class":141,"line":4019},[139,15297,8803],{"class":145},[139,15299,3474],{"class":149},[139,15301,15282],{"class":160},[139,15303,3742],{"class":149},[139,15305,15267],{"class":145},[139,15307,3474],{"class":149},[139,15309,13742],{"class":145},[139,15311,15293],{"class":2512},[139,15313,15314],{"class":141,"line":4036},[139,15315,843],{"emptyLinePlaceholder":842},[139,15317,15318,15320,15323,15325,15327,15329],{"class":141,"line":4041},[139,15319,7976],{"class":781},[139,15321,15322],{"class":145},"() ",[139,15324,150],{"class":149},[139,15326,5282],{"class":153},[139,15328,2509],{"class":145},[139,15330,15331],{"class":2512},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[139,15333,15334],{"class":141,"line":4046},[139,15335,843],{"emptyLinePlaceholder":842},[139,15337,15338,15340,15342,15344,15346,15348,15350,15352],{"class":141,"line":4051},[139,15339,8803],{"class":145},[139,15341,3474],{"class":149},[139,15343,15282],{"class":160},[139,15345,3742],{"class":149},[139,15347,15267],{"class":145},[139,15349,3474],{"class":149},[139,15351,13742],{"class":145},[139,15353,15354],{"class":2512}," \u002F\u002F1000\n",[139,15356,15357,15359,15361,15363,15365,15367,15369,15371],{"class":141,"line":4065},[139,15358,8803],{"class":145},[139,15360,3474],{"class":149},[139,15362,15282],{"class":160},[139,15364,3742],{"class":149},[139,15366,15267],{"class":145},[139,15368,3474],{"class":149},[139,15370,13742],{"class":145},[139,15372,15354],{"class":2512},[139,15374,15375],{"class":141,"line":4070},[139,15376,843],{"emptyLinePlaceholder":842},[139,15378,15379,15381,15383,15385],{"class":141,"line":4860},[139,15380,4588],{"class":781},[139,15382,157],{"class":145},[139,15384,4593],{"class":160},[139,15386,5002],{"class":145},[139,15388,15389],{"class":141,"line":4874},[139,15390,843],{"emptyLinePlaceholder":842},[139,15392,15393,15395,15397],{"class":141,"line":4882},[139,15394,978],{"class":149},[139,15396,799],{"class":153},[139,15398,3591],{"class":145},[139,15400,15401],{"class":141,"line":4887},[139,15402,3862],{"class":145},[14,15404,15406],{"id":15405},"_65引用的本质","6.5引用的本质",[19,15408,15409,15410],{},"本质：",[1674,15411,15412],{},"引用的本质在c++内部实现是一个指针常量.",[130,15414,15416],{"className":2447,"code":15415,"language":2449,"meta":135,"style":135},"\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",[50,15417,15418,15423,15439,15453,15457,15466,15478,15483,15488,15499,15512,15516,15532,15549,15553,15561,15569],{"__ignoreMap":135},[139,15419,15420],{"class":141,"line":142},[139,15421,15422],{"class":2512},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[139,15424,15425,15427,15429,15431,15433,15436],{"class":141,"line":210},[139,15426,7638],{"class":149},[139,15428,13658],{"class":781},[139,15430,157],{"class":145},[139,15432,14838],{"class":149},[139,15434,15435],{"class":2111}," ref",[139,15437,15438],{"class":145},"){\n",[139,15440,15441,15444,15446,15448,15450],{"class":141,"line":254},[139,15442,15443],{"class":145},"    ref ",[139,15445,150],{"class":149},[139,15447,8028],{"class":153},[139,15449,2509],{"class":145},[139,15451,15452],{"class":2512}," \u002F\u002F ref是引用，转换为*ref = 100\n",[139,15454,15455],{"class":141,"line":262},[139,15456,3862],{"class":145},[139,15458,15459,15461,15463],{"class":141,"line":313},[139,15460,2461],{"class":149},[139,15462,4259],{"class":781},[139,15464,15465],{"class":145},"(){\n",[139,15467,15468,15470,15472,15474,15476],{"class":141,"line":462},[139,15469,1082],{"class":149},[139,15471,1144],{"class":145},[139,15473,150],{"class":149},[139,15475,4323],{"class":153},[139,15477,3591],{"class":145},[139,15479,15480],{"class":141,"line":474},[139,15481,15482],{"class":145},"    \n",[139,15484,15485],{"class":141,"line":484},[139,15486,15487],{"class":2512},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[139,15489,15490,15492,15494,15496],{"class":141,"line":989},[139,15491,15203],{"class":149},[139,15493,15206],{"class":145},[139,15495,150],{"class":149},[139,15497,15498],{"class":145}," a; \n",[139,15500,15501,15503,15505,15507,15509],{"class":141,"line":994},[139,15502,15443],{"class":145},[139,15504,150],{"class":149},[139,15506,11224],{"class":153},[139,15508,2509],{"class":145},[139,15510,15511],{"class":2512}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[139,15513,15514],{"class":141,"line":999},[139,15515,15482],{"class":145},[139,15517,15518,15520,15522,15524,15526,15528,15530],{"class":141,"line":1006},[139,15519,8803],{"class":145},[139,15521,3474],{"class":149},[139,15523,14942],{"class":160},[139,15525,3742],{"class":149},[139,15527,1144],{"class":145},[139,15529,3474],{"class":149},[139,15531,11114],{"class":145},[139,15533,15534,15536,15538,15541,15543,15545,15547],{"class":141,"line":1027},[139,15535,8803],{"class":145},[139,15537,3474],{"class":149},[139,15539,15540],{"class":160}," \"ref:\"",[139,15542,3742],{"class":149},[139,15544,15206],{"class":145},[139,15546,3474],{"class":149},[139,15548,11114],{"class":145},[139,15550,15551],{"class":141,"line":1040},[139,15552,15482],{"class":145},[139,15554,15555,15558],{"class":141,"line":2160},[139,15556,15557],{"class":781},"    func",[139,15559,15560],{"class":145},"(a);\n",[139,15562,15563,15565,15567],{"class":141,"line":2188},[139,15564,978],{"class":149},[139,15566,799],{"class":153},[139,15568,3591],{"class":145},[139,15570,15571],{"class":141,"line":3944},[139,15572,3862],{"class":145},[19,15574,13605],{},[1760,15576,15577,15580],{},[1763,15578,15579],{},"引用的本质，就是一个指针常量",[1763,15581,15582],{},"引用一旦初始化，就不可以发生改变",[14,15584,15586],{"id":15585},"_66常量引用","6.6常量引用",[19,15588,15589],{},"作用：常量引用主要用来修饰形参",[19,15591,15592,15593,15596],{},"在函数形参列表中，可以加",[1674,15594,15595],{},"const修饰形参","，防止形参改变实参",[130,15598,15600],{"className":2447,"code":15599,"language":2449,"meta":135,"style":135},"\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",[50,15601,15602,15607,15612,15631,15636,15649,15653,15657,15665,15669,15674,15679,15693,15697,15705,15717,15721,15726,15738,15745,15749,15759,15763,15771],{"__ignoreMap":135},[139,15603,15604],{"class":141,"line":142},[139,15605,15606],{"class":2512},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[139,15608,15609],{"class":141,"line":210},[139,15610,15611],{"class":2512},"\u002F\u002F加上const就不能修改实参的\n",[139,15613,15614,15616,15619,15621,15623,15626,15629],{"class":141,"line":254},[139,15615,7638],{"class":149},[139,15617,15618],{"class":781}," showValue",[139,15620,157],{"class":145},[139,15622,9066],{"class":149},[139,15624,15625],{"class":149}," int&",[139,15627,15628],{"class":2111}," v",[139,15630,14714],{"class":145},[139,15632,15633],{"class":141,"line":262},[139,15634,15635],{"class":2512},"    \u002F\u002Fv += 100;\n",[139,15637,15638,15640,15642,15645,15647],{"class":141,"line":313},[139,15639,8803],{"class":145},[139,15641,3474],{"class":149},[139,15643,15644],{"class":145}," v ",[139,15646,3474],{"class":149},[139,15648,11114],{"class":145},[139,15650,15651],{"class":141,"line":462},[139,15652,3862],{"class":145},[139,15654,15655],{"class":141,"line":474},[139,15656,843],{"emptyLinePlaceholder":842},[139,15658,15659,15661,15663],{"class":141,"line":484},[139,15660,2461],{"class":149},[139,15662,4259],{"class":781},[139,15664,13127],{"class":145},[139,15666,15667],{"class":141,"line":989},[139,15668,843],{"emptyLinePlaceholder":842},[139,15670,15671],{"class":141,"line":994},[139,15672,15673],{"class":2512},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[139,15675,15676],{"class":141,"line":999},[139,15677,15678],{"class":2512},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[139,15680,15681,15683,15685,15687,15689,15691],{"class":141,"line":1006},[139,15682,13494],{"class":149},[139,15684,15625],{"class":149},[139,15686,15206],{"class":145},[139,15688,150],{"class":149},[139,15690,4323],{"class":153},[139,15692,3591],{"class":145},[139,15694,15695],{"class":141,"line":1027},[139,15696,843],{"emptyLinePlaceholder":842},[139,15698,15699,15702],{"class":141,"line":1040},[139,15700,15701],{"class":2512},"    \u002F\u002Fref = 100;",[139,15703,15704],{"class":2512},"  \u002F\u002F加入const后不可以修改变量\n",[139,15706,15707,15709,15711,15713,15715],{"class":141,"line":2160},[139,15708,8803],{"class":145},[139,15710,3474],{"class":149},[139,15712,15206],{"class":145},[139,15714,3474],{"class":149},[139,15716,11114],{"class":145},[139,15718,15719],{"class":141,"line":2188},[139,15720,843],{"emptyLinePlaceholder":842},[139,15722,15723],{"class":141,"line":3944},[139,15724,15725],{"class":2512},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[139,15727,15728,15730,15732,15734,15736],{"class":141,"line":3963},[139,15729,1082],{"class":149},[139,15731,1144],{"class":145},[139,15733,150],{"class":149},[139,15735,4323],{"class":153},[139,15737,3591],{"class":145},[139,15739,15740,15743],{"class":141,"line":3968},[139,15741,15742],{"class":781},"    showValue",[139,15744,15560],{"class":145},[139,15746,15747],{"class":141,"line":3982},[139,15748,843],{"emptyLinePlaceholder":842},[139,15750,15751,15753,15755,15757],{"class":141,"line":3987},[139,15752,4588],{"class":781},[139,15754,157],{"class":145},[139,15756,4593],{"class":160},[139,15758,5002],{"class":145},[139,15760,15761],{"class":141,"line":4014},[139,15762,843],{"emptyLinePlaceholder":842},[139,15764,15765,15767,15769],{"class":141,"line":4019},[139,15766,978],{"class":149},[139,15768,799],{"class":153},[139,15770,3591],{"class":145},[139,15772,15773],{"class":141,"line":4036},[139,15774,3862],{"class":145},[2348,15776,15777],{},"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":135,"searchDepth":210,"depth":210,"links":15779},[15780,15781,15782,15783,15784,15785],{"id":14313,"depth":210,"text":14314},{"id":14492,"depth":210,"text":14493},{"id":14675,"depth":210,"text":14676},{"id":15078,"depth":210,"text":15079},{"id":15405,"depth":210,"text":15406},{"id":15585,"depth":210,"text":15586},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14305,"description":135},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15792,"title":15793,"body":15794,"description":135,"extension":2385,"meta":16874,"navigation":842,"path":16875,"seo":16876,"stem":16877,"__hash__":16878},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15795,"toc":16866},[15796,15799,15803,15806,15811,16042,16044,16055,16059,16062,16070,16174,16177,16181,16184,16188,16191,16196,16218,16224,16551,16554,16558,16566,16863],[10,15797,15793],{"id":15798},"_7函数高级部分",[14,15800,15802],{"id":15801},"_71函数默认参数","7.1函数默认参数",[19,15804,15805],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15807,7459,15808],{},[50,15809,15810],{}," 返回值类型  函数名 （参数= 默认值）{}",[130,15812,15814],{"className":2447,"code":15813,"language":2449,"meta":135,"style":135},"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",[50,15815,15816,15851,15866,15870,15874,15879,15884,15913,15933,15943,15947,15951,15959,15963,15990,16012,16016,16026,16030,16038],{"__ignoreMap":135},[139,15817,15818,15820,15822,15824,15826,15828,15830,15832,15834,15837,15839,15841,15843,15845,15847,15849],{"class":141,"line":142},[139,15819,2461],{"class":149},[139,15821,13658],{"class":781},[139,15823,157],{"class":145},[139,15825,2461],{"class":149},[139,15827,3696],{"class":2111},[139,15829,413],{"class":145},[139,15831,2461],{"class":149},[139,15833,5116],{"class":2111},[139,15835,15836],{"class":149}," =",[139,15838,4323],{"class":153},[139,15840,413],{"class":145},[139,15842,2461],{"class":149},[139,15844,5132],{"class":2111},[139,15846,15836],{"class":149},[139,15848,4323],{"class":153},[139,15850,14714],{"class":145},[139,15852,15853,15855,15857,15859,15861,15863],{"class":141,"line":210},[139,15854,978],{"class":149},[139,15856,1144],{"class":145},[139,15858,1147],{"class":149},[139,15860,13155],{"class":145},[139,15862,1147],{"class":149},[139,15864,15865],{"class":145}," c;\n",[139,15867,15868],{"class":141,"line":254},[139,15869,3862],{"class":145},[139,15871,15872],{"class":141,"line":262},[139,15873,843],{"emptyLinePlaceholder":842},[139,15875,15876],{"class":141,"line":313},[139,15877,15878],{"class":2512},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[139,15880,15881],{"class":141,"line":462},[139,15882,15883],{"class":2512},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[139,15885,15886,15888,15891,15893,15895,15897,15899,15901,15903,15905,15907,15909,15911],{"class":141,"line":474},[139,15887,2461],{"class":149},[139,15889,15890],{"class":781}," func2",[139,15892,157],{"class":145},[139,15894,2461],{"class":149},[139,15896,3696],{"class":2111},[139,15898,15836],{"class":149},[139,15900,4323],{"class":153},[139,15902,413],{"class":145},[139,15904,2461],{"class":149},[139,15906,5116],{"class":2111},[139,15908,15836],{"class":149},[139,15910,4323],{"class":153},[139,15912,5002],{"class":145},[139,15914,15915,15917,15919,15921,15923,15925,15927,15929,15931],{"class":141,"line":484},[139,15916,2461],{"class":149},[139,15918,15890],{"class":781},[139,15920,157],{"class":145},[139,15922,2461],{"class":149},[139,15924,3696],{"class":2111},[139,15926,413],{"class":145},[139,15928,2461],{"class":149},[139,15930,5116],{"class":2111},[139,15932,14714],{"class":145},[139,15934,15935,15937,15939,15941],{"class":141,"line":989},[139,15936,978],{"class":149},[139,15938,1144],{"class":145},[139,15940,1147],{"class":149},[139,15942,14735],{"class":145},[139,15944,15945],{"class":141,"line":994},[139,15946,3862],{"class":145},[139,15948,15949],{"class":141,"line":999},[139,15950,843],{"emptyLinePlaceholder":842},[139,15952,15953,15955,15957],{"class":141,"line":1006},[139,15954,2461],{"class":149},[139,15956,4259],{"class":781},[139,15958,13127],{"class":145},[139,15960,15961],{"class":141,"line":1027},[139,15962,843],{"emptyLinePlaceholder":842},[139,15964,15965,15967,15969,15972,15974,15976,15978,15980,15982,15984,15986,15988],{"class":141,"line":1040},[139,15966,8803],{"class":145},[139,15968,3474],{"class":149},[139,15970,15971],{"class":160}," \"ret = \"",[139,15973,3742],{"class":149},[139,15975,13658],{"class":781},[139,15977,157],{"class":145},[139,15979,3135],{"class":153},[139,15981,413],{"class":145},[139,15983,3135],{"class":153},[139,15985,2120],{"class":145},[139,15987,3474],{"class":149},[139,15989,11114],{"class":145},[139,15991,15992,15994,15996,15998,16000,16002,16004,16006,16008,16010],{"class":141,"line":2160},[139,15993,8803],{"class":145},[139,15995,3474],{"class":149},[139,15997,15971],{"class":160},[139,15999,3742],{"class":149},[139,16001,13658],{"class":781},[139,16003,157],{"class":145},[139,16005,1017],{"class":153},[139,16007,2120],{"class":145},[139,16009,3474],{"class":149},[139,16011,11114],{"class":145},[139,16013,16014],{"class":141,"line":2188},[139,16015,843],{"emptyLinePlaceholder":842},[139,16017,16018,16020,16022,16024],{"class":141,"line":3944},[139,16019,4588],{"class":781},[139,16021,157],{"class":145},[139,16023,4593],{"class":160},[139,16025,5002],{"class":145},[139,16027,16028],{"class":141,"line":3963},[139,16029,843],{"emptyLinePlaceholder":842},[139,16031,16032,16034,16036],{"class":141,"line":3968},[139,16033,978],{"class":149},[139,16035,799],{"class":153},[139,16037,3591],{"class":145},[139,16039,16040],{"class":141,"line":3982},[139,16041,3862],{"class":145},[19,16043,13605],{},[1760,16045,16046,16049,16052],{},[1763,16047,16048],{},"我传就用我；没传就用你",[1763,16050,16051],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1763,16053,16054],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16056,16058],{"id":16057},"_72函数的占位参数","7.2函数的占位参数",[19,16060,16061],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16063,16064,16066,16067],{},[1674,16065,7459],{}," ",[50,16068,16069],{},"返回值类型 函数名 (数据类型){}",[130,16071,16073],{"className":2447,"code":16072,"language":2449,"meta":135,"style":135},"\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",[50,16074,16075,16080,16098,16111,16115,16123,16127,16144,16148,16158,16162,16170],{"__ignoreMap":135},[139,16076,16077],{"class":141,"line":142},[139,16078,16079],{"class":2512},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[139,16081,16082,16084,16086,16088,16090,16092,16094,16096],{"class":141,"line":210},[139,16083,7638],{"class":149},[139,16085,13658],{"class":781},[139,16087,157],{"class":145},[139,16089,2461],{"class":149},[139,16091,3696],{"class":2111},[139,16093,413],{"class":145},[139,16095,2461],{"class":149},[139,16097,14714],{"class":145},[139,16099,16100,16102,16104,16107,16109],{"class":141,"line":254},[139,16101,8803],{"class":145},[139,16103,3474],{"class":149},[139,16105,16106],{"class":160}," \"this is func\"",[139,16108,3742],{"class":149},[139,16110,11114],{"class":145},[139,16112,16113],{"class":141,"line":262},[139,16114,3862],{"class":145},[139,16116,16117,16119,16121],{"class":141,"line":313},[139,16118,2461],{"class":149},[139,16120,4259],{"class":781},[139,16122,13127],{"class":145},[139,16124,16125],{"class":141,"line":462},[139,16126,843],{"emptyLinePlaceholder":842},[139,16128,16129,16131,16133,16135,16137,16139,16141],{"class":141,"line":474},[139,16130,15557],{"class":781},[139,16132,157],{"class":145},[139,16134,536],{"class":153},[139,16136,2816],{"class":145},[139,16138,536],{"class":153},[139,16140,8240],{"class":145},[139,16142,16143],{"class":2512}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[139,16145,16146],{"class":141,"line":484},[139,16147,843],{"emptyLinePlaceholder":842},[139,16149,16150,16152,16154,16156],{"class":141,"line":989},[139,16151,4588],{"class":781},[139,16153,157],{"class":145},[139,16155,4593],{"class":160},[139,16157,5002],{"class":145},[139,16159,16160],{"class":141,"line":994},[139,16161,843],{"emptyLinePlaceholder":842},[139,16163,16164,16166,16168],{"class":141,"line":999},[139,16165,978],{"class":149},[139,16167,799],{"class":153},[139,16169,3591],{"class":145},[139,16171,16172],{"class":141,"line":1006},[139,16173,3862],{"class":145},[19,16175,16176],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16178,16180],{"id":16179},"_73函数重载","7.3函数重载",[19,16182,16183],{},"意思是函数名是可以相同的",[1217,16185,16187],{"id":16186},"_731基本语法","7.3.1基本语法",[19,16189,16190],{},"作用：函数名可以相同，提高复用性",[19,16192,16193],{},[1674,16194,16195],{},"函数重载满足条件：",[3437,16197,16198,16201,16204],{},[1763,16199,16200],{},"同一个作用域下",[1763,16202,16203],{},"函数名称相同",[1763,16205,16206,16207,16210,16211,16214,16215],{},"函数参数",[1674,16208,16209],{},"类型不同","  或者 ",[1674,16212,16213],{},"个数不同"," 或者 ",[1674,16216,16217],{},"顺序不同",[19,16219,16220,16223],{},[1674,16221,16222],{},"注意:","  函数的返回值不可以作为函数重载的条件",[130,16225,16227],{"className":12215,"code":16226,"language":12217,"meta":135,"style":135},"\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",[50,16228,16229,16234,16242,16246,16259,16263,16277,16281,16294,16298,16313,16317,16330,16334,16355,16359,16372,16376,16396,16400,16413,16417,16421,16426,16431,16436,16441,16446,16450,16454,16462,16466,16472,16482,16492,16506,16521,16525,16535,16539,16547],{"__ignoreMap":135},[139,16230,16231],{"class":141,"line":142},[139,16232,16233],{"class":2512},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[139,16235,16236,16238,16240],{"class":141,"line":210},[139,16237,7638],{"class":149},[139,16239,13658],{"class":781},[139,16241,4262],{"class":145},[139,16243,16244],{"class":141,"line":254},[139,16245,3843],{"class":145},[139,16247,16248,16250,16252,16255,16257],{"class":141,"line":262},[139,16249,8803],{"class":145},[139,16251,3474],{"class":149},[139,16253,16254],{"class":160}," \"func 的调用！\"",[139,16256,3742],{"class":149},[139,16258,11114],{"class":145},[139,16260,16261],{"class":141,"line":313},[139,16262,3862],{"class":145},[139,16264,16265,16267,16269,16271,16273,16275],{"class":141,"line":462},[139,16266,7638],{"class":149},[139,16268,13658],{"class":781},[139,16270,157],{"class":145},[139,16272,2461],{"class":149},[139,16274,3696],{"class":2111},[139,16276,164],{"class":145},[139,16278,16279],{"class":141,"line":474},[139,16280,3843],{"class":145},[139,16282,16283,16285,16287,16290,16292],{"class":141,"line":484},[139,16284,8803],{"class":145},[139,16286,3474],{"class":149},[139,16288,16289],{"class":160}," \"func (int a) 的调用！\"",[139,16291,3742],{"class":149},[139,16293,11114],{"class":145},[139,16295,16296],{"class":141,"line":989},[139,16297,3862],{"class":145},[139,16299,16300,16302,16304,16306,16309,16311],{"class":141,"line":994},[139,16301,7638],{"class":149},[139,16303,13658],{"class":781},[139,16305,157],{"class":145},[139,16307,16308],{"class":149},"double",[139,16310,3696],{"class":2111},[139,16312,164],{"class":145},[139,16314,16315],{"class":141,"line":999},[139,16316,3843],{"class":145},[139,16318,16319,16321,16323,16326,16328],{"class":141,"line":1006},[139,16320,8803],{"class":145},[139,16322,3474],{"class":149},[139,16324,16325],{"class":160}," \"func (double a)的调用！\"",[139,16327,3742],{"class":149},[139,16329,11114],{"class":145},[139,16331,16332],{"class":141,"line":1027},[139,16333,3862],{"class":145},[139,16335,16336,16338,16340,16342,16344,16346,16349,16351,16353],{"class":141,"line":1040},[139,16337,7638],{"class":149},[139,16339,13658],{"class":781},[139,16341,157],{"class":145},[139,16343,2461],{"class":149},[139,16345,3696],{"class":2111},[139,16347,16348],{"class":145}," ,",[139,16350,16308],{"class":149},[139,16352,5116],{"class":2111},[139,16354,164],{"class":145},[139,16356,16357],{"class":141,"line":2160},[139,16358,3843],{"class":145},[139,16360,16361,16363,16365,16368,16370],{"class":141,"line":2188},[139,16362,8803],{"class":145},[139,16364,3474],{"class":149},[139,16366,16367],{"class":160}," \"func (int a ,double b) 的调用！\"",[139,16369,3742],{"class":149},[139,16371,11114],{"class":145},[139,16373,16374],{"class":141,"line":3944},[139,16375,3862],{"class":145},[139,16377,16378,16380,16382,16384,16386,16388,16390,16392,16394],{"class":141,"line":3963},[139,16379,7638],{"class":149},[139,16381,13658],{"class":781},[139,16383,157],{"class":145},[139,16385,16308],{"class":149},[139,16387,3696],{"class":2111},[139,16389,16348],{"class":145},[139,16391,2461],{"class":149},[139,16393,5116],{"class":2111},[139,16395,164],{"class":145},[139,16397,16398],{"class":141,"line":3968},[139,16399,3843],{"class":145},[139,16401,16402,16404,16406,16409,16411],{"class":141,"line":3982},[139,16403,8803],{"class":145},[139,16405,3474],{"class":149},[139,16407,16408],{"class":160}," \"func (double a ,int b)的调用！\"",[139,16410,3742],{"class":149},[139,16412,11114],{"class":145},[139,16414,16415],{"class":141,"line":3987},[139,16416,3862],{"class":145},[139,16418,16419],{"class":141,"line":4014},[139,16420,843],{"emptyLinePlaceholder":842},[139,16422,16423],{"class":141,"line":4019},[139,16424,16425],{"class":2512},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[139,16427,16428],{"class":141,"line":4036},[139,16429,16430],{"class":2512},"\u002F\u002Fint func(double a, int b)\n",[139,16432,16433],{"class":141,"line":4041},[139,16434,16435],{"class":2512},"\u002F\u002F{\n",[139,16437,16438],{"class":141,"line":4046},[139,16439,16440],{"class":2512},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[139,16442,16443],{"class":141,"line":4051},[139,16444,16445],{"class":2512},"\u002F\u002F}\n",[139,16447,16448],{"class":141,"line":4065},[139,16449,843],{"emptyLinePlaceholder":842},[139,16451,16452],{"class":141,"line":4070},[139,16453,843],{"emptyLinePlaceholder":842},[139,16455,16456,16458,16460],{"class":141,"line":4860},[139,16457,2461],{"class":149},[139,16459,4259],{"class":781},[139,16461,13127],{"class":145},[139,16463,16464],{"class":141,"line":4874},[139,16465,843],{"emptyLinePlaceholder":842},[139,16467,16468,16470],{"class":141,"line":4882},[139,16469,15557],{"class":781},[139,16471,7910],{"class":145},[139,16473,16474,16476,16478,16480],{"class":141,"line":4887},[139,16475,15557],{"class":781},[139,16477,157],{"class":145},[139,16479,536],{"class":153},[139,16481,5002],{"class":145},[139,16483,16484,16486,16488,16490],{"class":141,"line":4893},[139,16485,15557],{"class":781},[139,16487,157],{"class":145},[139,16489,2504],{"class":153},[139,16491,5002],{"class":145},[139,16493,16494,16496,16498,16500,16502,16504],{"class":141,"line":4899},[139,16495,15557],{"class":781},[139,16497,157],{"class":145},[139,16499,536],{"class":153},[139,16501,2816],{"class":145},[139,16503,2504],{"class":153},[139,16505,5002],{"class":145},[139,16507,16508,16510,16512,16514,16517,16519],{"class":141,"line":4904},[139,16509,15557],{"class":781},[139,16511,157],{"class":145},[139,16513,2504],{"class":153},[139,16515,16516],{"class":145}," , ",[139,16518,536],{"class":153},[139,16520,5002],{"class":145},[139,16522,16523],{"class":141,"line":10222},[139,16524,15482],{"class":145},[139,16526,16527,16529,16531,16533],{"class":141,"line":10246},[139,16528,4588],{"class":781},[139,16530,157],{"class":145},[139,16532,4593],{"class":160},[139,16534,5002],{"class":145},[139,16536,16537],{"class":141,"line":10251},[139,16538,843],{"emptyLinePlaceholder":842},[139,16540,16541,16543,16545],{"class":141,"line":10257},[139,16542,978],{"class":149},[139,16544,799],{"class":153},[139,16546,3591],{"class":145},[139,16548,16549],{"class":141,"line":10284},[139,16550,3862],{"class":145},[19,16552,16553],{},"重点：函数返回值不可以作为函数重载条件！",[1217,16555,16557],{"id":16556},"_732注意事项","7.3.2注意事项",[3437,16559,16560,16563],{},[1763,16561,16562],{},"引用作为重载条件!!!",[1763,16564,16565],{},"函数重载碰到函数默认参数",[130,16567,16569],{"className":2447,"code":16568,"language":2449,"meta":135,"style":135},"\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",[50,16570,16571,16576,16581,16585,16601,16605,16618,16622,16626,16644,16648,16661,16665,16669,16673,16678,16682,16706,16710,16723,16727,16731,16745,16749,16762,16766,16770,16778,16782,16794,16804,16817,16821,16825,16833,16837,16847,16851,16859],{"__ignoreMap":135},[139,16572,16573],{"class":141,"line":142},[139,16574,16575],{"class":2512},"\u002F\u002F函数重载注意事项\n",[139,16577,16578],{"class":141,"line":210},[139,16579,16580],{"class":2512},"\u002F\u002F1、引用作为重载条件\n",[139,16582,16583],{"class":141,"line":254},[139,16584,843],{"emptyLinePlaceholder":842},[139,16586,16587,16589,16591,16593,16595,16597,16599],{"class":141,"line":262},[139,16588,7638],{"class":149},[139,16590,13658],{"class":781},[139,16592,157],{"class":145},[139,16594,2461],{"class":149},[139,16596,12858],{"class":149},[139,16598,2680],{"class":2111},[139,16600,164],{"class":145},[139,16602,16603],{"class":141,"line":313},[139,16604,3843],{"class":145},[139,16606,16607,16609,16611,16614,16616],{"class":141,"line":462},[139,16608,8803],{"class":145},[139,16610,3474],{"class":149},[139,16612,16613],{"class":160}," \"func (int &a) 调用 \"",[139,16615,3742],{"class":149},[139,16617,11114],{"class":145},[139,16619,16620],{"class":141,"line":474},[139,16621,3862],{"class":145},[139,16623,16624],{"class":141,"line":484},[139,16625,843],{"emptyLinePlaceholder":842},[139,16627,16628,16630,16632,16634,16636,16638,16640,16642],{"class":141,"line":989},[139,16629,7638],{"class":149},[139,16631,13658],{"class":781},[139,16633,157],{"class":145},[139,16635,9066],{"class":149},[139,16637,154],{"class":149},[139,16639,12858],{"class":149},[139,16641,2680],{"class":2111},[139,16643,164],{"class":145},[139,16645,16646],{"class":141,"line":994},[139,16647,3843],{"class":145},[139,16649,16650,16652,16654,16657,16659],{"class":141,"line":999},[139,16651,8803],{"class":145},[139,16653,3474],{"class":149},[139,16655,16656],{"class":160}," \"func (const int &a) 调用 \"",[139,16658,3742],{"class":149},[139,16660,11114],{"class":145},[139,16662,16663],{"class":141,"line":1006},[139,16664,3862],{"class":145},[139,16666,16667],{"class":141,"line":1027},[139,16668,843],{"emptyLinePlaceholder":842},[139,16670,16671],{"class":141,"line":1040},[139,16672,843],{"emptyLinePlaceholder":842},[139,16674,16675],{"class":141,"line":2160},[139,16676,16677],{"class":2512},"\u002F\u002F2、函数重载碰到函数默认参数\n",[139,16679,16680],{"class":141,"line":2188},[139,16681,843],{"emptyLinePlaceholder":842},[139,16683,16684,16686,16688,16690,16692,16694,16696,16698,16700,16702,16704],{"class":141,"line":3944},[139,16685,7638],{"class":149},[139,16687,15890],{"class":781},[139,16689,157],{"class":145},[139,16691,2461],{"class":149},[139,16693,3696],{"class":2111},[139,16695,413],{"class":145},[139,16697,2461],{"class":149},[139,16699,5116],{"class":2111},[139,16701,15836],{"class":149},[139,16703,4323],{"class":153},[139,16705,164],{"class":145},[139,16707,16708],{"class":141,"line":3963},[139,16709,3843],{"class":145},[139,16711,16712,16714,16716,16719,16721],{"class":141,"line":3968},[139,16713,8803],{"class":145},[139,16715,3474],{"class":149},[139,16717,16718],{"class":160}," \"func2(int a, int b = 10) 调用\"",[139,16720,3742],{"class":149},[139,16722,11114],{"class":145},[139,16724,16725],{"class":141,"line":3982},[139,16726,3862],{"class":145},[139,16728,16729],{"class":141,"line":3987},[139,16730,843],{"emptyLinePlaceholder":842},[139,16732,16733,16735,16737,16739,16741,16743],{"class":141,"line":4014},[139,16734,7638],{"class":149},[139,16736,15890],{"class":781},[139,16738,157],{"class":145},[139,16740,2461],{"class":149},[139,16742,3696],{"class":2111},[139,16744,164],{"class":145},[139,16746,16747],{"class":141,"line":4019},[139,16748,3843],{"class":145},[139,16750,16751,16753,16755,16758,16760],{"class":141,"line":4036},[139,16752,8803],{"class":145},[139,16754,3474],{"class":149},[139,16756,16757],{"class":160}," \"func2(int a) 调用\"",[139,16759,3742],{"class":149},[139,16761,11114],{"class":145},[139,16763,16764],{"class":141,"line":4041},[139,16765,3862],{"class":145},[139,16767,16768],{"class":141,"line":4046},[139,16769,843],{"emptyLinePlaceholder":842},[139,16771,16772,16774,16776],{"class":141,"line":4051},[139,16773,2461],{"class":149},[139,16775,4259],{"class":781},[139,16777,13127],{"class":145},[139,16779,16780],{"class":141,"line":4065},[139,16781,15482],{"class":145},[139,16783,16784,16786,16788,16790,16792],{"class":141,"line":4070},[139,16785,1082],{"class":149},[139,16787,1144],{"class":145},[139,16789,150],{"class":149},[139,16791,4323],{"class":153},[139,16793,3591],{"class":145},[139,16795,16796,16798,16801],{"class":141,"line":4860},[139,16797,15557],{"class":781},[139,16799,16800],{"class":145},"(a);",[139,16802,16803],{"class":2512}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[139,16805,16806,16808,16810,16812,16814],{"class":141,"line":4874},[139,16807,15557],{"class":781},[139,16809,157],{"class":145},[139,16811,536],{"class":153},[139,16813,8240],{"class":145},[139,16815,16816],{"class":2512},"\u002F\u002F调用有const   10是个常量\n",[139,16818,16819],{"class":141,"line":4882},[139,16820,843],{"emptyLinePlaceholder":842},[139,16822,16823],{"class":141,"line":4887},[139,16824,843],{"emptyLinePlaceholder":842},[139,16826,16827,16830],{"class":141,"line":4893},[139,16828,16829],{"class":2512},"    \u002F\u002Ffunc2(10);",[139,16831,16832],{"class":2512}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[139,16834,16835],{"class":141,"line":4899},[139,16836,843],{"emptyLinePlaceholder":842},[139,16838,16839,16841,16843,16845],{"class":141,"line":4904},[139,16840,4588],{"class":781},[139,16842,157],{"class":145},[139,16844,4593],{"class":160},[139,16846,5002],{"class":145},[139,16848,16849],{"class":141,"line":10222},[139,16850,843],{"emptyLinePlaceholder":842},[139,16852,16853,16855,16857],{"class":141,"line":10246},[139,16854,978],{"class":149},[139,16856,799],{"class":153},[139,16858,3591],{"class":145},[139,16860,16861],{"class":141,"line":10251},[139,16862,3862],{"class":145},[2348,16864,16865],{},"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":135,"searchDepth":210,"depth":210,"links":16867},[16868,16869,16870],{"id":15801,"depth":210,"text":15802},{"id":16057,"depth":210,"text":16058},{"id":16179,"depth":210,"text":16180,"children":16871},[16872,16873],{"id":16186,"depth":254,"text":16187},{"id":16556,"depth":254,"text":16557},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15793,"description":135},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16880,"title":16881,"body":16882,"description":25632,"extension":2385,"meta":25633,"navigation":842,"path":25634,"seo":25635,"stem":25636,"__hash__":25637},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16883,"toc":25613},[16884,16887,16893,16900,16905,16908,16911,16914,16918,16922,16925,16928,16936,16941,16944,16951,16956,17113,17116,17369,17372,17375,17378,17383,17386,17389,17400,17404,17640,17644,17654,17657,17665,17812,17816,17819,17822,17826,18270,18274,18282,18290,19202,19209,19214,19842,19845,19848,19851,19970,19973,20060,20063,20189,20192,20286,20289,20642,20646,20654,20658,20665,20668,20671,20682,20688,20693,20705,20713,20733,20741,20758,20944,20947,20951,20954,20957,20960,20963,20966,20969,20972,21432,21438,21442,21445,21456,22043,22046,22535,22539,22542,22545,22548,22551,22554,22562,22958,22962,22965,22968,23415,23418,23421,23426,23429,23434,23437,23441,23444,23446,23452,23455,23761,23771,23812,23816,23819,23821,23854,23857,24164,24166,24181,24184,24207,24216,24222,24225,24229,24232,24235,24240,24251,24256,24264,24269,24399,24402,24405,24580,24585,24797,24801,24804,24918,24923,25162,25166,25170,25173,25176,25181,25286,25289,25292,25295,25299,25410,25413,25416,25421,25473,25476,25479,25484,25530,25533,25538,25606,25608,25611],[10,16885,16881],{"id":16886},"_8类和对象",[19,16888,16889,16890],{},"C++面向对象的三大特性为",[1674,16891,16892],{},"封装、继承、多态",[19,16894,16895,16896,16899],{},"C++认为",[1674,16897,16898],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16901,16902],{},[1674,16903,16904],{},"例如：",[19,16906,16907],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16909,16910],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16912,16913],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16915,16917],{"id":16916},"_81封装","8.1封装",[1217,16919,16921],{"id":16920},"_811封装的意义","8.1.1封装的意义",[19,16923,16924],{},"封装是C++面向对象三大特性之一",[19,16926,16927],{},"封装的意义：",[3437,16929,16930,16933],{},[1763,16931,16932],{},"将属性和行为作为一个整体，表现生活中的事物",[1763,16934,16935],{},"将属性和行为加以权限控制",[19,16937,16938],{},[1674,16939,16940],{},"封装意义一：",[19,16942,16943],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16945,16946,16066,16948],{},[1674,16947,7459],{},[50,16949,16950],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1760,16952,16953],{},[1763,16954,16955],{},"**示例1：**设计一个圆类，求圆的周长",[130,16957,16959],{"className":2447,"code":16958,"language":2449,"meta":135,"style":135},"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",[50,16960,16961,16968,16972,16977,16982,16987,16992,16999,17004,17014,17018,17035,17039,17043,17051,17055,17060,17065,17070,17075,17086,17109],{"__ignoreMap":135},[139,16962,16963,16965],{"class":141,"line":142},[139,16964,915],{"class":149},[139,16966,16967],{"class":781}," Circle\n",[139,16969,16970],{"class":141,"line":210},[139,16971,3843],{"class":145},[139,16973,16974],{"class":141,"line":254},[139,16975,16976],{"class":2512},"    \u002F\u002F访问权限\n",[139,16978,16979],{"class":141,"line":262},[139,16980,16981],{"class":2512},"    \u002F\u002F公共权限\n",[139,16983,16984],{"class":141,"line":313},[139,16985,16986],{"class":149},"public:\n",[139,16988,16989],{"class":141,"line":462},[139,16990,16991],{"class":2512},"    \u002F\u002F属性\n",[139,16993,16994,16996],{"class":141,"line":474},[139,16995,1082],{"class":149},[139,16997,16998],{"class":145}," m_r;\n",[139,17000,17001],{"class":141,"line":484},[139,17002,17003],{"class":2512},"    \u002F\u002F行为\n",[139,17005,17006,17009,17012],{"class":141,"line":989},[139,17007,17008],{"class":149},"    double",[139,17010,17011],{"class":781}," calculateZC",[139,17013,4262],{"class":145},[139,17015,17016],{"class":141,"line":994},[139,17017,4315],{"class":145},[139,17019,17020,17022,17025,17027,17030,17032],{"class":141,"line":999},[139,17021,2085],{"class":149},[139,17023,17024],{"class":153}," 2",[139,17026,2892],{"class":149},[139,17028,17029],{"class":145},"PI",[139,17031,2892],{"class":149},[139,17033,17034],{"class":145},"m_r;\n",[139,17036,17037],{"class":141,"line":1006},[139,17038,4472],{"class":145},[139,17040,17041],{"class":141,"line":1027},[139,17042,6275],{"class":145},[139,17044,17045,17047,17049],{"class":141,"line":1040},[139,17046,2461],{"class":149},[139,17048,4259],{"class":781},[139,17050,4262],{"class":145},[139,17052,17053],{"class":141,"line":2160},[139,17054,3843],{"class":145},[139,17056,17057],{"class":141,"line":2188},[139,17058,17059],{"class":2512},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[139,17061,17062],{"class":141,"line":3944},[139,17063,17064],{"class":2512},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[139,17066,17067],{"class":141,"line":3963},[139,17068,17069],{"class":145},"    Circle c1;\n",[139,17071,17072],{"class":141,"line":3968},[139,17073,17074],{"class":2512},"    \u002F\u002F给圆对象 的属性进行赋值\n",[139,17076,17077,17080,17082,17084],{"class":141,"line":3982},[139,17078,17079],{"class":145},"    c1.m_r",[139,17081,150],{"class":149},[139,17083,536],{"class":153},[139,17085,3591],{"class":145},[139,17087,17088,17090,17092,17095,17097,17100,17103,17105,17107],{"class":141,"line":3987},[139,17089,3848],{"class":145},[139,17091,3474],{"class":149},[139,17093,17094],{"class":160},"\"圆的周长\"",[139,17096,3474],{"class":149},[139,17098,17099],{"class":145},"c1.",[139,17101,17102],{"class":781},"calculateZC",[139,17104,4710],{"class":145},[139,17106,3474],{"class":149},[139,17108,3496],{"class":145},[139,17110,17111],{"class":141,"line":4014},[139,17112,3862],{"class":145},[19,17114,17115],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[130,17117,17119],{"className":2447,"code":17118,"language":2449,"meta":135,"style":135},"#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",[50,17120,17121,17127,17137,17143,17149,17153,17157,17162,17169,17174,17192,17196,17206,17210,17215,17231,17235,17245,17249,17254,17262,17266,17298,17302,17306,17314,17318,17323,17328,17342,17356,17365],{"__ignoreMap":135},[139,17122,17123,17125],{"class":141,"line":142},[139,17124,4236],{"class":149},[139,17126,4239],{"class":160},[139,17128,17129,17131,17133,17135],{"class":141,"line":210},[139,17130,4244],{"class":149},[139,17132,4247],{"class":149},[139,17134,4250],{"class":781},[139,17136,3591],{"class":145},[139,17138,17139,17141],{"class":141,"line":254},[139,17140,4236],{"class":149},[139,17142,10023],{"class":160},[139,17144,17145,17147],{"class":141,"line":262},[139,17146,915],{"class":149},[139,17148,10036],{"class":781},[139,17150,17151],{"class":141,"line":313},[139,17152,3843],{"class":145},[139,17154,17155],{"class":141,"line":462},[139,17156,16986],{"class":149},[139,17158,17159],{"class":141,"line":474},[139,17160,17161],{"class":145},"    string m_name;\n",[139,17163,17164,17166],{"class":141,"line":484},[139,17165,1082],{"class":149},[139,17167,17168],{"class":145}," m_id;\n",[139,17170,17171],{"class":141,"line":989},[139,17172,17173],{"class":2512},"    \u002F\u002F赋值姓名\n",[139,17175,17176,17179,17182,17184,17187,17190],{"class":141,"line":994},[139,17177,17178],{"class":149},"    void",[139,17180,17181],{"class":781}," setName",[139,17183,157],{"class":145},[139,17185,17186],{"class":781},"string",[139,17188,17189],{"class":2111}," name",[139,17191,164],{"class":145},[139,17193,17194],{"class":141,"line":999},[139,17195,4315],{"class":145},[139,17197,17198,17201,17203],{"class":141,"line":1006},[139,17199,17200],{"class":145},"        m_name",[139,17202,150],{"class":149},[139,17204,17205],{"class":145},"name;\n",[139,17207,17208],{"class":141,"line":1027},[139,17209,4472],{"class":145},[139,17211,17212],{"class":141,"line":1040},[139,17213,17214],{"class":2512},"    \u002F\u002F赋值学号\n",[139,17216,17217,17219,17222,17224,17226,17229],{"class":141,"line":2160},[139,17218,17178],{"class":149},[139,17220,17221],{"class":781}," setId",[139,17223,157],{"class":145},[139,17225,2461],{"class":149},[139,17227,17228],{"class":2111}," id",[139,17230,164],{"class":145},[139,17232,17233],{"class":141,"line":2188},[139,17234,4315],{"class":145},[139,17236,17237,17240,17242],{"class":141,"line":3944},[139,17238,17239],{"class":145},"        m_id",[139,17241,150],{"class":149},[139,17243,17244],{"class":145},"id;\n",[139,17246,17247],{"class":141,"line":3963},[139,17248,4472],{"class":145},[139,17250,17251],{"class":141,"line":3968},[139,17252,17253],{"class":2512},"    \u002F\u002F打印学生信息\n",[139,17255,17256,17258,17260],{"class":141,"line":3982},[139,17257,17178],{"class":149},[139,17259,11889],{"class":781},[139,17261,4262],{"class":145},[139,17263,17264],{"class":141,"line":3987},[139,17265,4315],{"class":145},[139,17267,17268,17270,17272,17275,17277,17280,17282,17284,17286,17289,17291,17294,17296],{"class":141,"line":4014},[139,17269,5732],{"class":145},[139,17271,3474],{"class":149},[139,17273,17274],{"class":160},"\"姓名：\"",[139,17276,3474],{"class":149},[139,17278,17279],{"class":145},"m_name",[139,17281,3474],{"class":149},[139,17283,6637],{"class":160},[139,17285,3474],{"class":149},[139,17287,17288],{"class":160},"\"学号：\"",[139,17290,3474],{"class":149},[139,17292,17293],{"class":145},"m_id",[139,17295,3474],{"class":149},[139,17297,3496],{"class":145},[139,17299,17300],{"class":141,"line":4019},[139,17301,4472],{"class":145},[139,17303,17304],{"class":141,"line":4036},[139,17305,6275],{"class":145},[139,17307,17308,17310,17312],{"class":141,"line":4041},[139,17309,2461],{"class":149},[139,17311,4259],{"class":781},[139,17313,4262],{"class":145},[139,17315,17316],{"class":141,"line":4046},[139,17317,3843],{"class":145},[139,17319,17320],{"class":141,"line":4051},[139,17321,17322],{"class":2512},"    \u002F\u002F实例化\n",[139,17324,17325],{"class":141,"line":4065},[139,17326,17327],{"class":145},"    Student s1;\n",[139,17329,17330,17333,17336,17338,17340],{"class":141,"line":4070},[139,17331,17332],{"class":145},"    s1.",[139,17334,17335],{"class":781},"setName",[139,17337,157],{"class":145},[139,17339,10190],{"class":160},[139,17341,5002],{"class":145},[139,17343,17344,17346,17349,17351,17354],{"class":141,"line":4860},[139,17345,17332],{"class":145},[139,17347,17348],{"class":781},"setId",[139,17350,157],{"class":145},[139,17352,17353],{"class":153},"123456",[139,17355,5002],{"class":145},[139,17357,17358,17360,17363],{"class":141,"line":4874},[139,17359,17332],{"class":145},[139,17361,17362],{"class":781},"printInfo",[139,17364,7910],{"class":145},[139,17366,17367],{"class":141,"line":4882},[139,17368,3862],{"class":145},[19,17370,17371],{},"类中的属性和行为统称为成员",[19,17373,17374],{},"属性：成员属性(成员变量)",[19,17376,17377],{},"方法：成员函数(成员方法)",[19,17379,17380],{},[1674,17381,17382],{},"封装意义二：",[19,17384,17385],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17387,17388],{},"访问权限有三种：",[1760,17390,17391,17394,17397],{},[1763,17392,17393],{},"public        公共权限",[1763,17395,17396],{},"protected 保护权限",[1763,17398,17399],{},"private      私有权限",[19,17401,17402],{},[1674,17403,128],{},[130,17405,17407],{"className":12215,"code":17406,"language":12217,"meta":135,"style":135},"\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",[50,17408,17409,17414,17419,17424,17429,17433,17440,17444,17449,17453,17458,17462,17467,17472,17477,17481,17486,17491,17498,17502,17506,17514,17518,17529,17541,17553,17557,17561,17565,17573,17577,17582,17594,17602,17610,17614,17624,17628,17636],{"__ignoreMap":135},[139,17410,17411],{"class":141,"line":142},[139,17412,17413],{"class":2512},"\u002F\u002F三种权限\n",[139,17415,17416],{"class":141,"line":210},[139,17417,17418],{"class":2512},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[139,17420,17421],{"class":141,"line":254},[139,17422,17423],{"class":2512},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[139,17425,17426],{"class":141,"line":262},[139,17427,17428],{"class":2512},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[139,17430,17431],{"class":141,"line":313},[139,17432,843],{"emptyLinePlaceholder":842},[139,17434,17435,17437],{"class":141,"line":462},[139,17436,915],{"class":149},[139,17438,17439],{"class":781}," Person\n",[139,17441,17442],{"class":141,"line":474},[139,17443,3843],{"class":145},[139,17445,17446],{"class":141,"line":484},[139,17447,17448],{"class":2512},"    \u002F\u002F姓名  公共权限\n",[139,17450,17451],{"class":141,"line":989},[139,17452,16986],{"class":149},[139,17454,17455],{"class":141,"line":994},[139,17456,17457],{"class":145},"    string m_Name;\n",[139,17459,17460],{"class":141,"line":999},[139,17461,843],{"emptyLinePlaceholder":842},[139,17463,17464],{"class":141,"line":1006},[139,17465,17466],{"class":2512},"    \u002F\u002F汽车  保护权限\n",[139,17468,17469],{"class":141,"line":1027},[139,17470,17471],{"class":149},"protected:\n",[139,17473,17474],{"class":141,"line":1040},[139,17475,17476],{"class":145},"    string m_Car;\n",[139,17478,17479],{"class":141,"line":2160},[139,17480,843],{"emptyLinePlaceholder":842},[139,17482,17483],{"class":141,"line":2188},[139,17484,17485],{"class":2512},"    \u002F\u002F银行卡密码  私有权限\n",[139,17487,17488],{"class":141,"line":3944},[139,17489,17490],{"class":149},"private:\n",[139,17492,17493,17495],{"class":141,"line":3963},[139,17494,1082],{"class":149},[139,17496,17497],{"class":145}," m_Password;\n",[139,17499,17500],{"class":141,"line":3968},[139,17501,843],{"emptyLinePlaceholder":842},[139,17503,17504],{"class":141,"line":3982},[139,17505,16986],{"class":149},[139,17507,17508,17510,17512],{"class":141,"line":3987},[139,17509,17178],{"class":149},[139,17511,13658],{"class":781},[139,17513,4262],{"class":145},[139,17515,17516],{"class":141,"line":4014},[139,17517,4315],{"class":145},[139,17519,17520,17523,17525,17527],{"class":141,"line":4019},[139,17521,17522],{"class":145},"        m_Name ",[139,17524,150],{"class":149},[139,17526,11212],{"class":160},[139,17528,3591],{"class":145},[139,17530,17531,17534,17536,17539],{"class":141,"line":4036},[139,17532,17533],{"class":145},"        m_Car ",[139,17535,150],{"class":149},[139,17537,17538],{"class":160}," \"拖拉机\"",[139,17540,3591],{"class":145},[139,17542,17543,17546,17548,17551],{"class":141,"line":4041},[139,17544,17545],{"class":145},"        m_Password ",[139,17547,150],{"class":149},[139,17549,17550],{"class":153}," 123456",[139,17552,3591],{"class":145},[139,17554,17555],{"class":141,"line":4046},[139,17556,4472],{"class":145},[139,17558,17559],{"class":141,"line":4051},[139,17560,6275],{"class":145},[139,17562,17563],{"class":141,"line":4065},[139,17564,843],{"emptyLinePlaceholder":842},[139,17566,17567,17569,17571],{"class":141,"line":4070},[139,17568,2461],{"class":149},[139,17570,4259],{"class":781},[139,17572,13127],{"class":145},[139,17574,17575],{"class":141,"line":4860},[139,17576,843],{"emptyLinePlaceholder":842},[139,17578,17579],{"class":141,"line":4874},[139,17580,17581],{"class":145},"    Person p;\n",[139,17583,17584,17587,17589,17592],{"class":141,"line":4882},[139,17585,17586],{"class":145},"    p.m_Name ",[139,17588,150],{"class":149},[139,17590,17591],{"class":160}," \"李四\"",[139,17593,3591],{"class":145},[139,17595,17596,17599],{"class":141,"line":4887},[139,17597,17598],{"class":2512},"    \u002F\u002Fp.m_Car = \"奔驰\";",[139,17600,17601],{"class":2512},"  \u002F\u002F保护权限类外访问不到\n",[139,17603,17604,17607],{"class":141,"line":4893},[139,17605,17606],{"class":2512},"    \u002F\u002Fp.m_Password = 123;",[139,17608,17609],{"class":2512}," \u002F\u002F私有权限类外访问不到\n",[139,17611,17612],{"class":141,"line":4899},[139,17613,843],{"emptyLinePlaceholder":842},[139,17615,17616,17618,17620,17622],{"class":141,"line":4904},[139,17617,4588],{"class":781},[139,17619,157],{"class":145},[139,17621,4593],{"class":160},[139,17623,5002],{"class":145},[139,17625,17626],{"class":141,"line":10222},[139,17627,843],{"emptyLinePlaceholder":842},[139,17629,17630,17632,17634],{"class":141,"line":10246},[139,17631,978],{"class":149},[139,17633,799],{"class":153},[139,17635,3591],{"class":145},[139,17637,17638],{"class":141,"line":10251},[139,17639,3862],{"class":145},[1217,17641,17643],{"id":17642},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17645,17646,17647,17650,17651],{},"在C++中 struct和class唯一的",[1674,17648,17649],{},"区别","就在于 ",[1674,17652,17653],{},"默认的访问权限不同",[19,17655,17656],{},"区别：",[3437,17658,17659,17662],{},[1763,17660,17661],{},"struct 默认权限为公共",[1763,17663,17664],{},"class   默认权限为私有",[130,17666,17668],{"className":12215,"code":17667,"language":12217,"meta":135,"style":135},"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",[50,17669,17670,17677,17681,17691,17695,17699,17706,17710,17720,17724,17728,17736,17740,17745,17759,17763,17768,17782,17786,17796,17800,17808],{"__ignoreMap":135},[139,17671,17672,17674],{"class":141,"line":142},[139,17673,915],{"class":149},[139,17675,17676],{"class":781}," C1\n",[139,17678,17679],{"class":141,"line":210},[139,17680,3843],{"class":145},[139,17682,17683,17685,17688],{"class":141,"line":254},[139,17684,1082],{"class":149},[139,17686,17687],{"class":145},"  m_A;",[139,17689,17690],{"class":2512}," \u002F\u002F默认是私有权限\n",[139,17692,17693],{"class":141,"line":262},[139,17694,6275],{"class":145},[139,17696,17697],{"class":141,"line":313},[139,17698,843],{"emptyLinePlaceholder":842},[139,17700,17701,17703],{"class":141,"line":462},[139,17702,10033],{"class":149},[139,17704,17705],{"class":781}," C2\n",[139,17707,17708],{"class":141,"line":474},[139,17709,3843],{"class":145},[139,17711,17712,17714,17717],{"class":141,"line":484},[139,17713,1082],{"class":149},[139,17715,17716],{"class":145}," m_A;",[139,17718,17719],{"class":2512},"  \u002F\u002F默认是公共权限\n",[139,17721,17722],{"class":141,"line":989},[139,17723,6275],{"class":145},[139,17725,17726],{"class":141,"line":994},[139,17727,843],{"emptyLinePlaceholder":842},[139,17729,17730,17732,17734],{"class":141,"line":999},[139,17731,2461],{"class":149},[139,17733,4259],{"class":781},[139,17735,13127],{"class":145},[139,17737,17738],{"class":141,"line":1006},[139,17739,843],{"emptyLinePlaceholder":842},[139,17741,17742],{"class":141,"line":1027},[139,17743,17744],{"class":145},"    C1 c1;\n",[139,17746,17747,17750,17752,17754,17756],{"class":141,"line":1040},[139,17748,17749],{"class":145},"    c1.m_A ",[139,17751,150],{"class":149},[139,17753,4323],{"class":153},[139,17755,2509],{"class":145},[139,17757,17758],{"class":2512}," \u002F\u002F错误，访问权限是私有\n",[139,17760,17761],{"class":141,"line":2160},[139,17762,843],{"emptyLinePlaceholder":842},[139,17764,17765],{"class":141,"line":2188},[139,17766,17767],{"class":145},"    C2 c2;\n",[139,17769,17770,17773,17775,17777,17779],{"class":141,"line":3944},[139,17771,17772],{"class":145},"    c2.m_A ",[139,17774,150],{"class":149},[139,17776,4323],{"class":153},[139,17778,2509],{"class":145},[139,17780,17781],{"class":2512}," \u002F\u002F正确，访问权限是公共\n",[139,17783,17784],{"class":141,"line":3963},[139,17785,843],{"emptyLinePlaceholder":842},[139,17787,17788,17790,17792,17794],{"class":141,"line":3968},[139,17789,4588],{"class":781},[139,17791,157],{"class":145},[139,17793,4593],{"class":160},[139,17795,5002],{"class":145},[139,17797,17798],{"class":141,"line":3982},[139,17799,843],{"emptyLinePlaceholder":842},[139,17801,17802,17804,17806],{"class":141,"line":3987},[139,17803,978],{"class":149},[139,17805,799],{"class":153},[139,17807,3591],{"class":145},[139,17809,17810],{"class":141,"line":4014},[139,17811,3862],{"class":145},[1217,17813,17815],{"id":17814},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17817,17818],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17820,17821],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17823,17824],{},[1674,17825,128],{},[130,17827,17829],{"className":12215,"code":17828,"language":12217,"meta":135,"style":135},"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",[50,17830,17831,17841,17845,17849,17854,17868,17877,17881,17891,17895,17902,17906,17910,17914,17919,17928,17935,17939,17944,17960,17982,17995,18002,18006,18015,18019,18023,18028,18044,18054,18058,18062,18066,18074,18078,18088,18092,18100,18104,18108,18116,18120,18124,18129,18142,18165,18169,18174,18187,18209,18213,18218,18232,18240,18244,18254,18258,18266],{"__ignoreMap":135},[139,17832,17833,17835,17838],{"class":141,"line":142},[139,17834,915],{"class":149},[139,17836,17837],{"class":781}," Person",[139,17839,17840],{"class":145}," {\n",[139,17842,17843],{"class":141,"line":210},[139,17844,16986],{"class":149},[139,17846,17847],{"class":141,"line":254},[139,17848,843],{"emptyLinePlaceholder":842},[139,17850,17851],{"class":141,"line":262},[139,17852,17853],{"class":2512},"    \u002F\u002F姓名设置可读可写\n",[139,17855,17856,17858,17860,17862,17864,17866],{"class":141,"line":313},[139,17857,17178],{"class":149},[139,17859,17181],{"class":781},[139,17861,157],{"class":145},[139,17863,17186],{"class":781},[139,17865,17189],{"class":2111},[139,17867,14714],{"class":145},[139,17869,17870,17872,17874],{"class":141,"line":462},[139,17871,17522],{"class":145},[139,17873,150],{"class":149},[139,17875,17876],{"class":145}," name;\n",[139,17878,17879],{"class":141,"line":474},[139,17880,4472],{"class":145},[139,17882,17883,17886,17889],{"class":141,"line":484},[139,17884,17885],{"class":781},"    string",[139,17887,17888],{"class":781}," getName",[139,17890,4262],{"class":145},[139,17892,17893],{"class":141,"line":989},[139,17894,4315],{"class":145},[139,17896,17897,17899],{"class":141,"line":994},[139,17898,2085],{"class":149},[139,17900,17901],{"class":145}," m_Name;\n",[139,17903,17904],{"class":141,"line":999},[139,17905,4472],{"class":145},[139,17907,17908],{"class":141,"line":1006},[139,17909,843],{"emptyLinePlaceholder":842},[139,17911,17912],{"class":141,"line":1027},[139,17913,843],{"emptyLinePlaceholder":842},[139,17915,17916],{"class":141,"line":1040},[139,17917,17918],{"class":2512},"    \u002F\u002F获取年龄 \n",[139,17920,17921,17923,17926],{"class":141,"line":2160},[139,17922,1082],{"class":149},[139,17924,17925],{"class":781}," getAge",[139,17927,13127],{"class":145},[139,17929,17930,17932],{"class":141,"line":2188},[139,17931,2085],{"class":149},[139,17933,17934],{"class":145}," m_Age;\n",[139,17936,17937],{"class":141,"line":3944},[139,17938,4472],{"class":145},[139,17940,17941],{"class":141,"line":3963},[139,17942,17943],{"class":2512},"    \u002F\u002F设置年龄\n",[139,17945,17946,17948,17951,17953,17955,17958],{"class":141,"line":3968},[139,17947,17178],{"class":149},[139,17949,17950],{"class":781}," setAge",[139,17952,157],{"class":145},[139,17954,2461],{"class":149},[139,17956,17957],{"class":2111}," age",[139,17959,14714],{"class":145},[139,17961,17962,17964,17967,17969,17971,17973,17975,17977,17980],{"class":141,"line":3982},[139,17963,4780],{"class":149},[139,17965,17966],{"class":145}," (age ",[139,17968,796],{"class":149},[139,17970,799],{"class":153},[139,17972,5536],{"class":149},[139,17974,793],{"class":145},[139,17976,958],{"class":149},[139,17978,17979],{"class":153}," 150",[139,17981,14714],{"class":145},[139,17983,17984,17986,17988,17991,17993],{"class":141,"line":3987},[139,17985,11993],{"class":145},[139,17987,3474],{"class":149},[139,17989,17990],{"class":160}," \"你个老妖精!\"",[139,17992,3742],{"class":149},[139,17994,11114],{"class":145},[139,17996,17997,18000],{"class":141,"line":4014},[139,17998,17999],{"class":149},"            return",[139,18001,3591],{"class":145},[139,18003,18004],{"class":141,"line":4019},[139,18005,4812],{"class":145},[139,18007,18008,18011,18013],{"class":141,"line":4036},[139,18009,18010],{"class":145},"        m_Age ",[139,18012,150],{"class":149},[139,18014,10071],{"class":145},[139,18016,18017],{"class":141,"line":4041},[139,18018,4472],{"class":145},[139,18020,18021],{"class":141,"line":4046},[139,18022,843],{"emptyLinePlaceholder":842},[139,18024,18025],{"class":141,"line":4051},[139,18026,18027],{"class":2512},"    \u002F\u002F情人设置为只写\n",[139,18029,18030,18032,18035,18037,18039,18042],{"class":141,"line":4065},[139,18031,17178],{"class":149},[139,18033,18034],{"class":781}," setLover",[139,18036,157],{"class":145},[139,18038,17186],{"class":781},[139,18040,18041],{"class":2111}," lover",[139,18043,14714],{"class":145},[139,18045,18046,18049,18051],{"class":141,"line":4070},[139,18047,18048],{"class":145},"        m_Lover ",[139,18050,150],{"class":149},[139,18052,18053],{"class":145}," lover;\n",[139,18055,18056],{"class":141,"line":4860},[139,18057,4472],{"class":145},[139,18059,18060],{"class":141,"line":4874},[139,18061,843],{"emptyLinePlaceholder":842},[139,18063,18064],{"class":141,"line":4882},[139,18065,17490],{"class":149},[139,18067,18068,18071],{"class":141,"line":4887},[139,18069,18070],{"class":145},"    string m_Name;",[139,18072,18073],{"class":2512}," \u002F\u002F可读可写  姓名\n",[139,18075,18076],{"class":141,"line":4893},[139,18077,15482],{"class":145},[139,18079,18080,18082,18085],{"class":141,"line":4899},[139,18081,1082],{"class":149},[139,18083,18084],{"class":145}," m_Age;",[139,18086,18087],{"class":2512}," \u002F\u002F只读  年龄\n",[139,18089,18090],{"class":141,"line":4904},[139,18091,843],{"emptyLinePlaceholder":842},[139,18093,18094,18097],{"class":141,"line":10222},[139,18095,18096],{"class":145},"    string m_Lover;",[139,18098,18099],{"class":2512}," \u002F\u002F只写  情人\n",[139,18101,18102],{"class":141,"line":10246},[139,18103,6275],{"class":145},[139,18105,18106],{"class":141,"line":10251},[139,18107,843],{"emptyLinePlaceholder":842},[139,18109,18110,18112,18114],{"class":141,"line":10257},[139,18111,2461],{"class":149},[139,18113,4259],{"class":781},[139,18115,13127],{"class":145},[139,18117,18118],{"class":141,"line":10284},[139,18119,843],{"emptyLinePlaceholder":842},[139,18121,18122],{"class":141,"line":10289},[139,18123,17581],{"class":145},[139,18125,18126],{"class":141,"line":10295},[139,18127,18128],{"class":2512},"    \u002F\u002F姓名设置\n",[139,18130,18131,18134,18136,18138,18140],{"class":141,"line":10307},[139,18132,18133],{"class":145},"    p.",[139,18135,17335],{"class":781},[139,18137,157],{"class":145},[139,18139,10190],{"class":160},[139,18141,5002],{"class":145},[139,18143,18144,18146,18148,18151,18153,18156,18159,18161,18163],{"class":141,"line":10319},[139,18145,8803],{"class":145},[139,18147,3474],{"class":149},[139,18149,18150],{"class":160}," \"姓名： \"",[139,18152,3742],{"class":149},[139,18154,18155],{"class":145}," p.",[139,18157,18158],{"class":781},"getName",[139,18160,15322],{"class":145},[139,18162,3474],{"class":149},[139,18164,11114],{"class":145},[139,18166,18167],{"class":141,"line":10331},[139,18168,843],{"emptyLinePlaceholder":842},[139,18170,18171],{"class":141,"line":11990},[139,18172,18173],{"class":2512},"    \u002F\u002F年龄设置\n",[139,18175,18176,18178,18181,18183,18185],{"class":141,"line":12015},[139,18177,18133],{"class":145},[139,18179,18180],{"class":781},"setAge",[139,18182,157],{"class":145},[139,18184,3091],{"class":153},[139,18186,5002],{"class":145},[139,18188,18189,18191,18193,18196,18198,18200,18203,18205,18207],{"class":141,"line":12038},[139,18190,8803],{"class":145},[139,18192,3474],{"class":149},[139,18194,18195],{"class":160}," \"年龄： \"",[139,18197,3742],{"class":149},[139,18199,18155],{"class":145},[139,18201,18202],{"class":781},"getAge",[139,18204,15322],{"class":145},[139,18206,3474],{"class":149},[139,18208,11114],{"class":145},[139,18210,18211],{"class":141,"line":12062},[139,18212,843],{"emptyLinePlaceholder":842},[139,18214,18215],{"class":141,"line":12067},[139,18216,18217],{"class":2512},"    \u002F\u002F情人设置\n",[139,18219,18220,18222,18225,18227,18230],{"class":141,"line":12072},[139,18221,18133],{"class":145},[139,18223,18224],{"class":781},"setLover",[139,18226,157],{"class":145},[139,18228,18229],{"class":160},"\"苍井\"",[139,18231,5002],{"class":145},[139,18233,18234,18237],{"class":141,"line":12077},[139,18235,18236],{"class":2512},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[139,18238,18239],{"class":2512},"  \u002F\u002F只写属性，不可以读取\n",[139,18241,18242],{"class":141,"line":12086},[139,18243,843],{"emptyLinePlaceholder":842},[139,18245,18246,18248,18250,18252],{"class":141,"line":12091},[139,18247,4588],{"class":781},[139,18249,157],{"class":145},[139,18251,4593],{"class":160},[139,18253,5002],{"class":145},[139,18255,18256],{"class":141,"line":12097},[139,18257,843],{"emptyLinePlaceholder":842},[139,18259,18260,18262,18264],{"class":141,"line":12118},[139,18261,978],{"class":149},[139,18263,799],{"class":153},[139,18265,3591],{"class":145},[139,18267,18268],{"class":141,"line":12124},[139,18269,3862],{"class":145},[1217,18271,18273],{"id":18272},"_814封装案例","8.1.4封装案例",[1760,18275,18276],{},[1763,18277,18278,18281],{},[1674,18279,18280],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3437,18283,18284,18287],{},[1763,18285,18286],{},"求出立方体的面积和体积",[1763,18288,18289],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[130,18291,18293],{"className":2447,"code":18292,"language":2449,"meta":135,"style":135},"#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",[50,18294,18295,18301,18311,18318,18322,18326,18331,18361,18365,18375,18385,18395,18399,18408,18412,18448,18452,18461,18465,18481,18485,18490,18499,18503,18510,18514,18523,18527,18534,18538,18547,18551,18558,18562,18567,18584,18588,18634,18638,18647,18651,18655,18659,18668,18672,18676,18681,18685,18691,18697,18703,18707,18711,18716,18738,18742,18796,18800,18808,18812,18817,18822,18835,18842,18858,18869,18875,18898,18904,18927,18941,18961,18967,18978,19001,19023,19028,19034,19048,19061,19066,19080,19085,19091,19096,19110,19115,19120,19134,19146,19151,19164,19169,19174,19179,19192,19197],{"__ignoreMap":135},[139,18296,18297,18299],{"class":141,"line":142},[139,18298,4236],{"class":149},[139,18300,4239],{"class":160},[139,18302,18303,18305,18307,18309],{"class":141,"line":210},[139,18304,4244],{"class":149},[139,18306,4247],{"class":149},[139,18308,4250],{"class":781},[139,18310,3591],{"class":145},[139,18312,18313,18315],{"class":141,"line":254},[139,18314,915],{"class":149},[139,18316,18317],{"class":781}," Cube\n",[139,18319,18320],{"class":141,"line":262},[139,18321,3843],{"class":145},[139,18323,18324],{"class":141,"line":313},[139,18325,16986],{"class":149},[139,18327,18328],{"class":141,"line":462},[139,18329,18330],{"class":2512},"    \u002F\u002F输入长宽高\n",[139,18332,18333,18335,18338,18340,18342,18345,18347,18349,18352,18354,18356,18359],{"class":141,"line":474},[139,18334,17178],{"class":149},[139,18336,18337],{"class":781}," setLwh",[139,18339,157],{"class":145},[139,18341,2461],{"class":149},[139,18343,18344],{"class":2111}," l",[139,18346,2816],{"class":145},[139,18348,2461],{"class":149},[139,18350,18351],{"class":2111}," w",[139,18353,2816],{"class":145},[139,18355,2461],{"class":149},[139,18357,18358],{"class":2111}," h",[139,18360,164],{"class":145},[139,18362,18363],{"class":141,"line":484},[139,18364,4315],{"class":145},[139,18366,18367,18370,18372],{"class":141,"line":989},[139,18368,18369],{"class":145},"        m_L",[139,18371,150],{"class":149},[139,18373,18374],{"class":145},"l;\n",[139,18376,18377,18380,18382],{"class":141,"line":994},[139,18378,18379],{"class":145},"        m_W",[139,18381,150],{"class":149},[139,18383,18384],{"class":145},"w;\n",[139,18386,18387,18390,18392],{"class":141,"line":999},[139,18388,18389],{"class":145},"        m_H",[139,18391,150],{"class":149},[139,18393,18394],{"class":145},"h;\n",[139,18396,18397],{"class":141,"line":1006},[139,18398,4472],{"class":145},[139,18400,18401,18403,18406],{"class":141,"line":1027},[139,18402,1082],{"class":149},[139,18404,18405],{"class":781}," mianji",[139,18407,4262],{"class":145},[139,18409,18410],{"class":141,"line":1040},[139,18411,4315],{"class":145},[139,18413,18414,18416,18418,18420,18423,18425,18428,18430,18433,18435,18438,18440,18443,18445],{"class":141,"line":2160},[139,18415,2085],{"class":149},[139,18417,17024],{"class":153},[139,18419,2892],{"class":149},[139,18421,18422],{"class":145},"(m_L",[139,18424,2892],{"class":149},[139,18426,18427],{"class":145},"m_W ",[139,18429,1147],{"class":149},[139,18431,18432],{"class":145}," m_L",[139,18434,2892],{"class":149},[139,18436,18437],{"class":145},"m_H ",[139,18439,1147],{"class":149},[139,18441,18442],{"class":145}," m_W",[139,18444,2892],{"class":149},[139,18446,18447],{"class":145},"m_H);\n",[139,18449,18450],{"class":141,"line":2188},[139,18451,4472],{"class":145},[139,18453,18454,18456,18459],{"class":141,"line":3944},[139,18455,1082],{"class":149},[139,18457,18458],{"class":781}," tiji",[139,18460,4262],{"class":145},[139,18462,18463],{"class":141,"line":3963},[139,18464,4315],{"class":145},[139,18466,18467,18469,18471,18473,18476,18478],{"class":141,"line":3968},[139,18468,2085],{"class":149},[139,18470,18432],{"class":145},[139,18472,2892],{"class":149},[139,18474,18475],{"class":145},"m_W",[139,18477,2892],{"class":149},[139,18479,18480],{"class":145},"m_H;\n",[139,18482,18483],{"class":141,"line":3982},[139,18484,4472],{"class":145},[139,18486,18487],{"class":141,"line":3987},[139,18488,18489],{"class":2512},"    \u002F\u002F获取长宽高\n",[139,18491,18492,18494,18497],{"class":141,"line":4014},[139,18493,1082],{"class":149},[139,18495,18496],{"class":781}," getLength",[139,18498,4262],{"class":145},[139,18500,18501],{"class":141,"line":4019},[139,18502,4315],{"class":145},[139,18504,18505,18507],{"class":141,"line":4036},[139,18506,2085],{"class":149},[139,18508,18509],{"class":145}," m_L;\n",[139,18511,18512],{"class":141,"line":4041},[139,18513,4472],{"class":145},[139,18515,18516,18518,18521],{"class":141,"line":4046},[139,18517,1082],{"class":149},[139,18519,18520],{"class":781}," getWidth",[139,18522,4262],{"class":145},[139,18524,18525],{"class":141,"line":4051},[139,18526,4315],{"class":145},[139,18528,18529,18531],{"class":141,"line":4065},[139,18530,2085],{"class":149},[139,18532,18533],{"class":145}," m_W;\n",[139,18535,18536],{"class":141,"line":4070},[139,18537,4472],{"class":145},[139,18539,18540,18542,18545],{"class":141,"line":4860},[139,18541,1082],{"class":149},[139,18543,18544],{"class":781}," getHeight",[139,18546,4262],{"class":145},[139,18548,18549],{"class":141,"line":4874},[139,18550,4315],{"class":145},[139,18552,18553,18555],{"class":141,"line":4882},[139,18554,2085],{"class":149},[139,18556,18557],{"class":145}," m_H;\n",[139,18559,18560],{"class":141,"line":4887},[139,18561,4472],{"class":145},[139,18563,18564],{"class":141,"line":4893},[139,18565,18566],{"class":2512},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[139,18568,18569,18572,18575,18577,18580,18582],{"class":141,"line":4899},[139,18570,18571],{"class":149},"    bool",[139,18573,18574],{"class":781}," isEqual",[139,18576,157],{"class":145},[139,18578,18579],{"class":781},"Cube",[139,18581,5132],{"class":2111},[139,18583,164],{"class":145},[139,18585,18586],{"class":141,"line":4904},[139,18587,4315],{"class":145},[139,18589,18590,18592,18595,18598,18600,18602,18605,18607,18610,18613,18615,18617,18620,18622,18624,18627,18629,18631],{"class":141,"line":10222},[139,18591,4780],{"class":149},[139,18593,18594],{"class":145}," (c.",[139,18596,18597],{"class":781},"getLength",[139,18599,15322],{"class":145},[139,18601,5232],{"class":149},[139,18603,18604],{"class":145}," m_L ",[139,18606,4003],{"class":149},[139,18608,18609],{"class":145}," c.",[139,18611,18612],{"class":781},"getWidth",[139,18614,15322],{"class":145},[139,18616,5232],{"class":149},[139,18618,18619],{"class":145}," m_W ",[139,18621,4003],{"class":149},[139,18623,18609],{"class":145},[139,18625,18626],{"class":781},"getHeight",[139,18628,15322],{"class":145},[139,18630,5232],{"class":149},[139,18632,18633],{"class":145}," m_H)\n",[139,18635,18636],{"class":141,"line":10246},[139,18637,4793],{"class":145},[139,18639,18640,18642,18645],{"class":141,"line":10251},[139,18641,17999],{"class":149},[139,18643,18644],{"class":153}," true",[139,18646,3591],{"class":145},[139,18648,18649],{"class":141,"line":10257},[139,18650,4812],{"class":145},[139,18652,18653],{"class":141,"line":10284},[139,18654,4853],{"class":149},[139,18656,18657],{"class":141,"line":10289},[139,18658,4793],{"class":145},[139,18660,18661,18663,18666],{"class":141,"line":10295},[139,18662,17999],{"class":149},[139,18664,18665],{"class":153}," false",[139,18667,3591],{"class":145},[139,18669,18670],{"class":141,"line":10307},[139,18671,4812],{"class":145},[139,18673,18674],{"class":141,"line":10319},[139,18675,4472],{"class":145},[139,18677,18678],{"class":141,"line":10331},[139,18679,18680],{"class":2512},"    \u002F\u002F私有属性\n",[139,18682,18683],{"class":141,"line":11990},[139,18684,17490],{"class":149},[139,18686,18687,18689],{"class":141,"line":12015},[139,18688,1082],{"class":149},[139,18690,18509],{"class":145},[139,18692,18693,18695],{"class":141,"line":12038},[139,18694,1082],{"class":149},[139,18696,18533],{"class":145},[139,18698,18699,18701],{"class":141,"line":12062},[139,18700,1082],{"class":149},[139,18702,18557],{"class":145},[139,18704,18705],{"class":141,"line":12067},[139,18706,843],{"emptyLinePlaceholder":842},[139,18708,18709],{"class":141,"line":12072},[139,18710,6275],{"class":145},[139,18712,18713],{"class":141,"line":12077},[139,18714,18715],{"class":2512},"\u002F\u002F全局函数判断两个立方体是否相等\n",[139,18717,18718,18720,18722,18724,18726,18729,18731,18733,18736],{"class":141,"line":12086},[139,18719,3652],{"class":149},[139,18721,18574],{"class":781},[139,18723,157],{"class":145},[139,18725,18579],{"class":781},[139,18727,18728],{"class":2111}," c1",[139,18730,2816],{"class":145},[139,18732,18579],{"class":781},[139,18734,18735],{"class":2111}," c2",[139,18737,164],{"class":145},[139,18739,18740],{"class":141,"line":12091},[139,18741,3843],{"class":145},[139,18743,18744,18746,18749,18751,18753,18755,18758,18760,18763,18765,18767,18769,18771,18773,18775,18777,18779,18781,18783,18785,18787,18789,18791,18793],{"class":141,"line":12097},[139,18745,978],{"class":149},[139,18747,18748],{"class":145}," (c1.",[139,18750,18597],{"class":781},[139,18752,15322],{"class":145},[139,18754,5232],{"class":149},[139,18756,18757],{"class":145}," c2.",[139,18759,18597],{"class":781},[139,18761,18762],{"class":145},"()) ",[139,18764,4003],{"class":149},[139,18766,18748],{"class":145},[139,18768,18612],{"class":781},[139,18770,15322],{"class":145},[139,18772,5232],{"class":149},[139,18774,18757],{"class":145},[139,18776,18612],{"class":781},[139,18778,18762],{"class":145},[139,18780,4003],{"class":149},[139,18782,18748],{"class":145},[139,18784,18626],{"class":781},[139,18786,15322],{"class":145},[139,18788,5232],{"class":149},[139,18790,18757],{"class":145},[139,18792,18626],{"class":781},[139,18794,18795],{"class":145},"());\n",[139,18797,18798],{"class":141,"line":12118},[139,18799,3862],{"class":145},[139,18801,18802,18804,18806],{"class":141,"line":12124},[139,18803,2461],{"class":149},[139,18805,4259],{"class":781},[139,18807,4262],{"class":145},[139,18809,18810],{"class":141,"line":12138},[139,18811,3843],{"class":145},[139,18813,18814],{"class":141,"line":12144},[139,18815,18816],{"class":145},"    Cube c1;\n",[139,18818,18819],{"class":141,"line":12171},[139,18820,18821],{"class":2512},"    \u002F\u002F输入立方体的长宽高\n",[139,18823,18824,18826,18828,18831,18833],{"class":141,"line":12180},[139,18825,3848],{"class":145},[139,18827,3474],{"class":149},[139,18829,18830],{"class":160},"\"请输入第一个立方体的长、宽、高：\"",[139,18832,3474],{"class":149},[139,18834,3496],{"class":145},[139,18836,18837,18839],{"class":141,"line":12186},[139,18838,1082],{"class":149},[139,18840,18841],{"class":145}," l,w,h,l1,w1,h1;\n",[139,18843,18844,18846,18848,18850,18852,18854,18856],{"class":141,"line":12194},[139,18845,4297],{"class":145},[139,18847,3727],{"class":149},[139,18849,2954],{"class":145},[139,18851,3727],{"class":149},[139,18853,3230],{"class":145},[139,18855,3727],{"class":149},[139,18857,18394],{"class":145},[139,18859,18860,18863,18866],{"class":141,"line":12199},[139,18861,18862],{"class":145},"    c1.",[139,18864,18865],{"class":781},"setLwh",[139,18867,18868],{"class":145},"(l,w,h);\n",[139,18870,18872],{"class":141,"line":18871},66,[139,18873,18874],{"class":2512},"    \u002F\u002F面积\n",[139,18876,18878,18880,18882,18885,18887,18889,18892,18894,18896],{"class":141,"line":18877},67,[139,18879,3848],{"class":145},[139,18881,3474],{"class":149},[139,18883,18884],{"class":160},"\"立方体的表面积为：\"",[139,18886,3474],{"class":149},[139,18888,17099],{"class":145},[139,18890,18891],{"class":781},"mianji",[139,18893,4710],{"class":145},[139,18895,3474],{"class":149},[139,18897,3496],{"class":145},[139,18899,18901],{"class":141,"line":18900},68,[139,18902,18903],{"class":2512},"    \u002F\u002F体积\n",[139,18905,18907,18909,18911,18914,18916,18918,18921,18923,18925],{"class":141,"line":18906},69,[139,18908,3848],{"class":145},[139,18910,3474],{"class":149},[139,18912,18913],{"class":160},"\"立方体的体积为：\"",[139,18915,3474],{"class":149},[139,18917,17099],{"class":145},[139,18919,18920],{"class":781},"tiji",[139,18922,4710],{"class":145},[139,18924,3474],{"class":149},[139,18926,3496],{"class":145},[139,18928,18930,18932,18934,18937,18939],{"class":141,"line":18929},70,[139,18931,3848],{"class":145},[139,18933,3474],{"class":149},[139,18935,18936],{"class":160},"\"请输入第二个立方体的长、宽、高：\"",[139,18938,3474],{"class":149},[139,18940,3496],{"class":145},[139,18942,18944,18946,18948,18951,18953,18956,18958],{"class":141,"line":18943},71,[139,18945,4297],{"class":145},[139,18947,3727],{"class":149},[139,18949,18950],{"class":145},"l1",[139,18952,3727],{"class":149},[139,18954,18955],{"class":145},"w1",[139,18957,3727],{"class":149},[139,18959,18960],{"class":145},"h1;\n",[139,18962,18964],{"class":141,"line":18963},72,[139,18965,18966],{"class":145},"    Cube c2;\n",[139,18968,18970,18973,18975],{"class":141,"line":18969},73,[139,18971,18972],{"class":145},"    c2.",[139,18974,18865],{"class":781},[139,18976,18977],{"class":145},"(l1,w1,h1);\n",[139,18979,18981,18983,18985,18988,18990,18993,18995,18997,18999],{"class":141,"line":18980},74,[139,18982,3848],{"class":145},[139,18984,3474],{"class":149},[139,18986,18987],{"class":160},"\"第二个立方体的表面积为：\"",[139,18989,3474],{"class":149},[139,18991,18992],{"class":145},"c2.",[139,18994,18891],{"class":781},[139,18996,4710],{"class":145},[139,18998,3474],{"class":149},[139,19000,3496],{"class":145},[139,19002,19004,19006,19008,19011,19013,19015,19017,19019,19021],{"class":141,"line":19003},75,[139,19005,3848],{"class":145},[139,19007,3474],{"class":149},[139,19009,19010],{"class":160},"\"第二个立方体的体积为：\"",[139,19012,3474],{"class":149},[139,19014,18992],{"class":145},[139,19016,18920],{"class":781},[139,19018,4710],{"class":145},[139,19020,3474],{"class":149},[139,19022,3496],{"class":145},[139,19024,19026],{"class":141,"line":19025},76,[139,19027,843],{"emptyLinePlaceholder":842},[139,19029,19031],{"class":141,"line":19030},77,[139,19032,19033],{"class":2512},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[139,19035,19037,19039,19041,19044,19046],{"class":141,"line":19036},78,[139,19038,3848],{"class":145},[139,19040,3474],{"class":149},[139,19042,19043],{"class":160},"\"内部函数判断结果：\"",[139,19045,3474],{"class":149},[139,19047,3496],{"class":145},[139,19049,19051,19053,19055,19058],{"class":141,"line":19050},79,[139,19052,790],{"class":149},[139,19054,18748],{"class":145},[139,19056,19057],{"class":781},"isEqual",[139,19059,19060],{"class":145},"(c2))\n",[139,19062,19064],{"class":141,"line":19063},80,[139,19065,4315],{"class":145},[139,19067,19069,19071,19073,19076,19078],{"class":141,"line":19068},81,[139,19070,5732],{"class":145},[139,19072,3474],{"class":149},[139,19074,19075],{"class":160},"\"两个立方体相等\"",[139,19077,3474],{"class":149},[139,19079,3496],{"class":145},[139,19081,19083],{"class":141,"line":19082},82,[139,19084,4472],{"class":145},[139,19086,19088],{"class":141,"line":19087},83,[139,19089,19090],{"class":149},"    else\n",[139,19092,19094],{"class":141,"line":19093},84,[139,19095,4315],{"class":145},[139,19097,19099,19101,19103,19106,19108],{"class":141,"line":19098},85,[139,19100,5732],{"class":145},[139,19102,3474],{"class":149},[139,19104,19105],{"class":160},"\"两个立方体不相等\"",[139,19107,3474],{"class":149},[139,19109,3496],{"class":145},[139,19111,19113],{"class":141,"line":19112},86,[139,19114,4472],{"class":145},[139,19116,19118],{"class":141,"line":19117},87,[139,19119,843],{"emptyLinePlaceholder":842},[139,19121,19123,19125,19127,19130,19132],{"class":141,"line":19122},88,[139,19124,3848],{"class":145},[139,19126,3474],{"class":149},[139,19128,19129],{"class":160},"\"全局函数判断结果：\"",[139,19131,3474],{"class":149},[139,19133,3496],{"class":145},[139,19135,19137,19139,19141,19143],{"class":141,"line":19136},89,[139,19138,790],{"class":149},[139,19140,549],{"class":145},[139,19142,19057],{"class":781},[139,19144,19145],{"class":145},"(c1, c2))\n",[139,19147,19149],{"class":141,"line":19148},90,[139,19150,4315],{"class":145},[139,19152,19154,19156,19158,19160,19162],{"class":141,"line":19153},91,[139,19155,5732],{"class":145},[139,19157,3474],{"class":149},[139,19159,19075],{"class":160},[139,19161,3474],{"class":149},[139,19163,3496],{"class":145},[139,19165,19167],{"class":141,"line":19166},92,[139,19168,4472],{"class":145},[139,19170,19172],{"class":141,"line":19171},93,[139,19173,19090],{"class":149},[139,19175,19177],{"class":141,"line":19176},94,[139,19178,4315],{"class":145},[139,19180,19182,19184,19186,19188,19190],{"class":141,"line":19181},95,[139,19183,5732],{"class":145},[139,19185,3474],{"class":149},[139,19187,19105],{"class":160},[139,19189,3474],{"class":149},[139,19191,3496],{"class":145},[139,19193,19195],{"class":141,"line":19194},96,[139,19196,4472],{"class":145},[139,19198,19200],{"class":141,"line":19199},97,[139,19201,3862],{"class":145},[1760,19203,19204],{"start":210},[1763,19205,19206],{},[1674,19207,19208],{},"练习案例2：点和圆的关系",[3437,19210,19211],{},[1763,19212,19213],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[130,19215,19217],{"className":2447,"code":19216,"language":2449,"meta":135,"style":135},"#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",[50,19218,19219,19225,19235,19242,19249,19253,19257,19262,19296,19301,19317,19331,19335,19339,19346,19353,19357,19363,19367,19371,19375,19397,19420,19425,19439,19454,19458,19462,19468,19473,19478,19482,19508,19512,19542,19570,19598,19615,19619,19632,19636,19640,19644,19657,19661,19665,19673,19677,19681,19685,19690,19694,19705,19712,19721,19731,19742,19749,19762,19773,19783,19794,19801,19815,19820,19830,19838],{"__ignoreMap":135},[139,19220,19221,19223],{"class":141,"line":142},[139,19222,4236],{"class":149},[139,19224,4239],{"class":160},[139,19226,19227,19229,19231,19233],{"class":141,"line":210},[139,19228,4244],{"class":149},[139,19230,4247],{"class":149},[139,19232,4250],{"class":781},[139,19234,3591],{"class":145},[139,19236,19237,19239],{"class":141,"line":254},[139,19238,4236],{"class":149},[139,19240,19241],{"class":160},"\u003Ccmath>\n",[139,19243,19244,19246],{"class":141,"line":262},[139,19245,915],{"class":149},[139,19247,19248],{"class":781}," Point\n",[139,19250,19251],{"class":141,"line":313},[139,19252,3843],{"class":145},[139,19254,19255],{"class":141,"line":462},[139,19256,16986],{"class":149},[139,19258,19259],{"class":141,"line":474},[139,19260,19261],{"class":2512},"    \u002F\u002F赋值\n",[139,19263,19264,19266,19269,19271,19273,19276,19278,19280,19283,19286,19288,19291,19293],{"class":141,"line":484},[139,19265,17178],{"class":149},[139,19267,19268],{"class":781}," setPoint",[139,19270,157],{"class":145},[139,19272,16308],{"class":149},[139,19274,19275],{"class":2111}," x",[139,19277,413],{"class":145},[139,19279,16308],{"class":149},[139,19281,19282],{"class":2111}," y",[139,19284,19285],{"class":145},") { m_x ",[139,19287,150],{"class":149},[139,19289,19290],{"class":145}," x; m_y ",[139,19292,150],{"class":149},[139,19294,19295],{"class":145}," y; }\n",[139,19297,19298],{"class":141,"line":989},[139,19299,19300],{"class":2512},"    \u002F\u002F获取坐标\n",[139,19302,19303,19305,19308,19311,19314],{"class":141,"line":994},[139,19304,17008],{"class":149},[139,19306,19307],{"class":781}," getX",[139,19309,19310],{"class":145},"() { ",[139,19312,19313],{"class":149},"return",[139,19315,19316],{"class":145}," m_x; }\n",[139,19318,19319,19321,19324,19326,19328],{"class":141,"line":999},[139,19320,17008],{"class":149},[139,19322,19323],{"class":781}," getY",[139,19325,19310],{"class":145},[139,19327,19313],{"class":149},[139,19329,19330],{"class":145}," m_y; }\n",[139,19332,19333],{"class":141,"line":1006},[139,19334,843],{"emptyLinePlaceholder":842},[139,19336,19337],{"class":141,"line":1027},[139,19338,17490],{"class":149},[139,19340,19341,19343],{"class":141,"line":1040},[139,19342,17008],{"class":149},[139,19344,19345],{"class":145}," m_x;\n",[139,19347,19348,19350],{"class":141,"line":2160},[139,19349,17008],{"class":149},[139,19351,19352],{"class":145}," m_y;\n",[139,19354,19355],{"class":141,"line":2188},[139,19356,6275],{"class":145},[139,19358,19359,19361],{"class":141,"line":3944},[139,19360,915],{"class":149},[139,19362,16967],{"class":781},[139,19364,19365],{"class":141,"line":3963},[139,19366,3843],{"class":145},[139,19368,19369],{"class":141,"line":3968},[139,19370,16986],{"class":149},[139,19372,19373],{"class":141,"line":3982},[139,19374,19261],{"class":2512},[139,19376,19377,19379,19382,19384,19386,19389,19392,19394],{"class":141,"line":3987},[139,19378,17178],{"class":149},[139,19380,19381],{"class":781}," setRadius",[139,19383,157],{"class":145},[139,19385,16308],{"class":149},[139,19387,19388],{"class":2111}," r",[139,19390,19391],{"class":145},") { m_r ",[139,19393,150],{"class":149},[139,19395,19396],{"class":145}," r; }\n",[139,19398,19399,19401,19404,19406,19409,19412,19415,19417],{"class":141,"line":4014},[139,19400,17178],{"class":149},[139,19402,19403],{"class":781}," setCenter",[139,19405,157],{"class":145},[139,19407,19408],{"class":781},"Point",[139,19410,19411],{"class":2111}," center",[139,19413,19414],{"class":145},") { m_center ",[139,19416,150],{"class":149},[139,19418,19419],{"class":145}," center; }\n",[139,19421,19422],{"class":141,"line":4019},[139,19423,19424],{"class":2512},"    \u002F\u002F获取属性\n",[139,19426,19427,19429,19432,19434,19436],{"class":141,"line":4036},[139,19428,17008],{"class":149},[139,19430,19431],{"class":781}," getRadius",[139,19433,19310],{"class":145},[139,19435,19313],{"class":149},[139,19437,19438],{"class":145}," m_r; }\n",[139,19440,19441,19444,19447,19449,19451],{"class":141,"line":4041},[139,19442,19443],{"class":781},"    Point",[139,19445,19446],{"class":781}," getCenter",[139,19448,19310],{"class":145},[139,19450,19313],{"class":149},[139,19452,19453],{"class":145}," m_center; }\n",[139,19455,19456],{"class":141,"line":4046},[139,19457,843],{"emptyLinePlaceholder":842},[139,19459,19460],{"class":141,"line":4051},[139,19461,17490],{"class":149},[139,19463,19464,19466],{"class":141,"line":4065},[139,19465,17008],{"class":149},[139,19467,16998],{"class":145},[139,19469,19470],{"class":141,"line":4070},[139,19471,19472],{"class":2512},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[139,19474,19475],{"class":141,"line":4860},[139,19476,19477],{"class":145},"    Point m_center;\n",[139,19479,19480],{"class":141,"line":4874},[139,19481,6275],{"class":145},[139,19483,19484,19486,19489,19491,19494,19496,19498,19500,19502,19504,19506],{"class":141,"line":4882},[139,19485,7638],{"class":149},[139,19487,19488],{"class":781}," isInCircle",[139,19490,157],{"class":145},[139,19492,19493],{"class":781},"Circle",[139,19495,12858],{"class":149},[139,19497,2729],{"class":2111},[139,19499,2816],{"class":145},[139,19501,19408],{"class":781},[139,19503,12858],{"class":149},[139,19505,19],{"class":2111},[139,19507,164],{"class":145},[139,19509,19510],{"class":141,"line":4887},[139,19511,3843],{"class":145},[139,19513,19514,19516,19519,19521,19523,19526,19529,19532,19534,19536,19538,19540],{"class":141,"line":4893},[139,19515,17008],{"class":149},[139,19517,19518],{"class":145}," dx ",[139,19520,150],{"class":149},[139,19522,18609],{"class":145},[139,19524,19525],{"class":781},"getCenter",[139,19527,19528],{"class":145},"().",[139,19530,19531],{"class":781},"getX",[139,19533,15322],{"class":145},[139,19535,855],{"class":149},[139,19537,18155],{"class":145},[139,19539,19531],{"class":781},[139,19541,7910],{"class":145},[139,19543,19544,19546,19549,19551,19553,19555,19557,19560,19562,19564,19566,19568],{"class":141,"line":4899},[139,19545,17008],{"class":149},[139,19547,19548],{"class":145}," dy ",[139,19550,150],{"class":149},[139,19552,18609],{"class":145},[139,19554,19525],{"class":781},[139,19556,19528],{"class":145},[139,19558,19559],{"class":781},"getY",[139,19561,15322],{"class":145},[139,19563,855],{"class":149},[139,19565,18155],{"class":145},[139,19567,19559],{"class":781},[139,19569,7910],{"class":145},[139,19571,19572,19574,19577,19579,19582,19585,19587,19589,19591,19593,19595],{"class":141,"line":4904},[139,19573,17008],{"class":149},[139,19575,19576],{"class":145}," distance ",[139,19578,150],{"class":149},[139,19580,19581],{"class":781}," sqrt",[139,19583,19584],{"class":145},"(dx ",[139,19586,2892],{"class":149},[139,19588,19518],{"class":145},[139,19590,1147],{"class":149},[139,19592,19548],{"class":145},[139,19594,2892],{"class":149},[139,19596,19597],{"class":145}," dy);\n",[139,19599,19600,19602,19605,19607,19609,19612],{"class":141,"line":10222},[139,19601,790],{"class":149},[139,19603,19604],{"class":145}," (distance ",[139,19606,796],{"class":149},[139,19608,18609],{"class":145},[139,19610,19611],{"class":781},"getRadius",[139,19613,19614],{"class":145},"())\n",[139,19616,19617],{"class":141,"line":10246},[139,19618,4315],{"class":145},[139,19620,19621,19623,19625,19628,19630],{"class":141,"line":10251},[139,19622,11943],{"class":145},[139,19624,3474],{"class":149},[139,19626,19627],{"class":160}," \"点在圆内\"",[139,19629,3742],{"class":149},[139,19631,11114],{"class":145},[139,19633,19634],{"class":141,"line":10257},[139,19635,4472],{"class":145},[139,19637,19638],{"class":141,"line":10284},[139,19639,19090],{"class":149},[139,19641,19642],{"class":141,"line":10289},[139,19643,4315],{"class":145},[139,19645,19646,19648,19650,19653,19655],{"class":141,"line":10295},[139,19647,11943],{"class":145},[139,19649,3474],{"class":149},[139,19651,19652],{"class":160}," \"点在圆外\"",[139,19654,3742],{"class":149},[139,19656,11114],{"class":145},[139,19658,19659],{"class":141,"line":10307},[139,19660,4472],{"class":145},[139,19662,19663],{"class":141,"line":10319},[139,19664,3862],{"class":145},[139,19666,19667,19669,19671],{"class":141,"line":10331},[139,19668,2461],{"class":149},[139,19670,4259],{"class":781},[139,19672,4262],{"class":145},[139,19674,19675],{"class":141,"line":11990},[139,19676,3843],{"class":145},[139,19678,19679],{"class":141,"line":12015},[139,19680,17322],{"class":2512},[139,19682,19683],{"class":141,"line":12038},[139,19684,17069],{"class":145},[139,19686,19687],{"class":141,"line":12062},[139,19688,19689],{"class":145},"    Point p1;\n",[139,19691,19692],{"class":141,"line":12067},[139,19693,19261],{"class":2512},[139,19695,19696,19698,19700,19703],{"class":141,"line":12072},[139,19697,3848],{"class":145},[139,19699,3474],{"class":149},[139,19701,19702],{"class":160},"\"请输入圆的半径：\"",[139,19704,3591],{"class":145},[139,19706,19707,19709],{"class":141,"line":12077},[139,19708,17008],{"class":149},[139,19710,19711],{"class":145}," r;\n",[139,19713,19714,19716,19718],{"class":141,"line":12086},[139,19715,4297],{"class":145},[139,19717,3727],{"class":149},[139,19719,19720],{"class":145},"r;\n",[139,19722,19723,19725,19728],{"class":141,"line":12091},[139,19724,18862],{"class":145},[139,19726,19727],{"class":781},"setRadius",[139,19729,19730],{"class":145},"(r);\n",[139,19732,19733,19735,19737,19740],{"class":141,"line":12097},[139,19734,3848],{"class":145},[139,19736,3474],{"class":149},[139,19738,19739],{"class":160},"\"请输入圆心坐标：\"",[139,19741,3591],{"class":145},[139,19743,19744,19746],{"class":141,"line":12118},[139,19745,17008],{"class":149},[139,19747,19748],{"class":145}," x, y;\n",[139,19750,19751,19753,19755,19757,19759],{"class":141,"line":12124},[139,19752,4297],{"class":145},[139,19754,3727],{"class":149},[139,19756,3255],{"class":145},[139,19758,3727],{"class":149},[139,19760,19761],{"class":145},"y;\n",[139,19763,19764,19767,19770],{"class":141,"line":12138},[139,19765,19766],{"class":145},"    p1.",[139,19768,19769],{"class":781},"setPoint",[139,19771,19772],{"class":145},"(x, y);\n",[139,19774,19775,19777,19780],{"class":141,"line":12144},[139,19776,18862],{"class":145},[139,19778,19779],{"class":781},"setCenter",[139,19781,19782],{"class":145},"(p1);\n",[139,19784,19785,19787,19789,19792],{"class":141,"line":12171},[139,19786,3848],{"class":145},[139,19788,3474],{"class":149},[139,19790,19791],{"class":160},"\"请输入测试点坐标：\"",[139,19793,3591],{"class":145},[139,19795,19796,19798],{"class":141,"line":12180},[139,19797,17008],{"class":149},[139,19799,19800],{"class":145}," x1, y1;\n",[139,19802,19803,19805,19807,19810,19812],{"class":141,"line":12186},[139,19804,4297],{"class":145},[139,19806,3727],{"class":149},[139,19808,19809],{"class":145},"x1",[139,19811,3727],{"class":149},[139,19813,19814],{"class":145},"y1;\n",[139,19816,19817],{"class":141,"line":12194},[139,19818,19819],{"class":145},"    Point p2;\n",[139,19821,19822,19825,19827],{"class":141,"line":12199},[139,19823,19824],{"class":145},"    p2.",[139,19826,19769],{"class":781},[139,19828,19829],{"class":145},"(x1, y1);\n",[139,19831,19832,19835],{"class":141,"line":18871},[139,19833,19834],{"class":781},"    isInCircle",[139,19836,19837],{"class":145},"(c1, p2);\n",[139,19839,19840],{"class":141,"line":18877},[139,19841,3862],{"class":145},[19,19843,19844],{},"在类中可以让另一个类作为本来的成员",[19,19846,19847],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19849,19850],{},"创建point.h",[130,19852,19854],{"className":2447,"code":19853,"language":2449,"meta":135,"style":135},"#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",[50,19855,19856,19867,19873,19883,19889,19893,19898,19902,19906,19926,19930,19938,19946,19950,19954,19960,19966],{"__ignoreMap":135},[139,19857,19858,19861,19864],{"class":141,"line":142},[139,19859,19860],{"class":149},"#pragma",[139,19862,19863],{"class":781}," once",[139,19865,19866],{"class":2512}," \u002F\u002F防止头文件重复包含\n",[139,19868,19869,19871],{"class":141,"line":210},[139,19870,4236],{"class":149},[139,19872,4239],{"class":160},[139,19874,19875,19877,19879,19881],{"class":141,"line":254},[139,19876,4244],{"class":149},[139,19878,4247],{"class":149},[139,19880,4250],{"class":781},[139,19882,3591],{"class":145},[139,19884,19885,19887],{"class":141,"line":262},[139,19886,915],{"class":149},[139,19888,19248],{"class":781},[139,19890,19891],{"class":141,"line":313},[139,19892,3843],{"class":145},[139,19894,19895],{"class":141,"line":462},[139,19896,19897],{"class":2512},"\u002F\u002F做好声明与变量定义就可以\n",[139,19899,19900],{"class":141,"line":474},[139,19901,16986],{"class":149},[139,19903,19904],{"class":141,"line":484},[139,19905,19261],{"class":2512},[139,19907,19908,19910,19912,19914,19916,19918,19920,19922,19924],{"class":141,"line":989},[139,19909,17178],{"class":149},[139,19911,19268],{"class":781},[139,19913,157],{"class":145},[139,19915,16308],{"class":149},[139,19917,19275],{"class":2111},[139,19919,413],{"class":145},[139,19921,16308],{"class":149},[139,19923,19282],{"class":2111},[139,19925,5002],{"class":145},[139,19927,19928],{"class":141,"line":994},[139,19929,19300],{"class":2512},[139,19931,19932,19934,19936],{"class":141,"line":999},[139,19933,17008],{"class":149},[139,19935,19307],{"class":781},[139,19937,7910],{"class":145},[139,19939,19940,19942,19944],{"class":141,"line":1006},[139,19941,17008],{"class":149},[139,19943,19323],{"class":781},[139,19945,7910],{"class":145},[139,19947,19948],{"class":141,"line":1027},[139,19949,843],{"emptyLinePlaceholder":842},[139,19951,19952],{"class":141,"line":1040},[139,19953,17490],{"class":149},[139,19955,19956,19958],{"class":141,"line":2160},[139,19957,17008],{"class":149},[139,19959,19345],{"class":145},[139,19961,19962,19964],{"class":141,"line":2188},[139,19963,17008],{"class":149},[139,19965,19352],{"class":145},[139,19967,19968],{"class":141,"line":3944},[139,19969,6275],{"class":145},[19,19971,19972],{},"创建point.cpp",[130,19974,19976],{"className":2447,"code":19975,"language":2449,"meta":135,"style":135},"#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",[50,19977,19978,19985,19990,20024,20028,20044],{"__ignoreMap":135},[139,19979,19980,19982],{"class":141,"line":142},[139,19981,4236],{"class":149},[139,19983,19984],{"class":160},"\u003Cpoint.h>\n",[139,19986,19987],{"class":141,"line":210},[139,19988,19989],{"class":2512},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[139,19991,19992,19994,19997,20000,20002,20004,20006,20008,20010,20012,20014,20016,20018,20020,20022],{"class":141,"line":254},[139,19993,17178],{"class":149},[139,19995,19996],{"class":781}," Point",[139,19998,19999],{"class":145},"::",[139,20001,19769],{"class":781},[139,20003,157],{"class":145},[139,20005,16308],{"class":149},[139,20007,19275],{"class":2111},[139,20009,413],{"class":145},[139,20011,16308],{"class":149},[139,20013,19282],{"class":2111},[139,20015,19285],{"class":145},[139,20017,150],{"class":149},[139,20019,19290],{"class":145},[139,20021,150],{"class":149},[139,20023,19295],{"class":145},[139,20025,20026],{"class":141,"line":262},[139,20027,19300],{"class":2512},[139,20029,20030,20032,20034,20036,20038,20040,20042],{"class":141,"line":313},[139,20031,17008],{"class":149},[139,20033,19996],{"class":781},[139,20035,19999],{"class":145},[139,20037,19531],{"class":781},[139,20039,19310],{"class":145},[139,20041,19313],{"class":149},[139,20043,19316],{"class":145},[139,20045,20046,20048,20050,20052,20054,20056,20058],{"class":141,"line":462},[139,20047,17008],{"class":149},[139,20049,19996],{"class":781},[139,20051,19999],{"class":145},[139,20053,19559],{"class":781},[139,20055,19310],{"class":145},[139,20057,19313],{"class":149},[139,20059,19330],{"class":145},[19,20061,20062],{},"创建circle.h",[130,20064,20066],{"className":2447,"code":20065,"language":2449,"meta":135,"style":135},"#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",[50,20067,20068,20075,20081,20091,20097,20103,20107,20111,20115,20129,20143,20147,20155,20163,20167,20171,20177,20181,20185],{"__ignoreMap":135},[139,20069,20070,20072],{"class":141,"line":142},[139,20071,19860],{"class":149},[139,20073,20074],{"class":781}," once\n",[139,20076,20077,20079],{"class":141,"line":210},[139,20078,4236],{"class":149},[139,20080,4239],{"class":160},[139,20082,20083,20085,20087,20089],{"class":141,"line":254},[139,20084,4244],{"class":149},[139,20086,4247],{"class":149},[139,20088,4250],{"class":781},[139,20090,3591],{"class":145},[139,20092,20093,20095],{"class":141,"line":262},[139,20094,4236],{"class":149},[139,20096,19984],{"class":160},[139,20098,20099,20101],{"class":141,"line":313},[139,20100,915],{"class":149},[139,20102,16967],{"class":781},[139,20104,20105],{"class":141,"line":462},[139,20106,3843],{"class":145},[139,20108,20109],{"class":141,"line":474},[139,20110,16986],{"class":149},[139,20112,20113],{"class":141,"line":484},[139,20114,19261],{"class":2512},[139,20116,20117,20119,20121,20123,20125,20127],{"class":141,"line":989},[139,20118,17178],{"class":149},[139,20120,19381],{"class":781},[139,20122,157],{"class":145},[139,20124,16308],{"class":149},[139,20126,19388],{"class":2111},[139,20128,5002],{"class":145},[139,20130,20131,20133,20135,20137,20139,20141],{"class":141,"line":994},[139,20132,17178],{"class":149},[139,20134,19403],{"class":781},[139,20136,157],{"class":145},[139,20138,19408],{"class":781},[139,20140,19411],{"class":2111},[139,20142,5002],{"class":145},[139,20144,20145],{"class":141,"line":999},[139,20146,19424],{"class":2512},[139,20148,20149,20151,20153],{"class":141,"line":1006},[139,20150,17008],{"class":149},[139,20152,19431],{"class":781},[139,20154,7910],{"class":145},[139,20156,20157,20159,20161],{"class":141,"line":1027},[139,20158,19443],{"class":781},[139,20160,19446],{"class":781},[139,20162,7910],{"class":145},[139,20164,20165],{"class":141,"line":1040},[139,20166,843],{"emptyLinePlaceholder":842},[139,20168,20169],{"class":141,"line":2160},[139,20170,17490],{"class":149},[139,20172,20173,20175],{"class":141,"line":2188},[139,20174,17008],{"class":149},[139,20176,16998],{"class":145},[139,20178,20179],{"class":141,"line":3944},[139,20180,19472],{"class":2512},[139,20182,20183],{"class":141,"line":3963},[139,20184,19477],{"class":145},[139,20186,20187],{"class":141,"line":3968},[139,20188,6275],{"class":145},[19,20190,20191],{},"创建circle.cpp",[130,20193,20195],{"className":2447,"code":20194,"language":2449,"meta":135,"style":135},"#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",[50,20196,20197,20204,20227,20249,20254,20270],{"__ignoreMap":135},[139,20198,20199,20201],{"class":141,"line":142},[139,20200,4236],{"class":149},[139,20202,20203],{"class":160},"\u003Ccircle.h>\n",[139,20205,20206,20208,20211,20213,20215,20217,20219,20221,20223,20225],{"class":141,"line":210},[139,20207,7638],{"class":149},[139,20209,20210],{"class":781}," Circle",[139,20212,19999],{"class":145},[139,20214,19727],{"class":781},[139,20216,157],{"class":145},[139,20218,16308],{"class":149},[139,20220,19388],{"class":2111},[139,20222,19391],{"class":145},[139,20224,150],{"class":149},[139,20226,19396],{"class":145},[139,20228,20229,20231,20233,20235,20237,20239,20241,20243,20245,20247],{"class":141,"line":254},[139,20230,7638],{"class":149},[139,20232,20210],{"class":781},[139,20234,19999],{"class":145},[139,20236,19779],{"class":781},[139,20238,157],{"class":145},[139,20240,19408],{"class":781},[139,20242,19411],{"class":2111},[139,20244,19414],{"class":145},[139,20246,150],{"class":149},[139,20248,19419],{"class":145},[139,20250,20251],{"class":141,"line":262},[139,20252,20253],{"class":2512},"\u002F\u002F获取属性\n",[139,20255,20256,20258,20260,20262,20264,20266,20268],{"class":141,"line":313},[139,20257,16308],{"class":149},[139,20259,20210],{"class":781},[139,20261,19999],{"class":145},[139,20263,19611],{"class":781},[139,20265,19310],{"class":145},[139,20267,19313],{"class":149},[139,20269,19438],{"class":145},[139,20271,20272,20274,20276,20278,20280,20282,20284],{"class":141,"line":462},[139,20273,19408],{"class":781},[139,20275,20210],{"class":781},[139,20277,19999],{"class":145},[139,20279,19525],{"class":781},[139,20281,19310],{"class":145},[139,20283,19313],{"class":149},[139,20285,19453],{"class":145},[19,20287,20288],{},"使用封装的类",[130,20290,20292],{"className":2447,"code":20291,"language":2449,"meta":135,"style":135},"#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",[50,20293,20294,20300,20310,20316,20322,20346,20350,20376,20402,20426,20440,20444,20456,20460,20464,20468,20480,20484,20488,20496,20500,20504,20508,20512,20516,20526,20532,20540,20548,20558,20564,20576,20584,20592,20602,20608,20620,20624,20632,20638],{"__ignoreMap":135},[139,20295,20296,20298],{"class":141,"line":142},[139,20297,4236],{"class":149},[139,20299,4239],{"class":160},[139,20301,20302,20304,20306,20308],{"class":141,"line":210},[139,20303,4244],{"class":149},[139,20305,4247],{"class":149},[139,20307,4250],{"class":781},[139,20309,3591],{"class":145},[139,20311,20312,20314],{"class":141,"line":254},[139,20313,4236],{"class":149},[139,20315,20203],{"class":160},[139,20317,20318,20320],{"class":141,"line":262},[139,20319,4236],{"class":149},[139,20321,19984],{"class":160},[139,20323,20324,20326,20328,20330,20332,20334,20336,20338,20340,20342,20344],{"class":141,"line":313},[139,20325,7638],{"class":149},[139,20327,19488],{"class":781},[139,20329,157],{"class":145},[139,20331,19493],{"class":781},[139,20333,12858],{"class":149},[139,20335,2729],{"class":2111},[139,20337,2816],{"class":145},[139,20339,19408],{"class":781},[139,20341,12858],{"class":149},[139,20343,19],{"class":2111},[139,20345,164],{"class":145},[139,20347,20348],{"class":141,"line":462},[139,20349,3843],{"class":145},[139,20351,20352,20354,20356,20358,20360,20362,20364,20366,20368,20370,20372,20374],{"class":141,"line":474},[139,20353,17008],{"class":149},[139,20355,19518],{"class":145},[139,20357,150],{"class":149},[139,20359,18609],{"class":145},[139,20361,19525],{"class":781},[139,20363,19528],{"class":145},[139,20365,19531],{"class":781},[139,20367,15322],{"class":145},[139,20369,855],{"class":149},[139,20371,18155],{"class":145},[139,20373,19531],{"class":781},[139,20375,7910],{"class":145},[139,20377,20378,20380,20382,20384,20386,20388,20390,20392,20394,20396,20398,20400],{"class":141,"line":484},[139,20379,17008],{"class":149},[139,20381,19548],{"class":145},[139,20383,150],{"class":149},[139,20385,18609],{"class":145},[139,20387,19525],{"class":781},[139,20389,19528],{"class":145},[139,20391,19559],{"class":781},[139,20393,15322],{"class":145},[139,20395,855],{"class":149},[139,20397,18155],{"class":145},[139,20399,19559],{"class":781},[139,20401,7910],{"class":145},[139,20403,20404,20406,20408,20410,20412,20414,20416,20418,20420,20422,20424],{"class":141,"line":989},[139,20405,17008],{"class":149},[139,20407,19576],{"class":145},[139,20409,150],{"class":149},[139,20411,19581],{"class":781},[139,20413,19584],{"class":145},[139,20415,2892],{"class":149},[139,20417,19518],{"class":145},[139,20419,1147],{"class":149},[139,20421,19548],{"class":145},[139,20423,2892],{"class":149},[139,20425,19597],{"class":145},[139,20427,20428,20430,20432,20434,20436,20438],{"class":141,"line":994},[139,20429,790],{"class":149},[139,20431,19604],{"class":145},[139,20433,796],{"class":149},[139,20435,18609],{"class":145},[139,20437,19611],{"class":781},[139,20439,19614],{"class":145},[139,20441,20442],{"class":141,"line":999},[139,20443,4315],{"class":145},[139,20445,20446,20448,20450,20452,20454],{"class":141,"line":1006},[139,20447,11943],{"class":145},[139,20449,3474],{"class":149},[139,20451,19627],{"class":160},[139,20453,3742],{"class":149},[139,20455,11114],{"class":145},[139,20457,20458],{"class":141,"line":1027},[139,20459,4472],{"class":145},[139,20461,20462],{"class":141,"line":1040},[139,20463,19090],{"class":149},[139,20465,20466],{"class":141,"line":2160},[139,20467,4315],{"class":145},[139,20469,20470,20472,20474,20476,20478],{"class":141,"line":2188},[139,20471,11943],{"class":145},[139,20473,3474],{"class":149},[139,20475,19652],{"class":160},[139,20477,3742],{"class":149},[139,20479,11114],{"class":145},[139,20481,20482],{"class":141,"line":3944},[139,20483,4472],{"class":145},[139,20485,20486],{"class":141,"line":3963},[139,20487,3862],{"class":145},[139,20489,20490,20492,20494],{"class":141,"line":3968},[139,20491,2461],{"class":149},[139,20493,4259],{"class":781},[139,20495,4262],{"class":145},[139,20497,20498],{"class":141,"line":3982},[139,20499,3843],{"class":145},[139,20501,20502],{"class":141,"line":3987},[139,20503,17322],{"class":2512},[139,20505,20506],{"class":141,"line":4014},[139,20507,17069],{"class":145},[139,20509,20510],{"class":141,"line":4019},[139,20511,19689],{"class":145},[139,20513,20514],{"class":141,"line":4036},[139,20515,19261],{"class":2512},[139,20517,20518,20520,20522,20524],{"class":141,"line":4041},[139,20519,3848],{"class":145},[139,20521,3474],{"class":149},[139,20523,19702],{"class":160},[139,20525,3591],{"class":145},[139,20527,20528,20530],{"class":141,"line":4046},[139,20529,17008],{"class":149},[139,20531,19711],{"class":145},[139,20533,20534,20536,20538],{"class":141,"line":4051},[139,20535,4297],{"class":145},[139,20537,3727],{"class":149},[139,20539,19720],{"class":145},[139,20541,20542,20544,20546],{"class":141,"line":4065},[139,20543,18862],{"class":145},[139,20545,19727],{"class":781},[139,20547,19730],{"class":145},[139,20549,20550,20552,20554,20556],{"class":141,"line":4070},[139,20551,3848],{"class":145},[139,20553,3474],{"class":149},[139,20555,19739],{"class":160},[139,20557,3591],{"class":145},[139,20559,20560,20562],{"class":141,"line":4860},[139,20561,17008],{"class":149},[139,20563,19748],{"class":145},[139,20565,20566,20568,20570,20572,20574],{"class":141,"line":4874},[139,20567,4297],{"class":145},[139,20569,3727],{"class":149},[139,20571,3255],{"class":145},[139,20573,3727],{"class":149},[139,20575,19761],{"class":145},[139,20577,20578,20580,20582],{"class":141,"line":4882},[139,20579,19766],{"class":145},[139,20581,19769],{"class":781},[139,20583,19772],{"class":145},[139,20585,20586,20588,20590],{"class":141,"line":4887},[139,20587,18862],{"class":145},[139,20589,19779],{"class":781},[139,20591,19782],{"class":145},[139,20593,20594,20596,20598,20600],{"class":141,"line":4893},[139,20595,3848],{"class":145},[139,20597,3474],{"class":149},[139,20599,19791],{"class":160},[139,20601,3591],{"class":145},[139,20603,20604,20606],{"class":141,"line":4899},[139,20605,17008],{"class":149},[139,20607,19800],{"class":145},[139,20609,20610,20612,20614,20616,20618],{"class":141,"line":4904},[139,20611,4297],{"class":145},[139,20613,3727],{"class":149},[139,20615,19809],{"class":145},[139,20617,3727],{"class":149},[139,20619,19814],{"class":145},[139,20621,20622],{"class":141,"line":10222},[139,20623,19819],{"class":145},[139,20625,20626,20628,20630],{"class":141,"line":10246},[139,20627,19824],{"class":145},[139,20629,19769],{"class":781},[139,20631,19829],{"class":145},[139,20633,20634,20636],{"class":141,"line":10251},[139,20635,19834],{"class":781},[139,20637,19837],{"class":145},[139,20639,20640],{"class":141,"line":10257},[139,20641,3862],{"class":145},[14,20643,20645],{"id":20644},"_82对象的初始化清理","8.2对象的初始化清理",[3437,20647,20648,20651],{},[1763,20649,20650],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1763,20652,20653],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1217,20655,20657],{"id":20656},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20659,20660,20661,20664],{},"对象的",[1674,20662,20663],{},"初始化和清理","也是两个非常重要的安全问题",[19,20666,20667],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20669,20670],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20672,20673,20674,20677,20678,20681],{},"c++利用了",[1674,20675,20676],{},"构造函数","和",[1674,20679,20680],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20683,20684,20685],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1674,20686,20687],{},"我们不提供构造和析构，编译器会提供",[19,20689,20690],{},[1674,20691,20692],{},"编译器提供的构造函数和析构函数是空实现。",[3437,20694,20695,20698],{},[1763,20696,20697],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1763,20699,20700,20701,20704],{},"析构函数：主要作用在于对象",[1674,20702,20703],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20706,20707,20710],{},[1674,20708,20709],{},"构造函数语法：",[50,20711,20712],{},"类名(){}",[1760,20714,20715,20718,20721,20724,20727],{},[1763,20716,20717],{},"构造函数，没有返回值也不写void",[1763,20719,20720],{},"函数名称与类名相同",[1763,20722,20723],{},"构造函数可以有参数，因此可以发生重载",[1763,20725,20726],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1763,20728,20729,20730,2867],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[50,20731,20732],{},"Person(){}",[19,20734,20735,16066,20738],{},[1674,20736,20737],{},"析构函数语法：",[50,20739,20740],{},"~类名(){}",[1760,20742,20743,20746,20749,20755],{},[1763,20744,20745],{},"析构函数，没有返回值也不写void",[1763,20747,20748],{},"函数名称与类名相同,在名称前加上符号  ~",[1763,20750,20751,20752],{},"析构函数不可以有参数，因此",[1674,20753,20754],{},"不可以发生重载",[1763,20756,20757],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[130,20759,20761],{"className":2447,"code":20760,"language":2449,"meta":135,"style":135},"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",[50,20762,20763,20769,20773,20777,20782,20789,20793,20806,20810,20815,20822,20826,20839,20843,20847,20851,20855,20863,20867,20875,20879,20883,20891,20895,20900,20904,20911,20915,20928,20932,20940],{"__ignoreMap":135},[139,20764,20765,20767],{"class":141,"line":142},[139,20766,915],{"class":149},[139,20768,17439],{"class":781},[139,20770,20771],{"class":141,"line":210},[139,20772,3843],{"class":145},[139,20774,20775],{"class":141,"line":254},[139,20776,16986],{"class":149},[139,20778,20779],{"class":141,"line":262},[139,20780,20781],{"class":2512},"    \u002F\u002F构造函数\n",[139,20783,20784,20787],{"class":141,"line":313},[139,20785,20786],{"class":781},"    Person",[139,20788,4262],{"class":145},[139,20790,20791],{"class":141,"line":462},[139,20792,4315],{"class":145},[139,20794,20795,20797,20799,20802,20804],{"class":141,"line":474},[139,20796,11943],{"class":145},[139,20798,3474],{"class":149},[139,20800,20801],{"class":160}," \"Person的构造函数调用\"",[139,20803,3742],{"class":149},[139,20805,11114],{"class":145},[139,20807,20808],{"class":141,"line":484},[139,20809,4472],{"class":145},[139,20811,20812],{"class":141,"line":989},[139,20813,20814],{"class":2512},"    \u002F\u002F析构函数\n",[139,20816,20817,20820],{"class":141,"line":994},[139,20818,20819],{"class":781},"    ~Person",[139,20821,4262],{"class":145},[139,20823,20824],{"class":141,"line":999},[139,20825,4315],{"class":145},[139,20827,20828,20830,20832,20835,20837],{"class":141,"line":1006},[139,20829,11943],{"class":145},[139,20831,3474],{"class":149},[139,20833,20834],{"class":160}," \"Person的析构函数调用\"",[139,20836,3742],{"class":149},[139,20838,11114],{"class":145},[139,20840,20841],{"class":141,"line":1027},[139,20842,4472],{"class":145},[139,20844,20845],{"class":141,"line":1040},[139,20846,843],{"emptyLinePlaceholder":842},[139,20848,20849],{"class":141,"line":2160},[139,20850,6275],{"class":145},[139,20852,20853],{"class":141,"line":2188},[139,20854,843],{"emptyLinePlaceholder":842},[139,20856,20857,20859,20861],{"class":141,"line":3944},[139,20858,7638],{"class":149},[139,20860,7862],{"class":781},[139,20862,4262],{"class":145},[139,20864,20865],{"class":141,"line":3963},[139,20866,3843],{"class":145},[139,20868,20869,20872],{"class":141,"line":3968},[139,20870,20871],{"class":145},"    Person p;",[139,20873,20874],{"class":2512},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[139,20876,20877],{"class":141,"line":3982},[139,20878,3862],{"class":145},[139,20880,20881],{"class":141,"line":3987},[139,20882,843],{"emptyLinePlaceholder":842},[139,20884,20885,20887,20889],{"class":141,"line":4014},[139,20886,2461],{"class":149},[139,20888,4259],{"class":781},[139,20890,13127],{"class":145},[139,20892,20893],{"class":141,"line":4019},[139,20894,15482],{"class":145},[139,20896,20897],{"class":141,"line":4036},[139,20898,20899],{"class":2512},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[139,20901,20902],{"class":141,"line":4041},[139,20903,843],{"emptyLinePlaceholder":842},[139,20905,20906,20908],{"class":141,"line":4046},[139,20907,20871],{"class":145},[139,20909,20910],{"class":2512},"\u002F\u002F只有构造函数\n",[139,20912,20913],{"class":141,"line":4051},[139,20914,843],{"emptyLinePlaceholder":842},[139,20916,20917,20919,20921,20923,20925],{"class":141,"line":4065},[139,20918,4588],{"class":781},[139,20920,157],{"class":145},[139,20922,4593],{"class":160},[139,20924,8240],{"class":145},[139,20926,20927],{"class":2512},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[139,20929,20930],{"class":141,"line":4070},[139,20931,843],{"emptyLinePlaceholder":842},[139,20933,20934,20936,20938],{"class":141,"line":4860},[139,20935,978],{"class":149},[139,20937,799],{"class":153},[139,20939,3591],{"class":145},[139,20941,20942],{"class":141,"line":4874},[139,20943,3862],{"class":145},[19,20945,20946],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1217,20948,20950],{"id":20949},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20952,20953],{},"两种分类方式：",[19,20955,20956],{},"​\t按参数分为： 有参构造和无参构造",[19,20958,20959],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20961,20962],{},"三种调用方式：",[19,20964,20965],{},"​\t括号法",[19,20967,20968],{},"​\t显示法",[19,20970,20971],{},"​\t隐式转换法",[130,20973,20975],{"className":2447,"code":20974,"language":2449,"meta":135,"style":135},"#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",[50,20976,20977,20983,20993,20998,21003,21008,21013,21017,21025,21029,21033,21037,21043,21047,21060,21064,21076,21080,21089,21102,21106,21110,21116,21120,21133,21137,21142,21158,21162,21167,21176,21189,21193,21199,21203,21208,21216,21220,21225,21229,21237,21241,21246,21251,21256,21261,21266,21270,21275,21280,21285,21290,21294,21299,21304,21320,21332,21337,21341,21346,21351,21356,21360,21365,21379,21392,21396,21404,21408,21414,21420,21428],{"__ignoreMap":135},[139,20978,20979,20981],{"class":141,"line":142},[139,20980,4236],{"class":149},[139,20982,4239],{"class":160},[139,20984,20985,20987,20989,20991],{"class":141,"line":210},[139,20986,4244],{"class":149},[139,20988,4247],{"class":149},[139,20990,4250],{"class":781},[139,20992,3591],{"class":145},[139,20994,20995],{"class":141,"line":254},[139,20996,20997],{"class":2512},"\u002F\u002F1.构造函数的分类及调用\n",[139,20999,21000],{"class":141,"line":262},[139,21001,21002],{"class":2512},"\u002F\u002F分类\n",[139,21004,21005],{"class":141,"line":313},[139,21006,21007],{"class":2512},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[139,21009,21010],{"class":141,"line":462},[139,21011,21012],{"class":2512},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[139,21014,21015],{"class":141,"line":474},[139,21016,843],{"emptyLinePlaceholder":842},[139,21018,21019,21021,21023],{"class":141,"line":484},[139,21020,915],{"class":149},[139,21022,17837],{"class":781},[139,21024,4957],{"class":145},[139,21026,21027],{"class":141,"line":989},[139,21028,3843],{"class":145},[139,21030,21031],{"class":141,"line":994},[139,21032,16986],{"class":149},[139,21034,21035],{"class":141,"line":999},[139,21036,20781],{"class":2512},[139,21038,21039,21041],{"class":141,"line":1006},[139,21040,20786],{"class":781},[139,21042,4262],{"class":145},[139,21044,21045],{"class":141,"line":1027},[139,21046,4315],{"class":145},[139,21048,21049,21051,21053,21056,21058],{"class":141,"line":1040},[139,21050,5732],{"class":145},[139,21052,3474],{"class":149},[139,21054,21055],{"class":160},"\"Person构造函数无参构造\"",[139,21057,3474],{"class":149},[139,21059,3496],{"class":145},[139,21061,21062],{"class":141,"line":2160},[139,21063,4472],{"class":145},[139,21065,21066,21068,21070,21072,21074],{"class":141,"line":2188},[139,21067,20786],{"class":781},[139,21069,157],{"class":145},[139,21071,2461],{"class":149},[139,21073,3696],{"class":2111},[139,21075,164],{"class":145},[139,21077,21078],{"class":141,"line":3944},[139,21079,4315],{"class":145},[139,21081,21082,21085,21087],{"class":141,"line":3963},[139,21083,21084],{"class":145},"        age",[139,21086,150],{"class":149},[139,21088,8471],{"class":145},[139,21090,21091,21093,21095,21098,21100],{"class":141,"line":3968},[139,21092,5732],{"class":145},[139,21094,3474],{"class":149},[139,21096,21097],{"class":160},"\"Person构造函数有参构造\"",[139,21099,3474],{"class":149},[139,21101,3496],{"class":145},[139,21103,21104],{"class":141,"line":3982},[139,21105,4472],{"class":145},[139,21107,21108],{"class":141,"line":3987},[139,21109,20814],{"class":2512},[139,21111,21112,21114],{"class":141,"line":4014},[139,21113,20819],{"class":781},[139,21115,4262],{"class":145},[139,21117,21118],{"class":141,"line":4019},[139,21119,4315],{"class":145},[139,21121,21122,21124,21126,21129,21131],{"class":141,"line":4036},[139,21123,5732],{"class":145},[139,21125,3474],{"class":149},[139,21127,21128],{"class":160},"\"Person析构函数被调用\"",[139,21130,3474],{"class":149},[139,21132,3496],{"class":145},[139,21134,21135],{"class":141,"line":4041},[139,21136,4472],{"class":145},[139,21138,21139],{"class":141,"line":4046},[139,21140,21141],{"class":2512},"    \u002F\u002F拷贝构造函数\n",[139,21143,21144,21146,21148,21150,21152,21154,21156],{"class":141,"line":4051},[139,21145,20786],{"class":781},[139,21147,157],{"class":145},[139,21149,9066],{"class":149},[139,21151,17837],{"class":781},[139,21153,12858],{"class":149},[139,21155,19],{"class":2111},[139,21157,164],{"class":145},[139,21159,21160],{"class":141,"line":4065},[139,21161,4315],{"class":145},[139,21163,21164],{"class":141,"line":4070},[139,21165,21166],{"class":2512},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[139,21168,21169,21171,21173],{"class":141,"line":4860},[139,21170,21084],{"class":145},[139,21172,150],{"class":149},[139,21174,21175],{"class":145},"p.age;\n",[139,21177,21178,21180,21182,21185,21187],{"class":141,"line":4874},[139,21179,5732],{"class":145},[139,21181,3474],{"class":149},[139,21183,21184],{"class":160},"\"Person拷贝构造函数被调用\"",[139,21186,3474],{"class":149},[139,21188,3496],{"class":145},[139,21190,21191],{"class":141,"line":4882},[139,21192,4472],{"class":145},[139,21194,21195,21197],{"class":141,"line":4887},[139,21196,1082],{"class":149},[139,21198,10071],{"class":145},[139,21200,21201],{"class":141,"line":4893},[139,21202,6275],{"class":145},[139,21204,21205],{"class":141,"line":4899},[139,21206,21207],{"class":2512},"\u002F\u002F调用\n",[139,21209,21210,21212,21214],{"class":141,"line":4904},[139,21211,7638],{"class":149},[139,21213,7862],{"class":781},[139,21215,4262],{"class":145},[139,21217,21218],{"class":141,"line":10222},[139,21219,3843],{"class":145},[139,21221,21222],{"class":141,"line":10246},[139,21223,21224],{"class":2512},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[139,21226,21227],{"class":141,"line":10251},[139,21228,3862],{"class":145},[139,21230,21231,21233,21235],{"class":141,"line":10257},[139,21232,7638],{"class":149},[139,21234,7931],{"class":781},[139,21236,4262],{"class":145},[139,21238,21239],{"class":141,"line":10284},[139,21240,3843],{"class":145},[139,21242,21243],{"class":141,"line":10289},[139,21244,21245],{"class":2512},"    \u002F\u002F1.括号法\n",[139,21247,21248],{"class":141,"line":10295},[139,21249,21250],{"class":2512},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[139,21252,21253],{"class":141,"line":10307},[139,21254,21255],{"class":2512},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[139,21257,21258],{"class":141,"line":10319},[139,21259,21260],{"class":2512},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[139,21262,21263],{"class":141,"line":10331},[139,21264,21265],{"class":2512},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[139,21267,21268],{"class":141,"line":11990},[139,21269,843],{"emptyLinePlaceholder":842},[139,21271,21272],{"class":141,"line":12015},[139,21273,21274],{"class":2512},"    \u002F\u002F注意事项\n",[139,21276,21277],{"class":141,"line":12038},[139,21278,21279],{"class":2512},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[139,21281,21282],{"class":141,"line":12062},[139,21283,21284],{"class":2512},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[139,21286,21287],{"class":141,"line":12067},[139,21288,21289],{"class":2512},"    \u002F\u002F Person p4();\n",[139,21291,21292],{"class":141,"line":12072},[139,21293,843],{"emptyLinePlaceholder":842},[139,21295,21296],{"class":141,"line":12077},[139,21297,21298],{"class":2512},"    \u002F\u002F2.显示法\n",[139,21300,21301],{"class":141,"line":12086},[139,21302,21303],{"class":145},"    Person p1;\n",[139,21305,21306,21309,21311,21314,21316,21318],{"class":141,"line":12091},[139,21307,21308],{"class":145},"    Person p2",[139,21310,150],{"class":149},[139,21312,21313],{"class":781},"Person",[139,21315,157],{"class":145},[139,21317,536],{"class":153},[139,21319,5002],{"class":145},[139,21321,21322,21325,21327,21329],{"class":141,"line":12097},[139,21323,21324],{"class":145},"    Person p3",[139,21326,150],{"class":149},[139,21328,21313],{"class":781},[139,21330,21331],{"class":145},"(p2);\n",[139,21333,21334],{"class":141,"line":12118},[139,21335,21336],{"class":2512},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[139,21338,21339],{"class":141,"line":12124},[139,21340,843],{"emptyLinePlaceholder":842},[139,21342,21343],{"class":141,"line":12138},[139,21344,21345],{"class":2512},"    \u002F\u002F 注意事项2\n",[139,21347,21348],{"class":141,"line":12144},[139,21349,21350],{"class":2512},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[139,21352,21353],{"class":141,"line":12171},[139,21354,21355],{"class":2512},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[139,21357,21358],{"class":141,"line":12180},[139,21359,843],{"emptyLinePlaceholder":842},[139,21361,21362],{"class":141,"line":12186},[139,21363,21364],{"class":2512},"    \u002F\u002F3.隐士转换法\n",[139,21366,21367,21370,21372,21374,21376],{"class":141,"line":12194},[139,21368,21369],{"class":145},"    Person p4",[139,21371,150],{"class":149},[139,21373,536],{"class":153},[139,21375,2509],{"class":145},[139,21377,21378],{"class":2512},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[139,21380,21381,21384,21386,21389],{"class":141,"line":12199},[139,21382,21383],{"class":145},"    Person p5",[139,21385,150],{"class":149},[139,21387,21388],{"class":145},"p4;",[139,21390,21391],{"class":2512}," \u002F\u002F 这里会调用拷贝构造函数\n",[139,21393,21394],{"class":141,"line":18871},[139,21395,3862],{"class":145},[139,21397,21398,21400,21402],{"class":141,"line":18877},[139,21399,2461],{"class":149},[139,21401,4259],{"class":781},[139,21403,4262],{"class":145},[139,21405,21406],{"class":141,"line":18900},[139,21407,3843],{"class":145},[139,21409,21410,21412],{"class":141,"line":18906},[139,21411,7907],{"class":781},[139,21413,7910],{"class":145},[139,21415,21416,21418],{"class":141,"line":18929},[139,21417,7976],{"class":781},[139,21419,7910],{"class":145},[139,21421,21422,21424,21426],{"class":141,"line":18943},[139,21423,978],{"class":149},[139,21425,799],{"class":153},[139,21427,3591],{"class":145},[139,21429,21430],{"class":141,"line":18963},[139,21431,3862],{"class":145},[19,21433,21434,21437],{},[1674,21435,21436],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1217,21439,21441],{"id":21440},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21443,21444],{},"C++中拷贝构造函数调用时机通常有三种情况",[3437,21446,21447,21450,21453],{},[1763,21448,21449],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1763,21451,21452],{},"值传递的方式给函数参数传值",[1763,21454,21455],{},"以值方式返回局部对象",[130,21457,21459],{"className":2447,"code":21458,"language":2449,"meta":135,"style":135},"#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",[50,21460,21461,21467,21477,21481,21486,21490,21495,21500,21505,21511,21515,21519,21525,21529,21542,21546,21551,21563,21567,21575,21588,21592,21596,21612,21616,21625,21638,21642,21648,21652,21664,21668,21674,21678,21682,21690,21694,21707,21715,21733,21737,21742,21747,21762,21766,21779,21783,21791,21795,21799,21807,21811,21816,21825,21829,21833,21858,21868,21872,21880,21884,21895,21920,21924,21928,21932,21940,21944,21949,21954,21961,21966,21971,21976,21981,21985,21990,21994,21999,22003,22008,22013,22017,22021,22026,22031,22039],{"__ignoreMap":135},[139,21462,21463,21465],{"class":141,"line":142},[139,21464,4236],{"class":149},[139,21466,4239],{"class":160},[139,21468,21469,21471,21473,21475],{"class":141,"line":210},[139,21470,4244],{"class":149},[139,21472,4247],{"class":149},[139,21474,4250],{"class":781},[139,21476,3591],{"class":145},[139,21478,21479],{"class":141,"line":254},[139,21480,843],{"emptyLinePlaceholder":842},[139,21482,21483],{"class":141,"line":262},[139,21484,21485],{"class":2512},"\u002F\u002F拷贝构造函数调用时机\n",[139,21487,21488],{"class":141,"line":313},[139,21489,843],{"emptyLinePlaceholder":842},[139,21491,21492],{"class":141,"line":462},[139,21493,21494],{"class":2512},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[139,21496,21497],{"class":141,"line":474},[139,21498,21499],{"class":2512},"\u002F\u002F2.值传递的方式给函数参数传值\n",[139,21501,21502],{"class":141,"line":484},[139,21503,21504],{"class":2512},"\u002F\u002F3.以值方式返回局部对象\n",[139,21506,21507,21509],{"class":141,"line":989},[139,21508,915],{"class":149},[139,21510,17439],{"class":781},[139,21512,21513],{"class":141,"line":994},[139,21514,3843],{"class":145},[139,21516,21517],{"class":141,"line":999},[139,21518,16986],{"class":149},[139,21520,21521,21523],{"class":141,"line":1006},[139,21522,20786],{"class":781},[139,21524,4262],{"class":145},[139,21526,21527],{"class":141,"line":1027},[139,21528,4315],{"class":145},[139,21530,21531,21533,21535,21538,21540],{"class":141,"line":1040},[139,21532,11943],{"class":145},[139,21534,3474],{"class":149},[139,21536,21537],{"class":160}," \"Person的默认构造函数调用\"",[139,21539,3742],{"class":149},[139,21541,11114],{"class":145},[139,21543,21544],{"class":141,"line":2160},[139,21545,4472],{"class":145},[139,21547,21548],{"class":141,"line":2188},[139,21549,21550],{"class":2512},"    \u002F\u002F有参构造\n",[139,21552,21553,21555,21557,21559,21561],{"class":141,"line":3944},[139,21554,20786],{"class":781},[139,21556,157],{"class":145},[139,21558,2461],{"class":149},[139,21560,17957],{"class":2111},[139,21562,164],{"class":145},[139,21564,21565],{"class":141,"line":3963},[139,21566,4315],{"class":145},[139,21568,21569,21571,21573],{"class":141,"line":3968},[139,21570,18010],{"class":145},[139,21572,150],{"class":149},[139,21574,10071],{"class":145},[139,21576,21577,21579,21581,21584,21586],{"class":141,"line":3982},[139,21578,11943],{"class":145},[139,21580,3474],{"class":149},[139,21582,21583],{"class":160}," \"Person的有参构造函数调用\"",[139,21585,3742],{"class":149},[139,21587,11114],{"class":145},[139,21589,21590],{"class":141,"line":3987},[139,21591,4472],{"class":145},[139,21593,21594],{"class":141,"line":4014},[139,21595,21141],{"class":2512},[139,21597,21598,21600,21602,21604,21606,21608,21610],{"class":141,"line":4019},[139,21599,20786],{"class":781},[139,21601,157],{"class":145},[139,21603,9066],{"class":149},[139,21605,17837],{"class":781},[139,21607,12858],{"class":149},[139,21609,19],{"class":2111},[139,21611,164],{"class":145},[139,21613,21614],{"class":141,"line":4036},[139,21615,4315],{"class":145},[139,21617,21618,21620,21622],{"class":141,"line":4041},[139,21619,18010],{"class":145},[139,21621,150],{"class":149},[139,21623,21624],{"class":145}," p.m_Age;\n",[139,21626,21627,21629,21631,21634,21636],{"class":141,"line":4046},[139,21628,11943],{"class":145},[139,21630,3474],{"class":149},[139,21632,21633],{"class":160}," \"Person的拷贝构造函数调用\"",[139,21635,3742],{"class":149},[139,21637,11114],{"class":145},[139,21639,21640],{"class":141,"line":4051},[139,21641,4472],{"class":145},[139,21643,21644,21646],{"class":141,"line":4065},[139,21645,20819],{"class":781},[139,21647,4262],{"class":145},[139,21649,21650],{"class":141,"line":4070},[139,21651,4315],{"class":145},[139,21653,21654,21656,21658,21660,21662],{"class":141,"line":4860},[139,21655,11943],{"class":145},[139,21657,3474],{"class":149},[139,21659,20834],{"class":160},[139,21661,3742],{"class":149},[139,21663,11114],{"class":145},[139,21665,21666],{"class":141,"line":4874},[139,21667,4472],{"class":145},[139,21669,21670,21672],{"class":141,"line":4882},[139,21671,1082],{"class":149},[139,21673,17934],{"class":145},[139,21675,21676],{"class":141,"line":4887},[139,21677,6275],{"class":145},[139,21679,21680],{"class":141,"line":4893},[139,21681,21494],{"class":2512},[139,21683,21684,21686,21688],{"class":141,"line":4899},[139,21685,7638],{"class":149},[139,21687,7862],{"class":781},[139,21689,4262],{"class":145},[139,21691,21692],{"class":141,"line":4904},[139,21693,3843],{"class":145},[139,21695,21696,21699,21701,21703,21705],{"class":141,"line":10222},[139,21697,21698],{"class":145},"    Person ",[139,21700,9404],{"class":781},[139,21702,157],{"class":145},[139,21704,3135],{"class":153},[139,21706,5002],{"class":145},[139,21708,21709,21711,21713],{"class":141,"line":10246},[139,21710,21698],{"class":145},[139,21712,9307],{"class":781},[139,21714,19782],{"class":145},[139,21716,21717,21719,21721,21724,21726,21729,21731],{"class":141,"line":10251},[139,21718,3848],{"class":145},[139,21720,3474],{"class":149},[139,21722,21723],{"class":160},"\"P2的年龄为：\"",[139,21725,3474],{"class":149},[139,21727,21728],{"class":145},"p2.m_Age",[139,21730,3474],{"class":149},[139,21732,3496],{"class":145},[139,21734,21735],{"class":141,"line":10257},[139,21736,3862],{"class":145},[139,21738,21739],{"class":141,"line":10284},[139,21740,21741],{"class":2512},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[139,21743,21744],{"class":141,"line":10289},[139,21745,21746],{"class":2512},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[139,21748,21749,21751,21754,21756,21758,21760],{"class":141,"line":10295},[139,21750,7638],{"class":149},[139,21752,21753],{"class":781}," doWork",[139,21755,157],{"class":145},[139,21757,21313],{"class":781},[139,21759,9099],{"class":2111},[139,21761,164],{"class":145},[139,21763,21764],{"class":141,"line":10307},[139,21765,3843],{"class":145},[139,21767,21768,21770,21772,21775,21777],{"class":141,"line":10319},[139,21769,8803],{"class":145},[139,21771,3474],{"class":149},[139,21773,21774],{"class":160}," \"doWork函数调用\"",[139,21776,3742],{"class":149},[139,21778,11114],{"class":145},[139,21780,21781],{"class":141,"line":10331},[139,21782,3862],{"class":145},[139,21784,21785,21787,21789],{"class":141,"line":11990},[139,21786,7638],{"class":149},[139,21788,7931],{"class":781},[139,21790,4262],{"class":145},[139,21792,21793],{"class":141,"line":12015},[139,21794,3843],{"class":145},[139,21796,21797],{"class":141,"line":12038},[139,21798,17581],{"class":145},[139,21800,21801,21804],{"class":141,"line":12062},[139,21802,21803],{"class":781},"    doWork",[139,21805,21806],{"class":145},"(p);\n",[139,21808,21809],{"class":141,"line":12067},[139,21810,3862],{"class":145},[139,21812,21813],{"class":141,"line":12072},[139,21814,21815],{"class":2512},"\u002F\u002F 3.以值方式返回局部对象\n",[139,21817,21818,21820,21823],{"class":141,"line":12077},[139,21819,21313],{"class":781},[139,21821,21822],{"class":781}," doWork2",[139,21824,4262],{"class":145},[139,21826,21827],{"class":141,"line":12086},[139,21828,3843],{"class":145},[139,21830,21831],{"class":141,"line":12091},[139,21832,21303],{"class":145},[139,21834,21835,21837,21839,21841,21843,21845,21847,21849,21851,21853,21855],{"class":141,"line":12097},[139,21836,3848],{"class":145},[139,21838,3474],{"class":149},[139,21840,157],{"class":145},[139,21842,2461],{"class":149},[139,21844,8792],{"class":149},[139,21846,2867],{"class":145},[139,21848,2791],{"class":149},[139,21850,9404],{"class":145},[139,21852,3474],{"class":149},[139,21854,3539],{"class":145},[139,21856,21857],{"class":2512},"\u002F\u002F打印p1的地址\n",[139,21859,21860,21862,21865],{"class":141,"line":12118},[139,21861,978],{"class":149},[139,21863,21864],{"class":145}," p1;",[139,21866,21867],{"class":2512},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[139,21869,21870],{"class":141,"line":12124},[139,21871,3862],{"class":145},[139,21873,21874,21876,21878],{"class":141,"line":12138},[139,21875,7638],{"class":149},[139,21877,8003],{"class":781},[139,21879,4262],{"class":145},[139,21881,21882],{"class":141,"line":12144},[139,21883,3843],{"class":145},[139,21885,21886,21889,21891,21893],{"class":141,"line":12171},[139,21887,21888],{"class":145},"    Person p ",[139,21890,150],{"class":149},[139,21892,21822],{"class":781},[139,21894,7910],{"class":145},[139,21896,21897,21899,21901,21903,21905,21907,21909,21911,21913,21915,21917],{"class":141,"line":12180},[139,21898,3848],{"class":145},[139,21900,3474],{"class":149},[139,21902,157],{"class":145},[139,21904,2461],{"class":149},[139,21906,8792],{"class":149},[139,21908,2867],{"class":145},[139,21910,2791],{"class":149},[139,21912,19],{"class":145},[139,21914,3474],{"class":149},[139,21916,3539],{"class":145},[139,21918,21919],{"class":2512},"\u002F\u002F打印p的地址\n",[139,21921,21922],{"class":141,"line":12186},[139,21923,3862],{"class":145},[139,21925,21926],{"class":141,"line":12194},[139,21927,843],{"emptyLinePlaceholder":842},[139,21929,21930],{"class":141,"line":12199},[139,21931,843],{"emptyLinePlaceholder":842},[139,21933,21934,21936,21938],{"class":141,"line":18871},[139,21935,2461],{"class":149},[139,21937,4259],{"class":781},[139,21939,4262],{"class":145},[139,21941,21942],{"class":141,"line":18877},[139,21943,3843],{"class":145},[139,21945,21946],{"class":141,"line":18900},[139,21947,21948],{"class":2512},"    \u002F\u002F test01();\n",[139,21950,21951],{"class":141,"line":18906},[139,21952,21953],{"class":2512},"    \u002F\u002F test02();\n",[139,21955,21956,21959],{"class":141,"line":18929},[139,21957,21958],{"class":781},"    test03",[139,21960,7910],{"class":145},[139,21962,21963],{"class":141,"line":18943},[139,21964,21965],{"class":2512},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[139,21967,21968],{"class":141,"line":18963},[139,21969,21970],{"class":2512},"\u002F\u002F 输出结果如下：\n",[139,21972,21973],{"class":141,"line":18969},[139,21974,21975],{"class":2512},"\u002F\u002F Person的默认构造函数调用\n",[139,21977,21978],{"class":141,"line":18980},[139,21979,21980],{"class":2512},"\u002F\u002F 0x7fffffffceec\n",[139,21982,21983],{"class":141,"line":19003},[139,21984,21980],{"class":2512},[139,21986,21987],{"class":141,"line":19025},[139,21988,21989],{"class":2512},"\u002F\u002F Person的析构函数调用\n",[139,21991,21992],{"class":141,"line":19030},[139,21993,843],{"emptyLinePlaceholder":842},[139,21995,21996],{"class":141,"line":19036},[139,21997,21998],{"class":2512},"\u002F\u002F 之前的输出结果如下：\n",[139,22000,22001],{"class":141,"line":19050},[139,22002,21975],{"class":2512},[139,22004,22005],{"class":141,"line":19063},[139,22006,22007],{"class":2512},"\u002F\u002F 地址\n",[139,22009,22010],{"class":141,"line":19068},[139,22011,22012],{"class":2512},"\u002F\u002F Person的拷贝构造函数调用\n",[139,22014,22015],{"class":141,"line":19082},[139,22016,21989],{"class":2512},[139,22018,22019],{"class":141,"line":19087},[139,22020,22007],{"class":2512},[139,22022,22023],{"class":141,"line":19093},[139,22024,22025],{"class":2512},"\u002F\u002F (这两次输出的地址也是不同的) \n",[139,22027,22028],{"class":141,"line":19098},[139,22029,22030],{"class":2512},"\u002F\u002F Person的析构函数调用     \n",[139,22032,22033,22035,22037],{"class":141,"line":19112},[139,22034,978],{"class":149},[139,22036,799],{"class":153},[139,22038,3591],{"class":145},[139,22040,22041],{"class":141,"line":19117},[139,22042,3862],{"class":145},[19,22044,22045],{},"简化版理解",[130,22047,22049],{"className":2447,"code":22048,"language":2449,"meta":135,"style":135},"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",[50,22050,22051,22059,22063,22069,22082,22093,22097,22109,22122,22130,22134,22150,22163,22172,22176,22181,22187,22200,22204,22208,22215,22219,22223,22228,22236,22240,22256,22269,22282,22286,22291,22299,22303,22307,22312,22317,22333,22341,22348,22354,22358,22362,22367,22375,22379,22383,22406,22413,22417,22421,22429,22433,22443,22465,22469,22473,22477,22485,22489,22494,22499,22505,22509,22519,22523,22531],{"__ignoreMap":135},[139,22052,22053,22055,22057],{"class":141,"line":142},[139,22054,915],{"class":149},[139,22056,17837],{"class":781},[139,22058,17840],{"class":145},[139,22060,22061],{"class":141,"line":210},[139,22062,16986],{"class":149},[139,22064,22065,22067],{"class":141,"line":254},[139,22066,20786],{"class":781},[139,22068,13127],{"class":145},[139,22070,22071,22073,22075,22078,22080],{"class":141,"line":262},[139,22072,11943],{"class":145},[139,22074,3474],{"class":149},[139,22076,22077],{"class":160}," \"无参构造函数!\"",[139,22079,3742],{"class":149},[139,22081,11114],{"class":145},[139,22083,22084,22087,22089,22091],{"class":141,"line":313},[139,22085,22086],{"class":145},"        mAge ",[139,22088,150],{"class":149},[139,22090,799],{"class":153},[139,22092,3591],{"class":145},[139,22094,22095],{"class":141,"line":462},[139,22096,4472],{"class":145},[139,22098,22099,22101,22103,22105,22107],{"class":141,"line":474},[139,22100,20786],{"class":781},[139,22102,157],{"class":145},[139,22104,2461],{"class":149},[139,22106,17957],{"class":2111},[139,22108,14714],{"class":145},[139,22110,22111,22113,22115,22118,22120],{"class":141,"line":484},[139,22112,11943],{"class":145},[139,22114,3474],{"class":149},[139,22116,22117],{"class":160}," \"有参构造函数!\"",[139,22119,3742],{"class":149},[139,22121,11114],{"class":145},[139,22123,22124,22126,22128],{"class":141,"line":989},[139,22125,22086],{"class":145},[139,22127,150],{"class":149},[139,22129,10071],{"class":145},[139,22131,22132],{"class":141,"line":994},[139,22133,4472],{"class":145},[139,22135,22136,22138,22140,22142,22144,22146,22148],{"class":141,"line":999},[139,22137,20786],{"class":781},[139,22139,157],{"class":145},[139,22141,9066],{"class":149},[139,22143,17837],{"class":781},[139,22145,2791],{"class":149},[139,22147,9099],{"class":2111},[139,22149,14714],{"class":145},[139,22151,22152,22154,22156,22159,22161],{"class":141,"line":1006},[139,22153,11943],{"class":145},[139,22155,3474],{"class":149},[139,22157,22158],{"class":160}," \"拷贝构造函数!\"",[139,22160,3742],{"class":149},[139,22162,11114],{"class":145},[139,22164,22165,22167,22169],{"class":141,"line":1027},[139,22166,22086],{"class":145},[139,22168,150],{"class":149},[139,22170,22171],{"class":145}," p.mAge;\n",[139,22173,22174],{"class":141,"line":1040},[139,22175,4472],{"class":145},[139,22177,22178],{"class":141,"line":2160},[139,22179,22180],{"class":2512},"    \u002F\u002F析构函数在释放内存之前调用\n",[139,22182,22183,22185],{"class":141,"line":2188},[139,22184,20819],{"class":781},[139,22186,13127],{"class":145},[139,22188,22189,22191,22193,22196,22198],{"class":141,"line":3944},[139,22190,11943],{"class":145},[139,22192,3474],{"class":149},[139,22194,22195],{"class":160}," \"析构函数!\"",[139,22197,3742],{"class":149},[139,22199,11114],{"class":145},[139,22201,22202],{"class":141,"line":3963},[139,22203,4472],{"class":145},[139,22205,22206],{"class":141,"line":3968},[139,22207,16986],{"class":149},[139,22209,22210,22212],{"class":141,"line":3982},[139,22211,1082],{"class":149},[139,22213,22214],{"class":145}," mAge;\n",[139,22216,22217],{"class":141,"line":3987},[139,22218,6275],{"class":145},[139,22220,22221],{"class":141,"line":4014},[139,22222,843],{"emptyLinePlaceholder":842},[139,22224,22225],{"class":141,"line":4019},[139,22226,22227],{"class":2512},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[139,22229,22230,22232,22234],{"class":141,"line":4036},[139,22231,7638],{"class":149},[139,22233,7862],{"class":781},[139,22235,13127],{"class":145},[139,22237,22238],{"class":141,"line":4041},[139,22239,843],{"emptyLinePlaceholder":842},[139,22241,22242,22244,22247,22249,22251,22253],{"class":141,"line":4046},[139,22243,21698],{"class":145},[139,22245,22246],{"class":781},"man",[139,22248,157],{"class":145},[139,22250,1017],{"class":153},[139,22252,8240],{"class":145},[139,22254,22255],{"class":2512}," \u002F\u002Fp对象已经创建完毕\n",[139,22257,22258,22260,22263,22266],{"class":141,"line":4051},[139,22259,21698],{"class":145},[139,22261,22262],{"class":781},"newman",[139,22264,22265],{"class":145},"(man);",[139,22267,22268],{"class":2512}," \u002F\u002F调用拷贝构造函数\n",[139,22270,22271,22274,22276,22279],{"class":141,"line":4065},[139,22272,22273],{"class":145},"    Person newman2 ",[139,22275,150],{"class":149},[139,22277,22278],{"class":145}," man;",[139,22280,22281],{"class":2512}," \u002F\u002F拷贝构造\n",[139,22283,22284],{"class":141,"line":4070},[139,22285,843],{"emptyLinePlaceholder":842},[139,22287,22288],{"class":141,"line":4860},[139,22289,22290],{"class":2512},"    \u002F\u002FPerson newman3;\n",[139,22292,22293,22296],{"class":141,"line":4874},[139,22294,22295],{"class":2512},"    \u002F\u002Fnewman3 = man;",[139,22297,22298],{"class":2512}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[139,22300,22301],{"class":141,"line":4882},[139,22302,3862],{"class":145},[139,22304,22305],{"class":141,"line":4887},[139,22306,843],{"emptyLinePlaceholder":842},[139,22308,22309],{"class":141,"line":4893},[139,22310,22311],{"class":2512},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[139,22313,22314],{"class":141,"line":4899},[139,22315,22316],{"class":2512},"\u002F\u002F相当于Person p1 = p;\n",[139,22318,22319,22321,22323,22325,22327,22330],{"class":141,"line":4904},[139,22320,7638],{"class":149},[139,22322,21753],{"class":781},[139,22324,157],{"class":145},[139,22326,21313],{"class":781},[139,22328,22329],{"class":2111}," p1",[139,22331,22332],{"class":145},") {}\n",[139,22334,22335,22337,22339],{"class":141,"line":10222},[139,22336,7638],{"class":149},[139,22338,7931],{"class":781},[139,22340,13127],{"class":145},[139,22342,22343,22345],{"class":141,"line":10246},[139,22344,20871],{"class":145},[139,22346,22347],{"class":2512}," \u002F\u002F无参构造函数\n",[139,22349,22350,22352],{"class":141,"line":10251},[139,22351,21803],{"class":781},[139,22353,21806],{"class":145},[139,22355,22356],{"class":141,"line":10257},[139,22357,3862],{"class":145},[139,22359,22360],{"class":141,"line":10284},[139,22361,843],{"emptyLinePlaceholder":842},[139,22363,22364],{"class":141,"line":10289},[139,22365,22366],{"class":2512},"\u002F\u002F3. 以值方式返回局部对象\n",[139,22368,22369,22371,22373],{"class":141,"line":10295},[139,22370,21313],{"class":781},[139,22372,21822],{"class":781},[139,22374,4262],{"class":145},[139,22376,22377],{"class":141,"line":10307},[139,22378,3843],{"class":145},[139,22380,22381],{"class":141,"line":10319},[139,22382,21303],{"class":145},[139,22384,22385,22387,22389,22391,22393,22395,22397,22399,22402,22404],{"class":141,"line":10331},[139,22386,8803],{"class":145},[139,22388,3474],{"class":149},[139,22390,549],{"class":145},[139,22392,2461],{"class":149},[139,22394,8792],{"class":149},[139,22396,2867],{"class":145},[139,22398,2791],{"class":149},[139,22400,22401],{"class":145},"p1 ",[139,22403,3474],{"class":149},[139,22405,11114],{"class":145},[139,22407,22408,22410],{"class":141,"line":11990},[139,22409,978],{"class":149},[139,22411,22412],{"class":145}," p1;\n",[139,22414,22415],{"class":141,"line":12015},[139,22416,3862],{"class":145},[139,22418,22419],{"class":141,"line":12038},[139,22420,843],{"emptyLinePlaceholder":842},[139,22422,22423,22425,22427],{"class":141,"line":12062},[139,22424,7638],{"class":149},[139,22426,8003],{"class":781},[139,22428,4262],{"class":145},[139,22430,22431],{"class":141,"line":12067},[139,22432,3843],{"class":145},[139,22434,22435,22437,22439,22441],{"class":141,"line":12072},[139,22436,21888],{"class":145},[139,22438,150],{"class":149},[139,22440,21822],{"class":781},[139,22442,7910],{"class":145},[139,22444,22445,22447,22449,22451,22453,22455,22457,22459,22461,22463],{"class":141,"line":12077},[139,22446,8803],{"class":145},[139,22448,3474],{"class":149},[139,22450,549],{"class":145},[139,22452,2461],{"class":149},[139,22454,8792],{"class":149},[139,22456,2867],{"class":145},[139,22458,2791],{"class":149},[139,22460,13721],{"class":145},[139,22462,3474],{"class":149},[139,22464,11114],{"class":145},[139,22466,22467],{"class":141,"line":12086},[139,22468,3862],{"class":145},[139,22470,22471],{"class":141,"line":12091},[139,22472,843],{"emptyLinePlaceholder":842},[139,22474,22475],{"class":141,"line":12097},[139,22476,843],{"emptyLinePlaceholder":842},[139,22478,22479,22481,22483],{"class":141,"line":12118},[139,22480,2461],{"class":149},[139,22482,4259],{"class":781},[139,22484,13127],{"class":145},[139,22486,22487],{"class":141,"line":12124},[139,22488,843],{"emptyLinePlaceholder":842},[139,22490,22491],{"class":141,"line":12138},[139,22492,22493],{"class":2512},"    \u002F\u002Ftest01();\n",[139,22495,22496],{"class":141,"line":12144},[139,22497,22498],{"class":2512},"    \u002F\u002Ftest02();\n",[139,22500,22501,22503],{"class":141,"line":12171},[139,22502,21958],{"class":781},[139,22504,7910],{"class":145},[139,22506,22507],{"class":141,"line":12180},[139,22508,843],{"emptyLinePlaceholder":842},[139,22510,22511,22513,22515,22517],{"class":141,"line":12186},[139,22512,4588],{"class":781},[139,22514,157],{"class":145},[139,22516,4593],{"class":160},[139,22518,5002],{"class":145},[139,22520,22521],{"class":141,"line":12194},[139,22522,843],{"emptyLinePlaceholder":842},[139,22524,22525,22527,22529],{"class":141,"line":12199},[139,22526,978],{"class":149},[139,22528,799],{"class":153},[139,22530,3591],{"class":145},[139,22532,22533],{"class":141,"line":18871},[139,22534,3862],{"class":145},[1217,22536,22538],{"id":22537},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22540,22541],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22543,22544],{},"1．默认构造函数(无参，函数体为空)",[19,22546,22547],{},"2．默认析构函数(无参，函数体为空)",[19,22549,22550],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22552,22553],{},"构造函数调用规则如下：",[3437,22555,22556,22559],{},[1763,22557,22558],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1763,22560,22561],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[130,22563,22565],{"className":2447,"code":22564,"language":2449,"meta":135,"style":135},"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",[50,22566,22567,22575,22579,22584,22590,22602,22606,22611,22623,22632,22644,22648,22652,22668,22677,22689,22693,22697,22703,22715,22719,22723,22729,22733,22737,22745,22749,22761,22766,22774,22778,22796,22800,22804,22812,22816,22821,22829,22844,22857,22861,22866,22873,22889,22902,22906,22910,22918,22922,22928,22932,22942,22946,22954],{"__ignoreMap":135},[139,22568,22569,22571,22573],{"class":141,"line":142},[139,22570,915],{"class":149},[139,22572,17837],{"class":781},[139,22574,17840],{"class":145},[139,22576,22577],{"class":141,"line":210},[139,22578,16986],{"class":149},[139,22580,22581],{"class":141,"line":254},[139,22582,22583],{"class":2512},"    \u002F\u002F无参（默认）构造函数\n",[139,22585,22586,22588],{"class":141,"line":262},[139,22587,20786],{"class":781},[139,22589,13127],{"class":145},[139,22591,22592,22594,22596,22598,22600],{"class":141,"line":313},[139,22593,11943],{"class":145},[139,22595,3474],{"class":149},[139,22597,22077],{"class":160},[139,22599,3742],{"class":149},[139,22601,11114],{"class":145},[139,22603,22604],{"class":141,"line":462},[139,22605,4472],{"class":145},[139,22607,22608],{"class":141,"line":474},[139,22609,22610],{"class":2512},"    \u002F\u002F有参构造函数\n",[139,22612,22613,22615,22617,22619,22621],{"class":141,"line":484},[139,22614,20786],{"class":781},[139,22616,157],{"class":145},[139,22618,2461],{"class":149},[139,22620,3696],{"class":2111},[139,22622,14714],{"class":145},[139,22624,22625,22628,22630],{"class":141,"line":989},[139,22626,22627],{"class":145},"        age ",[139,22629,150],{"class":149},[139,22631,3730],{"class":145},[139,22633,22634,22636,22638,22640,22642],{"class":141,"line":994},[139,22635,11943],{"class":145},[139,22637,3474],{"class":149},[139,22639,22117],{"class":160},[139,22641,3742],{"class":149},[139,22643,11114],{"class":145},[139,22645,22646],{"class":141,"line":999},[139,22647,4472],{"class":145},[139,22649,22650],{"class":141,"line":1006},[139,22651,21141],{"class":2512},[139,22653,22654,22656,22658,22660,22662,22664,22666],{"class":141,"line":1027},[139,22655,20786],{"class":781},[139,22657,157],{"class":145},[139,22659,9066],{"class":149},[139,22661,17837],{"class":781},[139,22663,2791],{"class":149},[139,22665,9099],{"class":2111},[139,22667,14714],{"class":145},[139,22669,22670,22672,22674],{"class":141,"line":1040},[139,22671,22627],{"class":145},[139,22673,150],{"class":149},[139,22675,22676],{"class":145}," p.age;\n",[139,22678,22679,22681,22683,22685,22687],{"class":141,"line":2160},[139,22680,11943],{"class":145},[139,22682,3474],{"class":149},[139,22684,22158],{"class":160},[139,22686,3742],{"class":149},[139,22688,11114],{"class":145},[139,22690,22691],{"class":141,"line":2188},[139,22692,4472],{"class":145},[139,22694,22695],{"class":141,"line":3944},[139,22696,20814],{"class":2512},[139,22698,22699,22701],{"class":141,"line":3963},[139,22700,20819],{"class":781},[139,22702,13127],{"class":145},[139,22704,22705,22707,22709,22711,22713],{"class":141,"line":3968},[139,22706,11943],{"class":145},[139,22708,3474],{"class":149},[139,22710,22195],{"class":160},[139,22712,3742],{"class":149},[139,22714,11114],{"class":145},[139,22716,22717],{"class":141,"line":3982},[139,22718,4472],{"class":145},[139,22720,22721],{"class":141,"line":3987},[139,22722,16986],{"class":149},[139,22724,22725,22727],{"class":141,"line":4014},[139,22726,1082],{"class":149},[139,22728,10071],{"class":145},[139,22730,22731],{"class":141,"line":4019},[139,22732,6275],{"class":145},[139,22734,22735],{"class":141,"line":4036},[139,22736,843],{"emptyLinePlaceholder":842},[139,22738,22739,22741,22743],{"class":141,"line":4041},[139,22740,7638],{"class":149},[139,22742,7862],{"class":781},[139,22744,4262],{"class":145},[139,22746,22747],{"class":141,"line":4046},[139,22748,3843],{"class":145},[139,22750,22751,22753,22755,22757,22759],{"class":141,"line":4051},[139,22752,21698],{"class":145},[139,22754,9404],{"class":781},[139,22756,157],{"class":145},[139,22758,3085],{"class":153},[139,22760,5002],{"class":145},[139,22762,22763],{"class":141,"line":4065},[139,22764,22765],{"class":2512},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[139,22767,22768,22770,22772],{"class":141,"line":4070},[139,22769,21698],{"class":145},[139,22771,9307],{"class":781},[139,22773,19782],{"class":145},[139,22775,22776],{"class":141,"line":4860},[139,22777,843],{"emptyLinePlaceholder":842},[139,22779,22780,22782,22784,22787,22789,22792,22794],{"class":141,"line":4874},[139,22781,8803],{"class":145},[139,22783,3474],{"class":149},[139,22785,22786],{"class":160}," \"p2的年龄为： \"",[139,22788,3742],{"class":149},[139,22790,22791],{"class":145}," p2.age ",[139,22793,3474],{"class":149},[139,22795,11114],{"class":145},[139,22797,22798],{"class":141,"line":4882},[139,22799,3862],{"class":145},[139,22801,22802],{"class":141,"line":4887},[139,22803,843],{"emptyLinePlaceholder":842},[139,22805,22806,22808,22810],{"class":141,"line":4893},[139,22807,7638],{"class":149},[139,22809,7931],{"class":781},[139,22811,4262],{"class":145},[139,22813,22814],{"class":141,"line":4899},[139,22815,3843],{"class":145},[139,22817,22818],{"class":141,"line":4904},[139,22819,22820],{"class":2512},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[139,22822,22823,22826],{"class":141,"line":10222},[139,22824,22825],{"class":145},"    Person p1;",[139,22827,22828],{"class":2512}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[139,22830,22831,22833,22835,22837,22839,22841],{"class":141,"line":10246},[139,22832,21698],{"class":145},[139,22834,9307],{"class":781},[139,22836,157],{"class":145},[139,22838,536],{"class":153},[139,22840,8240],{"class":145},[139,22842,22843],{"class":2512}," \u002F\u002F用户提供的有参\n",[139,22845,22846,22848,22851,22854],{"class":141,"line":10251},[139,22847,21698],{"class":145},[139,22849,22850],{"class":781},"p3",[139,22852,22853],{"class":145},"(p2);",[139,22855,22856],{"class":2512}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[139,22858,22859],{"class":141,"line":10257},[139,22860,843],{"emptyLinePlaceholder":842},[139,22862,22863],{"class":141,"line":10284},[139,22864,22865],{"class":2512},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[139,22867,22868,22871],{"class":141,"line":10289},[139,22869,22870],{"class":145},"    Person p4;",[139,22872,22828],{"class":2512},[139,22874,22875,22877,22880,22882,22884,22886],{"class":141,"line":10295},[139,22876,21698],{"class":145},[139,22878,22879],{"class":781},"p5",[139,22881,157],{"class":145},[139,22883,536],{"class":153},[139,22885,8240],{"class":145},[139,22887,22888],{"class":2512}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[139,22890,22891,22893,22896,22899],{"class":141,"line":10307},[139,22892,21698],{"class":145},[139,22894,22895],{"class":781},"p6",[139,22897,22898],{"class":145},"(p5);",[139,22900,22901],{"class":2512}," \u002F\u002F用户自己提供拷贝构造\n",[139,22903,22904],{"class":141,"line":10319},[139,22905,3862],{"class":145},[139,22907,22908],{"class":141,"line":10331},[139,22909,843],{"emptyLinePlaceholder":842},[139,22911,22912,22914,22916],{"class":141,"line":11990},[139,22913,2461],{"class":149},[139,22915,4259],{"class":781},[139,22917,13127],{"class":145},[139,22919,22920],{"class":141,"line":12015},[139,22921,843],{"emptyLinePlaceholder":842},[139,22923,22924,22926],{"class":141,"line":12038},[139,22925,7907],{"class":781},[139,22927,7910],{"class":145},[139,22929,22930],{"class":141,"line":12062},[139,22931,843],{"emptyLinePlaceholder":842},[139,22933,22934,22936,22938,22940],{"class":141,"line":12067},[139,22935,4588],{"class":781},[139,22937,157],{"class":145},[139,22939,4593],{"class":160},[139,22941,5002],{"class":145},[139,22943,22944],{"class":141,"line":12072},[139,22945,843],{"emptyLinePlaceholder":842},[139,22947,22948,22950,22952],{"class":141,"line":12077},[139,22949,978],{"class":149},[139,22951,799],{"class":153},[139,22953,3591],{"class":145},[139,22955,22956],{"class":141,"line":12086},[139,22957,3862],{"class":145},[1217,22959,22961],{"id":22960},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22963,22964],{},"浅拷贝：简单的赋值拷贝操作",[19,22966,22967],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[130,22969,22971],{"className":2447,"code":22970,"language":2449,"meta":135,"style":135},"#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",[50,22972,22973,22979,22989,22995,22999,23003,23008,23014,23018,23031,23035,23039,23046,23050,23060,23075,23088,23092,23097,23102,23118,23122,23135,23140,23145,23150,23159,23164,23179,23183,23187,23191,23197,23201,23206,23221,23225,23236,23250,23254,23263,23267,23273,23285,23289,23297,23301,23318,23349,23357,23385,23389,23393,23401,23405,23411],{"__ignoreMap":135},[139,22974,22975,22977],{"class":141,"line":142},[139,22976,4236],{"class":149},[139,22978,4239],{"class":160},[139,22980,22981,22983,22985,22987],{"class":141,"line":210},[139,22982,4244],{"class":149},[139,22984,4247],{"class":149},[139,22986,4250],{"class":781},[139,22988,3591],{"class":145},[139,22990,22991,22993],{"class":141,"line":254},[139,22992,915],{"class":149},[139,22994,17439],{"class":781},[139,22996,22997],{"class":141,"line":262},[139,22998,3843],{"class":145},[139,23000,23001],{"class":141,"line":313},[139,23002,16986],{"class":149},[139,23004,23005],{"class":141,"line":462},[139,23006,23007],{"class":2512},"    \u002F\u002F默认构造函数\n",[139,23009,23010,23012],{"class":141,"line":474},[139,23011,20786],{"class":781},[139,23013,4262],{"class":145},[139,23015,23016],{"class":141,"line":484},[139,23017,4315],{"class":145},[139,23019,23020,23022,23024,23027,23029],{"class":141,"line":989},[139,23021,5732],{"class":145},[139,23023,3474],{"class":149},[139,23025,23026],{"class":160},"\"默认构造函数\"",[139,23028,3474],{"class":149},[139,23030,3496],{"class":145},[139,23032,23033],{"class":141,"line":994},[139,23034,4472],{"class":145},[139,23036,23037],{"class":141,"line":999},[139,23038,22610],{"class":2512},[139,23040,23041,23043],{"class":141,"line":1006},[139,23042,20819],{"class":781},[139,23044,23045],{"class":145},"(int age,int height)\n",[139,23047,23048],{"class":141,"line":1027},[139,23049,4315],{"class":145},[139,23051,23052,23055,23057],{"class":141,"line":1040},[139,23053,23054],{"class":145},"        m_Age",[139,23056,150],{"class":149},[139,23058,23059],{"class":145},"age;\n",[139,23061,23062,23065,23067,23069,23072],{"class":141,"line":2160},[139,23063,23064],{"class":145},"        m_Height",[139,23066,13990],{"class":149},[139,23068,154],{"class":149},[139,23070,23071],{"class":145},"(height);",[139,23073,23074],{"class":2512},"\u002F\u002F放到堆区\n",[139,23076,23077,23079,23081,23084,23086],{"class":141,"line":2188},[139,23078,5732],{"class":145},[139,23080,3474],{"class":149},[139,23082,23083],{"class":160},"\"有参构造函数\"",[139,23085,3474],{"class":149},[139,23087,3496],{"class":145},[139,23089,23090],{"class":141,"line":3944},[139,23091,4472],{"class":145},[139,23093,23094],{"class":141,"line":3963},[139,23095,23096],{"class":2512},"    \u002F\u002F深拷贝解决上述问题\n",[139,23098,23099],{"class":141,"line":3968},[139,23100,23101],{"class":2512},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[139,23103,23104,23106,23108,23110,23112,23114,23116],{"class":141,"line":3982},[139,23105,20786],{"class":781},[139,23107,157],{"class":145},[139,23109,9066],{"class":149},[139,23111,17837],{"class":781},[139,23113,12858],{"class":149},[139,23115,19],{"class":2111},[139,23117,164],{"class":145},[139,23119,23120],{"class":141,"line":3987},[139,23121,4315],{"class":145},[139,23123,23124,23126,23128,23131,23133],{"class":141,"line":4014},[139,23125,5732],{"class":145},[139,23127,3474],{"class":149},[139,23129,23130],{"class":160},"\"拷贝构造函数\"",[139,23132,3474],{"class":149},[139,23134,3496],{"class":145},[139,23136,23137],{"class":141,"line":4019},[139,23138,23139],{"class":2512},"        \u002F\u002F编译器默认的写如下注释部分\n",[139,23141,23142],{"class":141,"line":4036},[139,23143,23144],{"class":2512},"        \u002F\u002Fm_Age=p.m_Age;\n",[139,23146,23147],{"class":141,"line":4041},[139,23148,23149],{"class":2512},"        \u002F\u002Fm_Height=p.m_Height;\n",[139,23151,23152,23154,23156],{"class":141,"line":4046},[139,23153,23054],{"class":145},[139,23155,150],{"class":149},[139,23157,23158],{"class":145},"p.m_Age;\n",[139,23160,23161],{"class":141,"line":4051},[139,23162,23163],{"class":2512},"        \u002F\u002F深拷贝操作\n",[139,23165,23166,23168,23170,23172,23174,23176],{"class":141,"line":4065},[139,23167,23064],{"class":145},[139,23169,13990],{"class":149},[139,23171,154],{"class":149},[139,23173,157],{"class":145},[139,23175,2892],{"class":149},[139,23177,23178],{"class":145},"p.m_Height);\n",[139,23180,23181],{"class":141,"line":4070},[139,23182,4472],{"class":145},[139,23184,23185],{"class":141,"line":4860},[139,23186,843],{"emptyLinePlaceholder":842},[139,23188,23189],{"class":141,"line":4874},[139,23190,20814],{"class":2512},[139,23192,23193,23195],{"class":141,"line":4882},[139,23194,20819],{"class":781},[139,23196,4262],{"class":145},[139,23198,23199],{"class":141,"line":4887},[139,23200,4315],{"class":145},[139,23202,23203],{"class":141,"line":4893},[139,23204,23205],{"class":2512},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[139,23207,23208,23210,23213,23216,23219],{"class":141,"line":4899},[139,23209,4780],{"class":149},[139,23211,23212],{"class":145},"(m_Height ",[139,23214,23215],{"class":149},"!=",[139,23217,23218],{"class":153}," NULL",[139,23220,164],{"class":145},[139,23222,23223],{"class":141,"line":4904},[139,23224,4793],{"class":145},[139,23226,23227,23230,23233],{"class":141,"line":10222},[139,23228,23229],{"class":149},"            delete",[139,23231,23232],{"class":145}," m_Height;",[139,23234,23235],{"class":2512}," \u002F\u002F释放堆区内存\n",[139,23237,23238,23241,23243,23245,23247],{"class":141,"line":10246},[139,23239,23240],{"class":145},"            m_Height",[139,23242,150],{"class":149},[139,23244,4676],{"class":153},[139,23246,2509],{"class":145},[139,23248,23249],{"class":2512}," \u002F\u002F防止野指针\n",[139,23251,23252],{"class":141,"line":10251},[139,23253,4812],{"class":145},[139,23255,23256,23258,23260],{"class":141,"line":10257},[139,23257,5732],{"class":145},[139,23259,3474],{"class":149},[139,23261,23262],{"class":160},"\"Person的析构函数调用\"\n",[139,23264,23265],{"class":141,"line":10284},[139,23266,4472],{"class":145},[139,23268,23269,23271],{"class":141,"line":10289},[139,23270,1082],{"class":149},[139,23272,17934],{"class":145},[139,23274,23275,23277,23279,23282],{"class":141,"line":10295},[139,23276,1082],{"class":149},[139,23278,8792],{"class":149},[139,23280,23281],{"class":145},"m_Height;",[139,23283,23284],{"class":2512}," \u002F\u002F定义一个指针，指向身高\n",[139,23286,23287],{"class":141,"line":10307},[139,23288,6275],{"class":145},[139,23290,23291,23293,23295],{"class":141,"line":10319},[139,23292,7638],{"class":149},[139,23294,7862],{"class":781},[139,23296,4262],{"class":145},[139,23298,23299],{"class":141,"line":10331},[139,23300,3843],{"class":145},[139,23302,23303,23305,23307,23309,23311,23313,23316],{"class":141,"line":11990},[139,23304,21698],{"class":145},[139,23306,9404],{"class":781},[139,23308,157],{"class":145},[139,23310,3085],{"class":153},[139,23312,2816],{"class":145},[139,23314,23315],{"class":153},"160",[139,23317,5002],{"class":145},[139,23319,23320,23322,23324,23327,23329,23332,23334,23337,23339,23342,23344,23346],{"class":141,"line":12015},[139,23321,3848],{"class":145},[139,23323,3474],{"class":149},[139,23325,23326],{"class":160},"\"p1的年龄为:\"",[139,23328,3474],{"class":149},[139,23330,23331],{"class":145},"p1.m_Age",[139,23333,3474],{"class":149},[139,23335,23336],{"class":160},"\"身高为：\"",[139,23338,8693],{"class":149},[139,23340,23341],{"class":145},"p1.m_Height",[139,23343,3474],{"class":149},[139,23345,3539],{"class":145},[139,23347,23348],{"class":2512},"  \u002F\u002F18\n",[139,23350,23351,23353,23355],{"class":141,"line":12038},[139,23352,21698],{"class":145},[139,23354,9307],{"class":781},[139,23356,19782],{"class":145},[139,23358,23359,23361,23363,23366,23368,23370,23372,23374,23376,23379,23381,23383],{"class":141,"line":12062},[139,23360,3848],{"class":145},[139,23362,3474],{"class":149},[139,23364,23365],{"class":160},"\"p2的年龄为：\"",[139,23367,3474],{"class":149},[139,23369,21728],{"class":145},[139,23371,3474],{"class":149},[139,23373,23336],{"class":160},[139,23375,8693],{"class":149},[139,23377,23378],{"class":145},"p2.m_Height",[139,23380,3474],{"class":149},[139,23382,3539],{"class":145},[139,23384,23348],{"class":2512},[139,23386,23387],{"class":141,"line":12067},[139,23388,15482],{"class":145},[139,23390,23391],{"class":141,"line":12072},[139,23392,3862],{"class":145},[139,23394,23395,23397,23399],{"class":141,"line":12077},[139,23396,2461],{"class":149},[139,23398,4259],{"class":781},[139,23400,4262],{"class":145},[139,23402,23403],{"class":141,"line":12086},[139,23404,3843],{"class":145},[139,23406,23407,23409],{"class":141,"line":12091},[139,23408,7907],{"class":781},[139,23410,7910],{"class":145},[139,23412,23413],{"class":141,"line":12097},[139,23414,3862],{"class":145},[19,23416,23417],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23419,23420],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23422,23423],{},[3760,23424],{"alt":135,"src":23425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23427,23428],{},"浅拷贝问题要使用深拷贝来解决",[19,23430,23431],{},[3760,23432],{"alt":135,"src":23433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23435,23436],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1217,23438,23440],{"id":23439},"_826初始化列表","8.2.6初始化列表",[19,23442,23443],{},"作用：初始化属性",[19,23445,7459],{},[130,23447,23450],{"className":23448,"code":23449,"language":645},[643],"构造函数():属性1(值1),属性2(值2).....{}\n",[50,23451,23449],{"__ignoreMap":135},[19,23453,23454],{},"例子",[130,23456,23458],{"className":2447,"code":23457,"language":2449,"meta":135,"style":135},"#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",[50,23459,23460,23466,23476,23482,23486,23491,23495,23500,23505,23510,23515,23520,23525,23529,23534,23539,23582,23591,23609,23627,23645,23649,23653,23660,23667,23674,23678,23682,23690,23694,23698,23718,23727,23731,23735,23745,23749,23757],{"__ignoreMap":135},[139,23461,23462,23464],{"class":141,"line":142},[139,23463,4236],{"class":149},[139,23465,4239],{"class":160},[139,23467,23468,23470,23472,23474],{"class":141,"line":210},[139,23469,4244],{"class":149},[139,23471,4247],{"class":149},[139,23473,4250],{"class":781},[139,23475,3591],{"class":145},[139,23477,23478,23480],{"class":141,"line":254},[139,23479,915],{"class":149},[139,23481,17439],{"class":781},[139,23483,23484],{"class":141,"line":262},[139,23485,3843],{"class":145},[139,23487,23488],{"class":141,"line":313},[139,23489,23490],{"class":149},"    public:\n",[139,23492,23493],{"class":141,"line":462},[139,23494,843],{"emptyLinePlaceholder":842},[139,23496,23497],{"class":141,"line":474},[139,23498,23499],{"class":2512},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[139,23501,23502],{"class":141,"line":484},[139,23503,23504],{"class":2512},"    \u002F\u002FPerson(int a, int b, int c) {\n",[139,23506,23507],{"class":141,"line":989},[139,23508,23509],{"class":2512},"    \u002F\u002F  m_A = a;\n",[139,23511,23512],{"class":141,"line":994},[139,23513,23514],{"class":2512},"    \u002F\u002F  m_B = b;\n",[139,23516,23517],{"class":141,"line":999},[139,23518,23519],{"class":2512},"    \u002F\u002F  m_C = c;\n",[139,23521,23522],{"class":141,"line":1006},[139,23523,23524],{"class":2512},"    \u002F\u002F}\n",[139,23526,23527],{"class":141,"line":1027},[139,23528,843],{"emptyLinePlaceholder":842},[139,23530,23531],{"class":141,"line":1040},[139,23532,23533],{"class":2512},"    \u002F\u002F初始化列表方式初始化\n",[139,23535,23536],{"class":141,"line":2160},[139,23537,23538],{"class":2512},"    \u002F\u002F使用有参构造函数\n",[139,23540,23541,23543,23545,23547,23549,23551,23553,23555,23557,23559,23561,23564,23567,23570,23573,23576,23579],{"class":141,"line":2188},[139,23542,20786],{"class":781},[139,23544,157],{"class":145},[139,23546,2461],{"class":149},[139,23548,3696],{"class":2111},[139,23550,413],{"class":145},[139,23552,2461],{"class":149},[139,23554,5116],{"class":2111},[139,23556,413],{"class":145},[139,23558,2461],{"class":149},[139,23560,5132],{"class":2111},[139,23562,23563],{"class":145},") :",[139,23565,23566],{"class":781},"m_A",[139,23568,23569],{"class":145},"(a), ",[139,23571,23572],{"class":781},"m_B",[139,23574,23575],{"class":145},"(b), ",[139,23577,23578],{"class":781},"m_C",[139,23580,23581],{"class":145},"(c) {}\n",[139,23583,23584,23586,23589],{"class":141,"line":3944},[139,23585,17178],{"class":149},[139,23587,23588],{"class":781}," PrintPerson",[139,23590,13127],{"class":145},[139,23592,23593,23595,23597,23600,23602,23605,23607],{"class":141,"line":3963},[139,23594,11943],{"class":145},[139,23596,3474],{"class":149},[139,23598,23599],{"class":160}," \"mA:\"",[139,23601,3742],{"class":149},[139,23603,23604],{"class":145}," m_A ",[139,23606,3474],{"class":149},[139,23608,11114],{"class":145},[139,23610,23611,23613,23615,23618,23620,23623,23625],{"class":141,"line":3968},[139,23612,11943],{"class":145},[139,23614,3474],{"class":149},[139,23616,23617],{"class":160}," \"mB:\"",[139,23619,3742],{"class":149},[139,23621,23622],{"class":145}," m_B ",[139,23624,3474],{"class":149},[139,23626,11114],{"class":145},[139,23628,23629,23631,23633,23636,23638,23641,23643],{"class":141,"line":3982},[139,23630,11943],{"class":145},[139,23632,3474],{"class":149},[139,23634,23635],{"class":160}," \"mC:\"",[139,23637,3742],{"class":149},[139,23639,23640],{"class":145}," m_C ",[139,23642,3474],{"class":149},[139,23644,11114],{"class":145},[139,23646,23647],{"class":141,"line":3987},[139,23648,4472],{"class":145},[139,23650,23651],{"class":141,"line":4014},[139,23652,17490],{"class":149},[139,23654,23655,23657],{"class":141,"line":4019},[139,23656,1082],{"class":149},[139,23658,23659],{"class":145}," m_A;\n",[139,23661,23662,23664],{"class":141,"line":4036},[139,23663,1082],{"class":149},[139,23665,23666],{"class":145}," m_B;\n",[139,23668,23669,23671],{"class":141,"line":4041},[139,23670,1082],{"class":149},[139,23672,23673],{"class":145}," m_C;\n",[139,23675,23676],{"class":141,"line":4046},[139,23677,6275],{"class":145},[139,23679,23680],{"class":141,"line":4051},[139,23681,843],{"emptyLinePlaceholder":842},[139,23683,23684,23686,23688],{"class":141,"line":4065},[139,23685,2461],{"class":149},[139,23687,4259],{"class":781},[139,23689,8252],{"class":145},[139,23691,23692],{"class":141,"line":4070},[139,23693,3843],{"class":145},[139,23695,23696],{"class":141,"line":4860},[139,23697,843],{"emptyLinePlaceholder":842},[139,23699,23700,23702,23704,23706,23708,23710,23712,23714,23716],{"class":141,"line":4874},[139,23701,21698],{"class":145},[139,23703,19],{"class":781},[139,23705,157],{"class":145},[139,23707,410],{"class":153},[139,23709,413],{"class":145},[139,23711,416],{"class":153},[139,23713,413],{"class":145},[139,23715,421],{"class":153},[139,23717,5002],{"class":145},[139,23719,23720,23722,23725],{"class":141,"line":4882},[139,23721,18133],{"class":145},[139,23723,23724],{"class":781},"PrintPerson",[139,23726,7910],{"class":145},[139,23728,23729],{"class":141,"line":4887},[139,23730,843],{"emptyLinePlaceholder":842},[139,23732,23733],{"class":141,"line":4893},[139,23734,843],{"emptyLinePlaceholder":842},[139,23736,23737,23739,23741,23743],{"class":141,"line":4899},[139,23738,4588],{"class":781},[139,23740,157],{"class":145},[139,23742,4593],{"class":160},[139,23744,5002],{"class":145},[139,23746,23747],{"class":141,"line":4904},[139,23748,843],{"emptyLinePlaceholder":842},[139,23750,23751,23753,23755],{"class":141,"line":10222},[139,23752,978],{"class":149},[139,23754,799],{"class":153},[139,23756,3591],{"class":145},[139,23758,23759],{"class":141,"line":10246},[139,23760,3862],{"class":145},[19,23762,23763,23764,23767,23768],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1674,23765,23766],{},"参数名就是定义的对象属性","，",[1674,23769,23770],{},"属性后面的值为有参构造函数的形参",[130,23772,23774],{"className":2447,"code":23773,"language":2449,"meta":135,"style":135},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[50,23775,23776],{"__ignoreMap":135},[139,23777,23778,23780,23782,23784,23787,23789,23792,23794,23797,23799,23802,23804,23807,23809],{"class":141,"line":142},[139,23779,21313],{"class":781},[139,23781,157],{"class":145},[139,23783,2461],{"class":149},[139,23785,23786],{"class":145}," a.",[139,23788,2461],{"class":149},[139,23790,23791],{"class":145}," b,",[139,23793,2461],{"class":149},[139,23795,23796],{"class":145}," b):",[139,23798,23566],{"class":781},[139,23800,23801],{"class":145},"(a),",[139,23803,23572],{"class":781},[139,23805,23806],{"class":145},"(c),",[139,23808,23578],{"class":781},[139,23810,23811],{"class":145},"(b) {}\n",[1217,23813,23815],{"id":23814},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23817,23818],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23820,16904],{},[130,23822,23824],{"className":2447,"code":23823,"language":2449,"meta":135,"style":135},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[50,23825,23826,23831,23836,23840,23845,23849],{"__ignoreMap":135},[139,23827,23828],{"class":141,"line":142},[139,23829,23830],{"class":145},"A{};\n",[139,23832,23833],{"class":141,"line":210},[139,23834,23835],{"class":145},"B\n",[139,23837,23838],{"class":141,"line":254},[139,23839,3843],{"class":145},[139,23841,23842],{"class":141,"line":262},[139,23843,23844],{"class":145},"    A a;\n",[139,23846,23847],{"class":141,"line":313},[139,23848,3862],{"class":145},[139,23850,23851],{"class":141,"line":462},[139,23852,23853],{"class":2512},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23855,23856],{},"案例",[130,23858,23860],{"className":2447,"code":23859,"language":2449,"meta":135,"style":135},"\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",[50,23861,23862,23867,23874,23878,23883,23888,23902,23906,23916,23927,23931,23938,23942,23955,23959,23964,23969,23973,23979,23983,23987,23991,24022,24026,24037,24041,24047,24051,24064,24068,24072,24076,24081,24086,24090,24098,24102,24119,24138,24142,24150,24154,24160],{"__ignoreMap":135},[139,23863,23864],{"class":141,"line":142},[139,23865,23866],{"class":2512},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[139,23868,23869,23871],{"class":141,"line":210},[139,23870,915],{"class":149},[139,23872,23873],{"class":781}," Phone\n",[139,23875,23876],{"class":141,"line":254},[139,23877,3843],{"class":145},[139,23879,23880],{"class":141,"line":262},[139,23881,23882],{"class":145},"public：\n",[139,23884,23885],{"class":141,"line":313},[139,23886,23887],{"class":2512},"    \u002F\u002F 赋值(构造函数)\n",[139,23889,23890,23893,23895,23897,23900],{"class":141,"line":462},[139,23891,23892],{"class":781},"    Phone",[139,23894,157],{"class":145},[139,23896,17186],{"class":781},[139,23898,23899],{"class":2111}," pName",[139,23901,164],{"class":145},[139,23903,23904],{"class":141,"line":474},[139,23905,4315],{"class":145},[139,23907,23908,23911,23913],{"class":141,"line":484},[139,23909,23910],{"class":145},"        m_pName",[139,23912,150],{"class":149},[139,23914,23915],{"class":145},"pName;\n",[139,23917,23918,23920,23922,23925],{"class":141,"line":989},[139,23919,5732],{"class":145},[139,23921,3474],{"class":149},[139,23923,23924],{"class":160},"\"Phone的构造函数调用\"",[139,23926,3591],{"class":145},[139,23928,23929],{"class":141,"line":994},[139,23930,4472],{"class":145},[139,23932,23933,23936],{"class":141,"line":999},[139,23934,23935],{"class":781},"    ~Phone",[139,23937,4262],{"class":145},[139,23939,23940],{"class":141,"line":1006},[139,23941,4315],{"class":145},[139,23943,23944,23946,23948,23951,23953],{"class":141,"line":1027},[139,23945,5732],{"class":145},[139,23947,3474],{"class":149},[139,23949,23950],{"class":160},"\"Phone析构函数调用\"",[139,23952,3474],{"class":149},[139,23954,3496],{"class":145},[139,23956,23957],{"class":141,"line":1040},[139,23958,4472],{"class":145},[139,23960,23961],{"class":141,"line":2160},[139,23962,23963],{"class":2512},"    \u002F\u002F\n",[139,23965,23966],{"class":141,"line":2188},[139,23967,23968],{"class":145},"    string m_PName;\n",[139,23970,23971],{"class":141,"line":3944},[139,23972,6275],{"class":145},[139,23974,23975,23977],{"class":141,"line":3963},[139,23976,915],{"class":149},[139,23978,17439],{"class":781},[139,23980,23981],{"class":141,"line":3968},[139,23982,3843],{"class":145},[139,23984,23985],{"class":141,"line":3982},[139,23986,16986],{"class":149},[139,23988,23989],{"class":141,"line":3987},[139,23990,19261],{"class":2512},[139,23992,23993,23995,23997,23999,24001,24003,24005,24008,24011,24013,24016,24019],{"class":141,"line":4014},[139,23994,20786],{"class":781},[139,23996,157],{"class":145},[139,23998,17186],{"class":781},[139,24000,17189],{"class":2111},[139,24002,2816],{"class":145},[139,24004,17186],{"class":781},[139,24006,24007],{"class":2111}," pname",[139,24009,24010],{"class":145},"):",[139,24012,17279],{"class":781},[139,24014,24015],{"class":145},"(name),m_phone.",[139,24017,24018],{"class":781},"m_PName",[139,24020,24021],{"class":145},"(pname) \n",[139,24023,24024],{"class":141,"line":4019},[139,24025,4315],{"class":145},[139,24027,24028,24030,24032,24035],{"class":141,"line":4036},[139,24029,5732],{"class":145},[139,24031,3474],{"class":149},[139,24033,24034],{"class":160},"\"Person的构造函数调用\"",[139,24036,3591],{"class":145},[139,24038,24039],{"class":141,"line":4041},[139,24040,4472],{"class":145},[139,24042,24043,24045],{"class":141,"line":4046},[139,24044,20819],{"class":781},[139,24046,4262],{"class":145},[139,24048,24049],{"class":141,"line":4051},[139,24050,4315],{"class":145},[139,24052,24053,24055,24057,24060,24062],{"class":141,"line":4065},[139,24054,5732],{"class":145},[139,24056,3474],{"class":149},[139,24058,24059],{"class":160},"\"Person析构函数调用\"",[139,24061,3474],{"class":149},[139,24063,3496],{"class":145},[139,24065,24066],{"class":141,"line":4070},[139,24067,4472],{"class":145},[139,24069,24070],{"class":141,"line":4860},[139,24071,10054],{"class":2512},[139,24073,24074],{"class":141,"line":4874},[139,24075,17161],{"class":145},[139,24077,24078],{"class":141,"line":4882},[139,24079,24080],{"class":2512},"    \u002F\u002F手机\n",[139,24082,24083],{"class":141,"line":4887},[139,24084,24085],{"class":145},"    Phone m_Phone;\n",[139,24087,24088],{"class":141,"line":4893},[139,24089,6275],{"class":145},[139,24091,24092,24094,24096],{"class":141,"line":4899},[139,24093,7638],{"class":149},[139,24095,7862],{"class":781},[139,24097,4262],{"class":145},[139,24099,24100],{"class":141,"line":4904},[139,24101,3843],{"class":145},[139,24103,24104,24106,24108,24110,24112,24114,24117],{"class":141,"line":10222},[139,24105,21698],{"class":145},[139,24107,19],{"class":781},[139,24109,157],{"class":145},[139,24111,10190],{"class":160},[139,24113,2816],{"class":145},[139,24115,24116],{"class":160},"\"安卓\"",[139,24118,5002],{"class":145},[139,24120,24121,24123,24125,24128,24130,24133,24135],{"class":141,"line":10246},[139,24122,3848],{"class":145},[139,24124,3474],{"class":149},[139,24126,24127],{"class":145},"p.Name",[139,24129,3474],{"class":149},[139,24131,24132],{"class":160},"\"拿着：\"",[139,24134,3474],{"class":149},[139,24136,24137],{"class":145},"p.m_phone.m_PName;\n",[139,24139,24140],{"class":141,"line":10251},[139,24141,3862],{"class":145},[139,24143,24144,24146,24148],{"class":141,"line":10257},[139,24145,2461],{"class":149},[139,24147,4259],{"class":781},[139,24149,4262],{"class":145},[139,24151,24152],{"class":141,"line":10284},[139,24153,3843],{"class":145},[139,24155,24156,24158],{"class":141,"line":10289},[139,24157,7907],{"class":781},[139,24159,7910],{"class":145},[139,24161,24162],{"class":141,"line":10295},[139,24163,3862],{"class":145},[19,24165,11299],{},[130,24167,24169],{"className":2447,"code":24168,"language":2449,"meta":135,"style":135},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[50,24170,24171,24176],{"__ignoreMap":135},[139,24172,24173],{"class":141,"line":142},[139,24174,24175],{"class":2512},"    \u002F\u002F不需要写这个：\n",[139,24177,24178],{"class":141,"line":210},[139,24179,24180],{"class":2512},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24182,24183],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[130,24185,24187],{"className":2447,"code":24186,"language":2449,"meta":135,"style":135},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[50,24188,24189],{"__ignoreMap":135},[139,24190,24191,24193,24196,24198,24201,24204],{"class":141,"line":142},[139,24192,21313],{"class":781},[139,24194,24195],{"class":145},"(string name.string pname):",[139,24197,17279],{"class":781},[139,24199,24200],{"class":145},"(name),",[139,24202,24203],{"class":781},"m_phone",[139,24205,24206],{"class":145},"(pname) {}\n",[19,24208,24209,24210,150,24213],{},"采用的是隐式转换法，实际为如下：\n",[50,24211,24212],{},"m_phone(pname)",[50,24214,24215],{},"Phone m_phone=pname",[19,24217,24218,24221],{},[1674,24219,24220],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24223,24224],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1217,24226,24228],{"id":24227},"_828静态对象","8.2.8静态对象",[19,24230,24231],{},"静态对象在成员对象前static，称为静态对象",[19,24233,24234],{},"静态对象分为两类：",[1760,24236,24237],{},[1763,24238,24239],{},"静态成员变量",[3437,24241,24242,24245,24248],{},[1763,24243,24244],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1763,24246,24247],{},"②在编译阶段分配内存",[1763,24249,24250],{},"③类内声明，类外初始化",[1760,24252,24253],{"start":210},[1763,24254,24255],{},"静态成员函数",[3437,24257,24258,24261],{},[1763,24259,24260],{},"①所有对象共享同一个函数",[1763,24262,24263],{},"②静态成员函数只能访问静态成员变量",[24265,24266,24268],"h4",{"id":24267},"_8281静态成员变量","8.2.8.1静态成员变量",[130,24270,24272],{"className":2447,"code":24271,"language":2449,"meta":135,"style":135},"#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",[50,24273,24274,24280,24290,24296,24300,24304,24309,24314,24319,24327,24331,24335,24339,24347,24351,24355,24360,24373,24377,24385,24389,24395],{"__ignoreMap":135},[139,24275,24276,24278],{"class":141,"line":142},[139,24277,4236],{"class":149},[139,24279,4239],{"class":160},[139,24281,24282,24284,24286,24288],{"class":141,"line":210},[139,24283,4244],{"class":149},[139,24285,4247],{"class":149},[139,24287,4250],{"class":781},[139,24289,3591],{"class":145},[139,24291,24292,24294],{"class":141,"line":254},[139,24293,915],{"class":149},[139,24295,17439],{"class":781},[139,24297,24298],{"class":141,"line":262},[139,24299,3843],{"class":145},[139,24301,24302],{"class":141,"line":313},[139,24303,16986],{"class":149},[139,24305,24306],{"class":141,"line":462},[139,24307,24308],{"class":2512},"    \u002F\u002F非静态成员变量\n",[139,24310,24311],{"class":141,"line":474},[139,24312,24313],{"class":2512},"    \u002F\u002F int m_A;\n",[139,24315,24316],{"class":141,"line":484},[139,24317,24318],{"class":2512},"    \u002F\u002F定义静态成员变量\n",[139,24320,24321,24323,24325],{"class":141,"line":989},[139,24322,13293],{"class":149},[139,24324,154],{"class":149},[139,24326,23659],{"class":145},[139,24328,24329],{"class":141,"line":994},[139,24330,843],{"emptyLinePlaceholder":842},[139,24332,24333],{"class":141,"line":999},[139,24334,843],{"emptyLinePlaceholder":842},[139,24336,24337],{"class":141,"line":1006},[139,24338,6275],{"class":145},[139,24340,24341,24343,24345],{"class":141,"line":1027},[139,24342,7638],{"class":149},[139,24344,7862],{"class":781},[139,24346,4262],{"class":145},[139,24348,24349],{"class":141,"line":1040},[139,24350,3843],{"class":145},[139,24352,24353],{"class":141,"line":2160},[139,24354,17581],{"class":145},[139,24356,24357],{"class":141,"line":2188},[139,24358,24359],{"class":2512},"    \u002F\u002F输出类成员变量这块内存\n",[139,24361,24362,24364,24366,24369,24371],{"class":141,"line":3944},[139,24363,3848],{"class":145},[139,24365,3474],{"class":149},[139,24367,24368],{"class":145},"p.m_A",[139,24370,3474],{"class":149},[139,24372,3496],{"class":145},[139,24374,24375],{"class":141,"line":3963},[139,24376,3862],{"class":145},[139,24378,24379,24381,24383],{"class":141,"line":3968},[139,24380,2461],{"class":149},[139,24382,4259],{"class":781},[139,24384,4262],{"class":145},[139,24386,24387],{"class":141,"line":3982},[139,24388,3843],{"class":145},[139,24390,24391,24393],{"class":141,"line":3987},[139,24392,7907],{"class":781},[139,24394,4262],{"class":145},[139,24396,24397],{"class":141,"line":4014},[139,24398,3862],{"class":145},[19,24400,24401],{},"此时输出是报错的：无法解析外部命令",[19,24403,24404],{},"解决这一问题：必须用到类内声明，类外初始化操作",[130,24406,24408],{"className":2447,"code":24407,"language":2449,"meta":135,"style":135},"#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",[50,24409,24410,24416,24426,24432,24436,24440,24445,24453,24457,24462,24477,24485,24489,24493,24498,24503,24515,24520,24531,24536,24541,24554,24558,24566,24570,24576],{"__ignoreMap":135},[139,24411,24412,24414],{"class":141,"line":142},[139,24413,4236],{"class":149},[139,24415,4239],{"class":160},[139,24417,24418,24420,24422,24424],{"class":141,"line":210},[139,24419,4244],{"class":149},[139,24421,4247],{"class":149},[139,24423,4250],{"class":781},[139,24425,3591],{"class":145},[139,24427,24428,24430],{"class":141,"line":254},[139,24429,915],{"class":149},[139,24431,17439],{"class":781},[139,24433,24434],{"class":141,"line":262},[139,24435,3843],{"class":145},[139,24437,24438],{"class":141,"line":313},[139,24439,16986],{"class":149},[139,24441,24442],{"class":141,"line":462},[139,24443,24444],{"class":2512},"    \u002F\u002F类内声明\n",[139,24446,24447,24449,24451],{"class":141,"line":474},[139,24448,13293],{"class":149},[139,24450,154],{"class":149},[139,24452,23659],{"class":145},[139,24454,24455],{"class":141,"line":484},[139,24456,6275],{"class":145},[139,24458,24459],{"class":141,"line":989},[139,24460,24461],{"class":2512},"\u002F\u002F类外初始化\n",[139,24463,24464,24466,24468,24471,24473,24475],{"class":141,"line":994},[139,24465,2461],{"class":149},[139,24467,17837],{"class":781},[139,24469,24470],{"class":145},"::m_A",[139,24472,150],{"class":149},[139,24474,536],{"class":153},[139,24476,3591],{"class":145},[139,24478,24479,24481,24483],{"class":141,"line":999},[139,24480,7638],{"class":149},[139,24482,7862],{"class":781},[139,24484,4262],{"class":145},[139,24486,24487],{"class":141,"line":1006},[139,24488,3843],{"class":145},[139,24490,24491],{"class":141,"line":1027},[139,24492,17581],{"class":145},[139,24494,24495],{"class":141,"line":1040},[139,24496,24497],{"class":2512},"    \u002F\u002F访问变量的原内存空间\n",[139,24499,24500],{"class":141,"line":2160},[139,24501,24502],{"class":2512},"    \u002F\u002F100\n",[139,24504,24505,24507,24509,24511,24513],{"class":141,"line":2188},[139,24506,3848],{"class":145},[139,24508,3474],{"class":149},[139,24510,24368],{"class":145},[139,24512,3474],{"class":149},[139,24514,3496],{"class":145},[139,24516,24517],{"class":141,"line":3944},[139,24518,24519],{"class":145},"    Person p2;\n",[139,24521,24522,24525,24527,24529],{"class":141,"line":3963},[139,24523,24524],{"class":145},"    p2.m_A",[139,24526,150],{"class":149},[139,24528,1022],{"class":153},[139,24530,3591],{"class":145},[139,24532,24533],{"class":141,"line":3968},[139,24534,24535],{"class":2512},"    \u002F\u002F继续访问这片空间\n",[139,24537,24538],{"class":141,"line":3982},[139,24539,24540],{"class":2512},"    \u002F\u002F200\n",[139,24542,24543,24545,24547,24550,24552],{"class":141,"line":3987},[139,24544,3848],{"class":145},[139,24546,3474],{"class":149},[139,24548,24549],{"class":145},"p2.m_A",[139,24551,3474],{"class":149},[139,24553,3496],{"class":145},[139,24555,24556],{"class":141,"line":4014},[139,24557,3862],{"class":145},[139,24559,24560,24562,24564],{"class":141,"line":4019},[139,24561,2461],{"class":149},[139,24563,4259],{"class":781},[139,24565,4262],{"class":145},[139,24567,24568],{"class":141,"line":4036},[139,24569,3843],{"class":145},[139,24571,24572,24574],{"class":141,"line":4041},[139,24573,7907],{"class":781},[139,24575,7910],{"class":145},[139,24577,24578],{"class":141,"line":4046},[139,24579,3862],{"class":145},[19,24581,24582],{},[1674,24583,24584],{},"静态变量的访问",[130,24586,24588],{"className":2447,"code":24587,"language":2449,"meta":135,"style":135},"#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",[50,24589,24590,24596,24606,24612,24616,24620,24624,24632,24636,24641,24649,24653,24657,24671,24686,24694,24698,24703,24708,24713,24718,24730,24735,24740,24754,24771,24775,24783,24787,24793],{"__ignoreMap":135},[139,24591,24592,24594],{"class":141,"line":142},[139,24593,4236],{"class":149},[139,24595,4239],{"class":160},[139,24597,24598,24600,24602,24604],{"class":141,"line":210},[139,24599,4244],{"class":149},[139,24601,4247],{"class":149},[139,24603,4250],{"class":781},[139,24605,3591],{"class":145},[139,24607,24608,24610],{"class":141,"line":254},[139,24609,915],{"class":149},[139,24611,17439],{"class":781},[139,24613,24614],{"class":141,"line":262},[139,24615,3843],{"class":145},[139,24617,24618],{"class":141,"line":313},[139,24619,16986],{"class":149},[139,24621,24622],{"class":141,"line":462},[139,24623,24444],{"class":2512},[139,24625,24626,24628,24630],{"class":141,"line":474},[139,24627,13293],{"class":149},[139,24629,154],{"class":149},[139,24631,23659],{"class":145},[139,24633,24634],{"class":141,"line":484},[139,24635,17490],{"class":149},[139,24637,24638],{"class":141,"line":989},[139,24639,24640],{"class":2512},"    \u002F\u002F静态成员变量也是有访问权限的\n",[139,24642,24643,24645,24647],{"class":141,"line":994},[139,24644,13293],{"class":149},[139,24646,154],{"class":149},[139,24648,23666],{"class":145},[139,24650,24651],{"class":141,"line":999},[139,24652,6275],{"class":145},[139,24654,24655],{"class":141,"line":1006},[139,24656,24461],{"class":2512},[139,24658,24659,24661,24663,24665,24667,24669],{"class":141,"line":1027},[139,24660,2461],{"class":149},[139,24662,17837],{"class":781},[139,24664,24470],{"class":145},[139,24666,150],{"class":149},[139,24668,536],{"class":153},[139,24670,3591],{"class":145},[139,24672,24673,24675,24677,24680,24682,24684],{"class":141,"line":1040},[139,24674,2461],{"class":149},[139,24676,17837],{"class":781},[139,24678,24679],{"class":145},"::m_B",[139,24681,150],{"class":149},[139,24683,3135],{"class":153},[139,24685,3591],{"class":145},[139,24687,24688,24690,24692],{"class":141,"line":2160},[139,24689,7638],{"class":149},[139,24691,7931],{"class":781},[139,24693,4262],{"class":145},[139,24695,24696],{"class":141,"line":2188},[139,24697,3843],{"class":145},[139,24699,24700],{"class":141,"line":3944},[139,24701,24702],{"class":2512},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[139,24704,24705],{"class":141,"line":3963},[139,24706,24707],{"class":2512},"    \u002F\u002F静态成员变量有两种访问方式：\n",[139,24709,24710],{"class":141,"line":3968},[139,24711,24712],{"class":2512},"    \u002F\u002F1.通过对象进行访问\n",[139,24714,24715],{"class":141,"line":3982},[139,24716,24717],{"class":145},"    Person p;  \n",[139,24719,24720,24722,24724,24726,24728],{"class":141,"line":3987},[139,24721,3848],{"class":145},[139,24723,3474],{"class":149},[139,24725,24368],{"class":145},[139,24727,3474],{"class":149},[139,24729,3496],{"class":145},[139,24731,24732],{"class":141,"line":4014},[139,24733,24734],{"class":2512},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[139,24736,24737],{"class":141,"line":4019},[139,24738,24739],{"class":2512},"    \u002F\u002F2.通过类名进行访问\n",[139,24741,24742,24744,24746,24748,24750,24752],{"class":141,"line":4036},[139,24743,3848],{"class":145},[139,24745,3474],{"class":149},[139,24747,21313],{"class":781},[139,24749,24470],{"class":145},[139,24751,3474],{"class":149},[139,24753,3496],{"class":145},[139,24755,24756,24758,24760,24762,24764,24766,24768],{"class":141,"line":4041},[139,24757,3848],{"class":145},[139,24759,3474],{"class":149},[139,24761,21313],{"class":781},[139,24763,24679],{"class":145},[139,24765,3474],{"class":149},[139,24767,3539],{"class":145},[139,24769,24770],{"class":2512}," \u002F\u002F没有访问权限，报错\n",[139,24772,24773],{"class":141,"line":4046},[139,24774,3862],{"class":145},[139,24776,24777,24779,24781],{"class":141,"line":4051},[139,24778,2461],{"class":149},[139,24780,4259],{"class":781},[139,24782,4262],{"class":145},[139,24784,24785],{"class":141,"line":4065},[139,24786,3843],{"class":145},[139,24788,24789,24791],{"class":141,"line":4070},[139,24790,7976],{"class":781},[139,24792,7910],{"class":145},[139,24794,24795],{"class":141,"line":4860},[139,24796,3862],{"class":145},[24265,24798,24800],{"id":24799},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24802,24803],{},"1.静态成员函数定义与访问",[130,24805,24807],{"className":2447,"code":24806,"language":2449,"meta":135,"style":135},"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",[50,24808,24809,24815,24819,24823,24828,24839,24843,24857,24861,24865,24873,24877,24882,24887,24891,24899,24904,24914],{"__ignoreMap":135},[139,24810,24811,24813],{"class":141,"line":142},[139,24812,915],{"class":149},[139,24814,17439],{"class":781},[139,24816,24817],{"class":141,"line":210},[139,24818,3843],{"class":145},[139,24820,24821],{"class":141,"line":254},[139,24822,16986],{"class":149},[139,24824,24825],{"class":141,"line":262},[139,24826,24827],{"class":2512},"    \u002F\u002F在公共权限下定义静态成员函数\n",[139,24829,24830,24832,24835,24837],{"class":141,"line":313},[139,24831,13293],{"class":149},[139,24833,24834],{"class":149}," void",[139,24836,13658],{"class":781},[139,24838,4262],{"class":145},[139,24840,24841],{"class":141,"line":462},[139,24842,4315],{"class":145},[139,24844,24845,24848,24850,24853,24855],{"class":141,"line":474},[139,24846,24847],{"class":145},"        coout",[139,24849,3474],{"class":149},[139,24851,24852],{"class":160},"\"静态成员函数的调用\"",[139,24854,3474],{"class":149},[139,24856,3496],{"class":145},[139,24858,24859],{"class":141,"line":484},[139,24860,4472],{"class":145},[139,24862,24863],{"class":141,"line":989},[139,24864,6275],{"class":145},[139,24866,24867,24869,24871],{"class":141,"line":994},[139,24868,7638],{"class":149},[139,24870,7862],{"class":781},[139,24872,4262],{"class":145},[139,24874,24875],{"class":141,"line":999},[139,24876,3843],{"class":145},[139,24878,24879],{"class":141,"line":1006},[139,24880,24881],{"class":2512},"    \u002F\u002F静态成员函数的调用方式:\n",[139,24883,24884],{"class":141,"line":1027},[139,24885,24886],{"class":2512},"    \u002F\u002F1.通过对象访问\n",[139,24888,24889],{"class":141,"line":1040},[139,24890,17581],{"class":145},[139,24892,24893,24895,24897],{"class":141,"line":2160},[139,24894,18133],{"class":145},[139,24896,13824],{"class":781},[139,24898,7910],{"class":145},[139,24900,24901],{"class":141,"line":2188},[139,24902,24903],{"class":2512},"    \u002F\u002F2.通过类名访问\n",[139,24905,24906,24908,24910,24912],{"class":141,"line":3944},[139,24907,20786],{"class":781},[139,24909,19999],{"class":145},[139,24911,13824],{"class":781},[139,24913,7910],{"class":145},[139,24915,24916],{"class":141,"line":3963},[139,24917,3862],{"class":145},[1760,24919,24920],{"start":210},[1763,24921,24922],{},"静态成员函数只能访问静态成员变量",[130,24924,24926],{"className":2447,"code":24925,"language":2449,"meta":135,"style":135},"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",[50,24927,24928,24934,24938,24942,24946,24956,24960,24974,24979,24991,24995,25006,25016,25020,25024,25028,25038,25042,25055,25059,25063,25067,25071,25085,25093,25097,25101,25105,25109,25117,25121,25131,25136,25140,25148,25152,25158],{"__ignoreMap":135},[139,24929,24930,24932],{"class":141,"line":142},[139,24931,915],{"class":149},[139,24933,17439],{"class":781},[139,24935,24936],{"class":141,"line":210},[139,24937,3843],{"class":145},[139,24939,24940],{"class":141,"line":254},[139,24941,16986],{"class":149},[139,24943,24944],{"class":141,"line":262},[139,24945,24827],{"class":2512},[139,24947,24948,24950,24952,24954],{"class":141,"line":313},[139,24949,13293],{"class":149},[139,24951,24834],{"class":149},[139,24953,13658],{"class":781},[139,24955,4262],{"class":145},[139,24957,24958],{"class":141,"line":462},[139,24959,4315],{"class":145},[139,24961,24962,24965,24967,24969,24971],{"class":141,"line":474},[139,24963,24964],{"class":145},"        m_A",[139,24966,150],{"class":149},[139,24968,1017],{"class":153},[139,24970,2509],{"class":145},[139,24972,24973],{"class":2512}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[139,24975,24976],{"class":141,"line":484},[139,24977,24978],{"class":2512},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[139,24980,24981,24983,24985,24987,24989],{"class":141,"line":989},[139,24982,24847],{"class":145},[139,24984,3474],{"class":149},[139,24986,24852],{"class":160},[139,24988,3474],{"class":149},[139,24990,3496],{"class":145},[139,24992,24993],{"class":141,"line":994},[139,24994,4472],{"class":145},[139,24996,24997,24999,25001,25003],{"class":141,"line":999},[139,24998,13293],{"class":149},[139,25000,154],{"class":149},[139,25002,17716],{"class":145},[139,25004,25005],{"class":2512}," \u002F\u002F静态成员变量\n",[139,25007,25008,25010,25013],{"class":141,"line":1006},[139,25009,1082],{"class":149},[139,25011,25012],{"class":145}," m_B;",[139,25014,25015],{"class":2512}," \u002F\u002F非静态成员变量\n",[139,25017,25018],{"class":141,"line":1027},[139,25019,843],{"emptyLinePlaceholder":842},[139,25021,25022],{"class":141,"line":1040},[139,25023,17490],{"class":149},[139,25025,25026],{"class":141,"line":2160},[139,25027,24640],{"class":2512},[139,25029,25030,25032,25034,25036],{"class":141,"line":2188},[139,25031,13293],{"class":149},[139,25033,24834],{"class":149},[139,25035,15890],{"class":781},[139,25037,4262],{"class":145},[139,25039,25040],{"class":141,"line":3944},[139,25041,4315],{"class":145},[139,25043,25044,25046,25048,25051,25053],{"class":141,"line":3963},[139,25045,5732],{"class":145},[139,25047,3474],{"class":149},[139,25049,25050],{"class":160},"\"这是私有权限下的静态函数调用\"",[139,25052,3474],{"class":149},[139,25054,3496],{"class":145},[139,25056,25057],{"class":141,"line":3968},[139,25058,4472],{"class":145},[139,25060,25061],{"class":141,"line":3982},[139,25062,843],{"emptyLinePlaceholder":842},[139,25064,25065],{"class":141,"line":3987},[139,25066,843],{"emptyLinePlaceholder":842},[139,25068,25069],{"class":141,"line":4014},[139,25070,6275],{"class":145},[139,25072,25073,25075,25077,25079,25081,25083],{"class":141,"line":4019},[139,25074,2461],{"class":149},[139,25076,17837],{"class":781},[139,25078,24470],{"class":145},[139,25080,150],{"class":149},[139,25082,2634],{"class":153},[139,25084,3591],{"class":145},[139,25086,25087,25089,25091],{"class":141,"line":4036},[139,25088,7638],{"class":149},[139,25090,7862],{"class":781},[139,25092,4262],{"class":145},[139,25094,25095],{"class":141,"line":4041},[139,25096,3843],{"class":145},[139,25098,25099],{"class":141,"line":4046},[139,25100,24881],{"class":2512},[139,25102,25103],{"class":141,"line":4051},[139,25104,24886],{"class":2512},[139,25106,25107],{"class":141,"line":4065},[139,25108,17581],{"class":145},[139,25110,25111,25113,25115],{"class":141,"line":4070},[139,25112,18133],{"class":145},[139,25114,13824],{"class":781},[139,25116,7910],{"class":145},[139,25118,25119],{"class":141,"line":4860},[139,25120,24903],{"class":2512},[139,25122,25123,25125,25127,25129],{"class":141,"line":4874},[139,25124,20786],{"class":781},[139,25126,19999],{"class":145},[139,25128,13824],{"class":781},[139,25130,7910],{"class":145},[139,25132,25133],{"class":141,"line":4882},[139,25134,25135],{"class":2512},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[139,25137,25138],{"class":141,"line":4887},[139,25139,3862],{"class":145},[139,25141,25142,25144,25146],{"class":141,"line":4893},[139,25143,2461],{"class":149},[139,25145,4259],{"class":781},[139,25147,4262],{"class":145},[139,25149,25150],{"class":141,"line":4899},[139,25151,3843],{"class":145},[139,25153,25154,25156],{"class":141,"line":4904},[139,25155,7907],{"class":781},[139,25157,7910],{"class":145},[139,25159,25160],{"class":141,"line":10222},[139,25161,3862],{"class":145},[1217,25163,25165],{"id":25164},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24265,25167,25169],{"id":25168},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25171,25172],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25174,25175],{},"只有非静态成员变量才属于类的对象上",[25177,25178,25180],"h5",{"id":25179},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[130,25182,25184],{"className":2447,"code":25183,"language":2449,"meta":135,"style":135},"#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",[50,25185,25186,25193,25203,25209,25213,25217,25221,25229,25233,25237,25260,25264,25272,25276,25282],{"__ignoreMap":135},[139,25187,25188,25190],{"class":141,"line":142},[139,25189,4236],{"class":149},[139,25191,25192],{"class":160},"\u003Ciostraem>\n",[139,25194,25195,25197,25199,25201],{"class":141,"line":210},[139,25196,4244],{"class":149},[139,25198,4247],{"class":149},[139,25200,4250],{"class":781},[139,25202,3591],{"class":145},[139,25204,25205,25207],{"class":141,"line":254},[139,25206,915],{"class":149},[139,25208,17439],{"class":781},[139,25210,25211],{"class":141,"line":262},[139,25212,3843],{"class":145},[139,25214,25215],{"class":141,"line":313},[139,25216,843],{"emptyLinePlaceholder":842},[139,25218,25219],{"class":141,"line":462},[139,25220,6275],{"class":145},[139,25222,25223,25225,25227],{"class":141,"line":474},[139,25224,7638],{"class":149},[139,25226,7862],{"class":781},[139,25228,4262],{"class":145},[139,25230,25231],{"class":141,"line":484},[139,25232,3843],{"class":145},[139,25234,25235],{"class":141,"line":989},[139,25236,17581],{"class":145},[139,25238,25239,25241,25243,25246,25248,25251,25253,25255,25257],{"class":141,"line":994},[139,25240,3848],{"class":145},[139,25242,3474],{"class":149},[139,25244,25245],{"class":160},"\"size of p=\"",[139,25247,3474],{"class":149},[139,25249,25250],{"class":781},"sizeoif",[139,25252,8813],{"class":145},[139,25254,3474],{"class":149},[139,25256,3539],{"class":145},[139,25258,25259],{"class":2512}," \u002F\u002F查看这个空类的占用的内存空间\n",[139,25261,25262],{"class":141,"line":999},[139,25263,3862],{"class":145},[139,25265,25266,25268,25270],{"class":141,"line":1006},[139,25267,2461],{"class":149},[139,25269,4259],{"class":781},[139,25271,4262],{"class":145},[139,25273,25274],{"class":141,"line":1027},[139,25275,3843],{"class":145},[139,25277,25278,25280],{"class":141,"line":1040},[139,25279,7907],{"class":781},[139,25281,7910],{"class":145},[139,25283,25284],{"class":141,"line":2160},[139,25285,3862],{"class":145},[19,25287,25288],{},"输出结果为：size of p=1",[19,25290,25291],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25293,25294],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25177,25296,25298],{"id":25297},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[130,25300,25302],{"className":2447,"code":25301,"language":2449,"meta":135,"style":135},"#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",[50,25303,25304,25310,25320,25328,25332,25341,25345,25353,25357,25361,25380,25384,25388,25396,25400,25406],{"__ignoreMap":135},[139,25305,25306,25308],{"class":141,"line":142},[139,25307,4236],{"class":149},[139,25309,4239],{"class":160},[139,25311,25312,25314,25316,25318],{"class":141,"line":210},[139,25313,4244],{"class":149},[139,25315,4247],{"class":149},[139,25317,4250],{"class":781},[139,25319,3591],{"class":145},[139,25321,25322,25324,25326],{"class":141,"line":254},[139,25323,915],{"class":149},[139,25325,17837],{"class":781},[139,25327,4957],{"class":145},[139,25329,25330],{"class":141,"line":262},[139,25331,3843],{"class":145},[139,25333,25334,25336,25338],{"class":141,"line":313},[139,25335,1082],{"class":149},[139,25337,17716],{"class":145},[139,25339,25340],{"class":2512},"\u002F\u002F非静态成员变量\n",[139,25342,25343],{"class":141,"line":462},[139,25344,6275],{"class":145},[139,25346,25347,25349,25351],{"class":141,"line":474},[139,25348,7638],{"class":149},[139,25350,7862],{"class":781},[139,25352,4262],{"class":145},[139,25354,25355],{"class":141,"line":484},[139,25356,3843],{"class":145},[139,25358,25359],{"class":141,"line":989},[139,25360,17581],{"class":145},[139,25362,25363,25365,25367,25369,25371,25373,25375,25377],{"class":141,"line":994},[139,25364,3848],{"class":145},[139,25366,3474],{"class":149},[139,25368,25245],{"class":160},[139,25370,3670],{"class":149},[139,25372,8813],{"class":145},[139,25374,3474],{"class":149},[139,25376,3539],{"class":145},[139,25378,25379],{"class":2512}," \u002F\u002F查看不是空对象时占用多少内存\n",[139,25381,25382],{"class":141,"line":999},[139,25383,843],{"emptyLinePlaceholder":842},[139,25385,25386],{"class":141,"line":1006},[139,25387,3862],{"class":145},[139,25389,25390,25392,25394],{"class":141,"line":1027},[139,25391,2461],{"class":149},[139,25393,4259],{"class":781},[139,25395,4262],{"class":145},[139,25397,25398],{"class":141,"line":1040},[139,25399,3843],{"class":145},[139,25401,25402,25404],{"class":141,"line":2160},[139,25403,7907],{"class":781},[139,25405,7910],{"class":145},[139,25407,25408],{"class":141,"line":2188},[139,25409,3862],{"class":145},[19,25411,25412],{},"输出结果：size of p=4",[19,25414,25415],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1760,25417,25418],{},[1763,25419,25420],{},"如果加上非静态成员变量，Person类修改如下",[130,25422,25424],{"className":2447,"code":25423,"language":2449,"meta":135,"style":135},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[50,25425,25426,25432,25436,25442,25450,25454,25459],{"__ignoreMap":135},[139,25427,25428,25430],{"class":141,"line":142},[139,25429,915],{"class":149},[139,25431,17439],{"class":781},[139,25433,25434],{"class":141,"line":210},[139,25435,3843],{"class":145},[139,25437,25438,25440],{"class":141,"line":254},[139,25439,1082],{"class":149},[139,25441,23659],{"class":145},[139,25443,25444,25446,25448],{"class":141,"line":262},[139,25445,13293],{"class":149},[139,25447,154],{"class":149},[139,25449,23666],{"class":145},[139,25451,25452],{"class":141,"line":313},[139,25453,6275],{"class":145},[139,25455,25456],{"class":141,"line":462},[139,25457,25458],{"class":2512},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[139,25460,25461,25463,25465,25467,25469,25471],{"class":141,"line":474},[139,25462,2461],{"class":149},[139,25464,17837],{"class":781},[139,25466,24679],{"class":145},[139,25468,150],{"class":149},[139,25470,2634],{"class":153},[139,25472,3591],{"class":145},[19,25474,25475],{},"输出结果：4",[19,25477,25478],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1760,25480,25481],{"start":210},[1763,25482,25483],{},"加上非静态成员函数",[130,25485,25487],{"className":2447,"code":25486,"language":2449,"meta":135,"style":135},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[50,25488,25489,25496,25500,25506,25514,25518,25522,25526],{"__ignoreMap":135},[139,25490,25491,25493],{"class":141,"line":142},[139,25492,915],{"class":149},[139,25494,25495],{"class":781},"  Person\n",[139,25497,25498],{"class":141,"line":210},[139,25499,3843],{"class":145},[139,25501,25502,25504],{"class":141,"line":254},[139,25503,1082],{"class":149},[139,25505,23659],{"class":145},[139,25507,25508,25510,25512],{"class":141,"line":262},[139,25509,17178],{"class":149},[139,25511,13658],{"class":781},[139,25513,4262],{"class":145},[139,25515,25516],{"class":141,"line":313},[139,25517,4315],{"class":145},[139,25519,25520],{"class":141,"line":462},[139,25521,843],{"emptyLinePlaceholder":842},[139,25523,25524],{"class":141,"line":474},[139,25525,4472],{"class":145},[139,25527,25528],{"class":141,"line":484},[139,25529,6275],{"class":145},[19,25531,25532],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1760,25534,25535],{"start":254},[1763,25536,25537],{},"加上静态成员函数",[130,25539,25541],{"className":2447,"code":25540,"language":2449,"meta":135,"style":135},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[50,25542,25543,25549,25553,25559,25567,25571,25575,25579,25590,25594,25598,25602],{"__ignoreMap":135},[139,25544,25545,25547],{"class":141,"line":142},[139,25546,915],{"class":149},[139,25548,25495],{"class":781},[139,25550,25551],{"class":141,"line":210},[139,25552,3843],{"class":145},[139,25554,25555,25557],{"class":141,"line":254},[139,25556,1082],{"class":149},[139,25558,23659],{"class":145},[139,25560,25561,25563,25565],{"class":141,"line":262},[139,25562,17178],{"class":149},[139,25564,13658],{"class":781},[139,25566,4262],{"class":145},[139,25568,25569],{"class":141,"line":313},[139,25570,4315],{"class":145},[139,25572,25573],{"class":141,"line":462},[139,25574,843],{"emptyLinePlaceholder":842},[139,25576,25577],{"class":141,"line":474},[139,25578,4472],{"class":145},[139,25580,25581,25583,25585,25588],{"class":141,"line":484},[139,25582,13293],{"class":149},[139,25584,24834],{"class":149},[139,25586,25587],{"class":781}," func1",[139,25589,4262],{"class":145},[139,25591,25592],{"class":141,"line":989},[139,25593,4315],{"class":145},[139,25595,25596],{"class":141,"line":994},[139,25597,843],{"emptyLinePlaceholder":842},[139,25599,25600],{"class":141,"line":999},[139,25601,4472],{"class":145},[139,25603,25604],{"class":141,"line":1006},[139,25605,6275],{"class":145},[19,25607,25475],{},[19,25609,25610],{},"解释：静态成员函数也不属于类上",[2348,25612,9948],{},{"title":135,"searchDepth":210,"depth":210,"links":25614},[25615,25621],{"id":16916,"depth":210,"text":16917,"children":25616},[25617,25618,25619,25620],{"id":16920,"depth":254,"text":16921},{"id":17642,"depth":254,"text":17643},{"id":17814,"depth":254,"text":17815},{"id":18272,"depth":254,"text":18273},{"id":20644,"depth":210,"text":20645,"children":25622},[25623,25624,25625,25626,25627,25628,25629,25630,25631],{"id":20656,"depth":254,"text":20657},{"id":20949,"depth":254,"text":20950},{"id":21440,"depth":254,"text":21441},{"id":22537,"depth":254,"text":22538},{"id":22960,"depth":254,"text":22961},{"id":23439,"depth":254,"text":23440},{"id":23814,"depth":254,"text":23815},{"id":24227,"depth":254,"text":24228},{"id":25164,"depth":254,"text":25165},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16881,"description":25632},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25639,"title":2449,"body":25640,"description":2384,"extension":2385,"meta":25644,"navigation":842,"path":25646,"seo":25647,"stem":25648,"__hash__":25649},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25641,"toc":25642},[],{"title":135,"searchDepth":210,"depth":210,"links":25643},[],{"category":25645},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2449,"description":2384},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25651,"title":25652,"body":25653,"description":135,"extension":2385,"meta":26240,"navigation":842,"path":26241,"seo":26242,"stem":26243,"__hash__":26244},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25654,"toc":26222},[25655,25658,25662,25665,25668,25671,25689,25694,25697,25700,25703,25706,25711,25714,25719,25722,25725,25729,25732,25735,25741,25744,25762,25766,25770,25773,25778,25781,25785,25788,25801,25804,25808,25811,25814,25817,25842,25845,25854,25865,25880,25912,25916,25923,25931,25935,25938,25941,25946,25950,25953,25956,25961,25964,25968,25971,25974,25979,25982,25986,25991,25995,26062,26066,26069,26072,26075,26078,26081,26087,26104,26107,26121,26130,26134,26137,26140,26145,26148,26153,26158,26161,26164,26169,26174,26177,26182,26187,26190,26195,26200,26203,26206,26211,26214,26219],[10,25656,25652],{"id":25657},"_1强化学习基本认识",[14,25659,25661],{"id":25660},"_11什么是强化学习","1.1.什么是强化学习",[19,25663,25664],{},"强化学习有两部分组成：智能体和环境；",[19,25666,25667],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25669,25670],{},"强化学习与监督学习的区别:",[1760,25672,25673,25676,25679,25682],{},[1763,25674,25675],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1763,25677,25678],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1763,25680,25681],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1763,25683,25684,25685,25688],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1674,25686,25687],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25690,25691],{},[3760,25692],{"alt":135,"src":25693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25695,25696],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25698,25699],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25701,25702],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25704,25705],{},"获取奖励",[19,25707,25708],{},[3760,25709],{"alt":135,"src":25710},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25712,25713],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25715,25716],{},[3760,25717],{"alt":135,"src":25718},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25720,25721],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25723,25724],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25726,25728],{"id":25727},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25730,25731],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25733,25734],{},"具身智能中的应用",[19,25736,25737,25740],{},[1674,25738,25739],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25742,25743],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25745,25746,25747,25750,25751,25754,25755,25758,25759],{},"机器人是",[1674,25748,25749],{},"躯体","，深度学习是",[1674,25752,25753],{},"神经元****网络","，VLA是",[1674,25756,25757],{},"通用的行为逻辑","，而强化学习是",[1674,25760,25761],{},"教练",[14,25763,25765],{"id":25764},"_13序列决策","1.3.序列决策",[1217,25767,25769],{"id":25768},"_131智能体与环境","1.3.1.智能体与环境",[19,25771,25772],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25774,25775],{},[3760,25776],{"alt":135,"src":25777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25779,25780],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1217,25782,25784],{"id":25783},"_132奖励","1.3.2.奖励",[19,25786,25787],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25789,25790,25791,25800],{},"取某个策略的表现如何。强化学习的目的就是",[1674,25792,25793,25794,25799],{},"最大化",[1674,25795,25796],{},[1674,25797,25798],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25802,25803],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1217,25805,25807],{"id":25806},"_133序列决策","1.3.3.序列决策",[19,25809,25810],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25812,25813],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25815,25816],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25818,25819,25823,25824,25826,25827,25829,25830,25832,25833,16066,25836,16066,25839],{},[25820,25821,25822],"em",{},"Ht"," = ",[25820,25825,3031],{},"1*, a",[25820,25828,410],{},", r",[25820,25831,410],{},", . . . ,* ",[25820,25834,25835],{},"ot",[25820,25837,25838],{},", at ,",[25820,25840,25841],{},"rt",[19,25843,25844],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25846,25847,25823,25850,549,25852,2867],{},[25820,25848,25849],{},"st",[25820,25851,619],{},[25820,25853,25822],{},[19,25855,25856,25857,25860,25861,25864],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1674,25858,25859],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1674,25862,25863],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25866,25867,25868,25871,25872,25875,25876,25879],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1674,25869,25870],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1674,25873,25874],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25820,25877,25878],{},"S, A, T, R, Ω, O, γ",")。",[19,25881,25882,25883,25885,25886,25888,25889,157,25891,25894,25895,25897,25898,157,25901,25904,25905,25907,25908,25911],{},"其中 ",[25820,25884,3124],{}," 表示状态空间，为隐变量，",[25820,25887,2674],{}," 为动作空间，",[25820,25890,3149],{},[25820,25892,25893],{},"s ′ |s, a",") 为状态转移概率，",[25820,25896,3099],{}," 为奖励函数，",[25820,25899,25900],{},"Ω",[25820,25902,25903],{},"o|s, a",") 为观测概率，",[25820,25906,3025],{}," 为观测空间，",[25820,25909,25910],{},"γ"," 为折扣因子。",[14,25913,25915],{"id":25914},"_14动作空间","1.4.动作空间",[19,25917,25918,25919,25922],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1674,25920,25921],{},"动作空间"," ，动作空间分为:",[1760,25924,25925,25928],{},[1763,25926,25927],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1763,25929,25930],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25932,25934],{"id":25933},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25936,25937],{},"由策略、价值函数、模型三部分组成",[19,25939,25940],{},"这三者组成马尔可夫决策过程",[19,25942,25943],{},[3760,25944],{"alt":135,"src":25945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1217,25947,25949],{"id":25948},"_151策略","1.5.1.策略",[19,25951,25952],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25954,25955],{},"策略可分为两种：",[19,25957,25958],{},[3760,25959],{"alt":135,"src":25960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25962,25963],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1217,25965,25967],{"id":25966},"_152价值函数","1.5.2.价值函数",[19,25969,25970],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25972,25973],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25975,25976],{},[3760,25977],{"alt":135,"src":25978},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25980,25981],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1217,25983,25985],{"id":25984},"_153模型","1.5.3.模型",[19,25987,25988],{},[3760,25989],{"alt":135,"src":25990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25992,25994],{"id":25993},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[26,25996,25997,26008],{},[29,25998,25999],{},[32,26000,26001,26005],{},[35,26002,26004],{"align":26003},"left","类型",[35,26006,26007],{"align":26003},"特点",[42,26009,26010,26020,26030,26040,26052],{},[32,26011,26012,26017],{},[47,26013,26014],{"align":26003},[1674,26015,26016],{},"基于价值的智能体",[47,26018,26019],{"align":26003},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[32,26021,26022,26027],{},[47,26023,26024],{"align":26003},[1674,26025,26026],{},"基于策略的智能体",[47,26028,26029],{"align":26003},"直接学习策略，没有学习价值函数",[32,26031,26032,26037],{},[47,26033,26034],{"align":26003},[1674,26035,26036],{},"演员-评论员智能体",[47,26038,26039],{"align":26003},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[32,26041,26042,26047],{},[47,26043,26044],{"align":26003},[1674,26045,26046],{},"有模型强化学习智能体",[47,26048,26049],{"align":26003},[3760,26050],{"alt":135,"src":26051},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[32,26053,26054,26059],{},[47,26055,26056],{"align":26003},[1674,26057,26058],{},"免模型强化学习智能体",[47,26060,26061],{"align":26003},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26063,26065],{"id":26064},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26067,26068],{},"学习和规划是序列决策的两个基本问题",[19,26070,26071],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26073,26074],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26076,26077],{},"强化学习用到的库：Gym",[19,26079,26080],{},"Gym可以检验强化学习算法的优劣",[19,26082,26083,26086],{},[1674,26084,26085],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[130,26088,26090],{"className":1830,"code":26089,"language":1832,"meta":135,"style":135},"pip install gym==0.25.2\n",[50,26091,26092],{"__ignoreMap":135},[139,26093,26094,26096,26098,26101],{"class":141,"line":142},[139,26095,1826],{"class":781},[139,26097,1841],{"class":160},[139,26099,26100],{"class":160}," gym==",[139,26102,26103],{"class":153},"0.25.2\n",[19,26105,26106],{},"显示图形界面需要",[130,26108,26110],{"className":1830,"code":26109,"language":1832,"meta":135,"style":135},"pip install pygame\n",[50,26111,26112],{"__ignoreMap":135},[139,26113,26114,26116,26118],{"class":141,"line":142},[139,26115,1826],{"class":781},[139,26117,1841],{"class":160},[139,26119,26120],{"class":160}," pygame\n",[19,26122,26123,26124],{},"有关Gym库的相关文档介绍：",[2680,26125,26129],{"href":26126,"rel":26127},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26128],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26131,26133],{"id":26132},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26135,26136],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26138,26139],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26141,26142],{},[3760,26143],{"alt":135,"src":26144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26146,26147],{},"折扣率需要自己来设定",[19,26149,26150],{},[3760,26151],{"alt":135,"src":26152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1760,26154,26155],{},[1763,26156,26157],{},"状态转移函数：",[19,26159,26160],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26162,26163],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26165,26166],{},[3760,26167],{"alt":135,"src":26168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1760,26170,26171],{"start":210},[1763,26172,26173],{},"动作价值函数：",[19,26175,26176],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26178,26179],{},[3760,26180],{"alt":135,"src":26181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1760,26183,26184],{"start":254},[1763,26185,26186],{},"最优动作价值函数：",[19,26188,26189],{},"这个函数是对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,26191,26192],{},[3760,26193],{"alt":135,"src":26194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1760,26196,26197],{"start":262},[1763,26198,26199],{},"状态价值函数:",[19,26201,26202],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26204,26205],{},"它衡量的是“一个具体动作”的长期价值",[19,26207,26208],{},[3760,26209],{"alt":135,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26212,26213],{},"几个价值函数之间的比较：",[19,26215,26216],{},[3760,26217],{"alt":135,"src":26218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2348,26220,26221],{},"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":135,"searchDepth":210,"depth":210,"links":26223},[26224,26225,26226,26231,26232,26237,26238,26239],{"id":25660,"depth":210,"text":25661},{"id":25727,"depth":210,"text":25728},{"id":25764,"depth":210,"text":25765,"children":26227},[26228,26229,26230],{"id":25768,"depth":254,"text":25769},{"id":25783,"depth":254,"text":25784},{"id":25806,"depth":254,"text":25807},{"id":25914,"depth":210,"text":25915},{"id":25933,"depth":210,"text":25934,"children":26233},[26234,26235,26236],{"id":25948,"depth":254,"text":25949},{"id":25966,"depth":254,"text":25967},{"id":25984,"depth":254,"text":25985},{"id":25993,"depth":210,"text":25994},{"id":26064,"depth":210,"text":26065},{"id":26132,"depth":210,"text":26133},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25652,"description":135},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26246,"title":26247,"body":26248,"description":26255,"extension":2385,"meta":26266,"navigation":842,"path":26267,"seo":26268,"stem":26269,"__hash__":26270},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26249,"toc":26264},[26250,26253,26256,26261],[10,26251,26247],{"id":26252},"_2马尔可夫决策过程",[19,26254,26255],{},"这是强化学习的基本框架",[19,26257,26258],{},[3760,26259],{"alt":135,"src":26260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26262,26263],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":135,"searchDepth":210,"depth":210,"links":26265},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26247,"description":26255},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26272,"title":26273,"body":26274,"description":135,"extension":2385,"meta":26390,"navigation":842,"path":26391,"seo":26392,"stem":26393,"__hash__":26394},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26275,"toc":26385},[26276,26279,26283,26286,26291,26296,26299,26304,26307,26312,26315,26319,26324,26327,26332,26337,26342,26345,26349,26354,26357,26362,26367,26372,26377,26380],[10,26277,26273],{"id":26278},"_3动作价值函数",[14,26280,26282],{"id":26281},"_31dqn","3.1.DQN",[19,26284,26285],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26287,26288],{},[3760,26289],{"alt":135,"src":26290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26292,26293],{},[3760,26294],{"alt":135,"src":26295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26297,26298],{},"DQN算法的描述：",[19,26300,26301],{},[3760,26302],{"alt":135,"src":26303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26305,26306],{},"这里的Dense指的是全连接层",[19,26308,26309],{},[3760,26310],{"alt":135,"src":26311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26313,26314],{},"当前观测的状态为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,26316,26318],{"id":26317},"_32dqn的举例","3.2.DQN的举例",[19,26320,26321],{},[3760,26322],{"alt":135,"src":26323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26325,26326],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26328,26329],{},[3760,26330],{"alt":135,"src":26331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26333,26334],{},[3760,26335],{"alt":135,"src":26336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26338,26339],{},[3760,26340],{"alt":135,"src":26341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26343,26344],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26346,26348],{"id":26347},"_33td算法","3.3.TD算法",[19,26350,26351],{},[3760,26352],{"alt":135,"src":26353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26355,26356],{},"强化学习TD算法公式的粗略解释：",[19,26358,26359],{},[3760,26360],{"alt":135,"src":26361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26363,26364],{},[3760,26365],{"alt":135,"src":26366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26368,26369],{},[3760,26370],{"alt":135,"src":26371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26373,26374],{},[3760,26375],{"alt":135,"src":26376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26378,26379],{},"TD算法总结：",[19,26381,26382],{},[3760,26383],{"alt":135,"src":26384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":135,"searchDepth":210,"depth":210,"links":26386},[26387,26388,26389],{"id":26281,"depth":210,"text":26282},{"id":26317,"depth":210,"text":26318},{"id":26347,"depth":210,"text":26348},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26273,"description":135},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26396,"title":26397,"body":26398,"description":135,"extension":2385,"meta":26631,"navigation":842,"path":26632,"seo":26633,"stem":26634,"__hash__":26635},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26399,"toc":26627},[26400,26403,26407,26410,26413,26418,26423,26426,26431,26436,26439,26444,26447,26452,26455,26460,26463,26468,26471,26476,26481,26484,26489,26492,26495,26500,26503,26508,26513,26517,26520,26523,26528,26533,26536,26541,26546,26549,26554,26557,26560,26565,26568,26573,26576,26581,26586,26589,26594,26599,26602,26607,26610,26615,26618],[10,26401,26397],{"id":26402},"_4策略学习",[14,26404,26406],{"id":26405},"_41概念描述","4.1.概念描述",[19,26408,26409],{},"用神经网络（策略网络）近似策略函数",[19,26411,26412],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26414,26415],{},[3760,26416],{"alt":135,"src":26417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26419,26420],{},[3760,26421],{"alt":135,"src":26422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26424,26425],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26427,26428],{},[3760,26429],{"alt":135,"src":26430},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26432,26433],{},[3760,26434],{"alt":135,"src":26435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26437,26438],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26440,26441],{},[3760,26442],{"alt":135,"src":26443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26445,26446],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26448,26449],{},[3760,26450],{"alt":135,"src":26451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26453,26454],{},"改进theta要用到策略梯度算法",[19,26456,26457],{},[3760,26458],{"alt":135,"src":26459},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26461,26462],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26464,26465],{},[3760,26466],{"alt":135,"src":26467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26469,26470],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26472,26473],{},[3760,26474],{"alt":135,"src":26475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26477,26478],{},[3760,26479],{"alt":135,"src":26480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26482,26483],{},"梯度公式总结：",[19,26485,26486],{},[3760,26487],{"alt":135,"src":26488},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26490,26491],{},"两个公式的分别应用场景：",[19,26493,26494],{},"对于离散的动作：",[19,26496,26497],{},[3760,26498],{"alt":135,"src":26499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26501,26502],{},"对于连续的动作：",[19,26504,26505],{},[3760,26506],{"alt":135,"src":26507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26509,26510],{},[3760,26511],{"alt":135,"src":26512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26514,26516],{"id":26515},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26518,26519],{},"使用蒙特卡洛来近似计算策略梯度",[19,26521,26522],{},"蒙特卡洛法的解释如下：",[19,26524,26525],{},[3760,26526],{"alt":135,"src":26527},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26529,26530],{},[3760,26531],{"alt":135,"src":26532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26534,26535],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1760,26537,26538],{},[1763,26539,26540],{},"方法一：reinforce算法",[19,26542,26543],{},[3760,26544],{"alt":135,"src":26545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26547,26548],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1760,26550,26551],{"start":210},[1763,26552,26553],{},"方法二：actor-critic算法",[19,26555,26556],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26558,26559],{},"两个网络的构建：",[19,26561,26562],{},[3760,26563],{"alt":135,"src":26564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26566,26567],{},"actor网路：",[19,26569,26570],{},[3760,26571],{"alt":135,"src":26572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26574,26575],{},"critic网络",[19,26577,26578],{},[3760,26579],{"alt":135,"src":26580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1760,26582,26583],{"start":254},[1763,26584,26585],{},"网络的训练",[19,26587,26588],{},"网络描述",[19,26590,26591],{},[3760,26592],{"alt":135,"src":26593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26595,26596],{},[3760,26597],{"alt":135,"src":26598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26600,26601],{},"TD算法更新梯度：",[19,26603,26604],{},[3760,26605],{"alt":135,"src":26606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26608,26609],{},"策略网络更新梯度：",[19,26611,26612],{},[3760,26613],{"alt":135,"src":26614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26616,26617],{},"训练整个流程的具体描述：",[19,26619,26620,26623,26624],{},[3760,26621],{"alt":135,"src":26622},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3760,26625],{"alt":135,"src":26626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":135,"searchDepth":210,"depth":210,"links":26628},[26629,26630],{"id":26405,"depth":210,"text":26406},{"id":26515,"depth":210,"text":26516},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26397,"description":135},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26637,"title":26638,"body":26639,"description":26646,"extension":2385,"meta":26696,"navigation":842,"path":26697,"seo":26698,"stem":26699,"__hash__":26700},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26640,"toc":26692},[26641,26644,26647,26651,26654,26659,26663,26666,26671,26674,26679,26684,26687],[10,26642,26638],{"id":26643},"_5alphago算法",[19,26645,26646],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26648,26650],{"id":26649},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26652,26653],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26655,26656],{},[3760,26657],{"alt":135,"src":26658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26660,26662],{"id":26661},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26664,26665],{},"采用强化学习的方式训练策略网络",[19,26667,26668],{},[3760,26669],{"alt":135,"src":26670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26672,26673],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26675,26676],{},[3760,26677],{"alt":135,"src":26678},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26680,26681],{},[3760,26682],{"alt":135,"src":26683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26685,26686],{},"强化学习训练策略网络的总结：",[19,26688,26689],{},[3760,26690],{"alt":135,"src":26691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":135,"searchDepth":210,"depth":210,"links":26693},[26694,26695],{"id":26649,"depth":210,"text":26650},{"id":26661,"depth":210,"text":26662},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26638,"description":26646},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26702,"title":26703,"body":26704,"description":26711,"extension":2385,"meta":26714,"navigation":842,"path":26715,"seo":26716,"stem":26717,"__hash__":26718},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26705,"toc":26712},[26706,26709],[10,26707,26703],{"id":26708},"_6价值网络",[19,26710,26711],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":135,"searchDepth":210,"depth":210,"links":26713},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26703,"description":26711},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26720,"title":26721,"body":26722,"description":26726,"extension":2385,"meta":26727,"navigation":842,"path":26728,"seo":26729,"stem":26730,"__hash__":26731},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26723,"toc":26724},[],{"title":135,"searchDepth":210,"depth":210,"links":26725},[],"记录自己的强化学习笔记。",{"category":25645},"\u002Fwiki\u002F2025-12-04",{"title":26721,"description":26726},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26733,"title":26734,"body":26735,"description":2384,"extension":2385,"meta":26774,"navigation":842,"path":26775,"seo":26776,"stem":26777,"__hash__":26778},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26736,"toc":26772},[26737,26740,26743,26749,26752,26758,26761,26766,26769],[10,26738,26734],{"id":26739},"_1-项目概览与官方资源",[19,26741,26742],{},"官方文档：",[19,26744,26745],{},[2680,26746,26747],{"href":26747,"rel":26748},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26128],[19,26750,26751],{},"官方代码仓库：",[19,26753,26754],{},[2680,26755,26756],{"href":26756,"rel":26757},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26128],[19,26759,26760],{},"复现大体流程：",[19,26762,26763],{},[3760,26764],{"alt":135,"src":26765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26767,26768],{},"本教程的目标是打通这条链路：",[19,26770,26771],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":135,"searchDepth":210,"depth":210,"links":26773},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26734,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26780,"title":26781,"body":26782,"description":2384,"extension":2385,"meta":26897,"navigation":842,"path":26898,"seo":26899,"stem":26900,"__hash__":26901},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26783,"toc":26892},[26784,26787,26791,26794,26801,26805,26808,26817,26827,26831,26861,26864,26889],[10,26785,26781],{"id":26786},"_2-环境准备与设备连接",[14,26788,26790],{"id":26789},"_21-系统与环境","2.1 系统与环境",[19,26792,26793],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26795,26796,26797,26800],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[50,26798,26799],{},"lerobot"," 依赖。",[14,26802,26804],{"id":26803},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26806,26807],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[130,26809,26811],{"className":1830,"code":26810,"language":1832,"meta":135,"style":135},"lerobot-find-out\n",[50,26812,26813],{"__ignoreMap":135},[139,26814,26815],{"class":141,"line":142},[139,26816,26810],{"class":781},[19,26818,26819,26820,2655,26823,26826],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[50,26821,26822],{},"\u002Fdev\u002FttyACM0",[50,26824,26825],{},"\u002Fdev\u002FttyACM1","）。",[14,26828,26830],{"id":26829},"_23-串口授权","2.3 串口授权",[130,26832,26834],{"className":1830,"code":26833,"language":1832,"meta":135,"style":135},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[50,26835,26836,26850],{"__ignoreMap":135},[139,26837,26838,26841,26844,26847],{"class":141,"line":142},[139,26839,26840],{"class":781},"sudo",[139,26842,26843],{"class":160}," chmod",[139,26845,26846],{"class":153}," 666",[139,26848,26849],{"class":160}," \u002Fdev\u002FttyACM0\n",[139,26851,26852,26854,26856,26858],{"class":141,"line":210},[139,26853,26840],{"class":781},[139,26855,26843],{"class":160},[139,26857,26846],{"class":153},[139,26859,26860],{"class":160}," \u002Fdev\u002FttyACM1\n",[19,26862,26863],{},"说明：",[3437,26865,26866,26871,26877,26886],{},[1763,26867,26868,26870],{},[50,26869,26840],{},"：以 root 权限执行命令。",[1763,26872,26873,26876],{},[50,26874,26875],{},"chmod","：修改设备节点权限。",[1763,26878,26879,1122,26882,26885],{},[50,26880,26881],{},"666",[50,26883,26884],{},"rw-rw-rw-","，所有用户可读写。",[1763,26887,26888],{},"串口号必须替换为你机器上的真实端口。",[2348,26890,26891],{},"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":135,"searchDepth":210,"depth":210,"links":26893},[26894,26895,26896],{"id":26789,"depth":210,"text":26790},{"id":26803,"depth":210,"text":26804},{"id":26829,"depth":210,"text":26830},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26781,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26903,"title":26904,"body":26905,"description":2384,"extension":2385,"meta":27066,"navigation":842,"path":27067,"seo":27068,"stem":27069,"__hash__":27070},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26906,"toc":27062},[26907,26911,26915,26921,26924,26981,26984,26988,26991,27059],[10,26908,26910],{"id":26909},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26912,26914],{"id":26913},"_31-配置电机-id","3.1 配置电机 ID",[19,26916,26917,26918,26920],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[50,26919,410],{},"，需要改成机械臂链路里不冲突的编号。",[19,26922,26923],{},"方式一：用 LeRobot 命令逐步写入。",[130,26925,26927],{"className":1830,"code":26926,"language":1832,"meta":135,"style":135},"# 主臂舵机配置 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",[50,26928,26929,26934,26942,26949,26954,26958,26963,26969,26976],{"__ignoreMap":135},[139,26930,26931],{"class":141,"line":142},[139,26932,26933],{"class":2512},"# 主臂舵机配置 ID\n",[139,26935,26936,26939],{"class":141,"line":210},[139,26937,26938],{"class":781},"lerobot-setup-motors",[139,26940,26941],{"class":153}," \\\n",[139,26943,26944,26947],{"class":141,"line":254},[139,26945,26946],{"class":153},"  --teleop.type=so101_leader",[139,26948,26941],{"class":153},[139,26950,26951],{"class":141,"line":262},[139,26952,26953],{"class":153},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[139,26955,26956],{"class":141,"line":313},[139,26957,843],{"emptyLinePlaceholder":842},[139,26959,26960],{"class":141,"line":462},[139,26961,26962],{"class":2512},"# 从臂舵机配置 ID\n",[139,26964,26965,26967],{"class":141,"line":474},[139,26966,26938],{"class":781},[139,26968,26941],{"class":153},[139,26970,26971,26974],{"class":141,"line":484},[139,26972,26973],{"class":153},"  --robot.type=so101_follower",[139,26975,26941],{"class":153},[139,26977,26978],{"class":141,"line":989},[139,26979,26980],{"class":153},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26982,26983],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26985,26987],{"id":26986},"_32-机械臂校准","3.2 机械臂校准",[19,26989,26990],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[130,26992,26994],{"className":1830,"code":26993,"language":1832,"meta":135,"style":135},"# 主臂校准\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",[50,26995,26996,27001,27008,27014,27021,27026,27030,27035,27041,27047,27054],{"__ignoreMap":135},[139,26997,26998],{"class":141,"line":142},[139,26999,27000],{"class":2512},"# 主臂校准\n",[139,27002,27003,27006],{"class":141,"line":210},[139,27004,27005],{"class":781},"lerobot-calibrate",[139,27007,26941],{"class":153},[139,27009,27010,27012],{"class":141,"line":254},[139,27011,26946],{"class":153},[139,27013,26941],{"class":153},[139,27015,27016,27019],{"class":141,"line":262},[139,27017,27018],{"class":153},"  --teleop.port=\u002Fdev\u002FttyACM0",[139,27020,26941],{"class":153},[139,27022,27023],{"class":141,"line":313},[139,27024,27025],{"class":153},"  --teleop.id=my_awesome_leader_arm\n",[139,27027,27028],{"class":141,"line":462},[139,27029,843],{"emptyLinePlaceholder":842},[139,27031,27032],{"class":141,"line":474},[139,27033,27034],{"class":2512},"# 从臂校准\n",[139,27036,27037,27039],{"class":141,"line":484},[139,27038,27005],{"class":781},[139,27040,26941],{"class":153},[139,27042,27043,27045],{"class":141,"line":989},[139,27044,26973],{"class":153},[139,27046,26941],{"class":153},[139,27048,27049,27052],{"class":141,"line":994},[139,27050,27051],{"class":153},"  --robot.port=\u002Fdev\u002FttyACM1",[139,27053,26941],{"class":153},[139,27055,27056],{"class":141,"line":999},[139,27057,27058],{"class":153},"  --robot.id=my_awesome_follower_arm\n",[2348,27060,27061],{},"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":135,"searchDepth":210,"depth":210,"links":27063},[27064,27065],{"id":26913,"depth":210,"text":26914},{"id":26986,"depth":210,"text":26987},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26904,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27072,"title":27073,"body":27074,"description":2384,"extension":2385,"meta":27265,"navigation":842,"path":27266,"seo":27267,"stem":27268,"__hash__":27269},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27075,"toc":27261},[27076,27079,27083,27130,27134,27147,27210,27213,27258],[10,27077,27073],{"id":27078},"_4-遥操与相机接入",[14,27080,27082],{"id":27081},"_41-不带相机遥操","4.1 不带相机遥操",[130,27084,27086],{"className":1830,"code":27085,"language":1832,"meta":135,"style":135},"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",[50,27087,27088,27095,27101,27107,27114,27120,27126],{"__ignoreMap":135},[139,27089,27090,27093],{"class":141,"line":142},[139,27091,27092],{"class":781},"lerobot-teleoperate",[139,27094,26941],{"class":153},[139,27096,27097,27099],{"class":141,"line":210},[139,27098,26973],{"class":153},[139,27100,26941],{"class":153},[139,27102,27103,27105],{"class":141,"line":254},[139,27104,27051],{"class":153},[139,27106,26941],{"class":153},[139,27108,27109,27112],{"class":141,"line":262},[139,27110,27111],{"class":153},"  --robot.id=my_awesome_follower_arm",[139,27113,26941],{"class":153},[139,27115,27116,27118],{"class":141,"line":313},[139,27117,26946],{"class":153},[139,27119,26941],{"class":153},[139,27121,27122,27124],{"class":141,"line":462},[139,27123,27018],{"class":153},[139,27125,26941],{"class":153},[139,27127,27128],{"class":141,"line":474},[139,27129,27025],{"class":153},[14,27131,27133],{"id":27132},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[130,27135,27137],{"className":1830,"code":27136,"language":1832,"meta":135,"style":135},"lerobot-find-cameras opencv\n",[50,27138,27139],{"__ignoreMap":135},[139,27140,27141,27144],{"class":141,"line":142},[139,27142,27143],{"class":781},"lerobot-find-cameras",[139,27145,27146],{"class":160}," opencv\n",[130,27148,27150],{"className":1830,"code":27149,"language":1832,"meta":135,"style":135},"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",[50,27151,27152,27158,27164,27170,27176,27186,27192,27198,27205],{"__ignoreMap":135},[139,27153,27154,27156],{"class":141,"line":142},[139,27155,27092],{"class":781},[139,27157,26941],{"class":153},[139,27159,27160,27162],{"class":141,"line":210},[139,27161,26973],{"class":153},[139,27163,26941],{"class":153},[139,27165,27166,27168],{"class":141,"line":254},[139,27167,27051],{"class":153},[139,27169,26941],{"class":153},[139,27171,27172,27174],{"class":141,"line":262},[139,27173,27111],{"class":153},[139,27175,26941],{"class":153},[139,27177,27178,27181,27184],{"class":141,"line":313},[139,27179,27180],{"class":153},"  --robot.cameras=",[139,27182,27183],{"class":160},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[139,27185,26941],{"class":153},[139,27187,27188,27190],{"class":141,"line":462},[139,27189,26946],{"class":153},[139,27191,26941],{"class":153},[139,27193,27194,27196],{"class":141,"line":474},[139,27195,27018],{"class":153},[139,27197,26941],{"class":153},[139,27199,27200,27203],{"class":141,"line":484},[139,27201,27202],{"class":153},"  --teleop.id=my_awesome_leader_arm",[139,27204,26941],{"class":153},[139,27206,27207],{"class":141,"line":989},[139,27208,27209],{"class":153},"  --display_data=true\n",[19,27211,27212],{},"相机参数说明：",[3437,27214,27215,27221,27227,27236,27246,27252],{},[1763,27216,27217,27220],{},[50,27218,27219],{},"front","：相机名称。",[1763,27222,27223,27226],{},[50,27224,27225],{},"type: opencv","：相机驱动类型。",[1763,27228,27229,27232,27233,26826],{},[50,27230,27231],{},"index_or_path","：设备编号或设备路径（如 ",[50,27234,27235],{},"\u002Fdev\u002Fvideo4",[1763,27237,27238,27241,27242,27245],{},[50,27239,27240],{},"width"," \u002F ",[50,27243,27244],{},"height","：图像分辨率。",[1763,27247,27248,27251],{},[50,27249,27250],{},"fps","：采样帧率。",[1763,27253,27254,27257],{},[50,27255,27256],{},"--display_data=true","：启用实时可视化。",[2348,27259,27260],{},"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":135,"searchDepth":210,"depth":210,"links":27262},[27263,27264],{"id":27081,"depth":210,"text":27082},{"id":27132,"depth":210,"text":27133},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27073,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27271,"title":27272,"body":27273,"description":2384,"extension":2385,"meta":27445,"navigation":842,"path":27446,"seo":27447,"stem":27448,"__hash__":27449},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27274,"toc":27440},[27275,27279,27283,27288,27293,27296,27338,27344,27348,27397,27402,27406,27409,27417,27422,27427,27432,27437],[10,27276,27278],{"id":27277},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27280,27282],{"id":27281},"_51-生成访问令牌","5.1 生成访问令牌",[19,27284,27285],{},[3760,27286],{"alt":135,"src":27287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27289,27290],{},[3760,27291],{"alt":135,"src":27292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27294,27295],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[130,27297,27299],{"className":1830,"code":27298,"language":1832,"meta":135,"style":135},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[50,27300,27301,27314],{"__ignoreMap":135},[139,27302,27303,27306,27309,27311],{"class":141,"line":142},[139,27304,27305],{"class":149},"export",[139,27307,27308],{"class":145}," HF_TOKEN",[139,27310,150],{"class":149},[139,27312,27313],{"class":160},"\"your_huggingface_token\"\n",[139,27315,27316,27319,27322,27325,27328,27330,27333,27335],{"class":141,"line":210},[139,27317,27318],{"class":781},"hf",[139,27320,27321],{"class":160}," auth",[139,27323,27324],{"class":160}," login",[139,27326,27327],{"class":153}," --token",[139,27329,11998],{"class":160},[139,27331,27332],{"class":145},"$HF_TOKEN",[139,27334,634],{"class":160},[139,27336,27337],{"class":153}," --add-to-git-credential\n",[19,27339,27340,27343],{},[50,27341,27342],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27345,27347],{"id":27346},"_52-验证登录","5.2 验证登录",[130,27349,27351],{"className":1830,"code":27350,"language":1832,"meta":135,"style":135},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[50,27352,27353,27384],{"__ignoreMap":135},[139,27354,27355,27358,27360,27363,27365,27367,27370,27373,27376,27379,27382],{"class":141,"line":142},[139,27356,27357],{"class":145},"HF_USER",[139,27359,150],{"class":149},[139,27361,27362],{"class":145},"$(",[139,27364,27318],{"class":781},[139,27366,27321],{"class":160},[139,27368,27369],{"class":160}," whoami",[139,27371,27372],{"class":149}," |",[139,27374,27375],{"class":781}," head",[139,27377,27378],{"class":153}," -n",[139,27380,27381],{"class":153}," 1",[139,27383,164],{"class":145},[139,27385,27386,27389,27391,27394],{"class":141,"line":210},[139,27387,27388],{"class":153},"echo",[139,27390,11998],{"class":160},[139,27392,27393],{"class":145},"$HF_USER",[139,27395,27396],{"class":160},"\"\n",[19,27398,27399],{},[3760,27400],{"alt":135,"src":27401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27403,27405],{"id":27404},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27407,27408],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3437,27410,27411,27414],{},[1763,27412,27413],{},"Dataset Repo（用于上传演示数据）",[1763,27415,27416],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27418,27419],{},[3760,27420],{"alt":135,"src":27421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27423,27424],{},[3760,27425],{"alt":135,"src":27426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27428,27429],{},[3760,27430],{"alt":135,"src":27431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27433,27434],{},[3760,27435],{"alt":135,"src":27436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2348,27438,27439],{},"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":135,"searchDepth":210,"depth":210,"links":27441},[27442,27443,27444],{"id":27281,"depth":210,"text":27282},{"id":27346,"depth":210,"text":27347},{"id":27404,"depth":210,"text":27405},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27272,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27451,"title":27452,"body":27453,"description":2384,"extension":2385,"meta":27650,"navigation":842,"path":27651,"seo":27652,"stem":27653,"__hash__":27654},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27454,"toc":27645},[27455,27459,27463,27559,27567,27572,27576,27592,27595,27599,27642],[10,27456,27458],{"id":27457},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27460,27462],{"id":27461},"_61-录制示教数据","6.1 录制示教数据",[130,27464,27466],{"className":1830,"code":27465,"language":1832,"meta":135,"style":135},"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",[50,27467,27468,27475,27481,27487,27493,27502,27508,27514,27520,27527,27537,27544,27554],{"__ignoreMap":135},[139,27469,27470,27473],{"class":141,"line":142},[139,27471,27472],{"class":781},"lerobot-record",[139,27474,26941],{"class":153},[139,27476,27477,27479],{"class":141,"line":210},[139,27478,26973],{"class":153},[139,27480,26941],{"class":153},[139,27482,27483,27485],{"class":141,"line":254},[139,27484,27051],{"class":153},[139,27486,26941],{"class":153},[139,27488,27489,27491],{"class":141,"line":262},[139,27490,27111],{"class":153},[139,27492,26941],{"class":153},[139,27494,27495,27497,27500],{"class":141,"line":313},[139,27496,27180],{"class":153},[139,27498,27499],{"class":160},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[139,27501,26941],{"class":153},[139,27503,27504,27506],{"class":141,"line":462},[139,27505,26946],{"class":153},[139,27507,26941],{"class":153},[139,27509,27510,27512],{"class":141,"line":474},[139,27511,27018],{"class":153},[139,27513,26941],{"class":153},[139,27515,27516,27518],{"class":141,"line":484},[139,27517,27202],{"class":153},[139,27519,26941],{"class":153},[139,27521,27522,27525],{"class":141,"line":989},[139,27523,27524],{"class":153},"  --display_data=true",[139,27526,26941],{"class":153},[139,27528,27529,27532,27535],{"class":141,"line":994},[139,27530,27531],{"class":153},"  --dataset.repo_id=",[139,27533,27534],{"class":160},"\"Embodied-AI-6\u002Fso101_test\"",[139,27536,26941],{"class":153},[139,27538,27539,27542],{"class":141,"line":999},[139,27540,27541],{"class":153},"  --dataset.num_episodes=10",[139,27543,26941],{"class":153},[139,27545,27546,27549,27552],{"class":141,"line":1006},[139,27547,27548],{"class":153},"  --dataset.single_task=",[139,27550,27551],{"class":160},"\"Grab the green cube\"",[139,27553,26941],{"class":153},[139,27555,27556],{"class":141,"line":1027},[139,27557,27558],{"class":153},"  --resume=true\n",[3437,27560,27561],{},[1763,27562,27563,27566],{},[50,27564,27565],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27568,27569],{},[3760,27570],{"alt":135,"src":27571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27573,27575],{"id":27574},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[130,27577,27579],{"className":1830,"code":27578,"language":1832,"meta":135,"style":135},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[50,27580,27581],{"__ignoreMap":135},[139,27582,27583,27586,27589],{"class":141,"line":142},[139,27584,27585],{"class":781},"rm",[139,27587,27588],{"class":153}," -rf",[139,27590,27591],{"class":160}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27593,27594],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27596,27598],{"id":27597},"_63-回放指定-episode","6.3 回放指定 episode",[130,27600,27602],{"className":1830,"code":27601,"language":1832,"meta":135,"style":135},"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",[50,27603,27604,27611,27617,27623,27629,27637],{"__ignoreMap":135},[139,27605,27606,27609],{"class":141,"line":142},[139,27607,27608],{"class":781},"lerobot-replay",[139,27610,26941],{"class":153},[139,27612,27613,27615],{"class":141,"line":210},[139,27614,26973],{"class":153},[139,27616,26941],{"class":153},[139,27618,27619,27621],{"class":141,"line":254},[139,27620,27051],{"class":153},[139,27622,26941],{"class":153},[139,27624,27625,27627],{"class":141,"line":262},[139,27626,27111],{"class":153},[139,27628,26941],{"class":153},[139,27630,27631,27633,27635],{"class":141,"line":313},[139,27632,27531],{"class":153},[139,27634,27534],{"class":160},[139,27636,26941],{"class":153},[139,27638,27639],{"class":141,"line":462},[139,27640,27641],{"class":153},"  --dataset.episode=0\n",[2348,27643,27644],{},"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":135,"searchDepth":210,"depth":210,"links":27646},[27647,27648,27649],{"id":27461,"depth":210,"text":27462},{"id":27574,"depth":210,"text":27575},{"id":27597,"depth":210,"text":27598},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27452,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27656,"title":27657,"body":27658,"description":2384,"extension":2385,"meta":27786,"navigation":842,"path":27787,"seo":27788,"stem":27789,"__hash__":27790},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27659,"toc":27784},[27660,27664,27727,27730,27777,27782],[10,27661,27663],{"id":27662},"_7-act-模型训练","7. ACT 模型训练",[130,27665,27667],{"className":1830,"code":27666,"language":1832,"meta":135,"style":135},"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",[50,27668,27669,27676,27684,27691,27698,27705,27712,27719],{"__ignoreMap":135},[139,27670,27671,27674],{"class":141,"line":142},[139,27672,27673],{"class":781},"lerobot-train",[139,27675,26941],{"class":153},[139,27677,27678,27680,27682],{"class":141,"line":210},[139,27679,27531],{"class":153},[139,27681,27534],{"class":160},[139,27683,26941],{"class":153},[139,27685,27686,27689],{"class":141,"line":254},[139,27687,27688],{"class":153},"  --policy.type=act",[139,27690,26941],{"class":153},[139,27692,27693,27696],{"class":141,"line":262},[139,27694,27695],{"class":153},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[139,27697,26941],{"class":153},[139,27699,27700,27703],{"class":141,"line":313},[139,27701,27702],{"class":153},"  --job_name=act_so101_test",[139,27704,26941],{"class":153},[139,27706,27707,27710],{"class":141,"line":462},[139,27708,27709],{"class":153},"  --policy.device=cuda",[139,27711,26941],{"class":153},[139,27713,27714,27717],{"class":141,"line":474},[139,27715,27716],{"class":153},"  --wandb.enable=false",[139,27718,26941],{"class":153},[139,27720,27721,27724],{"class":141,"line":484},[139,27722,27723],{"class":153},"  --policy.repo_id=",[139,27725,27726],{"class":160},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27728,27729],{},"参数说明：",[3437,27731,27732,27738,27744,27750,27756,27765,27771],{},[1763,27733,27734,27737],{},[50,27735,27736],{},"--dataset.repo_id","：训练数据集仓库。",[1763,27739,27740,27743],{},[50,27741,27742],{},"--policy.type=act","：策略模型类型为 ACT。",[1763,27745,27746,27749],{},[50,27747,27748],{},"--output_dir","：本地训练输出目录。",[1763,27751,27752,27755],{},[50,27753,27754],{},"--job_name","：训练任务名称。",[1763,27757,27758,27761,27762,26826],{},[50,27759,27760],{},"--policy.device","：训练设备（如 ",[50,27763,27764],{},"cuda",[1763,27766,27767,27770],{},[50,27768,27769],{},"--wandb.enable","：是否启用 WandB 可视化。",[1763,27772,27773,27776],{},[50,27774,27775],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27778,27779],{},[3760,27780],{"alt":135,"src":27781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2348,27783,27644],{},{"title":135,"searchDepth":210,"depth":210,"links":27785},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27657,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27792,"title":27793,"body":27794,"description":2384,"extension":2385,"meta":27881,"navigation":842,"path":27882,"seo":27883,"stem":27884,"__hash__":27885},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27795,"toc":27879},[27796,27799,27802,27869,27877],[10,27797,27793],{"id":27798},"_8-策略部署与自动采集",[19,27800,27801],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[130,27803,27805],{"className":1830,"code":27804,"language":1832,"meta":135,"style":135},"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",[50,27806,27807,27813,27819,27825,27833,27839,27846,27854,27862],{"__ignoreMap":135},[139,27808,27809,27811],{"class":141,"line":142},[139,27810,27472],{"class":781},[139,27812,26941],{"class":153},[139,27814,27815,27817],{"class":141,"line":210},[139,27816,26973],{"class":153},[139,27818,26941],{"class":153},[139,27820,27821,27823],{"class":141,"line":254},[139,27822,27051],{"class":153},[139,27824,26941],{"class":153},[139,27826,27827,27829,27831],{"class":141,"line":262},[139,27828,27180],{"class":153},[139,27830,27499],{"class":160},[139,27832,26941],{"class":153},[139,27834,27835,27837],{"class":141,"line":313},[139,27836,27111],{"class":153},[139,27838,26941],{"class":153},[139,27840,27841,27844],{"class":141,"line":462},[139,27842,27843],{"class":153},"  --display_data=false",[139,27845,26941],{"class":153},[139,27847,27848,27850,27852],{"class":141,"line":474},[139,27849,27531],{"class":153},[139,27851,27534],{"class":160},[139,27853,26941],{"class":153},[139,27855,27856,27858,27860],{"class":141,"line":484},[139,27857,27548],{"class":153},[139,27859,27551],{"class":160},[139,27861,26941],{"class":153},[139,27863,27864,27867],{"class":141,"line":989},[139,27865,27866],{"class":153},"  --policy.path=",[139,27868,27726],{"class":160},[3437,27870,27871],{},[1763,27872,27873,27876],{},[50,27874,27875],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2348,27878,27644],{},{"title":135,"searchDepth":210,"depth":210,"links":27880},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27793,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27887,"title":27888,"body":27889,"description":2384,"extension":2385,"meta":27918,"navigation":842,"path":27919,"seo":27920,"stem":27921,"__hash__":27922},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27890,"toc":27916},[27891,27895,27898,27904,27907,27913],[10,27892,27894],{"id":27893},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27896,27897],{},"项目地址：",[19,27899,27900],{},[2680,27901,27902],{"href":27902,"rel":27903},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26128],[19,27905,27906],{},"参考教程：",[19,27908,27909],{},[2680,27910,27911],{"href":27911,"rel":27912},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26128],[19,27914,27915],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":135,"searchDepth":210,"depth":210,"links":27917},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27888,"description":2384},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27924,"title":27925,"body":27926,"description":27930,"extension":2385,"meta":27931,"navigation":842,"path":27932,"seo":27933,"stem":27934,"__hash__":27935},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27927,"toc":27928},[],{"title":135,"searchDepth":210,"depth":210,"links":27929},[],"act复现",{"category":25645},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27925,"description":27930},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27937,"title":27938,"body":27939,"description":135,"extension":2385,"meta":28240,"navigation":842,"path":28241,"seo":28242,"stem":28243,"__hash__":28244},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27940,"toc":28232},[27941,27944,27948,27958,27965,27972,27975,27982,27985,27988,27992,28004,28008,28054,28057,28060,28063,28066,28069,28073,28111,28117,28121,28174,28179,28182,28185,28190,28193,28198,28201,28204,28208,28211,28214,28218],[10,27942,27938],{"id":27943},"_1简介",[1217,27945,27947],{"id":27946},"_11什么是-docker","1.1什么是 Docker？",[19,27949,27950,27951,27954,27955],{},"Docker 是一个开源的 ",[1674,27952,27953],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1674,27956,27957],{},"一次构建，到处运行。",[19,27959,27960,27961,27964],{},"“ ",[1674,27962,27963],{},"一次构建，到处运行"," ”也就是说：",[1760,27966,27967],{},[1763,27968,27969],{},[1674,27970,27971],{},"之前：",[19,27973,27974],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1760,27976,27977],{},[1763,27978,27979],{},[1674,27980,27981],{},"使用docker后：",[19,27983,27984],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27986,27987],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1217,27989,27991],{"id":27990},"_12它是怎么工作的","1.2.它是怎么工作的？",[3437,27993,27994,27997],{},[1763,27995,27996],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1763,27998,27999,28000,28003],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1674,28001,28002],{},"无论在哪运行都一样稳定"," 。",[1217,28005,28007],{"id":28006},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[26,28009,28010,28020],{},[29,28011,28012],{},[32,28013,28014,28017],{},[35,28015,28016],{"align":26003},"概念",[35,28018,28019],{"align":26003},"解释",[42,28021,28022,28030,28038,28046],{},[32,28023,28024,28027],{},[47,28025,28026],{"align":26003},"镜像",[47,28028,28029],{"align":26003},"Image，运行容器的模板，像是一个应用快照",[32,28031,28032,28035],{},[47,28033,28034],{"align":26003},"容器",[47,28036,28037],{"align":26003},"Container，运行中的镜像实例，有自己的文件系统、网络等",[32,28039,28040,28043],{},[47,28041,28042],{"align":26003},"Dockerfile",[47,28044,28045],{"align":26003},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[32,28047,28048,28051],{},[47,28049,28050],{"align":26003},"仓库",[47,28052,28053],{"align":26003},"Registry，存放镜像的地方，比如 Docker Hub",[19,28055,28056],{},"抽象化理解:",[19,28058,28059],{},"Docker镜像≈C++类",[19,28061,28062],{},"Docker容器≈C++类实例(即对象)",[19,28064,28065],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28067,28068],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1217,28070,28072],{"id":28071},"_14类比理解","1.4.类比理解",[26,28074,28075,28085],{},[29,28076,28077],{},[32,28078,28079,28082],{},[35,28080,28081],{"align":26003},"传统部署",[35,28083,28084],{"align":26003},"Docker部署",[42,28086,28087,28095,28103],{},[32,28088,28089,28092],{},[47,28090,28091],{"align":26003},"手动安装依赖、调试版本不一致问题",[47,28093,28094],{"align":26003},"一次打包环境和代码",[32,28096,28097,28100],{},[47,28098,28099],{"align":26003},"程序“裸奔”跑在系统上",[47,28101,28102],{"align":26003},"程序“穿着容器”隔离运行",[32,28104,28105,28108],{},[47,28106,28107],{"align":26003},"容易“在我电脑上能跑”",[47,28109,28110],{"align":26003},"保证“无论在哪都能跑”",[19,28112,28113,28114],{},"就像快递包裹： ",[1674,28115,28116],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1217,28118,28120],{"id":28119},"_15docker-的核心优势","1.5.Docker 的核心优势",[26,28122,28123,28132],{},[29,28124,28125],{},[32,28126,28127,28130],{},[35,28128,28129],{"align":26003},"优势",[35,28131,40],{"align":26003},[42,28133,28134,28142,28150,28158,28166],{},[32,28135,28136,28139],{},[47,28137,28138],{"align":26003},"轻量级",[47,28140,28141],{"align":26003},"基于系统内核共享，启动速度快，占资源少",[32,28143,28144,28147],{},[47,28145,28146],{"align":26003},"跨平台",[47,28148,28149],{"align":26003},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[32,28151,28152,28155],{},[47,28153,28154],{"align":26003},"易于迁移部署",[47,28156,28157],{"align":26003},"应用和环境一起封装，不怕依赖不一致",[32,28159,28160,28163],{},[47,28161,28162],{"align":26003},"易于版本控制",[47,28164,28165],{"align":26003},"镜像版本可控，支持回滚",[32,28167,28168,28171],{},[47,28169,28170],{"align":26003},"生态丰富",[47,28172,28173],{"align":26003},"Docker Hub 上有成千上万的现成镜像可用",[1760,28175,28176],{},[1763,28177,28178],{},"在Linux上可以几乎实现无性能损失。",[19,28180,28181],{},"docker里的发行版和本机共用Linux内核。",[19,28183,28184],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1760,28186,28187],{},[1763,28188,28189],{},"可以快速部署在绝大多数Linux发行版",[19,28191,28192],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1760,28194,28195],{},[1763,28196,28197],{},"配置环境简单",[19,28199,28200],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28202,28203],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1760,28205,28206],{},[1763,28207,28170],{},[19,28209,28210],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28212,28213],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1217,28215,28217],{"id":28216},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3437,28219,28220,28223,28226,28229],{},[1763,28221,28222],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1763,28224,28225],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1763,28227,28228],{},"微服务架构：每个服务一个容器，灵活组合",[1763,28230,28231],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":135,"searchDepth":210,"depth":210,"links":28233},[28234,28235,28236,28237,28238,28239],{"id":27946,"depth":254,"text":27947},{"id":27990,"depth":254,"text":27991},{"id":28006,"depth":254,"text":28007},{"id":28071,"depth":254,"text":28072},{"id":28119,"depth":254,"text":28120},{"id":28216,"depth":254,"text":28217},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27938,"description":135},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28246,"title":28247,"body":28248,"description":135,"extension":2385,"meta":28979,"navigation":842,"path":28980,"seo":28981,"stem":28982,"__hash__":28983},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28249,"toc":28974},[28250,28253,28257,28260,28263,28269,28275,28279,28288,28291,28347,28350,28401,28404,28486,28489,28526,28530,28541,28554,28561,28564,28644,28647,28697,28700,28723,28727,28734,28737,28753,28759,28762,28778,28784,28787,28803,28817,28823,28843,28849,28852,28864,28870,28873,28887,28893,28896,28916,28921,28924,28927,28931,28934,28937,28940,28947,28950,28953,28956,28961,28966,28971],[10,28251,28247],{"id":28252},"_2安装docker",[1217,28254,28256],{"id":28255},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28258,28259],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28261,28262],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28264,28265],{},[2680,28266,28267],{"href":28267,"rel":28268},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26128],[19,28270,28271],{},[2680,28272,28273],{"href":28273,"rel":28274},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26128],[24265,28276,28278],{"id":28277},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28280,28281,28282,28287],{},"以下内容根据 ",[2680,28283,28286],{"href":28284,"rel":28285},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26128],"官方文档"," 修改而来。",[19,28289,28290],{},"如果你过去安装过 docker，先删掉：",[130,28292,28294],{"className":1830,"code":28293,"language":1832,"meta":135,"style":135},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[50,28295,28296],{"__ignoreMap":135},[139,28297,28298,28300,28303,28305,28308,28311,28314,28317,28320,28323,28326,28329,28332,28335,28338,28341,28344],{"class":141,"line":142},[139,28299,1970],{"class":149},[139,28301,28302],{"class":145}," pkg ",[139,28304,1976],{"class":149},[139,28306,28307],{"class":160}," docker.io",[139,28309,28310],{"class":160}," docker-doc",[139,28312,28313],{"class":160}," docker-compose",[139,28315,28316],{"class":160}," docker-compose-v2",[139,28318,28319],{"class":160}," podman-docker",[139,28321,28322],{"class":160}," containerd",[139,28324,28325],{"class":160}," runc",[139,28327,28328],{"class":145},"; ",[139,28330,28331],{"class":149},"do",[139,28333,28334],{"class":781}," sudo",[139,28336,28337],{"class":160}," apt-get",[139,28339,28340],{"class":160}," remove",[139,28342,28343],{"class":145}," $pkg; ",[139,28345,28346],{"class":149},"done\n",[19,28348,28349],{},"首先安装依赖和GPG：",[130,28351,28355],{"className":28352,"code":28353,"language":28354,"meta":135,"style":135},"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",[50,28356,28357,28362,28367,28372,28377,28382,28387,28391,28396],{"__ignoreMap":135},[139,28358,28359],{"class":141,"line":142},[139,28360,28361],{},"# Add Docker's official GPG key:\n",[139,28363,28364],{"class":141,"line":210},[139,28365,28366],{},"sudo apt-get update\n",[139,28368,28369],{"class":141,"line":254},[139,28370,28371],{},"sudo apt-get install ca-certificates curl\n",[139,28373,28374],{"class":141,"line":262},[139,28375,28376],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[139,28378,28379],{"class":141,"line":313},[139,28380,28381],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[139,28383,28384],{"class":141,"line":462},[139,28385,28386],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[139,28388,28389],{"class":141,"line":474},[139,28390,843],{"emptyLinePlaceholder":842},[139,28392,28393],{"class":141,"line":484},[139,28394,28395],{},"# 如果上面这行报错就弄下面这行\n",[139,28397,28398],{"class":141,"line":989},[139,28399,28400],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28402,28403],{},"信任 Docker 的 GPG 公钥并添加仓库：",[130,28405,28407],{"className":1830,"code":28406,"language":1832,"meta":135,"style":135},"# 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",[50,28408,28409,28414,28420,28437,28470],{"__ignoreMap":135},[139,28410,28411],{"class":141,"line":142},[139,28412,28413],{"class":2512},"# Add the repository to Apt sources:\n",[139,28415,28416,28418],{"class":141,"line":210},[139,28417,27388],{"class":153},[139,28419,26941],{"class":153},[139,28421,28422,28425,28428,28431,28434],{"class":141,"line":254},[139,28423,28424],{"class":160},"  \"deb [arch=$(",[139,28426,28427],{"class":781},"dpkg",[139,28429,28430],{"class":153}," --print-architecture",[139,28432,28433],{"class":160},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[139,28435,28436],{"class":153},"\\\n",[139,28438,28439,28442,28444,28446,28449,28452,28454,28456,28459,28461,28463,28466,28468],{"class":141,"line":262},[139,28440,28441],{"class":160},"  \"",[139,28443,27362],{"class":145},[139,28445,2993],{"class":153},[139,28447,28448],{"class":160}," \u002Fetc\u002Fos-release",[139,28450,28451],{"class":145}," && ",[139,28453,27388],{"class":153},[139,28455,11998],{"class":160},[139,28457,28458],{"class":145},"$VERSION_CODENAME",[139,28460,634],{"class":160},[139,28462,2867],{"class":145},[139,28464,28465],{"class":160},"\" stable\"",[139,28467,27372],{"class":149},[139,28469,26941],{"class":153},[139,28471,28472,28475,28478,28481,28483],{"class":141,"line":313},[139,28473,28474],{"class":781},"  sudo",[139,28476,28477],{"class":160}," tee",[139,28479,28480],{"class":160}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[139,28482,1917],{"class":149},[139,28484,28485],{"class":160}," \u002Fdev\u002Fnull\n",[19,28487,28488],{},"最后安装",[130,28490,28492],{"className":1830,"code":28491,"language":1832,"meta":135,"style":135},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[50,28493,28494,28503],{"__ignoreMap":135},[139,28495,28496,28498,28500],{"class":141,"line":142},[139,28497,26840],{"class":781},[139,28499,28337],{"class":160},[139,28501,28502],{"class":160}," update\n",[139,28504,28505,28507,28509,28511,28514,28517,28520,28523],{"class":141,"line":210},[139,28506,26840],{"class":781},[139,28508,28337],{"class":160},[139,28510,1841],{"class":160},[139,28512,28513],{"class":160}," docker-ce",[139,28515,28516],{"class":160}," docker-ce-cli",[139,28518,28519],{"class":160}," containerd.io",[139,28521,28522],{"class":160}," docker-buildx-plugin",[139,28524,28525],{"class":160}," docker-compose-plugin\n",[24265,28527,28529],{"id":28528},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28531,28532,28533,28536,28537,28540],{},"查看自己自己包管理工具版本（dnf是 ",[1674,28534,28535],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1674,28538,28539],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[130,28542,28544],{"className":1830,"code":28543,"language":1832,"meta":135,"style":135},"dnf --version\n",[50,28545,28546],{"__ignoreMap":135},[139,28547,28548,28551],{"class":141,"line":142},[139,28549,28550],{"class":781},"dnf",[139,28552,28553],{"class":153}," --version\n",[19,28555,28281,28556,28560],{},[2680,28557,28286],{"href":28558,"rel":28559},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26128]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28562,28563],{},"如果你之前安装过 docker，请先删掉",[130,28565,28567],{"className":1830,"code":28566,"language":1832,"meta":135,"style":135},"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",[50,28568,28569,28583,28590,28597,28604,28611,28618,28625,28632,28639],{"__ignoreMap":135},[139,28570,28571,28573,28576,28578,28581],{"class":141,"line":142},[139,28572,26840],{"class":781},[139,28574,28575],{"class":160}," dnf",[139,28577,28340],{"class":160},[139,28579,28580],{"class":160}," docker",[139,28582,26941],{"class":153},[139,28584,28585,28588],{"class":141,"line":210},[139,28586,28587],{"class":160},"                  docker-client",[139,28589,26941],{"class":153},[139,28591,28592,28595],{"class":141,"line":254},[139,28593,28594],{"class":160},"                  docker-client-latest",[139,28596,26941],{"class":153},[139,28598,28599,28602],{"class":141,"line":262},[139,28600,28601],{"class":160},"                  docker-common",[139,28603,26941],{"class":153},[139,28605,28606,28609],{"class":141,"line":313},[139,28607,28608],{"class":160},"                  docker-latest",[139,28610,26941],{"class":153},[139,28612,28613,28616],{"class":141,"line":462},[139,28614,28615],{"class":160},"                  docker-latest-logrotate",[139,28617,26941],{"class":153},[139,28619,28620,28623],{"class":141,"line":474},[139,28621,28622],{"class":160},"                  docker-logrotate",[139,28624,26941],{"class":153},[139,28626,28627,28630],{"class":141,"line":484},[139,28628,28629],{"class":160},"                  docker-selinux",[139,28631,26941],{"class":153},[139,28633,28634,28637],{"class":141,"line":989},[139,28635,28636],{"class":160},"                  docker-engine-selinux",[139,28638,26941],{"class":153},[139,28640,28641],{"class":141,"line":994},[139,28642,28643],{"class":160},"                  docker-engine\n",[19,28645,28646],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[130,28648,28650],{"className":1830,"code":28649,"language":1832,"meta":135,"style":135},"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",[50,28651,28652,28666,28681],{"__ignoreMap":135},[139,28653,28654,28656,28658,28661,28663],{"class":141,"line":142},[139,28655,26840],{"class":781},[139,28657,28575],{"class":160},[139,28659,28660],{"class":153}," -y",[139,28662,1841],{"class":160},[139,28664,28665],{"class":160}," dnf-plugins-core\n",[139,28667,28668,28670,28672,28675,28678],{"class":141,"line":210},[139,28669,26840],{"class":781},[139,28671,28575],{"class":160},[139,28673,28674],{"class":160}," config-manager",[139,28676,28677],{"class":160}," addrepo",[139,28679,28680],{"class":153}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[139,28682,28683,28685,28688,28691,28694],{"class":141,"line":254},[139,28684,26840],{"class":781},[139,28686,28687],{"class":160}," sed",[139,28689,28690],{"class":153}," -i",[139,28692,28693],{"class":160}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[139,28695,28696],{"class":160}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28698,28699],{},"最后安装：",[130,28701,28703],{"className":1830,"code":28702,"language":1832,"meta":135,"style":135},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[50,28704,28705],{"__ignoreMap":135},[139,28706,28707,28709,28711,28713,28715,28717,28719,28721],{"class":141,"line":142},[139,28708,26840],{"class":781},[139,28710,28575],{"class":160},[139,28712,1841],{"class":160},[139,28714,28513],{"class":160},[139,28716,28516],{"class":160},[139,28718,28519],{"class":160},[139,28720,28522],{"class":160},[139,28722,28525],{"class":160},[1217,28724,28726],{"id":28725},"_22配置环境","2.2.配置环境",[24265,28728,28730,28733],{"id":28729},"_221检查-docker-服务状态",[1674,28731,28732],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28735,28736],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[130,28738,28740],{"className":1830,"code":28739,"language":1832,"meta":135,"style":135},"systemctl status docker\n",[50,28741,28742],{"__ignoreMap":135},[139,28743,28744,28747,28750],{"class":141,"line":142},[139,28745,28746],{"class":781},"systemctl",[139,28748,28749],{"class":160}," status",[139,28751,28752],{"class":160}," docker\n",[24265,28754,28756,28733],{"id":28755},"_222启动-docker-服务",[1674,28757,28758],{},"2.2.2.启动 Docker 服务",[19,28760,28761],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[130,28763,28765],{"className":1830,"code":28764,"language":1832,"meta":135,"style":135},"sudo systemctl start docker\n",[50,28766,28767],{"__ignoreMap":135},[139,28768,28769,28771,28774,28776],{"class":141,"line":142},[139,28770,26840],{"class":781},[139,28772,28773],{"class":160}," systemctl",[139,28775,6462],{"class":160},[139,28777,28752],{"class":160},[24265,28779,28781,28733],{"id":28780},"_223设置-docker-开机自启",[1674,28782,28783],{},"2.2.3.设置 Docker 开机自启",[19,28785,28786],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[130,28788,28790],{"className":1830,"code":28789,"language":1832,"meta":135,"style":135},"sudo systemctl enable docker\n",[50,28791,28792],{"__ignoreMap":135},[139,28793,28794,28796,28798,28801],{"class":141,"line":142},[139,28795,26840],{"class":781},[139,28797,28773],{"class":160},[139,28799,28800],{"class":160}," enable",[139,28802,28752],{"class":160},[24265,28804,28806,16066,28809,16066,28814,28733],{"id":28805},"_224将用户添加到-docker-组",[1674,28807,28808],{},"2.2.4.将用户添加到",[1674,28810,28811],{},[50,28812,28813],{},"docker",[1674,28815,28816],{},"组",[19,28818,28819,28820,28822],{},"使用以下命令将当前用户添加到 ",[50,28821,28813],{}," 组：",[130,28824,28826],{"className":1830,"code":28825,"language":1832,"meta":135,"style":135},"sudo usermod -aG docker $USER\n",[50,28827,28828],{"__ignoreMap":135},[139,28829,28830,28832,28835,28838,28840],{"class":141,"line":142},[139,28831,26840],{"class":781},[139,28833,28834],{"class":160}," usermod",[139,28836,28837],{"class":153}," -aG",[139,28839,28580],{"class":160},[139,28841,28842],{"class":145}," $USER\n",[24265,28844,28846,28733],{"id":28845},"_225退出并重新登录",[1674,28847,28848],{},"2.2.5.退出并重新登录",[19,28850,28851],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[130,28853,28855],{"className":1830,"code":28854,"language":1832,"meta":135,"style":135},"newgrp docker\n",[50,28856,28857],{"__ignoreMap":135},[139,28858,28859,28862],{"class":141,"line":142},[139,28860,28861],{"class":781},"newgrp",[139,28863,28752],{"class":160},[24265,28865,28867,28733],{"id":28866},"_226重新启动-docker-服务如果需要",[1674,28868,28869],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28871,28872],{},"确保 Docker 服务正在运行，可以使用以下命令：",[130,28874,28875],{"className":1830,"code":28764,"language":1832,"meta":135,"style":135},[50,28876,28877],{"__ignoreMap":135},[139,28878,28879,28881,28883,28885],{"class":141,"line":142},[139,28880,26840],{"class":781},[139,28882,28773],{"class":160},[139,28884,6462],{"class":160},[139,28886,28752],{"class":160},[24265,28888,28890,28733],{"id":28889},"_227重启电脑后检查-docker-服务状态",[1674,28891,28892],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28894,28895],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[130,28897,28899],{"className":1830,"code":28898,"language":1832,"meta":135,"style":135},"sudo reboot\nsystemctl status docker\n",[50,28900,28901,28908],{"__ignoreMap":135},[139,28902,28903,28905],{"class":141,"line":142},[139,28904,26840],{"class":781},[139,28906,28907],{"class":160}," reboot\n",[139,28909,28910,28912,28914],{"class":141,"line":210},[139,28911,28746],{"class":781},[139,28913,28749],{"class":160},[139,28915,28752],{"class":160},[19,28917,28918],{},[3760,28919],{"alt":135,"src":28920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28922,28923],{},"第三行显示enabled说明开机自启动成功",[19,28925,28926],{},"按q退出",[1217,28928,28930],{"id":28929},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28932,28933],{},"优先使用linux来使用docker是比较好的",[19,28935,28936],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28938,28939],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28941,28942,28943],{},"官方下载安装:",[2680,28944,28945],{"href":28945,"rel":28946},"https:\u002F\u002Fwww.docker.com\u002F",[26128],[19,28948,28949],{},"Windows的Docker显卡直通与USB直通:",[19,28951,28952],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28954,28955],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28957,28958],{},[3760,28959],{"alt":135,"src":28960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28962,28963],{},[3760,28964],{"alt":135,"src":28965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28967,28968],{},[3760,28969],{"alt":135,"src":28970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2348,28972,28973],{},"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":135,"searchDepth":210,"depth":210,"links":28975},[28976,28977,28978],{"id":28255,"depth":254,"text":28256},{"id":28725,"depth":254,"text":28726},{"id":28929,"depth":254,"text":28930},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28247,"description":135},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28985,"title":28986,"body":28987,"description":28994,"extension":2385,"meta":29687,"navigation":842,"path":29688,"seo":29689,"stem":29690,"__hash__":29691},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28988,"toc":29681},[28989,28992,28995,28999,29004,29009,29012,29040,29045,29054,29057,29062,29066,29073,29078,29084,29088,29091,29095,29100,29192,29197,29215,29220,29241,29246,29262,29266,29271,29300,29305,29351,29356,29400,29408,29425,29430,29446,29451,29465,29468,29471,29474,29477,29506,29509,29514,29518,29521,29524,29530,29533,29536,29539,29601,29608,29613,29616,29634,29638,29641,29658,29661,29664,29678],[10,28990,28986],{"id":28991},"_3docker直通",[19,28993,28994],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1217,28996,28998],{"id":28997},"_31usb直通","3.1.USB直通",[19,29000,29001],{},[3760,29002],{"alt":135,"src":29003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1760,29005,29006],{},[1763,29007,29008],{},"方法一(不是很推荐新手)：",[19,29010,29011],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[130,29013,29015],{"className":1830,"code":29014,"language":1832,"meta":135,"style":135},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[50,29016,29017,29025,29030],{"__ignoreMap":135},[139,29018,29019,29022],{"class":141,"line":142},[139,29020,29021],{"class":781},"ls",[139,29023,29024],{"class":160}," \u002Fdev\n",[139,29026,29027],{"class":141,"line":210},[139,29028,29029],{"class":2512},"#例如\n",[139,29031,29032,29035,29037],{"class":141,"line":254},[139,29033,29034],{"class":145},"--device",[139,29036,150],{"class":149},[139,29038,29039],{"class":160},"\u002Fdev\u002Ftty_USB0\n",[1760,29041,29042],{"start":210},[1763,29043,29044],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[130,29046,29048],{"className":1830,"code":29047,"language":1832,"meta":135,"style":135},"--privileged\n",[50,29049,29050],{"__ignoreMap":135},[139,29051,29052],{"class":141,"line":142},[139,29053,29047],{"class":781},[19,29055,29056],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29058,29059],{},[3760,29060],{"alt":135,"src":29061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1217,29063,29065],{"id":29064},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29067,29068,29069,29072],{},"NVIDIA Container Toolkit使用户 ",[1674,29070,29071],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29074,29075],{},[3760,29076],{"alt":135,"src":29077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29079,29080],{},[2680,29081,29082],{"href":29082,"rel":29083},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26128],[24265,29085,29087],{"id":29086},"_321安装","3.2.1.安装",[19,29089,29090],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25177,29092,29094],{"id":29093},"_3211ubuntu","3.2.1.1.Ubuntu",[1760,29096,29097],{},[1763,29098,29099],{},"配置存储库 并更新",[130,29101,29103],{"className":1830,"code":29102,"language":1832,"meta":135,"style":135},"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",[50,29104,29105,29134,29154,29166,29178,29184],{"__ignoreMap":135},[139,29106,29107,29110,29113,29116,29118,29120,29123,29126,29129,29132],{"class":141,"line":142},[139,29108,29109],{"class":781},"curl",[139,29111,29112],{"class":153}," -fsSL",[139,29114,29115],{"class":160}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[139,29117,27372],{"class":149},[139,29119,28334],{"class":781},[139,29121,29122],{"class":160}," gpg",[139,29124,29125],{"class":153}," --dearmor",[139,29127,29128],{"class":153}," -o",[139,29130,29131],{"class":160}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[139,29133,26941],{"class":153},[139,29135,29136,29139,29141,29144,29147,29150,29152],{"class":141,"line":210},[139,29137,29138],{"class":145},"  && ",[139,29140,29109],{"class":781},[139,29142,29143],{"class":153}," -s",[139,29145,29146],{"class":153}," -L",[139,29148,29149],{"class":160}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[139,29151,27372],{"class":149},[139,29153,26941],{"class":153},[139,29155,29156,29159,29162,29164],{"class":141,"line":254},[139,29157,29158],{"class":781},"    sed",[139,29160,29161],{"class":160}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[139,29163,27372],{"class":149},[139,29165,26941],{"class":153},[139,29167,29168,29171,29173,29176],{"class":141,"line":262},[139,29169,29170],{"class":781},"    sudo",[139,29172,28477],{"class":160},[139,29174,29175],{"class":160}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[139,29177,26941],{"class":153},[139,29179,29180,29182],{"class":141,"line":313},[139,29181,29138],{"class":145},[139,29183,28436],{"class":153},[139,29185,29186,29188,29190],{"class":141,"line":462},[139,29187,29170],{"class":781},[139,29189,28337],{"class":160},[139,29191,28502],{"class":160},[1760,29193,29194],{"start":210},[1763,29195,29196],{},"安装nvidia-docker2",[130,29198,29200],{"className":1830,"code":29199,"language":1832,"meta":135,"style":135},"sudo apt-get install -y nvidia-docker2\n",[50,29201,29202],{"__ignoreMap":135},[139,29203,29204,29206,29208,29210,29212],{"class":141,"line":142},[139,29205,26840],{"class":781},[139,29207,28337],{"class":160},[139,29209,1841],{"class":160},[139,29211,28660],{"class":153},[139,29213,29214],{"class":160}," nvidia-docker2\n",[1760,29216,29217],{"start":254},[1763,29218,29219],{},"使用nvidia-ctk命令配置container runtime",[130,29221,29223],{"className":1830,"code":29222,"language":1832,"meta":135,"style":135},"sudo nvidia-ctk runtime configure --runtime=docker\n",[50,29224,29225],{"__ignoreMap":135},[139,29226,29227,29229,29232,29235,29238],{"class":141,"line":142},[139,29228,26840],{"class":781},[139,29230,29231],{"class":160}," nvidia-ctk",[139,29233,29234],{"class":160}," runtime",[139,29236,29237],{"class":160}," configure",[139,29239,29240],{"class":153}," --runtime=docker\n",[1760,29242,29243],{"start":262},[1763,29244,29245],{},"重启docker服务:",[130,29247,29249],{"className":1830,"code":29248,"language":1832,"meta":135,"style":135},"sudo systemctl restart docker\n",[50,29250,29251],{"__ignoreMap":135},[139,29252,29253,29255,29257,29260],{"class":141,"line":142},[139,29254,26840],{"class":781},[139,29256,28773],{"class":160},[139,29258,29259],{"class":160}," restart",[139,29261,28752],{"class":160},[25177,29263,29265],{"id":29264},"_3212fedora","3.2.1.2.Fedora",[1760,29267,29268],{},[1763,29269,29270],{},"配置存储库",[130,29272,29274],{"className":1830,"code":29273,"language":1832,"meta":135,"style":135},"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",[50,29275,29276,29291],{"__ignoreMap":135},[139,29277,29278,29280,29282,29284,29287,29289],{"class":141,"line":142},[139,29279,29109],{"class":781},[139,29281,29143],{"class":153},[139,29283,29146],{"class":153},[139,29285,29286],{"class":160}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[139,29288,27372],{"class":149},[139,29290,26941],{"class":153},[139,29292,29293,29295,29297],{"class":141,"line":210},[139,29294,26840],{"class":781},[139,29296,28477],{"class":160},[139,29298,29299],{"class":160}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1760,29301,29302],{"start":210},[1763,29303,29304],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[130,29306,29308],{"className":1830,"code":29307,"language":1832,"meta":135,"style":135},"# 如果是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",[50,29309,29310,29315,29329,29333,29338],{"__ignoreMap":135},[139,29311,29312],{"class":141,"line":142},[139,29313,29314],{"class":2512},"# 如果是RHEL或者Rocky（DNF4）\n",[139,29316,29317,29319,29321,29323,29326],{"class":141,"line":210},[139,29318,26840],{"class":781},[139,29320,28575],{"class":160},[139,29322,28674],{"class":160},[139,29324,29325],{"class":153}," --add-repo",[139,29327,29328],{"class":160}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[139,29330,29331],{"class":141,"line":254},[139,29332,843],{"emptyLinePlaceholder":842},[139,29334,29335],{"class":141,"line":262},[139,29336,29337],{"class":2512},"# 如果是Feodra41+（DNF5）\n",[139,29339,29340,29342,29344,29346,29348],{"class":141,"line":313},[139,29341,26840],{"class":781},[139,29343,28575],{"class":160},[139,29345,28674],{"class":160},[139,29347,28677],{"class":160},[139,29349,29350],{"class":153}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1760,29352,29353],{"start":254},[1763,29354,29355],{},"安装NVIDIA Container Toolki包",[130,29357,29359],{"className":1830,"code":29358,"language":1832,"meta":135,"style":135},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[50,29360,29361,29366,29379,29383,29388],{"__ignoreMap":135},[139,29362,29363],{"class":141,"line":142},[139,29364,29365],{"class":2512},"# 如果是RHEL或者Rocky\n",[139,29367,29368,29370,29372,29374,29376],{"class":141,"line":210},[139,29369,26840],{"class":781},[139,29371,28575],{"class":160},[139,29373,1841],{"class":160},[139,29375,28660],{"class":153},[139,29377,29378],{"class":160}," nvidia-container-toolkit\n",[139,29380,29381],{"class":141,"line":254},[139,29382,843],{"emptyLinePlaceholder":842},[139,29384,29385],{"class":141,"line":262},[139,29386,29387],{"class":2512},"# 如果是Fedora\n",[139,29389,29390,29392,29394,29396,29398],{"class":141,"line":313},[139,29391,26840],{"class":781},[139,29393,28575],{"class":160},[139,29395,1841],{"class":160},[139,29397,28660],{"class":153},[139,29399,29378],{"class":160},[1760,29401,29402],{"start":262},[1763,29403,29404,29405,29407],{},"安装nvidia-docker2 ： 在Fedora上使用",[50,29406,28550],{},"进行安装",[130,29409,29411],{"className":1830,"code":29410,"language":1832,"meta":135,"style":135},"sudo dnf install -y nvidia-docker2\n",[50,29412,29413],{"__ignoreMap":135},[139,29414,29415,29417,29419,29421,29423],{"class":141,"line":142},[139,29416,26840],{"class":781},[139,29418,28575],{"class":160},[139,29420,1841],{"class":160},[139,29422,28660],{"class":153},[139,29424,29214],{"class":160},[1760,29426,29427],{"start":313},[1763,29428,29429],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[130,29431,29432],{"className":1830,"code":29222,"language":1832,"meta":135,"style":135},[50,29433,29434],{"__ignoreMap":135},[139,29435,29436,29438,29440,29442,29444],{"class":141,"line":142},[139,29437,26840],{"class":781},[139,29439,29231],{"class":160},[139,29441,29234],{"class":160},[139,29443,29237],{"class":160},[139,29445,29240],{"class":153},[1760,29447,29448],{"start":462},[1763,29449,29450],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[130,29452,29453],{"className":1830,"code":29248,"language":1832,"meta":135,"style":135},[50,29454,29455],{"__ignoreMap":135},[139,29456,29457,29459,29461,29463],{"class":141,"line":142},[139,29458,26840],{"class":781},[139,29460,28773],{"class":160},[139,29462,29259],{"class":160},[139,29464,28752],{"class":160},[19,29466,29467],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29469,29470],{},"方法：",[19,29472,29473],{},"1️⃣nvidia-smi",[19,29475,29476],{},"2️⃣运行nvidia cuda 容器进行测试",[130,29478,29480],{"className":1830,"code":29479,"language":1832,"meta":135,"style":135},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[50,29481,29482],{"__ignoreMap":135},[139,29483,29484,29486,29488,29491,29494,29497,29500,29503],{"class":141,"line":142},[139,29485,26840],{"class":781},[139,29487,28580],{"class":160},[139,29489,29490],{"class":160}," run",[139,29492,29493],{"class":153}," --rm",[139,29495,29496],{"class":153}," --gpus",[139,29498,29499],{"class":160}," all",[139,29501,29502],{"class":160}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[139,29504,29505],{"class":160}," nvidia-smi\n",[19,29507,29508],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29510,29511],{},[3760,29512],{"alt":135,"src":29513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1217,29515,29517],{"id":29516},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29519,29520],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29522,29523],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29525,29526],{},[2680,29527,29528],{"href":29528,"rel":29529},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26128],[19,29531,29532],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29534,29535],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29537,29538],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[26,29540,29541,29557],{},[29,29542,29543],{},[32,29544,29545,29548,29551,29554],{},[35,29546,29547],{"align":26003},"镜像类型",[35,29549,29550],{"align":26003},"适用场景",[35,29552,29553],{"align":26003},"示例标签",[35,29555,29556],{"align":26003},"大小",[42,29558,29559,29573,29587],{},[32,29560,29561,29564,29567,29570],{},[47,29562,29563],{"align":26003},"base",[47,29565,29566],{"align":26003},"仅需 CUDA 运行时库",[47,29568,29569],{"align":26003},"12.4.0-base-ubuntu22.04",[47,29571,29572],{"align":26003},"~240MB",[32,29574,29575,29578,29581,29584],{},[47,29576,29577],{"align":26003},"runtime",[47,29579,29580],{"align":26003},"部署编译后的应用（含数学库）",[47,29582,29583],{"align":26003},"12.4.0-runtime-ubuntu22.04",[47,29585,29586],{"align":26003},"~2GB",[32,29588,29589,29592,29595,29598],{},[47,29590,29591],{"align":26003},"devel",[47,29593,29594],{"align":26003},"开发环境（含编译工具）",[47,29596,29597],{"align":26003},"12.4.0-devel-ubuntu22.04",[47,29599,29600],{"align":26003},"~3GB",[19,29602,29603,29604,29607],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[50,29605,29606],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29609,29610],{},[3760,29611],{"alt":135,"src":29612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29614,29615],{},"在dockerfile里就可以开头这么写：",[130,29617,29619],{"className":1830,"code":29618,"language":1832,"meta":135,"style":135},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[50,29620,29621,29626],{"__ignoreMap":135},[139,29622,29623],{"class":141,"line":142},[139,29624,29625],{"class":2512},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[139,29627,29628,29631],{"class":141,"line":210},[139,29629,29630],{"class":781},"FROM",[139,29632,29633],{"class":160}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1217,29635,29637],{"id":29636},"_34配置以太网","3.4.配置以太网",[19,29639,29640],{},"指定网络模式",[130,29642,29644],{"className":1830,"code":29643,"language":1832,"meta":135,"style":135},"--net=host \\\n",[50,29645,29646],{"__ignoreMap":135},[139,29647,29648,29651,29653,29656],{"class":141,"line":142},[139,29649,29650],{"class":145},"--net",[139,29652,150],{"class":149},[139,29654,29655],{"class":160},"host",[139,29657,26941],{"class":781},[19,29659,29660],{},"启动参数里加上这行即可。具体在下方",[19,29662,29663],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3437,29665,29666,29669,29672,29675],{},[1763,29667,29668],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1763,29670,29671],{},"--net=host:容器使用宿主机的网络",[1763,29673,29674],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1763,29676,29677],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2348,29679,29680],{},"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":135,"searchDepth":210,"depth":210,"links":29682},[29683,29684,29685,29686],{"id":28997,"depth":254,"text":28998},{"id":29064,"depth":254,"text":29065},{"id":29516,"depth":254,"text":29517},{"id":29636,"depth":254,"text":29637},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28986,"description":28994},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29693,"title":29694,"body":29695,"description":29702,"extension":2385,"meta":29708,"navigation":842,"path":29709,"seo":29710,"stem":29711,"__hash__":29712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29696,"toc":29706},[29697,29700,29703],[10,29698,29694],{"id":29699},"_4dockerhub换源",[19,29701,29702],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29704,29705],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":135,"searchDepth":210,"depth":210,"links":29707},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29694,"description":29702},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29714,"title":29715,"body":29716,"description":135,"extension":2385,"meta":30727,"navigation":842,"path":30728,"seo":30729,"stem":30730,"__hash__":30731},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29717,"toc":30722},[29718,29721,29725,29731,29735,29738,30078,30081,30084,30087,30092,30097,30100,30103,30106,30109,30128,30131,30142,30148,30330,30340,30356,30619,30621,30645,30660,30669,30719],[10,29719,29715],{"id":29720},"_5docker命令学习",[1217,29722,29724],{"id":29723},"_51参考文档","5.1.参考文档",[19,29726,29727],{},[2680,29728,29729],{"href":29729,"rel":29730},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26128],[1217,29732,29734],{"id":29733},"_52常用命令","5.2.常用命令",[19,29736,29737],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[26,29739,29740,29753],{},[29,29741,29742],{},[32,29743,29744,29747,29750],{},[35,29745,29746],{"align":26003},"命令",[35,29748,29749],{"align":26003},"描述",[35,29751,29752],{"align":26003},"示例",[42,29754,29755,29766,29777,29788,29799,29810,29821,29832,29842,29853,29864,29875,29885,29896,29907,29918,29928,29938,29948,29958,29969,29980,29991,30002,30013,30024,30034,30045,30056,30067],{},[32,29756,29757,29760,29763],{},[47,29758,29759],{"align":26003},"docker run",[47,29761,29762],{"align":26003},"创建并启动一个新的容器。",[47,29764,29765],{"align":26003},"docker run -it ubuntu bash",[32,29767,29768,29771,29774],{},[47,29769,29770],{"align":26003},"docker build",[47,29772,29773],{"align":26003},"通过指定的 Dockerfile 创建一个新的镜像。",[47,29775,29776],{"align":26003},"docker build -t myimage .",[32,29778,29779,29782,29785],{},[47,29780,29781],{"align":26003},"docker pull",[47,29783,29784],{"align":26003},"从 Docker 仓库拉取镜像。",[47,29786,29787],{"align":26003},"docker pull ubuntu",[32,29789,29790,29793,29796],{},[47,29791,29792],{"align":26003},"docker push",[47,29794,29795],{"align":26003},"将本地镜像推送到 Docker 仓库。",[47,29797,29798],{"align":26003},"docker push myimage",[32,29800,29801,29804,29807],{},[47,29802,29803],{"align":26003},"docker stop",[47,29805,29806],{"align":26003},"停止一个正在运行的容器。",[47,29808,29809],{"align":26003},"docker stop container_id",[32,29811,29812,29815,29818],{},[47,29813,29814],{"align":26003},"docker start",[47,29816,29817],{"align":26003},"启动一个已经存在的容器。",[47,29819,29820],{"align":26003},"docker start container_id",[32,29822,29823,29826,29829],{},[47,29824,29825],{"align":26003},"docker restart",[47,29827,29828],{"align":26003},"重新启动容器。",[47,29830,29831],{"align":26003},"docker restart container_id",[32,29833,29834,29837,29840],{},[47,29835,29836],{"align":26003},"docker ps",[47,29838,29839],{"align":26003},"列出当前正在运行的容器。",[47,29841,29836],{"align":26003},[32,29843,29844,29847,29850],{},[47,29845,29846],{"align":26003},"docker rm",[47,29848,29849],{"align":26003},"删除一个或多个停止的容器。",[47,29851,29852],{"align":26003},"docker rm container_id",[32,29854,29855,29858,29861],{},[47,29856,29857],{"align":26003},"docker exec",[47,29859,29860],{"align":26003},"在一个正在运行的容器中执行命令。",[47,29862,29863],{"align":26003},"docker exec -it container_id bash",[32,29865,29866,29869,29872],{},[47,29867,29868],{"align":26003},"docker logs",[47,29870,29871],{"align":26003},"查看容器的日志输出。",[47,29873,29874],{"align":26003},"docker logs container_id",[32,29876,29877,29880,29883],{},[47,29878,29879],{"align":26003},"docker images",[47,29881,29882],{"align":26003},"列出本地所有镜像。",[47,29884,29879],{"align":26003},[32,29886,29887,29890,29893],{},[47,29888,29889],{"align":26003},"docker rmi",[47,29891,29892],{"align":26003},"删除一个或多个镜像。",[47,29894,29895],{"align":26003},"docker rmi myimage",[32,29897,29898,29901,29904],{},[47,29899,29900],{"align":26003},"docker network",[47,29902,29903],{"align":26003},"管理 Docker 网络。",[47,29905,29906],{"align":26003},"docker network ls",[32,29908,29909,29912,29915],{},[47,29910,29911],{"align":26003},"docker volume",[47,29913,29914],{"align":26003},"管理 Docker 数据卷。",[47,29916,29917],{"align":26003},"docker volume ls",[32,29919,29920,29923,29926],{},[47,29921,29922],{"align":26003},"docker-compose up",[47,29924,29925],{"align":26003},"启动 docker-compose.yml 中定义的所有服务。",[47,29927,29922],{"align":26003},[32,29929,29930,29933,29936],{},[47,29931,29932],{"align":26003},"docker-compose down",[47,29934,29935],{"align":26003},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[47,29937,29932],{"align":26003},[32,29939,29940,29943,29946],{},[47,29941,29942],{"align":26003},"docker info",[47,29944,29945],{"align":26003},"显示 Docker 系统的详细信息。",[47,29947,29942],{"align":26003},[32,29949,29950,29953,29956],{},[47,29951,29952],{"align":26003},"docker stats",[47,29954,29955],{"align":26003},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[47,29957,29952],{"align":26003},[32,29959,29960,29963,29966],{},[47,29961,29962],{"align":26003},"docker inspect",[47,29964,29965],{"align":26003},"查看容器或镜像的详细信息（JSON 格式）。",[47,29967,29968],{"align":26003},"docker inspect container_id",[32,29970,29971,29974,29977],{},[47,29972,29973],{"align":26003},"docker save",[47,29975,29976],{"align":26003},"将一个镜像保存为 tar 文件。",[47,29978,29979],{"align":26003},"docker save -o myimage.tar myimage",[32,29981,29982,29985,29988],{},[47,29983,29984],{"align":26003},"docker load",[47,29986,29987],{"align":26003},"从 tar 文件中加载镜像。",[47,29989,29990],{"align":26003},"docker load -i myimage.tar",[32,29992,29993,29996,29999],{},[47,29994,29995],{"align":26003},"docker tag",[47,29997,29998],{"align":26003},"为镜像添加标签（tag）。",[47,30000,30001],{"align":26003},"docker tag myimage myimage:v1",[32,30003,30004,30007,30010],{},[47,30005,30006],{"align":26003},"docker buildx build",[47,30008,30009],{"align":26003},"使用 Buildx 构建多架构镜像。",[47,30011,30012],{"align":26003},"docker buildx build -t myimage .",[32,30014,30015,30018,30021],{},[47,30016,30017],{"align":26003},"docker buildx create",[47,30019,30020],{"align":26003},"创建一个新的 Buildx 构建实例。",[47,30022,30023],{"align":26003},"docker buildx create –use",[32,30025,30026,30029,30032],{},[47,30027,30028],{"align":26003},"docker buildx ls",[47,30030,30031],{"align":26003},"列出所有可用的 Buildx 构建实例。",[47,30033,30028],{"align":26003},[32,30035,30036,30039,30042],{},[47,30037,30038],{"align":26003},"docker buildx use",[47,30040,30041],{"align":26003},"设置当前的 Buildx 构建实例。",[47,30043,30044],{"align":26003},"docker buildx use mybuilder",[32,30046,30047,30050,30053],{},[47,30048,30049],{"align":26003},"docker buildx bake",[47,30051,30052],{"align":26003},"使用 Bake 文件批量构建镜像。",[47,30054,30055],{"align":26003},"docker buildx bake -f bake.hcl",[32,30057,30058,30061,30064],{},[47,30059,30060],{"align":26003},"docker buildx build –push",[47,30062,30063],{"align":26003},"构建镜像并推送到镜像仓库。",[47,30065,30066],{"align":26003},"docker buildx build –push -t myimage .",[32,30068,30069,30072,30075],{},[47,30070,30071],{"align":26003},"docker buildx build –platform",[47,30073,30074],{"align":26003},"构建镜像并为多个平台生成支持。",[47,30076,30077],{"align":26003},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30079,30080],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30082,30083],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30085,30086],{},"docker images 可以查看已经下载的镜像",[19,30088,30089],{},[3760,30090],{"alt":135,"src":30091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30093,30094],{},[1674,30095,30096],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30098,30099],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30101,30102],{},"docker container logs 查看容器日志",[19,30104,30105],{},"docker top 查看容器里的进程",[19,30107,30108],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[130,30110,30112],{"className":1830,"code":30111,"language":1832,"meta":135,"style":135},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[50,30113,30114],{"__ignoreMap":135},[139,30115,30116,30119,30122,30125],{"class":141,"line":142},[139,30117,30118],{"class":781},"如：docker",[139,30120,30121],{"class":160}," cp",[139,30123,30124],{"class":160}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[139,30126,30127],{"class":160}," \u002Fmydata\u002Fnginx\n",[19,30129,30130],{},"docker run时在启动容器的时候会有几个常用的选项：",[3437,30132,30133,30136,30139],{},[1763,30134,30135],{},"-d选项：表示后台运行",[1763,30137,30138],{},"-P选项：随机端口映射",[1763,30140,30141],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1217,30143,30145],{"id":30144},"_53run命令的参数非常重要",[1674,30146,30147],{},"5.3.run命令的参数（非常重要）",[26,30149,30150,30163],{},[29,30151,30152],{},[32,30153,30154,30157,30160],{},[35,30155,30156],{"align":26003},"参数\u002F配置",[35,30158,30159],{"align":26003},"功能说明",[35,30161,30162],{"align":26003},"重要性与参考依据",[42,30164,30165,30176,30187,30198,30209,30220,30231,30242,30253,30264,30275,30286,30297,30308,30319],{},[32,30166,30167,30170,30173],{},[47,30168,30169],{"align":26003},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[47,30171,30172],{"align":26003},"指定容器名称，便于后续管理",[47,30174,30175],{"align":26003},"替代随机生成的容器名。",[32,30177,30178,30181,30184],{},[47,30179,30180],{"align":26003},"–gpus all",[47,30182,30183],{"align":26003},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[47,30185,30186],{"align":26003},"用于CUDA加速等GPU依赖任务。",[32,30188,30189,30192,30195],{},[47,30190,30191],{"align":26003},"-e NVIDIA_DRIVER_CAPABILITIES=all",[47,30193,30194],{"align":26003},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[47,30196,30197],{"align":26003},"确保容器内GPU功能完整67。",[32,30199,30200,30203,30206],{},[47,30201,30202],{"align":26003},"-dit",[47,30204,30205],{"align":26003},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[47,30207,30208],{"align":26003},"允许容器在后台运行并支持交互操作。",[32,30210,30211,30214,30217],{},[47,30212,30213],{"align":26003},"–privileged",[47,30215,30216],{"align":26003},"赋予容器完全主机权限（可访问设备、内核模块等）",[47,30218,30219],{"align":26003},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[32,30221,30222,30225,30228],{},[47,30223,30224],{"align":26003},"–net=host",[47,30226,30227],{"align":26003},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[47,30229,30230],{"align":26003},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[32,30232,30233,30236,30239],{},[47,30234,30235],{"align":26003},"–group-add audio–group-add video–group-add dialout",[47,30237,30238],{"align":26003},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[47,30240,30241],{"align":26003},"避免权限问题（如避免无法调用摄像头、麦克风）。",[32,30243,30244,30247,30250],{},[47,30245,30246],{"align":26003},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[47,30248,30249],{"align":26003},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[47,30251,30252],{"align":26003},"支持容器内运行图形界面应用（如OpenCV可视化）。",[32,30254,30255,30258,30261],{},[47,30256,30257],{"align":26003},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[47,30259,30260],{"align":26003},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[47,30262,30263],{"align":26003},"实现容器内图形显示。",[32,30265,30266,30269,30272],{},[47,30267,30268],{"align":26003},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[47,30270,30271],{"align":26003},"挂载X11认证文件（只读）",[47,30273,30274],{"align":26003},"确保容器有权连接宿主机显示服务。",[32,30276,30277,30280,30283],{},[47,30278,30279],{"align":26003},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[47,30281,30282],{"align":26003},"挂载Wayland显示协议相关目录",[47,30284,30285],{"align":26003},"支持Wayland协议的图形显示。",[32,30287,30288,30291,30294],{},[47,30289,30290],{"align":26003},"–ulimit nofile=1024:524288",[47,30292,30293],{"align":26003},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[47,30295,30296],{"align":26003},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[32,30298,30299,30302,30305],{},[47,30300,30301],{"align":26003},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[47,30303,30304],{"align":26003},"挂载宿主机用户目录到容器内同名路径",[47,30306,30307],{"align":26003},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[32,30309,30310,30313,30316],{},[47,30311,30312],{"align":26003},"-w \u002Fhome\u002Ftungchiahui",[47,30314,30315],{"align":26003},"设置容器启动后的默认工作目录",[47,30317,30318],{"align":26003},"直接进入项目路径，方便执行命令2324。",[32,30320,30321,30324,30327],{},[47,30322,30323],{"align":26003},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[47,30325,30326],{"align":26003},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[47,30328,30329],{"align":26003},"提供预配置的深度学习与机器人开发环境。",[19,30331,30332,30333,30335,30336,30339],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[50,30334,26840],{},"加不加",[50,30337,30338],{},"sudo -E","都无所谓。",[19,30341,30342,30343,30345,30346,30348,30349,30352,30353,30355],{},"用户已经被加到docker组了，不用",[50,30344,26840],{},"也行跑，其次，",[50,30347,26840],{},"运行的话，你的",[50,30350,30351],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[50,30354,30351],{},"更不可能变了。",[130,30357,30359],{"className":1830,"code":30358,"language":1832,"meta":135,"style":135},"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",[50,30360,30361,30374,30384,30394,30406,30413,30420,30427,30437,30446,30455,30469,30481,30493,30502,30512,30521,30536,30569,30596,30607,30614],{"__ignoreMap":135},[139,30362,30363,30365,30367,30369,30372],{"class":141,"line":142},[139,30364,26840],{"class":781},[139,30366,28580],{"class":160},[139,30368,29490],{"class":160},[139,30370,30371],{"class":153}," --name=ros_opencv_cuda",[139,30373,26941],{"class":153},[139,30375,30376,30379,30382],{"class":141,"line":210},[139,30377,30378],{"class":145},"--gpus ",[139,30380,30381],{"class":160},"all",[139,30383,26941],{"class":153},[139,30385,30386,30389,30392],{"class":141,"line":254},[139,30387,30388],{"class":145},"-e ",[139,30390,30391],{"class":160},"NVIDIA_DRIVER_CAPABILITIES=all",[139,30393,26941],{"class":153},[139,30395,30396,30398,30401,30404],{"class":141,"line":262},[139,30397,30388],{"class":145},[139,30399,30400],{"class":160},"DISPLAY=",[139,30402,30403],{"class":145},"$DISPLAY ",[139,30405,28436],{"class":153},[139,30407,30408,30411],{"class":141,"line":313},[139,30409,30410],{"class":145},"-dit ",[139,30412,28436],{"class":153},[139,30414,30415,30418],{"class":141,"line":462},[139,30416,30417],{"class":145},"--privileged ",[139,30419,28436],{"class":153},[139,30421,30422,30425],{"class":141,"line":474},[139,30423,30424],{"class":145},"--net=host ",[139,30426,28436],{"class":153},[139,30428,30429,30432,30435],{"class":141,"line":484},[139,30430,30431],{"class":145},"--group-add ",[139,30433,30434],{"class":160},"audio",[139,30436,26941],{"class":153},[139,30438,30439,30441,30444],{"class":141,"line":989},[139,30440,30431],{"class":145},[139,30442,30443],{"class":160},"video",[139,30445,26941],{"class":153},[139,30447,30448,30450,30453],{"class":141,"line":994},[139,30449,30431],{"class":145},[139,30451,30452],{"class":160},"dialout",[139,30454,26941],{"class":153},[139,30456,30457,30459,30462,30464,30467],{"class":141,"line":999},[139,30458,30388],{"class":145},[139,30460,30461],{"class":160},"XAUTHORITY=",[139,30463,30351],{"class":145},[139,30465,30466],{"class":160},"\u002F.Xauthority",[139,30468,26941],{"class":153},[139,30470,30471,30473,30476,30479],{"class":141,"line":1006},[139,30472,30388],{"class":145},[139,30474,30475],{"class":160},"WAYLAND_DISPLAY=",[139,30477,30478],{"class":145},"$WAYLAND_DISPLAY ",[139,30480,28436],{"class":153},[139,30482,30483,30485,30488,30491],{"class":141,"line":1027},[139,30484,30388],{"class":145},[139,30486,30487],{"class":160},"XDG_RUNTIME_DIR=",[139,30489,30490],{"class":145},"$XDG_RUNTIME_DIR ",[139,30492,28436],{"class":153},[139,30494,30495,30497,30500],{"class":141,"line":1040},[139,30496,30388],{"class":145},[139,30498,30499],{"class":160},"QT_QPA_PLATFORM=xcb",[139,30501,26941],{"class":153},[139,30503,30504,30507,30510],{"class":141,"line":2160},[139,30505,30506],{"class":145},"-v ",[139,30508,30509],{"class":160},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[139,30511,26941],{"class":153},[139,30513,30514,30516,30519],{"class":141,"line":2188},[139,30515,30506],{"class":145},[139,30517,30518],{"class":160},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[139,30520,26941],{"class":153},[139,30522,30523,30526,30529,30531,30534],{"class":141,"line":3944},[139,30524,30525],{"class":145},"-v $HOME",[139,30527,30528],{"class":160},"\u002F.Xauthority:",[139,30530,30351],{"class":145},[139,30532,30533],{"class":160},"\u002F.Xauthority:ro",[139,30535,26941],{"class":153},[139,30537,30538,30540,30543,30545,30548,30551,30553,30556,30558,30560,30562,30564,30567],{"class":141,"line":3963},[139,30539,30506],{"class":145},[139,30541,30542],{"class":160},"\u002Frun\u002Fuser\u002F",[139,30544,27362],{"class":145},[139,30546,30547],{"class":781},"id",[139,30549,30550],{"class":153}," -u",[139,30552,2867],{"class":145},[139,30554,30555],{"class":160},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[139,30557,27362],{"class":145},[139,30559,30547],{"class":781},[139,30561,30550],{"class":153},[139,30563,2867],{"class":145},[139,30565,30566],{"class":160},"\u002Fwayland-0",[139,30568,26941],{"class":153},[139,30570,30571,30573,30575,30577,30579,30581,30583,30586,30588,30590,30592,30594],{"class":141,"line":3968},[139,30572,30506],{"class":145},[139,30574,30542],{"class":160},[139,30576,27362],{"class":145},[139,30578,30547],{"class":781},[139,30580,30550],{"class":153},[139,30582,2867],{"class":145},[139,30584,30585],{"class":160},":\u002Frun\u002Fuser\u002F",[139,30587,27362],{"class":145},[139,30589,30547],{"class":781},[139,30591,30550],{"class":153},[139,30593,2120],{"class":145},[139,30595,28436],{"class":153},[139,30597,30598,30600,30602,30605],{"class":141,"line":3982},[139,30599,30525],{"class":145},[139,30601,3294],{"class":160},[139,30603,30604],{"class":145},"$HOME ",[139,30606,28436],{"class":153},[139,30608,30609,30612],{"class":141,"line":3987},[139,30610,30611],{"class":145},"-w $HOME ",[139,30613,28436],{"class":153},[139,30615,30616],{"class":141,"line":4014},[139,30617,30618],{"class":145},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30620,11299],{},[1760,30622,30623,30631,30634,30637],{},[1763,30624,30625,16066,30627,30630],{},[50,30626,30391],{},[50,30628,30629],{},"--gpus all","没有英伟达显卡请注释。",[1763,30632,30633],{},"--name后面请自己为容器起名。",[1763,30635,30636],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1763,30638,30639,30640,170],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25820,30641,30642],{},[1674,30643,30644],{},"请不要加",[130,30646,30648],{"className":1830,"code":30647,"language":1832,"meta":135,"style":135},"--ulimit nofile=1024:524288 \\\n",[50,30649,30650],{"__ignoreMap":135},[139,30651,30652,30655,30658],{"class":141,"line":142},[139,30653,30654],{"class":781},"--ulimit",[139,30656,30657],{"class":160}," nofile=1024:524288",[139,30659,26941],{"class":153},[19,30661,30662,30663,30668],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25820,30664,30665],{},[1674,30666,30667],{},"不建议","**.**",[130,30670,30672],{"className":1830,"code":30671,"language":1832,"meta":135,"style":135},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[50,30673,30674,30701,30710],{"__ignoreMap":135},[139,30675,30676,30679,30682,30684,30686,30688,30690,30692,30694,30697,30699],{"class":141,"line":142},[139,30677,30678],{"class":781},"--user",[139,30680,30681],{"class":145}," $(",[139,30683,30547],{"class":781},[139,30685,30550],{"class":153},[139,30687,2867],{"class":145},[139,30689,3294],{"class":160},[139,30691,27362],{"class":145},[139,30693,30547],{"class":781},[139,30695,30696],{"class":153}," -g",[139,30698,2120],{"class":145},[139,30700,28436],{"class":153},[139,30702,30703,30705,30708],{"class":141,"line":210},[139,30704,30506],{"class":145},[139,30706,30707],{"class":160},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[139,30709,26941],{"class":153},[139,30711,30712,30714,30717],{"class":141,"line":254},[139,30713,30506],{"class":145},[139,30715,30716],{"class":160},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[139,30718,26941],{"class":153},[2348,30720,30721],{},"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":135,"searchDepth":210,"depth":210,"links":30723},[30724,30725,30726],{"id":29723,"depth":254,"text":29724},{"id":29733,"depth":254,"text":29734},{"id":30144,"depth":254,"text":30147},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29715,"description":135},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30733,"title":30734,"body":30735,"description":135,"extension":2385,"meta":32358,"navigation":842,"path":32359,"seo":32360,"stem":32361,"__hash__":32362},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30736,"toc":32353},[30737,30740,30744,30747,30969,30973,30977,30980,31086,31091,31094,31099,31102,31107,31110,31115,31118,31130,31133,31138,31145,31173,31180,31256,31261,31264,31287,31289,31364,31369,31372,31376,31384,31389,31394,31398,31409,31415,31418,31421,31445,31448,31451,31479,31482,31485,31950,31953,31958,31963,31967,31990,31995,31999,32003,32006,32009,32012,32039,32042,32045,32063,32066,32069,32091,32099,32104,32109,32113,32116,32119,32122,32125,32170,32173,32191,32194,32199,32202,32223,32226,32282,32285,32290,32294,32297,32304,32307,32310,32315,32318,32334,32337,32350],[10,30738,30734],{"id":30739},"_6手动创建docker镜像",[1217,30741,30743],{"id":30742},"_61dockerfile","6.1.DockerFile",[19,30745,30746],{},"常用命令：",[26,30748,30749,30760],{},[29,30750,30751],{},[32,30752,30753,30756,30758],{},[35,30754,30755],{"align":26003},"指令",[35,30757,40],{"align":26003},[35,30759,29752],{"align":26003},[42,30761,30762,30772,30788,30799,30810,30821,30832,30843,30854,30868,30882,30893,30907,30918,30929,30943,30958],{},[32,30763,30764,30766,30769],{},[47,30765,29630],{"align":26003},[47,30767,30768],{"align":26003},"指定基础镜像，是 Dockerfile 的起点",[47,30770,30771],{"align":26003},"FROM ubuntu:22.04",[32,30773,30774,30777,30780],{},[47,30775,30776],{"align":26003},"LABEL",[47,30778,30779],{"align":26003},"添加元数据（如作者、版本等）",[47,30781,30782,30783,30787],{"align":26003},"LABEL maintainer=”",[2680,30784,30786],{"href":30785},"mailto:you@example.com","you@example.com","”",[32,30789,30790,30793,30796],{},[47,30791,30792],{"align":26003},"ENV",[47,30794,30795],{"align":26003},"设置环境变量",[47,30797,30798],{"align":26003},"ENV PORT=8080",[32,30800,30801,30804,30807],{},[47,30802,30803],{"align":26003},"ARG",[47,30805,30806],{"align":26003},"构建参数，只在构建期间可用",[47,30808,30809],{"align":26003},"ARG VERSION=1.0",[32,30811,30812,30815,30818],{},[47,30813,30814],{"align":26003},"RUN",[47,30816,30817],{"align":26003},"构建镜像时运行命令",[47,30819,30820],{"align":26003},"RUN apt-get update && apt-get install -y curl",[32,30822,30823,30826,30829],{},[47,30824,30825],{"align":26003},"COPY",[47,30827,30828],{"align":26003},"复制文件到镜像中",[47,30830,30831],{"align":26003},"COPY . \u002Fapp",[32,30833,30834,30837,30840],{},[47,30835,30836],{"align":26003},"ADD",[47,30838,30839],{"align":26003},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[47,30841,30842],{"align":26003},"ADD archive.tar.gz \u002Fdata\u002F",[32,30844,30845,30848,30851],{},[47,30846,30847],{"align":26003},"WORKDIR",[47,30849,30850],{"align":26003},"设置工作目录",[47,30852,30853],{"align":26003},"WORKDIR \u002Fopt",[32,30855,30856,30859,30862],{},[47,30857,30858],{"align":26003},"CMD",[47,30860,30861],{"align":26003},"设置容器启动时默认命令（可被 docker run 覆盖）",[47,30863,30864,30865],{"align":26003},"CMD ",[139,30866,30867],{},"“node”, “index.js”",[32,30869,30870,30873,30876],{},[47,30871,30872],{"align":26003},"ENTRYPOINT",[47,30874,30875],{"align":26003},"设置容器启动时固定命令（通常用于 CLI 工具等）",[47,30877,30878,30879],{"align":26003},"ENTRYPOINT ",[139,30880,30881],{},"“python3”",[32,30883,30884,30887,30890],{},[47,30885,30886],{"align":26003},"EXPOSE",[47,30888,30889],{"align":26003},"声明镜像内服务监听的端口（不会自动映射）",[47,30891,30892],{"align":26003},"EXPOSE 80",[32,30894,30895,30898,30901],{},[47,30896,30897],{"align":26003},"VOLUME",[47,30899,30900],{"align":26003},"声明数据卷挂载点",[47,30902,30903,30904],{"align":26003},"VOLUME ",[139,30905,30906],{},"“\u002Fdata”",[32,30908,30909,30912,30915],{},[47,30910,30911],{"align":26003},"USER",[47,30913,30914],{"align":26003},"设置后续命令执行的用户",[47,30916,30917],{"align":26003},"USER appuser",[32,30919,30920,30923,30926],{},[47,30921,30922],{"align":26003},"ONBUILD",[47,30924,30925],{"align":26003},"当镜像作为其他镜像基础镜像时触发的构建指令",[47,30927,30928],{"align":26003},"ONBUILD COPY . \u002Fsrc",[32,30930,30931,30934,30937],{},[47,30932,30933],{"align":26003},"SHELL",[47,30935,30936],{"align":26003},"更改默认 shell，比如将 sh -c 改为 bash -c",[47,30938,30939,30940],{"align":26003},"SHELL ",[139,30941,30942],{},"“\u002Fbin\u002Fbash”, “-c”",[32,30944,30945,30948,30951],{},[47,30946,30947],{"align":26003},"HEALTHCHECK",[47,30949,30950],{"align":26003},"定义容器运行时的健康检查命令",[47,30952,30953,30954],{"align":26003},"`HEALTHCHECK CMD curl –fail ",[2680,30955,30956],{"href":30956,"rel":30957},"http:\u002F\u002Flocalhost:8080",[26128],[32,30959,30960,30963,30966],{},[47,30961,30962],{"align":26003},"STOPSIGNAL",[47,30964,30965],{"align":26003},"容器停止时发送的信号",[47,30967,30968],{"align":26003},"STOPSIGNAL SIGKILL",[1217,30970,30972],{"id":30971},"_62自己创建容器","6.2.自己创建容器",[24265,30974,30976],{"id":30975},"_621手动创建","6.2.1.手动创建",[19,30978,30979],{},"在x86电脑上编译x86的：",[130,30981,30983],{"className":1830,"code":30982,"language":1832,"meta":135,"style":135},"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",[50,30984,30985,31001,31005,31018,31022,31035,31039,31052,31056,31069,31073],{"__ignoreMap":135},[139,30986,30987,30989,30992,30995,30998],{"class":141,"line":142},[139,30988,28813],{"class":781},[139,30990,30991],{"class":160}," build",[139,30993,30994],{"class":153}," -t",[139,30996,30997],{"class":160}," ros-melodic-cuda118-cudnn8-bionic:latest",[139,30999,31000],{"class":160}," .\n",[139,31002,31003],{"class":141,"line":210},[139,31004,843],{"emptyLinePlaceholder":842},[139,31006,31007,31009,31011,31013,31016],{"class":141,"line":254},[139,31008,28813],{"class":781},[139,31010,30991],{"class":160},[139,31012,30994],{"class":153},[139,31014,31015],{"class":160}," ros-noetic-focal:latest",[139,31017,31000],{"class":160},[139,31019,31020],{"class":141,"line":262},[139,31021,843],{"emptyLinePlaceholder":842},[139,31023,31024,31026,31028,31030,31033],{"class":141,"line":313},[139,31025,28813],{"class":781},[139,31027,30991],{"class":160},[139,31029,30994],{"class":153},[139,31031,31032],{"class":160}," ros-humble-jammy:latest",[139,31034,31000],{"class":160},[139,31036,31037],{"class":141,"line":462},[139,31038,843],{"emptyLinePlaceholder":842},[139,31040,31041,31043,31045,31047,31050],{"class":141,"line":474},[139,31042,28813],{"class":781},[139,31044,30991],{"class":160},[139,31046,30994],{"class":153},[139,31048,31049],{"class":160}," ros-jazzy-noble:latest",[139,31051,31000],{"class":160},[139,31053,31054],{"class":141,"line":484},[139,31055,843],{"emptyLinePlaceholder":842},[139,31057,31058,31060,31062,31064,31067],{"class":141,"line":989},[139,31059,28813],{"class":781},[139,31061,30991],{"class":160},[139,31063,30994],{"class":153},[139,31065,31066],{"class":160}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[139,31068,31000],{"class":160},[139,31070,31071],{"class":141,"line":994},[139,31072,843],{"emptyLinePlaceholder":842},[139,31074,31075,31077,31079,31081,31084],{"class":141,"line":999},[139,31076,28813],{"class":781},[139,31078,30991],{"class":160},[139,31080,30994],{"class":153},[139,31082,31083],{"class":160}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[139,31085,31000],{"class":160},[19,31087,31088],{},[3760,31089],{"alt":135,"src":31090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31092,31093],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31095,31096],{},[3760,31097],{"alt":135,"src":31098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31100,31101],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1760,31103,31104],{},[1763,31105,31106],{},"创建 Docker Hub 账户",[19,31108,31109],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1760,31111,31112],{"start":210},[1763,31113,31114],{},"登录 Docker Hub",[19,31116,31117],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[130,31119,31121],{"className":1830,"code":31120,"language":1832,"meta":135,"style":135},"docker login\n",[50,31122,31123],{"__ignoreMap":135},[139,31124,31125,31127],{"class":141,"line":142},[139,31126,28813],{"class":781},[139,31128,31129],{"class":160}," login\n",[19,31131,31132],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1760,31134,31135],{},[1763,31136,31137],{},"为你的镜像打标签",[19,31139,31140,31141,31144],{},"Docker Hub 使用 ",[50,31142,31143],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[130,31146,31148],{"className":1830,"code":31147,"language":1832,"meta":135,"style":135},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[50,31149,31150],{"__ignoreMap":135},[139,31151,31152,31154,31157,31159,31162,31165,31168,31170],{"class":141,"line":142},[139,31153,28813],{"class":781},[139,31155,31156],{"class":160}," tag",[139,31158,31049],{"class":160},[139,31160,31161],{"class":149}," \u003C",[139,31163,31164],{"class":160},"你的用户",[139,31166,31167],{"class":145},"名",[139,31169,958],{"class":149},[139,31171,31172],{"class":160},"\u002Fros-jazzy-noble:latest\n",[19,31174,31175,31176,31179],{},"例如，如果你的 Docker Hub 用户名是 ",[50,31177,31178],{},"tungchiahui","，你应该执行：",[130,31181,31183],{"className":1830,"code":31182,"language":1832,"meta":135,"style":135},"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",[50,31184,31185,31196,31200,31211,31215,31226,31230,31241,31245],{"__ignoreMap":135},[139,31186,31187,31189,31191,31193],{"class":141,"line":142},[139,31188,28813],{"class":781},[139,31190,31156],{"class":160},[139,31192,31015],{"class":160},[139,31194,31195],{"class":160}," tungchiahui\u002Fros-noetic-focal:latest\n",[139,31197,31198],{"class":141,"line":210},[139,31199,843],{"emptyLinePlaceholder":842},[139,31201,31202,31204,31206,31208],{"class":141,"line":254},[139,31203,28813],{"class":781},[139,31205,31156],{"class":160},[139,31207,31032],{"class":160},[139,31209,31210],{"class":160}," tungchiahui\u002Fros-humble-jammy:latest\n",[139,31212,31213],{"class":141,"line":262},[139,31214,843],{"emptyLinePlaceholder":842},[139,31216,31217,31219,31221,31223],{"class":141,"line":313},[139,31218,28813],{"class":781},[139,31220,31156],{"class":160},[139,31222,31049],{"class":160},[139,31224,31225],{"class":160}," tungchiahui\u002Fros-jazzy-noble:latest\n",[139,31227,31228],{"class":141,"line":462},[139,31229,843],{"emptyLinePlaceholder":842},[139,31231,31232,31234,31236,31238],{"class":141,"line":474},[139,31233,28813],{"class":781},[139,31235,31156],{"class":160},[139,31237,31066],{"class":160},[139,31239,31240],{"class":160}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[139,31242,31243],{"class":141,"line":484},[139,31244,843],{"emptyLinePlaceholder":842},[139,31246,31247,31249,31251,31253],{"class":141,"line":989},[139,31248,28813],{"class":781},[139,31250,31156],{"class":160},[139,31252,31083],{"class":160},[139,31254,31255],{"class":160}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1760,31257,31258],{"start":210},[1763,31259,31260],{},"推送镜像到 Docker Hub",[19,31262,31263],{},"使用以下命令将镜像推送到 Docker Hub：",[130,31265,31267],{"className":1830,"code":31266,"language":1832,"meta":135,"style":135},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[50,31268,31269],{"__ignoreMap":135},[139,31270,31271,31273,31276,31278,31280,31282,31284],{"class":141,"line":142},[139,31272,28813],{"class":781},[139,31274,31275],{"class":160}," push",[139,31277,31161],{"class":149},[139,31279,31164],{"class":160},[139,31281,31167],{"class":145},[139,31283,958],{"class":149},[139,31285,31286],{"class":160},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31288,16904],{},[130,31290,31292],{"className":1830,"code":31291,"language":1832,"meta":135,"style":135},"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",[50,31293,31294,31302,31306,31314,31318,31326,31330,31339,31343,31351,31355],{"__ignoreMap":135},[139,31295,31296,31298,31300],{"class":141,"line":142},[139,31297,28813],{"class":781},[139,31299,31275],{"class":160},[139,31301,31195],{"class":160},[139,31303,31304],{"class":141,"line":210},[139,31305,843],{"emptyLinePlaceholder":842},[139,31307,31308,31310,31312],{"class":141,"line":254},[139,31309,28813],{"class":781},[139,31311,31275],{"class":160},[139,31313,31210],{"class":160},[139,31315,31316],{"class":141,"line":262},[139,31317,843],{"emptyLinePlaceholder":842},[139,31319,31320,31322,31324],{"class":141,"line":313},[139,31321,28813],{"class":781},[139,31323,31275],{"class":160},[139,31325,31225],{"class":160},[139,31327,31328],{"class":141,"line":462},[139,31329,843],{"emptyLinePlaceholder":842},[139,31331,31332,31334,31336],{"class":141,"line":474},[139,31333,28813],{"class":781},[139,31335,31275],{"class":160},[139,31337,31338],{"class":160}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[139,31340,31341],{"class":141,"line":484},[139,31342,843],{"emptyLinePlaceholder":842},[139,31344,31345,31347,31349],{"class":141,"line":989},[139,31346,28813],{"class":781},[139,31348,31275],{"class":160},[139,31350,31255],{"class":160},[139,31352,31353],{"class":141,"line":994},[139,31354,843],{"emptyLinePlaceholder":842},[139,31356,31357,31359,31361],{"class":141,"line":999},[139,31358,28813],{"class":781},[139,31360,31275],{"class":160},[139,31362,31363],{"class":160}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1760,31365,31366],{"start":254},[1763,31367,31368],{},"验证推送成功",[19,31370,31371],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31373,31374],{},[1674,31375,6064],{},[3437,31377,31378,31381],{},[1763,31379,31380],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1763,31382,31383],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31385,31386],{},[3760,31387],{"alt":135,"src":31388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31390,31391],{},[3760,31392],{"alt":135,"src":31393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24265,31395,31397],{"id":31396},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31399,31400,31401,31404,31405,31408],{},"如果您想在 ",[1674,31402,31403],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1674,31406,31407],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31410,31411,31412],{},"1. ",[1674,31413,31414],{},"启用 Docker 跨平台构建",[19,31416,31417],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31419,31420],{},"第一步：启用 buildx（只需执行一次）",[130,31422,31424],{"className":1830,"code":31423,"language":1832,"meta":135,"style":135},"docker buildx create --name multiarch_builder --use\n",[50,31425,31426],{"__ignoreMap":135},[139,31427,31428,31430,31433,31436,31439,31442],{"class":141,"line":142},[139,31429,28813],{"class":781},[139,31431,31432],{"class":160}," buildx",[139,31434,31435],{"class":160}," create",[139,31437,31438],{"class":153}," --name",[139,31440,31441],{"class":160}," multiarch_builder",[139,31443,31444],{"class":153}," --use\n",[19,31446,31447],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31449,31450],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[130,31452,31454],{"className":1830,"code":31453,"language":1832,"meta":135,"style":135},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[50,31455,31456],{"__ignoreMap":135},[139,31457,31458,31460,31462,31464,31467,31470,31473,31476],{"class":141,"line":142},[139,31459,28813],{"class":781},[139,31461,29490],{"class":160},[139,31463,29493],{"class":153},[139,31465,31466],{"class":153}," --privileged",[139,31468,31469],{"class":160}," multiarch\u002Fqemu-user-static",[139,31471,31472],{"class":153}," --reset",[139,31474,31475],{"class":153}," -p",[139,31477,31478],{"class":160}," yes\n",[19,31480,31481],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31483,31484],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[130,31486,31488],{"className":1830,"code":31487,"language":1832,"meta":135,"style":135},"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",[50,31489,31490,31532,31536,31541,31551,31561,31570,31576,31580,31584,31594,31602,31611,31617,31621,31625,31635,31643,31652,31658,31662,31666,31676,31684,31693,31699,31703,31707,31717,31725,31734,31740,31744,31748,31758,31766,31775,31781,31785,31789,31799,31807,31816,31822,31826,31830,31840,31848,31857,31863,31867,31871,31881,31889,31898,31904,31908,31912,31923,31931,31940,31946],{"__ignoreMap":135},[139,31491,31492,31494,31496,31498,31501,31504,31506,31508,31511,31513,31515,31517,31519,31522,31525,31527,31530],{"class":141,"line":142},[139,31493,28813],{"class":781},[139,31495,31432],{"class":160},[139,31497,30991],{"class":160},[139,31499,31500],{"class":153}," --platform",[139,31502,31503],{"class":160}," linux\u002Famd64,linux\u002Farm64",[139,31505,30994],{"class":153},[139,31507,31161],{"class":149},[139,31509,31510],{"class":160},"你的镜像",[139,31512,31167],{"class":145},[139,31514,958],{"class":149},[139,31516,3294],{"class":160},[139,31518,796],{"class":149},[139,31520,31521],{"class":160},"标",[139,31523,31524],{"class":145},"签",[139,31526,958],{"class":149},[139,31528,31529],{"class":153}," --push",[139,31531,31000],{"class":160},[139,31533,31534],{"class":141,"line":210},[139,31535,843],{"emptyLinePlaceholder":842},[139,31537,31538],{"class":141,"line":254},[139,31539,31540],{"class":2512},"# 例子：\n",[139,31542,31543,31545,31547,31549],{"class":141,"line":262},[139,31544,28813],{"class":781},[139,31546,31432],{"class":160},[139,31548,30991],{"class":160},[139,31550,26941],{"class":153},[139,31552,31553,31556,31559],{"class":141,"line":313},[139,31554,31555],{"class":145},"--platform ",[139,31557,31558],{"class":160},"linux\u002Famd64,linux\u002Farm64",[139,31560,26941],{"class":153},[139,31562,31563,31565,31568],{"class":141,"line":462},[139,31564,30994],{"class":153},[139,31566,31567],{"class":160}," tungchiahui\u002Fros:noetic-focal",[139,31569,26941],{"class":153},[139,31571,31572,31574],{"class":141,"line":474},[139,31573,31529],{"class":153},[139,31575,26941],{"class":153},[139,31577,31578],{"class":141,"line":484},[139,31579,31000],{"class":160},[139,31581,31582],{"class":141,"line":989},[139,31583,843],{"emptyLinePlaceholder":842},[139,31585,31586,31588,31590,31592],{"class":141,"line":994},[139,31587,28813],{"class":781},[139,31589,31432],{"class":160},[139,31591,30991],{"class":160},[139,31593,26941],{"class":153},[139,31595,31596,31598,31600],{"class":141,"line":999},[139,31597,31555],{"class":145},[139,31599,31558],{"class":160},[139,31601,26941],{"class":153},[139,31603,31604,31606,31609],{"class":141,"line":1006},[139,31605,30994],{"class":153},[139,31607,31608],{"class":160}," tungchiahui\u002Fros:humble-jammy",[139,31610,26941],{"class":153},[139,31612,31613,31615],{"class":141,"line":1027},[139,31614,31529],{"class":153},[139,31616,26941],{"class":153},[139,31618,31619],{"class":141,"line":1040},[139,31620,31000],{"class":160},[139,31622,31623],{"class":141,"line":2160},[139,31624,843],{"emptyLinePlaceholder":842},[139,31626,31627,31629,31631,31633],{"class":141,"line":2188},[139,31628,28813],{"class":781},[139,31630,31432],{"class":160},[139,31632,30991],{"class":160},[139,31634,26941],{"class":153},[139,31636,31637,31639,31641],{"class":141,"line":3944},[139,31638,31555],{"class":145},[139,31640,31558],{"class":160},[139,31642,26941],{"class":153},[139,31644,31645,31647,31650],{"class":141,"line":3963},[139,31646,30994],{"class":153},[139,31648,31649],{"class":160}," tungchiahui\u002Fros:jazzy-noble",[139,31651,26941],{"class":153},[139,31653,31654,31656],{"class":141,"line":3968},[139,31655,31529],{"class":153},[139,31657,26941],{"class":153},[139,31659,31660],{"class":141,"line":3982},[139,31661,31000],{"class":160},[139,31663,31664],{"class":141,"line":3987},[139,31665,843],{"emptyLinePlaceholder":842},[139,31667,31668,31670,31672,31674],{"class":141,"line":4014},[139,31669,28580],{"class":781},[139,31671,31432],{"class":160},[139,31673,30991],{"class":160},[139,31675,26941],{"class":153},[139,31677,31678,31680,31682],{"class":141,"line":4019},[139,31679,31555],{"class":145},[139,31681,31558],{"class":160},[139,31683,26941],{"class":153},[139,31685,31686,31688,31691],{"class":141,"line":4036},[139,31687,30994],{"class":153},[139,31689,31690],{"class":160}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[139,31692,26941],{"class":153},[139,31694,31695,31697],{"class":141,"line":4041},[139,31696,31529],{"class":153},[139,31698,26941],{"class":153},[139,31700,31701],{"class":141,"line":4046},[139,31702,31000],{"class":160},[139,31704,31705],{"class":141,"line":4051},[139,31706,843],{"emptyLinePlaceholder":842},[139,31708,31709,31711,31713,31715],{"class":141,"line":4065},[139,31710,28813],{"class":781},[139,31712,31432],{"class":160},[139,31714,30991],{"class":160},[139,31716,26941],{"class":153},[139,31718,31719,31721,31723],{"class":141,"line":4070},[139,31720,31555],{"class":145},[139,31722,31558],{"class":160},[139,31724,26941],{"class":153},[139,31726,31727,31729,31732],{"class":141,"line":4860},[139,31728,30994],{"class":153},[139,31730,31731],{"class":160}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[139,31733,26941],{"class":153},[139,31735,31736,31738],{"class":141,"line":4874},[139,31737,31529],{"class":153},[139,31739,26941],{"class":153},[139,31741,31742],{"class":141,"line":4882},[139,31743,31000],{"class":160},[139,31745,31746],{"class":141,"line":4887},[139,31747,843],{"emptyLinePlaceholder":842},[139,31749,31750,31752,31754,31756],{"class":141,"line":4893},[139,31751,28580],{"class":781},[139,31753,31432],{"class":160},[139,31755,30991],{"class":160},[139,31757,26941],{"class":153},[139,31759,31760,31762,31764],{"class":141,"line":4899},[139,31761,31555],{"class":145},[139,31763,31558],{"class":160},[139,31765,26941],{"class":153},[139,31767,31768,31770,31773],{"class":141,"line":4904},[139,31769,30994],{"class":153},[139,31771,31772],{"class":160}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[139,31774,26941],{"class":153},[139,31776,31777,31779],{"class":141,"line":10222},[139,31778,31529],{"class":153},[139,31780,26941],{"class":153},[139,31782,31783],{"class":141,"line":10246},[139,31784,31000],{"class":160},[139,31786,31787],{"class":141,"line":10251},[139,31788,843],{"emptyLinePlaceholder":842},[139,31790,31791,31793,31795,31797],{"class":141,"line":10257},[139,31792,28813],{"class":781},[139,31794,31432],{"class":160},[139,31796,30991],{"class":160},[139,31798,26941],{"class":153},[139,31800,31801,31803,31805],{"class":141,"line":10284},[139,31802,31555],{"class":145},[139,31804,31558],{"class":160},[139,31806,26941],{"class":153},[139,31808,31809,31811,31814],{"class":141,"line":10289},[139,31810,30994],{"class":153},[139,31812,31813],{"class":160}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[139,31815,26941],{"class":153},[139,31817,31818,31820],{"class":141,"line":10295},[139,31819,31529],{"class":153},[139,31821,26941],{"class":153},[139,31823,31824],{"class":141,"line":10307},[139,31825,31000],{"class":160},[139,31827,31828],{"class":141,"line":10319},[139,31829,843],{"emptyLinePlaceholder":842},[139,31831,31832,31834,31836,31838],{"class":141,"line":10331},[139,31833,28813],{"class":781},[139,31835,31432],{"class":160},[139,31837,30991],{"class":160},[139,31839,26941],{"class":153},[139,31841,31842,31844,31846],{"class":141,"line":11990},[139,31843,31555],{"class":145},[139,31845,31558],{"class":160},[139,31847,26941],{"class":153},[139,31849,31850,31852,31855],{"class":141,"line":12015},[139,31851,30994],{"class":153},[139,31853,31854],{"class":160}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[139,31856,26941],{"class":153},[139,31858,31859,31861],{"class":141,"line":12038},[139,31860,31529],{"class":153},[139,31862,26941],{"class":153},[139,31864,31865],{"class":141,"line":12062},[139,31866,31000],{"class":160},[139,31868,31869],{"class":141,"line":12067},[139,31870,843],{"emptyLinePlaceholder":842},[139,31872,31873,31875,31877,31879],{"class":141,"line":12072},[139,31874,28580],{"class":781},[139,31876,31432],{"class":160},[139,31878,30991],{"class":160},[139,31880,26941],{"class":153},[139,31882,31883,31885,31887],{"class":141,"line":12077},[139,31884,31555],{"class":145},[139,31886,31558],{"class":160},[139,31888,26941],{"class":153},[139,31890,31891,31893,31896],{"class":141,"line":12086},[139,31892,30994],{"class":153},[139,31894,31895],{"class":160}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[139,31897,26941],{"class":153},[139,31899,31900,31902],{"class":141,"line":12091},[139,31901,31529],{"class":153},[139,31903,26941],{"class":153},[139,31905,31906],{"class":141,"line":12097},[139,31907,31000],{"class":160},[139,31909,31910],{"class":141,"line":12118},[139,31911,843],{"emptyLinePlaceholder":842},[139,31913,31914,31917,31919,31921],{"class":141,"line":12124},[139,31915,31916],{"class":781},"  docker",[139,31918,31432],{"class":160},[139,31920,30991],{"class":160},[139,31922,26941],{"class":153},[139,31924,31925,31927,31929],{"class":141,"line":12138},[139,31926,31555],{"class":145},[139,31928,31558],{"class":160},[139,31930,26941],{"class":153},[139,31932,31933,31935,31938],{"class":141,"line":12144},[139,31934,30994],{"class":153},[139,31936,31937],{"class":160}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[139,31939,26941],{"class":153},[139,31941,31942,31944],{"class":141,"line":12171},[139,31943,31529],{"class":153},[139,31945,26941],{"class":153},[139,31947,31948],{"class":141,"line":12180},[139,31949,31000],{"class":160},[19,31951,31952],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31954,31955],{},[3760,31956],{"alt":135,"src":31957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31959,31960],{},[3760,31961],{"alt":135,"src":31962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24265,31964,31966],{"id":31965},"_623清除构建缓存","6.2.3.清除构建缓存",[130,31968,31970],{"className":1830,"code":31969,"language":1832,"meta":135,"style":135},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[50,31971,31972,31977],{"__ignoreMap":135},[139,31973,31974],{"class":141,"line":142},[139,31975,31976],{"class":2512},"# 清理BuildKit构建缓存\n",[139,31978,31979,31981,31984,31987],{"class":141,"line":210},[139,31980,28813],{"class":781},[139,31982,31983],{"class":160}," builder",[139,31985,31986],{"class":160}," prune",[139,31988,31989],{"class":153}," -f\n",[19,31991,31992],{},[3760,31993],{"alt":135,"src":31994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1217,31996,31998],{"id":31997},"_63补充","6.3.补充",[24265,32000,32002],{"id":32001},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32004,32005],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32007,32008],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32010,32011],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[130,32013,32015],{"className":1830,"code":32014,"language":1832,"meta":135,"style":135},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[50,32016,32017,32024],{"__ignoreMap":135},[139,32018,32019,32021],{"class":141,"line":142},[139,32020,29630],{"class":781},[139,32022,32023],{"class":160}," nginx\n",[139,32025,32026,32028,32031,32034,32036],{"class":141,"line":210},[139,32027,30814],{"class":781},[139,32029,32030],{"class":160}," echo",[139,32032,32033],{"class":160}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[139,32035,1917],{"class":149},[139,32037,32038],{"class":160}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32040,32041],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32043,32044],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[130,32046,32048],{"className":1830,"code":32047,"language":1832,"meta":135,"style":135},"docker build -t nginx:tuling .\n",[50,32049,32050],{"__ignoreMap":135},[139,32051,32052,32054,32056,32058,32061],{"class":141,"line":142},[139,32053,28813],{"class":781},[139,32055,30991],{"class":160},[139,32057,30994],{"class":153},[139,32059,32060],{"class":160}," nginx:tuling",[139,32062,31000],{"class":160},[19,32064,32065],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32067,32068],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[130,32070,32072],{"className":1830,"code":32071,"language":1832,"meta":135,"style":135},"docker run -d -p 92:80 nginx:tuling\n",[50,32073,32074],{"__ignoreMap":135},[139,32075,32076,32078,32080,32083,32085,32088],{"class":141,"line":142},[139,32077,28813],{"class":781},[139,32079,29490],{"class":160},[139,32081,32082],{"class":153}," -d",[139,32084,31475],{"class":153},[139,32086,32087],{"class":160}," 92:80",[139,32089,32090],{"class":160}," nginx:tuling\n",[19,32092,32093,32094],{},"4、访问 ",[2680,32095,32098],{"href":32096,"rel":32097},"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",[26128],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32100,32101],{},[3760,32102],{"alt":135,"src":32103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32105,32106],{},[3760,32107],{"alt":135,"src":32108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24265,32110,32112],{"id":32111},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32114,32115],{},"只需要知道大体流程即可",[19,32117,32118],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32120,32121],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32123,32124],{},"2、在Dockerfile中添加以下内容",[130,32126,32128],{"className":28352,"code":32127,"language":28354,"meta":135,"style":135},"# 基于哪个镜像\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",[50,32129,32130,32135,32140,32145,32150,32155,32160,32165],{"__ignoreMap":135},[139,32131,32132],{"class":141,"line":142},[139,32133,32134],{},"# 基于哪个镜像\n",[139,32136,32137],{"class":141,"line":210},[139,32138,32139],{},"From java:8\n",[139,32141,32142],{"class":141,"line":254},[139,32143,32144],{},"# 复制文件到容器\n",[139,32146,32147],{"class":141,"line":262},[139,32148,32149],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[139,32151,32152],{"class":141,"line":313},[139,32153,32154],{},"# 声明需要暴露的端口\n",[139,32156,32157],{"class":141,"line":462},[139,32158,32159],{},"EXPOSE 8877\n",[139,32161,32162],{"class":141,"line":474},[139,32163,32164],{},"# 配置容器启动后执行的命令\n",[139,32166,32167],{"class":141,"line":484},[139,32168,32169],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32171,32172],{},"3、使用docker build命令构建镜像",[130,32174,32176],{"className":1830,"code":32175,"language":1832,"meta":135,"style":135},"docker build -t tulingmall-member:0.0.5 .\n",[50,32177,32178],{"__ignoreMap":135},[139,32179,32180,32182,32184,32186,32189],{"class":141,"line":142},[139,32181,28813],{"class":781},[139,32183,30991],{"class":160},[139,32185,30994],{"class":153},[139,32187,32188],{"class":160}," tulingmall-member:0.0.5",[139,32190,31000],{"class":160},[19,32192,32193],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32195,32196],{},[3760,32197],{"alt":135,"src":32198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32200,32201],{},"4、启动镜像，加-d可在后台启动",[130,32203,32205],{"className":1830,"code":32204,"language":1832,"meta":135,"style":135},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[50,32206,32207],{"__ignoreMap":135},[139,32208,32209,32211,32213,32215,32217,32220],{"class":141,"line":142},[139,32210,28813],{"class":781},[139,32212,29490],{"class":160},[139,32214,32082],{"class":153},[139,32216,31475],{"class":153},[139,32218,32219],{"class":160}," 8877:8877",[139,32221,32222],{"class":160}," tulingmall-member:0.0.5\n",[19,32224,32225],{},"加上JVM参数：",[130,32227,32229],{"className":1830,"code":32228,"language":1832,"meta":135,"style":135},"# --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",[50,32230,32231,32236,32251,32261,32270,32277],{"__ignoreMap":135},[139,32232,32233],{"class":141,"line":142},[139,32234,32235],{"class":2512},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[139,32237,32238,32240,32242,32245,32247,32249],{"class":141,"line":210},[139,32239,28813],{"class":781},[139,32241,29490],{"class":160},[139,32243,32244],{"class":153},"  -d",[139,32246,31475],{"class":153},[139,32248,32219],{"class":160},[139,32250,26941],{"class":153},[139,32252,32253,32255,32258],{"class":141,"line":254},[139,32254,30388],{"class":145},[139,32256,32257],{"class":160},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[139,32259,32260],{"class":153},"  \\\n",[139,32262,32263,32265,32268],{"class":141,"line":262},[139,32264,30388],{"class":145},[139,32266,32267],{"class":160},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[139,32269,32260],{"class":153},[139,32271,32272,32275],{"class":141,"line":313},[139,32273,32274],{"class":145},"--cap-add=SYS_PTRACE  ",[139,32276,28436],{"class":153},[139,32278,32279],{"class":141,"line":462},[139,32280,32281],{"class":145},"tulingmall-member:0.0.5\n",[19,32283,32284],{},"5、访问会员服务接口",[19,32286,32287],{},[3760,32288],{"alt":135,"src":32289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24265,32291,32293],{"id":32292},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32295,32296],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32298,32299,32300],{},"阿里云docker镜像仓库：",[2680,32301,32302],{"href":32302,"rel":32303},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26128],[19,32305,32306],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32308,32309],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32311,32312],{},[3760,32313],{"alt":135,"src":32314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32316,32317],{},"要把镜像推送到镜像仓库",[130,32319,32321],{"className":1830,"code":32320,"language":1832,"meta":135,"style":135},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[50,32322,32323],{"__ignoreMap":135},[139,32324,32325,32327,32329,32331],{"class":141,"line":142},[139,32326,28813],{"class":781},[139,32328,31156],{"class":160},[139,32330,32188],{"class":160},[139,32332,32333],{"class":160}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32335,32336],{},"最后将镜像推送到远程仓库",[130,32338,32340],{"className":1830,"code":32339,"language":1832,"meta":135,"style":135},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[50,32341,32342],{"__ignoreMap":135},[139,32343,32344,32346,32348],{"class":141,"line":142},[139,32345,28813],{"class":781},[139,32347,31275],{"class":160},[139,32349,32333],{"class":160},[2348,32351,32352],{},"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":135,"searchDepth":210,"depth":210,"links":32354},[32355,32356,32357],{"id":30742,"depth":254,"text":30743},{"id":30971,"depth":254,"text":30972},{"id":31997,"depth":254,"text":31998},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30734,"description":135},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32364,"title":32365,"body":32366,"description":135,"extension":2385,"meta":32509,"navigation":842,"path":32510,"seo":32511,"stem":32512,"__hash__":32513},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32367,"toc":32507},[32368,32371,32376,32381,32384,32389,32394,32397,32402,32407,32410,32415,32418,32421,32424,32427,32430,32433,32453,32475,32478,32481,32501,32504],[10,32369,32365],{"id":32370},"_7vscode远程开发",[1760,32372,32373],{},[1763,32374,32375],{},"插件1：微软Docker工具",[19,32377,32378],{},[3760,32379],{"alt":135,"src":32380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32382,32383],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32385,32386],{},[3760,32387],{"alt":135,"src":32388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1760,32390,32391],{"start":210},[1763,32392,32393],{},"插件2：微软Docker远程开发工具",[19,32395,32396],{},"下面这是远程开发的插件。",[19,32398,32399],{},[3760,32400],{"alt":135,"src":32401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32403,32404],{},[3760,32405],{"alt":135,"src":32406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32408,32409],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32411,32412],{},[3760,32413],{"alt":135,"src":32414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32416,32417],{},"安装完拓展之后，vscode进行链接：",[19,32419,32420],{},"1.按ctrl+shift+p",[19,32422,32423],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32425,32426],{},"3.选择目前运行的容器",[19,32428,32429],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32431,32432],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[130,32434,32436],{"className":1830,"code":32435,"language":1832,"meta":135,"style":135},"docker run -v 主机目录:容器目录 image-name\n",[50,32437,32438],{"__ignoreMap":135},[139,32439,32440,32442,32444,32447,32450],{"class":141,"line":142},[139,32441,28813],{"class":781},[139,32443,29490],{"class":160},[139,32445,32446],{"class":153}," -v",[139,32448,32449],{"class":160}," 主机目录:容器目录",[139,32451,32452],{"class":160}," image-name\n",[130,32454,32456],{"className":1830,"code":32455,"language":1832,"meta":135,"style":135},"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",[50,32457,32458],{"__ignoreMap":135},[139,32459,32460,32462,32464,32467,32469,32472],{"class":141,"line":142},[139,32461,28813],{"class":781},[139,32463,29490],{"class":160},[139,32465,32466],{"class":153}," -it",[139,32468,32446],{"class":153},[139,32470,32471],{"class":160}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[139,32473,32474],{"class":160}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32476,32477],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32479,32480],{},"查看挂载情况：",[130,32482,32484],{"className":1830,"code":32483,"language":1832,"meta":135,"style":135},"mount | grep -i project\n",[50,32485,32486],{"__ignoreMap":135},[139,32487,32488,32491,32493,32496,32498],{"class":141,"line":142},[139,32489,32490],{"class":781},"mount",[139,32492,27372],{"class":149},[139,32494,32495],{"class":781}," grep",[139,32497,28690],{"class":153},[139,32499,32500],{"class":160}," project\n",[19,32502,32503],{},"也可以通过ls来进行查看",[2348,32505,32506],{},"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":135,"searchDepth":210,"depth":210,"links":32508},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32365,"description":135},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32515,"title":32516,"body":32517,"description":2384,"extension":2385,"meta":32521,"navigation":842,"path":32523,"seo":32524,"stem":32525,"__hash__":32526},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32518,"toc":32519},[],{"title":135,"searchDepth":210,"depth":210,"links":32520},[],{"category":32522},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32516,"description":2384},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32528,"title":32529,"body":32530,"description":2384,"extension":2385,"meta":32534,"navigation":842,"path":32535,"seo":32536,"stem":32537,"__hash__":32538},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32531,"toc":32532},[],{"title":135,"searchDepth":210,"depth":210,"links":32533},[],{"category":32522},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32529,"description":2384},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32540,"title":32541,"body":32542,"description":2384,"extension":2385,"meta":32830,"navigation":842,"path":32831,"seo":32832,"stem":32833,"__hash__":32834},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32543,"toc":32828},[32544,32547,32555,32570,32575,32626,32629,32635,32817,32822,32825],[10,32545,32541],{"id":32546},"_1验证深度学习环境",[19,32548,32549,32550],{},"关于环境的安装，看",[2680,32551,32554],{"href":32552,"rel":32553},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26128],"Pytorch-->深度学习",[19,32556,32557,32558,32561,32562,32565,32566,32569],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[50,32559,32560],{},"pytorch-cuda=12.4"," 是一个“ ",[1674,32563,32564],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1674,32567,32568],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32571,32572],{},[3760,32573],{"alt":135,"src":32574},"\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",[130,32576,32578],{"className":1830,"code":32577,"language":1832,"meta":135,"style":135},"# 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",[50,32579,32580,32585],{"__ignoreMap":135},[139,32581,32582],{"class":141,"line":142},[139,32583,32584],{"class":2512},"# CUDA 12.4\n",[139,32586,32587,32590,32592,32595,32598,32601,32604,32607,32609,32612,32615,32618,32621,32623],{"class":141,"line":210},[139,32588,32589],{"class":781},"conda",[139,32591,1841],{"class":160},[139,32593,32594],{"class":160}," pytorch==",[139,32596,32597],{"class":153},"2.5.1",[139,32599,32600],{"class":160}," torchvision==",[139,32602,32603],{"class":153},"0.20.1",[139,32605,32606],{"class":160}," torchaudio==",[139,32608,32597],{"class":153},[139,32610,32611],{"class":160}," pytorch-cuda=",[139,32613,32614],{"class":153},"12.4",[139,32616,32617],{"class":153}," -c",[139,32619,32620],{"class":160}," pytorch",[139,32622,32617],{"class":153},[139,32624,32625],{"class":160}," nvidia\n",[19,32627,32628],{},"）：",[19,32630,32631],{},[2680,32632,32633],{"href":32633,"rel":32634},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26128],[130,32636,32638],{"className":132,"code":32637,"language":134,"meta":135,"style":135},"# 对深度学习环境进行测试\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",[50,32639,32640,32645,32652,32657,32667,32682,32687,32697,32734,32741,32752,32768,32773,32783,32795,32805],{"__ignoreMap":135},[139,32641,32642],{"class":141,"line":142},[139,32643,32644],{"class":2512},"# 对深度学习环境进行测试\n",[139,32646,32647,32649],{"class":141,"line":210},[139,32648,1064],{"class":149},[139,32650,32651],{"class":145}," torch\n",[139,32653,32654],{"class":141,"line":254},[139,32655,32656],{"class":2512},"# 查看cuda是否被激活\n",[139,32658,32659,32662,32664],{"class":141,"line":262},[139,32660,32661],{"class":145},"flag",[139,32663,150],{"class":149},[139,32665,32666],{"class":145},"torch.cuda.is_available()\n",[139,32668,32669,32671,32673,32676,32679],{"class":141,"line":313},[139,32670,213],{"class":153},[139,32672,157],{"class":145},[139,32674,32675],{"class":160},"\"cuda:\"",[139,32677,32678],{"class":145},", flag)   ",[139,32680,32681],{"class":2512},"#返回true的话说明被激活\n",[139,32683,32684],{"class":141,"line":462},[139,32685,32686],{"class":2512},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[139,32688,32689,32692,32694],{"class":141,"line":474},[139,32690,32691],{"class":145},"ngpu",[139,32693,150],{"class":149},[139,32695,32696],{"class":153},"1\n",[139,32698,32699,32702,32704,32707,32710,32712,32715,32718,32721,32723,32725,32727,32729,32732],{"class":141,"line":484},[139,32700,32701],{"class":145},"device",[139,32703,150],{"class":149},[139,32705,32706],{"class":145},"torch.device(",[139,32708,32709],{"class":160},"\"cuda:0\"",[139,32711,3992],{"class":149},[139,32713,32714],{"class":145},"(torch.cuda.is_available() ",[139,32716,32717],{"class":149},"and",[139,32719,32720],{"class":145}," ngpu",[139,32722,958],{"class":149},[139,32724,2634],{"class":153},[139,32726,2120],{"class":145},[139,32728,656],{"class":149},[139,32730,32731],{"class":160}," \"cpu\"",[139,32733,164],{"class":145},[139,32735,32736,32738],{"class":141,"line":989},[139,32737,213],{"class":153},[139,32739,32740],{"class":145},"(device)\n",[139,32742,32743,32745,32748,32750],{"class":141,"line":994},[139,32744,213],{"class":153},[139,32746,32747],{"class":145},"(torch.cuda.get_device_name(",[139,32749,2634],{"class":153},[139,32751,207],{"class":145},[139,32753,32754,32756,32759,32761,32763,32765],{"class":141,"line":999},[139,32755,213],{"class":153},[139,32757,32758],{"class":145},"(torch.rand(",[139,32760,421],{"class":153},[139,32762,2816],{"class":145},[139,32764,421],{"class":153},[139,32766,32767],{"class":145},").cuda())\n",[139,32769,32770],{"class":141,"line":1006},[139,32771,32772],{"class":2512},"# 查看cuda和cudnn的版本\n",[139,32774,32775,32778,32780],{"class":141,"line":1027},[139,32776,32777],{"class":145},"cuda_version",[139,32779,150],{"class":149},[139,32781,32782],{"class":145},"torch.version.cuda\n",[139,32784,32785,32787,32789,32792],{"class":141,"line":1040},[139,32786,213],{"class":153},[139,32788,157],{"class":145},[139,32790,32791],{"class":160},"\"cuda version\"",[139,32793,32794],{"class":145},",cuda_version)\n",[139,32796,32797,32800,32802],{"class":141,"line":2160},[139,32798,32799],{"class":145},"cudnn_version",[139,32801,150],{"class":149},[139,32803,32804],{"class":145},"torch.backends.cudnn.version()\n",[139,32806,32807,32809,32811,32814],{"class":141,"line":2188},[139,32808,213],{"class":153},[139,32810,157],{"class":145},[139,32812,32813],{"class":160},"\"cudnn version\"",[139,32815,32816],{"class":145},",cudnn_version)\n",[19,32818,32819],{},[3760,32820],{"alt":135,"src":32821},"\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,32823,32824],{},"cuda:0 指的是一块显卡",[2348,32826,32827],{},"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":135,"searchDepth":210,"depth":210,"links":32829},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32541,"description":2384},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32836,"title":32837,"body":32838,"description":2384,"extension":2385,"meta":52626,"navigation":842,"path":52627,"seo":52628,"stem":52629,"__hash__":52630},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32839,"toc":52620},[32840,32843,32847,32851,32854,32859,32864,32867,32872,32877,32882,32885,32889,32894,32898,32903,32906,32911,32914,32917,32920,32923,32928,32931,32936,32941,32946,32951,32954,32958,32961,32966,33566,33571,33574,33579,33582,33585,34048,34051,34054,34057,34060,36107,36110,36115,36120,36913,36916,36921,37699,37703,39362,39366,40080,40084,40088,40093,40098,40103,40106,40111,40116,40121,40126,40131,40135,40140,41421,41426,41429,41432,41435,41590,41593,41596,42812,42817,43512,43516,43520,43525,43530,43533,43538,43543,43548,43553,43558,43563,43568,43573,43578,43583,43588,43593,43598,43603,43608,43613,43618,43623,43628,43633,43638,43643,43648,43653,43658,43663,43668,43673,43678,43683,43687,43691,43694,45172,45176,46823,46827,47521,47525,47528,47531,48071,48074,48078,48081,49478,49482,49485,50063,51850,51854,51857,52617],[10,32841,32837],{"id":32842},"_2经典神经网络",[1217,32844,32846],{"id":32845},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24265,32848,32850],{"id":32849},"_211原理介绍","2.1.1.原理介绍",[19,32852,32853],{},"LeNet-5",[1760,32855,32856],{},[1763,32857,32858],{},"原理",[19,32860,32861],{},[3760,32862],{"alt":135,"src":32863},"\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,32865,32866],{},"B是batch批次；C是channel通道",[1760,32868,32869],{"start":210},[1763,32870,32871],{},"网络参数详细",[19,32873,32874],{},[3760,32875],{"alt":135,"src":32876},"\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,32878,32879],{},[3760,32880],{"alt":135,"src":32881},"\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,32883,32884],{},"AlexNet",[1760,32886,32887],{},[1763,32888,32858],{},[19,32890,32891],{},[3760,32892],{"alt":135,"src":32893},"\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",[1760,32895,32896],{"start":210},[1763,32897,32871],{},[19,32899,32900],{},[3760,32901],{"alt":135,"src":32902},"\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,32904,32905],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32907,32908],{},[3760,32909],{"alt":135,"src":32910},"\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,32912,32913],{},"数据处理中的图像增强操作:",[19,32915,32916],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32918,32919],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32921,32922],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32924,32925],{},[3760,32926],{"alt":135,"src":32927},"\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,32929,32930],{},"提升网络精确度的方法：LRN正则化",[19,32932,32933],{},[3760,32934],{"alt":135,"src":32935},"\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,32937,32938],{},[3760,32939],{"alt":135,"src":32940},"\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",[1760,32942,32943],{"start":254},[1763,32944,32945],{},"AlexNet的总结",[19,32947,32948],{},[3760,32949],{"alt":135,"src":32950},"\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,32952,32953],{},"比LeNet模型要深一丢丢",[24265,32955,32957],{"id":32956},"_212代码实现","2.1.2.代码实现",[19,32959,32960],{},"（1）LeNet",[1760,32962,32963],{},[1763,32964,32965],{},"模型搭建",[130,32967,32969],{"className":132,"code":32968,"language":134,"meta":135,"style":135},"# 导入库\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",[50,32970,32971,32976,32982,32987,32999,33004,33016,33020,33039,33044,33049,33060,33065,33084,33088,33093,33142,33154,33159,33188,33223,33250,33255,33267,33272,33292,33311,33330,33334,33339,33349,33366,33377,33392,33403,33414,33429,33444,33455,33462,33466,33479,33484,33507,33512,33517,33522,33526,33531,33536,33546],{"__ignoreMap":135},[139,32972,32973],{"class":141,"line":142},[139,32974,32975],{"class":2512},"# 导入库\n",[139,32977,32978,32980],{"class":141,"line":210},[139,32979,1064],{"class":149},[139,32981,32651],{"class":145},[139,32983,32984],{"class":141,"line":254},[139,32985,32986],{"class":2512},"# 导入神经网络层\n",[139,32988,32989,32991,32994,32996],{"class":141,"line":262},[139,32990,1265],{"class":149},[139,32992,32993],{"class":145}," torch ",[139,32995,1064],{"class":149},[139,32997,32998],{"class":145}," nn\n",[139,33000,33001],{"class":141,"line":313},[139,33002,33003],{"class":2512},"# 导入展示神经网络参数的包\n",[139,33005,33006,33008,33011,33013],{"class":141,"line":462},[139,33007,1265],{"class":149},[139,33009,33010],{"class":145}," torchsummary ",[139,33012,1064],{"class":149},[139,33014,33015],{"class":145}," summary\n",[139,33017,33018],{"class":141,"line":474},[139,33019,843],{"emptyLinePlaceholder":842},[139,33021,33022,33024,33027,33029,33032,33034,33037],{"class":141,"line":484},[139,33023,915],{"class":149},[139,33025,33026],{"class":781}," LeNet",[139,33028,157],{"class":145},[139,33030,33031],{"class":781},"nn",[139,33033,2993],{"class":145},[139,33035,33036],{"class":781},"Module",[139,33038,558],{"class":145},[139,33040,33041],{"class":141,"line":989},[139,33042,33043],{"class":2512},"    # 模型初始化:\n",[139,33045,33046],{"class":141,"line":994},[139,33047,33048],{"class":2512},"    # 定义一些网络层和激活函数\n",[139,33050,33051,33054,33057],{"class":141,"line":999},[139,33052,33053],{"class":149},"    def",[139,33055,33056],{"class":153}," __init__",[139,33058,33059],{"class":145},"(self):\n",[139,33061,33062],{"class":141,"line":1006},[139,33063,33064],{"class":2512},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[139,33066,33067,33070,33073,33076,33079,33082],{"class":141,"line":1027},[139,33068,33069],{"class":153},"        super",[139,33071,33072],{"class":145},"(LeNet,",[139,33074,33075],{"class":153},"self",[139,33077,33078],{"class":145},").",[139,33080,33081],{"class":153},"__init__",[139,33083,4262],{"class":145},[139,33085,33086],{"class":141,"line":1040},[139,33087,843],{"emptyLinePlaceholder":842},[139,33089,33090],{"class":141,"line":2160},[139,33091,33092],{"class":2512},"        # 定义网络层\n",[139,33094,33095,33098,33101,33103,33106,33109,33111,33113,33115,33118,33120,33122,33124,33127,33129,33131,33133,33136,33138,33140],{"class":141,"line":2188},[139,33096,33097],{"class":153},"        self",[139,33099,33100],{"class":145},".c1",[139,33102,150],{"class":149},[139,33104,33105],{"class":145},"nn.Conv2d(",[139,33107,33108],{"class":2111},"in_channels",[139,33110,150],{"class":149},[139,33112,410],{"class":153},[139,33114,2816],{"class":145},[139,33116,33117],{"class":2111},"out_channels",[139,33119,150],{"class":149},[139,33121,2782],{"class":153},[139,33123,2816],{"class":145},[139,33125,33126],{"class":2111},"kernel_size",[139,33128,150],{"class":149},[139,33130,1481],{"class":153},[139,33132,2816],{"class":145},[139,33134,33135],{"class":2111},"padding",[139,33137,150],{"class":149},[139,33139,416],{"class":153},[139,33141,164],{"class":145},[139,33143,33144,33146,33149,33151],{"class":141,"line":3944},[139,33145,33097],{"class":153},[139,33147,33148],{"class":145},".sig",[139,33150,150],{"class":149},[139,33152,33153],{"class":145},"nn.Sigmoid()\n",[139,33155,33156],{"class":141,"line":3963},[139,33157,33158],{"class":2512},"        # 定义池化\n",[139,33160,33161,33163,33166,33168,33171,33173,33175,33177,33179,33182,33184,33186],{"class":141,"line":3968},[139,33162,33097],{"class":153},[139,33164,33165],{"class":145},".s2",[139,33167,150],{"class":149},[139,33169,33170],{"class":145},"nn.AvgPool2d(",[139,33172,33126],{"class":2111},[139,33174,150],{"class":149},[139,33176,416],{"class":153},[139,33178,2816],{"class":145},[139,33180,33181],{"class":2111},"stride",[139,33183,150],{"class":149},[139,33185,416],{"class":153},[139,33187,164],{"class":145},[139,33189,33190,33192,33195,33197,33199,33201,33203,33205,33207,33209,33211,33213,33215,33217,33219,33221],{"class":141,"line":3982},[139,33191,33097],{"class":153},[139,33193,33194],{"class":145},".c3",[139,33196,150],{"class":149},[139,33198,33105],{"class":145},[139,33200,33108],{"class":2111},[139,33202,150],{"class":149},[139,33204,2782],{"class":153},[139,33206,2816],{"class":145},[139,33208,33117],{"class":2111},[139,33210,150],{"class":149},[139,33212,3036],{"class":153},[139,33214,2816],{"class":145},[139,33216,33126],{"class":2111},[139,33218,150],{"class":149},[139,33220,1481],{"class":153},[139,33222,164],{"class":145},[139,33224,33225,33227,33230,33232,33234,33236,33238,33240,33242,33244,33246,33248],{"class":141,"line":3987},[139,33226,33097],{"class":153},[139,33228,33229],{"class":145},".s4",[139,33231,150],{"class":149},[139,33233,33170],{"class":145},[139,33235,33126],{"class":2111},[139,33237,150],{"class":149},[139,33239,416],{"class":153},[139,33241,2816],{"class":145},[139,33243,33181],{"class":2111},[139,33245,150],{"class":149},[139,33247,416],{"class":153},[139,33249,164],{"class":145},[139,33251,33252],{"class":141,"line":4014},[139,33253,33254],{"class":2512},"        # 定义平展层\n",[139,33256,33257,33259,33262,33264],{"class":141,"line":4019},[139,33258,33097],{"class":153},[139,33260,33261],{"class":145},".flatten",[139,33263,150],{"class":149},[139,33265,33266],{"class":145},"nn.Flatten()\n",[139,33268,33269],{"class":141,"line":4036},[139,33270,33271],{"class":2512},"        # 定义全连接层\n",[139,33273,33274,33276,33279,33281,33284,33286,33288,33290],{"class":141,"line":4041},[139,33275,33097],{"class":153},[139,33277,33278],{"class":145},".f5",[139,33280,150],{"class":149},[139,33282,33283],{"class":145},"nn.Linear(",[139,33285,6267],{"class":153},[139,33287,2816],{"class":145},[139,33289,3252],{"class":153},[139,33291,164],{"class":145},[139,33293,33294,33296,33299,33301,33303,33305,33307,33309],{"class":141,"line":4046},[139,33295,33097],{"class":153},[139,33297,33298],{"class":145},".f6",[139,33300,150],{"class":149},[139,33302,33283],{"class":145},[139,33304,3252],{"class":153},[139,33306,2816],{"class":145},[139,33308,3146],{"class":153},[139,33310,164],{"class":145},[139,33312,33313,33315,33318,33320,33322,33324,33326,33328],{"class":141,"line":4051},[139,33314,33097],{"class":153},[139,33316,33317],{"class":145},".f7",[139,33319,150],{"class":149},[139,33321,33283],{"class":145},[139,33323,3146],{"class":153},[139,33325,2816],{"class":145},[139,33327,536],{"class":153},[139,33329,164],{"class":145},[139,33331,33332],{"class":141,"line":4065},[139,33333,843],{"emptyLinePlaceholder":842},[139,33335,33336],{"class":141,"line":4070},[139,33337,33338],{"class":2512},"    # 写工具->写前向传播\n",[139,33340,33341,33343,33346],{"class":141,"line":4860},[139,33342,33053],{"class":149},[139,33344,33345],{"class":781}," forward",[139,33347,33348],{"class":145},"(self,x):\n",[139,33350,33351,33354,33356,33358,33361,33363],{"class":141,"line":4874},[139,33352,33353],{"class":145},"        x",[139,33355,150],{"class":149},[139,33357,33075],{"class":153},[139,33359,33360],{"class":145},".sig(",[139,33362,33075],{"class":153},[139,33364,33365],{"class":145},".c1(x))\n",[139,33367,33368,33370,33372,33374],{"class":141,"line":4882},[139,33369,33353],{"class":145},[139,33371,150],{"class":149},[139,33373,33075],{"class":153},[139,33375,33376],{"class":145},".s2(x)\n",[139,33378,33379,33381,33383,33385,33387,33389],{"class":141,"line":4887},[139,33380,33353],{"class":145},[139,33382,150],{"class":149},[139,33384,33075],{"class":153},[139,33386,33360],{"class":145},[139,33388,33075],{"class":153},[139,33390,33391],{"class":145},".c3(x))\n",[139,33393,33394,33396,33398,33400],{"class":141,"line":4893},[139,33395,33353],{"class":145},[139,33397,150],{"class":149},[139,33399,33075],{"class":153},[139,33401,33402],{"class":145},".s4(x)\n",[139,33404,33405,33407,33409,33411],{"class":141,"line":4899},[139,33406,33353],{"class":145},[139,33408,150],{"class":149},[139,33410,33075],{"class":153},[139,33412,33413],{"class":145},".flatten(x)\n",[139,33415,33416,33418,33420,33422,33424,33426],{"class":141,"line":4904},[139,33417,33353],{"class":145},[139,33419,150],{"class":149},[139,33421,33075],{"class":153},[139,33423,33360],{"class":145},[139,33425,33075],{"class":153},[139,33427,33428],{"class":145},".f5(x))\n",[139,33430,33431,33433,33435,33437,33439,33441],{"class":141,"line":10222},[139,33432,33353],{"class":145},[139,33434,150],{"class":149},[139,33436,33075],{"class":153},[139,33438,33360],{"class":145},[139,33440,33075],{"class":153},[139,33442,33443],{"class":145},".f6(x))\n",[139,33445,33446,33448,33450,33452],{"class":141,"line":10246},[139,33447,33353],{"class":145},[139,33449,150],{"class":149},[139,33451,33075],{"class":153},[139,33453,33454],{"class":145},".f7(x)\n",[139,33456,33457,33459],{"class":141,"line":10251},[139,33458,2085],{"class":149},[139,33460,33461],{"class":145}," x\n",[139,33463,33464],{"class":141,"line":10257},[139,33465,843],{"emptyLinePlaceholder":842},[139,33467,33468,33470,33472,33474,33477],{"class":141,"line":10284},[139,33469,1729],{"class":149},[139,33471,1732],{"class":153},[139,33473,5232],{"class":149},[139,33475,33476],{"class":160},"\"__main__\"",[139,33478,246],{"class":145},[139,33480,33481],{"class":141,"line":10289},[139,33482,33483],{"class":2512},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[139,33485,33486,33489,33491,33493,33496,33498,33501,33503,33505],{"class":141,"line":10295},[139,33487,33488],{"class":145},"    device",[139,33490,150],{"class":149},[139,33492,32706],{"class":145},[139,33494,33495],{"class":160},"\"cuda\"",[139,33497,3992],{"class":149},[139,33499,33500],{"class":145}," torch.cuda.is_available() ",[139,33502,656],{"class":149},[139,33504,32731],{"class":160},[139,33506,164],{"class":145},[139,33508,33509],{"class":141,"line":10307},[139,33510,33511],{"class":2512},"    # 如果就是想指定用cpu用下方代码:\n",[139,33513,33514],{"class":141,"line":10319},[139,33515,33516],{"class":2512},"    # device=\"cpu\"\n",[139,33518,33519],{"class":141,"line":10331},[139,33520,33521],{"class":2512},"    # print(device)\n",[139,33523,33524],{"class":141,"line":11990},[139,33525,843],{"emptyLinePlaceholder":842},[139,33527,33528],{"class":141,"line":12015},[139,33529,33530],{"class":2512},"    # 实例化模型\n",[139,33532,33533],{"class":141,"line":12038},[139,33534,33535],{"class":2512},"    # 将模型放到设备中去运行\n",[139,33537,33538,33541,33543],{"class":141,"line":12062},[139,33539,33540],{"class":145},"    model",[139,33542,150],{"class":149},[139,33544,33545],{"class":145},"LeNet().to(device)\n",[139,33547,33548,33550,33553,33555,33557,33559,33561,33563],{"class":141,"line":12067},[139,33549,302],{"class":153},[139,33551,33552],{"class":145},"(summary(model,(",[139,33554,410],{"class":153},[139,33556,2816],{"class":145},[139,33558,3335],{"class":153},[139,33560,2816],{"class":145},[139,33562,3335],{"class":153},[139,33564,33565],{"class":145},")))\n",[19,33567,33568],{},[3760,33569],{"alt":135,"src":33570},"\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,33572,33573],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1760,33575,33576],{"start":210},[1763,33577,33578],{},"训练",[19,33580,33581],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33583,33584],{},"在训练之前可以将数据展示看一下",[130,33586,33588],{"className":132,"code":33587,"language":134,"meta":135,"style":135},"# 建立画图的函数，用于展示数据\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",[50,33589,33590,33595,33600,33612,33624,33636,33641,33653,33658,33670,33675,33687,33691,33695,33716,33728,33733,33754,33765,33769,33774,33792,33803,33808,33819,33824,33835,33839,33844,33859,33872,33877,33882,33895,33908,33921,33926,33930,33935,33955,33972,33992,34005,34018,34028,34043],{"__ignoreMap":135},[139,33591,33592],{"class":141,"line":142},[139,33593,33594],{"class":2512},"# 建立画图的函数，用于展示数据\n",[139,33596,33597],{"class":141,"line":210},[139,33598,33599],{"class":2512},"# torchvision中包含很多内置的数据集\n",[139,33601,33602,33604,33607,33609],{"class":141,"line":254},[139,33603,1265],{"class":149},[139,33605,33606],{"class":145}," sklearn.externals.array_api_compat.torch ",[139,33608,1064],{"class":149},[139,33610,33611],{"class":145}," squeeze\n",[139,33613,33614,33616,33619,33621],{"class":141,"line":262},[139,33615,1265],{"class":149},[139,33617,33618],{"class":145}," torchvision.datasets ",[139,33620,1064],{"class":149},[139,33622,33623],{"class":145}," FashionMNIST\n",[139,33625,33626,33628,33631,33633],{"class":141,"line":313},[139,33627,1064],{"class":149},[139,33629,33630],{"class":145}," numpy ",[139,33632,1035],{"class":149},[139,33634,33635],{"class":145}," np\n",[139,33637,33638],{"class":141,"line":462},[139,33639,33640],{"class":2512},"# 引入处理数据集的包\n",[139,33642,33643,33645,33648,33650],{"class":141,"line":474},[139,33644,1265],{"class":149},[139,33646,33647],{"class":145}," torchvision ",[139,33649,1064],{"class":149},[139,33651,33652],{"class":145}," transforms\n",[139,33654,33655],{"class":141,"line":484},[139,33656,33657],{"class":2512},"# 从torch库中引入数据处理的包\n",[139,33659,33660,33662,33665,33667],{"class":141,"line":989},[139,33661,1064],{"class":149},[139,33663,33664],{"class":145}," torch.utils.data ",[139,33666,1035],{"class":149},[139,33668,33669],{"class":145}," Data\n",[139,33671,33672],{"class":141,"line":994},[139,33673,33674],{"class":2512},"# 导入画图的库\n",[139,33676,33677,33679,33682,33684],{"class":141,"line":999},[139,33678,1064],{"class":149},[139,33680,33681],{"class":145}," matplotlib.pyplot ",[139,33683,1035],{"class":149},[139,33685,33686],{"class":145}," plt\n",[139,33688,33689],{"class":141,"line":1006},[139,33690,843],{"emptyLinePlaceholder":842},[139,33692,33693],{"class":141,"line":1027},[139,33694,843],{"emptyLinePlaceholder":842},[139,33696,33697,33700,33702,33705,33708,33710,33713],{"class":141,"line":1040},[139,33698,33699],{"class":145},"train_data",[139,33701,150],{"class":149},[139,33703,33704],{"class":145},"FashionMNIST(",[139,33706,33707],{"class":2111},"root",[139,33709,150],{"class":149},[139,33711,33712],{"class":160},"'.\u002Fdata'",[139,33714,33715],{"class":145},",\n",[139,33717,33718,33721,33723,33726],{"class":141,"line":2160},[139,33719,33720],{"class":2111},"                        train",[139,33722,150],{"class":149},[139,33724,33725],{"class":153},"True",[139,33727,33715],{"class":145},[139,33729,33730],{"class":141,"line":2188},[139,33731,33732],{"class":2512},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[139,33734,33735,33738,33740,33743,33746,33748,33751],{"class":141,"line":3944},[139,33736,33737],{"class":2111},"                        transform",[139,33739,150],{"class":149},[139,33741,33742],{"class":145},"transforms.Compose([transforms.Resize(",[139,33744,33745],{"class":2111},"size",[139,33747,150],{"class":149},[139,33749,33750],{"class":153},"224",[139,33752,33753],{"class":145},"),transforms.ToTensor()]),\n",[139,33755,33756,33759,33761,33763],{"class":141,"line":3963},[139,33757,33758],{"class":2111},"                        download",[139,33760,150],{"class":149},[139,33762,33725],{"class":153},[139,33764,164],{"class":145},[139,33766,33767],{"class":141,"line":3968},[139,33768,843],{"emptyLinePlaceholder":842},[139,33770,33771],{"class":141,"line":3982},[139,33772,33773],{"class":2512},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[139,33775,33776,33779,33781,33784,33787,33789],{"class":141,"line":3987},[139,33777,33778],{"class":145},"train_loader",[139,33780,150],{"class":149},[139,33782,33783],{"class":145},"Data.DataLoader(",[139,33785,33786],{"class":2111},"dataset",[139,33788,150],{"class":149},[139,33790,33791],{"class":145},"train_data,\n",[139,33793,33794,33797,33799,33801],{"class":141,"line":4014},[139,33795,33796],{"class":2111},"                             batch_size",[139,33798,150],{"class":149},[139,33800,2646],{"class":153},[139,33802,33715],{"class":145},[139,33804,33805],{"class":141,"line":4019},[139,33806,33807],{"class":2512},"                             # 数据是否打乱\n",[139,33809,33810,33813,33815,33817],{"class":141,"line":4036},[139,33811,33812],{"class":2111},"                             shuffle",[139,33814,150],{"class":149},[139,33816,33725],{"class":153},[139,33818,33715],{"class":145},[139,33820,33821],{"class":141,"line":4041},[139,33822,33823],{"class":2512},"                             # 规定加载数据的进程\n",[139,33825,33826,33829,33831,33833],{"class":141,"line":4046},[139,33827,33828],{"class":2111},"                             num_workers",[139,33830,150],{"class":149},[139,33832,2634],{"class":153},[139,33834,164],{"class":145},[139,33836,33837],{"class":141,"line":4051},[139,33838,843],{"emptyLinePlaceholder":842},[139,33840,33841],{"class":141,"line":4065},[139,33842,33843],{"class":2512},"# 获得一个batch的数据\n",[139,33845,33846,33848,33851,33853,33856],{"class":141,"line":4070},[139,33847,1970],{"class":149},[139,33849,33850],{"class":145}," step,(b_x,b_y) ",[139,33852,1976],{"class":149},[139,33854,33855],{"class":153}," enumerate",[139,33857,33858],{"class":145},"(train_loader):\n",[139,33860,33861,33863,33866,33868,33870],{"class":141,"line":4860},[139,33862,790],{"class":149},[139,33864,33865],{"class":145}," step ",[139,33867,958],{"class":149},[139,33869,799],{"class":153},[139,33871,246],{"class":145},[139,33873,33874],{"class":141,"line":4874},[139,33875,33876],{"class":149},"        break\n",[139,33878,33879],{"class":141,"line":4882},[139,33880,33881],{"class":2512},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[139,33883,33884,33887,33889,33892],{"class":141,"line":4887},[139,33885,33886],{"class":145},"batch_x",[139,33888,150],{"class":149},[139,33890,33891],{"class":145},"b_x.squeeze().numpy()  ",[139,33893,33894],{"class":2512},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[139,33896,33897,33900,33902,33905],{"class":141,"line":4893},[139,33898,33899],{"class":145},"batch_y",[139,33901,150],{"class":149},[139,33903,33904],{"class":145},"b_y.numpy()   ",[139,33906,33907],{"class":2512},"#将张量转换成功numpy数组\n",[139,33909,33910,33913,33915,33918],{"class":141,"line":4899},[139,33911,33912],{"class":145},"class_label",[139,33914,150],{"class":149},[139,33916,33917],{"class":145},"train_data.classes  ",[139,33919,33920],{"class":2512},"#训练集标签\n",[139,33922,33923],{"class":141,"line":4904},[139,33924,33925],{"class":2512},"# print(class_label)\n",[139,33927,33928],{"class":141,"line":10222},[139,33929,843],{"emptyLinePlaceholder":842},[139,33931,33932],{"class":141,"line":10246},[139,33933,33934],{"class":2512},"# 可视化一个batch的图像\n",[139,33936,33937,33940,33943,33945,33947,33949,33951,33953],{"class":141,"line":10251},[139,33938,33939],{"class":145},"plt.figure(",[139,33941,33942],{"class":2111},"figsize",[139,33944,150],{"class":149},[139,33946,157],{"class":145},[139,33948,2934],{"class":153},[139,33950,2816],{"class":145},[139,33952,1481],{"class":153},[139,33954,207],{"class":145},[139,33956,33957,33959,33962,33964,33967,33969],{"class":141,"line":10257},[139,33958,1970],{"class":149},[139,33960,33961],{"class":145}," ii ",[139,33963,1976],{"class":149},[139,33965,33966],{"class":145}," np.arange(",[139,33968,9632],{"class":153},[139,33970,33971],{"class":145},"(batch_y)):\n",[139,33973,33974,33977,33979,33981,33983,33986,33988,33990],{"class":141,"line":10284},[139,33975,33976],{"class":145},"    plt.subplot(",[139,33978,1476],{"class":153},[139,33980,2816],{"class":145},[139,33982,3036],{"class":153},[139,33984,33985],{"class":145},",ii ",[139,33987,1147],{"class":149},[139,33989,27381],{"class":153},[139,33991,164],{"class":145},[139,33993,33994,33997,34000,34002],{"class":141,"line":10289},[139,33995,33996],{"class":145},"    plt.imshow(batch_x[ii,:,:],",[139,33998,33999],{"class":2111},"cmap",[139,34001,150],{"class":149},[139,34003,34004],{"class":145},"plt.cm.gray)\n",[139,34006,34007,34010,34012,34014,34016],{"class":141,"line":10295},[139,34008,34009],{"class":145},"    plt.title(class_label[batch_y[ii]],",[139,34011,33745],{"class":2111},[139,34013,150],{"class":149},[139,34015,536],{"class":153},[139,34017,164],{"class":145},[139,34019,34020,34023,34026],{"class":141,"line":10307},[139,34021,34022],{"class":145},"    plt.axis(",[139,34024,34025],{"class":160},"\"off\"",[139,34027,164],{"class":145},[139,34029,34030,34033,34036,34038,34041],{"class":141,"line":10319},[139,34031,34032],{"class":145},"    plt.subplots_adjust(",[139,34034,34035],{"class":2111},"wspace",[139,34037,150],{"class":149},[139,34039,34040],{"class":153},"0.05",[139,34042,164],{"class":145},[139,34044,34045],{"class":141,"line":10331},[139,34046,34047],{"class":145},"plt.show()\n",[19,34049,34050],{},"用matplotlib进行展示的过程可以后续再补",[19,34052,34053],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34055,34056],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34058,34059],{},"模型训练：",[130,34061,34063],{"className":132,"code":34062,"language":134,"meta":135,"style":135},"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",[50,34064,34065,34072,34078,34082,34094,34100,34111,34121,34131,34141,34151,34156,34168,34178,34182,34186,34191,34201,34214,34225,34242,34253,34292,34308,34320,34331,34336,34347,34363,34374,34385,34396,34403,34407,34412,34417,34421,34426,34436,34457,34461,34465,34470,34475,34480,34500,34504,34509,34519,34523,34528,34537,34542,34547,34552,34562,34566,34570,34575,34580,34590,34595,34605,34610,34619,34624,34633,34638,34647,34651,34656,34666,34670,34674,34679,34694,34722,34737,34741,34746,34751,34760,34765,34774,34779,34788,34793,34802,34807,34816,34821,34830,34835,34848,34853,34863,34868,34878,34884,34890,34896,34902,34913,34919,34939,34945,34956,34962,34968,34974,34980,34986,34992,34998,35018,35024,35040,35046,35060,35066,35081,35087,35096,35102,35111,35117,35123,35132,35138,35149,35155,35174,35180,35191,35197,35217,35233,35239,35253,35259,35265,35276,35282,35288,35298,35304,35315,35321,35331,35336,35342,35390,35437,35442,35448,35467,35473,35492,35498,35504,35514,35519,35525,35541,35586,35592,35598,35604,35615,35621,35627,35633,35651,35665,35674,35683,35692,35701,35707,35713,35721,35726,35732,35743,35749,35769,35775,35781,35787,35804,35810,35816,35822,35828,35834,35861,35885,35891,35897,35903,35914,35925,35931,35948,35971,35994,36000,36005,36014,36024,36030,36035,36041,36054,36060,36071,36082,36101],{"__ignoreMap":135},[139,34066,34067,34069],{"class":141,"line":142},[139,34068,1064],{"class":149},[139,34070,34071],{"class":145}," copy\n",[139,34073,34074,34076],{"class":141,"line":210},[139,34075,1064],{"class":149},[139,34077,1504],{"class":145},[139,34079,34080],{"class":141,"line":254},[139,34081,843],{"emptyLinePlaceholder":842},[139,34083,34084,34086,34089,34091],{"class":141,"line":262},[139,34085,1064],{"class":149},[139,34087,34088],{"class":145}," pandas ",[139,34090,1035],{"class":149},[139,34092,34093],{"class":145}," pd\n",[139,34095,34096,34098],{"class":141,"line":313},[139,34097,1064],{"class":149},[139,34099,32651],{"class":145},[139,34101,34102,34104,34106,34108],{"class":141,"line":462},[139,34103,1265],{"class":149},[139,34105,33664],{"class":145},[139,34107,1064],{"class":149},[139,34109,34110],{"class":145}," Dataset\n",[139,34112,34113,34115,34117,34119],{"class":141,"line":474},[139,34114,1265],{"class":149},[139,34116,33618],{"class":145},[139,34118,1064],{"class":149},[139,34120,33623],{"class":145},[139,34122,34123,34125,34127,34129],{"class":141,"line":484},[139,34124,1265],{"class":149},[139,34126,33647],{"class":145},[139,34128,1064],{"class":149},[139,34130,33652],{"class":145},[139,34132,34133,34135,34137,34139],{"class":141,"line":989},[139,34134,1064],{"class":149},[139,34136,33664],{"class":145},[139,34138,1035],{"class":149},[139,34140,33669],{"class":145},[139,34142,34143,34145,34147,34149],{"class":141,"line":994},[139,34144,1064],{"class":149},[139,34146,33681],{"class":145},[139,34148,1035],{"class":149},[139,34150,33686],{"class":145},[139,34152,34153],{"class":141,"line":999},[139,34154,34155],{"class":2512},"# 导入模型\n",[139,34157,34158,34160,34163,34165],{"class":141,"line":1006},[139,34159,1265],{"class":149},[139,34161,34162],{"class":145}," model ",[139,34164,1064],{"class":149},[139,34166,34167],{"class":145}," LeNet\n",[139,34169,34170,34172,34174,34176],{"class":141,"line":1027},[139,34171,1265],{"class":149},[139,34173,32993],{"class":145},[139,34175,1064],{"class":149},[139,34177,32998],{"class":145},[139,34179,34180],{"class":141,"line":1040},[139,34181,843],{"emptyLinePlaceholder":842},[139,34183,34184],{"class":141,"line":2160},[139,34185,843],{"emptyLinePlaceholder":842},[139,34187,34188],{"class":141,"line":2188},[139,34189,34190],{"class":2512},"# 处理训练集与验证集函数--->划分数据集\n",[139,34192,34193,34195,34198],{"class":141,"line":3944},[139,34194,778],{"class":149},[139,34196,34197],{"class":781}," train_val_data_process",[139,34199,34200],{"class":145},"():\n",[139,34202,34203,34206,34208,34210,34212],{"class":141,"line":3963},[139,34204,34205],{"class":145},"    train_data",[139,34207,150],{"class":149},[139,34209,33704],{"class":145},[139,34211,33712],{"class":160},[139,34213,33715],{"class":145},[139,34215,34216,34219,34221,34223],{"class":141,"line":3968},[139,34217,34218],{"class":2111},"                            train",[139,34220,150],{"class":149},[139,34222,33725],{"class":153},[139,34224,33715],{"class":145},[139,34226,34227,34230,34232,34234,34236,34238,34240],{"class":141,"line":3982},[139,34228,34229],{"class":2111},"                            transform",[139,34231,150],{"class":149},[139,34233,33742],{"class":145},[139,34235,33745],{"class":2111},[139,34237,150],{"class":149},[139,34239,3335],{"class":153},[139,34241,33753],{"class":145},[139,34243,34244,34247,34249,34251],{"class":141,"line":3987},[139,34245,34246],{"class":2111},"                            download",[139,34248,150],{"class":149},[139,34250,33725],{"class":153},[139,34252,164],{"class":145},[139,34254,34255,34258,34260,34263,34266,34268,34271,34273,34275,34278,34280,34282,34285,34287,34289],{"class":141,"line":4014},[139,34256,34257],{"class":145},"    train_data,val_data",[139,34259,150],{"class":149},[139,34261,34262],{"class":145},"Data.random_split(train_data,[",[139,34264,34265],{"class":153},"round",[139,34267,157],{"class":145},[139,34269,34270],{"class":153},"0.8",[139,34272,2892],{"class":149},[139,34274,9632],{"class":153},[139,34276,34277],{"class":145},"(train_data)),",[139,34279,34265],{"class":153},[139,34281,157],{"class":145},[139,34283,34284],{"class":153},"0.2",[139,34286,2892],{"class":149},[139,34288,9632],{"class":153},[139,34290,34291],{"class":145},"(train_data))])\n",[139,34293,34294,34297,34299,34302,34304,34306],{"class":141,"line":4019},[139,34295,34296],{"class":145},"    train_dataloader ",[139,34298,150],{"class":149},[139,34300,34301],{"class":145}," Data.DataLoader(",[139,34303,33786],{"class":2111},[139,34305,150],{"class":149},[139,34307,33791],{"class":145},[139,34309,34310,34313,34315,34318],{"class":141,"line":4036},[139,34311,34312],{"class":2111},"                                       batch_size",[139,34314,150],{"class":149},[139,34316,34317],{"class":153},"128",[139,34319,33715],{"class":145},[139,34321,34322,34325,34327,34329],{"class":141,"line":4041},[139,34323,34324],{"class":2111},"                                       shuffle",[139,34326,150],{"class":149},[139,34328,33725],{"class":153},[139,34330,33715],{"class":145},[139,34332,34333],{"class":141,"line":4046},[139,34334,34335],{"class":2512},"                                       # 规定8个进程\n",[139,34337,34338,34341,34343,34345],{"class":141,"line":4051},[139,34339,34340],{"class":2111},"                                       num_workers",[139,34342,150],{"class":149},[139,34344,2833],{"class":153},[139,34346,164],{"class":145},[139,34348,34349,34352,34354,34356,34358,34360],{"class":141,"line":4065},[139,34350,34351],{"class":145},"    val_dataloader",[139,34353,150],{"class":149},[139,34355,33783],{"class":145},[139,34357,33786],{"class":2111},[139,34359,150],{"class":149},[139,34361,34362],{"class":145},"val_data,\n",[139,34364,34365,34368,34370,34372],{"class":141,"line":4070},[139,34366,34367],{"class":2111},"                                   batch_size",[139,34369,150],{"class":149},[139,34371,34317],{"class":153},[139,34373,33715],{"class":145},[139,34375,34376,34379,34381,34383],{"class":141,"line":4860},[139,34377,34378],{"class":2111},"                                   shuffle",[139,34380,150],{"class":149},[139,34382,33725],{"class":153},[139,34384,33715],{"class":145},[139,34386,34387,34390,34392,34394],{"class":141,"line":4874},[139,34388,34389],{"class":2111},"                                   num_workers",[139,34391,150],{"class":149},[139,34393,2833],{"class":153},[139,34395,164],{"class":145},[139,34397,34398,34400],{"class":141,"line":4882},[139,34399,978],{"class":149},[139,34401,34402],{"class":145}," train_dataloader,val_dataloader\n",[139,34404,34405],{"class":141,"line":4887},[139,34406,843],{"emptyLinePlaceholder":842},[139,34408,34409],{"class":141,"line":4893},[139,34410,34411],{"class":2512},"# 验证是否出错\n",[139,34413,34414],{"class":141,"line":4899},[139,34415,34416],{"class":2512},"# train_val_data_process()\n",[139,34418,34419],{"class":141,"line":4904},[139,34420,843],{"emptyLinePlaceholder":842},[139,34422,34423],{"class":141,"line":10222},[139,34424,34425],{"class":2512},"# 定义模型训练函数\n",[139,34427,34428,34430,34433],{"class":141,"line":10246},[139,34429,778],{"class":149},[139,34431,34432],{"class":781}," train_model_process",[139,34434,34435],{"class":145},"(model,train_dataloader,val_dataloader,num_epochs):\n",[139,34437,34438,34440,34442,34444,34446,34448,34450,34452,34455],{"class":141,"line":10251},[139,34439,33488],{"class":145},[139,34441,150],{"class":149},[139,34443,32706],{"class":145},[139,34445,33495],{"class":160},[139,34447,3992],{"class":149},[139,34449,33500],{"class":145},[139,34451,656],{"class":149},[139,34453,34454],{"class":160}," 'cpu'",[139,34456,164],{"class":145},[139,34458,34459],{"class":141,"line":10257},[139,34460,843],{"emptyLinePlaceholder":842},[139,34462,34463],{"class":141,"line":10284},[139,34464,843],{"emptyLinePlaceholder":842},[139,34466,34467],{"class":141,"line":10289},[139,34468,34469],{"class":2512},"    # 定义优化器\n",[139,34471,34472],{"class":141,"line":10295},[139,34473,34474],{"class":2512},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[139,34476,34477],{"class":141,"line":10307},[139,34478,34479],{"class":2512},"    # lr为学习率\n",[139,34481,34482,34485,34487,34490,34493,34495,34498],{"class":141,"line":10319},[139,34483,34484],{"class":145},"    optimizer",[139,34486,150],{"class":149},[139,34488,34489],{"class":145},"torch.optim.Adam(model.parameters(),",[139,34491,34492],{"class":2111},"lr",[139,34494,150],{"class":149},[139,34496,34497],{"class":153},"0.001",[139,34499,164],{"class":145},[139,34501,34502],{"class":141,"line":10331},[139,34503,843],{"emptyLinePlaceholder":842},[139,34505,34506],{"class":141,"line":11990},[139,34507,34508],{"class":2512},"    # 定义损失函数使用交叉熵损失函数\n",[139,34510,34511,34514,34516],{"class":141,"line":12015},[139,34512,34513],{"class":145},"    criterion",[139,34515,150],{"class":149},[139,34517,34518],{"class":145},"nn.CrossEntropyLoss()\n",[139,34520,34521],{"class":141,"line":12038},[139,34522,843],{"emptyLinePlaceholder":842},[139,34524,34525],{"class":141,"line":12062},[139,34526,34527],{"class":2512},"    # 将模型放到GPU中进行训练\n",[139,34529,34530,34532,34534],{"class":141,"line":12067},[139,34531,33540],{"class":145},[139,34533,150],{"class":149},[139,34535,34536],{"class":145},"model.to(device)\n",[139,34538,34539],{"class":141,"line":12072},[139,34540,34541],{"class":2512},"    # 复制当前模型的参数\n",[139,34543,34544],{"class":141,"line":12077},[139,34545,34546],{"class":2512},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[139,34548,34549],{"class":141,"line":12086},[139,34550,34551],{"class":2512},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[139,34553,34554,34557,34559],{"class":141,"line":12091},[139,34555,34556],{"class":145},"    best_model_wts",[139,34558,150],{"class":149},[139,34560,34561],{"class":145},"copy.deepcopy(model.state_dict())\n",[139,34563,34564],{"class":141,"line":12097},[139,34565,843],{"emptyLinePlaceholder":842},[139,34567,34568],{"class":141,"line":12118},[139,34569,843],{"emptyLinePlaceholder":842},[139,34571,34572],{"class":141,"line":12124},[139,34573,34574],{"class":2512},"    # 初始化参数\n",[139,34576,34577],{"class":141,"line":12138},[139,34578,34579],{"class":2512},"    # 最高准确度\n",[139,34581,34582,34585,34587],{"class":141,"line":12144},[139,34583,34584],{"class":145},"    best_acc",[139,34586,150],{"class":149},[139,34588,34589],{"class":153},"0.0\n",[139,34591,34592],{"class":141,"line":12171},[139,34593,34594],{"class":2512},"    # 训练集损失列表\n",[139,34596,34597,34600,34602],{"class":141,"line":12180},[139,34598,34599],{"class":145},"    train_loss_all",[139,34601,150],{"class":149},[139,34603,34604],{"class":145},"[]\n",[139,34606,34607],{"class":141,"line":12186},[139,34608,34609],{"class":2512},"    # 验证集函数列表\n",[139,34611,34612,34615,34617],{"class":141,"line":12194},[139,34613,34614],{"class":145},"    val_loss_all",[139,34616,150],{"class":149},[139,34618,34604],{"class":145},[139,34620,34621],{"class":141,"line":12199},[139,34622,34623],{"class":2512},"    # 训练集准确度列表\n",[139,34625,34626,34629,34631],{"class":141,"line":18871},[139,34627,34628],{"class":145},"    train_acc_all",[139,34630,150],{"class":149},[139,34632,34604],{"class":145},[139,34634,34635],{"class":141,"line":18877},[139,34636,34637],{"class":2512},"    # 验证集准确度列表\n",[139,34639,34640,34643,34645],{"class":141,"line":18900},[139,34641,34642],{"class":145},"    val_acc_all",[139,34644,150],{"class":149},[139,34646,34604],{"class":145},[139,34648,34649],{"class":141,"line":18906},[139,34650,843],{"emptyLinePlaceholder":842},[139,34652,34653],{"class":141,"line":18929},[139,34654,34655],{"class":2512},"    # 保存当前时间--->方便看每轮训练的时间\n",[139,34657,34658,34661,34663],{"class":141,"line":18943},[139,34659,34660],{"class":145},"    since",[139,34662,150],{"class":149},[139,34664,34665],{"class":145},"time.time()\n",[139,34667,34668],{"class":141,"line":18963},[139,34669,843],{"emptyLinePlaceholder":842},[139,34671,34672],{"class":141,"line":18969},[139,34673,843],{"emptyLinePlaceholder":842},[139,34675,34676],{"class":141,"line":18980},[139,34677,34678],{"class":2512},"    # 准备工作完成--->开始训练模型\n",[139,34680,34681,34683,34686,34688,34691],{"class":141,"line":19003},[139,34682,5482],{"class":149},[139,34684,34685],{"class":145}," epoch ",[139,34687,1976],{"class":149},[139,34689,34690],{"class":153}," range",[139,34692,34693],{"class":145},"(num_epochs):\n",[139,34695,34696,34699,34701,34704,34707,34709,34711,34713,34716,34718,34720],{"class":141,"line":19025},[139,34697,34698],{"class":153},"        print",[139,34700,157],{"class":145},[139,34702,34703],{"class":160},"\"Epoch ",[139,34705,34706],{"class":153},"{}",[139,34708,3019],{"class":160},[139,34710,34706],{"class":153},[139,34712,634],{"class":160},[139,34714,34715],{"class":145},".format(epoch,num_epochs",[139,34717,855],{"class":149},[139,34719,410],{"class":153},[139,34721,207],{"class":145},[139,34723,34724,34726,34728,34731,34733,34735],{"class":141,"line":19030},[139,34725,34698],{"class":153},[139,34727,157],{"class":145},[139,34729,34730],{"class":160},"\"-\"",[139,34732,2892],{"class":149},[139,34734,536],{"class":153},[139,34736,164],{"class":145},[139,34738,34739],{"class":141,"line":19036},[139,34740,843],{"emptyLinePlaceholder":842},[139,34742,34743],{"class":141,"line":19050},[139,34744,34745],{"class":2512},"        # 初始化参数\n",[139,34747,34748],{"class":141,"line":19063},[139,34749,34750],{"class":2512},"        # 训练集损失函数\n",[139,34752,34753,34756,34758],{"class":141,"line":19068},[139,34754,34755],{"class":145},"        train_loss",[139,34757,150],{"class":149},[139,34759,34589],{"class":153},[139,34761,34762],{"class":141,"line":19082},[139,34763,34764],{"class":2512},"        # 训练集准确度\n",[139,34766,34767,34770,34772],{"class":141,"line":19087},[139,34768,34769],{"class":145},"        train_corrects",[139,34771,150],{"class":149},[139,34773,5367],{"class":153},[139,34775,34776],{"class":141,"line":19093},[139,34777,34778],{"class":2512},"        # 验证集损失函数\n",[139,34780,34781,34784,34786],{"class":141,"line":19098},[139,34782,34783],{"class":145},"        val_loss",[139,34785,150],{"class":149},[139,34787,34589],{"class":153},[139,34789,34790],{"class":141,"line":19112},[139,34791,34792],{"class":2512},"        # 验证集准确度\n",[139,34794,34795,34798,34800],{"class":141,"line":19117},[139,34796,34797],{"class":145},"        val_corrects",[139,34799,150],{"class":149},[139,34801,5367],{"class":153},[139,34803,34804],{"class":141,"line":19122},[139,34805,34806],{"class":2512},"        # 训练集样本数量\n",[139,34808,34809,34812,34814],{"class":141,"line":19136},[139,34810,34811],{"class":145},"        train_num",[139,34813,150],{"class":149},[139,34815,5367],{"class":153},[139,34817,34818],{"class":141,"line":19148},[139,34819,34820],{"class":2512},"        # 验证集样本数量\n",[139,34822,34823,34826,34828],{"class":141,"line":19153},[139,34824,34825],{"class":145},"        val_num",[139,34827,150],{"class":149},[139,34829,5367],{"class":153},[139,34831,34832],{"class":141,"line":19166},[139,34833,34834],{"class":2512},"        # 将数据放到设备,并开始训练\n",[139,34836,34837,34839,34841,34843,34845],{"class":141,"line":19171},[139,34838,5684],{"class":149},[139,34840,33850],{"class":145},[139,34842,1976],{"class":149},[139,34844,33855],{"class":153},[139,34846,34847],{"class":145},"(train_dataloader):\n",[139,34849,34850],{"class":141,"line":19176},[139,34851,34852],{"class":2512},"            # 将特征放入到训练设备\n",[139,34854,34855,34858,34860],{"class":141,"line":19181},[139,34856,34857],{"class":145},"            b_x",[139,34859,150],{"class":149},[139,34861,34862],{"class":145},"b_x.to(device)\n",[139,34864,34865],{"class":141,"line":19194},[139,34866,34867],{"class":2512},"            # 将标签放入到训练设备当中\n",[139,34869,34870,34873,34875],{"class":141,"line":19199},[139,34871,34872],{"class":145},"            b_y",[139,34874,150],{"class":149},[139,34876,34877],{"class":145},"b_y.to(device)\n",[139,34879,34881],{"class":141,"line":34880},98,[139,34882,34883],{"class":2512},"            # 设置模型为训练模式\n",[139,34885,34887],{"class":141,"line":34886},99,[139,34888,34889],{"class":145},"            model.train()\n",[139,34891,34893],{"class":141,"line":34892},100,[139,34894,34895],{"class":2512},"            # 将数据放到模型当中,开始前向传播\n",[139,34897,34899],{"class":141,"line":34898},101,[139,34900,34901],{"class":2512},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[139,34903,34905,34908,34910],{"class":141,"line":34904},102,[139,34906,34907],{"class":145},"            output",[139,34909,150],{"class":149},[139,34911,34912],{"class":145},"model(b_x)\n",[139,34914,34916],{"class":141,"line":34915},103,[139,34917,34918],{"class":2512},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[139,34920,34922,34925,34927,34930,34933,34935,34937],{"class":141,"line":34921},104,[139,34923,34924],{"class":145},"            pre_lab",[139,34926,150],{"class":149},[139,34928,34929],{"class":145},"torch.argmax(output,",[139,34931,34932],{"class":2111},"dim",[139,34934,150],{"class":149},[139,34936,410],{"class":153},[139,34938,164],{"class":145},[139,34940,34942],{"class":141,"line":34941},105,[139,34943,34944],{"class":2512},"            # 计算每一个batch的损失函数\n",[139,34946,34948,34951,34953],{"class":141,"line":34947},106,[139,34949,34950],{"class":145},"            loss",[139,34952,150],{"class":149},[139,34954,34955],{"class":145},"criterion(output,b_y)\n",[139,34957,34959],{"class":141,"line":34958},107,[139,34960,34961],{"class":2512},"            # 将梯度初始化为0\n",[139,34963,34965],{"class":141,"line":34964},108,[139,34966,34967],{"class":145},"            optimizer.zero_grad()\n",[139,34969,34971],{"class":141,"line":34970},109,[139,34972,34973],{"class":2512},"            # 梯度置为0后再进行反向传播\n",[139,34975,34977],{"class":141,"line":34976},110,[139,34978,34979],{"class":145},"            loss.backward()\n",[139,34981,34983],{"class":141,"line":34982},111,[139,34984,34985],{"class":2512},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[139,34987,34989],{"class":141,"line":34988},112,[139,34990,34991],{"class":145},"            optimizer.step()\n",[139,34993,34995],{"class":141,"line":34994},113,[139,34996,34997],{"class":2512},"            # loss.item()指的是batch的平均损失\n",[139,34999,35001,35004,35006,35009,35011,35014,35016],{"class":141,"line":35000},114,[139,35002,35003],{"class":145},"            train_loss",[139,35005,11751],{"class":149},[139,35007,35008],{"class":145},"loss.item()",[139,35010,2892],{"class":149},[139,35012,35013],{"class":145},"b_x.size(",[139,35015,2634],{"class":153},[139,35017,164],{"class":145},[139,35019,35021],{"class":141,"line":35020},115,[139,35022,35023],{"class":2512},"            # 计算每个批次中正确预测的数量\n",[139,35025,35027,35030,35032,35035,35037],{"class":141,"line":35026},116,[139,35028,35029],{"class":145},"            train_corrects",[139,35031,11751],{"class":149},[139,35033,35034],{"class":145},"torch.sum(pre_lab",[139,35036,5232],{"class":149},[139,35038,35039],{"class":145},"b_y.data)\n",[139,35041,35043],{"class":141,"line":35042},117,[139,35044,35045],{"class":2512},"            # 计算目前为止一共处理了多少样本\n",[139,35047,35049,35052,35054,35056,35058],{"class":141,"line":35048},118,[139,35050,35051],{"class":145},"            train_num",[139,35053,11751],{"class":149},[139,35055,35013],{"class":145},[139,35057,2634],{"class":153},[139,35059,164],{"class":145},[139,35061,35063],{"class":141,"line":35062},119,[139,35064,35065],{"class":2512},"        # 验证数据\n",[139,35067,35069,35071,35074,35076,35078],{"class":141,"line":35068},120,[139,35070,5684],{"class":149},[139,35072,35073],{"class":145}," step ,(b_x,b_y) ",[139,35075,1976],{"class":149},[139,35077,33855],{"class":153},[139,35079,35080],{"class":145},"(val_dataloader):\n",[139,35082,35084],{"class":141,"line":35083},121,[139,35085,35086],{"class":2512},"            # 将特征放到验证设备当中\n",[139,35088,35090,35092,35094],{"class":141,"line":35089},122,[139,35091,34857],{"class":145},[139,35093,150],{"class":149},[139,35095,34862],{"class":145},[139,35097,35099],{"class":141,"line":35098},123,[139,35100,35101],{"class":2512},"            # 将标签放到放到训练设备当中\n",[139,35103,35105,35107,35109],{"class":141,"line":35104},124,[139,35106,34872],{"class":145},[139,35108,150],{"class":149},[139,35110,34877],{"class":145},[139,35112,35114],{"class":141,"line":35113},125,[139,35115,35116],{"class":2512},"            # 开启验证模式，设置模型为评估模式\n",[139,35118,35120],{"class":141,"line":35119},126,[139,35121,35122],{"class":145},"            model.eval()\n",[139,35124,35126,35129],{"class":141,"line":35125},127,[139,35127,35128],{"class":149},"            with",[139,35130,35131],{"class":145}," torch.no_grad():\n",[139,35133,35135],{"class":141,"line":35134},128,[139,35136,35137],{"class":2512},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[139,35139,35141,35144,35146],{"class":141,"line":35140},129,[139,35142,35143],{"class":145},"                output ",[139,35145,150],{"class":149},[139,35147,35148],{"class":145}," model(b_x)\n",[139,35150,35152],{"class":141,"line":35151},130,[139,35153,35154],{"class":2512},"                # 查找每一行中最大值对应的下标\n",[139,35156,35158,35161,35163,35166,35168,35170,35172],{"class":141,"line":35157},131,[139,35159,35160],{"class":145},"                pre_lab ",[139,35162,150],{"class":149},[139,35164,35165],{"class":145}," torch.argmax(output, ",[139,35167,34932],{"class":2111},[139,35169,150],{"class":149},[139,35171,410],{"class":153},[139,35173,164],{"class":145},[139,35175,35177],{"class":141,"line":35176},132,[139,35178,35179],{"class":2512},"                # 计算验证集上的当前 batch 损失\n",[139,35181,35183,35186,35188],{"class":141,"line":35182},133,[139,35184,35185],{"class":145},"                val_batch_loss ",[139,35187,150],{"class":149},[139,35189,35190],{"class":145}," criterion(output, b_y)\n",[139,35192,35194],{"class":141,"line":35193},134,[139,35195,35196],{"class":2512},"                # 对损失函数进行累加（按样本数加权）\n",[139,35198,35200,35203,35205,35208,35210,35213,35215],{"class":141,"line":35199},135,[139,35201,35202],{"class":145},"                val_loss ",[139,35204,11751],{"class":149},[139,35206,35207],{"class":145}," val_batch_loss.item() ",[139,35209,2892],{"class":149},[139,35211,35212],{"class":145}," b_x.size(",[139,35214,2634],{"class":153},[139,35216,164],{"class":145},[139,35218,35220,35223,35225,35228,35230],{"class":141,"line":35219},136,[139,35221,35222],{"class":145},"                val_corrects ",[139,35224,11751],{"class":149},[139,35226,35227],{"class":145}," torch.sum(pre_lab ",[139,35229,5232],{"class":149},[139,35231,35232],{"class":145}," b_y.data)\n",[139,35234,35236],{"class":141,"line":35235},137,[139,35237,35238],{"class":2512},"                # 当前用于验证的样本数量\n",[139,35240,35242,35245,35247,35249,35251],{"class":141,"line":35241},138,[139,35243,35244],{"class":145},"            val_num ",[139,35246,11751],{"class":149},[139,35248,35212],{"class":145},[139,35250,2634],{"class":153},[139,35252,164],{"class":145},[139,35254,35256],{"class":141,"line":35255},139,[139,35257,35258],{"class":2512},"        # 计算并保存每一次迭代的loss值和准确率\n",[139,35260,35262],{"class":141,"line":35261},140,[139,35263,35264],{"class":2512},"        # 计算并保存训练集的loss值\n",[139,35266,35268,35271,35273],{"class":141,"line":35267},141,[139,35269,35270],{"class":145},"        train_loss_all.append(train_loss",[139,35272,3019],{"class":149},[139,35274,35275],{"class":145},"train_num)\n",[139,35277,35279],{"class":141,"line":35278},142,[139,35280,35281],{"class":2512},"        # 取双精度\n",[139,35283,35285],{"class":141,"line":35284},143,[139,35286,35287],{"class":2512},"        # 计算并保存训练集的准确率\n",[139,35289,35291,35294,35296],{"class":141,"line":35290},144,[139,35292,35293],{"class":145},"        train_acc_all.append(train_corrects.double().item()",[139,35295,3019],{"class":149},[139,35297,35275],{"class":145},[139,35299,35301],{"class":141,"line":35300},145,[139,35302,35303],{"class":2512},"        # 计算并保存验证集的loss值\n",[139,35305,35307,35310,35312],{"class":141,"line":35306},146,[139,35308,35309],{"class":145},"        val_loss_all.append(val_loss",[139,35311,3019],{"class":149},[139,35313,35314],{"class":145},"val_num)\n",[139,35316,35318],{"class":141,"line":35317},147,[139,35319,35320],{"class":2512},"        # 计算并保存验证集的准确率\n",[139,35322,35324,35327,35329],{"class":141,"line":35323},148,[139,35325,35326],{"class":145},"        val_acc_all.append(val_corrects.double().item()",[139,35328,3019],{"class":149},[139,35330,35314],{"class":145},[139,35332,35334],{"class":141,"line":35333},149,[139,35335,843],{"emptyLinePlaceholder":842},[139,35337,35339],{"class":141,"line":35338},150,[139,35340,35341],{"class":2512},"        # 打印训练一轮的loss值和准确率\n",[139,35343,35345,35347,35349,35351,35353,35356,35358,35361,35363,35366,35368,35370,35372,35374,35377,35379,35381,35384,35386,35388],{"class":141,"line":35344},151,[139,35346,34698],{"class":153},[139,35348,157],{"class":145},[139,35350,5873],{"class":160},[139,35352,34706],{"class":153},[139,35354,35355],{"class":160},"train loss:",[139,35357,625],{"class":153},[139,35359,35360],{"class":149},":.4f",[139,35362,631],{"class":153},[139,35364,35365],{"class":160}," train acc:",[139,35367,625],{"class":153},[139,35369,35360],{"class":149},[139,35371,631],{"class":153},[139,35373,5873],{"class":160},[139,35375,35376],{"class":145},".format(epoch,train_loss_all[",[139,35378,855],{"class":149},[139,35380,410],{"class":153},[139,35382,35383],{"class":145},"],train_acc_all[",[139,35385,855],{"class":149},[139,35387,410],{"class":153},[139,35389,1454],{"class":145},[139,35391,35393,35395,35397,35399,35401,35404,35406,35408,35410,35413,35415,35417,35419,35421,35424,35426,35428,35431,35433,35435],{"class":141,"line":35392},152,[139,35394,34698],{"class":153},[139,35396,157],{"class":145},[139,35398,5873],{"class":160},[139,35400,34706],{"class":153},[139,35402,35403],{"class":160},"val loss:",[139,35405,625],{"class":153},[139,35407,35360],{"class":149},[139,35409,631],{"class":153},[139,35411,35412],{"class":160}," val acc:",[139,35414,625],{"class":153},[139,35416,35360],{"class":149},[139,35418,631],{"class":153},[139,35420,5873],{"class":160},[139,35422,35423],{"class":145},".format(epoch,val_loss_all[",[139,35425,855],{"class":149},[139,35427,410],{"class":153},[139,35429,35430],{"class":145},"],val_acc_all[",[139,35432,855],{"class":149},[139,35434,410],{"class":153},[139,35436,1454],{"class":145},[139,35438,35440],{"class":141,"line":35439},153,[139,35441,843],{"emptyLinePlaceholder":842},[139,35443,35445],{"class":141,"line":35444},154,[139,35446,35447],{"class":2512},"        # 判断准确度--->保存最优模型\n",[139,35449,35451,35453,35456,35458,35460,35462,35464],{"class":141,"line":35450},155,[139,35452,4780],{"class":149},[139,35454,35455],{"class":145}," val_acc_all[",[139,35457,855],{"class":149},[139,35459,410],{"class":153},[139,35461,3373],{"class":145},[139,35463,958],{"class":149},[139,35465,35466],{"class":145},"best_acc:\n",[139,35468,35470],{"class":141,"line":35469},156,[139,35471,35472],{"class":2512},"            # 保存当前模型准确度\n",[139,35474,35476,35479,35481,35483,35486,35488,35490],{"class":141,"line":35475},157,[139,35477,35478],{"class":145},"            best_acc:",[139,35480,2496],{"class":153},[139,35482,150],{"class":149},[139,35484,35485],{"class":145},"val_acc_all[",[139,35487,855],{"class":149},[139,35489,410],{"class":153},[139,35491,424],{"class":145},[139,35493,35495],{"class":141,"line":35494},158,[139,35496,35497],{"class":2512},"            # 保存当前的准确度\n",[139,35499,35501],{"class":141,"line":35500},159,[139,35502,35503],{"class":2512},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[139,35505,35507,35510,35512],{"class":141,"line":35506},160,[139,35508,35509],{"class":145},"            best_model_wts",[139,35511,150],{"class":149},[139,35513,34561],{"class":145},[139,35515,35517],{"class":141,"line":35516},161,[139,35518,843],{"emptyLinePlaceholder":842},[139,35520,35522],{"class":141,"line":35521},162,[139,35523,35524],{"class":2512},"        # 计算耗时\n",[139,35526,35528,35531,35533,35536,35538],{"class":141,"line":35527},163,[139,35529,35530],{"class":145},"        time_use",[139,35532,150],{"class":149},[139,35534,35535],{"class":145},"time.time()",[139,35537,855],{"class":149},[139,35539,35540],{"class":145},"since\n",[139,35542,35544,35546,35548,35551,35553,35556,35558,35560,35562,35564,35566,35569,35572,35575,35577,35580,35582,35584],{"class":141,"line":35543},164,[139,35545,34698],{"class":153},[139,35547,157],{"class":145},[139,35549,35550],{"class":160},"'训练和验证耗费的时间",[139,35552,625],{"class":153},[139,35554,35555],{"class":149},":.0f",[139,35557,631],{"class":153},[139,35559,2979],{"class":160},[139,35561,625],{"class":153},[139,35563,35555],{"class":149},[139,35565,631],{"class":153},[139,35567,35568],{"class":160},"s'",[139,35570,35571],{"class":145},".format(time_use",[139,35573,35574],{"class":149},"\u002F\u002F",[139,35576,3341],{"class":153},[139,35578,35579],{"class":145},",time_use",[139,35581,2766],{"class":149},[139,35583,3341],{"class":153},[139,35585,207],{"class":145},[139,35587,35589],{"class":141,"line":35588},165,[139,35590,35591],{"class":2512},"    # 选择最优参数\n",[139,35593,35595],{"class":141,"line":35594},166,[139,35596,35597],{"class":2512},"    # 加载最高准确率下的模型参数\n",[139,35599,35601],{"class":141,"line":35600},167,[139,35602,35603],{"class":2512},"    # model.load_state_dict(best_model_wts)\n",[139,35605,35607,35610,35613],{"class":141,"line":35606},168,[139,35608,35609],{"class":145},"    torch.save(model.state_dict(best_model_wts), ",[139,35611,35612],{"class":160},"'.\u002Fbest_model.pth'",[139,35614,164],{"class":145},[139,35616,35618],{"class":141,"line":35617},169,[139,35619,35620],{"class":2512},"    # 或者写成\n",[139,35622,35624],{"class":141,"line":35623},170,[139,35625,35626],{"class":2512},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[139,35628,35630],{"class":141,"line":35629},171,[139,35631,35632],{"class":2512},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[139,35634,35636,35639,35641,35644,35647,35649],{"class":141,"line":35635},172,[139,35637,35638],{"class":145},"    train_process",[139,35640,150],{"class":149},[139,35642,35643],{"class":145},"pd.DataFrame(",[139,35645,35646],{"class":2111},"data",[139,35648,150],{"class":149},[139,35650,3843],{"class":145},[139,35652,35654,35657,35659,35662],{"class":141,"line":35653},173,[139,35655,35656],{"class":160},"        \"epoch\"",[139,35658,3294],{"class":145},[139,35660,35661],{"class":153},"range",[139,35663,35664],{"class":145},"(num_epochs),\n",[139,35666,35668,35671],{"class":141,"line":35667},174,[139,35669,35670],{"class":160},"        \"train_loss_all\"",[139,35672,35673],{"class":145},":train_loss_all,\n",[139,35675,35677,35680],{"class":141,"line":35676},175,[139,35678,35679],{"class":160},"        \"val_loss_all\"",[139,35681,35682],{"class":145},":val_loss_all,\n",[139,35684,35686,35689],{"class":141,"line":35685},176,[139,35687,35688],{"class":160},"        \"train_acc_all\"",[139,35690,35691],{"class":145},":train_acc_all,\n",[139,35693,35695,35698],{"class":141,"line":35694},177,[139,35696,35697],{"class":160},"        \"val_acc_all\"",[139,35699,35700],{"class":145},":val_acc_all\n",[139,35702,35704],{"class":141,"line":35703},178,[139,35705,35706],{"class":145},"    })\n",[139,35708,35710],{"class":141,"line":35709},179,[139,35711,35712],{"class":2512},"    # 返回训练保存的过程\n",[139,35714,35716,35718],{"class":141,"line":35715},180,[139,35717,978],{"class":149},[139,35719,35720],{"class":145}," train_process\n",[139,35722,35724],{"class":141,"line":35723},181,[139,35725,843],{"emptyLinePlaceholder":842},[139,35727,35729],{"class":141,"line":35728},182,[139,35730,35731],{"class":2512},"# 将loss值和精度按照图片的形式展示出来\n",[139,35733,35735,35737,35740],{"class":141,"line":35734},183,[139,35736,778],{"class":149},[139,35738,35739],{"class":781}," matplot_acc_loss",[139,35741,35742],{"class":145},"(train_process):\n",[139,35744,35746],{"class":141,"line":35745},184,[139,35747,35748],{"class":2512},"    # 设置图的大小\n",[139,35750,35752,35755,35757,35759,35761,35763,35765,35767],{"class":141,"line":35751},185,[139,35753,35754],{"class":145},"    plt.figure(",[139,35756,33942],{"class":2111},[139,35758,150],{"class":149},[139,35760,157],{"class":145},[139,35762,2934],{"class":153},[139,35764,2816],{"class":145},[139,35766,1476],{"class":153},[139,35768,207],{"class":145},[139,35770,35772],{"class":141,"line":35771},186,[139,35773,35774],{"class":2512},"    # 设置图中有几张图\n",[139,35776,35778],{"class":141,"line":35777},187,[139,35779,35780],{"class":2512},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[139,35782,35784],{"class":141,"line":35783},188,[139,35785,35786],{"class":2512},"    # ①loss图\n",[139,35788,35790,35792,35794,35796,35798,35800,35802],{"class":141,"line":35789},189,[139,35791,33976],{"class":145},[139,35793,410],{"class":153},[139,35795,2816],{"class":145},[139,35797,416],{"class":153},[139,35799,2816],{"class":145},[139,35801,410],{"class":153},[139,35803,164],{"class":145},[139,35805,35807],{"class":141,"line":35806},190,[139,35808,35809],{"class":2512},"    # 补充:\n",[139,35811,35813],{"class":141,"line":35812},191,[139,35814,35815],{"class":2512},"    # plt.subplot(nrows, ncols, index)\n",[139,35817,35819],{"class":141,"line":35818},192,[139,35820,35821],{"class":2512},"    # nrows：行数\n",[139,35823,35825],{"class":141,"line":35824},193,[139,35826,35827],{"class":2512},"    # ncols：列数\n",[139,35829,35831],{"class":141,"line":35830},194,[139,35832,35833],{"class":2512},"    # index：目前选中第几个子图（从1开始）\n",[139,35835,35837,35840,35843,35846,35849,35851,35854,35856,35859],{"class":141,"line":35836},195,[139,35838,35839],{"class":145},"    plt.plot(train_process[",[139,35841,35842],{"class":160},"\"epoch\"",[139,35844,35845],{"class":145},"],train_process.train_loss_all,",[139,35847,35848],{"class":160},"'ro-'",[139,35850,2816],{"class":145},[139,35852,35853],{"class":2111},"label",[139,35855,150],{"class":149},[139,35857,35858],{"class":160},"'train loss'",[139,35860,164],{"class":145},[139,35862,35864,35866,35868,35871,35874,35876,35878,35880,35883],{"class":141,"line":35863},196,[139,35865,35839],{"class":145},[139,35867,35842],{"class":160},[139,35869,35870],{"class":145},"],train_process.val_loss_all,",[139,35872,35873],{"class":160},"'bs--'",[139,35875,2816],{"class":145},[139,35877,35853],{"class":2111},[139,35879,150],{"class":149},[139,35881,35882],{"class":160},"'val loss'",[139,35884,164],{"class":145},[139,35886,35888],{"class":141,"line":35887},197,[139,35889,35890],{"class":2512},"    # 添加一个图例\n",[139,35892,35894],{"class":141,"line":35893},198,[139,35895,35896],{"class":145},"    plt.legend()\n",[139,35898,35900],{"class":141,"line":35899},199,[139,35901,35902],{"class":2512},"    # 给轴添加标签\n",[139,35904,35906,35909,35912],{"class":141,"line":35905},200,[139,35907,35908],{"class":145},"    plt.xlabel(",[139,35910,35911],{"class":160},"'epoch'",[139,35913,164],{"class":145},[139,35915,35917,35920,35923],{"class":141,"line":35916},201,[139,35918,35919],{"class":145},"    plt.ylabel(",[139,35921,35922],{"class":160},"'loss'",[139,35924,164],{"class":145},[139,35926,35928],{"class":141,"line":35927},202,[139,35929,35930],{"class":2512},"    # ②准确度图\n",[139,35932,35934,35936,35938,35940,35942,35944,35946],{"class":141,"line":35933},203,[139,35935,33976],{"class":145},[139,35937,410],{"class":153},[139,35939,2816],{"class":145},[139,35941,416],{"class":153},[139,35943,2816],{"class":145},[139,35945,416],{"class":153},[139,35947,164],{"class":145},[139,35949,35951,35953,35955,35958,35960,35962,35964,35966,35969],{"class":141,"line":35950},204,[139,35952,35839],{"class":145},[139,35954,35842],{"class":160},[139,35956,35957],{"class":145},"],train_process.train_acc_all,",[139,35959,35848],{"class":160},[139,35961,2816],{"class":145},[139,35963,35853],{"class":2111},[139,35965,150],{"class":149},[139,35967,35968],{"class":160},"'train acc'",[139,35970,164],{"class":145},[139,35972,35974,35976,35978,35981,35983,35985,35987,35989,35992],{"class":141,"line":35973},205,[139,35975,35839],{"class":145},[139,35977,35842],{"class":160},[139,35979,35980],{"class":145},"],train_process.val_acc_all,",[139,35982,35873],{"class":160},[139,35984,2816],{"class":145},[139,35986,35853],{"class":2111},[139,35988,150],{"class":149},[139,35990,35991],{"class":160},"'val acc'",[139,35993,164],{"class":145},[139,35995,35997],{"class":141,"line":35996},206,[139,35998,35999],{"class":2512},"    # 添加图例\n",[139,36001,36003],{"class":141,"line":36002},207,[139,36004,35896],{"class":145},[139,36006,36008,36010,36012],{"class":141,"line":36007},208,[139,36009,35908],{"class":145},[139,36011,35842],{"class":160},[139,36013,164],{"class":145},[139,36015,36017,36019,36022],{"class":141,"line":36016},209,[139,36018,35919],{"class":145},[139,36020,36021],{"class":160},"\"acc\"",[139,36023,164],{"class":145},[139,36025,36027],{"class":141,"line":36026},210,[139,36028,36029],{"class":145},"    plt.show()\n",[139,36031,36033],{"class":141,"line":36032},211,[139,36034,843],{"emptyLinePlaceholder":842},[139,36036,36038],{"class":141,"line":36037},212,[139,36039,36040],{"class":2512},"# 正式开始训练:\n",[139,36042,36044,36046,36048,36050,36052],{"class":141,"line":36043},213,[139,36045,1729],{"class":149},[139,36047,1732],{"class":153},[139,36049,5232],{"class":149},[139,36051,33476],{"class":160},[139,36053,246],{"class":145},[139,36055,36057],{"class":141,"line":36056},214,[139,36058,36059],{"class":2512},"    # 将模型实例化\n",[139,36061,36063,36066,36068],{"class":141,"line":36062},215,[139,36064,36065],{"class":145},"    LeNet",[139,36067,150],{"class":149},[139,36069,36070],{"class":145},"LeNet()\n",[139,36072,36074,36077,36079],{"class":141,"line":36073},216,[139,36075,36076],{"class":145},"    train_dataloader,val_dataloader",[139,36078,150],{"class":149},[139,36080,36081],{"class":145},"train_val_data_process()\n",[139,36083,36085,36087,36089,36092,36095,36097,36099],{"class":141,"line":36084},217,[139,36086,35638],{"class":145},[139,36088,150],{"class":149},[139,36090,36091],{"class":145},"train_model_process(LeNet,train_dataloader,val_dataloader,",[139,36093,36094],{"class":2111},"num_epochs",[139,36096,150],{"class":149},[139,36098,3135],{"class":153},[139,36100,164],{"class":145},[139,36102,36104],{"class":141,"line":36103},218,[139,36105,36106],{"class":145},"    matplot_acc_loss(train_process)\n",[19,36108,36109],{},"画图的补充点学习：",[19,36111,36112],{},[3760,36113],{"alt":135,"src":36114},"\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",[1760,36116,36117],{"start":254},[1763,36118,36119],{},"测试",[130,36121,36123],{"className":132,"code":36122,"language":134,"meta":135,"style":135},"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",[50,36124,36125,36131,36141,36153,36163,36168,36178,36188,36192,36197,36206,36223,36234,36251,36262,36278,36283,36294,36305,36316,36323,36327,36332,36342,36347,36364,36372,36376,36381,36390,36399,36403,36408,36413,36418,36424,36429,36441,36451,36461,36466,36470,36475,36484,36489,36505,36510,36515,36520,36534,36539,36553,36557,36562,36577,36582,36594,36598,36603,36615,36620,36628,36633,36638,36648,36653,36662,36667,36672,36676,36681,36686,36702,36710,36715,36720,36779,36785,36790,36801,36809,36817,36821,36826,36830,36835,36843,36848,36864,36869,36879,36889],{"__ignoreMap":135},[139,36126,36127,36129],{"class":141,"line":142},[139,36128,1064],{"class":149},[139,36130,32651],{"class":145},[139,36132,36133,36135,36137,36139],{"class":141,"line":210},[139,36134,1064],{"class":149},[139,36136,33664],{"class":145},[139,36138,1035],{"class":149},[139,36140,33669],{"class":145},[139,36142,36143,36145,36148,36150],{"class":141,"line":254},[139,36144,1265],{"class":149},[139,36146,36147],{"class":145}," jupyter_client.consoleapp ",[139,36149,1064],{"class":149},[139,36151,36152],{"class":145}," classes\n",[139,36154,36155,36157,36159,36161],{"class":141,"line":262},[139,36156,1265],{"class":149},[139,36158,33647],{"class":145},[139,36160,1064],{"class":149},[139,36162,33652],{"class":145},[139,36164,36165],{"class":141,"line":313},[139,36166,36167],{"class":2512},"# 导入数据集\n",[139,36169,36170,36172,36174,36176],{"class":141,"line":462},[139,36171,1265],{"class":149},[139,36173,33618],{"class":145},[139,36175,1064],{"class":149},[139,36177,33623],{"class":145},[139,36179,36180,36182,36184,36186],{"class":141,"line":474},[139,36181,1265],{"class":149},[139,36183,34162],{"class":145},[139,36185,1064],{"class":149},[139,36187,34167],{"class":145},[139,36189,36190],{"class":141,"line":484},[139,36191,843],{"emptyLinePlaceholder":842},[139,36193,36194],{"class":141,"line":989},[139,36195,36196],{"class":2512},"# 测试数据处理\n",[139,36198,36199,36201,36204],{"class":141,"line":994},[139,36200,778],{"class":149},[139,36202,36203],{"class":781}," test_data_process",[139,36205,34200],{"class":145},[139,36207,36208,36211,36213,36215,36217,36219,36221],{"class":141,"line":999},[139,36209,36210],{"class":145},"    test_data",[139,36212,150],{"class":149},[139,36214,33704],{"class":145},[139,36216,33707],{"class":2111},[139,36218,150],{"class":149},[139,36220,33712],{"class":160},[139,36222,33715],{"class":145},[139,36224,36225,36228,36230,36232],{"class":141,"line":1006},[139,36226,36227],{"class":2111},"                           train",[139,36229,150],{"class":149},[139,36231,2203],{"class":153},[139,36233,33715],{"class":145},[139,36235,36236,36239,36241,36243,36245,36247,36249],{"class":141,"line":1027},[139,36237,36238],{"class":2111},"                           transform",[139,36240,150],{"class":149},[139,36242,33742],{"class":145},[139,36244,33745],{"class":2111},[139,36246,150],{"class":149},[139,36248,3335],{"class":153},[139,36250,33753],{"class":145},[139,36252,36253,36256,36258,36260],{"class":141,"line":1040},[139,36254,36255],{"class":2111},"                           download",[139,36257,150],{"class":149},[139,36259,33725],{"class":153},[139,36261,164],{"class":145},[139,36263,36264,36267,36269,36271,36273,36275],{"class":141,"line":2160},[139,36265,36266],{"class":145},"    test_dataloader",[139,36268,150],{"class":149},[139,36270,33783],{"class":145},[139,36272,33786],{"class":2111},[139,36274,150],{"class":149},[139,36276,36277],{"class":145},"test_data,\n",[139,36279,36280],{"class":141,"line":2188},[139,36281,36282],{"class":2512},"                                    # 这里是一张一张进行测试\n",[139,36284,36285,36288,36290,36292],{"class":141,"line":3944},[139,36286,36287],{"class":2111},"                                    batch_size",[139,36289,150],{"class":149},[139,36291,410],{"class":153},[139,36293,33715],{"class":145},[139,36295,36296,36299,36301,36303],{"class":141,"line":3963},[139,36297,36298],{"class":2111},"                                    shuffle",[139,36300,150],{"class":149},[139,36302,33725],{"class":153},[139,36304,33715],{"class":145},[139,36306,36307,36310,36312,36314],{"class":141,"line":3968},[139,36308,36309],{"class":2111},"                                    num_workers",[139,36311,150],{"class":149},[139,36313,2634],{"class":153},[139,36315,164],{"class":145},[139,36317,36318,36320],{"class":141,"line":3982},[139,36319,978],{"class":149},[139,36321,36322],{"class":145}," test_dataloader\n",[139,36324,36325],{"class":141,"line":3987},[139,36326,843],{"emptyLinePlaceholder":842},[139,36328,36329],{"class":141,"line":4014},[139,36330,36331],{"class":2512},"# 定义模型测试函数\n",[139,36333,36334,36336,36339],{"class":141,"line":4019},[139,36335,778],{"class":149},[139,36337,36338],{"class":781}," test_model_process",[139,36340,36341],{"class":145},"(model,test_dataloader):\n",[139,36343,36344],{"class":141,"line":4036},[139,36345,36346],{"class":2512},"    # 将模型放到设备当中，先进行判断\n",[139,36348,36349,36351,36353,36355,36357,36359,36361],{"class":141,"line":4041},[139,36350,33488],{"class":145},[139,36352,150],{"class":149},[139,36354,33495],{"class":160},[139,36356,3992],{"class":149},[139,36358,33500],{"class":145},[139,36360,656],{"class":149},[139,36362,36363],{"class":160}," \"cpu\"\n",[139,36365,36366,36368,36370],{"class":141,"line":4046},[139,36367,33540],{"class":145},[139,36369,150],{"class":149},[139,36371,34536],{"class":145},[139,36373,36374],{"class":141,"line":4051},[139,36375,843],{"emptyLinePlaceholder":842},[139,36377,36378],{"class":141,"line":4065},[139,36379,36380],{"class":2512},"    # 设置初始化参数\n",[139,36382,36383,36386,36388],{"class":141,"line":4070},[139,36384,36385],{"class":145},"    test_corrects",[139,36387,150],{"class":149},[139,36389,34589],{"class":153},[139,36391,36392,36395,36397],{"class":141,"line":4860},[139,36393,36394],{"class":145},"    test_num",[139,36396,150],{"class":149},[139,36398,5367],{"class":153},[139,36400,36401],{"class":141,"line":4874},[139,36402,843],{"emptyLinePlaceholder":842},[139,36404,36405],{"class":141,"line":4882},[139,36406,36407],{"class":2512},"    # 进行模型测试\n",[139,36409,36410],{"class":141,"line":4887},[139,36411,36412],{"class":2512},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[139,36414,36415],{"class":141,"line":4893},[139,36416,36417],{"class":2512},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[139,36419,36420,36422],{"class":141,"line":4899},[139,36421,2097],{"class":149},[139,36423,35131],{"class":145},[139,36425,36426],{"class":141,"line":4904},[139,36427,36428],{"class":2512},"        # 从数据中进行\n",[139,36430,36431,36433,36436,36438],{"class":141,"line":10222},[139,36432,5684],{"class":149},[139,36434,36435],{"class":145}," test_data_x,test_data_y ",[139,36437,1976],{"class":149},[139,36439,36440],{"class":145}," test_dataloader:\n",[139,36442,36443,36446,36448],{"class":141,"line":10246},[139,36444,36445],{"class":145},"            test_data_x",[139,36447,150],{"class":149},[139,36449,36450],{"class":145},"test_data_x.to(device)\n",[139,36452,36453,36456,36458],{"class":141,"line":10251},[139,36454,36455],{"class":145},"            test_data_y",[139,36457,150],{"class":149},[139,36459,36460],{"class":145},"test_data_y.to(device)\n",[139,36462,36463],{"class":141,"line":10257},[139,36464,36465],{"class":2512},"            # 设置为验证模式\n",[139,36467,36468],{"class":141,"line":10284},[139,36469,35122],{"class":145},[139,36471,36472],{"class":141,"line":10289},[139,36473,36474],{"class":2512},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[139,36476,36477,36479,36481],{"class":141,"line":10295},[139,36478,34907],{"class":145},[139,36480,150],{"class":149},[139,36482,36483],{"class":145},"model(test_data_x)\n",[139,36485,36486],{"class":141,"line":10307},[139,36487,36488],{"class":2512},"            # 查找每一行中最大值对应的下标\n",[139,36490,36491,36493,36495,36497,36499,36501,36503],{"class":141,"line":10319},[139,36492,34924],{"class":145},[139,36494,150],{"class":149},[139,36496,34929],{"class":145},[139,36498,34932],{"class":2111},[139,36500,150],{"class":149},[139,36502,410],{"class":153},[139,36504,164],{"class":145},[139,36506,36507],{"class":141,"line":10331},[139,36508,36509],{"class":2512},"            # 计算正确率\n",[139,36511,36512],{"class":141,"line":11990},[139,36513,36514],{"class":2512},"            # .data表示是一个不带梯度信息的tensor\n",[139,36516,36517],{"class":141,"line":12015},[139,36518,36519],{"class":2512},"            # 如果预测正确，则准确度test_corrects加1\n",[139,36521,36522,36525,36527,36529,36531],{"class":141,"line":12038},[139,36523,36524],{"class":145},"            test_corrects",[139,36526,11751],{"class":149},[139,36528,35034],{"class":145},[139,36530,5232],{"class":149},[139,36532,36533],{"class":145},"test_data_y.data)\n",[139,36535,36536],{"class":141,"line":12062},[139,36537,36538],{"class":2512},"            # 将所有的测试样本进行累计\n",[139,36540,36541,36544,36546,36549,36551],{"class":141,"line":12067},[139,36542,36543],{"class":145},"            test_num",[139,36545,11751],{"class":149},[139,36547,36548],{"class":145},"test_data_x.size(",[139,36550,2634],{"class":153},[139,36552,164],{"class":145},[139,36554,36555],{"class":141,"line":12072},[139,36556,843],{"emptyLinePlaceholder":842},[139,36558,36559],{"class":141,"line":12077},[139,36560,36561],{"class":2512},"        # 计算准确度\n",[139,36563,36564,36567,36569,36572,36574],{"class":141,"line":12086},[139,36565,36566],{"class":145},"        test_acc",[139,36568,150],{"class":149},[139,36570,36571],{"class":145},"test_corrects.double().item()",[139,36573,3019],{"class":149},[139,36575,36576],{"class":145},"test_num\n",[139,36578,36579],{"class":141,"line":12091},[139,36580,36581],{"class":2512},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[139,36583,36584,36586,36588,36591],{"class":141,"line":12097},[139,36585,34698],{"class":153},[139,36587,157],{"class":145},[139,36589,36590],{"class":160},"\"测试的准确率：\"",[139,36592,36593],{"class":145},",test_acc)\n",[139,36595,36596],{"class":141,"line":12118},[139,36597,843],{"emptyLinePlaceholder":842},[139,36599,36600],{"class":141,"line":12124},[139,36601,36602],{"class":2512},"# 实现模型的测试功能\n",[139,36604,36605,36607,36609,36611,36613],{"class":141,"line":12138},[139,36606,1729],{"class":149},[139,36608,1732],{"class":153},[139,36610,5232],{"class":149},[139,36612,33476],{"class":160},[139,36614,246],{"class":145},[139,36616,36617],{"class":141,"line":12144},[139,36618,36619],{"class":2512},"    # 加载模型\n",[139,36621,36622,36624,36626],{"class":141,"line":12171},[139,36623,33540],{"class":145},[139,36625,150],{"class":149},[139,36627,36070],{"class":145},[139,36629,36630],{"class":141,"line":12180},[139,36631,36632],{"class":2512},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[139,36634,36635],{"class":141,"line":12186},[139,36636,36637],{"class":2512},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[139,36639,36640,36643,36646],{"class":141,"line":12194},[139,36641,36642],{"class":145},"    model.load_state_dict(torch.load(",[139,36644,36645],{"class":160},"'best_model.pth'",[139,36647,207],{"class":145},[139,36649,36650],{"class":141,"line":12199},[139,36651,36652],{"class":2512},"    # 数据加载\n",[139,36654,36655,36657,36659],{"class":141,"line":18871},[139,36656,36266],{"class":145},[139,36658,150],{"class":149},[139,36660,36661],{"class":145},"test_data_process()\n",[139,36663,36664],{"class":141,"line":18877},[139,36665,36666],{"class":2512},"    # 加载模型测试的函数\n",[139,36668,36669],{"class":141,"line":18900},[139,36670,36671],{"class":145},"    test_model_process(model,test_dataloader)\n",[139,36673,36674],{"class":141,"line":18906},[139,36675,843],{"emptyLinePlaceholder":842},[139,36677,36678],{"class":141,"line":18929},[139,36679,36680],{"class":2512},"    # 验证集推理实现：\n",[139,36682,36683],{"class":141,"line":18943},[139,36684,36685],{"class":2512},"    # 加载数据加载的更详细一些\n",[139,36687,36688,36690,36692,36694,36696,36698,36700],{"class":141,"line":18963},[139,36689,33488],{"class":145},[139,36691,150],{"class":149},[139,36693,33495],{"class":160},[139,36695,3992],{"class":149},[139,36697,33500],{"class":145},[139,36699,656],{"class":149},[139,36701,36363],{"class":160},[139,36703,36704,36706,36708],{"class":141,"line":18969},[139,36705,33540],{"class":145},[139,36707,150],{"class":149},[139,36709,34536],{"class":145},[139,36711,36712],{"class":141,"line":18980},[139,36713,36714],{"class":2512},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[139,36716,36717],{"class":141,"line":19003},[139,36718,36719],{"class":2512},"    # 顺序不可改变\n",[139,36721,36722,36725,36727,36729,36732,36734,36737,36739,36742,36744,36747,36749,36752,36754,36757,36759,36762,36764,36767,36769,36772,36774,36777],{"class":141,"line":19025},[139,36723,36724],{"class":145},"    classes",[139,36726,150],{"class":149},[139,36728,3325],{"class":145},[139,36730,36731],{"class":160},"'T-shirt\u002Ftop'",[139,36733,2816],{"class":145},[139,36735,36736],{"class":160},"'Trouser'",[139,36738,2816],{"class":145},[139,36740,36741],{"class":160},"'Pullover'",[139,36743,2816],{"class":145},[139,36745,36746],{"class":160},"'Dress'",[139,36748,2816],{"class":145},[139,36750,36751],{"class":160},"'Coat'",[139,36753,2816],{"class":145},[139,36755,36756],{"class":160},"'Sandal'",[139,36758,2816],{"class":145},[139,36760,36761],{"class":160},"'Shirt'",[139,36763,2816],{"class":145},[139,36765,36766],{"class":160},"'Sneaker'",[139,36768,2816],{"class":145},[139,36770,36771],{"class":160},"'Bag'",[139,36773,2816],{"class":145},[139,36775,36776],{"class":160},"'Ankle boot'",[139,36778,424],{"class":145},[139,36780,36781,36783],{"class":141,"line":19030},[139,36782,2097],{"class":149},[139,36784,35131],{"class":145},[139,36786,36787],{"class":141,"line":19036},[139,36788,36789],{"class":2512},"        # 将数据和标签都放到设备当中\n",[139,36791,36792,36794,36797,36799],{"class":141,"line":19050},[139,36793,5684],{"class":149},[139,36795,36796],{"class":145}," b_x,b_y ",[139,36798,1976],{"class":149},[139,36800,36440],{"class":145},[139,36802,36803,36805,36807],{"class":141,"line":19063},[139,36804,34857],{"class":145},[139,36806,150],{"class":149},[139,36808,34862],{"class":145},[139,36810,36811,36813,36815],{"class":141,"line":19068},[139,36812,34872],{"class":145},[139,36814,150],{"class":149},[139,36816,34877],{"class":145},[139,36818,36819],{"class":141,"line":19082},[139,36820,843],{"emptyLinePlaceholder":842},[139,36822,36823],{"class":141,"line":19087},[139,36824,36825],{"class":2512},"            # 设置模型为验证模式\n",[139,36827,36828],{"class":141,"line":19093},[139,36829,35122],{"class":145},[139,36831,36832],{"class":141,"line":19098},[139,36833,36834],{"class":2512},"            # 模型推理结果\n",[139,36836,36837,36839,36841],{"class":141,"line":19112},[139,36838,34907],{"class":145},[139,36840,150],{"class":149},[139,36842,34912],{"class":145},[139,36844,36845],{"class":141,"line":19117},[139,36846,36847],{"class":2512},"            # 获取最大下标，最大下标就是类别号\n",[139,36849,36850,36852,36854,36856,36858,36860,36862],{"class":141,"line":19122},[139,36851,34924],{"class":145},[139,36853,150],{"class":149},[139,36855,34929],{"class":145},[139,36857,34932],{"class":2111},[139,36859,150],{"class":149},[139,36861,410],{"class":153},[139,36863,164],{"class":145},[139,36865,36866],{"class":141,"line":19136},[139,36867,36868],{"class":2512},"            # 取出张量中的数值\n",[139,36870,36871,36874,36876],{"class":141,"line":19148},[139,36872,36873],{"class":145},"            result",[139,36875,150],{"class":149},[139,36877,36878],{"class":145},"pre_lab.item()\n",[139,36880,36881,36884,36886],{"class":141,"line":19153},[139,36882,36883],{"class":145},"            label",[139,36885,150],{"class":149},[139,36887,36888],{"class":145},"b_y.item()\n",[139,36890,36891,36894,36896,36899,36902,36905,36907,36910],{"class":141,"line":19166},[139,36892,36893],{"class":153},"            print",[139,36895,157],{"class":145},[139,36897,36898],{"class":160},"\"预测值：\"",[139,36900,36901],{"class":145},",classes[result],",[139,36903,36904],{"class":160},"\"------\"",[139,36906,2816],{"class":145},[139,36908,36909],{"class":160},"\"真实值：\"",[139,36911,36912],{"class":145},",classes[label])\n",[19,36914,36915],{},"（2）AlexNet",[1760,36917,36918],{},[1763,36919,36920],{},"神经网络构建",[130,36922,36924],{"className":132,"code":36923,"language":134,"meta":135,"style":135},"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",[50,36925,36926,36932,36942,36952,36964,36968,36985,36993,37008,37020,37062,37089,37132,37158,37202,37245,37288,37315,37319,37329,37334,37362,37381,37400,37404,37409,37417,37432,37442,37456,37466,37481,37496,37511,37522,37526,37531,37541,37556,37561,37575,37590,37602,37607,37618,37623,37629,37634,37646,37666,37671,37680],{"__ignoreMap":135},[139,36927,36928,36930],{"class":141,"line":142},[139,36929,1064],{"class":149},[139,36931,32651],{"class":145},[139,36933,36934,36936,36938,36940],{"class":141,"line":210},[139,36935,1265],{"class":149},[139,36937,32993],{"class":145},[139,36939,1064],{"class":149},[139,36941,32998],{"class":145},[139,36943,36944,36946,36948,36950],{"class":141,"line":254},[139,36945,1265],{"class":149},[139,36947,33010],{"class":145},[139,36949,1064],{"class":149},[139,36951,33015],{"class":145},[139,36953,36954,36956,36959,36961],{"class":141,"line":262},[139,36955,1064],{"class":149},[139,36957,36958],{"class":145}," torch.nn.functional ",[139,36960,1035],{"class":149},[139,36962,36963],{"class":145}," F\n",[139,36965,36966],{"class":141,"line":313},[139,36967,843],{"emptyLinePlaceholder":842},[139,36969,36970,36972,36975,36977,36979,36981,36983],{"class":141,"line":462},[139,36971,915],{"class":149},[139,36973,36974],{"class":781}," AlexNet",[139,36976,157],{"class":145},[139,36978,33031],{"class":781},[139,36980,2993],{"class":145},[139,36982,33036],{"class":781},[139,36984,558],{"class":145},[139,36986,36987,36989,36991],{"class":141,"line":474},[139,36988,33053],{"class":149},[139,36990,33056],{"class":153},[139,36992,33059],{"class":145},[139,36994,36995,36997,37000,37002,37004,37006],{"class":141,"line":484},[139,36996,33069],{"class":153},[139,36998,36999],{"class":145},"(AlexNet,",[139,37001,33075],{"class":153},[139,37003,33078],{"class":145},[139,37005,33081],{"class":153},[139,37007,4262],{"class":145},[139,37009,37010,37012,37015,37017],{"class":141,"line":989},[139,37011,33097],{"class":153},[139,37013,37014],{"class":145},".ReLu",[139,37016,150],{"class":149},[139,37018,37019],{"class":145},"nn.ReLU()\n",[139,37021,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042,37044,37046,37048,37050,37052,37054,37056,37058,37060],{"class":141,"line":994},[139,37023,33097],{"class":153},[139,37025,33100],{"class":145},[139,37027,150],{"class":149},[139,37029,33105],{"class":145},[139,37031,33108],{"class":2111},[139,37033,150],{"class":149},[139,37035,410],{"class":153},[139,37037,2816],{"class":145},[139,37039,33117],{"class":2111},[139,37041,150],{"class":149},[139,37043,2652],{"class":153},[139,37045,2816],{"class":145},[139,37047,33126],{"class":2111},[139,37049,150],{"class":149},[139,37051,2909],{"class":153},[139,37053,2816],{"class":145},[139,37055,33181],{"class":2111},[139,37057,150],{"class":149},[139,37059,1476],{"class":153},[139,37061,164],{"class":145},[139,37063,37064,37066,37068,37070,37073,37075,37077,37079,37081,37083,37085,37087],{"class":141,"line":999},[139,37065,33097],{"class":153},[139,37067,33165],{"class":145},[139,37069,150],{"class":149},[139,37071,37072],{"class":145},"nn.MaxPool2d(",[139,37074,33126],{"class":2111},[139,37076,150],{"class":149},[139,37078,421],{"class":153},[139,37080,2816],{"class":145},[139,37082,33181],{"class":2111},[139,37084,150],{"class":149},[139,37086,416],{"class":153},[139,37088,164],{"class":145},[139,37090,37091,37093,37095,37097,37099,37101,37103,37105,37107,37109,37111,37114,37116,37118,37120,37122,37124,37126,37128,37130],{"class":141,"line":1006},[139,37092,33097],{"class":153},[139,37094,33194],{"class":145},[139,37096,150],{"class":149},[139,37098,33105],{"class":145},[139,37100,33108],{"class":2111},[139,37102,150],{"class":149},[139,37104,2652],{"class":153},[139,37106,2816],{"class":145},[139,37108,33117],{"class":2111},[139,37110,150],{"class":149},[139,37112,37113],{"class":153},"256",[139,37115,2816],{"class":145},[139,37117,33126],{"class":2111},[139,37119,150],{"class":149},[139,37121,1481],{"class":153},[139,37123,2816],{"class":145},[139,37125,33135],{"class":2111},[139,37127,150],{"class":149},[139,37129,416],{"class":153},[139,37131,164],{"class":145},[139,37133,37134,37136,37138,37140,37142,37144,37146,37148,37150,37152,37154,37156],{"class":141,"line":1027},[139,37135,33097],{"class":153},[139,37137,33229],{"class":145},[139,37139,150],{"class":149},[139,37141,37072],{"class":145},[139,37143,33126],{"class":2111},[139,37145,150],{"class":149},[139,37147,421],{"class":153},[139,37149,2816],{"class":145},[139,37151,33181],{"class":2111},[139,37153,150],{"class":149},[139,37155,416],{"class":153},[139,37157,164],{"class":145},[139,37159,37160,37162,37165,37167,37169,37171,37173,37175,37177,37179,37181,37184,37186,37188,37190,37192,37194,37196,37198,37200],{"class":141,"line":1040},[139,37161,33097],{"class":153},[139,37163,37164],{"class":145},".c5",[139,37166,150],{"class":149},[139,37168,33105],{"class":145},[139,37170,33108],{"class":2111},[139,37172,150],{"class":149},[139,37174,37113],{"class":153},[139,37176,2816],{"class":145},[139,37178,33117],{"class":2111},[139,37180,150],{"class":149},[139,37182,37183],{"class":153},"384",[139,37185,2816],{"class":145},[139,37187,33126],{"class":2111},[139,37189,150],{"class":149},[139,37191,421],{"class":153},[139,37193,2816],{"class":145},[139,37195,33135],{"class":2111},[139,37197,150],{"class":149},[139,37199,410],{"class":153},[139,37201,164],{"class":145},[139,37203,37204,37206,37209,37211,37213,37215,37217,37219,37221,37223,37225,37227,37229,37231,37233,37235,37237,37239,37241,37243],{"class":141,"line":2160},[139,37205,33097],{"class":153},[139,37207,37208],{"class":145},".c6",[139,37210,150],{"class":149},[139,37212,33105],{"class":145},[139,37214,33108],{"class":2111},[139,37216,150],{"class":149},[139,37218,37183],{"class":153},[139,37220,2816],{"class":145},[139,37222,33117],{"class":2111},[139,37224,150],{"class":149},[139,37226,37183],{"class":153},[139,37228,2816],{"class":145},[139,37230,33126],{"class":2111},[139,37232,150],{"class":149},[139,37234,421],{"class":153},[139,37236,2816],{"class":145},[139,37238,33135],{"class":2111},[139,37240,150],{"class":149},[139,37242,410],{"class":153},[139,37244,164],{"class":145},[139,37246,37247,37249,37252,37254,37256,37258,37260,37262,37264,37266,37268,37270,37272,37274,37276,37278,37280,37282,37284,37286],{"class":141,"line":2188},[139,37248,33097],{"class":153},[139,37250,37251],{"class":145},".c7",[139,37253,150],{"class":149},[139,37255,33105],{"class":145},[139,37257,33108],{"class":2111},[139,37259,150],{"class":149},[139,37261,37183],{"class":153},[139,37263,2816],{"class":145},[139,37265,33117],{"class":2111},[139,37267,150],{"class":149},[139,37269,37113],{"class":153},[139,37271,2816],{"class":145},[139,37273,33126],{"class":2111},[139,37275,150],{"class":149},[139,37277,421],{"class":153},[139,37279,2816],{"class":145},[139,37281,33135],{"class":2111},[139,37283,150],{"class":149},[139,37285,410],{"class":153},[139,37287,164],{"class":145},[139,37289,37290,37292,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313],{"class":141,"line":3944},[139,37291,33097],{"class":153},[139,37293,37294],{"class":145},".s8",[139,37296,150],{"class":149},[139,37298,37072],{"class":145},[139,37300,33126],{"class":2111},[139,37302,150],{"class":149},[139,37304,421],{"class":153},[139,37306,2816],{"class":145},[139,37308,33181],{"class":2111},[139,37310,150],{"class":149},[139,37312,416],{"class":153},[139,37314,164],{"class":145},[139,37316,37317],{"class":141,"line":3963},[139,37318,33254],{"class":2512},[139,37320,37321,37323,37325,37327],{"class":141,"line":3968},[139,37322,33097],{"class":153},[139,37324,33261],{"class":145},[139,37326,150],{"class":149},[139,37328,33266],{"class":145},[139,37330,37331],{"class":141,"line":3982},[139,37332,37333],{"class":2512},"       # 定义全连接层\n",[139,37335,37336,37338,37341,37343,37345,37347,37349,37351,37353,37355,37357,37360],{"class":141,"line":3987},[139,37337,33097],{"class":153},[139,37339,37340],{"class":145},".f1",[139,37342,150],{"class":149},[139,37344,33283],{"class":145},[139,37346,2782],{"class":153},[139,37348,2892],{"class":149},[139,37350,2782],{"class":153},[139,37352,2892],{"class":149},[139,37354,37113],{"class":153},[139,37356,2816],{"class":145},[139,37358,37359],{"class":153},"4096",[139,37361,164],{"class":145},[139,37363,37364,37366,37369,37371,37373,37375,37377,37379],{"class":141,"line":4014},[139,37365,33097],{"class":153},[139,37367,37368],{"class":145},".f2",[139,37370,150],{"class":149},[139,37372,33283],{"class":145},[139,37374,37359],{"class":153},[139,37376,2816],{"class":145},[139,37378,37359],{"class":153},[139,37380,164],{"class":145},[139,37382,37383,37385,37388,37390,37392,37394,37396,37398],{"class":141,"line":4019},[139,37384,33097],{"class":153},[139,37386,37387],{"class":145},".f3",[139,37389,150],{"class":149},[139,37391,33283],{"class":145},[139,37393,37359],{"class":153},[139,37395,2816],{"class":145},[139,37397,536],{"class":153},[139,37399,164],{"class":145},[139,37401,37402],{"class":141,"line":4036},[139,37403,843],{"emptyLinePlaceholder":842},[139,37405,37406],{"class":141,"line":4041},[139,37407,37408],{"class":2512},"    # 定义前向传播\n",[139,37410,37411,37413,37415],{"class":141,"line":4046},[139,37412,33053],{"class":149},[139,37414,33345],{"class":781},[139,37416,33348],{"class":145},[139,37418,37419,37421,37423,37425,37428,37430],{"class":141,"line":4051},[139,37420,33353],{"class":145},[139,37422,150],{"class":149},[139,37424,33075],{"class":153},[139,37426,37427],{"class":145},".ReLu(",[139,37429,33075],{"class":153},[139,37431,33365],{"class":145},[139,37433,37434,37436,37438,37440],{"class":141,"line":4065},[139,37435,33353],{"class":145},[139,37437,150],{"class":149},[139,37439,33075],{"class":153},[139,37441,33376],{"class":145},[139,37443,37444,37446,37448,37450,37452,37454],{"class":141,"line":4070},[139,37445,33353],{"class":145},[139,37447,150],{"class":149},[139,37449,33075],{"class":153},[139,37451,37427],{"class":145},[139,37453,33075],{"class":153},[139,37455,33391],{"class":145},[139,37457,37458,37460,37462,37464],{"class":141,"line":4860},[139,37459,33353],{"class":145},[139,37461,150],{"class":149},[139,37463,33075],{"class":153},[139,37465,33402],{"class":145},[139,37467,37468,37470,37472,37474,37476,37478],{"class":141,"line":4874},[139,37469,33353],{"class":145},[139,37471,150],{"class":149},[139,37473,33075],{"class":153},[139,37475,37427],{"class":145},[139,37477,33075],{"class":153},[139,37479,37480],{"class":145},".c5(x))\n",[139,37482,37483,37485,37487,37489,37491,37493],{"class":141,"line":4882},[139,37484,33353],{"class":145},[139,37486,150],{"class":149},[139,37488,33075],{"class":153},[139,37490,37427],{"class":145},[139,37492,33075],{"class":153},[139,37494,37495],{"class":145},".c6(x))\n",[139,37497,37498,37500,37502,37504,37506,37508],{"class":141,"line":4887},[139,37499,33353],{"class":145},[139,37501,150],{"class":149},[139,37503,33075],{"class":153},[139,37505,37427],{"class":145},[139,37507,33075],{"class":153},[139,37509,37510],{"class":145},".c7(x))\n",[139,37512,37513,37515,37517,37519],{"class":141,"line":4893},[139,37514,33353],{"class":145},[139,37516,150],{"class":149},[139,37518,33075],{"class":153},[139,37520,37521],{"class":145},".s8(x)\n",[139,37523,37524],{"class":141,"line":4899},[139,37525,843],{"emptyLinePlaceholder":842},[139,37527,37528],{"class":141,"line":4904},[139,37529,37530],{"class":2512},"        # 展平加线性全连接层\n",[139,37532,37533,37535,37537,37539],{"class":141,"line":10222},[139,37534,33353],{"class":145},[139,37536,150],{"class":149},[139,37538,33075],{"class":153},[139,37540,33413],{"class":145},[139,37542,37543,37545,37547,37549,37551,37553],{"class":141,"line":10246},[139,37544,33353],{"class":145},[139,37546,150],{"class":149},[139,37548,33075],{"class":153},[139,37550,37427],{"class":145},[139,37552,33075],{"class":153},[139,37554,37555],{"class":145},".f1(x))\n",[139,37557,37558],{"class":141,"line":10251},[139,37559,37560],{"class":2512},"        # 还需要dropout对神经元随机进行失活\n",[139,37562,37563,37565,37567,37570,37573],{"class":141,"line":10257},[139,37564,33353],{"class":145},[139,37566,150],{"class":149},[139,37568,37569],{"class":145},"F.dropout(x,",[139,37571,37572],{"class":153},"0.5",[139,37574,164],{"class":145},[139,37576,37577,37579,37581,37583,37585,37587],{"class":141,"line":10284},[139,37578,33353],{"class":145},[139,37580,150],{"class":149},[139,37582,33075],{"class":153},[139,37584,37427],{"class":145},[139,37586,33075],{"class":153},[139,37588,37589],{"class":145},".f2(x))\n",[139,37591,37592,37594,37596,37598,37600],{"class":141,"line":10289},[139,37593,33353],{"class":145},[139,37595,150],{"class":149},[139,37597,37569],{"class":145},[139,37599,37572],{"class":153},[139,37601,164],{"class":145},[139,37603,37604],{"class":141,"line":10295},[139,37605,37606],{"class":2512},"        # 直接输出\n",[139,37608,37609,37611,37613,37615],{"class":141,"line":10307},[139,37610,33353],{"class":145},[139,37612,150],{"class":149},[139,37614,33075],{"class":153},[139,37616,37617],{"class":145},".f3(x)\n",[139,37619,37620],{"class":141,"line":10319},[139,37621,37622],{"class":2512},"        # 前向传播输出\n",[139,37624,37625,37627],{"class":141,"line":10331},[139,37626,2085],{"class":149},[139,37628,33461],{"class":145},[139,37630,37631],{"class":141,"line":11990},[139,37632,37633],{"class":2512},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[139,37635,37636,37638,37640,37642,37644],{"class":141,"line":12015},[139,37637,1729],{"class":149},[139,37639,1732],{"class":153},[139,37641,5232],{"class":149},[139,37643,33476],{"class":160},[139,37645,246],{"class":145},[139,37647,37648,37650,37652,37654,37656,37658,37660,37662,37664],{"class":141,"line":12038},[139,37649,33488],{"class":145},[139,37651,150],{"class":149},[139,37653,32706],{"class":145},[139,37655,33495],{"class":160},[139,37657,3992],{"class":149},[139,37659,33500],{"class":145},[139,37661,656],{"class":149},[139,37663,32731],{"class":160},[139,37665,164],{"class":145},[139,37667,37668],{"class":141,"line":12062},[139,37669,37670],{"class":2512},"    # 模型实例化，然后将实例化的模型放到设备中\n",[139,37672,37673,37675,37677],{"class":141,"line":12067},[139,37674,33540],{"class":145},[139,37676,150],{"class":149},[139,37678,37679],{"class":145},"AlexNet().to(device)\n",[139,37681,37682,37684,37686,37688,37690,37693,37695,37697],{"class":141,"line":12072},[139,37683,302],{"class":153},[139,37685,33552],{"class":145},[139,37687,410],{"class":153},[139,37689,2816],{"class":145},[139,37691,37692],{"class":153},"227",[139,37694,2816],{"class":145},[139,37696,37692],{"class":153},[139,37698,33565],{"class":145},[1760,37700,37701],{"start":210},[1763,37702,33578],{},[130,37704,37706],{"className":132,"code":37705,"language":134,"meta":135,"style":135},"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",[50,37707,37708,37714,37720,37730,37736,37746,37756,37766,37776,37786,37790,37801,37811,37815,37819,37823,37831,37843,37853,37869,37879,37911,37925,37935,37945,37949,37959,37973,37983,37993,38003,38009,38013,38017,38021,38025,38029,38037,38057,38061,38065,38069,38073,38077,38093,38097,38101,38109,38113,38117,38125,38129,38133,38137,38145,38149,38153,38157,38161,38169,38173,38181,38185,38193,38197,38205,38209,38217,38221,38225,38233,38237,38241,38245,38257,38281,38295,38299,38303,38307,38315,38319,38327,38331,38339,38343,38351,38355,38363,38367,38375,38379,38391,38395,38403,38407,38415,38419,38423,38427,38431,38439,38443,38459,38463,38471,38475,38479,38483,38487,38491,38495,38499,38515,38519,38531,38535,38547,38551,38563,38567,38575,38579,38587,38591,38595,38600,38606,38610,38619,38623,38640,38644,38653,38657,38675,38688,38693,38706,38710,38714,38722,38726,38730,38738,38742,38750,38754,38762,38766,38770,38812,38854,38858,38862,38878,38882,38898,38902,38906,38914,38918,38922,38934,38972,38977,38982,38991,38995,39009,39019,39025,39031,39037,39043,39047,39051,39057,39061,39065,39073,39077,39095,39099,39103,39107,39123,39127,39131,39135,39139,39143,39163,39183,39187,39191,39195,39203,39211,39215,39231,39251,39271,39275,39279,39287,39295,39299,39303,39307,39319,39323,39333,39341,39358],{"__ignoreMap":135},[139,37709,37710,37712],{"class":141,"line":142},[139,37711,1064],{"class":149},[139,37713,34071],{"class":145},[139,37715,37716,37718],{"class":141,"line":210},[139,37717,1064],{"class":149},[139,37719,1504],{"class":145},[139,37721,37722,37724,37726,37728],{"class":141,"line":254},[139,37723,1064],{"class":149},[139,37725,34088],{"class":145},[139,37727,1035],{"class":149},[139,37729,34093],{"class":145},[139,37731,37732,37734],{"class":141,"line":262},[139,37733,1064],{"class":149},[139,37735,32651],{"class":145},[139,37737,37738,37740,37742,37744],{"class":141,"line":313},[139,37739,1265],{"class":149},[139,37741,33664],{"class":145},[139,37743,1064],{"class":149},[139,37745,34110],{"class":145},[139,37747,37748,37750,37752,37754],{"class":141,"line":462},[139,37749,1265],{"class":149},[139,37751,33618],{"class":145},[139,37753,1064],{"class":149},[139,37755,33623],{"class":145},[139,37757,37758,37760,37762,37764],{"class":141,"line":474},[139,37759,1265],{"class":149},[139,37761,33647],{"class":145},[139,37763,1064],{"class":149},[139,37765,33652],{"class":145},[139,37767,37768,37770,37772,37774],{"class":141,"line":484},[139,37769,1064],{"class":149},[139,37771,33664],{"class":145},[139,37773,1035],{"class":149},[139,37775,33669],{"class":145},[139,37777,37778,37780,37782,37784],{"class":141,"line":989},[139,37779,1064],{"class":149},[139,37781,33681],{"class":145},[139,37783,1035],{"class":149},[139,37785,33686],{"class":145},[139,37787,37788],{"class":141,"line":994},[139,37789,34155],{"class":2512},[139,37791,37792,37794,37796,37798],{"class":141,"line":999},[139,37793,1265],{"class":149},[139,37795,34162],{"class":145},[139,37797,1064],{"class":149},[139,37799,37800],{"class":145}," AlexNet\n",[139,37802,37803,37805,37807,37809],{"class":141,"line":1006},[139,37804,1265],{"class":149},[139,37806,32993],{"class":145},[139,37808,1064],{"class":149},[139,37810,32998],{"class":145},[139,37812,37813],{"class":141,"line":1027},[139,37814,843],{"emptyLinePlaceholder":842},[139,37816,37817],{"class":141,"line":1040},[139,37818,843],{"emptyLinePlaceholder":842},[139,37820,37821],{"class":141,"line":2160},[139,37822,34190],{"class":2512},[139,37824,37825,37827,37829],{"class":141,"line":2188},[139,37826,778],{"class":149},[139,37828,34197],{"class":781},[139,37830,34200],{"class":145},[139,37832,37833,37835,37837,37839,37841],{"class":141,"line":3944},[139,37834,34205],{"class":145},[139,37836,150],{"class":149},[139,37838,33704],{"class":145},[139,37840,33712],{"class":160},[139,37842,33715],{"class":145},[139,37844,37845,37847,37849,37851],{"class":141,"line":3963},[139,37846,34218],{"class":2111},[139,37848,150],{"class":149},[139,37850,33725],{"class":153},[139,37852,33715],{"class":145},[139,37854,37855,37857,37859,37861,37863,37865,37867],{"class":141,"line":3968},[139,37856,34229],{"class":2111},[139,37858,150],{"class":149},[139,37860,33742],{"class":145},[139,37862,33745],{"class":2111},[139,37864,150],{"class":149},[139,37866,37692],{"class":153},[139,37868,33753],{"class":145},[139,37870,37871,37873,37875,37877],{"class":141,"line":3982},[139,37872,34246],{"class":2111},[139,37874,150],{"class":149},[139,37876,33725],{"class":153},[139,37878,164],{"class":145},[139,37880,37881,37883,37885,37887,37889,37891,37893,37895,37897,37899,37901,37903,37905,37907,37909],{"class":141,"line":3987},[139,37882,34257],{"class":145},[139,37884,150],{"class":149},[139,37886,34262],{"class":145},[139,37888,34265],{"class":153},[139,37890,157],{"class":145},[139,37892,34270],{"class":153},[139,37894,2892],{"class":149},[139,37896,9632],{"class":153},[139,37898,34277],{"class":145},[139,37900,34265],{"class":153},[139,37902,157],{"class":145},[139,37904,34284],{"class":153},[139,37906,2892],{"class":149},[139,37908,9632],{"class":153},[139,37910,34291],{"class":145},[139,37912,37913,37915,37917,37919,37921,37923],{"class":141,"line":4014},[139,37914,34296],{"class":145},[139,37916,150],{"class":149},[139,37918,34301],{"class":145},[139,37920,33786],{"class":2111},[139,37922,150],{"class":149},[139,37924,33791],{"class":145},[139,37926,37927,37929,37931,37933],{"class":141,"line":4019},[139,37928,34312],{"class":2111},[139,37930,150],{"class":149},[139,37932,34317],{"class":153},[139,37934,33715],{"class":145},[139,37936,37937,37939,37941,37943],{"class":141,"line":4036},[139,37938,34324],{"class":2111},[139,37940,150],{"class":149},[139,37942,33725],{"class":153},[139,37944,33715],{"class":145},[139,37946,37947],{"class":141,"line":4041},[139,37948,34335],{"class":2512},[139,37950,37951,37953,37955,37957],{"class":141,"line":4046},[139,37952,34340],{"class":2111},[139,37954,150],{"class":149},[139,37956,2833],{"class":153},[139,37958,164],{"class":145},[139,37960,37961,37963,37965,37967,37969,37971],{"class":141,"line":4051},[139,37962,34351],{"class":145},[139,37964,150],{"class":149},[139,37966,33783],{"class":145},[139,37968,33786],{"class":2111},[139,37970,150],{"class":149},[139,37972,34362],{"class":145},[139,37974,37975,37977,37979,37981],{"class":141,"line":4065},[139,37976,34367],{"class":2111},[139,37978,150],{"class":149},[139,37980,34317],{"class":153},[139,37982,33715],{"class":145},[139,37984,37985,37987,37989,37991],{"class":141,"line":4070},[139,37986,34378],{"class":2111},[139,37988,150],{"class":149},[139,37990,33725],{"class":153},[139,37992,33715],{"class":145},[139,37994,37995,37997,37999,38001],{"class":141,"line":4860},[139,37996,34389],{"class":2111},[139,37998,150],{"class":149},[139,38000,2833],{"class":153},[139,38002,164],{"class":145},[139,38004,38005,38007],{"class":141,"line":4874},[139,38006,978],{"class":149},[139,38008,34402],{"class":145},[139,38010,38011],{"class":141,"line":4882},[139,38012,843],{"emptyLinePlaceholder":842},[139,38014,38015],{"class":141,"line":4887},[139,38016,34411],{"class":2512},[139,38018,38019],{"class":141,"line":4893},[139,38020,34416],{"class":2512},[139,38022,38023],{"class":141,"line":4899},[139,38024,843],{"emptyLinePlaceholder":842},[139,38026,38027],{"class":141,"line":4904},[139,38028,34425],{"class":2512},[139,38030,38031,38033,38035],{"class":141,"line":10222},[139,38032,778],{"class":149},[139,38034,34432],{"class":781},[139,38036,34435],{"class":145},[139,38038,38039,38041,38043,38045,38047,38049,38051,38053,38055],{"class":141,"line":10246},[139,38040,33488],{"class":145},[139,38042,150],{"class":149},[139,38044,32706],{"class":145},[139,38046,33495],{"class":160},[139,38048,3992],{"class":149},[139,38050,33500],{"class":145},[139,38052,656],{"class":149},[139,38054,34454],{"class":160},[139,38056,164],{"class":145},[139,38058,38059],{"class":141,"line":10251},[139,38060,843],{"emptyLinePlaceholder":842},[139,38062,38063],{"class":141,"line":10257},[139,38064,843],{"emptyLinePlaceholder":842},[139,38066,38067],{"class":141,"line":10284},[139,38068,34469],{"class":2512},[139,38070,38071],{"class":141,"line":10289},[139,38072,34474],{"class":2512},[139,38074,38075],{"class":141,"line":10295},[139,38076,34479],{"class":2512},[139,38078,38079,38081,38083,38085,38087,38089,38091],{"class":141,"line":10307},[139,38080,34484],{"class":145},[139,38082,150],{"class":149},[139,38084,34489],{"class":145},[139,38086,34492],{"class":2111},[139,38088,150],{"class":149},[139,38090,34497],{"class":153},[139,38092,164],{"class":145},[139,38094,38095],{"class":141,"line":10319},[139,38096,843],{"emptyLinePlaceholder":842},[139,38098,38099],{"class":141,"line":10331},[139,38100,34508],{"class":2512},[139,38102,38103,38105,38107],{"class":141,"line":11990},[139,38104,34513],{"class":145},[139,38106,150],{"class":149},[139,38108,34518],{"class":145},[139,38110,38111],{"class":141,"line":12015},[139,38112,843],{"emptyLinePlaceholder":842},[139,38114,38115],{"class":141,"line":12038},[139,38116,34527],{"class":2512},[139,38118,38119,38121,38123],{"class":141,"line":12062},[139,38120,33540],{"class":145},[139,38122,150],{"class":149},[139,38124,34536],{"class":145},[139,38126,38127],{"class":141,"line":12067},[139,38128,34541],{"class":2512},[139,38130,38131],{"class":141,"line":12072},[139,38132,34546],{"class":2512},[139,38134,38135],{"class":141,"line":12077},[139,38136,34551],{"class":2512},[139,38138,38139,38141,38143],{"class":141,"line":12086},[139,38140,34556],{"class":145},[139,38142,150],{"class":149},[139,38144,34561],{"class":145},[139,38146,38147],{"class":141,"line":12091},[139,38148,843],{"emptyLinePlaceholder":842},[139,38150,38151],{"class":141,"line":12097},[139,38152,843],{"emptyLinePlaceholder":842},[139,38154,38155],{"class":141,"line":12118},[139,38156,34574],{"class":2512},[139,38158,38159],{"class":141,"line":12124},[139,38160,34579],{"class":2512},[139,38162,38163,38165,38167],{"class":141,"line":12138},[139,38164,34584],{"class":145},[139,38166,150],{"class":149},[139,38168,34589],{"class":153},[139,38170,38171],{"class":141,"line":12144},[139,38172,34594],{"class":2512},[139,38174,38175,38177,38179],{"class":141,"line":12171},[139,38176,34599],{"class":145},[139,38178,150],{"class":149},[139,38180,34604],{"class":145},[139,38182,38183],{"class":141,"line":12180},[139,38184,34609],{"class":2512},[139,38186,38187,38189,38191],{"class":141,"line":12186},[139,38188,34614],{"class":145},[139,38190,150],{"class":149},[139,38192,34604],{"class":145},[139,38194,38195],{"class":141,"line":12194},[139,38196,34623],{"class":2512},[139,38198,38199,38201,38203],{"class":141,"line":12199},[139,38200,34628],{"class":145},[139,38202,150],{"class":149},[139,38204,34604],{"class":145},[139,38206,38207],{"class":141,"line":18871},[139,38208,34637],{"class":2512},[139,38210,38211,38213,38215],{"class":141,"line":18877},[139,38212,34642],{"class":145},[139,38214,150],{"class":149},[139,38216,34604],{"class":145},[139,38218,38219],{"class":141,"line":18900},[139,38220,843],{"emptyLinePlaceholder":842},[139,38222,38223],{"class":141,"line":18906},[139,38224,34655],{"class":2512},[139,38226,38227,38229,38231],{"class":141,"line":18929},[139,38228,34660],{"class":145},[139,38230,150],{"class":149},[139,38232,34665],{"class":145},[139,38234,38235],{"class":141,"line":18943},[139,38236,843],{"emptyLinePlaceholder":842},[139,38238,38239],{"class":141,"line":18963},[139,38240,843],{"emptyLinePlaceholder":842},[139,38242,38243],{"class":141,"line":18969},[139,38244,34678],{"class":2512},[139,38246,38247,38249,38251,38253,38255],{"class":141,"line":18980},[139,38248,5482],{"class":149},[139,38250,34685],{"class":145},[139,38252,1976],{"class":149},[139,38254,34690],{"class":153},[139,38256,34693],{"class":145},[139,38258,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279],{"class":141,"line":19003},[139,38260,34698],{"class":153},[139,38262,157],{"class":145},[139,38264,34703],{"class":160},[139,38266,34706],{"class":153},[139,38268,3019],{"class":160},[139,38270,34706],{"class":153},[139,38272,634],{"class":160},[139,38274,34715],{"class":145},[139,38276,855],{"class":149},[139,38278,410],{"class":153},[139,38280,207],{"class":145},[139,38282,38283,38285,38287,38289,38291,38293],{"class":141,"line":19025},[139,38284,34698],{"class":153},[139,38286,157],{"class":145},[139,38288,34730],{"class":160},[139,38290,2892],{"class":149},[139,38292,536],{"class":153},[139,38294,164],{"class":145},[139,38296,38297],{"class":141,"line":19030},[139,38298,843],{"emptyLinePlaceholder":842},[139,38300,38301],{"class":141,"line":19036},[139,38302,34745],{"class":2512},[139,38304,38305],{"class":141,"line":19050},[139,38306,34750],{"class":2512},[139,38308,38309,38311,38313],{"class":141,"line":19063},[139,38310,34755],{"class":145},[139,38312,150],{"class":149},[139,38314,34589],{"class":153},[139,38316,38317],{"class":141,"line":19068},[139,38318,34764],{"class":2512},[139,38320,38321,38323,38325],{"class":141,"line":19082},[139,38322,34769],{"class":145},[139,38324,150],{"class":149},[139,38326,5367],{"class":153},[139,38328,38329],{"class":141,"line":19087},[139,38330,34778],{"class":2512},[139,38332,38333,38335,38337],{"class":141,"line":19093},[139,38334,34783],{"class":145},[139,38336,150],{"class":149},[139,38338,34589],{"class":153},[139,38340,38341],{"class":141,"line":19098},[139,38342,34792],{"class":2512},[139,38344,38345,38347,38349],{"class":141,"line":19112},[139,38346,34797],{"class":145},[139,38348,150],{"class":149},[139,38350,5367],{"class":153},[139,38352,38353],{"class":141,"line":19117},[139,38354,34806],{"class":2512},[139,38356,38357,38359,38361],{"class":141,"line":19122},[139,38358,34811],{"class":145},[139,38360,150],{"class":149},[139,38362,5367],{"class":153},[139,38364,38365],{"class":141,"line":19136},[139,38366,34820],{"class":2512},[139,38368,38369,38371,38373],{"class":141,"line":19148},[139,38370,34825],{"class":145},[139,38372,150],{"class":149},[139,38374,5367],{"class":153},[139,38376,38377],{"class":141,"line":19153},[139,38378,34834],{"class":2512},[139,38380,38381,38383,38385,38387,38389],{"class":141,"line":19166},[139,38382,5684],{"class":149},[139,38384,33850],{"class":145},[139,38386,1976],{"class":149},[139,38388,33855],{"class":153},[139,38390,34847],{"class":145},[139,38392,38393],{"class":141,"line":19171},[139,38394,34852],{"class":2512},[139,38396,38397,38399,38401],{"class":141,"line":19176},[139,38398,34857],{"class":145},[139,38400,150],{"class":149},[139,38402,34862],{"class":145},[139,38404,38405],{"class":141,"line":19181},[139,38406,34867],{"class":2512},[139,38408,38409,38411,38413],{"class":141,"line":19194},[139,38410,34872],{"class":145},[139,38412,150],{"class":149},[139,38414,34877],{"class":145},[139,38416,38417],{"class":141,"line":19199},[139,38418,34883],{"class":2512},[139,38420,38421],{"class":141,"line":34880},[139,38422,34889],{"class":145},[139,38424,38425],{"class":141,"line":34886},[139,38426,34895],{"class":2512},[139,38428,38429],{"class":141,"line":34892},[139,38430,34901],{"class":2512},[139,38432,38433,38435,38437],{"class":141,"line":34898},[139,38434,34907],{"class":145},[139,38436,150],{"class":149},[139,38438,34912],{"class":145},[139,38440,38441],{"class":141,"line":34904},[139,38442,34918],{"class":2512},[139,38444,38445,38447,38449,38451,38453,38455,38457],{"class":141,"line":34915},[139,38446,34924],{"class":145},[139,38448,150],{"class":149},[139,38450,34929],{"class":145},[139,38452,34932],{"class":2111},[139,38454,150],{"class":149},[139,38456,410],{"class":153},[139,38458,164],{"class":145},[139,38460,38461],{"class":141,"line":34921},[139,38462,34944],{"class":2512},[139,38464,38465,38467,38469],{"class":141,"line":34941},[139,38466,34950],{"class":145},[139,38468,150],{"class":149},[139,38470,34955],{"class":145},[139,38472,38473],{"class":141,"line":34947},[139,38474,34961],{"class":2512},[139,38476,38477],{"class":141,"line":34958},[139,38478,34967],{"class":145},[139,38480,38481],{"class":141,"line":34964},[139,38482,34973],{"class":2512},[139,38484,38485],{"class":141,"line":34970},[139,38486,34979],{"class":145},[139,38488,38489],{"class":141,"line":34976},[139,38490,34985],{"class":2512},[139,38492,38493],{"class":141,"line":34982},[139,38494,34991],{"class":145},[139,38496,38497],{"class":141,"line":34988},[139,38498,34997],{"class":2512},[139,38500,38501,38503,38505,38507,38509,38511,38513],{"class":141,"line":34994},[139,38502,35003],{"class":145},[139,38504,11751],{"class":149},[139,38506,35008],{"class":145},[139,38508,2892],{"class":149},[139,38510,35013],{"class":145},[139,38512,2634],{"class":153},[139,38514,164],{"class":145},[139,38516,38517],{"class":141,"line":35000},[139,38518,35023],{"class":2512},[139,38520,38521,38523,38525,38527,38529],{"class":141,"line":35020},[139,38522,35029],{"class":145},[139,38524,11751],{"class":149},[139,38526,35034],{"class":145},[139,38528,5232],{"class":149},[139,38530,35039],{"class":145},[139,38532,38533],{"class":141,"line":35026},[139,38534,35045],{"class":2512},[139,38536,38537,38539,38541,38543,38545],{"class":141,"line":35042},[139,38538,35051],{"class":145},[139,38540,11751],{"class":149},[139,38542,35013],{"class":145},[139,38544,2634],{"class":153},[139,38546,164],{"class":145},[139,38548,38549],{"class":141,"line":35048},[139,38550,35065],{"class":2512},[139,38552,38553,38555,38557,38559,38561],{"class":141,"line":35062},[139,38554,5684],{"class":149},[139,38556,35073],{"class":145},[139,38558,1976],{"class":149},[139,38560,33855],{"class":153},[139,38562,35080],{"class":145},[139,38564,38565],{"class":141,"line":35068},[139,38566,35086],{"class":2512},[139,38568,38569,38571,38573],{"class":141,"line":35083},[139,38570,34857],{"class":145},[139,38572,150],{"class":149},[139,38574,34862],{"class":145},[139,38576,38577],{"class":141,"line":35089},[139,38578,35101],{"class":2512},[139,38580,38581,38583,38585],{"class":141,"line":35098},[139,38582,34872],{"class":145},[139,38584,150],{"class":149},[139,38586,34877],{"class":145},[139,38588,38589],{"class":141,"line":35104},[139,38590,35116],{"class":2512},[139,38592,38593],{"class":141,"line":35113},[139,38594,35122],{"class":145},[139,38596,38597],{"class":141,"line":35119},[139,38598,38599],{"class":2512},"            # 验证时不计算梯度以节省内存\u002F计算\n",[139,38601,38602,38604],{"class":141,"line":35125},[139,38603,35128],{"class":149},[139,38605,35131],{"class":145},[139,38607,38608],{"class":141,"line":35134},[139,38609,35137],{"class":2512},[139,38611,38612,38615,38617],{"class":141,"line":35140},[139,38613,38614],{"class":145},"                output",[139,38616,150],{"class":149},[139,38618,34912],{"class":145},[139,38620,38621],{"class":141,"line":35151},[139,38622,35154],{"class":2512},[139,38624,38625,38628,38630,38632,38634,38636,38638],{"class":141,"line":35157},[139,38626,38627],{"class":145},"                pre_lab",[139,38629,150],{"class":149},[139,38631,34929],{"class":145},[139,38633,34932],{"class":2111},[139,38635,150],{"class":149},[139,38637,410],{"class":153},[139,38639,164],{"class":145},[139,38641,38642],{"class":141,"line":35176},[139,38643,35179],{"class":2512},[139,38645,38646,38649,38651],{"class":141,"line":35182},[139,38647,38648],{"class":145},"                val_batch_loss",[139,38650,150],{"class":149},[139,38652,34955],{"class":145},[139,38654,38655],{"class":141,"line":35193},[139,38656,35196],{"class":2512},[139,38658,38659,38662,38664,38667,38669,38671,38673],{"class":141,"line":35199},[139,38660,38661],{"class":145},"                val_loss",[139,38663,11751],{"class":149},[139,38665,38666],{"class":145},"val_batch_loss.item()",[139,38668,2892],{"class":149},[139,38670,35013],{"class":145},[139,38672,2634],{"class":153},[139,38674,164],{"class":145},[139,38676,38677,38680,38682,38684,38686],{"class":141,"line":35219},[139,38678,38679],{"class":145},"                val_corrects",[139,38681,11751],{"class":149},[139,38683,35034],{"class":145},[139,38685,5232],{"class":149},[139,38687,35039],{"class":145},[139,38689,38690],{"class":141,"line":35235},[139,38691,38692],{"class":2512},"            # 当前用于验证的样本数量\n",[139,38694,38695,38698,38700,38702,38704],{"class":141,"line":35241},[139,38696,38697],{"class":145},"            val_num",[139,38699,11751],{"class":149},[139,38701,35013],{"class":145},[139,38703,2634],{"class":153},[139,38705,164],{"class":145},[139,38707,38708],{"class":141,"line":35255},[139,38709,35258],{"class":2512},[139,38711,38712],{"class":141,"line":35261},[139,38713,35264],{"class":2512},[139,38715,38716,38718,38720],{"class":141,"line":35267},[139,38717,35270],{"class":145},[139,38719,3019],{"class":149},[139,38721,35275],{"class":145},[139,38723,38724],{"class":141,"line":35278},[139,38725,35281],{"class":2512},[139,38727,38728],{"class":141,"line":35284},[139,38729,35287],{"class":2512},[139,38731,38732,38734,38736],{"class":141,"line":35290},[139,38733,35293],{"class":145},[139,38735,3019],{"class":149},[139,38737,35275],{"class":145},[139,38739,38740],{"class":141,"line":35300},[139,38741,35303],{"class":2512},[139,38743,38744,38746,38748],{"class":141,"line":35306},[139,38745,35309],{"class":145},[139,38747,3019],{"class":149},[139,38749,35314],{"class":145},[139,38751,38752],{"class":141,"line":35317},[139,38753,35320],{"class":2512},[139,38755,38756,38758,38760],{"class":141,"line":35323},[139,38757,35326],{"class":145},[139,38759,3019],{"class":149},[139,38761,35314],{"class":145},[139,38763,38764],{"class":141,"line":35333},[139,38765,843],{"emptyLinePlaceholder":842},[139,38767,38768],{"class":141,"line":35338},[139,38769,35341],{"class":2512},[139,38771,38772,38774,38776,38778,38780,38782,38784,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810],{"class":141,"line":35344},[139,38773,34698],{"class":153},[139,38775,157],{"class":145},[139,38777,5873],{"class":160},[139,38779,34706],{"class":153},[139,38781,35355],{"class":160},[139,38783,625],{"class":153},[139,38785,35360],{"class":149},[139,38787,631],{"class":153},[139,38789,35365],{"class":160},[139,38791,625],{"class":153},[139,38793,35360],{"class":149},[139,38795,631],{"class":153},[139,38797,5873],{"class":160},[139,38799,35376],{"class":145},[139,38801,855],{"class":149},[139,38803,410],{"class":153},[139,38805,35383],{"class":145},[139,38807,855],{"class":149},[139,38809,410],{"class":153},[139,38811,1454],{"class":145},[139,38813,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852],{"class":141,"line":35392},[139,38815,34698],{"class":153},[139,38817,157],{"class":145},[139,38819,5873],{"class":160},[139,38821,34706],{"class":153},[139,38823,35403],{"class":160},[139,38825,625],{"class":153},[139,38827,35360],{"class":149},[139,38829,631],{"class":153},[139,38831,35412],{"class":160},[139,38833,625],{"class":153},[139,38835,35360],{"class":149},[139,38837,631],{"class":153},[139,38839,5873],{"class":160},[139,38841,35423],{"class":145},[139,38843,855],{"class":149},[139,38845,410],{"class":153},[139,38847,35430],{"class":145},[139,38849,855],{"class":149},[139,38851,410],{"class":153},[139,38853,1454],{"class":145},[139,38855,38856],{"class":141,"line":35439},[139,38857,843],{"emptyLinePlaceholder":842},[139,38859,38860],{"class":141,"line":35444},[139,38861,35447],{"class":2512},[139,38863,38864,38866,38868,38870,38872,38874,38876],{"class":141,"line":35450},[139,38865,4780],{"class":149},[139,38867,35455],{"class":145},[139,38869,855],{"class":149},[139,38871,410],{"class":153},[139,38873,3373],{"class":145},[139,38875,958],{"class":149},[139,38877,35466],{"class":145},[139,38879,38880],{"class":141,"line":35469},[139,38881,35472],{"class":2512},[139,38883,38884,38886,38888,38890,38892,38894,38896],{"class":141,"line":35475},[139,38885,35478],{"class":145},[139,38887,2496],{"class":153},[139,38889,150],{"class":149},[139,38891,35485],{"class":145},[139,38893,855],{"class":149},[139,38895,410],{"class":153},[139,38897,424],{"class":145},[139,38899,38900],{"class":141,"line":35494},[139,38901,35497],{"class":2512},[139,38903,38904],{"class":141,"line":35500},[139,38905,35503],{"class":2512},[139,38907,38908,38910,38912],{"class":141,"line":35506},[139,38909,35509],{"class":145},[139,38911,150],{"class":149},[139,38913,34561],{"class":145},[139,38915,38916],{"class":141,"line":35516},[139,38917,843],{"emptyLinePlaceholder":842},[139,38919,38920],{"class":141,"line":35521},[139,38921,35524],{"class":2512},[139,38923,38924,38926,38928,38930,38932],{"class":141,"line":35527},[139,38925,35530],{"class":145},[139,38927,150],{"class":149},[139,38929,35535],{"class":145},[139,38931,855],{"class":149},[139,38933,35540],{"class":145},[139,38935,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970],{"class":141,"line":35543},[139,38937,34698],{"class":153},[139,38939,157],{"class":145},[139,38941,35550],{"class":160},[139,38943,625],{"class":153},[139,38945,35555],{"class":149},[139,38947,631],{"class":153},[139,38949,2979],{"class":160},[139,38951,625],{"class":153},[139,38953,35555],{"class":149},[139,38955,631],{"class":153},[139,38957,35568],{"class":160},[139,38959,35571],{"class":145},[139,38961,35574],{"class":149},[139,38963,3341],{"class":153},[139,38965,35579],{"class":145},[139,38967,2766],{"class":149},[139,38969,3341],{"class":153},[139,38971,207],{"class":145},[139,38973,38974],{"class":141,"line":35588},[139,38975,38976],{"class":2512},"    # 选择最优参数并保存\n",[139,38978,38979],{"class":141,"line":35594},[139,38980,38981],{"class":2512},"    # 保存最佳模型权重字典\n",[139,38983,38984,38987,38989],{"class":141,"line":35600},[139,38985,38986],{"class":145},"    torch.save(best_model_wts,",[139,38988,35612],{"class":160},[139,38990,164],{"class":145},[139,38992,38993],{"class":141,"line":35606},[139,38994,35632],{"class":2512},[139,38996,38997,38999,39001,39003,39005,39007],{"class":141,"line":35617},[139,38998,35638],{"class":145},[139,39000,150],{"class":149},[139,39002,35643],{"class":145},[139,39004,35646],{"class":2111},[139,39006,150],{"class":149},[139,39008,3843],{"class":145},[139,39010,39011,39013,39015,39017],{"class":141,"line":35623},[139,39012,35656],{"class":160},[139,39014,3294],{"class":145},[139,39016,35661],{"class":153},[139,39018,35664],{"class":145},[139,39020,39021,39023],{"class":141,"line":35629},[139,39022,35670],{"class":160},[139,39024,35673],{"class":145},[139,39026,39027,39029],{"class":141,"line":35635},[139,39028,35679],{"class":160},[139,39030,35682],{"class":145},[139,39032,39033,39035],{"class":141,"line":35653},[139,39034,35688],{"class":160},[139,39036,35691],{"class":145},[139,39038,39039,39041],{"class":141,"line":35667},[139,39040,35697],{"class":160},[139,39042,35700],{"class":145},[139,39044,39045],{"class":141,"line":35676},[139,39046,35706],{"class":145},[139,39048,39049],{"class":141,"line":35685},[139,39050,35712],{"class":2512},[139,39052,39053,39055],{"class":141,"line":35694},[139,39054,978],{"class":149},[139,39056,35720],{"class":145},[139,39058,39059],{"class":141,"line":35703},[139,39060,843],{"emptyLinePlaceholder":842},[139,39062,39063],{"class":141,"line":35709},[139,39064,35731],{"class":2512},[139,39066,39067,39069,39071],{"class":141,"line":35715},[139,39068,778],{"class":149},[139,39070,35739],{"class":781},[139,39072,35742],{"class":145},[139,39074,39075],{"class":141,"line":35723},[139,39076,35748],{"class":2512},[139,39078,39079,39081,39083,39085,39087,39089,39091,39093],{"class":141,"line":35728},[139,39080,35754],{"class":145},[139,39082,33942],{"class":2111},[139,39084,150],{"class":149},[139,39086,157],{"class":145},[139,39088,2934],{"class":153},[139,39090,2816],{"class":145},[139,39092,1476],{"class":153},[139,39094,207],{"class":145},[139,39096,39097],{"class":141,"line":35734},[139,39098,35774],{"class":2512},[139,39100,39101],{"class":141,"line":35745},[139,39102,35780],{"class":2512},[139,39104,39105],{"class":141,"line":35751},[139,39106,35786],{"class":2512},[139,39108,39109,39111,39113,39115,39117,39119,39121],{"class":141,"line":35771},[139,39110,33976],{"class":145},[139,39112,410],{"class":153},[139,39114,2816],{"class":145},[139,39116,416],{"class":153},[139,39118,2816],{"class":145},[139,39120,410],{"class":153},[139,39122,164],{"class":145},[139,39124,39125],{"class":141,"line":35777},[139,39126,35809],{"class":2512},[139,39128,39129],{"class":141,"line":35783},[139,39130,35815],{"class":2512},[139,39132,39133],{"class":141,"line":35789},[139,39134,35821],{"class":2512},[139,39136,39137],{"class":141,"line":35806},[139,39138,35827],{"class":2512},[139,39140,39141],{"class":141,"line":35812},[139,39142,35833],{"class":2512},[139,39144,39145,39147,39149,39151,39153,39155,39157,39159,39161],{"class":141,"line":35818},[139,39146,35839],{"class":145},[139,39148,35842],{"class":160},[139,39150,35845],{"class":145},[139,39152,35848],{"class":160},[139,39154,2816],{"class":145},[139,39156,35853],{"class":2111},[139,39158,150],{"class":149},[139,39160,35858],{"class":160},[139,39162,164],{"class":145},[139,39164,39165,39167,39169,39171,39173,39175,39177,39179,39181],{"class":141,"line":35824},[139,39166,35839],{"class":145},[139,39168,35842],{"class":160},[139,39170,35870],{"class":145},[139,39172,35873],{"class":160},[139,39174,2816],{"class":145},[139,39176,35853],{"class":2111},[139,39178,150],{"class":149},[139,39180,35882],{"class":160},[139,39182,164],{"class":145},[139,39184,39185],{"class":141,"line":35830},[139,39186,35890],{"class":2512},[139,39188,39189],{"class":141,"line":35836},[139,39190,35896],{"class":145},[139,39192,39193],{"class":141,"line":35863},[139,39194,35902],{"class":2512},[139,39196,39197,39199,39201],{"class":141,"line":35887},[139,39198,35908],{"class":145},[139,39200,35911],{"class":160},[139,39202,164],{"class":145},[139,39204,39205,39207,39209],{"class":141,"line":35893},[139,39206,35919],{"class":145},[139,39208,35922],{"class":160},[139,39210,164],{"class":145},[139,39212,39213],{"class":141,"line":35899},[139,39214,35930],{"class":2512},[139,39216,39217,39219,39221,39223,39225,39227,39229],{"class":141,"line":35905},[139,39218,33976],{"class":145},[139,39220,410],{"class":153},[139,39222,2816],{"class":145},[139,39224,416],{"class":153},[139,39226,2816],{"class":145},[139,39228,416],{"class":153},[139,39230,164],{"class":145},[139,39232,39233,39235,39237,39239,39241,39243,39245,39247,39249],{"class":141,"line":35916},[139,39234,35839],{"class":145},[139,39236,35842],{"class":160},[139,39238,35957],{"class":145},[139,39240,35848],{"class":160},[139,39242,2816],{"class":145},[139,39244,35853],{"class":2111},[139,39246,150],{"class":149},[139,39248,35968],{"class":160},[139,39250,164],{"class":145},[139,39252,39253,39255,39257,39259,39261,39263,39265,39267,39269],{"class":141,"line":35927},[139,39254,35839],{"class":145},[139,39256,35842],{"class":160},[139,39258,35980],{"class":145},[139,39260,35873],{"class":160},[139,39262,2816],{"class":145},[139,39264,35853],{"class":2111},[139,39266,150],{"class":149},[139,39268,35991],{"class":160},[139,39270,164],{"class":145},[139,39272,39273],{"class":141,"line":35933},[139,39274,35999],{"class":2512},[139,39276,39277],{"class":141,"line":35950},[139,39278,35896],{"class":145},[139,39280,39281,39283,39285],{"class":141,"line":35973},[139,39282,35908],{"class":145},[139,39284,35842],{"class":160},[139,39286,164],{"class":145},[139,39288,39289,39291,39293],{"class":141,"line":35996},[139,39290,35919],{"class":145},[139,39292,36021],{"class":160},[139,39294,164],{"class":145},[139,39296,39297],{"class":141,"line":36002},[139,39298,36029],{"class":145},[139,39300,39301],{"class":141,"line":36007},[139,39302,843],{"emptyLinePlaceholder":842},[139,39304,39305],{"class":141,"line":36016},[139,39306,36040],{"class":2512},[139,39308,39309,39311,39313,39315,39317],{"class":141,"line":36026},[139,39310,1729],{"class":149},[139,39312,1732],{"class":153},[139,39314,5232],{"class":149},[139,39316,33476],{"class":160},[139,39318,246],{"class":145},[139,39320,39321],{"class":141,"line":36032},[139,39322,36059],{"class":2512},[139,39324,39325,39328,39330],{"class":141,"line":36037},[139,39326,39327],{"class":145},"    AlexNet",[139,39329,150],{"class":149},[139,39331,39332],{"class":145},"AlexNet()\n",[139,39334,39335,39337,39339],{"class":141,"line":36043},[139,39336,36076],{"class":145},[139,39338,150],{"class":149},[139,39340,36081],{"class":145},[139,39342,39343,39345,39347,39350,39352,39354,39356],{"class":141,"line":36056},[139,39344,35638],{"class":145},[139,39346,150],{"class":149},[139,39348,39349],{"class":145},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[139,39351,36094],{"class":2111},[139,39353,150],{"class":149},[139,39355,3135],{"class":153},[139,39357,164],{"class":145},[139,39359,39360],{"class":141,"line":36062},[139,39361,36106],{"class":145},[1760,39363,39364],{"start":254},[1763,39365,36119],{},[130,39367,39369],{"className":132,"code":39368,"language":134,"meta":135,"style":135},"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",[50,39370,39371,39377,39387,39397,39407,39411,39421,39431,39442,39446,39450,39454,39462,39478,39488,39504,39514,39528,39532,39542,39552,39562,39568,39572,39576,39584,39588,39604,39612,39616,39620,39628,39636,39640,39644,39648,39652,39658,39662,39672,39680,39688,39692,39696,39700,39708,39712,39728,39732,39736,39740,39752,39756,39768,39772,39776,39788,39792,39802,39806,39810,39822,39826,39834,39838,39842,39850,39854,39862,39866,39870,39874,39878,39882,39898,39906,39910,39914,39962,39968,39972,39982,39990,39998,40002,40006,40010,40014,40022,40026,40042,40046,40054,40062],{"__ignoreMap":135},[139,39372,39373,39375],{"class":141,"line":142},[139,39374,1064],{"class":149},[139,39376,32651],{"class":145},[139,39378,39379,39381,39383,39385],{"class":141,"line":210},[139,39380,1064],{"class":149},[139,39382,33664],{"class":145},[139,39384,1035],{"class":149},[139,39386,33669],{"class":145},[139,39388,39389,39391,39393,39395],{"class":141,"line":254},[139,39390,1265],{"class":149},[139,39392,36147],{"class":145},[139,39394,1064],{"class":149},[139,39396,36152],{"class":145},[139,39398,39399,39401,39403,39405],{"class":141,"line":262},[139,39400,1265],{"class":149},[139,39402,33647],{"class":145},[139,39404,1064],{"class":149},[139,39406,33652],{"class":145},[139,39408,39409],{"class":141,"line":313},[139,39410,36167],{"class":2512},[139,39412,39413,39415,39417,39419],{"class":141,"line":462},[139,39414,1265],{"class":149},[139,39416,33618],{"class":145},[139,39418,1064],{"class":149},[139,39420,33623],{"class":145},[139,39422,39423,39425,39427,39429],{"class":141,"line":474},[139,39424,1265],{"class":149},[139,39426,34162],{"class":145},[139,39428,1064],{"class":149},[139,39430,37800],{"class":145},[139,39432,39433,39435,39438,39440],{"class":141,"line":484},[139,39434,1265],{"class":149},[139,39436,39437],{"class":145}," 练习.AlexNet.model ",[139,39439,1064],{"class":149},[139,39441,37800],{"class":145},[139,39443,39444],{"class":141,"line":989},[139,39445,843],{"emptyLinePlaceholder":842},[139,39447,39448],{"class":141,"line":994},[139,39449,843],{"emptyLinePlaceholder":842},[139,39451,39452],{"class":141,"line":999},[139,39453,36196],{"class":2512},[139,39455,39456,39458,39460],{"class":141,"line":1006},[139,39457,778],{"class":149},[139,39459,36203],{"class":781},[139,39461,34200],{"class":145},[139,39463,39464,39466,39468,39470,39472,39474,39476],{"class":141,"line":1027},[139,39465,36210],{"class":145},[139,39467,150],{"class":149},[139,39469,33704],{"class":145},[139,39471,33707],{"class":2111},[139,39473,150],{"class":149},[139,39475,33712],{"class":160},[139,39477,33715],{"class":145},[139,39479,39480,39482,39484,39486],{"class":141,"line":1040},[139,39481,36227],{"class":2111},[139,39483,150],{"class":149},[139,39485,2203],{"class":153},[139,39487,33715],{"class":145},[139,39489,39490,39492,39494,39496,39498,39500,39502],{"class":141,"line":2160},[139,39491,36238],{"class":2111},[139,39493,150],{"class":149},[139,39495,33742],{"class":145},[139,39497,33745],{"class":2111},[139,39499,150],{"class":149},[139,39501,37692],{"class":153},[139,39503,33753],{"class":145},[139,39505,39506,39508,39510,39512],{"class":141,"line":2188},[139,39507,36255],{"class":2111},[139,39509,150],{"class":149},[139,39511,33725],{"class":153},[139,39513,164],{"class":145},[139,39515,39516,39518,39520,39522,39524,39526],{"class":141,"line":3944},[139,39517,36266],{"class":145},[139,39519,150],{"class":149},[139,39521,33783],{"class":145},[139,39523,33786],{"class":2111},[139,39525,150],{"class":149},[139,39527,36277],{"class":145},[139,39529,39530],{"class":141,"line":3963},[139,39531,36282],{"class":2512},[139,39533,39534,39536,39538,39540],{"class":141,"line":3968},[139,39535,36287],{"class":2111},[139,39537,150],{"class":149},[139,39539,410],{"class":153},[139,39541,33715],{"class":145},[139,39543,39544,39546,39548,39550],{"class":141,"line":3982},[139,39545,36298],{"class":2111},[139,39547,150],{"class":149},[139,39549,33725],{"class":153},[139,39551,33715],{"class":145},[139,39553,39554,39556,39558,39560],{"class":141,"line":3987},[139,39555,36309],{"class":2111},[139,39557,150],{"class":149},[139,39559,2634],{"class":153},[139,39561,164],{"class":145},[139,39563,39564,39566],{"class":141,"line":4014},[139,39565,978],{"class":149},[139,39567,36322],{"class":145},[139,39569,39570],{"class":141,"line":4019},[139,39571,843],{"emptyLinePlaceholder":842},[139,39573,39574],{"class":141,"line":4036},[139,39575,36331],{"class":2512},[139,39577,39578,39580,39582],{"class":141,"line":4041},[139,39579,778],{"class":149},[139,39581,36338],{"class":781},[139,39583,36341],{"class":145},[139,39585,39586],{"class":141,"line":4046},[139,39587,36346],{"class":2512},[139,39589,39590,39592,39594,39596,39598,39600,39602],{"class":141,"line":4051},[139,39591,33488],{"class":145},[139,39593,150],{"class":149},[139,39595,33495],{"class":160},[139,39597,3992],{"class":149},[139,39599,33500],{"class":145},[139,39601,656],{"class":149},[139,39603,36363],{"class":160},[139,39605,39606,39608,39610],{"class":141,"line":4065},[139,39607,33540],{"class":145},[139,39609,150],{"class":149},[139,39611,34536],{"class":145},[139,39613,39614],{"class":141,"line":4070},[139,39615,843],{"emptyLinePlaceholder":842},[139,39617,39618],{"class":141,"line":4860},[139,39619,36380],{"class":2512},[139,39621,39622,39624,39626],{"class":141,"line":4874},[139,39623,36385],{"class":145},[139,39625,150],{"class":149},[139,39627,34589],{"class":153},[139,39629,39630,39632,39634],{"class":141,"line":4882},[139,39631,36394],{"class":145},[139,39633,150],{"class":149},[139,39635,5367],{"class":153},[139,39637,39638],{"class":141,"line":4887},[139,39639,843],{"emptyLinePlaceholder":842},[139,39641,39642],{"class":141,"line":4893},[139,39643,36407],{"class":2512},[139,39645,39646],{"class":141,"line":4899},[139,39647,36412],{"class":2512},[139,39649,39650],{"class":141,"line":4904},[139,39651,36417],{"class":2512},[139,39653,39654,39656],{"class":141,"line":10222},[139,39655,2097],{"class":149},[139,39657,35131],{"class":145},[139,39659,39660],{"class":141,"line":10246},[139,39661,36428],{"class":2512},[139,39663,39664,39666,39668,39670],{"class":141,"line":10251},[139,39665,5684],{"class":149},[139,39667,36435],{"class":145},[139,39669,1976],{"class":149},[139,39671,36440],{"class":145},[139,39673,39674,39676,39678],{"class":141,"line":10257},[139,39675,36445],{"class":145},[139,39677,150],{"class":149},[139,39679,36450],{"class":145},[139,39681,39682,39684,39686],{"class":141,"line":10284},[139,39683,36455],{"class":145},[139,39685,150],{"class":149},[139,39687,36460],{"class":145},[139,39689,39690],{"class":141,"line":10289},[139,39691,36465],{"class":2512},[139,39693,39694],{"class":141,"line":10295},[139,39695,35122],{"class":145},[139,39697,39698],{"class":141,"line":10307},[139,39699,36474],{"class":2512},[139,39701,39702,39704,39706],{"class":141,"line":10319},[139,39703,34907],{"class":145},[139,39705,150],{"class":149},[139,39707,36483],{"class":145},[139,39709,39710],{"class":141,"line":10331},[139,39711,36488],{"class":2512},[139,39713,39714,39716,39718,39720,39722,39724,39726],{"class":141,"line":11990},[139,39715,34924],{"class":145},[139,39717,150],{"class":149},[139,39719,34929],{"class":145},[139,39721,34932],{"class":2111},[139,39723,150],{"class":149},[139,39725,410],{"class":153},[139,39727,164],{"class":145},[139,39729,39730],{"class":141,"line":12015},[139,39731,36509],{"class":2512},[139,39733,39734],{"class":141,"line":12038},[139,39735,36514],{"class":2512},[139,39737,39738],{"class":141,"line":12062},[139,39739,36519],{"class":2512},[139,39741,39742,39744,39746,39748,39750],{"class":141,"line":12067},[139,39743,36524],{"class":145},[139,39745,11751],{"class":149},[139,39747,35034],{"class":145},[139,39749,5232],{"class":149},[139,39751,36533],{"class":145},[139,39753,39754],{"class":141,"line":12072},[139,39755,36538],{"class":2512},[139,39757,39758,39760,39762,39764,39766],{"class":141,"line":12077},[139,39759,36543],{"class":145},[139,39761,11751],{"class":149},[139,39763,36548],{"class":145},[139,39765,2634],{"class":153},[139,39767,164],{"class":145},[139,39769,39770],{"class":141,"line":12086},[139,39771,843],{"emptyLinePlaceholder":842},[139,39773,39774],{"class":141,"line":12091},[139,39775,36561],{"class":2512},[139,39777,39778,39780,39782,39784,39786],{"class":141,"line":12097},[139,39779,36566],{"class":145},[139,39781,150],{"class":149},[139,39783,36571],{"class":145},[139,39785,3019],{"class":149},[139,39787,36576],{"class":145},[139,39789,39790],{"class":141,"line":12118},[139,39791,36581],{"class":2512},[139,39793,39794,39796,39798,39800],{"class":141,"line":12124},[139,39795,34698],{"class":153},[139,39797,157],{"class":145},[139,39799,36590],{"class":160},[139,39801,36593],{"class":145},[139,39803,39804],{"class":141,"line":12138},[139,39805,843],{"emptyLinePlaceholder":842},[139,39807,39808],{"class":141,"line":12144},[139,39809,36602],{"class":2512},[139,39811,39812,39814,39816,39818,39820],{"class":141,"line":12171},[139,39813,1729],{"class":149},[139,39815,1732],{"class":153},[139,39817,5232],{"class":149},[139,39819,33476],{"class":160},[139,39821,246],{"class":145},[139,39823,39824],{"class":141,"line":12180},[139,39825,36619],{"class":2512},[139,39827,39828,39830,39832],{"class":141,"line":12186},[139,39829,33540],{"class":145},[139,39831,150],{"class":149},[139,39833,39332],{"class":145},[139,39835,39836],{"class":141,"line":12194},[139,39837,36632],{"class":2512},[139,39839,39840],{"class":141,"line":12199},[139,39841,36637],{"class":2512},[139,39843,39844,39846,39848],{"class":141,"line":18871},[139,39845,36642],{"class":145},[139,39847,36645],{"class":160},[139,39849,207],{"class":145},[139,39851,39852],{"class":141,"line":18877},[139,39853,36652],{"class":2512},[139,39855,39856,39858,39860],{"class":141,"line":18900},[139,39857,36266],{"class":145},[139,39859,150],{"class":149},[139,39861,36661],{"class":145},[139,39863,39864],{"class":141,"line":18906},[139,39865,36666],{"class":2512},[139,39867,39868],{"class":141,"line":18929},[139,39869,36671],{"class":145},[139,39871,39872],{"class":141,"line":18943},[139,39873,843],{"emptyLinePlaceholder":842},[139,39875,39876],{"class":141,"line":18963},[139,39877,36680],{"class":2512},[139,39879,39880],{"class":141,"line":18969},[139,39881,36685],{"class":2512},[139,39883,39884,39886,39888,39890,39892,39894,39896],{"class":141,"line":18980},[139,39885,33488],{"class":145},[139,39887,150],{"class":149},[139,39889,33495],{"class":160},[139,39891,3992],{"class":149},[139,39893,33500],{"class":145},[139,39895,656],{"class":149},[139,39897,36363],{"class":160},[139,39899,39900,39902,39904],{"class":141,"line":19003},[139,39901,33540],{"class":145},[139,39903,150],{"class":149},[139,39905,34536],{"class":145},[139,39907,39908],{"class":141,"line":19025},[139,39909,36714],{"class":2512},[139,39911,39912],{"class":141,"line":19030},[139,39913,36719],{"class":2512},[139,39915,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960],{"class":141,"line":19036},[139,39917,36724],{"class":145},[139,39919,150],{"class":149},[139,39921,3325],{"class":145},[139,39923,36731],{"class":160},[139,39925,2816],{"class":145},[139,39927,36736],{"class":160},[139,39929,2816],{"class":145},[139,39931,36741],{"class":160},[139,39933,2816],{"class":145},[139,39935,36746],{"class":160},[139,39937,2816],{"class":145},[139,39939,36751],{"class":160},[139,39941,2816],{"class":145},[139,39943,36756],{"class":160},[139,39945,2816],{"class":145},[139,39947,36761],{"class":160},[139,39949,2816],{"class":145},[139,39951,36766],{"class":160},[139,39953,2816],{"class":145},[139,39955,36771],{"class":160},[139,39957,2816],{"class":145},[139,39959,36776],{"class":160},[139,39961,424],{"class":145},[139,39963,39964,39966],{"class":141,"line":19050},[139,39965,2097],{"class":149},[139,39967,35131],{"class":145},[139,39969,39970],{"class":141,"line":19063},[139,39971,36789],{"class":2512},[139,39973,39974,39976,39978,39980],{"class":141,"line":19068},[139,39975,5684],{"class":149},[139,39977,36796],{"class":145},[139,39979,1976],{"class":149},[139,39981,36440],{"class":145},[139,39983,39984,39986,39988],{"class":141,"line":19082},[139,39985,34857],{"class":145},[139,39987,150],{"class":149},[139,39989,34862],{"class":145},[139,39991,39992,39994,39996],{"class":141,"line":19087},[139,39993,34872],{"class":145},[139,39995,150],{"class":149},[139,39997,34877],{"class":145},[139,39999,40000],{"class":141,"line":19093},[139,40001,843],{"emptyLinePlaceholder":842},[139,40003,40004],{"class":141,"line":19098},[139,40005,36825],{"class":2512},[139,40007,40008],{"class":141,"line":19112},[139,40009,35122],{"class":145},[139,40011,40012],{"class":141,"line":19117},[139,40013,36834],{"class":2512},[139,40015,40016,40018,40020],{"class":141,"line":19122},[139,40017,34907],{"class":145},[139,40019,150],{"class":149},[139,40021,34912],{"class":145},[139,40023,40024],{"class":141,"line":19136},[139,40025,36847],{"class":2512},[139,40027,40028,40030,40032,40034,40036,40038,40040],{"class":141,"line":19148},[139,40029,34924],{"class":145},[139,40031,150],{"class":149},[139,40033,34929],{"class":145},[139,40035,34932],{"class":2111},[139,40037,150],{"class":149},[139,40039,410],{"class":153},[139,40041,164],{"class":145},[139,40043,40044],{"class":141,"line":19153},[139,40045,36868],{"class":2512},[139,40047,40048,40050,40052],{"class":141,"line":19166},[139,40049,36873],{"class":145},[139,40051,150],{"class":149},[139,40053,36878],{"class":145},[139,40055,40056,40058,40060],{"class":141,"line":19171},[139,40057,36883],{"class":145},[139,40059,150],{"class":149},[139,40061,36888],{"class":145},[139,40063,40064,40066,40068,40070,40072,40074,40076,40078],{"class":141,"line":19176},[139,40065,36893],{"class":153},[139,40067,157],{"class":145},[139,40069,36898],{"class":160},[139,40071,36901],{"class":145},[139,40073,36904],{"class":160},[139,40075,2816],{"class":145},[139,40077,36909],{"class":160},[139,40079,36912],{"class":145},[1217,40081,40083],{"id":40082},"_22vgg","2.2.VGG",[24265,40085,40087],{"id":40086},"_221原理","2.2.1.原理",[19,40089,40090],{},[3760,40091],{"alt":135,"src":40092},"\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,40094,40095],{},[3760,40096],{"alt":135,"src":40097},"\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,40099,40100],{},[3760,40101],{"alt":135,"src":40102},"\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,40104,40105],{},"参数详细描述：",[19,40107,40108],{},[3760,40109],{"alt":135,"src":40110},"\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,40112,40113],{},[3760,40114],{"alt":135,"src":40115},"\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,40117,40118],{},[3760,40119],{"alt":135,"src":40120},"\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,40122,40123],{},[3760,40124],{"alt":135,"src":40125},"\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,40127,40128],{},[3760,40129],{"alt":135,"src":40130},"\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",[24265,40132,40134],{"id":40133},"_222代码实现","2.2.2.代码实现",[1760,40136,40137],{},[1763,40138,40139],{},"网络搭建",[130,40141,40143],{"className":132,"code":40142,"language":134,"meta":135,"style":135},"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",[50,40144,40145,40151,40163,40173,40183,40187,40204,40212,40231,40236,40241,40253,40291,40296,40332,40336,40365,40370,40375,40386,40422,40426,40462,40466,40494,40498,40503,40514,40550,40554,40590,40594,40630,40634,40662,40666,40671,40682,40719,40723,40759,40763,40799,40803,40831,40835,40840,40851,40887,40891,40927,40931,40967,40971,40999,41003,41008,41019,41024,41029,41034,41055,41059,41071,41075,41087,41091,41095,41100,41105,41120,41125,41135,41140,41155,41160,41178,41183,41192,41197,41207,41212,41217,41231,41236,41250,41258,41262,41266,41274,41285,41296,41307,41318,41329,41340,41346,41350,41355,41368,41388,41394,41403],{"__ignoreMap":135},[139,40146,40147,40149],{"class":141,"line":142},[139,40148,1064],{"class":149},[139,40150,32651],{"class":145},[139,40152,40153,40155,40158,40160],{"class":141,"line":210},[139,40154,1265],{"class":149},[139,40156,40157],{"class":145}," sympy.core.sympify ",[139,40159,1064],{"class":149},[139,40161,40162],{"class":145}," kernS\n",[139,40164,40165,40167,40169,40171],{"class":141,"line":254},[139,40166,1265],{"class":149},[139,40168,32993],{"class":145},[139,40170,1064],{"class":149},[139,40172,32998],{"class":145},[139,40174,40175,40177,40179,40181],{"class":141,"line":262},[139,40176,1265],{"class":149},[139,40178,33010],{"class":145},[139,40180,1064],{"class":149},[139,40182,33015],{"class":145},[139,40184,40185],{"class":141,"line":313},[139,40186,843],{"emptyLinePlaceholder":842},[139,40188,40189,40191,40194,40196,40198,40200,40202],{"class":141,"line":462},[139,40190,915],{"class":149},[139,40192,40193],{"class":781}," VGG16",[139,40195,157],{"class":145},[139,40197,33031],{"class":781},[139,40199,2993],{"class":145},[139,40201,33036],{"class":781},[139,40203,558],{"class":145},[139,40205,40206,40208,40210],{"class":141,"line":474},[139,40207,33053],{"class":149},[139,40209,33056],{"class":153},[139,40211,33059],{"class":145},[139,40213,40214,40216,40218,40221,40223,40225,40227,40229],{"class":141,"line":484},[139,40215,33069],{"class":153},[139,40217,157],{"class":145},[139,40219,40220],{"class":153},"VGG16",[139,40222,413],{"class":145},[139,40224,33075],{"class":153},[139,40226,33078],{"class":145},[139,40228,33081],{"class":153},[139,40230,4262],{"class":145},[139,40232,40233],{"class":141,"line":989},[139,40234,40235],{"class":2512},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[139,40237,40238],{"class":141,"line":994},[139,40239,40240],{"class":2512},"        # 这里用的是灰度图\n",[139,40242,40243,40245,40248,40250],{"class":141,"line":999},[139,40244,33097],{"class":153},[139,40246,40247],{"class":145},".block1",[139,40249,150],{"class":149},[139,40251,40252],{"class":145},"nn.Sequential(\n",[139,40254,40255,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288],{"class":141,"line":1006},[139,40256,40257],{"class":145},"            nn.Conv2d(",[139,40259,33108],{"class":2111},[139,40261,150],{"class":149},[139,40263,410],{"class":153},[139,40265,2816],{"class":145},[139,40267,33117],{"class":2111},[139,40269,150],{"class":149},[139,40271,2646],{"class":153},[139,40273,2816],{"class":145},[139,40275,33126],{"class":2111},[139,40277,150],{"class":149},[139,40279,421],{"class":153},[139,40281,2816],{"class":145},[139,40283,33135],{"class":2111},[139,40285,150],{"class":149},[139,40287,410],{"class":153},[139,40289,40290],{"class":145},"),\n",[139,40292,40293],{"class":141,"line":1027},[139,40294,40295],{"class":145},"            nn.ReLU(),\n",[139,40297,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330],{"class":141,"line":1040},[139,40299,40257],{"class":145},[139,40301,33108],{"class":2111},[139,40303,150],{"class":149},[139,40305,2646],{"class":153},[139,40307,2816],{"class":145},[139,40309,33117],{"class":2111},[139,40311,150],{"class":149},[139,40313,2646],{"class":153},[139,40315,2816],{"class":145},[139,40317,33126],{"class":2111},[139,40319,150],{"class":149},[139,40321,421],{"class":153},[139,40323,2816],{"class":145},[139,40325,33135],{"class":2111},[139,40327,150],{"class":149},[139,40329,410],{"class":153},[139,40331,40290],{"class":145},[139,40333,40334],{"class":141,"line":2160},[139,40335,40295],{"class":145},[139,40337,40338,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363],{"class":141,"line":2188},[139,40339,40340],{"class":145},"            nn.MaxPool2d(",[139,40342,33126],{"class":2111},[139,40344,150],{"class":149},[139,40346,416],{"class":153},[139,40348,2816],{"class":145},[139,40350,33181],{"class":2111},[139,40352,150],{"class":149},[139,40354,416],{"class":153},[139,40356,2816],{"class":145},[139,40358,33135],{"class":2111},[139,40360,150],{"class":149},[139,40362,2634],{"class":153},[139,40364,164],{"class":145},[139,40366,40367],{"class":141,"line":3944},[139,40368,40369],{"class":145},"        )\n",[139,40371,40372],{"class":141,"line":3963},[139,40373,40374],{"class":2512},"        # 第二层\n",[139,40376,40377,40379,40382,40384],{"class":141,"line":3968},[139,40378,33097],{"class":153},[139,40380,40381],{"class":145},".block2",[139,40383,150],{"class":149},[139,40385,40252],{"class":145},[139,40387,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420],{"class":141,"line":3982},[139,40389,40257],{"class":145},[139,40391,33108],{"class":2111},[139,40393,150],{"class":149},[139,40395,2646],{"class":153},[139,40397,2816],{"class":145},[139,40399,33117],{"class":2111},[139,40401,150],{"class":149},[139,40403,34317],{"class":153},[139,40405,2816],{"class":145},[139,40407,33126],{"class":2111},[139,40409,150],{"class":149},[139,40411,421],{"class":153},[139,40413,2816],{"class":145},[139,40415,33135],{"class":2111},[139,40417,150],{"class":149},[139,40419,410],{"class":153},[139,40421,40290],{"class":145},[139,40423,40424],{"class":141,"line":3987},[139,40425,40295],{"class":145},[139,40427,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460],{"class":141,"line":4014},[139,40429,40257],{"class":145},[139,40431,33108],{"class":2111},[139,40433,150],{"class":149},[139,40435,34317],{"class":153},[139,40437,2816],{"class":145},[139,40439,33117],{"class":2111},[139,40441,150],{"class":149},[139,40443,34317],{"class":153},[139,40445,2816],{"class":145},[139,40447,33126],{"class":2111},[139,40449,150],{"class":149},[139,40451,421],{"class":153},[139,40453,2816],{"class":145},[139,40455,33135],{"class":2111},[139,40457,150],{"class":149},[139,40459,410],{"class":153},[139,40461,40290],{"class":145},[139,40463,40464],{"class":141,"line":4019},[139,40465,40295],{"class":145},[139,40467,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492],{"class":141,"line":4036},[139,40469,40340],{"class":145},[139,40471,33126],{"class":2111},[139,40473,150],{"class":149},[139,40475,416],{"class":153},[139,40477,2816],{"class":145},[139,40479,33181],{"class":2111},[139,40481,150],{"class":149},[139,40483,416],{"class":153},[139,40485,2816],{"class":145},[139,40487,33135],{"class":2111},[139,40489,150],{"class":149},[139,40491,2634],{"class":153},[139,40493,164],{"class":145},[139,40495,40496],{"class":141,"line":4041},[139,40497,40369],{"class":145},[139,40499,40500],{"class":141,"line":4046},[139,40501,40502],{"class":2512},"        # 第三层\n",[139,40504,40505,40507,40510,40512],{"class":141,"line":4051},[139,40506,33097],{"class":153},[139,40508,40509],{"class":145},".block3",[139,40511,150],{"class":149},[139,40513,40252],{"class":145},[139,40515,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546,40548],{"class":141,"line":4065},[139,40517,40257],{"class":145},[139,40519,33108],{"class":2111},[139,40521,150],{"class":149},[139,40523,34317],{"class":153},[139,40525,2816],{"class":145},[139,40527,33117],{"class":2111},[139,40529,150],{"class":149},[139,40531,37113],{"class":153},[139,40533,2816],{"class":145},[139,40535,33126],{"class":2111},[139,40537,150],{"class":149},[139,40539,421],{"class":153},[139,40541,2816],{"class":145},[139,40543,33135],{"class":2111},[139,40545,150],{"class":149},[139,40547,410],{"class":153},[139,40549,40290],{"class":145},[139,40551,40552],{"class":141,"line":4070},[139,40553,40295],{"class":145},[139,40555,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586,40588],{"class":141,"line":4860},[139,40557,40257],{"class":145},[139,40559,33108],{"class":2111},[139,40561,150],{"class":149},[139,40563,37113],{"class":153},[139,40565,2816],{"class":145},[139,40567,33117],{"class":2111},[139,40569,150],{"class":149},[139,40571,37113],{"class":153},[139,40573,2816],{"class":145},[139,40575,33126],{"class":2111},[139,40577,150],{"class":149},[139,40579,421],{"class":153},[139,40581,2816],{"class":145},[139,40583,33135],{"class":2111},[139,40585,150],{"class":149},[139,40587,410],{"class":153},[139,40589,40290],{"class":145},[139,40591,40592],{"class":141,"line":4874},[139,40593,40295],{"class":145},[139,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628],{"class":141,"line":4882},[139,40597,40257],{"class":145},[139,40599,33108],{"class":2111},[139,40601,150],{"class":149},[139,40603,37113],{"class":153},[139,40605,2816],{"class":145},[139,40607,33117],{"class":2111},[139,40609,150],{"class":149},[139,40611,37113],{"class":153},[139,40613,2816],{"class":145},[139,40615,33126],{"class":2111},[139,40617,150],{"class":149},[139,40619,421],{"class":153},[139,40621,2816],{"class":145},[139,40623,33135],{"class":2111},[139,40625,150],{"class":149},[139,40627,410],{"class":153},[139,40629,40290],{"class":145},[139,40631,40632],{"class":141,"line":4887},[139,40633,40295],{"class":145},[139,40635,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660],{"class":141,"line":4893},[139,40637,40340],{"class":145},[139,40639,33126],{"class":2111},[139,40641,150],{"class":149},[139,40643,416],{"class":153},[139,40645,2816],{"class":145},[139,40647,33181],{"class":2111},[139,40649,150],{"class":149},[139,40651,416],{"class":153},[139,40653,2816],{"class":145},[139,40655,33135],{"class":2111},[139,40657,150],{"class":149},[139,40659,2634],{"class":153},[139,40661,164],{"class":145},[139,40663,40664],{"class":141,"line":4899},[139,40665,40369],{"class":145},[139,40667,40668],{"class":141,"line":4904},[139,40669,40670],{"class":2512},"        # 第四层\n",[139,40672,40673,40675,40678,40680],{"class":141,"line":10222},[139,40674,33097],{"class":153},[139,40676,40677],{"class":145},".block4",[139,40679,150],{"class":149},[139,40681,40252],{"class":145},[139,40683,40684,40686,40688,40690,40692,40694,40696,40698,40701,40703,40705,40707,40709,40711,40713,40715,40717],{"class":141,"line":10246},[139,40685,40257],{"class":145},[139,40687,33108],{"class":2111},[139,40689,150],{"class":149},[139,40691,37113],{"class":153},[139,40693,2816],{"class":145},[139,40695,33117],{"class":2111},[139,40697,150],{"class":149},[139,40699,40700],{"class":153},"512",[139,40702,2816],{"class":145},[139,40704,33126],{"class":2111},[139,40706,150],{"class":149},[139,40708,421],{"class":153},[139,40710,2816],{"class":145},[139,40712,33135],{"class":2111},[139,40714,150],{"class":149},[139,40716,410],{"class":153},[139,40718,40290],{"class":145},[139,40720,40721],{"class":141,"line":10251},[139,40722,40295],{"class":145},[139,40724,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749,40751,40753,40755,40757],{"class":141,"line":10257},[139,40726,40257],{"class":145},[139,40728,33108],{"class":2111},[139,40730,150],{"class":149},[139,40732,40700],{"class":153},[139,40734,2816],{"class":145},[139,40736,33117],{"class":2111},[139,40738,150],{"class":149},[139,40740,40700],{"class":153},[139,40742,2816],{"class":145},[139,40744,33126],{"class":2111},[139,40746,150],{"class":149},[139,40748,421],{"class":153},[139,40750,2816],{"class":145},[139,40752,33135],{"class":2111},[139,40754,150],{"class":149},[139,40756,410],{"class":153},[139,40758,40290],{"class":145},[139,40760,40761],{"class":141,"line":10284},[139,40762,40295],{"class":145},[139,40764,40765,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797],{"class":141,"line":10289},[139,40766,40257],{"class":145},[139,40768,33108],{"class":2111},[139,40770,150],{"class":149},[139,40772,40700],{"class":153},[139,40774,2816],{"class":145},[139,40776,33117],{"class":2111},[139,40778,150],{"class":149},[139,40780,40700],{"class":153},[139,40782,2816],{"class":145},[139,40784,33126],{"class":2111},[139,40786,150],{"class":149},[139,40788,421],{"class":153},[139,40790,2816],{"class":145},[139,40792,33135],{"class":2111},[139,40794,150],{"class":149},[139,40796,410],{"class":153},[139,40798,40290],{"class":145},[139,40800,40801],{"class":141,"line":10295},[139,40802,40295],{"class":145},[139,40804,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829],{"class":141,"line":10307},[139,40806,40340],{"class":145},[139,40808,33126],{"class":2111},[139,40810,150],{"class":149},[139,40812,416],{"class":153},[139,40814,2816],{"class":145},[139,40816,33181],{"class":2111},[139,40818,150],{"class":149},[139,40820,416],{"class":153},[139,40822,2816],{"class":145},[139,40824,33135],{"class":2111},[139,40826,150],{"class":149},[139,40828,2634],{"class":153},[139,40830,164],{"class":145},[139,40832,40833],{"class":141,"line":10319},[139,40834,40369],{"class":145},[139,40836,40837],{"class":141,"line":10331},[139,40838,40839],{"class":2512},"        # 第五层\n",[139,40841,40842,40844,40847,40849],{"class":141,"line":11990},[139,40843,33097],{"class":153},[139,40845,40846],{"class":145},".block5",[139,40848,150],{"class":149},[139,40850,40252],{"class":145},[139,40852,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871,40873,40875,40877,40879,40881,40883,40885],{"class":141,"line":12015},[139,40854,40257],{"class":145},[139,40856,33108],{"class":2111},[139,40858,150],{"class":149},[139,40860,40700],{"class":153},[139,40862,2816],{"class":145},[139,40864,33117],{"class":2111},[139,40866,150],{"class":149},[139,40868,40700],{"class":153},[139,40870,2816],{"class":145},[139,40872,33126],{"class":2111},[139,40874,150],{"class":149},[139,40876,421],{"class":153},[139,40878,2816],{"class":145},[139,40880,33135],{"class":2111},[139,40882,150],{"class":149},[139,40884,410],{"class":153},[139,40886,40290],{"class":145},[139,40888,40889],{"class":141,"line":12038},[139,40890,40295],{"class":145},[139,40892,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911,40913,40915,40917,40919,40921,40923,40925],{"class":141,"line":12062},[139,40894,40257],{"class":145},[139,40896,33108],{"class":2111},[139,40898,150],{"class":149},[139,40900,40700],{"class":153},[139,40902,2816],{"class":145},[139,40904,33117],{"class":2111},[139,40906,150],{"class":149},[139,40908,40700],{"class":153},[139,40910,2816],{"class":145},[139,40912,33126],{"class":2111},[139,40914,150],{"class":149},[139,40916,421],{"class":153},[139,40918,2816],{"class":145},[139,40920,33135],{"class":2111},[139,40922,150],{"class":149},[139,40924,410],{"class":153},[139,40926,40290],{"class":145},[139,40928,40929],{"class":141,"line":12067},[139,40930,40295],{"class":145},[139,40932,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959,40961,40963,40965],{"class":141,"line":12072},[139,40934,40257],{"class":145},[139,40936,33108],{"class":2111},[139,40938,150],{"class":149},[139,40940,40700],{"class":153},[139,40942,2816],{"class":145},[139,40944,33117],{"class":2111},[139,40946,150],{"class":149},[139,40948,40700],{"class":153},[139,40950,2816],{"class":145},[139,40952,33126],{"class":2111},[139,40954,150],{"class":149},[139,40956,421],{"class":153},[139,40958,2816],{"class":145},[139,40960,33135],{"class":2111},[139,40962,150],{"class":149},[139,40964,410],{"class":153},[139,40966,40290],{"class":145},[139,40968,40969],{"class":141,"line":12077},[139,40970,40295],{"class":145},[139,40972,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997],{"class":141,"line":12086},[139,40974,40340],{"class":145},[139,40976,33126],{"class":2111},[139,40978,150],{"class":149},[139,40980,416],{"class":153},[139,40982,2816],{"class":145},[139,40984,33181],{"class":2111},[139,40986,150],{"class":149},[139,40988,416],{"class":153},[139,40990,2816],{"class":145},[139,40992,33135],{"class":2111},[139,40994,150],{"class":149},[139,40996,2634],{"class":153},[139,40998,164],{"class":145},[139,41000,41001],{"class":141,"line":12091},[139,41002,40369],{"class":145},[139,41004,41005],{"class":141,"line":12097},[139,41006,41007],{"class":2512},"        # 全连接层\n",[139,41009,41010,41012,41015,41017],{"class":141,"line":12118},[139,41011,33097],{"class":153},[139,41013,41014],{"class":145},".block6",[139,41016,150],{"class":149},[139,41018,40252],{"class":145},[139,41020,41021],{"class":141,"line":12124},[139,41022,41023],{"class":2512},"            # 平展操作\n",[139,41025,41026],{"class":141,"line":12138},[139,41027,41028],{"class":2512},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[139,41030,41031],{"class":141,"line":12144},[139,41032,41033],{"class":145},"            nn.Flatten(),\n",[139,41035,41036,41039,41041,41043,41045,41047,41049,41051,41053],{"class":141,"line":12171},[139,41037,41038],{"class":145},"            nn.Linear(",[139,41040,2807],{"class":153},[139,41042,2892],{"class":149},[139,41044,2807],{"class":153},[139,41046,2892],{"class":149},[139,41048,40700],{"class":153},[139,41050,2816],{"class":145},[139,41052,37113],{"class":153},[139,41054,40290],{"class":145},[139,41056,41057],{"class":141,"line":12180},[139,41058,40295],{"class":145},[139,41060,41061,41063,41065,41067,41069],{"class":141,"line":12186},[139,41062,41038],{"class":145},[139,41064,37113],{"class":153},[139,41066,2816],{"class":145},[139,41068,34317],{"class":153},[139,41070,40290],{"class":145},[139,41072,41073],{"class":141,"line":12194},[139,41074,40295],{"class":145},[139,41076,41077,41079,41081,41083,41085],{"class":141,"line":12199},[139,41078,41038],{"class":145},[139,41080,34317],{"class":153},[139,41082,2816],{"class":145},[139,41084,536],{"class":153},[139,41086,164],{"class":145},[139,41088,41089],{"class":141,"line":18871},[139,41090,40369],{"class":145},[139,41092,41093],{"class":141,"line":18877},[139,41094,843],{"emptyLinePlaceholder":842},[139,41096,41097],{"class":141,"line":18900},[139,41098,41099],{"class":2512},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[139,41101,41102],{"class":141,"line":18906},[139,41103,41104],{"class":2512},"        # 循环遍历模型\n",[139,41106,41107,41109,41112,41114,41117],{"class":141,"line":18929},[139,41108,5684],{"class":149},[139,41110,41111],{"class":145}," m ",[139,41113,1976],{"class":149},[139,41115,41116],{"class":153}," self",[139,41118,41119],{"class":145},".modules():\n",[139,41121,41122],{"class":141,"line":18943},[139,41123,41124],{"class":2512},"            # print(m)\n",[139,41126,41127,41129,41132],{"class":141,"line":18963},[139,41128,6920],{"class":149},[139,41130,41131],{"class":153}," isinstance",[139,41133,41134],{"class":145},"(m,nn.Conv2d):\n",[139,41136,41137],{"class":141,"line":18969},[139,41138,41139],{"class":2512},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[139,41141,41142,41145,41148,41150,41153],{"class":141,"line":18980},[139,41143,41144],{"class":145},"                nn.init.kaiming_normal_(m.weight,",[139,41146,41147],{"class":2111},"nonlinearity",[139,41149,150],{"class":149},[139,41151,41152],{"class":160},"'relu'",[139,41154,164],{"class":145},[139,41156,41157],{"class":141,"line":19003},[139,41158,41159],{"class":2512},"                # 判断b参数是否存在\n",[139,41161,41162,41165,41168,41171,41173,41176],{"class":141,"line":19025},[139,41163,41164],{"class":149},"                if",[139,41166,41167],{"class":145}," m.bias ",[139,41169,41170],{"class":149},"is",[139,41172,2077],{"class":149},[139,41174,41175],{"class":153}," None",[139,41177,246],{"class":145},[139,41179,41180],{"class":141,"line":19030},[139,41181,41182],{"class":2512},"                    # 如果参数不存在的化初始化b=0\n",[139,41184,41185,41188,41190],{"class":141,"line":19036},[139,41186,41187],{"class":145},"                    nn.init.constant_(m.bias,",[139,41189,2634],{"class":153},[139,41191,164],{"class":145},[139,41193,41194],{"class":141,"line":19050},[139,41195,41196],{"class":2512},"            # 全连接层初始化\n",[139,41198,41199,41202,41204],{"class":141,"line":19063},[139,41200,41201],{"class":149},"            elif",[139,41203,41131],{"class":153},[139,41205,41206],{"class":145},"(m,nn.Linear):\n",[139,41208,41209],{"class":141,"line":19068},[139,41210,41211],{"class":2512},"                # 这个初始化方法是利用的是正太分布的方式\n",[139,41213,41214],{"class":141,"line":19082},[139,41215,41216],{"class":2512},"                # 均值为0，方差为0.01\n",[139,41218,41219,41222,41224,41226,41229],{"class":141,"line":19087},[139,41220,41221],{"class":145},"                nn.init.normal_(m.weight,",[139,41223,2634],{"class":153},[139,41225,2816],{"class":145},[139,41227,41228],{"class":153},"0.01",[139,41230,164],{"class":145},[139,41232,41233],{"class":141,"line":19093},[139,41234,41235],{"class":2512},"                # 初始化b参数\n",[139,41237,41238,41240,41242,41244,41246,41248],{"class":141,"line":19098},[139,41239,41164],{"class":149},[139,41241,41167],{"class":145},[139,41243,41170],{"class":149},[139,41245,2077],{"class":149},[139,41247,41175],{"class":153},[139,41249,246],{"class":145},[139,41251,41252,41254,41256],{"class":141,"line":19112},[139,41253,41187],{"class":145},[139,41255,2634],{"class":153},[139,41257,164],{"class":145},[139,41259,41260],{"class":141,"line":19117},[139,41261,843],{"emptyLinePlaceholder":842},[139,41263,41264],{"class":141,"line":19122},[139,41265,37408],{"class":2512},[139,41267,41268,41270,41272],{"class":141,"line":19136},[139,41269,33053],{"class":149},[139,41271,33345],{"class":781},[139,41273,33348],{"class":145},[139,41275,41276,41278,41280,41282],{"class":141,"line":19148},[139,41277,33353],{"class":145},[139,41279,150],{"class":149},[139,41281,33075],{"class":153},[139,41283,41284],{"class":145},".block1(x)\n",[139,41286,41287,41289,41291,41293],{"class":141,"line":19153},[139,41288,33353],{"class":145},[139,41290,150],{"class":149},[139,41292,33075],{"class":153},[139,41294,41295],{"class":145},".block2(x)\n",[139,41297,41298,41300,41302,41304],{"class":141,"line":19166},[139,41299,33353],{"class":145},[139,41301,150],{"class":149},[139,41303,33075],{"class":153},[139,41305,41306],{"class":145},".block3(x)\n",[139,41308,41309,41311,41313,41315],{"class":141,"line":19171},[139,41310,33353],{"class":145},[139,41312,150],{"class":149},[139,41314,33075],{"class":153},[139,41316,41317],{"class":145},".block4(x)\n",[139,41319,41320,41322,41324,41326],{"class":141,"line":19176},[139,41321,33353],{"class":145},[139,41323,150],{"class":149},[139,41325,33075],{"class":153},[139,41327,41328],{"class":145},".block5(x)\n",[139,41330,41331,41333,41335,41337],{"class":141,"line":19181},[139,41332,33353],{"class":145},[139,41334,150],{"class":149},[139,41336,33075],{"class":153},[139,41338,41339],{"class":145},".block6(x)\n",[139,41341,41342,41344],{"class":141,"line":19194},[139,41343,2085],{"class":149},[139,41345,33461],{"class":145},[139,41347,41348],{"class":141,"line":19199},[139,41349,843],{"emptyLinePlaceholder":842},[139,41351,41352],{"class":141,"line":34880},[139,41353,41354],{"class":2512},"# 验证模型\n",[139,41356,41357,41359,41361,41363,41366],{"class":141,"line":34886},[139,41358,1729],{"class":149},[139,41360,1732],{"class":153},[139,41362,5232],{"class":149},[139,41364,41365],{"class":160},"'__main__'",[139,41367,246],{"class":145},[139,41369,41370,41372,41374,41376,41378,41380,41382,41384,41386],{"class":141,"line":34892},[139,41371,33488],{"class":145},[139,41373,150],{"class":149},[139,41375,32706],{"class":145},[139,41377,33495],{"class":160},[139,41379,3992],{"class":149},[139,41381,33500],{"class":145},[139,41383,656],{"class":149},[139,41385,32731],{"class":160},[139,41387,164],{"class":145},[139,41389,41390,41392],{"class":141,"line":34898},[139,41391,302],{"class":153},[139,41393,32740],{"class":145},[139,41395,41396,41398,41400],{"class":141,"line":34904},[139,41397,33540],{"class":145},[139,41399,150],{"class":149},[139,41401,41402],{"class":145},"VGG16().to(device)\n",[139,41404,41405,41407,41409,41411,41413,41415,41417,41419],{"class":141,"line":34915},[139,41406,302],{"class":153},[139,41408,33552],{"class":145},[139,41410,410],{"class":153},[139,41412,2816],{"class":145},[139,41414,33750],{"class":153},[139,41416,2816],{"class":145},[139,41418,33750],{"class":153},[139,41420,33565],{"class":145},[1760,41422,41423],{"start":210},[1763,41424,41425],{},"训练代码",[19,41427,41428],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41430,41431],{},"解决方式:",[19,41433,41434],{},"①权重初始化",[130,41436,41438],{"className":132,"code":41437,"language":134,"meta":135,"style":135},"# 权重初始化,保证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",[50,41439,41440,41445,41450,41462,41467,41475,41480,41493,41498,41512,41517,41526,41531,41540,41545,41550,41563,41568,41582],{"__ignoreMap":135},[139,41441,41442],{"class":141,"line":142},[139,41443,41444],{"class":2512},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[139,41446,41447],{"class":141,"line":210},[139,41448,41449],{"class":2512},"# 循环遍历模型\n",[139,41451,41452,41454,41456,41458,41460],{"class":141,"line":254},[139,41453,1970],{"class":149},[139,41455,41111],{"class":145},[139,41457,1976],{"class":149},[139,41459,41116],{"class":153},[139,41461,41119],{"class":145},[139,41463,41464],{"class":141,"line":262},[139,41465,41466],{"class":2512},"    # print(m)\n",[139,41468,41469,41471,41473],{"class":141,"line":313},[139,41470,790],{"class":149},[139,41472,41131],{"class":153},[139,41474,41134],{"class":145},[139,41476,41477],{"class":141,"line":462},[139,41478,41479],{"class":2512},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[139,41481,41482,41485,41487,41489,41491],{"class":141,"line":474},[139,41483,41484],{"class":145},"        nn.init.kaiming_normal_(m.weight,",[139,41486,41147],{"class":2111},[139,41488,150],{"class":149},[139,41490,41152],{"class":160},[139,41492,164],{"class":145},[139,41494,41495],{"class":141,"line":484},[139,41496,41497],{"class":2512},"        # 判断b参数是否存在\n",[139,41499,41500,41502,41504,41506,41508,41510],{"class":141,"line":989},[139,41501,4780],{"class":149},[139,41503,41167],{"class":145},[139,41505,41170],{"class":149},[139,41507,2077],{"class":149},[139,41509,41175],{"class":153},[139,41511,246],{"class":145},[139,41513,41514],{"class":141,"line":994},[139,41515,41516],{"class":2512},"            # 如果参数不存在的化初始化b=0\n",[139,41518,41519,41522,41524],{"class":141,"line":999},[139,41520,41521],{"class":145},"            nn.init.constant_(m.bias,",[139,41523,2634],{"class":153},[139,41525,164],{"class":145},[139,41527,41528],{"class":141,"line":1006},[139,41529,41530],{"class":2512},"    # 全连接层初始化\n",[139,41532,41533,41536,41538],{"class":141,"line":1027},[139,41534,41535],{"class":149},"    elif",[139,41537,41131],{"class":153},[139,41539,41206],{"class":145},[139,41541,41542],{"class":141,"line":1040},[139,41543,41544],{"class":2512},"        # 这个初始化方法是利用的是正太分布的方式\n",[139,41546,41547],{"class":141,"line":2160},[139,41548,41549],{"class":2512},"        # 均值为0，方差为0.01\n",[139,41551,41552,41555,41557,41559,41561],{"class":141,"line":2188},[139,41553,41554],{"class":145},"        nn.init.normal_(m.weight,",[139,41556,2634],{"class":153},[139,41558,2816],{"class":145},[139,41560,41228],{"class":153},[139,41562,164],{"class":145},[139,41564,41565],{"class":141,"line":3944},[139,41566,41567],{"class":2512},"        # 初始化b参数\n",[139,41569,41570,41572,41574,41576,41578,41580],{"class":141,"line":3963},[139,41571,4780],{"class":149},[139,41573,41167],{"class":145},[139,41575,41170],{"class":149},[139,41577,2077],{"class":149},[139,41579,41175],{"class":153},[139,41581,246],{"class":145},[139,41583,41584,41586,41588],{"class":141,"line":3968},[139,41585,41521],{"class":145},[139,41587,2634],{"class":153},[139,41589,164],{"class":145},[19,41591,41592],{},"②尽可能地增加批次",[19,41594,41595],{},"训练完整代码：",[130,41597,41598],{"className":132,"code":40142,"language":134,"meta":135,"style":135},[50,41599,41600,41606,41616,41626,41636,41640,41656,41664,41682,41686,41690,41700,41736,41740,41776,41780,41808,41812,41816,41826,41862,41866,41902,41906,41934,41938,41942,41952,41988,41992,42028,42032,42068,42072,42100,42104,42108,42118,42154,42158,42194,42198,42234,42238,42266,42270,42274,42284,42320,42324,42360,42364,42400,42404,42432,42436,42440,42450,42454,42458,42462,42482,42486,42498,42502,42514,42518,42522,42526,42530,42542,42546,42554,42558,42570,42574,42588,42592,42600,42604,42612,42616,42620,42632,42636,42650,42658,42662,42666,42674,42684,42694,42704,42714,42724,42734,42740,42744,42748,42760,42780,42786,42794],{"__ignoreMap":135},[139,41601,41602,41604],{"class":141,"line":142},[139,41603,1064],{"class":149},[139,41605,32651],{"class":145},[139,41607,41608,41610,41612,41614],{"class":141,"line":210},[139,41609,1265],{"class":149},[139,41611,40157],{"class":145},[139,41613,1064],{"class":149},[139,41615,40162],{"class":145},[139,41617,41618,41620,41622,41624],{"class":141,"line":254},[139,41619,1265],{"class":149},[139,41621,32993],{"class":145},[139,41623,1064],{"class":149},[139,41625,32998],{"class":145},[139,41627,41628,41630,41632,41634],{"class":141,"line":262},[139,41629,1265],{"class":149},[139,41631,33010],{"class":145},[139,41633,1064],{"class":149},[139,41635,33015],{"class":145},[139,41637,41638],{"class":141,"line":313},[139,41639,843],{"emptyLinePlaceholder":842},[139,41641,41642,41644,41646,41648,41650,41652,41654],{"class":141,"line":462},[139,41643,915],{"class":149},[139,41645,40193],{"class":781},[139,41647,157],{"class":145},[139,41649,33031],{"class":781},[139,41651,2993],{"class":145},[139,41653,33036],{"class":781},[139,41655,558],{"class":145},[139,41657,41658,41660,41662],{"class":141,"line":474},[139,41659,33053],{"class":149},[139,41661,33056],{"class":153},[139,41663,33059],{"class":145},[139,41665,41666,41668,41670,41672,41674,41676,41678,41680],{"class":141,"line":484},[139,41667,33069],{"class":153},[139,41669,157],{"class":145},[139,41671,40220],{"class":153},[139,41673,413],{"class":145},[139,41675,33075],{"class":153},[139,41677,33078],{"class":145},[139,41679,33081],{"class":153},[139,41681,4262],{"class":145},[139,41683,41684],{"class":141,"line":989},[139,41685,40235],{"class":2512},[139,41687,41688],{"class":141,"line":994},[139,41689,40240],{"class":2512},[139,41691,41692,41694,41696,41698],{"class":141,"line":999},[139,41693,33097],{"class":153},[139,41695,40247],{"class":145},[139,41697,150],{"class":149},[139,41699,40252],{"class":145},[139,41701,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734],{"class":141,"line":1006},[139,41703,40257],{"class":145},[139,41705,33108],{"class":2111},[139,41707,150],{"class":149},[139,41709,410],{"class":153},[139,41711,2816],{"class":145},[139,41713,33117],{"class":2111},[139,41715,150],{"class":149},[139,41717,2646],{"class":153},[139,41719,2816],{"class":145},[139,41721,33126],{"class":2111},[139,41723,150],{"class":149},[139,41725,421],{"class":153},[139,41727,2816],{"class":145},[139,41729,33135],{"class":2111},[139,41731,150],{"class":149},[139,41733,410],{"class":153},[139,41735,40290],{"class":145},[139,41737,41738],{"class":141,"line":1027},[139,41739,40295],{"class":145},[139,41741,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774],{"class":141,"line":1040},[139,41743,40257],{"class":145},[139,41745,33108],{"class":2111},[139,41747,150],{"class":149},[139,41749,2646],{"class":153},[139,41751,2816],{"class":145},[139,41753,33117],{"class":2111},[139,41755,150],{"class":149},[139,41757,2646],{"class":153},[139,41759,2816],{"class":145},[139,41761,33126],{"class":2111},[139,41763,150],{"class":149},[139,41765,421],{"class":153},[139,41767,2816],{"class":145},[139,41769,33135],{"class":2111},[139,41771,150],{"class":149},[139,41773,410],{"class":153},[139,41775,40290],{"class":145},[139,41777,41778],{"class":141,"line":2160},[139,41779,40295],{"class":145},[139,41781,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806],{"class":141,"line":2188},[139,41783,40340],{"class":145},[139,41785,33126],{"class":2111},[139,41787,150],{"class":149},[139,41789,416],{"class":153},[139,41791,2816],{"class":145},[139,41793,33181],{"class":2111},[139,41795,150],{"class":149},[139,41797,416],{"class":153},[139,41799,2816],{"class":145},[139,41801,33135],{"class":2111},[139,41803,150],{"class":149},[139,41805,2634],{"class":153},[139,41807,164],{"class":145},[139,41809,41810],{"class":141,"line":3944},[139,41811,40369],{"class":145},[139,41813,41814],{"class":141,"line":3963},[139,41815,40374],{"class":2512},[139,41817,41818,41820,41822,41824],{"class":141,"line":3968},[139,41819,33097],{"class":153},[139,41821,40381],{"class":145},[139,41823,150],{"class":149},[139,41825,40252],{"class":145},[139,41827,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860],{"class":141,"line":3982},[139,41829,40257],{"class":145},[139,41831,33108],{"class":2111},[139,41833,150],{"class":149},[139,41835,2646],{"class":153},[139,41837,2816],{"class":145},[139,41839,33117],{"class":2111},[139,41841,150],{"class":149},[139,41843,34317],{"class":153},[139,41845,2816],{"class":145},[139,41847,33126],{"class":2111},[139,41849,150],{"class":149},[139,41851,421],{"class":153},[139,41853,2816],{"class":145},[139,41855,33135],{"class":2111},[139,41857,150],{"class":149},[139,41859,410],{"class":153},[139,41861,40290],{"class":145},[139,41863,41864],{"class":141,"line":3987},[139,41865,40295],{"class":145},[139,41867,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896,41898,41900],{"class":141,"line":4014},[139,41869,40257],{"class":145},[139,41871,33108],{"class":2111},[139,41873,150],{"class":149},[139,41875,34317],{"class":153},[139,41877,2816],{"class":145},[139,41879,33117],{"class":2111},[139,41881,150],{"class":149},[139,41883,34317],{"class":153},[139,41885,2816],{"class":145},[139,41887,33126],{"class":2111},[139,41889,150],{"class":149},[139,41891,421],{"class":153},[139,41893,2816],{"class":145},[139,41895,33135],{"class":2111},[139,41897,150],{"class":149},[139,41899,410],{"class":153},[139,41901,40290],{"class":145},[139,41903,41904],{"class":141,"line":4019},[139,41905,40295],{"class":145},[139,41907,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932],{"class":141,"line":4036},[139,41909,40340],{"class":145},[139,41911,33126],{"class":2111},[139,41913,150],{"class":149},[139,41915,416],{"class":153},[139,41917,2816],{"class":145},[139,41919,33181],{"class":2111},[139,41921,150],{"class":149},[139,41923,416],{"class":153},[139,41925,2816],{"class":145},[139,41927,33135],{"class":2111},[139,41929,150],{"class":149},[139,41931,2634],{"class":153},[139,41933,164],{"class":145},[139,41935,41936],{"class":141,"line":4041},[139,41937,40369],{"class":145},[139,41939,41940],{"class":141,"line":4046},[139,41941,40502],{"class":2512},[139,41943,41944,41946,41948,41950],{"class":141,"line":4051},[139,41945,33097],{"class":153},[139,41947,40509],{"class":145},[139,41949,150],{"class":149},[139,41951,40252],{"class":145},[139,41953,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986],{"class":141,"line":4065},[139,41955,40257],{"class":145},[139,41957,33108],{"class":2111},[139,41959,150],{"class":149},[139,41961,34317],{"class":153},[139,41963,2816],{"class":145},[139,41965,33117],{"class":2111},[139,41967,150],{"class":149},[139,41969,37113],{"class":153},[139,41971,2816],{"class":145},[139,41973,33126],{"class":2111},[139,41975,150],{"class":149},[139,41977,421],{"class":153},[139,41979,2816],{"class":145},[139,41981,33135],{"class":2111},[139,41983,150],{"class":149},[139,41985,410],{"class":153},[139,41987,40290],{"class":145},[139,41989,41990],{"class":141,"line":4070},[139,41991,40295],{"class":145},[139,41993,41994,41996,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026],{"class":141,"line":4860},[139,41995,40257],{"class":145},[139,41997,33108],{"class":2111},[139,41999,150],{"class":149},[139,42001,37113],{"class":153},[139,42003,2816],{"class":145},[139,42005,33117],{"class":2111},[139,42007,150],{"class":149},[139,42009,37113],{"class":153},[139,42011,2816],{"class":145},[139,42013,33126],{"class":2111},[139,42015,150],{"class":149},[139,42017,421],{"class":153},[139,42019,2816],{"class":145},[139,42021,33135],{"class":2111},[139,42023,150],{"class":149},[139,42025,410],{"class":153},[139,42027,40290],{"class":145},[139,42029,42030],{"class":141,"line":4874},[139,42031,40295],{"class":145},[139,42033,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066],{"class":141,"line":4882},[139,42035,40257],{"class":145},[139,42037,33108],{"class":2111},[139,42039,150],{"class":149},[139,42041,37113],{"class":153},[139,42043,2816],{"class":145},[139,42045,33117],{"class":2111},[139,42047,150],{"class":149},[139,42049,37113],{"class":153},[139,42051,2816],{"class":145},[139,42053,33126],{"class":2111},[139,42055,150],{"class":149},[139,42057,421],{"class":153},[139,42059,2816],{"class":145},[139,42061,33135],{"class":2111},[139,42063,150],{"class":149},[139,42065,410],{"class":153},[139,42067,40290],{"class":145},[139,42069,42070],{"class":141,"line":4887},[139,42071,40295],{"class":145},[139,42073,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098],{"class":141,"line":4893},[139,42075,40340],{"class":145},[139,42077,33126],{"class":2111},[139,42079,150],{"class":149},[139,42081,416],{"class":153},[139,42083,2816],{"class":145},[139,42085,33181],{"class":2111},[139,42087,150],{"class":149},[139,42089,416],{"class":153},[139,42091,2816],{"class":145},[139,42093,33135],{"class":2111},[139,42095,150],{"class":149},[139,42097,2634],{"class":153},[139,42099,164],{"class":145},[139,42101,42102],{"class":141,"line":4899},[139,42103,40369],{"class":145},[139,42105,42106],{"class":141,"line":4904},[139,42107,40670],{"class":2512},[139,42109,42110,42112,42114,42116],{"class":141,"line":10222},[139,42111,33097],{"class":153},[139,42113,40677],{"class":145},[139,42115,150],{"class":149},[139,42117,40252],{"class":145},[139,42119,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152],{"class":141,"line":10246},[139,42121,40257],{"class":145},[139,42123,33108],{"class":2111},[139,42125,150],{"class":149},[139,42127,37113],{"class":153},[139,42129,2816],{"class":145},[139,42131,33117],{"class":2111},[139,42133,150],{"class":149},[139,42135,40700],{"class":153},[139,42137,2816],{"class":145},[139,42139,33126],{"class":2111},[139,42141,150],{"class":149},[139,42143,421],{"class":153},[139,42145,2816],{"class":145},[139,42147,33135],{"class":2111},[139,42149,150],{"class":149},[139,42151,410],{"class":153},[139,42153,40290],{"class":145},[139,42155,42156],{"class":141,"line":10251},[139,42157,40295],{"class":145},[139,42159,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192],{"class":141,"line":10257},[139,42161,40257],{"class":145},[139,42163,33108],{"class":2111},[139,42165,150],{"class":149},[139,42167,40700],{"class":153},[139,42169,2816],{"class":145},[139,42171,33117],{"class":2111},[139,42173,150],{"class":149},[139,42175,40700],{"class":153},[139,42177,2816],{"class":145},[139,42179,33126],{"class":2111},[139,42181,150],{"class":149},[139,42183,421],{"class":153},[139,42185,2816],{"class":145},[139,42187,33135],{"class":2111},[139,42189,150],{"class":149},[139,42191,410],{"class":153},[139,42193,40290],{"class":145},[139,42195,42196],{"class":141,"line":10284},[139,42197,40295],{"class":145},[139,42199,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232],{"class":141,"line":10289},[139,42201,40257],{"class":145},[139,42203,33108],{"class":2111},[139,42205,150],{"class":149},[139,42207,40700],{"class":153},[139,42209,2816],{"class":145},[139,42211,33117],{"class":2111},[139,42213,150],{"class":149},[139,42215,40700],{"class":153},[139,42217,2816],{"class":145},[139,42219,33126],{"class":2111},[139,42221,150],{"class":149},[139,42223,421],{"class":153},[139,42225,2816],{"class":145},[139,42227,33135],{"class":2111},[139,42229,150],{"class":149},[139,42231,410],{"class":153},[139,42233,40290],{"class":145},[139,42235,42236],{"class":141,"line":10295},[139,42237,40295],{"class":145},[139,42239,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264],{"class":141,"line":10307},[139,42241,40340],{"class":145},[139,42243,33126],{"class":2111},[139,42245,150],{"class":149},[139,42247,416],{"class":153},[139,42249,2816],{"class":145},[139,42251,33181],{"class":2111},[139,42253,150],{"class":149},[139,42255,416],{"class":153},[139,42257,2816],{"class":145},[139,42259,33135],{"class":2111},[139,42261,150],{"class":149},[139,42263,2634],{"class":153},[139,42265,164],{"class":145},[139,42267,42268],{"class":141,"line":10319},[139,42269,40369],{"class":145},[139,42271,42272],{"class":141,"line":10331},[139,42273,40839],{"class":2512},[139,42275,42276,42278,42280,42282],{"class":141,"line":11990},[139,42277,33097],{"class":153},[139,42279,40846],{"class":145},[139,42281,150],{"class":149},[139,42283,40252],{"class":145},[139,42285,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318],{"class":141,"line":12015},[139,42287,40257],{"class":145},[139,42289,33108],{"class":2111},[139,42291,150],{"class":149},[139,42293,40700],{"class":153},[139,42295,2816],{"class":145},[139,42297,33117],{"class":2111},[139,42299,150],{"class":149},[139,42301,40700],{"class":153},[139,42303,2816],{"class":145},[139,42305,33126],{"class":2111},[139,42307,150],{"class":149},[139,42309,421],{"class":153},[139,42311,2816],{"class":145},[139,42313,33135],{"class":2111},[139,42315,150],{"class":149},[139,42317,410],{"class":153},[139,42319,40290],{"class":145},[139,42321,42322],{"class":141,"line":12038},[139,42323,40295],{"class":145},[139,42325,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356,42358],{"class":141,"line":12062},[139,42327,40257],{"class":145},[139,42329,33108],{"class":2111},[139,42331,150],{"class":149},[139,42333,40700],{"class":153},[139,42335,2816],{"class":145},[139,42337,33117],{"class":2111},[139,42339,150],{"class":149},[139,42341,40700],{"class":153},[139,42343,2816],{"class":145},[139,42345,33126],{"class":2111},[139,42347,150],{"class":149},[139,42349,421],{"class":153},[139,42351,2816],{"class":145},[139,42353,33135],{"class":2111},[139,42355,150],{"class":149},[139,42357,410],{"class":153},[139,42359,40290],{"class":145},[139,42361,42362],{"class":141,"line":12067},[139,42363,40295],{"class":145},[139,42365,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398],{"class":141,"line":12072},[139,42367,40257],{"class":145},[139,42369,33108],{"class":2111},[139,42371,150],{"class":149},[139,42373,40700],{"class":153},[139,42375,2816],{"class":145},[139,42377,33117],{"class":2111},[139,42379,150],{"class":149},[139,42381,40700],{"class":153},[139,42383,2816],{"class":145},[139,42385,33126],{"class":2111},[139,42387,150],{"class":149},[139,42389,421],{"class":153},[139,42391,2816],{"class":145},[139,42393,33135],{"class":2111},[139,42395,150],{"class":149},[139,42397,410],{"class":153},[139,42399,40290],{"class":145},[139,42401,42402],{"class":141,"line":12077},[139,42403,40295],{"class":145},[139,42405,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430],{"class":141,"line":12086},[139,42407,40340],{"class":145},[139,42409,33126],{"class":2111},[139,42411,150],{"class":149},[139,42413,416],{"class":153},[139,42415,2816],{"class":145},[139,42417,33181],{"class":2111},[139,42419,150],{"class":149},[139,42421,416],{"class":153},[139,42423,2816],{"class":145},[139,42425,33135],{"class":2111},[139,42427,150],{"class":149},[139,42429,2634],{"class":153},[139,42431,164],{"class":145},[139,42433,42434],{"class":141,"line":12091},[139,42435,40369],{"class":145},[139,42437,42438],{"class":141,"line":12097},[139,42439,41007],{"class":2512},[139,42441,42442,42444,42446,42448],{"class":141,"line":12118},[139,42443,33097],{"class":153},[139,42445,41014],{"class":145},[139,42447,150],{"class":149},[139,42449,40252],{"class":145},[139,42451,42452],{"class":141,"line":12124},[139,42453,41023],{"class":2512},[139,42455,42456],{"class":141,"line":12138},[139,42457,41028],{"class":2512},[139,42459,42460],{"class":141,"line":12144},[139,42461,41033],{"class":145},[139,42463,42464,42466,42468,42470,42472,42474,42476,42478,42480],{"class":141,"line":12171},[139,42465,41038],{"class":145},[139,42467,2807],{"class":153},[139,42469,2892],{"class":149},[139,42471,2807],{"class":153},[139,42473,2892],{"class":149},[139,42475,40700],{"class":153},[139,42477,2816],{"class":145},[139,42479,37113],{"class":153},[139,42481,40290],{"class":145},[139,42483,42484],{"class":141,"line":12180},[139,42485,40295],{"class":145},[139,42487,42488,42490,42492,42494,42496],{"class":141,"line":12186},[139,42489,41038],{"class":145},[139,42491,37113],{"class":153},[139,42493,2816],{"class":145},[139,42495,34317],{"class":153},[139,42497,40290],{"class":145},[139,42499,42500],{"class":141,"line":12194},[139,42501,40295],{"class":145},[139,42503,42504,42506,42508,42510,42512],{"class":141,"line":12199},[139,42505,41038],{"class":145},[139,42507,34317],{"class":153},[139,42509,2816],{"class":145},[139,42511,536],{"class":153},[139,42513,164],{"class":145},[139,42515,42516],{"class":141,"line":18871},[139,42517,40369],{"class":145},[139,42519,42520],{"class":141,"line":18877},[139,42521,843],{"emptyLinePlaceholder":842},[139,42523,42524],{"class":141,"line":18900},[139,42525,41099],{"class":2512},[139,42527,42528],{"class":141,"line":18906},[139,42529,41104],{"class":2512},[139,42531,42532,42534,42536,42538,42540],{"class":141,"line":18929},[139,42533,5684],{"class":149},[139,42535,41111],{"class":145},[139,42537,1976],{"class":149},[139,42539,41116],{"class":153},[139,42541,41119],{"class":145},[139,42543,42544],{"class":141,"line":18943},[139,42545,41124],{"class":2512},[139,42547,42548,42550,42552],{"class":141,"line":18963},[139,42549,6920],{"class":149},[139,42551,41131],{"class":153},[139,42553,41134],{"class":145},[139,42555,42556],{"class":141,"line":18969},[139,42557,41139],{"class":2512},[139,42559,42560,42562,42564,42566,42568],{"class":141,"line":18980},[139,42561,41144],{"class":145},[139,42563,41147],{"class":2111},[139,42565,150],{"class":149},[139,42567,41152],{"class":160},[139,42569,164],{"class":145},[139,42571,42572],{"class":141,"line":19003},[139,42573,41159],{"class":2512},[139,42575,42576,42578,42580,42582,42584,42586],{"class":141,"line":19025},[139,42577,41164],{"class":149},[139,42579,41167],{"class":145},[139,42581,41170],{"class":149},[139,42583,2077],{"class":149},[139,42585,41175],{"class":153},[139,42587,246],{"class":145},[139,42589,42590],{"class":141,"line":19030},[139,42591,41182],{"class":2512},[139,42593,42594,42596,42598],{"class":141,"line":19036},[139,42595,41187],{"class":145},[139,42597,2634],{"class":153},[139,42599,164],{"class":145},[139,42601,42602],{"class":141,"line":19050},[139,42603,41196],{"class":2512},[139,42605,42606,42608,42610],{"class":141,"line":19063},[139,42607,41201],{"class":149},[139,42609,41131],{"class":153},[139,42611,41206],{"class":145},[139,42613,42614],{"class":141,"line":19068},[139,42615,41211],{"class":2512},[139,42617,42618],{"class":141,"line":19082},[139,42619,41216],{"class":2512},[139,42621,42622,42624,42626,42628,42630],{"class":141,"line":19087},[139,42623,41221],{"class":145},[139,42625,2634],{"class":153},[139,42627,2816],{"class":145},[139,42629,41228],{"class":153},[139,42631,164],{"class":145},[139,42633,42634],{"class":141,"line":19093},[139,42635,41235],{"class":2512},[139,42637,42638,42640,42642,42644,42646,42648],{"class":141,"line":19098},[139,42639,41164],{"class":149},[139,42641,41167],{"class":145},[139,42643,41170],{"class":149},[139,42645,2077],{"class":149},[139,42647,41175],{"class":153},[139,42649,246],{"class":145},[139,42651,42652,42654,42656],{"class":141,"line":19112},[139,42653,41187],{"class":145},[139,42655,2634],{"class":153},[139,42657,164],{"class":145},[139,42659,42660],{"class":141,"line":19117},[139,42661,843],{"emptyLinePlaceholder":842},[139,42663,42664],{"class":141,"line":19122},[139,42665,37408],{"class":2512},[139,42667,42668,42670,42672],{"class":141,"line":19136},[139,42669,33053],{"class":149},[139,42671,33345],{"class":781},[139,42673,33348],{"class":145},[139,42675,42676,42678,42680,42682],{"class":141,"line":19148},[139,42677,33353],{"class":145},[139,42679,150],{"class":149},[139,42681,33075],{"class":153},[139,42683,41284],{"class":145},[139,42685,42686,42688,42690,42692],{"class":141,"line":19153},[139,42687,33353],{"class":145},[139,42689,150],{"class":149},[139,42691,33075],{"class":153},[139,42693,41295],{"class":145},[139,42695,42696,42698,42700,42702],{"class":141,"line":19166},[139,42697,33353],{"class":145},[139,42699,150],{"class":149},[139,42701,33075],{"class":153},[139,42703,41306],{"class":145},[139,42705,42706,42708,42710,42712],{"class":141,"line":19171},[139,42707,33353],{"class":145},[139,42709,150],{"class":149},[139,42711,33075],{"class":153},[139,42713,41317],{"class":145},[139,42715,42716,42718,42720,42722],{"class":141,"line":19176},[139,42717,33353],{"class":145},[139,42719,150],{"class":149},[139,42721,33075],{"class":153},[139,42723,41328],{"class":145},[139,42725,42726,42728,42730,42732],{"class":141,"line":19181},[139,42727,33353],{"class":145},[139,42729,150],{"class":149},[139,42731,33075],{"class":153},[139,42733,41339],{"class":145},[139,42735,42736,42738],{"class":141,"line":19194},[139,42737,2085],{"class":149},[139,42739,33461],{"class":145},[139,42741,42742],{"class":141,"line":19199},[139,42743,843],{"emptyLinePlaceholder":842},[139,42745,42746],{"class":141,"line":34880},[139,42747,41354],{"class":2512},[139,42749,42750,42752,42754,42756,42758],{"class":141,"line":34886},[139,42751,1729],{"class":149},[139,42753,1732],{"class":153},[139,42755,5232],{"class":149},[139,42757,41365],{"class":160},[139,42759,246],{"class":145},[139,42761,42762,42764,42766,42768,42770,42772,42774,42776,42778],{"class":141,"line":34892},[139,42763,33488],{"class":145},[139,42765,150],{"class":149},[139,42767,32706],{"class":145},[139,42769,33495],{"class":160},[139,42771,3992],{"class":149},[139,42773,33500],{"class":145},[139,42775,656],{"class":149},[139,42777,32731],{"class":160},[139,42779,164],{"class":145},[139,42781,42782,42784],{"class":141,"line":34898},[139,42783,302],{"class":153},[139,42785,32740],{"class":145},[139,42787,42788,42790,42792],{"class":141,"line":34904},[139,42789,33540],{"class":145},[139,42791,150],{"class":149},[139,42793,41402],{"class":145},[139,42795,42796,42798,42800,42802,42804,42806,42808,42810],{"class":141,"line":34915},[139,42797,302],{"class":153},[139,42799,33552],{"class":145},[139,42801,410],{"class":153},[139,42803,2816],{"class":145},[139,42805,33750],{"class":153},[139,42807,2816],{"class":145},[139,42809,33750],{"class":153},[139,42811,33565],{"class":145},[1760,42813,42814],{"start":254},[1763,42815,42816],{},"测试代码",[130,42818,42820],{"className":132,"code":42819,"language":134,"meta":135,"style":135},"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",[50,42821,42822,42828,42838,42848,42852,42862,42873,42877,42881,42885,42893,42909,42919,42935,42945,42959,42963,42973,42983,42993,42999,43003,43007,43015,43019,43035,43043,43047,43051,43059,43067,43071,43075,43079,43083,43089,43093,43103,43111,43119,43123,43127,43131,43139,43143,43159,43163,43167,43171,43183,43187,43199,43203,43207,43219,43223,43233,43237,43241,43253,43257,43266,43270,43274,43282,43286,43294,43298,43302,43306,43310,43314,43330,43338,43342,43346,43394,43400,43404,43414,43422,43430,43434,43438,43442,43446,43454,43458,43474,43478,43486,43494],{"__ignoreMap":135},[139,42823,42824,42826],{"class":141,"line":142},[139,42825,1064],{"class":149},[139,42827,32651],{"class":145},[139,42829,42830,42832,42834,42836],{"class":141,"line":210},[139,42831,1064],{"class":149},[139,42833,33664],{"class":145},[139,42835,1035],{"class":149},[139,42837,33669],{"class":145},[139,42839,42840,42842,42844,42846],{"class":141,"line":254},[139,42841,1265],{"class":149},[139,42843,33647],{"class":145},[139,42845,1064],{"class":149},[139,42847,33652],{"class":145},[139,42849,42850],{"class":141,"line":262},[139,42851,36167],{"class":2512},[139,42853,42854,42856,42858,42860],{"class":141,"line":313},[139,42855,1265],{"class":149},[139,42857,33618],{"class":145},[139,42859,1064],{"class":149},[139,42861,33623],{"class":145},[139,42863,42864,42866,42868,42870],{"class":141,"line":462},[139,42865,1265],{"class":149},[139,42867,34162],{"class":145},[139,42869,1064],{"class":149},[139,42871,42872],{"class":153}," VGG16\n",[139,42874,42875],{"class":141,"line":474},[139,42876,843],{"emptyLinePlaceholder":842},[139,42878,42879],{"class":141,"line":484},[139,42880,843],{"emptyLinePlaceholder":842},[139,42882,42883],{"class":141,"line":989},[139,42884,36196],{"class":2512},[139,42886,42887,42889,42891],{"class":141,"line":994},[139,42888,778],{"class":149},[139,42890,36203],{"class":781},[139,42892,34200],{"class":145},[139,42894,42895,42897,42899,42901,42903,42905,42907],{"class":141,"line":999},[139,42896,36210],{"class":145},[139,42898,150],{"class":149},[139,42900,33704],{"class":145},[139,42902,33707],{"class":2111},[139,42904,150],{"class":149},[139,42906,33712],{"class":160},[139,42908,33715],{"class":145},[139,42910,42911,42913,42915,42917],{"class":141,"line":1006},[139,42912,36227],{"class":2111},[139,42914,150],{"class":149},[139,42916,2203],{"class":153},[139,42918,33715],{"class":145},[139,42920,42921,42923,42925,42927,42929,42931,42933],{"class":141,"line":1027},[139,42922,36238],{"class":2111},[139,42924,150],{"class":149},[139,42926,33742],{"class":145},[139,42928,33745],{"class":2111},[139,42930,150],{"class":149},[139,42932,33750],{"class":153},[139,42934,33753],{"class":145},[139,42936,42937,42939,42941,42943],{"class":141,"line":1040},[139,42938,36255],{"class":2111},[139,42940,150],{"class":149},[139,42942,33725],{"class":153},[139,42944,164],{"class":145},[139,42946,42947,42949,42951,42953,42955,42957],{"class":141,"line":2160},[139,42948,36266],{"class":145},[139,42950,150],{"class":149},[139,42952,33783],{"class":145},[139,42954,33786],{"class":2111},[139,42956,150],{"class":149},[139,42958,36277],{"class":145},[139,42960,42961],{"class":141,"line":2188},[139,42962,36282],{"class":2512},[139,42964,42965,42967,42969,42971],{"class":141,"line":3944},[139,42966,36287],{"class":2111},[139,42968,150],{"class":149},[139,42970,410],{"class":153},[139,42972,33715],{"class":145},[139,42974,42975,42977,42979,42981],{"class":141,"line":3963},[139,42976,36298],{"class":2111},[139,42978,150],{"class":149},[139,42980,33725],{"class":153},[139,42982,33715],{"class":145},[139,42984,42985,42987,42989,42991],{"class":141,"line":3968},[139,42986,36309],{"class":2111},[139,42988,150],{"class":149},[139,42990,2634],{"class":153},[139,42992,164],{"class":145},[139,42994,42995,42997],{"class":141,"line":3982},[139,42996,978],{"class":149},[139,42998,36322],{"class":145},[139,43000,43001],{"class":141,"line":3987},[139,43002,843],{"emptyLinePlaceholder":842},[139,43004,43005],{"class":141,"line":4014},[139,43006,36331],{"class":2512},[139,43008,43009,43011,43013],{"class":141,"line":4019},[139,43010,778],{"class":149},[139,43012,36338],{"class":781},[139,43014,36341],{"class":145},[139,43016,43017],{"class":141,"line":4036},[139,43018,36346],{"class":2512},[139,43020,43021,43023,43025,43027,43029,43031,43033],{"class":141,"line":4041},[139,43022,33488],{"class":145},[139,43024,150],{"class":149},[139,43026,33495],{"class":160},[139,43028,3992],{"class":149},[139,43030,33500],{"class":145},[139,43032,656],{"class":149},[139,43034,36363],{"class":160},[139,43036,43037,43039,43041],{"class":141,"line":4046},[139,43038,33540],{"class":145},[139,43040,150],{"class":149},[139,43042,34536],{"class":145},[139,43044,43045],{"class":141,"line":4051},[139,43046,843],{"emptyLinePlaceholder":842},[139,43048,43049],{"class":141,"line":4065},[139,43050,36380],{"class":2512},[139,43052,43053,43055,43057],{"class":141,"line":4070},[139,43054,36385],{"class":145},[139,43056,150],{"class":149},[139,43058,34589],{"class":153},[139,43060,43061,43063,43065],{"class":141,"line":4860},[139,43062,36394],{"class":145},[139,43064,150],{"class":149},[139,43066,5367],{"class":153},[139,43068,43069],{"class":141,"line":4874},[139,43070,843],{"emptyLinePlaceholder":842},[139,43072,43073],{"class":141,"line":4882},[139,43074,36407],{"class":2512},[139,43076,43077],{"class":141,"line":4887},[139,43078,36412],{"class":2512},[139,43080,43081],{"class":141,"line":4893},[139,43082,36417],{"class":2512},[139,43084,43085,43087],{"class":141,"line":4899},[139,43086,2097],{"class":149},[139,43088,35131],{"class":145},[139,43090,43091],{"class":141,"line":4904},[139,43092,36428],{"class":2512},[139,43094,43095,43097,43099,43101],{"class":141,"line":10222},[139,43096,5684],{"class":149},[139,43098,36435],{"class":145},[139,43100,1976],{"class":149},[139,43102,36440],{"class":145},[139,43104,43105,43107,43109],{"class":141,"line":10246},[139,43106,36445],{"class":145},[139,43108,150],{"class":149},[139,43110,36450],{"class":145},[139,43112,43113,43115,43117],{"class":141,"line":10251},[139,43114,36455],{"class":145},[139,43116,150],{"class":149},[139,43118,36460],{"class":145},[139,43120,43121],{"class":141,"line":10257},[139,43122,36465],{"class":2512},[139,43124,43125],{"class":141,"line":10284},[139,43126,35122],{"class":145},[139,43128,43129],{"class":141,"line":10289},[139,43130,36474],{"class":2512},[139,43132,43133,43135,43137],{"class":141,"line":10295},[139,43134,34907],{"class":145},[139,43136,150],{"class":149},[139,43138,36483],{"class":145},[139,43140,43141],{"class":141,"line":10307},[139,43142,36488],{"class":2512},[139,43144,43145,43147,43149,43151,43153,43155,43157],{"class":141,"line":10319},[139,43146,34924],{"class":145},[139,43148,150],{"class":149},[139,43150,34929],{"class":145},[139,43152,34932],{"class":2111},[139,43154,150],{"class":149},[139,43156,410],{"class":153},[139,43158,164],{"class":145},[139,43160,43161],{"class":141,"line":10331},[139,43162,36509],{"class":2512},[139,43164,43165],{"class":141,"line":11990},[139,43166,36514],{"class":2512},[139,43168,43169],{"class":141,"line":12015},[139,43170,36519],{"class":2512},[139,43172,43173,43175,43177,43179,43181],{"class":141,"line":12038},[139,43174,36524],{"class":145},[139,43176,11751],{"class":149},[139,43178,35034],{"class":145},[139,43180,5232],{"class":149},[139,43182,36533],{"class":145},[139,43184,43185],{"class":141,"line":12062},[139,43186,36538],{"class":2512},[139,43188,43189,43191,43193,43195,43197],{"class":141,"line":12067},[139,43190,36543],{"class":145},[139,43192,11751],{"class":149},[139,43194,36548],{"class":145},[139,43196,2634],{"class":153},[139,43198,164],{"class":145},[139,43200,43201],{"class":141,"line":12072},[139,43202,843],{"emptyLinePlaceholder":842},[139,43204,43205],{"class":141,"line":12077},[139,43206,36561],{"class":2512},[139,43208,43209,43211,43213,43215,43217],{"class":141,"line":12086},[139,43210,36566],{"class":145},[139,43212,150],{"class":149},[139,43214,36571],{"class":145},[139,43216,3019],{"class":149},[139,43218,36576],{"class":145},[139,43220,43221],{"class":141,"line":12091},[139,43222,36581],{"class":2512},[139,43224,43225,43227,43229,43231],{"class":141,"line":12097},[139,43226,34698],{"class":153},[139,43228,157],{"class":145},[139,43230,36590],{"class":160},[139,43232,36593],{"class":145},[139,43234,43235],{"class":141,"line":12118},[139,43236,843],{"emptyLinePlaceholder":842},[139,43238,43239],{"class":141,"line":12124},[139,43240,36602],{"class":2512},[139,43242,43243,43245,43247,43249,43251],{"class":141,"line":12138},[139,43244,1729],{"class":149},[139,43246,1732],{"class":153},[139,43248,5232],{"class":149},[139,43250,33476],{"class":160},[139,43252,246],{"class":145},[139,43254,43255],{"class":141,"line":12144},[139,43256,36619],{"class":2512},[139,43258,43259,43261,43263],{"class":141,"line":12171},[139,43260,33540],{"class":145},[139,43262,150],{"class":149},[139,43264,43265],{"class":145},"VGG16()\n",[139,43267,43268],{"class":141,"line":12180},[139,43269,36632],{"class":2512},[139,43271,43272],{"class":141,"line":12186},[139,43273,36637],{"class":2512},[139,43275,43276,43278,43280],{"class":141,"line":12194},[139,43277,36642],{"class":145},[139,43279,36645],{"class":160},[139,43281,207],{"class":145},[139,43283,43284],{"class":141,"line":12199},[139,43285,36652],{"class":2512},[139,43287,43288,43290,43292],{"class":141,"line":18871},[139,43289,36266],{"class":145},[139,43291,150],{"class":149},[139,43293,36661],{"class":145},[139,43295,43296],{"class":141,"line":18877},[139,43297,36666],{"class":2512},[139,43299,43300],{"class":141,"line":18900},[139,43301,36671],{"class":145},[139,43303,43304],{"class":141,"line":18906},[139,43305,843],{"emptyLinePlaceholder":842},[139,43307,43308],{"class":141,"line":18929},[139,43309,36680],{"class":2512},[139,43311,43312],{"class":141,"line":18943},[139,43313,36685],{"class":2512},[139,43315,43316,43318,43320,43322,43324,43326,43328],{"class":141,"line":18963},[139,43317,33488],{"class":145},[139,43319,150],{"class":149},[139,43321,33495],{"class":160},[139,43323,3992],{"class":149},[139,43325,33500],{"class":145},[139,43327,656],{"class":149},[139,43329,36363],{"class":160},[139,43331,43332,43334,43336],{"class":141,"line":18969},[139,43333,33540],{"class":145},[139,43335,150],{"class":149},[139,43337,34536],{"class":145},[139,43339,43340],{"class":141,"line":18980},[139,43341,36714],{"class":2512},[139,43343,43344],{"class":141,"line":19003},[139,43345,36719],{"class":2512},[139,43347,43348,43350,43352,43354,43356,43358,43360,43362,43364,43366,43368,43370,43372,43374,43376,43378,43380,43382,43384,43386,43388,43390,43392],{"class":141,"line":19025},[139,43349,36724],{"class":145},[139,43351,150],{"class":149},[139,43353,3325],{"class":145},[139,43355,36731],{"class":160},[139,43357,2816],{"class":145},[139,43359,36736],{"class":160},[139,43361,2816],{"class":145},[139,43363,36741],{"class":160},[139,43365,2816],{"class":145},[139,43367,36746],{"class":160},[139,43369,2816],{"class":145},[139,43371,36751],{"class":160},[139,43373,2816],{"class":145},[139,43375,36756],{"class":160},[139,43377,2816],{"class":145},[139,43379,36761],{"class":160},[139,43381,2816],{"class":145},[139,43383,36766],{"class":160},[139,43385,2816],{"class":145},[139,43387,36771],{"class":160},[139,43389,2816],{"class":145},[139,43391,36776],{"class":160},[139,43393,424],{"class":145},[139,43395,43396,43398],{"class":141,"line":19030},[139,43397,2097],{"class":149},[139,43399,35131],{"class":145},[139,43401,43402],{"class":141,"line":19036},[139,43403,36789],{"class":2512},[139,43405,43406,43408,43410,43412],{"class":141,"line":19050},[139,43407,5684],{"class":149},[139,43409,36796],{"class":145},[139,43411,1976],{"class":149},[139,43413,36440],{"class":145},[139,43415,43416,43418,43420],{"class":141,"line":19063},[139,43417,34857],{"class":145},[139,43419,150],{"class":149},[139,43421,34862],{"class":145},[139,43423,43424,43426,43428],{"class":141,"line":19068},[139,43425,34872],{"class":145},[139,43427,150],{"class":149},[139,43429,34877],{"class":145},[139,43431,43432],{"class":141,"line":19082},[139,43433,843],{"emptyLinePlaceholder":842},[139,43435,43436],{"class":141,"line":19087},[139,43437,36825],{"class":2512},[139,43439,43440],{"class":141,"line":19093},[139,43441,35122],{"class":145},[139,43443,43444],{"class":141,"line":19098},[139,43445,36834],{"class":2512},[139,43447,43448,43450,43452],{"class":141,"line":19112},[139,43449,34907],{"class":145},[139,43451,150],{"class":149},[139,43453,34912],{"class":145},[139,43455,43456],{"class":141,"line":19117},[139,43457,36847],{"class":2512},[139,43459,43460,43462,43464,43466,43468,43470,43472],{"class":141,"line":19122},[139,43461,34924],{"class":145},[139,43463,150],{"class":149},[139,43465,34929],{"class":145},[139,43467,34932],{"class":2111},[139,43469,150],{"class":149},[139,43471,410],{"class":153},[139,43473,164],{"class":145},[139,43475,43476],{"class":141,"line":19136},[139,43477,36868],{"class":2512},[139,43479,43480,43482,43484],{"class":141,"line":19148},[139,43481,36873],{"class":145},[139,43483,150],{"class":149},[139,43485,36878],{"class":145},[139,43487,43488,43490,43492],{"class":141,"line":19153},[139,43489,36883],{"class":145},[139,43491,150],{"class":149},[139,43493,36888],{"class":145},[139,43495,43496,43498,43500,43502,43504,43506,43508,43510],{"class":141,"line":19166},[139,43497,36893],{"class":153},[139,43499,157],{"class":145},[139,43501,36898],{"class":160},[139,43503,36901],{"class":145},[139,43505,36904],{"class":160},[139,43507,2816],{"class":145},[139,43509,36909],{"class":160},[139,43511,36912],{"class":145},[1217,43513,43515],{"id":43514},"_23googlenet","2.3.GoogLeNet",[24265,43517,43519],{"id":43518},"_231原理","2.3.1.原理",[1760,43521,43522],{},[1763,43523,43524],{},"网络结构",[19,43526,43527],{},[3760,43528],{"alt":135,"src":43529},"\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,43531,43532],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43534,43535],{},[3760,43536],{"alt":135,"src":43537},"\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,43539,43540],{},[3760,43541],{"alt":135,"src":43542},"\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,43544,43545],{},[3760,43546],{"alt":135,"src":43547},"\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",[1760,43549,43550],{"start":210},[1763,43551,43552],{},"1x1卷积的优点",[19,43554,43555],{},[3760,43556],{"alt":135,"src":43557},"\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",[1760,43559,43560],{"start":254},[1763,43561,43562],{},"全局平均池化层优点",[19,43564,43565],{},[3760,43566],{"alt":135,"src":43567},"\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,43569,43570],{},[3760,43571],{"alt":135,"src":43572},"\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",[1760,43574,43575],{"start":262},[1763,43576,43577],{},"参数详细描述",[19,43579,43580],{},[3760,43581],{"alt":135,"src":43582},"\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,43584,43585],{},[3760,43586],{"alt":135,"src":43587},"\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,43589,43590],{},[3760,43591],{"alt":135,"src":43592},"\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,43594,43595],{},[3760,43596],{"alt":135,"src":43597},"\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,43599,43600],{},[3760,43601],{"alt":135,"src":43602},"\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,43604,43605],{},[3760,43606],{"alt":135,"src":43607},"\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,43609,43610],{},[3760,43611],{"alt":135,"src":43612},"\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,43614,43615],{},[3760,43616],{"alt":135,"src":43617},"\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,43619,43620],{},[3760,43621],{"alt":135,"src":43622},"\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,43624,43625],{},[3760,43626],{"alt":135,"src":43627},"\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,43629,43630],{},[3760,43631],{"alt":135,"src":43632},"\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,43634,43635],{},[3760,43636],{"alt":135,"src":43637},"\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,43639,43640],{},[3760,43641],{"alt":135,"src":43642},"\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,43644,43645],{},[3760,43646],{"alt":135,"src":43647},"\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,43649,43650],{},[3760,43651],{"alt":135,"src":43652},"\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,43654,43655],{},[3760,43656],{"alt":135,"src":43657},"\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,43659,43660],{},[3760,43661],{"alt":135,"src":43662},"\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,43664,43665],{},[3760,43666],{"alt":135,"src":43667},"\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,43669,43670],{},[3760,43671],{"alt":135,"src":43672},"\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,43674,43675],{},[3760,43676],{"alt":135,"src":43677},"\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,43679,43680],{},[3760,43681],{"alt":135,"src":43682},"\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",[24265,43684,43686],{"id":43685},"_232代码实现","2.3.2.代码实现",[1760,43688,43689],{},[1763,43690,32965],{},[19,43692,43693],{},"根据原理一步一步搭建即可",[130,43695,43697],{"className":132,"code":43696,"language":134,"meta":135,"style":135},"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",[50,43698,43699,43705,43715,43725,43729,43746,43755,43770,43780,43785,43818,43823,43860,43907,43912,43948,43995,44000,44005,44040,44072,44076,44084,44100,44124,44149,44170,44175,44190,44194,44198,44203,44220,44225,44234,44249,44260,44304,44308,44336,44340,44351,44379,44383,44420,44424,44452,44456,44467,44503,44535,44563,44567,44578,44612,44644,44676,44709,44743,44771,44775,44786,44819,44851,44865,44869,44882,44886,44891,44903,44911,44933,44938,44943,44948,44953,44958,44963,44977,44985,44994,45007,45022,45031,45035,45043,45054,45065,45076,45087,45098,45104,45108,45113,45125,45145,45154],{"__ignoreMap":135},[139,43700,43701,43703],{"class":141,"line":142},[139,43702,1064],{"class":149},[139,43704,32651],{"class":145},[139,43706,43707,43709,43711,43713],{"class":141,"line":210},[139,43708,1265],{"class":149},[139,43710,32993],{"class":145},[139,43712,1064],{"class":149},[139,43714,32998],{"class":145},[139,43716,43717,43719,43721,43723],{"class":141,"line":254},[139,43718,1265],{"class":149},[139,43720,33010],{"class":145},[139,43722,1064],{"class":149},[139,43724,33015],{"class":145},[139,43726,43727],{"class":141,"line":262},[139,43728,843],{"emptyLinePlaceholder":842},[139,43730,43731,43733,43736,43738,43740,43742,43744],{"class":141,"line":313},[139,43732,915],{"class":149},[139,43734,43735],{"class":781}," Inception",[139,43737,157],{"class":145},[139,43739,33031],{"class":781},[139,43741,2993],{"class":145},[139,43743,33036],{"class":781},[139,43745,558],{"class":145},[139,43747,43748,43750,43752],{"class":141,"line":462},[139,43749,33053],{"class":149},[139,43751,33056],{"class":153},[139,43753,43754],{"class":145},"(self,in_channels,c1,c2,c3,c4):\n",[139,43756,43757,43759,43762,43764,43766,43768],{"class":141,"line":474},[139,43758,33069],{"class":153},[139,43760,43761],{"class":145},"(Inception,",[139,43763,33075],{"class":153},[139,43765,33078],{"class":145},[139,43767,33081],{"class":153},[139,43769,4262],{"class":145},[139,43771,43772,43774,43776,43778],{"class":141,"line":484},[139,43773,33097],{"class":153},[139,43775,37014],{"class":145},[139,43777,150],{"class":149},[139,43779,37019],{"class":145},[139,43781,43782],{"class":141,"line":989},[139,43783,43784],{"class":2512},"        # 路线1：定义1*1卷积\n",[139,43786,43787,43789,43792,43794,43796,43798,43800,43803,43805,43807,43810,43812,43814,43816],{"class":141,"line":994},[139,43788,33097],{"class":153},[139,43790,43791],{"class":145},".p1_1",[139,43793,150],{"class":149},[139,43795,33105],{"class":145},[139,43797,33108],{"class":2111},[139,43799,150],{"class":149},[139,43801,43802],{"class":145},"in_channels,",[139,43804,33117],{"class":2111},[139,43806,150],{"class":149},[139,43808,43809],{"class":145},"c1,",[139,43811,33126],{"class":2111},[139,43813,150],{"class":149},[139,43815,410],{"class":153},[139,43817,164],{"class":145},[139,43819,43820],{"class":141,"line":999},[139,43821,43822],{"class":2512},"        # 路线2：定义1*1卷积和3*3\n",[139,43824,43825,43827,43830,43832,43834,43836,43838,43840,43842,43844,43847,43849,43852,43854,43856,43858],{"class":141,"line":1006},[139,43826,33097],{"class":153},[139,43828,43829],{"class":145},".p2_1",[139,43831,150],{"class":149},[139,43833,33105],{"class":145},[139,43835,33108],{"class":2111},[139,43837,150],{"class":149},[139,43839,43802],{"class":145},[139,43841,33117],{"class":2111},[139,43843,150],{"class":149},[139,43845,43846],{"class":145},"c2[",[139,43848,2634],{"class":153},[139,43850,43851],{"class":145},"],",[139,43853,33126],{"class":2111},[139,43855,150],{"class":149},[139,43857,410],{"class":153},[139,43859,164],{"class":145},[139,43861,43862,43864,43867,43869,43871,43873,43875,43877,43879,43881,43883,43885,43887,43889,43891,43893,43895,43897,43899,43901,43903,43905],{"class":141,"line":1027},[139,43863,33097],{"class":153},[139,43865,43866],{"class":145},".p2_2",[139,43868,150],{"class":149},[139,43870,33105],{"class":145},[139,43872,33108],{"class":2111},[139,43874,150],{"class":149},[139,43876,43846],{"class":145},[139,43878,2634],{"class":153},[139,43880,43851],{"class":145},[139,43882,33117],{"class":2111},[139,43884,150],{"class":149},[139,43886,43846],{"class":145},[139,43888,410],{"class":153},[139,43890,43851],{"class":145},[139,43892,33126],{"class":2111},[139,43894,150],{"class":149},[139,43896,421],{"class":153},[139,43898,2816],{"class":145},[139,43900,33135],{"class":2111},[139,43902,150],{"class":149},[139,43904,410],{"class":153},[139,43906,164],{"class":145},[139,43908,43909],{"class":141,"line":1040},[139,43910,43911],{"class":2512},"        # 路线3：定义1*1卷积和5*5\n",[139,43913,43914,43916,43919,43921,43923,43925,43927,43929,43931,43933,43936,43938,43940,43942,43944,43946],{"class":141,"line":2160},[139,43915,33097],{"class":153},[139,43917,43918],{"class":145},".p3_1",[139,43920,150],{"class":149},[139,43922,33105],{"class":145},[139,43924,33108],{"class":2111},[139,43926,150],{"class":149},[139,43928,43802],{"class":145},[139,43930,33117],{"class":2111},[139,43932,150],{"class":149},[139,43934,43935],{"class":145},"c3[",[139,43937,2634],{"class":153},[139,43939,43851],{"class":145},[139,43941,33126],{"class":2111},[139,43943,150],{"class":149},[139,43945,410],{"class":153},[139,43947,164],{"class":145},[139,43949,43950,43952,43955,43957,43959,43961,43963,43965,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993],{"class":141,"line":2188},[139,43951,33097],{"class":153},[139,43953,43954],{"class":145},".p3_2",[139,43956,150],{"class":149},[139,43958,33105],{"class":145},[139,43960,33108],{"class":2111},[139,43962,150],{"class":149},[139,43964,43935],{"class":145},[139,43966,2634],{"class":153},[139,43968,43851],{"class":145},[139,43970,33117],{"class":2111},[139,43972,150],{"class":149},[139,43974,43935],{"class":145},[139,43976,410],{"class":153},[139,43978,43851],{"class":145},[139,43980,33126],{"class":2111},[139,43982,150],{"class":149},[139,43984,1481],{"class":153},[139,43986,2816],{"class":145},[139,43988,33135],{"class":2111},[139,43990,150],{"class":149},[139,43992,416],{"class":153},[139,43994,164],{"class":145},[139,43996,43997],{"class":141,"line":3944},[139,43998,43999],{"class":2512},"        # 路线4：定义3*3最大池化和1*1卷积\n",[139,44001,44002],{"class":141,"line":3963},[139,44003,44004],{"class":2512},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[139,44006,44007,44009,44012,44014,44016,44018,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038],{"class":141,"line":3968},[139,44008,33097],{"class":153},[139,44010,44011],{"class":145},".p4_1",[139,44013,150],{"class":149},[139,44015,37072],{"class":145},[139,44017,33126],{"class":2111},[139,44019,150],{"class":149},[139,44021,421],{"class":153},[139,44023,2816],{"class":145},[139,44025,33181],{"class":2111},[139,44027,150],{"class":149},[139,44029,410],{"class":153},[139,44031,2816],{"class":145},[139,44033,33135],{"class":2111},[139,44035,150],{"class":149},[139,44037,410],{"class":153},[139,44039,164],{"class":145},[139,44041,44042,44044,44047,44049,44051,44053,44055,44057,44059,44061,44064,44066,44068,44070],{"class":141,"line":3982},[139,44043,33097],{"class":153},[139,44045,44046],{"class":145},".p4_2",[139,44048,150],{"class":149},[139,44050,33105],{"class":145},[139,44052,33108],{"class":2111},[139,44054,150],{"class":149},[139,44056,43802],{"class":145},[139,44058,33117],{"class":2111},[139,44060,150],{"class":149},[139,44062,44063],{"class":145},"c4,",[139,44065,33126],{"class":2111},[139,44067,150],{"class":149},[139,44069,410],{"class":153},[139,44071,164],{"class":145},[139,44073,44074],{"class":141,"line":3987},[139,44075,843],{"emptyLinePlaceholder":842},[139,44077,44078,44080,44082],{"class":141,"line":4014},[139,44079,33053],{"class":149},[139,44081,33345],{"class":781},[139,44083,33348],{"class":145},[139,44085,44086,44089,44091,44093,44095,44097],{"class":141,"line":4019},[139,44087,44088],{"class":145},"        p1",[139,44090,150],{"class":149},[139,44092,33075],{"class":153},[139,44094,37427],{"class":145},[139,44096,33075],{"class":153},[139,44098,44099],{"class":145},".p1_1(x))\n",[139,44101,44102,44104,44106,44108,44110,44112,44115,44117,44119,44121],{"class":141,"line":4036},[139,44103,9359],{"class":145},[139,44105,150],{"class":149},[139,44107,33075],{"class":153},[139,44109,37427],{"class":145},[139,44111,33075],{"class":153},[139,44113,44114],{"class":145},".p2_2(",[139,44116,33075],{"class":153},[139,44118,37427],{"class":145},[139,44120,33075],{"class":153},[139,44122,44123],{"class":145},".p2_1(x))))\n",[139,44125,44126,44129,44131,44133,44135,44137,44140,44142,44144,44146],{"class":141,"line":4041},[139,44127,44128],{"class":145},"        p3",[139,44130,150],{"class":149},[139,44132,33075],{"class":153},[139,44134,37427],{"class":145},[139,44136,33075],{"class":153},[139,44138,44139],{"class":145},".p3_2(",[139,44141,33075],{"class":153},[139,44143,37427],{"class":145},[139,44145,33075],{"class":153},[139,44147,44148],{"class":145},".p3_1(x))))\n",[139,44150,44151,44154,44156,44158,44160,44162,44165,44167],{"class":141,"line":4046},[139,44152,44153],{"class":145},"        p4",[139,44155,150],{"class":149},[139,44157,33075],{"class":153},[139,44159,37427],{"class":145},[139,44161,33075],{"class":153},[139,44163,44164],{"class":145},".p4_2(",[139,44166,33075],{"class":153},[139,44168,44169],{"class":145},".p4_1(x)))\n",[139,44171,44172],{"class":141,"line":4051},[139,44173,44174],{"class":2512},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[139,44176,44177,44179,44182,44184,44186,44188],{"class":141,"line":4065},[139,44178,2085],{"class":149},[139,44180,44181],{"class":145}," torch.cat((p1,p2,p3,p4),",[139,44183,34932],{"class":2111},[139,44185,150],{"class":149},[139,44187,410],{"class":153},[139,44189,164],{"class":145},[139,44191,44192],{"class":141,"line":4070},[139,44193,843],{"emptyLinePlaceholder":842},[139,44195,44196],{"class":141,"line":4860},[139,44197,843],{"emptyLinePlaceholder":842},[139,44199,44200],{"class":141,"line":4874},[139,44201,44202],{"class":2512},"# 搭建GoogLeNet网络\n",[139,44204,44205,44207,44210,44212,44214,44216,44218],{"class":141,"line":4882},[139,44206,915],{"class":149},[139,44208,44209],{"class":781}," GoogLeNet",[139,44211,157],{"class":145},[139,44213,33031],{"class":781},[139,44215,2993],{"class":145},[139,44217,33036],{"class":781},[139,44219,558],{"class":145},[139,44221,44222],{"class":141,"line":4887},[139,44223,44224],{"class":2512},"    # 必须把Inception导入到里边\n",[139,44226,44227,44229,44231],{"class":141,"line":4893},[139,44228,33053],{"class":149},[139,44230,33056],{"class":153},[139,44232,44233],{"class":145},"(self,Inception):\n",[139,44235,44236,44238,44241,44243,44245,44247],{"class":141,"line":4899},[139,44237,33069],{"class":153},[139,44239,44240],{"class":145},"(GoogLeNet,",[139,44242,33075],{"class":153},[139,44244,33078],{"class":145},[139,44246,33081],{"class":153},[139,44248,4262],{"class":145},[139,44250,44251,44253,44256,44258],{"class":141,"line":4904},[139,44252,33097],{"class":153},[139,44254,44255],{"class":145},".b1",[139,44257,150],{"class":149},[139,44259,40252],{"class":145},[139,44261,44262,44264,44266,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288,44290,44292,44294,44296,44298,44300,44302],{"class":141,"line":10222},[139,44263,40257],{"class":145},[139,44265,33108],{"class":2111},[139,44267,150],{"class":149},[139,44269,410],{"class":153},[139,44271,2816],{"class":145},[139,44273,33117],{"class":2111},[139,44275,150],{"class":149},[139,44277,2646],{"class":153},[139,44279,2816],{"class":145},[139,44281,33126],{"class":2111},[139,44283,150],{"class":149},[139,44285,2807],{"class":153},[139,44287,2816],{"class":145},[139,44289,33181],{"class":2111},[139,44291,150],{"class":149},[139,44293,416],{"class":153},[139,44295,2816],{"class":145},[139,44297,33135],{"class":2111},[139,44299,150],{"class":149},[139,44301,421],{"class":153},[139,44303,40290],{"class":145},[139,44305,44306],{"class":141,"line":10246},[139,44307,40295],{"class":145},[139,44309,44310,44312,44314,44316,44318,44320,44322,44324,44326,44328,44330,44332,44334],{"class":141,"line":10251},[139,44311,40340],{"class":145},[139,44313,33126],{"class":2111},[139,44315,150],{"class":149},[139,44317,421],{"class":153},[139,44319,2816],{"class":145},[139,44321,33181],{"class":2111},[139,44323,150],{"class":149},[139,44325,416],{"class":153},[139,44327,2816],{"class":145},[139,44329,33135],{"class":2111},[139,44331,150],{"class":149},[139,44333,410],{"class":153},[139,44335,164],{"class":145},[139,44337,44338],{"class":141,"line":10257},[139,44339,40369],{"class":145},[139,44341,44342,44344,44347,44349],{"class":141,"line":10284},[139,44343,33097],{"class":153},[139,44345,44346],{"class":145},".b2",[139,44348,150],{"class":149},[139,44350,40252],{"class":145},[139,44352,44353,44355,44357,44359,44361,44363,44365,44367,44369,44371,44373,44375,44377],{"class":141,"line":10289},[139,44354,40257],{"class":145},[139,44356,33108],{"class":2111},[139,44358,150],{"class":149},[139,44360,2646],{"class":153},[139,44362,2816],{"class":145},[139,44364,33117],{"class":2111},[139,44366,150],{"class":149},[139,44368,2646],{"class":153},[139,44370,2816],{"class":145},[139,44372,33126],{"class":2111},[139,44374,150],{"class":149},[139,44376,410],{"class":153},[139,44378,40290],{"class":145},[139,44380,44381],{"class":141,"line":10295},[139,44382,40295],{"class":145},[139,44384,44385,44387,44389,44391,44393,44395,44397,44399,44402,44404,44406,44408,44410,44412,44414,44416,44418],{"class":141,"line":10307},[139,44386,40257],{"class":145},[139,44388,33108],{"class":2111},[139,44390,150],{"class":149},[139,44392,2646],{"class":153},[139,44394,2816],{"class":145},[139,44396,33117],{"class":2111},[139,44398,150],{"class":149},[139,44400,44401],{"class":153},"192",[139,44403,2816],{"class":145},[139,44405,33126],{"class":2111},[139,44407,150],{"class":149},[139,44409,421],{"class":153},[139,44411,2816],{"class":145},[139,44413,33135],{"class":2111},[139,44415,150],{"class":149},[139,44417,410],{"class":153},[139,44419,40290],{"class":145},[139,44421,44422],{"class":141,"line":10319},[139,44423,40295],{"class":145},[139,44425,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450],{"class":141,"line":10331},[139,44427,40340],{"class":145},[139,44429,33126],{"class":2111},[139,44431,150],{"class":149},[139,44433,421],{"class":153},[139,44435,2816],{"class":145},[139,44437,33181],{"class":2111},[139,44439,150],{"class":149},[139,44441,416],{"class":153},[139,44443,2816],{"class":145},[139,44445,33135],{"class":2111},[139,44447,150],{"class":149},[139,44449,410],{"class":153},[139,44451,164],{"class":145},[139,44453,44454],{"class":141,"line":11990},[139,44455,40369],{"class":145},[139,44457,44458,44460,44463,44465],{"class":141,"line":12015},[139,44459,33097],{"class":153},[139,44461,44462],{"class":145},".b3",[139,44464,150],{"class":149},[139,44466,40252],{"class":145},[139,44468,44469,44472,44474,44476,44478,44481,44483,44485,44487,44490,44492,44494,44496,44499,44501],{"class":141,"line":12038},[139,44470,44471],{"class":145},"            Inception(",[139,44473,44401],{"class":153},[139,44475,2816],{"class":145},[139,44477,2646],{"class":153},[139,44479,44480],{"class":145},",(",[139,44482,2652],{"class":153},[139,44484,2816],{"class":145},[139,44486,34317],{"class":153},[139,44488,44489],{"class":145},"),(",[139,44491,3036],{"class":153},[139,44493,2816],{"class":145},[139,44495,2640],{"class":153},[139,44497,44498],{"class":145},"),",[139,44500,2640],{"class":153},[139,44502,40290],{"class":145},[139,44504,44505,44507,44509,44511,44513,44515,44517,44519,44521,44523,44525,44527,44529,44531,44533],{"class":141,"line":12062},[139,44506,44471],{"class":145},[139,44508,37113],{"class":153},[139,44510,2816],{"class":145},[139,44512,34317],{"class":153},[139,44514,44480],{"class":145},[139,44516,34317],{"class":153},[139,44518,2816],{"class":145},[139,44520,44401],{"class":153},[139,44522,44489],{"class":145},[139,44524,2640],{"class":153},[139,44526,2816],{"class":145},[139,44528,2652],{"class":153},[139,44530,44498],{"class":145},[139,44532,2646],{"class":153},[139,44534,40290],{"class":145},[139,44536,44537,44539,44541,44543,44545,44547,44549,44551,44553,44555,44557,44559,44561],{"class":141,"line":12067},[139,44538,40340],{"class":145},[139,44540,33126],{"class":2111},[139,44542,150],{"class":149},[139,44544,421],{"class":153},[139,44546,2816],{"class":145},[139,44548,33181],{"class":2111},[139,44550,150],{"class":149},[139,44552,416],{"class":153},[139,44554,2816],{"class":145},[139,44556,33135],{"class":2111},[139,44558,150],{"class":149},[139,44560,410],{"class":153},[139,44562,164],{"class":145},[139,44564,44565],{"class":141,"line":12072},[139,44566,40369],{"class":145},[139,44568,44569,44571,44574,44576],{"class":141,"line":12077},[139,44570,33097],{"class":153},[139,44572,44573],{"class":145},".b4",[139,44575,150],{"class":149},[139,44577,40252],{"class":145},[139,44579,44580,44582,44585,44587,44589,44591,44593,44595,44598,44600,44602,44604,44606,44608,44610],{"class":141,"line":12086},[139,44581,44471],{"class":145},[139,44583,44584],{"class":153},"480",[139,44586,2816],{"class":145},[139,44588,44401],{"class":153},[139,44590,44480],{"class":145},[139,44592,2652],{"class":153},[139,44594,2816],{"class":145},[139,44596,44597],{"class":153},"208",[139,44599,44489],{"class":145},[139,44601,3036],{"class":153},[139,44603,2816],{"class":145},[139,44605,3042],{"class":153},[139,44607,44498],{"class":145},[139,44609,2646],{"class":153},[139,44611,40290],{"class":145},[139,44613,44614,44616,44618,44620,44622,44624,44626,44628,44630,44632,44634,44636,44638,44640,44642],{"class":141,"line":12091},[139,44615,44471],{"class":145},[139,44617,40700],{"class":153},[139,44619,2816],{"class":145},[139,44621,23315],{"class":153},[139,44623,44480],{"class":145},[139,44625,3053],{"class":153},[139,44627,2816],{"class":145},[139,44629,33750],{"class":153},[139,44631,44489],{"class":145},[139,44633,3235],{"class":153},[139,44635,2816],{"class":145},[139,44637,2646],{"class":153},[139,44639,44498],{"class":145},[139,44641,2646],{"class":153},[139,44643,40290],{"class":145},[139,44645,44646,44648,44650,44652,44654,44656,44658,44660,44662,44664,44666,44668,44670,44672,44674],{"class":141,"line":12097},[139,44647,44471],{"class":145},[139,44649,40700],{"class":153},[139,44651,2816],{"class":145},[139,44653,34317],{"class":153},[139,44655,44480],{"class":145},[139,44657,34317],{"class":153},[139,44659,2816],{"class":145},[139,44661,37113],{"class":153},[139,44663,44489],{"class":145},[139,44665,3235],{"class":153},[139,44667,2816],{"class":145},[139,44669,2646],{"class":153},[139,44671,44498],{"class":145},[139,44673,2646],{"class":153},[139,44675,40290],{"class":145},[139,44677,44678,44680,44682,44684,44686,44688,44690,44692,44695,44697,44699,44701,44703,44705,44707],{"class":141,"line":12118},[139,44679,44471],{"class":145},[139,44681,40700],{"class":153},[139,44683,2816],{"class":145},[139,44685,3053],{"class":153},[139,44687,44480],{"class":145},[139,44689,34317],{"class":153},[139,44691,2816],{"class":145},[139,44693,44694],{"class":153},"288",[139,44696,44489],{"class":145},[139,44698,2640],{"class":153},[139,44700,2816],{"class":145},[139,44702,2646],{"class":153},[139,44704,44498],{"class":145},[139,44706,2646],{"class":153},[139,44708,40290],{"class":145},[139,44710,44711,44713,44716,44718,44720,44722,44724,44726,44729,44731,44733,44735,44737,44739,44741],{"class":141,"line":12124},[139,44712,44471],{"class":145},[139,44714,44715],{"class":153},"528",[139,44717,2816],{"class":145},[139,44719,37113],{"class":153},[139,44721,44480],{"class":145},[139,44723,23315],{"class":153},[139,44725,2816],{"class":145},[139,44727,44728],{"class":153},"320",[139,44730,44489],{"class":145},[139,44732,2640],{"class":153},[139,44734,2816],{"class":145},[139,44736,34317],{"class":153},[139,44738,44498],{"class":145},[139,44740,34317],{"class":153},[139,44742,40290],{"class":145},[139,44744,44745,44747,44749,44751,44753,44755,44757,44759,44761,44763,44765,44767,44769],{"class":141,"line":12138},[139,44746,40340],{"class":145},[139,44748,33126],{"class":2111},[139,44750,150],{"class":149},[139,44752,421],{"class":153},[139,44754,2816],{"class":145},[139,44756,33181],{"class":2111},[139,44758,150],{"class":149},[139,44760,416],{"class":153},[139,44762,2816],{"class":145},[139,44764,33135],{"class":2111},[139,44766,150],{"class":149},[139,44768,410],{"class":153},[139,44770,164],{"class":145},[139,44772,44773],{"class":141,"line":12144},[139,44774,40369],{"class":145},[139,44776,44777,44779,44782,44784],{"class":141,"line":12171},[139,44778,33097],{"class":153},[139,44780,44781],{"class":145},".b5",[139,44783,150],{"class":149},[139,44785,40252],{"class":145},[139,44787,44788,44790,44793,44795,44797,44799,44801,44803,44805,44807,44809,44811,44813,44815,44817],{"class":141,"line":12180},[139,44789,44471],{"class":145},[139,44791,44792],{"class":153},"832",[139,44794,2816],{"class":145},[139,44796,37113],{"class":153},[139,44798,44480],{"class":145},[139,44800,23315],{"class":153},[139,44802,2816],{"class":145},[139,44804,44728],{"class":153},[139,44806,44489],{"class":145},[139,44808,2640],{"class":153},[139,44810,2816],{"class":145},[139,44812,34317],{"class":153},[139,44814,44498],{"class":145},[139,44816,34317],{"class":153},[139,44818,40290],{"class":145},[139,44820,44821,44823,44825,44827,44829,44831,44833,44835,44837,44839,44841,44843,44845,44847,44849],{"class":141,"line":12186},[139,44822,44471],{"class":145},[139,44824,44792],{"class":153},[139,44826,2816],{"class":145},[139,44828,37183],{"class":153},[139,44830,44480],{"class":145},[139,44832,44401],{"class":153},[139,44834,2816],{"class":145},[139,44836,37183],{"class":153},[139,44838,44489],{"class":145},[139,44840,3042],{"class":153},[139,44842,2816],{"class":145},[139,44844,34317],{"class":153},[139,44846,44498],{"class":145},[139,44848,34317],{"class":153},[139,44850,40290],{"class":145},[139,44852,44853,44856,44858,44860,44862],{"class":141,"line":12194},[139,44854,44855],{"class":145},"            nn.AdaptiveAvgPool2d((",[139,44857,410],{"class":153},[139,44859,2816],{"class":145},[139,44861,410],{"class":153},[139,44863,44864],{"class":145},")),\n",[139,44866,44867],{"class":141,"line":12199},[139,44868,41033],{"class":145},[139,44870,44871,44873,44876,44878,44880],{"class":141,"line":18871},[139,44872,41038],{"class":145},[139,44874,44875],{"class":153},"1024",[139,44877,2816],{"class":145},[139,44879,536],{"class":153},[139,44881,164],{"class":145},[139,44883,44884],{"class":141,"line":18877},[139,44885,40369],{"class":145},[139,44887,44888],{"class":141,"line":18900},[139,44889,44890],{"class":2512},"        # 对模型参数初始化\n",[139,44892,44893,44895,44897,44899,44901],{"class":141,"line":18906},[139,44894,5684],{"class":149},[139,44896,41111],{"class":145},[139,44898,1976],{"class":149},[139,44900,41116],{"class":153},[139,44902,41119],{"class":145},[139,44904,44905,44907,44909],{"class":141,"line":18929},[139,44906,6920],{"class":149},[139,44908,41131],{"class":153},[139,44910,41134],{"class":145},[139,44912,44913,44915,44918,44920,44923,44925,44927,44929,44931],{"class":141,"line":18943},[139,44914,41144],{"class":145},[139,44916,44917],{"class":2111},"mode",[139,44919,150],{"class":149},[139,44921,44922],{"class":160},"'fan_out'",[139,44924,2816],{"class":145},[139,44926,41147],{"class":2111},[139,44928,150],{"class":149},[139,44930,41152],{"class":160},[139,44932,164],{"class":145},[139,44934,44935],{"class":141,"line":18963},[139,44936,44937],{"class":2512},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[139,44939,44940],{"class":141,"line":18969},[139,44941,44942],{"class":2512},"                # ② mode = 'fan_out'决定使用的fan值：\n",[139,44944,44945],{"class":141,"line":18980},[139,44946,44947],{"class":2512},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[139,44949,44950],{"class":141,"line":19003},[139,44951,44952],{"class":2512},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[139,44954,44955],{"class":141,"line":19025},[139,44956,44957],{"class":2512},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[139,44959,44960],{"class":141,"line":19030},[139,44961,44962],{"class":2512},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[139,44964,44965,44967,44969,44971,44973,44975],{"class":141,"line":19036},[139,44966,41164],{"class":149},[139,44968,41167],{"class":145},[139,44970,41170],{"class":149},[139,44972,2077],{"class":149},[139,44974,41175],{"class":153},[139,44976,246],{"class":145},[139,44978,44979,44981,44983],{"class":141,"line":19050},[139,44980,41187],{"class":145},[139,44982,2634],{"class":153},[139,44984,164],{"class":145},[139,44986,44987,44990,44992],{"class":141,"line":19063},[139,44988,44989],{"class":149},"                elif",[139,44991,41131],{"class":153},[139,44993,41206],{"class":145},[139,44995,44996,44999,45001,45003,45005],{"class":141,"line":19068},[139,44997,44998],{"class":145},"                    nn.init.normal_(m.weight,",[139,45000,2634],{"class":153},[139,45002,2816],{"class":145},[139,45004,41228],{"class":153},[139,45006,164],{"class":145},[139,45008,45009,45012,45014,45016,45018,45020],{"class":141,"line":19082},[139,45010,45011],{"class":149},"                    if",[139,45013,41167],{"class":145},[139,45015,41170],{"class":149},[139,45017,2077],{"class":149},[139,45019,41175],{"class":153},[139,45021,246],{"class":145},[139,45023,45024,45027,45029],{"class":141,"line":19087},[139,45025,45026],{"class":145},"                        nn.init.constant_(m.bias,",[139,45028,2634],{"class":153},[139,45030,164],{"class":145},[139,45032,45033],{"class":141,"line":19093},[139,45034,37408],{"class":2512},[139,45036,45037,45039,45041],{"class":141,"line":19098},[139,45038,33053],{"class":149},[139,45040,33345],{"class":781},[139,45042,33348],{"class":145},[139,45044,45045,45047,45049,45051],{"class":141,"line":19112},[139,45046,33353],{"class":145},[139,45048,150],{"class":149},[139,45050,33075],{"class":153},[139,45052,45053],{"class":145},".b1(x)\n",[139,45055,45056,45058,45060,45062],{"class":141,"line":19117},[139,45057,33353],{"class":145},[139,45059,150],{"class":149},[139,45061,33075],{"class":153},[139,45063,45064],{"class":145},".b2(x)\n",[139,45066,45067,45069,45071,45073],{"class":141,"line":19122},[139,45068,33353],{"class":145},[139,45070,150],{"class":149},[139,45072,33075],{"class":153},[139,45074,45075],{"class":145},".b3(x)\n",[139,45077,45078,45080,45082,45084],{"class":141,"line":19136},[139,45079,33353],{"class":145},[139,45081,150],{"class":149},[139,45083,33075],{"class":153},[139,45085,45086],{"class":145},".b4(x)\n",[139,45088,45089,45091,45093,45095],{"class":141,"line":19148},[139,45090,33353],{"class":145},[139,45092,150],{"class":149},[139,45094,33075],{"class":153},[139,45096,45097],{"class":145},".b5(x)\n",[139,45099,45100,45102],{"class":141,"line":19153},[139,45101,2085],{"class":149},[139,45103,33461],{"class":145},[139,45105,45106],{"class":141,"line":19166},[139,45107,843],{"emptyLinePlaceholder":842},[139,45109,45110],{"class":141,"line":19171},[139,45111,45112],{"class":2512},"# 模型展示\n",[139,45114,45115,45117,45119,45121,45123],{"class":141,"line":19176},[139,45116,1729],{"class":149},[139,45118,1732],{"class":153},[139,45120,5232],{"class":149},[139,45122,33476],{"class":160},[139,45124,246],{"class":145},[139,45126,45127,45129,45131,45133,45135,45137,45139,45141,45143],{"class":141,"line":19181},[139,45128,33488],{"class":145},[139,45130,150],{"class":149},[139,45132,32706],{"class":145},[139,45134,33495],{"class":160},[139,45136,3992],{"class":149},[139,45138,33500],{"class":145},[139,45140,656],{"class":149},[139,45142,32731],{"class":160},[139,45144,164],{"class":145},[139,45146,45147,45149,45151],{"class":141,"line":19194},[139,45148,33540],{"class":145},[139,45150,150],{"class":149},[139,45152,45153],{"class":145},"GoogLeNet(Inception).to(device)\n",[139,45155,45156,45158,45160,45162,45164,45166,45168,45170],{"class":141,"line":19199},[139,45157,302],{"class":153},[139,45159,33552],{"class":145},[139,45161,410],{"class":153},[139,45163,2816],{"class":145},[139,45165,33750],{"class":153},[139,45167,2816],{"class":145},[139,45169,33750],{"class":153},[139,45171,33565],{"class":145},[1760,45173,45174],{"start":210},[1763,45175,41425],{},[130,45177,45179],{"className":132,"code":45178,"language":134,"meta":135,"style":135},"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",[50,45180,45181,45187,45193,45203,45209,45219,45229,45239,45249,45259,45263,45274,45284,45288,45292,45296,45304,45316,45326,45342,45352,45384,45398,45408,45418,45422,45432,45446,45456,45466,45476,45482,45486,45490,45494,45498,45502,45510,45530,45534,45538,45542,45546,45550,45566,45570,45574,45582,45586,45590,45598,45602,45606,45610,45618,45622,45626,45630,45634,45642,45646,45654,45658,45666,45670,45678,45682,45690,45694,45698,45706,45710,45714,45718,45730,45754,45768,45772,45776,45780,45788,45792,45800,45804,45812,45816,45824,45828,45836,45840,45848,45852,45864,45868,45876,45880,45888,45892,45896,45900,45904,45912,45916,45932,45936,45944,45948,45952,45956,45960,45964,45968,45972,45988,45992,46004,46008,46020,46024,46036,46040,46048,46052,46060,46064,46068,46072,46078,46082,46090,46094,46110,46114,46122,46126,46142,46154,46158,46170,46174,46178,46186,46190,46194,46202,46206,46214,46218,46226,46230,46234,46276,46318,46322,46326,46342,46346,46362,46366,46370,46378,46382,46386,46398,46436,46440,46444,46452,46456,46470,46480,46486,46492,46498,46504,46508,46512,46518,46522,46526,46534,46538,46556,46560,46564,46568,46584,46588,46592,46596,46600,46604,46624,46644,46648,46652,46656,46664,46672,46676,46692,46712,46732,46736,46740,46748,46756,46760,46764,46768,46780,46784,46794,46802,46819],{"__ignoreMap":135},[139,45182,45183,45185],{"class":141,"line":142},[139,45184,1064],{"class":149},[139,45186,34071],{"class":145},[139,45188,45189,45191],{"class":141,"line":210},[139,45190,1064],{"class":149},[139,45192,1504],{"class":145},[139,45194,45195,45197,45199,45201],{"class":141,"line":254},[139,45196,1064],{"class":149},[139,45198,34088],{"class":145},[139,45200,1035],{"class":149},[139,45202,34093],{"class":145},[139,45204,45205,45207],{"class":141,"line":262},[139,45206,1064],{"class":149},[139,45208,32651],{"class":145},[139,45210,45211,45213,45215,45217],{"class":141,"line":313},[139,45212,1265],{"class":149},[139,45214,33664],{"class":145},[139,45216,1064],{"class":149},[139,45218,34110],{"class":145},[139,45220,45221,45223,45225,45227],{"class":141,"line":462},[139,45222,1265],{"class":149},[139,45224,33618],{"class":145},[139,45226,1064],{"class":149},[139,45228,33623],{"class":145},[139,45230,45231,45233,45235,45237],{"class":141,"line":474},[139,45232,1265],{"class":149},[139,45234,33647],{"class":145},[139,45236,1064],{"class":149},[139,45238,33652],{"class":145},[139,45240,45241,45243,45245,45247],{"class":141,"line":484},[139,45242,1064],{"class":149},[139,45244,33664],{"class":145},[139,45246,1035],{"class":149},[139,45248,33669],{"class":145},[139,45250,45251,45253,45255,45257],{"class":141,"line":989},[139,45252,1064],{"class":149},[139,45254,33681],{"class":145},[139,45256,1035],{"class":149},[139,45258,33686],{"class":145},[139,45260,45261],{"class":141,"line":994},[139,45262,34155],{"class":2512},[139,45264,45265,45267,45269,45271],{"class":141,"line":999},[139,45266,1265],{"class":149},[139,45268,34162],{"class":145},[139,45270,1064],{"class":149},[139,45272,45273],{"class":145}," GoogLeNet, Inception\n",[139,45275,45276,45278,45280,45282],{"class":141,"line":1006},[139,45277,1265],{"class":149},[139,45279,32993],{"class":145},[139,45281,1064],{"class":149},[139,45283,32998],{"class":145},[139,45285,45286],{"class":141,"line":1027},[139,45287,843],{"emptyLinePlaceholder":842},[139,45289,45290],{"class":141,"line":1040},[139,45291,843],{"emptyLinePlaceholder":842},[139,45293,45294],{"class":141,"line":2160},[139,45295,34190],{"class":2512},[139,45297,45298,45300,45302],{"class":141,"line":2188},[139,45299,778],{"class":149},[139,45301,34197],{"class":781},[139,45303,34200],{"class":145},[139,45305,45306,45308,45310,45312,45314],{"class":141,"line":3944},[139,45307,34205],{"class":145},[139,45309,150],{"class":149},[139,45311,33704],{"class":145},[139,45313,33712],{"class":160},[139,45315,33715],{"class":145},[139,45317,45318,45320,45322,45324],{"class":141,"line":3963},[139,45319,34218],{"class":2111},[139,45321,150],{"class":149},[139,45323,33725],{"class":153},[139,45325,33715],{"class":145},[139,45327,45328,45330,45332,45334,45336,45338,45340],{"class":141,"line":3968},[139,45329,34229],{"class":2111},[139,45331,150],{"class":149},[139,45333,33742],{"class":145},[139,45335,33745],{"class":2111},[139,45337,150],{"class":149},[139,45339,37692],{"class":153},[139,45341,33753],{"class":145},[139,45343,45344,45346,45348,45350],{"class":141,"line":3982},[139,45345,34246],{"class":2111},[139,45347,150],{"class":149},[139,45349,33725],{"class":153},[139,45351,164],{"class":145},[139,45353,45354,45356,45358,45360,45362,45364,45366,45368,45370,45372,45374,45376,45378,45380,45382],{"class":141,"line":3987},[139,45355,34257],{"class":145},[139,45357,150],{"class":149},[139,45359,34262],{"class":145},[139,45361,34265],{"class":153},[139,45363,157],{"class":145},[139,45365,34270],{"class":153},[139,45367,2892],{"class":149},[139,45369,9632],{"class":153},[139,45371,34277],{"class":145},[139,45373,34265],{"class":153},[139,45375,157],{"class":145},[139,45377,34284],{"class":153},[139,45379,2892],{"class":149},[139,45381,9632],{"class":153},[139,45383,34291],{"class":145},[139,45385,45386,45388,45390,45392,45394,45396],{"class":141,"line":4014},[139,45387,34296],{"class":145},[139,45389,150],{"class":149},[139,45391,34301],{"class":145},[139,45393,33786],{"class":2111},[139,45395,150],{"class":149},[139,45397,33791],{"class":145},[139,45399,45400,45402,45404,45406],{"class":141,"line":4019},[139,45401,34312],{"class":2111},[139,45403,150],{"class":149},[139,45405,2640],{"class":153},[139,45407,33715],{"class":145},[139,45409,45410,45412,45414,45416],{"class":141,"line":4036},[139,45411,34324],{"class":2111},[139,45413,150],{"class":149},[139,45415,33725],{"class":153},[139,45417,33715],{"class":145},[139,45419,45420],{"class":141,"line":4041},[139,45421,34335],{"class":2512},[139,45423,45424,45426,45428,45430],{"class":141,"line":4046},[139,45425,34340],{"class":2111},[139,45427,150],{"class":149},[139,45429,2833],{"class":153},[139,45431,164],{"class":145},[139,45433,45434,45436,45438,45440,45442,45444],{"class":141,"line":4051},[139,45435,34351],{"class":145},[139,45437,150],{"class":149},[139,45439,33783],{"class":145},[139,45441,33786],{"class":2111},[139,45443,150],{"class":149},[139,45445,34362],{"class":145},[139,45447,45448,45450,45452,45454],{"class":141,"line":4065},[139,45449,34367],{"class":2111},[139,45451,150],{"class":149},[139,45453,2640],{"class":153},[139,45455,33715],{"class":145},[139,45457,45458,45460,45462,45464],{"class":141,"line":4070},[139,45459,34378],{"class":2111},[139,45461,150],{"class":149},[139,45463,33725],{"class":153},[139,45465,33715],{"class":145},[139,45467,45468,45470,45472,45474],{"class":141,"line":4860},[139,45469,34389],{"class":2111},[139,45471,150],{"class":149},[139,45473,2833],{"class":153},[139,45475,164],{"class":145},[139,45477,45478,45480],{"class":141,"line":4874},[139,45479,978],{"class":149},[139,45481,34402],{"class":145},[139,45483,45484],{"class":141,"line":4882},[139,45485,843],{"emptyLinePlaceholder":842},[139,45487,45488],{"class":141,"line":4887},[139,45489,34411],{"class":2512},[139,45491,45492],{"class":141,"line":4893},[139,45493,34416],{"class":2512},[139,45495,45496],{"class":141,"line":4899},[139,45497,843],{"emptyLinePlaceholder":842},[139,45499,45500],{"class":141,"line":4904},[139,45501,34425],{"class":2512},[139,45503,45504,45506,45508],{"class":141,"line":10222},[139,45505,778],{"class":149},[139,45507,34432],{"class":781},[139,45509,34435],{"class":145},[139,45511,45512,45514,45516,45518,45520,45522,45524,45526,45528],{"class":141,"line":10246},[139,45513,33488],{"class":145},[139,45515,150],{"class":149},[139,45517,32706],{"class":145},[139,45519,33495],{"class":160},[139,45521,3992],{"class":149},[139,45523,33500],{"class":145},[139,45525,656],{"class":149},[139,45527,34454],{"class":160},[139,45529,164],{"class":145},[139,45531,45532],{"class":141,"line":10251},[139,45533,843],{"emptyLinePlaceholder":842},[139,45535,45536],{"class":141,"line":10257},[139,45537,843],{"emptyLinePlaceholder":842},[139,45539,45540],{"class":141,"line":10284},[139,45541,34469],{"class":2512},[139,45543,45544],{"class":141,"line":10289},[139,45545,34474],{"class":2512},[139,45547,45548],{"class":141,"line":10295},[139,45549,34479],{"class":2512},[139,45551,45552,45554,45556,45558,45560,45562,45564],{"class":141,"line":10307},[139,45553,34484],{"class":145},[139,45555,150],{"class":149},[139,45557,34489],{"class":145},[139,45559,34492],{"class":2111},[139,45561,150],{"class":149},[139,45563,34497],{"class":153},[139,45565,164],{"class":145},[139,45567,45568],{"class":141,"line":10319},[139,45569,843],{"emptyLinePlaceholder":842},[139,45571,45572],{"class":141,"line":10331},[139,45573,34508],{"class":2512},[139,45575,45576,45578,45580],{"class":141,"line":11990},[139,45577,34513],{"class":145},[139,45579,150],{"class":149},[139,45581,34518],{"class":145},[139,45583,45584],{"class":141,"line":12015},[139,45585,843],{"emptyLinePlaceholder":842},[139,45587,45588],{"class":141,"line":12038},[139,45589,34527],{"class":2512},[139,45591,45592,45594,45596],{"class":141,"line":12062},[139,45593,33540],{"class":145},[139,45595,150],{"class":149},[139,45597,34536],{"class":145},[139,45599,45600],{"class":141,"line":12067},[139,45601,34541],{"class":2512},[139,45603,45604],{"class":141,"line":12072},[139,45605,34546],{"class":2512},[139,45607,45608],{"class":141,"line":12077},[139,45609,34551],{"class":2512},[139,45611,45612,45614,45616],{"class":141,"line":12086},[139,45613,34556],{"class":145},[139,45615,150],{"class":149},[139,45617,34561],{"class":145},[139,45619,45620],{"class":141,"line":12091},[139,45621,843],{"emptyLinePlaceholder":842},[139,45623,45624],{"class":141,"line":12097},[139,45625,843],{"emptyLinePlaceholder":842},[139,45627,45628],{"class":141,"line":12118},[139,45629,34574],{"class":2512},[139,45631,45632],{"class":141,"line":12124},[139,45633,34579],{"class":2512},[139,45635,45636,45638,45640],{"class":141,"line":12138},[139,45637,34584],{"class":145},[139,45639,150],{"class":149},[139,45641,34589],{"class":153},[139,45643,45644],{"class":141,"line":12144},[139,45645,34594],{"class":2512},[139,45647,45648,45650,45652],{"class":141,"line":12171},[139,45649,34599],{"class":145},[139,45651,150],{"class":149},[139,45653,34604],{"class":145},[139,45655,45656],{"class":141,"line":12180},[139,45657,34609],{"class":2512},[139,45659,45660,45662,45664],{"class":141,"line":12186},[139,45661,34614],{"class":145},[139,45663,150],{"class":149},[139,45665,34604],{"class":145},[139,45667,45668],{"class":141,"line":12194},[139,45669,34623],{"class":2512},[139,45671,45672,45674,45676],{"class":141,"line":12199},[139,45673,34628],{"class":145},[139,45675,150],{"class":149},[139,45677,34604],{"class":145},[139,45679,45680],{"class":141,"line":18871},[139,45681,34637],{"class":2512},[139,45683,45684,45686,45688],{"class":141,"line":18877},[139,45685,34642],{"class":145},[139,45687,150],{"class":149},[139,45689,34604],{"class":145},[139,45691,45692],{"class":141,"line":18900},[139,45693,843],{"emptyLinePlaceholder":842},[139,45695,45696],{"class":141,"line":18906},[139,45697,34655],{"class":2512},[139,45699,45700,45702,45704],{"class":141,"line":18929},[139,45701,34660],{"class":145},[139,45703,150],{"class":149},[139,45705,34665],{"class":145},[139,45707,45708],{"class":141,"line":18943},[139,45709,843],{"emptyLinePlaceholder":842},[139,45711,45712],{"class":141,"line":18963},[139,45713,843],{"emptyLinePlaceholder":842},[139,45715,45716],{"class":141,"line":18969},[139,45717,34678],{"class":2512},[139,45719,45720,45722,45724,45726,45728],{"class":141,"line":18980},[139,45721,5482],{"class":149},[139,45723,34685],{"class":145},[139,45725,1976],{"class":149},[139,45727,34690],{"class":153},[139,45729,34693],{"class":145},[139,45731,45732,45734,45736,45738,45740,45742,45744,45746,45748,45750,45752],{"class":141,"line":19003},[139,45733,34698],{"class":153},[139,45735,157],{"class":145},[139,45737,34703],{"class":160},[139,45739,34706],{"class":153},[139,45741,3019],{"class":160},[139,45743,34706],{"class":153},[139,45745,634],{"class":160},[139,45747,34715],{"class":145},[139,45749,855],{"class":149},[139,45751,410],{"class":153},[139,45753,207],{"class":145},[139,45755,45756,45758,45760,45762,45764,45766],{"class":141,"line":19025},[139,45757,34698],{"class":153},[139,45759,157],{"class":145},[139,45761,34730],{"class":160},[139,45763,2892],{"class":149},[139,45765,536],{"class":153},[139,45767,164],{"class":145},[139,45769,45770],{"class":141,"line":19030},[139,45771,843],{"emptyLinePlaceholder":842},[139,45773,45774],{"class":141,"line":19036},[139,45775,34745],{"class":2512},[139,45777,45778],{"class":141,"line":19050},[139,45779,34750],{"class":2512},[139,45781,45782,45784,45786],{"class":141,"line":19063},[139,45783,34755],{"class":145},[139,45785,150],{"class":149},[139,45787,34589],{"class":153},[139,45789,45790],{"class":141,"line":19068},[139,45791,34764],{"class":2512},[139,45793,45794,45796,45798],{"class":141,"line":19082},[139,45795,34769],{"class":145},[139,45797,150],{"class":149},[139,45799,5367],{"class":153},[139,45801,45802],{"class":141,"line":19087},[139,45803,34778],{"class":2512},[139,45805,45806,45808,45810],{"class":141,"line":19093},[139,45807,34783],{"class":145},[139,45809,150],{"class":149},[139,45811,34589],{"class":153},[139,45813,45814],{"class":141,"line":19098},[139,45815,34792],{"class":2512},[139,45817,45818,45820,45822],{"class":141,"line":19112},[139,45819,34797],{"class":145},[139,45821,150],{"class":149},[139,45823,5367],{"class":153},[139,45825,45826],{"class":141,"line":19117},[139,45827,34806],{"class":2512},[139,45829,45830,45832,45834],{"class":141,"line":19122},[139,45831,34811],{"class":145},[139,45833,150],{"class":149},[139,45835,5367],{"class":153},[139,45837,45838],{"class":141,"line":19136},[139,45839,34820],{"class":2512},[139,45841,45842,45844,45846],{"class":141,"line":19148},[139,45843,34825],{"class":145},[139,45845,150],{"class":149},[139,45847,5367],{"class":153},[139,45849,45850],{"class":141,"line":19153},[139,45851,34834],{"class":2512},[139,45853,45854,45856,45858,45860,45862],{"class":141,"line":19166},[139,45855,5684],{"class":149},[139,45857,33850],{"class":145},[139,45859,1976],{"class":149},[139,45861,33855],{"class":153},[139,45863,34847],{"class":145},[139,45865,45866],{"class":141,"line":19171},[139,45867,34852],{"class":2512},[139,45869,45870,45872,45874],{"class":141,"line":19176},[139,45871,34857],{"class":145},[139,45873,150],{"class":149},[139,45875,34862],{"class":145},[139,45877,45878],{"class":141,"line":19181},[139,45879,34867],{"class":2512},[139,45881,45882,45884,45886],{"class":141,"line":19194},[139,45883,34872],{"class":145},[139,45885,150],{"class":149},[139,45887,34877],{"class":145},[139,45889,45890],{"class":141,"line":19199},[139,45891,34883],{"class":2512},[139,45893,45894],{"class":141,"line":34880},[139,45895,34889],{"class":145},[139,45897,45898],{"class":141,"line":34886},[139,45899,34895],{"class":2512},[139,45901,45902],{"class":141,"line":34892},[139,45903,34901],{"class":2512},[139,45905,45906,45908,45910],{"class":141,"line":34898},[139,45907,34907],{"class":145},[139,45909,150],{"class":149},[139,45911,34912],{"class":145},[139,45913,45914],{"class":141,"line":34904},[139,45915,34918],{"class":2512},[139,45917,45918,45920,45922,45924,45926,45928,45930],{"class":141,"line":34915},[139,45919,34924],{"class":145},[139,45921,150],{"class":149},[139,45923,34929],{"class":145},[139,45925,34932],{"class":2111},[139,45927,150],{"class":149},[139,45929,410],{"class":153},[139,45931,164],{"class":145},[139,45933,45934],{"class":141,"line":34921},[139,45935,34944],{"class":2512},[139,45937,45938,45940,45942],{"class":141,"line":34941},[139,45939,34950],{"class":145},[139,45941,150],{"class":149},[139,45943,34955],{"class":145},[139,45945,45946],{"class":141,"line":34947},[139,45947,34961],{"class":2512},[139,45949,45950],{"class":141,"line":34958},[139,45951,34967],{"class":145},[139,45953,45954],{"class":141,"line":34964},[139,45955,34973],{"class":2512},[139,45957,45958],{"class":141,"line":34970},[139,45959,34979],{"class":145},[139,45961,45962],{"class":141,"line":34976},[139,45963,34985],{"class":2512},[139,45965,45966],{"class":141,"line":34982},[139,45967,34991],{"class":145},[139,45969,45970],{"class":141,"line":34988},[139,45971,34997],{"class":2512},[139,45973,45974,45976,45978,45980,45982,45984,45986],{"class":141,"line":34994},[139,45975,35003],{"class":145},[139,45977,11751],{"class":149},[139,45979,35008],{"class":145},[139,45981,2892],{"class":149},[139,45983,35013],{"class":145},[139,45985,2634],{"class":153},[139,45987,164],{"class":145},[139,45989,45990],{"class":141,"line":35000},[139,45991,35023],{"class":2512},[139,45993,45994,45996,45998,46000,46002],{"class":141,"line":35020},[139,45995,35029],{"class":145},[139,45997,11751],{"class":149},[139,45999,35034],{"class":145},[139,46001,5232],{"class":149},[139,46003,35039],{"class":145},[139,46005,46006],{"class":141,"line":35026},[139,46007,35045],{"class":2512},[139,46009,46010,46012,46014,46016,46018],{"class":141,"line":35042},[139,46011,35051],{"class":145},[139,46013,11751],{"class":149},[139,46015,35013],{"class":145},[139,46017,2634],{"class":153},[139,46019,164],{"class":145},[139,46021,46022],{"class":141,"line":35048},[139,46023,35065],{"class":2512},[139,46025,46026,46028,46030,46032,46034],{"class":141,"line":35062},[139,46027,5684],{"class":149},[139,46029,35073],{"class":145},[139,46031,1976],{"class":149},[139,46033,33855],{"class":153},[139,46035,35080],{"class":145},[139,46037,46038],{"class":141,"line":35068},[139,46039,35086],{"class":2512},[139,46041,46042,46044,46046],{"class":141,"line":35083},[139,46043,34857],{"class":145},[139,46045,150],{"class":149},[139,46047,34862],{"class":145},[139,46049,46050],{"class":141,"line":35089},[139,46051,35101],{"class":2512},[139,46053,46054,46056,46058],{"class":141,"line":35098},[139,46055,34872],{"class":145},[139,46057,150],{"class":149},[139,46059,34877],{"class":145},[139,46061,46062],{"class":141,"line":35104},[139,46063,35116],{"class":2512},[139,46065,46066],{"class":141,"line":35113},[139,46067,35122],{"class":145},[139,46069,46070],{"class":141,"line":35119},[139,46071,38599],{"class":2512},[139,46073,46074,46076],{"class":141,"line":35125},[139,46075,35128],{"class":149},[139,46077,35131],{"class":145},[139,46079,46080],{"class":141,"line":35134},[139,46081,35137],{"class":2512},[139,46083,46084,46086,46088],{"class":141,"line":35140},[139,46085,38614],{"class":145},[139,46087,150],{"class":149},[139,46089,34912],{"class":145},[139,46091,46092],{"class":141,"line":35151},[139,46093,35154],{"class":2512},[139,46095,46096,46098,46100,46102,46104,46106,46108],{"class":141,"line":35157},[139,46097,38627],{"class":145},[139,46099,150],{"class":149},[139,46101,34929],{"class":145},[139,46103,34932],{"class":2111},[139,46105,150],{"class":149},[139,46107,410],{"class":153},[139,46109,164],{"class":145},[139,46111,46112],{"class":141,"line":35176},[139,46113,35179],{"class":2512},[139,46115,46116,46118,46120],{"class":141,"line":35182},[139,46117,38648],{"class":145},[139,46119,150],{"class":149},[139,46121,34955],{"class":145},[139,46123,46124],{"class":141,"line":35193},[139,46125,35196],{"class":2512},[139,46127,46128,46130,46132,46134,46136,46138,46140],{"class":141,"line":35199},[139,46129,38661],{"class":145},[139,46131,11751],{"class":149},[139,46133,38666],{"class":145},[139,46135,2892],{"class":149},[139,46137,35013],{"class":145},[139,46139,2634],{"class":153},[139,46141,164],{"class":145},[139,46143,46144,46146,46148,46150,46152],{"class":141,"line":35219},[139,46145,38679],{"class":145},[139,46147,11751],{"class":149},[139,46149,35034],{"class":145},[139,46151,5232],{"class":149},[139,46153,35039],{"class":145},[139,46155,46156],{"class":141,"line":35235},[139,46157,38692],{"class":2512},[139,46159,46160,46162,46164,46166,46168],{"class":141,"line":35241},[139,46161,38697],{"class":145},[139,46163,11751],{"class":149},[139,46165,35013],{"class":145},[139,46167,2634],{"class":153},[139,46169,164],{"class":145},[139,46171,46172],{"class":141,"line":35255},[139,46173,35258],{"class":2512},[139,46175,46176],{"class":141,"line":35261},[139,46177,35264],{"class":2512},[139,46179,46180,46182,46184],{"class":141,"line":35267},[139,46181,35270],{"class":145},[139,46183,3019],{"class":149},[139,46185,35275],{"class":145},[139,46187,46188],{"class":141,"line":35278},[139,46189,35281],{"class":2512},[139,46191,46192],{"class":141,"line":35284},[139,46193,35287],{"class":2512},[139,46195,46196,46198,46200],{"class":141,"line":35290},[139,46197,35293],{"class":145},[139,46199,3019],{"class":149},[139,46201,35275],{"class":145},[139,46203,46204],{"class":141,"line":35300},[139,46205,35303],{"class":2512},[139,46207,46208,46210,46212],{"class":141,"line":35306},[139,46209,35309],{"class":145},[139,46211,3019],{"class":149},[139,46213,35314],{"class":145},[139,46215,46216],{"class":141,"line":35317},[139,46217,35320],{"class":2512},[139,46219,46220,46222,46224],{"class":141,"line":35323},[139,46221,35326],{"class":145},[139,46223,3019],{"class":149},[139,46225,35314],{"class":145},[139,46227,46228],{"class":141,"line":35333},[139,46229,843],{"emptyLinePlaceholder":842},[139,46231,46232],{"class":141,"line":35338},[139,46233,35341],{"class":2512},[139,46235,46236,46238,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268,46270,46272,46274],{"class":141,"line":35344},[139,46237,34698],{"class":153},[139,46239,157],{"class":145},[139,46241,5873],{"class":160},[139,46243,34706],{"class":153},[139,46245,35355],{"class":160},[139,46247,625],{"class":153},[139,46249,35360],{"class":149},[139,46251,631],{"class":153},[139,46253,35365],{"class":160},[139,46255,625],{"class":153},[139,46257,35360],{"class":149},[139,46259,631],{"class":153},[139,46261,5873],{"class":160},[139,46263,35376],{"class":145},[139,46265,855],{"class":149},[139,46267,410],{"class":153},[139,46269,35383],{"class":145},[139,46271,855],{"class":149},[139,46273,410],{"class":153},[139,46275,1454],{"class":145},[139,46277,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316],{"class":141,"line":35392},[139,46279,34698],{"class":153},[139,46281,157],{"class":145},[139,46283,5873],{"class":160},[139,46285,34706],{"class":153},[139,46287,35403],{"class":160},[139,46289,625],{"class":153},[139,46291,35360],{"class":149},[139,46293,631],{"class":153},[139,46295,35412],{"class":160},[139,46297,625],{"class":153},[139,46299,35360],{"class":149},[139,46301,631],{"class":153},[139,46303,5873],{"class":160},[139,46305,35423],{"class":145},[139,46307,855],{"class":149},[139,46309,410],{"class":153},[139,46311,35430],{"class":145},[139,46313,855],{"class":149},[139,46315,410],{"class":153},[139,46317,1454],{"class":145},[139,46319,46320],{"class":141,"line":35439},[139,46321,843],{"emptyLinePlaceholder":842},[139,46323,46324],{"class":141,"line":35444},[139,46325,35447],{"class":2512},[139,46327,46328,46330,46332,46334,46336,46338,46340],{"class":141,"line":35450},[139,46329,4780],{"class":149},[139,46331,35455],{"class":145},[139,46333,855],{"class":149},[139,46335,410],{"class":153},[139,46337,3373],{"class":145},[139,46339,958],{"class":149},[139,46341,35466],{"class":145},[139,46343,46344],{"class":141,"line":35469},[139,46345,35472],{"class":2512},[139,46347,46348,46350,46352,46354,46356,46358,46360],{"class":141,"line":35475},[139,46349,35478],{"class":145},[139,46351,2496],{"class":153},[139,46353,150],{"class":149},[139,46355,35485],{"class":145},[139,46357,855],{"class":149},[139,46359,410],{"class":153},[139,46361,424],{"class":145},[139,46363,46364],{"class":141,"line":35494},[139,46365,35497],{"class":2512},[139,46367,46368],{"class":141,"line":35500},[139,46369,35503],{"class":2512},[139,46371,46372,46374,46376],{"class":141,"line":35506},[139,46373,35509],{"class":145},[139,46375,150],{"class":149},[139,46377,34561],{"class":145},[139,46379,46380],{"class":141,"line":35516},[139,46381,843],{"emptyLinePlaceholder":842},[139,46383,46384],{"class":141,"line":35521},[139,46385,35524],{"class":2512},[139,46387,46388,46390,46392,46394,46396],{"class":141,"line":35527},[139,46389,35530],{"class":145},[139,46391,150],{"class":149},[139,46393,35535],{"class":145},[139,46395,855],{"class":149},[139,46397,35540],{"class":145},[139,46399,46400,46402,46404,46406,46408,46410,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434],{"class":141,"line":35543},[139,46401,34698],{"class":153},[139,46403,157],{"class":145},[139,46405,35550],{"class":160},[139,46407,625],{"class":153},[139,46409,35555],{"class":149},[139,46411,631],{"class":153},[139,46413,2979],{"class":160},[139,46415,625],{"class":153},[139,46417,35555],{"class":149},[139,46419,631],{"class":153},[139,46421,35568],{"class":160},[139,46423,35571],{"class":145},[139,46425,35574],{"class":149},[139,46427,3341],{"class":153},[139,46429,35579],{"class":145},[139,46431,2766],{"class":149},[139,46433,3341],{"class":153},[139,46435,207],{"class":145},[139,46437,46438],{"class":141,"line":35588},[139,46439,38976],{"class":2512},[139,46441,46442],{"class":141,"line":35594},[139,46443,38981],{"class":2512},[139,46445,46446,46448,46450],{"class":141,"line":35600},[139,46447,38986],{"class":145},[139,46449,35612],{"class":160},[139,46451,164],{"class":145},[139,46453,46454],{"class":141,"line":35606},[139,46455,35632],{"class":2512},[139,46457,46458,46460,46462,46464,46466,46468],{"class":141,"line":35617},[139,46459,35638],{"class":145},[139,46461,150],{"class":149},[139,46463,35643],{"class":145},[139,46465,35646],{"class":2111},[139,46467,150],{"class":149},[139,46469,3843],{"class":145},[139,46471,46472,46474,46476,46478],{"class":141,"line":35623},[139,46473,35656],{"class":160},[139,46475,3294],{"class":145},[139,46477,35661],{"class":153},[139,46479,35664],{"class":145},[139,46481,46482,46484],{"class":141,"line":35629},[139,46483,35670],{"class":160},[139,46485,35673],{"class":145},[139,46487,46488,46490],{"class":141,"line":35635},[139,46489,35679],{"class":160},[139,46491,35682],{"class":145},[139,46493,46494,46496],{"class":141,"line":35653},[139,46495,35688],{"class":160},[139,46497,35691],{"class":145},[139,46499,46500,46502],{"class":141,"line":35667},[139,46501,35697],{"class":160},[139,46503,35700],{"class":145},[139,46505,46506],{"class":141,"line":35676},[139,46507,35706],{"class":145},[139,46509,46510],{"class":141,"line":35685},[139,46511,35712],{"class":2512},[139,46513,46514,46516],{"class":141,"line":35694},[139,46515,978],{"class":149},[139,46517,35720],{"class":145},[139,46519,46520],{"class":141,"line":35703},[139,46521,843],{"emptyLinePlaceholder":842},[139,46523,46524],{"class":141,"line":35709},[139,46525,35731],{"class":2512},[139,46527,46528,46530,46532],{"class":141,"line":35715},[139,46529,778],{"class":149},[139,46531,35739],{"class":781},[139,46533,35742],{"class":145},[139,46535,46536],{"class":141,"line":35723},[139,46537,35748],{"class":2512},[139,46539,46540,46542,46544,46546,46548,46550,46552,46554],{"class":141,"line":35728},[139,46541,35754],{"class":145},[139,46543,33942],{"class":2111},[139,46545,150],{"class":149},[139,46547,157],{"class":145},[139,46549,2934],{"class":153},[139,46551,2816],{"class":145},[139,46553,1476],{"class":153},[139,46555,207],{"class":145},[139,46557,46558],{"class":141,"line":35734},[139,46559,35774],{"class":2512},[139,46561,46562],{"class":141,"line":35745},[139,46563,35780],{"class":2512},[139,46565,46566],{"class":141,"line":35751},[139,46567,35786],{"class":2512},[139,46569,46570,46572,46574,46576,46578,46580,46582],{"class":141,"line":35771},[139,46571,33976],{"class":145},[139,46573,410],{"class":153},[139,46575,2816],{"class":145},[139,46577,416],{"class":153},[139,46579,2816],{"class":145},[139,46581,410],{"class":153},[139,46583,164],{"class":145},[139,46585,46586],{"class":141,"line":35777},[139,46587,35809],{"class":2512},[139,46589,46590],{"class":141,"line":35783},[139,46591,35815],{"class":2512},[139,46593,46594],{"class":141,"line":35789},[139,46595,35821],{"class":2512},[139,46597,46598],{"class":141,"line":35806},[139,46599,35827],{"class":2512},[139,46601,46602],{"class":141,"line":35812},[139,46603,35833],{"class":2512},[139,46605,46606,46608,46610,46612,46614,46616,46618,46620,46622],{"class":141,"line":35818},[139,46607,35839],{"class":145},[139,46609,35842],{"class":160},[139,46611,35845],{"class":145},[139,46613,35848],{"class":160},[139,46615,2816],{"class":145},[139,46617,35853],{"class":2111},[139,46619,150],{"class":149},[139,46621,35858],{"class":160},[139,46623,164],{"class":145},[139,46625,46626,46628,46630,46632,46634,46636,46638,46640,46642],{"class":141,"line":35824},[139,46627,35839],{"class":145},[139,46629,35842],{"class":160},[139,46631,35870],{"class":145},[139,46633,35873],{"class":160},[139,46635,2816],{"class":145},[139,46637,35853],{"class":2111},[139,46639,150],{"class":149},[139,46641,35882],{"class":160},[139,46643,164],{"class":145},[139,46645,46646],{"class":141,"line":35830},[139,46647,35890],{"class":2512},[139,46649,46650],{"class":141,"line":35836},[139,46651,35896],{"class":145},[139,46653,46654],{"class":141,"line":35863},[139,46655,35902],{"class":2512},[139,46657,46658,46660,46662],{"class":141,"line":35887},[139,46659,35908],{"class":145},[139,46661,35911],{"class":160},[139,46663,164],{"class":145},[139,46665,46666,46668,46670],{"class":141,"line":35893},[139,46667,35919],{"class":145},[139,46669,35922],{"class":160},[139,46671,164],{"class":145},[139,46673,46674],{"class":141,"line":35899},[139,46675,35930],{"class":2512},[139,46677,46678,46680,46682,46684,46686,46688,46690],{"class":141,"line":35905},[139,46679,33976],{"class":145},[139,46681,410],{"class":153},[139,46683,2816],{"class":145},[139,46685,416],{"class":153},[139,46687,2816],{"class":145},[139,46689,416],{"class":153},[139,46691,164],{"class":145},[139,46693,46694,46696,46698,46700,46702,46704,46706,46708,46710],{"class":141,"line":35916},[139,46695,35839],{"class":145},[139,46697,35842],{"class":160},[139,46699,35957],{"class":145},[139,46701,35848],{"class":160},[139,46703,2816],{"class":145},[139,46705,35853],{"class":2111},[139,46707,150],{"class":149},[139,46709,35968],{"class":160},[139,46711,164],{"class":145},[139,46713,46714,46716,46718,46720,46722,46724,46726,46728,46730],{"class":141,"line":35927},[139,46715,35839],{"class":145},[139,46717,35842],{"class":160},[139,46719,35980],{"class":145},[139,46721,35873],{"class":160},[139,46723,2816],{"class":145},[139,46725,35853],{"class":2111},[139,46727,150],{"class":149},[139,46729,35991],{"class":160},[139,46731,164],{"class":145},[139,46733,46734],{"class":141,"line":35933},[139,46735,35999],{"class":2512},[139,46737,46738],{"class":141,"line":35950},[139,46739,35896],{"class":145},[139,46741,46742,46744,46746],{"class":141,"line":35973},[139,46743,35908],{"class":145},[139,46745,35842],{"class":160},[139,46747,164],{"class":145},[139,46749,46750,46752,46754],{"class":141,"line":35996},[139,46751,35919],{"class":145},[139,46753,36021],{"class":160},[139,46755,164],{"class":145},[139,46757,46758],{"class":141,"line":36002},[139,46759,36029],{"class":145},[139,46761,46762],{"class":141,"line":36007},[139,46763,843],{"emptyLinePlaceholder":842},[139,46765,46766],{"class":141,"line":36016},[139,46767,36040],{"class":2512},[139,46769,46770,46772,46774,46776,46778],{"class":141,"line":36026},[139,46771,1729],{"class":149},[139,46773,1732],{"class":153},[139,46775,5232],{"class":149},[139,46777,33476],{"class":160},[139,46779,246],{"class":145},[139,46781,46782],{"class":141,"line":36032},[139,46783,36059],{"class":2512},[139,46785,46786,46789,46791],{"class":141,"line":36037},[139,46787,46788],{"class":145},"    GoogLeNet",[139,46790,150],{"class":149},[139,46792,46793],{"class":145},"GoogLeNet(Inception)\n",[139,46795,46796,46798,46800],{"class":141,"line":36043},[139,46797,36076],{"class":145},[139,46799,150],{"class":149},[139,46801,36081],{"class":145},[139,46803,46804,46806,46808,46811,46813,46815,46817],{"class":141,"line":36056},[139,46805,35638],{"class":145},[139,46807,150],{"class":149},[139,46809,46810],{"class":145},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[139,46812,36094],{"class":2111},[139,46814,150],{"class":149},[139,46816,3383],{"class":153},[139,46818,164],{"class":145},[139,46820,46821],{"class":141,"line":36062},[139,46822,36106],{"class":145},[1760,46824,46825],{"start":254},[1763,46826,42816],{},[130,46828,46830],{"className":132,"code":46829,"language":134,"meta":135,"style":135},"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",[50,46831,46832,46838,46848,46858,46862,46872,46883,46887,46891,46895,46903,46919,46929,46945,46955,46969,46973,46983,46993,47003,47009,47013,47017,47025,47029,47045,47053,47057,47061,47069,47077,47081,47085,47089,47093,47099,47103,47113,47121,47129,47133,47137,47141,47149,47153,47169,47173,47177,47181,47193,47197,47209,47213,47217,47229,47233,47243,47247,47251,47263,47267,47275,47279,47283,47291,47295,47303,47307,47311,47315,47319,47323,47339,47347,47351,47355,47403,47409,47413,47423,47431,47439,47443,47447,47451,47455,47463,47467,47483,47487,47495,47503],{"__ignoreMap":135},[139,46833,46834,46836],{"class":141,"line":142},[139,46835,1064],{"class":149},[139,46837,32651],{"class":145},[139,46839,46840,46842,46844,46846],{"class":141,"line":210},[139,46841,1064],{"class":149},[139,46843,33664],{"class":145},[139,46845,1035],{"class":149},[139,46847,33669],{"class":145},[139,46849,46850,46852,46854,46856],{"class":141,"line":254},[139,46851,1265],{"class":149},[139,46853,33647],{"class":145},[139,46855,1064],{"class":149},[139,46857,33652],{"class":145},[139,46859,46860],{"class":141,"line":262},[139,46861,36167],{"class":2512},[139,46863,46864,46866,46868,46870],{"class":141,"line":313},[139,46865,1265],{"class":149},[139,46867,33618],{"class":145},[139,46869,1064],{"class":149},[139,46871,33623],{"class":145},[139,46873,46874,46876,46878,46880],{"class":141,"line":462},[139,46875,1265],{"class":149},[139,46877,34162],{"class":145},[139,46879,1064],{"class":149},[139,46881,46882],{"class":145}," GoogLeNet,Inception\n",[139,46884,46885],{"class":141,"line":474},[139,46886,843],{"emptyLinePlaceholder":842},[139,46888,46889],{"class":141,"line":484},[139,46890,843],{"emptyLinePlaceholder":842},[139,46892,46893],{"class":141,"line":989},[139,46894,36196],{"class":2512},[139,46896,46897,46899,46901],{"class":141,"line":994},[139,46898,778],{"class":149},[139,46900,36203],{"class":781},[139,46902,34200],{"class":145},[139,46904,46905,46907,46909,46911,46913,46915,46917],{"class":141,"line":999},[139,46906,36210],{"class":145},[139,46908,150],{"class":149},[139,46910,33704],{"class":145},[139,46912,33707],{"class":2111},[139,46914,150],{"class":149},[139,46916,33712],{"class":160},[139,46918,33715],{"class":145},[139,46920,46921,46923,46925,46927],{"class":141,"line":1006},[139,46922,36227],{"class":2111},[139,46924,150],{"class":149},[139,46926,2203],{"class":153},[139,46928,33715],{"class":145},[139,46930,46931,46933,46935,46937,46939,46941,46943],{"class":141,"line":1027},[139,46932,36238],{"class":2111},[139,46934,150],{"class":149},[139,46936,33742],{"class":145},[139,46938,33745],{"class":2111},[139,46940,150],{"class":149},[139,46942,37692],{"class":153},[139,46944,33753],{"class":145},[139,46946,46947,46949,46951,46953],{"class":141,"line":1040},[139,46948,36255],{"class":2111},[139,46950,150],{"class":149},[139,46952,33725],{"class":153},[139,46954,164],{"class":145},[139,46956,46957,46959,46961,46963,46965,46967],{"class":141,"line":2160},[139,46958,36266],{"class":145},[139,46960,150],{"class":149},[139,46962,33783],{"class":145},[139,46964,33786],{"class":2111},[139,46966,150],{"class":149},[139,46968,36277],{"class":145},[139,46970,46971],{"class":141,"line":2188},[139,46972,36282],{"class":2512},[139,46974,46975,46977,46979,46981],{"class":141,"line":3944},[139,46976,36287],{"class":2111},[139,46978,150],{"class":149},[139,46980,410],{"class":153},[139,46982,33715],{"class":145},[139,46984,46985,46987,46989,46991],{"class":141,"line":3963},[139,46986,36298],{"class":2111},[139,46988,150],{"class":149},[139,46990,33725],{"class":153},[139,46992,33715],{"class":145},[139,46994,46995,46997,46999,47001],{"class":141,"line":3968},[139,46996,36309],{"class":2111},[139,46998,150],{"class":149},[139,47000,2634],{"class":153},[139,47002,164],{"class":145},[139,47004,47005,47007],{"class":141,"line":3982},[139,47006,978],{"class":149},[139,47008,36322],{"class":145},[139,47010,47011],{"class":141,"line":3987},[139,47012,843],{"emptyLinePlaceholder":842},[139,47014,47015],{"class":141,"line":4014},[139,47016,36331],{"class":2512},[139,47018,47019,47021,47023],{"class":141,"line":4019},[139,47020,778],{"class":149},[139,47022,36338],{"class":781},[139,47024,36341],{"class":145},[139,47026,47027],{"class":141,"line":4036},[139,47028,36346],{"class":2512},[139,47030,47031,47033,47035,47037,47039,47041,47043],{"class":141,"line":4041},[139,47032,33488],{"class":145},[139,47034,150],{"class":149},[139,47036,33495],{"class":160},[139,47038,3992],{"class":149},[139,47040,33500],{"class":145},[139,47042,656],{"class":149},[139,47044,36363],{"class":160},[139,47046,47047,47049,47051],{"class":141,"line":4046},[139,47048,33540],{"class":145},[139,47050,150],{"class":149},[139,47052,34536],{"class":145},[139,47054,47055],{"class":141,"line":4051},[139,47056,843],{"emptyLinePlaceholder":842},[139,47058,47059],{"class":141,"line":4065},[139,47060,36380],{"class":2512},[139,47062,47063,47065,47067],{"class":141,"line":4070},[139,47064,36385],{"class":145},[139,47066,150],{"class":149},[139,47068,34589],{"class":153},[139,47070,47071,47073,47075],{"class":141,"line":4860},[139,47072,36394],{"class":145},[139,47074,150],{"class":149},[139,47076,5367],{"class":153},[139,47078,47079],{"class":141,"line":4874},[139,47080,843],{"emptyLinePlaceholder":842},[139,47082,47083],{"class":141,"line":4882},[139,47084,36407],{"class":2512},[139,47086,47087],{"class":141,"line":4887},[139,47088,36412],{"class":2512},[139,47090,47091],{"class":141,"line":4893},[139,47092,36417],{"class":2512},[139,47094,47095,47097],{"class":141,"line":4899},[139,47096,2097],{"class":149},[139,47098,35131],{"class":145},[139,47100,47101],{"class":141,"line":4904},[139,47102,36428],{"class":2512},[139,47104,47105,47107,47109,47111],{"class":141,"line":10222},[139,47106,5684],{"class":149},[139,47108,36435],{"class":145},[139,47110,1976],{"class":149},[139,47112,36440],{"class":145},[139,47114,47115,47117,47119],{"class":141,"line":10246},[139,47116,36445],{"class":145},[139,47118,150],{"class":149},[139,47120,36450],{"class":145},[139,47122,47123,47125,47127],{"class":141,"line":10251},[139,47124,36455],{"class":145},[139,47126,150],{"class":149},[139,47128,36460],{"class":145},[139,47130,47131],{"class":141,"line":10257},[139,47132,36465],{"class":2512},[139,47134,47135],{"class":141,"line":10284},[139,47136,35122],{"class":145},[139,47138,47139],{"class":141,"line":10289},[139,47140,36474],{"class":2512},[139,47142,47143,47145,47147],{"class":141,"line":10295},[139,47144,34907],{"class":145},[139,47146,150],{"class":149},[139,47148,36483],{"class":145},[139,47150,47151],{"class":141,"line":10307},[139,47152,36488],{"class":2512},[139,47154,47155,47157,47159,47161,47163,47165,47167],{"class":141,"line":10319},[139,47156,34924],{"class":145},[139,47158,150],{"class":149},[139,47160,34929],{"class":145},[139,47162,34932],{"class":2111},[139,47164,150],{"class":149},[139,47166,410],{"class":153},[139,47168,164],{"class":145},[139,47170,47171],{"class":141,"line":10331},[139,47172,36509],{"class":2512},[139,47174,47175],{"class":141,"line":11990},[139,47176,36514],{"class":2512},[139,47178,47179],{"class":141,"line":12015},[139,47180,36519],{"class":2512},[139,47182,47183,47185,47187,47189,47191],{"class":141,"line":12038},[139,47184,36524],{"class":145},[139,47186,11751],{"class":149},[139,47188,35034],{"class":145},[139,47190,5232],{"class":149},[139,47192,36533],{"class":145},[139,47194,47195],{"class":141,"line":12062},[139,47196,36538],{"class":2512},[139,47198,47199,47201,47203,47205,47207],{"class":141,"line":12067},[139,47200,36543],{"class":145},[139,47202,11751],{"class":149},[139,47204,36548],{"class":145},[139,47206,2634],{"class":153},[139,47208,164],{"class":145},[139,47210,47211],{"class":141,"line":12072},[139,47212,843],{"emptyLinePlaceholder":842},[139,47214,47215],{"class":141,"line":12077},[139,47216,36561],{"class":2512},[139,47218,47219,47221,47223,47225,47227],{"class":141,"line":12086},[139,47220,36566],{"class":145},[139,47222,150],{"class":149},[139,47224,36571],{"class":145},[139,47226,3019],{"class":149},[139,47228,36576],{"class":145},[139,47230,47231],{"class":141,"line":12091},[139,47232,36581],{"class":2512},[139,47234,47235,47237,47239,47241],{"class":141,"line":12097},[139,47236,34698],{"class":153},[139,47238,157],{"class":145},[139,47240,36590],{"class":160},[139,47242,36593],{"class":145},[139,47244,47245],{"class":141,"line":12118},[139,47246,843],{"emptyLinePlaceholder":842},[139,47248,47249],{"class":141,"line":12124},[139,47250,36602],{"class":2512},[139,47252,47253,47255,47257,47259,47261],{"class":141,"line":12138},[139,47254,1729],{"class":149},[139,47256,1732],{"class":153},[139,47258,5232],{"class":149},[139,47260,33476],{"class":160},[139,47262,246],{"class":145},[139,47264,47265],{"class":141,"line":12144},[139,47266,36619],{"class":2512},[139,47268,47269,47271,47273],{"class":141,"line":12171},[139,47270,33540],{"class":145},[139,47272,150],{"class":149},[139,47274,46793],{"class":145},[139,47276,47277],{"class":141,"line":12180},[139,47278,36632],{"class":2512},[139,47280,47281],{"class":141,"line":12186},[139,47282,36637],{"class":2512},[139,47284,47285,47287,47289],{"class":141,"line":12194},[139,47286,36642],{"class":145},[139,47288,36645],{"class":160},[139,47290,207],{"class":145},[139,47292,47293],{"class":141,"line":12199},[139,47294,36652],{"class":2512},[139,47296,47297,47299,47301],{"class":141,"line":18871},[139,47298,36266],{"class":145},[139,47300,150],{"class":149},[139,47302,36661],{"class":145},[139,47304,47305],{"class":141,"line":18877},[139,47306,36666],{"class":2512},[139,47308,47309],{"class":141,"line":18900},[139,47310,36671],{"class":145},[139,47312,47313],{"class":141,"line":18906},[139,47314,843],{"emptyLinePlaceholder":842},[139,47316,47317],{"class":141,"line":18929},[139,47318,36680],{"class":2512},[139,47320,47321],{"class":141,"line":18943},[139,47322,36685],{"class":2512},[139,47324,47325,47327,47329,47331,47333,47335,47337],{"class":141,"line":18963},[139,47326,33488],{"class":145},[139,47328,150],{"class":149},[139,47330,33495],{"class":160},[139,47332,3992],{"class":149},[139,47334,33500],{"class":145},[139,47336,656],{"class":149},[139,47338,36363],{"class":160},[139,47340,47341,47343,47345],{"class":141,"line":18969},[139,47342,33540],{"class":145},[139,47344,150],{"class":149},[139,47346,34536],{"class":145},[139,47348,47349],{"class":141,"line":18980},[139,47350,36714],{"class":2512},[139,47352,47353],{"class":141,"line":19003},[139,47354,36719],{"class":2512},[139,47356,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387,47389,47391,47393,47395,47397,47399,47401],{"class":141,"line":19025},[139,47358,36724],{"class":145},[139,47360,150],{"class":149},[139,47362,3325],{"class":145},[139,47364,36731],{"class":160},[139,47366,2816],{"class":145},[139,47368,36736],{"class":160},[139,47370,2816],{"class":145},[139,47372,36741],{"class":160},[139,47374,2816],{"class":145},[139,47376,36746],{"class":160},[139,47378,2816],{"class":145},[139,47380,36751],{"class":160},[139,47382,2816],{"class":145},[139,47384,36756],{"class":160},[139,47386,2816],{"class":145},[139,47388,36761],{"class":160},[139,47390,2816],{"class":145},[139,47392,36766],{"class":160},[139,47394,2816],{"class":145},[139,47396,36771],{"class":160},[139,47398,2816],{"class":145},[139,47400,36776],{"class":160},[139,47402,424],{"class":145},[139,47404,47405,47407],{"class":141,"line":19030},[139,47406,2097],{"class":149},[139,47408,35131],{"class":145},[139,47410,47411],{"class":141,"line":19036},[139,47412,36789],{"class":2512},[139,47414,47415,47417,47419,47421],{"class":141,"line":19050},[139,47416,5684],{"class":149},[139,47418,36796],{"class":145},[139,47420,1976],{"class":149},[139,47422,36440],{"class":145},[139,47424,47425,47427,47429],{"class":141,"line":19063},[139,47426,34857],{"class":145},[139,47428,150],{"class":149},[139,47430,34862],{"class":145},[139,47432,47433,47435,47437],{"class":141,"line":19068},[139,47434,34872],{"class":145},[139,47436,150],{"class":149},[139,47438,34877],{"class":145},[139,47440,47441],{"class":141,"line":19082},[139,47442,843],{"emptyLinePlaceholder":842},[139,47444,47445],{"class":141,"line":19087},[139,47446,36825],{"class":2512},[139,47448,47449],{"class":141,"line":19093},[139,47450,35122],{"class":145},[139,47452,47453],{"class":141,"line":19098},[139,47454,36834],{"class":2512},[139,47456,47457,47459,47461],{"class":141,"line":19112},[139,47458,34907],{"class":145},[139,47460,150],{"class":149},[139,47462,34912],{"class":145},[139,47464,47465],{"class":141,"line":19117},[139,47466,36847],{"class":2512},[139,47468,47469,47471,47473,47475,47477,47479,47481],{"class":141,"line":19122},[139,47470,34924],{"class":145},[139,47472,150],{"class":149},[139,47474,34929],{"class":145},[139,47476,34932],{"class":2111},[139,47478,150],{"class":149},[139,47480,410],{"class":153},[139,47482,164],{"class":145},[139,47484,47485],{"class":141,"line":19136},[139,47486,36868],{"class":2512},[139,47488,47489,47491,47493],{"class":141,"line":19148},[139,47490,36873],{"class":145},[139,47492,150],{"class":149},[139,47494,36878],{"class":145},[139,47496,47497,47499,47501],{"class":141,"line":19153},[139,47498,36883],{"class":145},[139,47500,150],{"class":149},[139,47502,36888],{"class":145},[139,47504,47505,47507,47509,47511,47513,47515,47517,47519],{"class":141,"line":19166},[139,47506,36893],{"class":153},[139,47508,157],{"class":145},[139,47510,36898],{"class":160},[139,47512,36901],{"class":145},[139,47514,36904],{"class":160},[139,47516,2816],{"class":145},[139,47518,36909],{"class":160},[139,47520,36912],{"class":145},[1217,47522,47524],{"id":47523},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47526,47527],{},"猫狗分类任务",[19,47529,47530],{},"划分数据集和验证集",[130,47532,47534],{"className":132,"code":47533,"language":134,"meta":135,"style":135},"# 创建脚本，用于划分数据集和验证集\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",[50,47535,47536,47541,47547,47552,47563,47569,47573,47583,47596,47605,47609,47614,47624,47644,47648,47653,47663,47674,47687,47691,47696,47705,47715,47726,47730,47735,47745,47749,47754,47759,47764,47769,47774,47778,47788,47815,47828,47839,47866,47871,47876,47890,47895,47907,47922,47937,47945,47949,47954,47960,47972,47985,47990,47995,48000,48050,48056,48060],{"__ignoreMap":135},[139,47537,47538],{"class":141,"line":142},[139,47539,47540],{"class":2512},"# 创建脚本，用于划分数据集和验证集\n",[139,47542,47543,47545],{"class":141,"line":210},[139,47544,1064],{"class":149},[139,47546,1611],{"class":145},[139,47548,47549],{"class":141,"line":254},[139,47550,47551],{"class":2512},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[139,47553,47554,47556,47559,47561],{"class":141,"line":262},[139,47555,1265],{"class":149},[139,47557,47558],{"class":145}," shutil ",[139,47560,1064],{"class":149},[139,47562,34071],{"class":145},[139,47564,47565,47567],{"class":141,"line":313},[139,47566,1064],{"class":149},[139,47568,1232],{"class":145},[139,47570,47571],{"class":141,"line":462},[139,47572,843],{"emptyLinePlaceholder":842},[139,47574,47575,47577,47580],{"class":141,"line":474},[139,47576,778],{"class":149},[139,47578,47579],{"class":781}," mkfile",[139,47581,47582],{"class":145},"(file):\n",[139,47584,47585,47587,47589,47592,47594],{"class":141,"line":484},[139,47586,790],{"class":149},[139,47588,2077],{"class":149},[139,47590,47591],{"class":145}," os.path.exists(",[139,47593,2137],{"class":2111},[139,47595,558],{"class":145},[139,47597,47598,47601,47603],{"class":141,"line":989},[139,47599,47600],{"class":145},"        os.makedirs(",[139,47602,2137],{"class":2111},[139,47604,164],{"class":145},[139,47606,47607],{"class":141,"line":994},[139,47608,843],{"emptyLinePlaceholder":842},[139,47610,47611],{"class":141,"line":999},[139,47612,47613],{"class":2512},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[139,47615,47616,47619,47621],{"class":141,"line":1006},[139,47617,47618],{"class":145},"file_path",[139,47620,150],{"class":149},[139,47622,47623],{"class":160},"'data_cat_dog'\n",[139,47625,47626,47629,47631,47634,47636,47639,47641],{"class":141,"line":1027},[139,47627,47628],{"class":145},"flower_class",[139,47630,150],{"class":149},[139,47632,47633],{"class":145},"[cla ",[139,47635,1970],{"class":149},[139,47637,47638],{"class":145}," cla ",[139,47640,1976],{"class":149},[139,47642,47643],{"class":145}," os.listdir(file_path)]\n",[139,47645,47646],{"class":141,"line":1040},[139,47647,843],{"emptyLinePlaceholder":842},[139,47649,47650],{"class":141,"line":2160},[139,47651,47652],{"class":2512},"# 创建训练集train文件夹\n",[139,47654,47655,47658,47661],{"class":141,"line":2188},[139,47656,47657],{"class":145},"mkfile(",[139,47659,47660],{"class":160},"'data\u002Ftrain'",[139,47662,164],{"class":145},[139,47664,47665,47667,47669,47671],{"class":141,"line":3944},[139,47666,1970],{"class":149},[139,47668,47638],{"class":145},[139,47670,1976],{"class":149},[139,47672,47673],{"class":145}," flower_class:\n",[139,47675,47676,47679,47682,47684],{"class":141,"line":3963},[139,47677,47678],{"class":145},"    mkfile(",[139,47680,47681],{"class":160},"'data\u002Ftrain\u002F'",[139,47683,1147],{"class":149},[139,47685,47686],{"class":145},"cla)\n",[139,47688,47689],{"class":141,"line":3968},[139,47690,843],{"emptyLinePlaceholder":842},[139,47692,47693],{"class":141,"line":3982},[139,47694,47695],{"class":2512},"# 创建验证集val文件夹\n",[139,47697,47698,47700,47703],{"class":141,"line":3987},[139,47699,47657],{"class":145},[139,47701,47702],{"class":160},"'data\u002Ftest'",[139,47704,164],{"class":145},[139,47706,47707,47709,47711,47713],{"class":141,"line":4014},[139,47708,1970],{"class":149},[139,47710,47638],{"class":145},[139,47712,1976],{"class":149},[139,47714,47673],{"class":145},[139,47716,47717,47719,47722,47724],{"class":141,"line":4019},[139,47718,47678],{"class":145},[139,47720,47721],{"class":160},"'data\u002Ftest\u002F'",[139,47723,1147],{"class":149},[139,47725,47686],{"class":145},[139,47727,47728],{"class":141,"line":4036},[139,47729,843],{"emptyLinePlaceholder":842},[139,47731,47732],{"class":141,"line":4041},[139,47733,47734],{"class":2512},"# 划分比例，训练集：测试集=9：1\n",[139,47736,47737,47740,47742],{"class":141,"line":4046},[139,47738,47739],{"class":145},"split_rate",[139,47741,150],{"class":149},[139,47743,47744],{"class":153},"0.1\n",[139,47746,47747],{"class":141,"line":4051},[139,47748,843],{"emptyLinePlaceholder":842},[139,47750,47751],{"class":141,"line":4065},[139,47752,47753],{"class":2512},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[139,47755,47756],{"class":141,"line":4070},[139,47757,47758],{"class":2512},"# cla_path：当前类别的原始图片路径\n",[139,47760,47761],{"class":141,"line":4860},[139,47762,47763],{"class":2512},"# images：当前类别下所有图片的文件名列表\n",[139,47765,47766],{"class":141,"line":4874},[139,47767,47768],{"class":2512},"# num：该类别图片总数\n",[139,47770,47771],{"class":141,"line":4882},[139,47772,47773],{"class":2512},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[139,47775,47776],{"class":141,"line":4887},[139,47777,843],{"emptyLinePlaceholder":842},[139,47779,47780,47782,47784,47786],{"class":141,"line":4893},[139,47781,1970],{"class":149},[139,47783,47638],{"class":145},[139,47785,1976],{"class":149},[139,47787,47673],{"class":145},[139,47789,47790,47793,47795,47798,47800,47803,47806,47808,47810,47812],{"class":141,"line":4899},[139,47791,47792],{"class":145},"    cla_path ",[139,47794,150],{"class":149},[139,47796,47797],{"class":145}," file_path ",[139,47799,1147],{"class":149},[139,47801,47802],{"class":160}," '\u002F'",[139,47804,47805],{"class":149}," +",[139,47807,47638],{"class":145},[139,47809,1147],{"class":149},[139,47811,47802],{"class":160},[139,47813,47814],{"class":2512},"  # 某一类别的子目录\n",[139,47816,47817,47820,47822,47825],{"class":141,"line":4904},[139,47818,47819],{"class":145},"    images ",[139,47821,150],{"class":149},[139,47823,47824],{"class":145}," os.listdir(cla_path)  ",[139,47826,47827],{"class":2512},"# iamges 列表存储了该目录下所有图像的名称\n",[139,47829,47830,47832,47834,47836],{"class":141,"line":10222},[139,47831,512],{"class":145},[139,47833,150],{"class":149},[139,47835,9605],{"class":153},[139,47837,47838],{"class":145},"(images)\n",[139,47840,47841,47844,47846,47849,47851,47853,47855,47858,47860,47863],{"class":141,"line":10246},[139,47842,47843],{"class":145},"    eval_index ",[139,47845,150],{"class":149},[139,47847,47848],{"class":145}," random.sample(images, ",[139,47850,2929],{"class":2111},[139,47852,150],{"class":149},[139,47854,2461],{"class":153},[139,47856,47857],{"class":145},"(num ",[139,47859,2892],{"class":149},[139,47861,47862],{"class":145}," split_rate))  ",[139,47864,47865],{"class":2512},"# 从images列表中随机抽取 k 个图像名称\n",[139,47867,47868],{"class":141,"line":10251},[139,47869,47870],{"class":2512},"    # 遍历该类别下的所有图片\n",[139,47872,47873],{"class":141,"line":10257},[139,47874,47875],{"class":2512},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[139,47877,47878,47880,47883,47885,47887],{"class":141,"line":10284},[139,47879,5482],{"class":149},[139,47881,47882],{"class":145}," index, image ",[139,47884,1976],{"class":149},[139,47886,33855],{"class":153},[139,47888,47889],{"class":145},"(images):\n",[139,47891,47892],{"class":141,"line":10289},[139,47893,47894],{"class":2512},"        # eval_index 中保存验证集val的图像名称\n",[139,47896,47897,47899,47902,47904],{"class":141,"line":10295},[139,47898,4780],{"class":149},[139,47900,47901],{"class":145}," image ",[139,47903,1976],{"class":149},[139,47905,47906],{"class":145}," eval_index:\n",[139,47908,47909,47912,47914,47917,47919],{"class":141,"line":10307},[139,47910,47911],{"class":145},"            image_path ",[139,47913,150],{"class":149},[139,47915,47916],{"class":145}," cla_path ",[139,47918,1147],{"class":149},[139,47920,47921],{"class":145}," image\n",[139,47923,47924,47927,47929,47932,47934],{"class":141,"line":10319},[139,47925,47926],{"class":145},"            new_path ",[139,47928,150],{"class":149},[139,47930,47931],{"class":160}," 'data\u002Ftest\u002F'",[139,47933,47805],{"class":149},[139,47935,47936],{"class":145}," cla\n",[139,47938,47939,47942],{"class":141,"line":10331},[139,47940,47941],{"class":145},"            copy(image_path, new_path)  ",[139,47943,47944],{"class":2512},"# 将选中的图像复制到新路径\n",[139,47946,47947],{"class":141,"line":11990},[139,47948,843],{"emptyLinePlaceholder":842},[139,47950,47951],{"class":141,"line":12015},[139,47952,47953],{"class":2512},"        # 其余的图像保存在训练集train中\n",[139,47955,47956,47958],{"class":141,"line":12038},[139,47957,4817],{"class":149},[139,47959,246],{"class":145},[139,47961,47962,47964,47966,47968,47970],{"class":141,"line":12062},[139,47963,47911],{"class":145},[139,47965,150],{"class":149},[139,47967,47916],{"class":145},[139,47969,1147],{"class":149},[139,47971,47921],{"class":145},[139,47973,47974,47976,47978,47981,47983],{"class":141,"line":12067},[139,47975,47926],{"class":145},[139,47977,150],{"class":149},[139,47979,47980],{"class":160}," 'data\u002Ftrain\u002F'",[139,47982,47805],{"class":149},[139,47984,47936],{"class":145},[139,47986,47987],{"class":141,"line":12072},[139,47988,47989],{"class":145},"            copy(image_path, new_path)\n",[139,47991,47992],{"class":141,"line":12077},[139,47993,47994],{"class":2512},"            # 打印进度条信息\n",[139,47996,47997],{"class":141,"line":12086},[139,47998,47999],{"class":2512},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[139,48001,48002,48004,48006,48008,48011,48013,48015,48018,48020,48022,48024,48027,48030,48032,48034,48037,48040,48042,48044,48047],{"class":141,"line":12091},[139,48003,34698],{"class":153},[139,48005,157],{"class":145},[139,48007,634],{"class":160},[139,48009,48010],{"class":153},"\\r",[139,48012,3325],{"class":160},[139,48014,34706],{"class":153},[139,48016,48017],{"class":160},"] processing [",[139,48019,34706],{"class":153},[139,48021,3019],{"class":160},[139,48023,34706],{"class":153},[139,48025,48026],{"class":160},"]\"",[139,48028,48029],{"class":145},".format(cla, index ",[139,48031,1147],{"class":149},[139,48033,27381],{"class":153},[139,48035,48036],{"class":145},", num), ",[139,48038,48039],{"class":2111},"end",[139,48041,150],{"class":149},[139,48043,9926],{"class":160},[139,48045,48046],{"class":145},")  ",[139,48048,48049],{"class":2512},"# processing bar\n",[139,48051,48052,48054],{"class":141,"line":12097},[139,48053,302],{"class":153},[139,48055,4262],{"class":145},[139,48057,48058],{"class":141,"line":12118},[139,48059,843],{"emptyLinePlaceholder":842},[139,48061,48062,48064,48066,48069],{"class":141,"line":12124},[139,48063,213],{"class":153},[139,48065,157],{"class":145},[139,48067,48068],{"class":160},"\"processing done!\"",[139,48070,164],{"class":145},[19,48072,48073],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24265,48075,48077],{"id":48076},"_242模型代码","2.4.2.模型代码",[19,48079,48080],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[130,48082,48084],{"className":132,"code":48083,"language":134,"meta":135,"style":135},"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",[50,48085,48086,48092,48102,48112,48116,48132,48140,48154,48164,48168,48198,48202,48236,48282,48286,48320,48366,48370,48374,48408,48438,48442,48450,48464,48486,48508,48526,48530,48544,48548,48552,48568,48572,48580,48594,48604,48648,48652,48680,48684,48694,48722,48726,48762,48766,48794,48798,48808,48840,48872,48900,48904,48914,48946,48978,49010,49042,49074,49102,49106,49116,49148,49180,49192,49196,49208,49212,49216,49228,49236,49256,49260,49264,49268,49272,49276,49280,49294,49302,49310,49322,49336,49344,49348,49356,49366,49376,49386,49396,49406,49412,49416,49420,49432,49452,49460],{"__ignoreMap":135},[139,48087,48088,48090],{"class":141,"line":142},[139,48089,1064],{"class":149},[139,48091,32651],{"class":145},[139,48093,48094,48096,48098,48100],{"class":141,"line":210},[139,48095,1265],{"class":149},[139,48097,32993],{"class":145},[139,48099,1064],{"class":149},[139,48101,32998],{"class":145},[139,48103,48104,48106,48108,48110],{"class":141,"line":254},[139,48105,1265],{"class":149},[139,48107,33010],{"class":145},[139,48109,1064],{"class":149},[139,48111,33015],{"class":145},[139,48113,48114],{"class":141,"line":262},[139,48115,843],{"emptyLinePlaceholder":842},[139,48117,48118,48120,48122,48124,48126,48128,48130],{"class":141,"line":313},[139,48119,915],{"class":149},[139,48121,43735],{"class":781},[139,48123,157],{"class":145},[139,48125,33031],{"class":781},[139,48127,2993],{"class":145},[139,48129,33036],{"class":781},[139,48131,558],{"class":145},[139,48133,48134,48136,48138],{"class":141,"line":462},[139,48135,33053],{"class":149},[139,48137,33056],{"class":153},[139,48139,43754],{"class":145},[139,48141,48142,48144,48146,48148,48150,48152],{"class":141,"line":474},[139,48143,33069],{"class":153},[139,48145,43761],{"class":145},[139,48147,33075],{"class":153},[139,48149,33078],{"class":145},[139,48151,33081],{"class":153},[139,48153,4262],{"class":145},[139,48155,48156,48158,48160,48162],{"class":141,"line":484},[139,48157,33097],{"class":153},[139,48159,37014],{"class":145},[139,48161,150],{"class":149},[139,48163,37019],{"class":145},[139,48165,48166],{"class":141,"line":989},[139,48167,43784],{"class":2512},[139,48169,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192,48194,48196],{"class":141,"line":994},[139,48171,33097],{"class":153},[139,48173,43791],{"class":145},[139,48175,150],{"class":149},[139,48177,33105],{"class":145},[139,48179,33108],{"class":2111},[139,48181,150],{"class":149},[139,48183,43802],{"class":145},[139,48185,33117],{"class":2111},[139,48187,150],{"class":149},[139,48189,43809],{"class":145},[139,48191,33126],{"class":2111},[139,48193,150],{"class":149},[139,48195,410],{"class":153},[139,48197,164],{"class":145},[139,48199,48200],{"class":141,"line":999},[139,48201,43822],{"class":2512},[139,48203,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232,48234],{"class":141,"line":1006},[139,48205,33097],{"class":153},[139,48207,43829],{"class":145},[139,48209,150],{"class":149},[139,48211,33105],{"class":145},[139,48213,33108],{"class":2111},[139,48215,150],{"class":149},[139,48217,43802],{"class":145},[139,48219,33117],{"class":2111},[139,48221,150],{"class":149},[139,48223,43846],{"class":145},[139,48225,2634],{"class":153},[139,48227,43851],{"class":145},[139,48229,33126],{"class":2111},[139,48231,150],{"class":149},[139,48233,410],{"class":153},[139,48235,164],{"class":145},[139,48237,48238,48240,48242,48244,48246,48248,48250,48252,48254,48256,48258,48260,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280],{"class":141,"line":1027},[139,48239,33097],{"class":153},[139,48241,43866],{"class":145},[139,48243,150],{"class":149},[139,48245,33105],{"class":145},[139,48247,33108],{"class":2111},[139,48249,150],{"class":149},[139,48251,43846],{"class":145},[139,48253,2634],{"class":153},[139,48255,43851],{"class":145},[139,48257,33117],{"class":2111},[139,48259,150],{"class":149},[139,48261,43846],{"class":145},[139,48263,410],{"class":153},[139,48265,43851],{"class":145},[139,48267,33126],{"class":2111},[139,48269,150],{"class":149},[139,48271,421],{"class":153},[139,48273,2816],{"class":145},[139,48275,33135],{"class":2111},[139,48277,150],{"class":149},[139,48279,410],{"class":153},[139,48281,164],{"class":145},[139,48283,48284],{"class":141,"line":1040},[139,48285,43911],{"class":2512},[139,48287,48288,48290,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312,48314,48316,48318],{"class":141,"line":2160},[139,48289,33097],{"class":153},[139,48291,43918],{"class":145},[139,48293,150],{"class":149},[139,48295,33105],{"class":145},[139,48297,33108],{"class":2111},[139,48299,150],{"class":149},[139,48301,43802],{"class":145},[139,48303,33117],{"class":2111},[139,48305,150],{"class":149},[139,48307,43935],{"class":145},[139,48309,2634],{"class":153},[139,48311,43851],{"class":145},[139,48313,33126],{"class":2111},[139,48315,150],{"class":149},[139,48317,410],{"class":153},[139,48319,164],{"class":145},[139,48321,48322,48324,48326,48328,48330,48332,48334,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362,48364],{"class":141,"line":2188},[139,48323,33097],{"class":153},[139,48325,43954],{"class":145},[139,48327,150],{"class":149},[139,48329,33105],{"class":145},[139,48331,33108],{"class":2111},[139,48333,150],{"class":149},[139,48335,43935],{"class":145},[139,48337,2634],{"class":153},[139,48339,43851],{"class":145},[139,48341,33117],{"class":2111},[139,48343,150],{"class":149},[139,48345,43935],{"class":145},[139,48347,410],{"class":153},[139,48349,43851],{"class":145},[139,48351,33126],{"class":2111},[139,48353,150],{"class":149},[139,48355,1481],{"class":153},[139,48357,2816],{"class":145},[139,48359,33135],{"class":2111},[139,48361,150],{"class":149},[139,48363,416],{"class":153},[139,48365,164],{"class":145},[139,48367,48368],{"class":141,"line":3944},[139,48369,43999],{"class":2512},[139,48371,48372],{"class":141,"line":3963},[139,48373,44004],{"class":2512},[139,48375,48376,48378,48380,48382,48384,48386,48388,48390,48392,48394,48396,48398,48400,48402,48404,48406],{"class":141,"line":3968},[139,48377,33097],{"class":153},[139,48379,44011],{"class":145},[139,48381,150],{"class":149},[139,48383,37072],{"class":145},[139,48385,33126],{"class":2111},[139,48387,150],{"class":149},[139,48389,421],{"class":153},[139,48391,2816],{"class":145},[139,48393,33181],{"class":2111},[139,48395,150],{"class":149},[139,48397,410],{"class":153},[139,48399,2816],{"class":145},[139,48401,33135],{"class":2111},[139,48403,150],{"class":149},[139,48405,410],{"class":153},[139,48407,164],{"class":145},[139,48409,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428,48430,48432,48434,48436],{"class":141,"line":3982},[139,48411,33097],{"class":153},[139,48413,44046],{"class":145},[139,48415,150],{"class":149},[139,48417,33105],{"class":145},[139,48419,33108],{"class":2111},[139,48421,150],{"class":149},[139,48423,43802],{"class":145},[139,48425,33117],{"class":2111},[139,48427,150],{"class":149},[139,48429,44063],{"class":145},[139,48431,33126],{"class":2111},[139,48433,150],{"class":149},[139,48435,410],{"class":153},[139,48437,164],{"class":145},[139,48439,48440],{"class":141,"line":3987},[139,48441,843],{"emptyLinePlaceholder":842},[139,48443,48444,48446,48448],{"class":141,"line":4014},[139,48445,33053],{"class":149},[139,48447,33345],{"class":781},[139,48449,33348],{"class":145},[139,48451,48452,48454,48456,48458,48460,48462],{"class":141,"line":4019},[139,48453,44088],{"class":145},[139,48455,150],{"class":149},[139,48457,33075],{"class":153},[139,48459,37427],{"class":145},[139,48461,33075],{"class":153},[139,48463,44099],{"class":145},[139,48465,48466,48468,48470,48472,48474,48476,48478,48480,48482,48484],{"class":141,"line":4036},[139,48467,9359],{"class":145},[139,48469,150],{"class":149},[139,48471,33075],{"class":153},[139,48473,37427],{"class":145},[139,48475,33075],{"class":153},[139,48477,44114],{"class":145},[139,48479,33075],{"class":153},[139,48481,37427],{"class":145},[139,48483,33075],{"class":153},[139,48485,44123],{"class":145},[139,48487,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506],{"class":141,"line":4041},[139,48489,44128],{"class":145},[139,48491,150],{"class":149},[139,48493,33075],{"class":153},[139,48495,37427],{"class":145},[139,48497,33075],{"class":153},[139,48499,44139],{"class":145},[139,48501,33075],{"class":153},[139,48503,37427],{"class":145},[139,48505,33075],{"class":153},[139,48507,44148],{"class":145},[139,48509,48510,48512,48514,48516,48518,48520,48522,48524],{"class":141,"line":4046},[139,48511,44153],{"class":145},[139,48513,150],{"class":149},[139,48515,33075],{"class":153},[139,48517,37427],{"class":145},[139,48519,33075],{"class":153},[139,48521,44164],{"class":145},[139,48523,33075],{"class":153},[139,48525,44169],{"class":145},[139,48527,48528],{"class":141,"line":4051},[139,48529,44174],{"class":2512},[139,48531,48532,48534,48536,48538,48540,48542],{"class":141,"line":4065},[139,48533,2085],{"class":149},[139,48535,44181],{"class":145},[139,48537,34932],{"class":2111},[139,48539,150],{"class":149},[139,48541,410],{"class":153},[139,48543,164],{"class":145},[139,48545,48546],{"class":141,"line":4070},[139,48547,843],{"emptyLinePlaceholder":842},[139,48549,48550],{"class":141,"line":4860},[139,48551,44202],{"class":2512},[139,48553,48554,48556,48558,48560,48562,48564,48566],{"class":141,"line":4874},[139,48555,915],{"class":149},[139,48557,44209],{"class":781},[139,48559,157],{"class":145},[139,48561,33031],{"class":781},[139,48563,2993],{"class":145},[139,48565,33036],{"class":781},[139,48567,558],{"class":145},[139,48569,48570],{"class":141,"line":4882},[139,48571,44224],{"class":2512},[139,48573,48574,48576,48578],{"class":141,"line":4887},[139,48575,33053],{"class":149},[139,48577,33056],{"class":153},[139,48579,44233],{"class":145},[139,48581,48582,48584,48586,48588,48590,48592],{"class":141,"line":4893},[139,48583,33069],{"class":153},[139,48585,44240],{"class":145},[139,48587,33075],{"class":153},[139,48589,33078],{"class":145},[139,48591,33081],{"class":153},[139,48593,4262],{"class":145},[139,48595,48596,48598,48600,48602],{"class":141,"line":4899},[139,48597,33097],{"class":153},[139,48599,44255],{"class":145},[139,48601,150],{"class":149},[139,48603,40252],{"class":145},[139,48605,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636,48638,48640,48642,48644,48646],{"class":141,"line":4904},[139,48607,40257],{"class":145},[139,48609,33108],{"class":2111},[139,48611,150],{"class":149},[139,48613,421],{"class":153},[139,48615,2816],{"class":145},[139,48617,33117],{"class":2111},[139,48619,150],{"class":149},[139,48621,2646],{"class":153},[139,48623,2816],{"class":145},[139,48625,33126],{"class":2111},[139,48627,150],{"class":149},[139,48629,2807],{"class":153},[139,48631,2816],{"class":145},[139,48633,33181],{"class":2111},[139,48635,150],{"class":149},[139,48637,416],{"class":153},[139,48639,2816],{"class":145},[139,48641,33135],{"class":2111},[139,48643,150],{"class":149},[139,48645,421],{"class":153},[139,48647,40290],{"class":145},[139,48649,48650],{"class":141,"line":10222},[139,48651,40295],{"class":145},[139,48653,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672,48674,48676,48678],{"class":141,"line":10246},[139,48655,40340],{"class":145},[139,48657,33126],{"class":2111},[139,48659,150],{"class":149},[139,48661,421],{"class":153},[139,48663,2816],{"class":145},[139,48665,33181],{"class":2111},[139,48667,150],{"class":149},[139,48669,416],{"class":153},[139,48671,2816],{"class":145},[139,48673,33135],{"class":2111},[139,48675,150],{"class":149},[139,48677,410],{"class":153},[139,48679,164],{"class":145},[139,48681,48682],{"class":141,"line":10251},[139,48683,40369],{"class":145},[139,48685,48686,48688,48690,48692],{"class":141,"line":10257},[139,48687,33097],{"class":153},[139,48689,44346],{"class":145},[139,48691,150],{"class":149},[139,48693,40252],{"class":145},[139,48695,48696,48698,48700,48702,48704,48706,48708,48710,48712,48714,48716,48718,48720],{"class":141,"line":10284},[139,48697,40257],{"class":145},[139,48699,33108],{"class":2111},[139,48701,150],{"class":149},[139,48703,2646],{"class":153},[139,48705,2816],{"class":145},[139,48707,33117],{"class":2111},[139,48709,150],{"class":149},[139,48711,2646],{"class":153},[139,48713,2816],{"class":145},[139,48715,33126],{"class":2111},[139,48717,150],{"class":149},[139,48719,410],{"class":153},[139,48721,40290],{"class":145},[139,48723,48724],{"class":141,"line":10289},[139,48725,40295],{"class":145},[139,48727,48728,48730,48732,48734,48736,48738,48740,48742,48744,48746,48748,48750,48752,48754,48756,48758,48760],{"class":141,"line":10295},[139,48729,40257],{"class":145},[139,48731,33108],{"class":2111},[139,48733,150],{"class":149},[139,48735,2646],{"class":153},[139,48737,2816],{"class":145},[139,48739,33117],{"class":2111},[139,48741,150],{"class":149},[139,48743,44401],{"class":153},[139,48745,2816],{"class":145},[139,48747,33126],{"class":2111},[139,48749,150],{"class":149},[139,48751,421],{"class":153},[139,48753,2816],{"class":145},[139,48755,33135],{"class":2111},[139,48757,150],{"class":149},[139,48759,410],{"class":153},[139,48761,40290],{"class":145},[139,48763,48764],{"class":141,"line":10307},[139,48765,40295],{"class":145},[139,48767,48768,48770,48772,48774,48776,48778,48780,48782,48784,48786,48788,48790,48792],{"class":141,"line":10319},[139,48769,40340],{"class":145},[139,48771,33126],{"class":2111},[139,48773,150],{"class":149},[139,48775,421],{"class":153},[139,48777,2816],{"class":145},[139,48779,33181],{"class":2111},[139,48781,150],{"class":149},[139,48783,416],{"class":153},[139,48785,2816],{"class":145},[139,48787,33135],{"class":2111},[139,48789,150],{"class":149},[139,48791,410],{"class":153},[139,48793,164],{"class":145},[139,48795,48796],{"class":141,"line":10331},[139,48797,40369],{"class":145},[139,48799,48800,48802,48804,48806],{"class":141,"line":11990},[139,48801,33097],{"class":153},[139,48803,44462],{"class":145},[139,48805,150],{"class":149},[139,48807,40252],{"class":145},[139,48809,48810,48812,48814,48816,48818,48820,48822,48824,48826,48828,48830,48832,48834,48836,48838],{"class":141,"line":12015},[139,48811,44471],{"class":145},[139,48813,44401],{"class":153},[139,48815,2816],{"class":145},[139,48817,2646],{"class":153},[139,48819,44480],{"class":145},[139,48821,2652],{"class":153},[139,48823,2816],{"class":145},[139,48825,34317],{"class":153},[139,48827,44489],{"class":145},[139,48829,3036],{"class":153},[139,48831,2816],{"class":145},[139,48833,2640],{"class":153},[139,48835,44498],{"class":145},[139,48837,2640],{"class":153},[139,48839,40290],{"class":145},[139,48841,48842,48844,48846,48848,48850,48852,48854,48856,48858,48860,48862,48864,48866,48868,48870],{"class":141,"line":12038},[139,48843,44471],{"class":145},[139,48845,37113],{"class":153},[139,48847,2816],{"class":145},[139,48849,34317],{"class":153},[139,48851,44480],{"class":145},[139,48853,34317],{"class":153},[139,48855,2816],{"class":145},[139,48857,44401],{"class":153},[139,48859,44489],{"class":145},[139,48861,2640],{"class":153},[139,48863,2816],{"class":145},[139,48865,2652],{"class":153},[139,48867,44498],{"class":145},[139,48869,2646],{"class":153},[139,48871,40290],{"class":145},[139,48873,48874,48876,48878,48880,48882,48884,48886,48888,48890,48892,48894,48896,48898],{"class":141,"line":12062},[139,48875,40340],{"class":145},[139,48877,33126],{"class":2111},[139,48879,150],{"class":149},[139,48881,421],{"class":153},[139,48883,2816],{"class":145},[139,48885,33181],{"class":2111},[139,48887,150],{"class":149},[139,48889,416],{"class":153},[139,48891,2816],{"class":145},[139,48893,33135],{"class":2111},[139,48895,150],{"class":149},[139,48897,410],{"class":153},[139,48899,164],{"class":145},[139,48901,48902],{"class":141,"line":12067},[139,48903,40369],{"class":145},[139,48905,48906,48908,48910,48912],{"class":141,"line":12072},[139,48907,33097],{"class":153},[139,48909,44573],{"class":145},[139,48911,150],{"class":149},[139,48913,40252],{"class":145},[139,48915,48916,48918,48920,48922,48924,48926,48928,48930,48932,48934,48936,48938,48940,48942,48944],{"class":141,"line":12077},[139,48917,44471],{"class":145},[139,48919,44584],{"class":153},[139,48921,2816],{"class":145},[139,48923,44401],{"class":153},[139,48925,44480],{"class":145},[139,48927,2652],{"class":153},[139,48929,2816],{"class":145},[139,48931,44597],{"class":153},[139,48933,44489],{"class":145},[139,48935,3036],{"class":153},[139,48937,2816],{"class":145},[139,48939,3042],{"class":153},[139,48941,44498],{"class":145},[139,48943,2646],{"class":153},[139,48945,40290],{"class":145},[139,48947,48948,48950,48952,48954,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974,48976],{"class":141,"line":12086},[139,48949,44471],{"class":145},[139,48951,40700],{"class":153},[139,48953,2816],{"class":145},[139,48955,23315],{"class":153},[139,48957,44480],{"class":145},[139,48959,3053],{"class":153},[139,48961,2816],{"class":145},[139,48963,33750],{"class":153},[139,48965,44489],{"class":145},[139,48967,3235],{"class":153},[139,48969,2816],{"class":145},[139,48971,2646],{"class":153},[139,48973,44498],{"class":145},[139,48975,2646],{"class":153},[139,48977,40290],{"class":145},[139,48979,48980,48982,48984,48986,48988,48990,48992,48994,48996,48998,49000,49002,49004,49006,49008],{"class":141,"line":12091},[139,48981,44471],{"class":145},[139,48983,40700],{"class":153},[139,48985,2816],{"class":145},[139,48987,34317],{"class":153},[139,48989,44480],{"class":145},[139,48991,34317],{"class":153},[139,48993,2816],{"class":145},[139,48995,37113],{"class":153},[139,48997,44489],{"class":145},[139,48999,3235],{"class":153},[139,49001,2816],{"class":145},[139,49003,2646],{"class":153},[139,49005,44498],{"class":145},[139,49007,2646],{"class":153},[139,49009,40290],{"class":145},[139,49011,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040],{"class":141,"line":12097},[139,49013,44471],{"class":145},[139,49015,40700],{"class":153},[139,49017,2816],{"class":145},[139,49019,3053],{"class":153},[139,49021,44480],{"class":145},[139,49023,34317],{"class":153},[139,49025,2816],{"class":145},[139,49027,44694],{"class":153},[139,49029,44489],{"class":145},[139,49031,2640],{"class":153},[139,49033,2816],{"class":145},[139,49035,2646],{"class":153},[139,49037,44498],{"class":145},[139,49039,2646],{"class":153},[139,49041,40290],{"class":145},[139,49043,49044,49046,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072],{"class":141,"line":12118},[139,49045,44471],{"class":145},[139,49047,44715],{"class":153},[139,49049,2816],{"class":145},[139,49051,37113],{"class":153},[139,49053,44480],{"class":145},[139,49055,23315],{"class":153},[139,49057,2816],{"class":145},[139,49059,44728],{"class":153},[139,49061,44489],{"class":145},[139,49063,2640],{"class":153},[139,49065,2816],{"class":145},[139,49067,34317],{"class":153},[139,49069,44498],{"class":145},[139,49071,34317],{"class":153},[139,49073,40290],{"class":145},[139,49075,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098,49100],{"class":141,"line":12124},[139,49077,40340],{"class":145},[139,49079,33126],{"class":2111},[139,49081,150],{"class":149},[139,49083,421],{"class":153},[139,49085,2816],{"class":145},[139,49087,33181],{"class":2111},[139,49089,150],{"class":149},[139,49091,416],{"class":153},[139,49093,2816],{"class":145},[139,49095,33135],{"class":2111},[139,49097,150],{"class":149},[139,49099,410],{"class":153},[139,49101,164],{"class":145},[139,49103,49104],{"class":141,"line":12138},[139,49105,40369],{"class":145},[139,49107,49108,49110,49112,49114],{"class":141,"line":12144},[139,49109,33097],{"class":153},[139,49111,44781],{"class":145},[139,49113,150],{"class":149},[139,49115,40252],{"class":145},[139,49117,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146],{"class":141,"line":12171},[139,49119,44471],{"class":145},[139,49121,44792],{"class":153},[139,49123,2816],{"class":145},[139,49125,37113],{"class":153},[139,49127,44480],{"class":145},[139,49129,23315],{"class":153},[139,49131,2816],{"class":145},[139,49133,44728],{"class":153},[139,49135,44489],{"class":145},[139,49137,2640],{"class":153},[139,49139,2816],{"class":145},[139,49141,34317],{"class":153},[139,49143,44498],{"class":145},[139,49145,34317],{"class":153},[139,49147,40290],{"class":145},[139,49149,49150,49152,49154,49156,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178],{"class":141,"line":12180},[139,49151,44471],{"class":145},[139,49153,44792],{"class":153},[139,49155,2816],{"class":145},[139,49157,37183],{"class":153},[139,49159,44480],{"class":145},[139,49161,44401],{"class":153},[139,49163,2816],{"class":145},[139,49165,37183],{"class":153},[139,49167,44489],{"class":145},[139,49169,3042],{"class":153},[139,49171,2816],{"class":145},[139,49173,34317],{"class":153},[139,49175,44498],{"class":145},[139,49177,34317],{"class":153},[139,49179,40290],{"class":145},[139,49181,49182,49184,49186,49188,49190],{"class":141,"line":12186},[139,49183,44855],{"class":145},[139,49185,410],{"class":153},[139,49187,2816],{"class":145},[139,49189,410],{"class":153},[139,49191,44864],{"class":145},[139,49193,49194],{"class":141,"line":12194},[139,49195,41033],{"class":145},[139,49197,49198,49200,49202,49204,49206],{"class":141,"line":12199},[139,49199,41038],{"class":145},[139,49201,44875],{"class":153},[139,49203,2816],{"class":145},[139,49205,416],{"class":153},[139,49207,164],{"class":145},[139,49209,49210],{"class":141,"line":18871},[139,49211,40369],{"class":145},[139,49213,49214],{"class":141,"line":18877},[139,49215,44890],{"class":2512},[139,49217,49218,49220,49222,49224,49226],{"class":141,"line":18900},[139,49219,5684],{"class":149},[139,49221,41111],{"class":145},[139,49223,1976],{"class":149},[139,49225,41116],{"class":153},[139,49227,41119],{"class":145},[139,49229,49230,49232,49234],{"class":141,"line":18906},[139,49231,6920],{"class":149},[139,49233,41131],{"class":153},[139,49235,41134],{"class":145},[139,49237,49238,49240,49242,49244,49246,49248,49250,49252,49254],{"class":141,"line":18929},[139,49239,41144],{"class":145},[139,49241,44917],{"class":2111},[139,49243,150],{"class":149},[139,49245,44922],{"class":160},[139,49247,2816],{"class":145},[139,49249,41147],{"class":2111},[139,49251,150],{"class":149},[139,49253,41152],{"class":160},[139,49255,164],{"class":145},[139,49257,49258],{"class":141,"line":18943},[139,49259,44937],{"class":2512},[139,49261,49262],{"class":141,"line":18963},[139,49263,44942],{"class":2512},[139,49265,49266],{"class":141,"line":18969},[139,49267,44947],{"class":2512},[139,49269,49270],{"class":141,"line":18980},[139,49271,44952],{"class":2512},[139,49273,49274],{"class":141,"line":19003},[139,49275,44957],{"class":2512},[139,49277,49278],{"class":141,"line":19025},[139,49279,44962],{"class":2512},[139,49281,49282,49284,49286,49288,49290,49292],{"class":141,"line":19030},[139,49283,41164],{"class":149},[139,49285,41167],{"class":145},[139,49287,41170],{"class":149},[139,49289,2077],{"class":149},[139,49291,41175],{"class":153},[139,49293,246],{"class":145},[139,49295,49296,49298,49300],{"class":141,"line":19036},[139,49297,41187],{"class":145},[139,49299,2634],{"class":153},[139,49301,164],{"class":145},[139,49303,49304,49306,49308],{"class":141,"line":19050},[139,49305,44989],{"class":149},[139,49307,41131],{"class":153},[139,49309,41206],{"class":145},[139,49311,49312,49314,49316,49318,49320],{"class":141,"line":19063},[139,49313,44998],{"class":145},[139,49315,2634],{"class":153},[139,49317,2816],{"class":145},[139,49319,41228],{"class":153},[139,49321,164],{"class":145},[139,49323,49324,49326,49328,49330,49332,49334],{"class":141,"line":19068},[139,49325,45011],{"class":149},[139,49327,41167],{"class":145},[139,49329,41170],{"class":149},[139,49331,2077],{"class":149},[139,49333,41175],{"class":153},[139,49335,246],{"class":145},[139,49337,49338,49340,49342],{"class":141,"line":19082},[139,49339,45026],{"class":145},[139,49341,2634],{"class":153},[139,49343,164],{"class":145},[139,49345,49346],{"class":141,"line":19087},[139,49347,37408],{"class":2512},[139,49349,49350,49352,49354],{"class":141,"line":19093},[139,49351,33053],{"class":149},[139,49353,33345],{"class":781},[139,49355,33348],{"class":145},[139,49357,49358,49360,49362,49364],{"class":141,"line":19098},[139,49359,33353],{"class":145},[139,49361,150],{"class":149},[139,49363,33075],{"class":153},[139,49365,45053],{"class":145},[139,49367,49368,49370,49372,49374],{"class":141,"line":19112},[139,49369,33353],{"class":145},[139,49371,150],{"class":149},[139,49373,33075],{"class":153},[139,49375,45064],{"class":145},[139,49377,49378,49380,49382,49384],{"class":141,"line":19117},[139,49379,33353],{"class":145},[139,49381,150],{"class":149},[139,49383,33075],{"class":153},[139,49385,45075],{"class":145},[139,49387,49388,49390,49392,49394],{"class":141,"line":19122},[139,49389,33353],{"class":145},[139,49391,150],{"class":149},[139,49393,33075],{"class":153},[139,49395,45086],{"class":145},[139,49397,49398,49400,49402,49404],{"class":141,"line":19136},[139,49399,33353],{"class":145},[139,49401,150],{"class":149},[139,49403,33075],{"class":153},[139,49405,45097],{"class":145},[139,49407,49408,49410],{"class":141,"line":19148},[139,49409,2085],{"class":149},[139,49411,33461],{"class":145},[139,49413,49414],{"class":141,"line":19153},[139,49415,843],{"emptyLinePlaceholder":842},[139,49417,49418],{"class":141,"line":19166},[139,49419,45112],{"class":2512},[139,49421,49422,49424,49426,49428,49430],{"class":141,"line":19171},[139,49423,1729],{"class":149},[139,49425,1732],{"class":153},[139,49427,5232],{"class":149},[139,49429,33476],{"class":160},[139,49431,246],{"class":145},[139,49433,49434,49436,49438,49440,49442,49444,49446,49448,49450],{"class":141,"line":19176},[139,49435,33488],{"class":145},[139,49437,150],{"class":149},[139,49439,32706],{"class":145},[139,49441,33495],{"class":160},[139,49443,3992],{"class":149},[139,49445,33500],{"class":145},[139,49447,656],{"class":149},[139,49449,32731],{"class":160},[139,49451,164],{"class":145},[139,49453,49454,49456,49458],{"class":141,"line":19181},[139,49455,33540],{"class":145},[139,49457,150],{"class":149},[139,49459,45153],{"class":145},[139,49461,49462,49464,49466,49468,49470,49472,49474,49476],{"class":141,"line":19194},[139,49463,302],{"class":153},[139,49465,33552],{"class":145},[139,49467,410],{"class":153},[139,49469,2816],{"class":145},[139,49471,33750],{"class":153},[139,49473,2816],{"class":145},[139,49475,33750],{"class":153},[139,49477,33565],{"class":145},[24265,49479,49481],{"id":49480},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49483,49484],{},"计算图片的均值与方差，用于训练中归一化处理操作",[130,49486,49488],{"className":132,"code":49487,"language":134,"meta":135,"style":135},"# 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",[50,49489,49490,49495,49508,49513,49519,49524,49534,49538,49543,49553,49557,49562,49572,49589,49593,49598,49610,49622,49653,49662,49672,49682,49686,49691,49706,49710,49715,49720,49725,49735,49740,49765,49769,49774,49789,49793,49806,49810,49815,49820,49825,49830,49835,49845,49855,49878,49886,49894,49902,49906,49918,49922,49927,49931,49935,49942,49962,49986,49993,50007,50012,50017,50021,50035,50039,50051],{"__ignoreMap":135},[139,49491,49492],{"class":141,"line":142},[139,49493,49494],{"class":2512},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[139,49496,49497,49499,49502,49505],{"class":141,"line":210},[139,49498,1265],{"class":149},[139,49500,49501],{"class":153}," PIL",[139,49503,49504],{"class":149}," import",[139,49506,49507],{"class":145}," Image\n",[139,49509,49510],{"class":141,"line":254},[139,49511,49512],{"class":2512},"# os 用来处理文件夹和文件路径\n",[139,49514,49515,49517],{"class":141,"line":262},[139,49516,1064],{"class":149},[139,49518,1611],{"class":145},[139,49520,49521],{"class":141,"line":313},[139,49522,49523],{"class":2512},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[139,49525,49526,49528,49530,49532],{"class":141,"line":462},[139,49527,1064],{"class":149},[139,49529,33630],{"class":145},[139,49531,1035],{"class":149},[139,49533,33635],{"class":145},[139,49535,49536],{"class":141,"line":474},[139,49537,843],{"emptyLinePlaceholder":842},[139,49539,49540],{"class":141,"line":484},[139,49541,49542],{"class":2512},"# 文件夹路径，包含所有图片文件\n",[139,49544,49545,49548,49550],{"class":141,"line":989},[139,49546,49547],{"class":145},"folder_path ",[139,49549,150],{"class":149},[139,49551,49552],{"class":160}," 'data_cat_dog'\n",[139,49554,49555],{"class":141,"line":994},[139,49556,843],{"emptyLinePlaceholder":842},[139,49558,49559],{"class":141,"line":999},[139,49560,49561],{"class":2512},"# 初始化累积变量\n",[139,49563,49564,49567,49569],{"class":141,"line":1006},[139,49565,49566],{"class":145},"total_pixels ",[139,49568,150],{"class":149},[139,49570,49571],{"class":153}," 0\n",[139,49573,49574,49577,49579,49582,49584,49586],{"class":141,"line":1027},[139,49575,49576],{"class":145},"sum_normalized_pixel_values ",[139,49578,150],{"class":149},[139,49580,49581],{"class":145}," np.zeros(",[139,49583,421],{"class":153},[139,49585,48046],{"class":145},[139,49587,49588],{"class":2512},"# 如果是RGB图像，需要三个通道的均值和方差\n",[139,49590,49591],{"class":141,"line":1040},[139,49592,843],{"emptyLinePlaceholder":842},[139,49594,49595],{"class":141,"line":2160},[139,49596,49597],{"class":2512},"# 遍历文件夹中的图片文件\n",[139,49599,49600,49602,49605,49607],{"class":141,"line":2188},[139,49601,1970],{"class":149},[139,49603,49604],{"class":145}," root, dirs, files ",[139,49606,1976],{"class":149},[139,49608,49609],{"class":145}," os.walk(folder_path):\n",[139,49611,49612,49614,49617,49619],{"class":141,"line":3944},[139,49613,5482],{"class":149},[139,49615,49616],{"class":145}," filename ",[139,49618,1976],{"class":149},[139,49620,49621],{"class":145}," files:\n",[139,49623,49624,49626,49629,49632,49634,49637,49639,49642,49644,49647,49650],{"class":141,"line":3963},[139,49625,4780],{"class":149},[139,49627,49628],{"class":145}," filename.endswith((",[139,49630,49631],{"class":160},"'.jpg'",[139,49633,413],{"class":145},[139,49635,49636],{"class":160},"'.jpeg'",[139,49638,413],{"class":145},[139,49640,49641],{"class":160},"'.png'",[139,49643,413],{"class":145},[139,49645,49646],{"class":160},"'.bmp'",[139,49648,49649],{"class":145},")):  ",[139,49651,49652],{"class":2512},"# 可根据实际情况添加其他格式\n",[139,49654,49655,49657,49659],{"class":141,"line":3968},[139,49656,47911],{"class":145},[139,49658,150],{"class":149},[139,49660,49661],{"class":145}," os.path.join(root, filename)\n",[139,49663,49664,49667,49669],{"class":141,"line":3982},[139,49665,49666],{"class":145},"            image ",[139,49668,150],{"class":149},[139,49670,49671],{"class":145}," Image.open(image_path)\n",[139,49673,49674,49677,49679],{"class":141,"line":3987},[139,49675,49676],{"class":145},"            image_array ",[139,49678,150],{"class":149},[139,49680,49681],{"class":145}," np.array(image)\n",[139,49683,49684],{"class":141,"line":4014},[139,49685,843],{"emptyLinePlaceholder":842},[139,49687,49688],{"class":141,"line":4019},[139,49689,49690],{"class":2512},"            # 归一化像素值到0-1之间\n",[139,49692,49693,49696,49698,49701,49703],{"class":141,"line":4036},[139,49694,49695],{"class":145},"            normalized_image_array ",[139,49697,150],{"class":149},[139,49699,49700],{"class":145}," image_array ",[139,49702,3019],{"class":149},[139,49704,49705],{"class":153}," 255.0\n",[139,49707,49708],{"class":141,"line":4041},[139,49709,843],{"emptyLinePlaceholder":842},[139,49711,49712],{"class":141,"line":4046},[139,49713,49714],{"class":2512},"            # print(image_path)\n",[139,49716,49717],{"class":141,"line":4051},[139,49718,49719],{"class":2512},"            # print(normalized_image_array.shape)\n",[139,49721,49722],{"class":141,"line":4065},[139,49723,49724],{"class":2512},"            # 累积归一化后的像素值和像素数量\n",[139,49726,49727,49730,49732],{"class":141,"line":4070},[139,49728,49729],{"class":145},"            total_pixels ",[139,49731,11751],{"class":149},[139,49733,49734],{"class":145}," normalized_image_array.size\n",[139,49736,49737],{"class":141,"line":4860},[139,49738,49739],{"class":2512},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[139,49741,49742,49745,49747,49750,49753,49755,49757,49759,49761,49763],{"class":141,"line":4874},[139,49743,49744],{"class":145},"            sum_normalized_pixel_values ",[139,49746,11751],{"class":149},[139,49748,49749],{"class":145}," np.sum(normalized_image_array, ",[139,49751,49752],{"class":2111},"axis",[139,49754,150],{"class":149},[139,49756,157],{"class":145},[139,49758,2634],{"class":153},[139,49760,413],{"class":145},[139,49762,410],{"class":153},[139,49764,207],{"class":145},[139,49766,49767],{"class":141,"line":4882},[139,49768,843],{"emptyLinePlaceholder":842},[139,49770,49771],{"class":141,"line":4887},[139,49772,49773],{"class":2512},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[139,49775,49776,49779,49781,49784,49786],{"class":141,"line":4893},[139,49777,49778],{"class":145},"mean ",[139,49780,150],{"class":149},[139,49782,49783],{"class":145}," sum_normalized_pixel_values ",[139,49785,3019],{"class":149},[139,49787,49788],{"class":145}," total_pixels\n",[139,49790,49791],{"class":141,"line":4899},[139,49792,843],{"emptyLinePlaceholder":842},[139,49794,49795,49798,49800,49802,49804],{"class":141,"line":4904},[139,49796,49797],{"class":145},"sum_squared_diff ",[139,49799,150],{"class":149},[139,49801,49581],{"class":145},[139,49803,421],{"class":153},[139,49805,164],{"class":145},[139,49807,49808],{"class":141,"line":10222},[139,49809,843],{"emptyLinePlaceholder":842},[139,49811,49812],{"class":141,"line":10246},[139,49813,49814],{"class":2512},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[139,49816,49817],{"class":141,"line":10251},[139,49818,49819],{"class":2512},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[139,49821,49822],{"class":141,"line":10257},[139,49823,49824],{"class":2512},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[139,49826,49827],{"class":141,"line":10284},[139,49828,49829],{"class":2512},"# Image.open(image_path)：打开图片\n",[139,49831,49832],{"class":141,"line":10289},[139,49833,49834],{"class":2512},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[139,49836,49837,49839,49841,49843],{"class":141,"line":10295},[139,49838,1970],{"class":149},[139,49840,49604],{"class":145},[139,49842,1976],{"class":149},[139,49844,49609],{"class":145},[139,49846,49847,49849,49851,49853],{"class":141,"line":10307},[139,49848,5482],{"class":149},[139,49850,49616],{"class":145},[139,49852,1976],{"class":149},[139,49854,49621],{"class":145},[139,49856,49857,49859,49861,49863,49865,49867,49869,49871,49873,49875],{"class":141,"line":10319},[139,49858,4780],{"class":149},[139,49860,49628],{"class":145},[139,49862,49631],{"class":160},[139,49864,413],{"class":145},[139,49866,49636],{"class":160},[139,49868,413],{"class":145},[139,49870,49641],{"class":160},[139,49872,413],{"class":145},[139,49874,49646],{"class":160},[139,49876,49877],{"class":145},")):\n",[139,49879,49880,49882,49884],{"class":141,"line":10331},[139,49881,47911],{"class":145},[139,49883,150],{"class":149},[139,49885,49661],{"class":145},[139,49887,49888,49890,49892],{"class":141,"line":11990},[139,49889,49666],{"class":145},[139,49891,150],{"class":149},[139,49893,49671],{"class":145},[139,49895,49896,49898,49900],{"class":141,"line":12015},[139,49897,49676],{"class":145},[139,49899,150],{"class":149},[139,49901,49681],{"class":145},[139,49903,49904],{"class":141,"line":12038},[139,49905,49690],{"class":2512},[139,49907,49908,49910,49912,49914,49916],{"class":141,"line":12062},[139,49909,49695],{"class":145},[139,49911,150],{"class":149},[139,49913,49700],{"class":145},[139,49915,3019],{"class":149},[139,49917,49705],{"class":153},[139,49919,49920],{"class":141,"line":12067},[139,49921,49719],{"class":2512},[139,49923,49924],{"class":141,"line":12072},[139,49925,49926],{"class":2512},"            # print(mean.shape)\n",[139,49928,49929],{"class":141,"line":12077},[139,49930,49714],{"class":2512},[139,49932,49933],{"class":141,"line":12086},[139,49934,843],{"emptyLinePlaceholder":842},[139,49936,49937,49940],{"class":141,"line":12091},[139,49938,49939],{"class":149},"            try",[139,49941,246],{"class":145},[139,49943,49944,49947,49949,49952,49954,49957,49959],{"class":141,"line":12097},[139,49945,49946],{"class":145},"                diff ",[139,49948,150],{"class":149},[139,49950,49951],{"class":145}," (normalized_image_array ",[139,49953,855],{"class":149},[139,49955,49956],{"class":145}," mean) ",[139,49958,12935],{"class":149},[139,49960,49961],{"class":153}," 2\n",[139,49963,49964,49967,49969,49972,49974,49976,49978,49980,49982,49984],{"class":141,"line":12118},[139,49965,49966],{"class":145},"                sum_squared_diff ",[139,49968,11751],{"class":149},[139,49970,49971],{"class":145}," np.sum(diff, ",[139,49973,49752],{"class":2111},[139,49975,150],{"class":149},[139,49977,157],{"class":145},[139,49979,2634],{"class":153},[139,49981,413],{"class":145},[139,49983,410],{"class":153},[139,49985,207],{"class":145},[139,49987,49988,49991],{"class":141,"line":12124},[139,49989,49990],{"class":149},"            except",[139,49992,246],{"class":145},[139,49994,49995,49998,50000,50002,50005],{"class":141,"line":12138},[139,49996,49997],{"class":153},"                print",[139,49999,157],{"class":145},[139,50001,619],{"class":149},[139,50003,50004],{"class":160},"\"捕获到自定义异常\"",[139,50006,164],{"class":145},[139,50008,50009],{"class":141,"line":12144},[139,50010,50011],{"class":2512},"            # diff = (normalized_image_array - mean) ** 2\n",[139,50013,50014],{"class":141,"line":12171},[139,50015,50016],{"class":2512},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[139,50018,50019],{"class":141,"line":12180},[139,50020,843],{"emptyLinePlaceholder":842},[139,50022,50023,50026,50028,50031,50033],{"class":141,"line":12186},[139,50024,50025],{"class":145},"variance ",[139,50027,150],{"class":149},[139,50029,50030],{"class":145}," sum_squared_diff ",[139,50032,3019],{"class":149},[139,50034,49788],{"class":145},[139,50036,50037],{"class":141,"line":12194},[139,50038,843],{"emptyLinePlaceholder":842},[139,50040,50041,50043,50045,50048],{"class":141,"line":12199},[139,50042,213],{"class":153},[139,50044,157],{"class":145},[139,50046,50047],{"class":160},"\"Mean:\"",[139,50049,50050],{"class":145},", mean)\n",[139,50052,50053,50055,50057,50060],{"class":141,"line":18871},[139,50054,213],{"class":153},[139,50056,157],{"class":145},[139,50058,50059],{"class":160},"\"Variance:\"",[139,50061,50062],{"class":145},", variance)\n",[130,50064,50066],{"className":132,"code":50065,"language":134,"meta":135,"style":135},"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",[50,50067,50068,50074,50080,50090,50096,50106,50120,50130,50140,50150,50154,50164,50174,50178,50182,50190,50195,50200,50219,50223,50228,50233,50238,50243,50284,50289,50299,50304,50317,50322,50327,50332,50337,50342,50346,50351,50356,50378,50382,50414,50428,50438,50448,50452,50462,50476,50486,50496,50506,50512,50516,50520,50524,50528,50532,50540,50560,50564,50568,50572,50576,50592,50596,50600,50608,50612,50616,50624,50628,50632,50636,50644,50648,50652,50656,50664,50668,50676,50680,50688,50692,50700,50704,50712,50716,50720,50728,50732,50736,50748,50772,50786,50790,50794,50798,50806,50810,50818,50822,50830,50834,50842,50846,50854,50858,50866,50870,50882,50886,50894,50898,50906,50910,50914,50918,50922,50930,50934,50950,50954,50962,50966,50970,50974,50978,50982,50986,50990,51006,51010,51022,51026,51038,51042,51054,51058,51066,51070,51078,51082,51086,51090,51096,51100,51108,51112,51128,51132,51140,51144,51160,51172,51176,51188,51192,51196,51204,51208,51212,51220,51224,51232,51236,51244,51248,51252,51294,51336,51340,51344,51360,51364,51380,51384,51388,51396,51400,51404,51416,51454,51458,51462,51470,51474,51488,51498,51504,51510,51516,51522,51526,51530,51536,51540,51544,51552,51556,51574,51578,51582,51586,51602,51606,51610,51614,51618,51622,51642,51662,51666,51670,51674,51682,51690,51694,51710,51730,51750,51754,51759,51768,51777,51782,51787,51792,51805,51810,51819,51828,51845],{"__ignoreMap":135},[139,50069,50070,50072],{"class":141,"line":142},[139,50071,1064],{"class":149},[139,50073,34071],{"class":145},[139,50075,50076,50078],{"class":141,"line":210},[139,50077,1064],{"class":149},[139,50079,1504],{"class":145},[139,50081,50082,50084,50086,50088],{"class":141,"line":254},[139,50083,1064],{"class":149},[139,50085,34088],{"class":145},[139,50087,1035],{"class":149},[139,50089,34093],{"class":145},[139,50091,50092,50094],{"class":141,"line":262},[139,50093,1064],{"class":149},[139,50095,32651],{"class":145},[139,50097,50098,50100,50102,50104],{"class":141,"line":313},[139,50099,1265],{"class":149},[139,50101,33664],{"class":145},[139,50103,1064],{"class":149},[139,50105,34110],{"class":145},[139,50107,50108,50110,50112,50114,50117],{"class":141,"line":462},[139,50109,1265],{"class":149},[139,50111,33618],{"class":145},[139,50113,1064],{"class":149},[139,50115,50116],{"class":145}," ImageFolder ",[139,50118,50119],{"class":2512},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[139,50121,50122,50124,50126,50128],{"class":141,"line":474},[139,50123,1265],{"class":149},[139,50125,33647],{"class":145},[139,50127,1064],{"class":149},[139,50129,33652],{"class":145},[139,50131,50132,50134,50136,50138],{"class":141,"line":484},[139,50133,1064],{"class":149},[139,50135,33664],{"class":145},[139,50137,1035],{"class":149},[139,50139,33669],{"class":145},[139,50141,50142,50144,50146,50148],{"class":141,"line":989},[139,50143,1064],{"class":149},[139,50145,33681],{"class":145},[139,50147,1035],{"class":149},[139,50149,33686],{"class":145},[139,50151,50152],{"class":141,"line":994},[139,50153,34155],{"class":2512},[139,50155,50156,50158,50160,50162],{"class":141,"line":999},[139,50157,1265],{"class":149},[139,50159,34162],{"class":145},[139,50161,1064],{"class":149},[139,50163,45273],{"class":145},[139,50165,50166,50168,50170,50172],{"class":141,"line":1006},[139,50167,1265],{"class":149},[139,50169,32993],{"class":145},[139,50171,1064],{"class":149},[139,50173,32998],{"class":145},[139,50175,50176],{"class":141,"line":1027},[139,50177,843],{"emptyLinePlaceholder":842},[139,50179,50180],{"class":141,"line":1040},[139,50181,34190],{"class":2512},[139,50183,50184,50186,50188],{"class":141,"line":2160},[139,50185,778],{"class":149},[139,50187,34197],{"class":781},[139,50189,34200],{"class":145},[139,50191,50192],{"class":141,"line":2188},[139,50193,50194],{"class":2512},"    # 导入自己的数据集，并进行数据处理\n",[139,50196,50197],{"class":141,"line":3944},[139,50198,50199],{"class":2512},"    # 定义数据集的路径\n",[139,50201,50202,50205,50207,50209,50211,50213,50217],{"class":141,"line":3963},[139,50203,50204],{"class":153},"    ROOT_PATH",[139,50206,150],{"class":149},[139,50208,3105],{"class":149},[139,50210,634],{"class":160},[139,50212,2993],{"class":153},[139,50214,50216],{"class":50215},"sA_wV","\u002Fdata\u002Ftrain",[139,50218,27396],{"class":160},[139,50220,50221],{"class":141,"line":3968},[139,50222,843],{"emptyLinePlaceholder":842},[139,50224,50225],{"class":141,"line":3982},[139,50226,50227],{"class":2512},"    # 定义归一化方法\n",[139,50229,50230],{"class":141,"line":3987},[139,50231,50232],{"class":2512},"    # 这里需要先计算一下数据集的均值和方差\n",[139,50234,50235],{"class":141,"line":4014},[139,50236,50237],{"class":2512},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[139,50239,50240],{"class":141,"line":4019},[139,50241,50242],{"class":2512},"    # 第一个参数是均值，第二个参数是方差\n",[139,50244,50245,50248,50250,50253,50256,50258,50261,50263,50266,50269,50272,50274,50277,50279,50282],{"class":141,"line":4036},[139,50246,50247],{"class":145},"    normalize",[139,50249,150],{"class":149},[139,50251,50252],{"class":145},"transforms.Normalize([",[139,50254,50255],{"class":153},"0.162",[139,50257,2816],{"class":145},[139,50259,50260],{"class":153},"0.151",[139,50262,2816],{"class":145},[139,50264,50265],{"class":153},"0.138",[139,50267,50268],{"class":145},"],[",[139,50270,50271],{"class":153},"0.058",[139,50273,2816],{"class":145},[139,50275,50276],{"class":153},"0.052",[139,50278,2816],{"class":145},[139,50280,50281],{"class":153},"0.048",[139,50283,6935],{"class":145},[139,50285,50286],{"class":141,"line":4041},[139,50287,50288],{"class":2512},"    # 定义数据集处理方法变量\n",[139,50290,50291,50294,50296],{"class":141,"line":4046},[139,50292,50293],{"class":145},"    train_transform",[139,50295,150],{"class":149},[139,50297,50298],{"class":145},"transforms.Compose([\n",[139,50300,50301],{"class":141,"line":4051},[139,50302,50303],{"class":2512},"        # 调整图像大小为224*224\n",[139,50305,50306,50309,50311,50313,50315],{"class":141,"line":4065},[139,50307,50308],{"class":145},"        transforms.Resize((",[139,50310,33750],{"class":153},[139,50312,2816],{"class":145},[139,50314,33750],{"class":153},[139,50316,44864],{"class":145},[139,50318,50319],{"class":141,"line":4070},[139,50320,50321],{"class":2512},"        # 将图像转换为张量\n",[139,50323,50324],{"class":141,"line":4860},[139,50325,50326],{"class":145},"        transforms.ToTensor(),\n",[139,50328,50329],{"class":141,"line":4874},[139,50330,50331],{"class":145},"        normalize])\n",[139,50333,50334],{"class":141,"line":4882},[139,50335,50336],{"class":2512},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[139,50338,50339],{"class":141,"line":4887},[139,50340,50341],{"class":2512},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[139,50343,50344],{"class":141,"line":4893},[139,50345,843],{"emptyLinePlaceholder":842},[139,50347,50348],{"class":141,"line":4899},[139,50349,50350],{"class":2512},"    # 加载数据集\n",[139,50352,50353],{"class":141,"line":4904},[139,50354,50355],{"class":2512},"    # 传入数据集路径与处理方法\n",[139,50357,50358,50360,50362,50365,50368,50370,50373,50375],{"class":141,"line":10222},[139,50359,34205],{"class":145},[139,50361,150],{"class":149},[139,50363,50364],{"class":145},"ImageFolder(",[139,50366,50367],{"class":153},"ROOT_PATH",[139,50369,2816],{"class":145},[139,50371,50372],{"class":2111},"transform",[139,50374,150],{"class":149},[139,50376,50377],{"class":145},"train_transform)\n",[139,50379,50380],{"class":141,"line":10246},[139,50381,843],{"emptyLinePlaceholder":842},[139,50383,50384,50386,50388,50390,50392,50394,50396,50398,50400,50402,50404,50406,50408,50410,50412],{"class":141,"line":10251},[139,50385,34257],{"class":145},[139,50387,150],{"class":149},[139,50389,34262],{"class":145},[139,50391,34265],{"class":153},[139,50393,157],{"class":145},[139,50395,34270],{"class":153},[139,50397,2892],{"class":149},[139,50399,9632],{"class":153},[139,50401,34277],{"class":145},[139,50403,34265],{"class":153},[139,50405,157],{"class":145},[139,50407,34284],{"class":153},[139,50409,2892],{"class":149},[139,50411,9632],{"class":153},[139,50413,34291],{"class":145},[139,50415,50416,50418,50420,50422,50424,50426],{"class":141,"line":10257},[139,50417,34296],{"class":145},[139,50419,150],{"class":149},[139,50421,34301],{"class":145},[139,50423,33786],{"class":2111},[139,50425,150],{"class":149},[139,50427,33791],{"class":145},[139,50429,50430,50432,50434,50436],{"class":141,"line":10284},[139,50431,34312],{"class":2111},[139,50433,150],{"class":149},[139,50435,2640],{"class":153},[139,50437,33715],{"class":145},[139,50439,50440,50442,50444,50446],{"class":141,"line":10289},[139,50441,34324],{"class":2111},[139,50443,150],{"class":149},[139,50445,33725],{"class":153},[139,50447,33715],{"class":145},[139,50449,50450],{"class":141,"line":10295},[139,50451,34335],{"class":2512},[139,50453,50454,50456,50458,50460],{"class":141,"line":10307},[139,50455,34340],{"class":2111},[139,50457,150],{"class":149},[139,50459,2833],{"class":153},[139,50461,164],{"class":145},[139,50463,50464,50466,50468,50470,50472,50474],{"class":141,"line":10319},[139,50465,34351],{"class":145},[139,50467,150],{"class":149},[139,50469,33783],{"class":145},[139,50471,33786],{"class":2111},[139,50473,150],{"class":149},[139,50475,34362],{"class":145},[139,50477,50478,50480,50482,50484],{"class":141,"line":10331},[139,50479,34367],{"class":2111},[139,50481,150],{"class":149},[139,50483,2640],{"class":153},[139,50485,33715],{"class":145},[139,50487,50488,50490,50492,50494],{"class":141,"line":11990},[139,50489,34378],{"class":2111},[139,50491,150],{"class":149},[139,50493,33725],{"class":153},[139,50495,33715],{"class":145},[139,50497,50498,50500,50502,50504],{"class":141,"line":12015},[139,50499,34389],{"class":2111},[139,50501,150],{"class":149},[139,50503,2833],{"class":153},[139,50505,164],{"class":145},[139,50507,50508,50510],{"class":141,"line":12038},[139,50509,978],{"class":149},[139,50511,34402],{"class":145},[139,50513,50514],{"class":141,"line":12062},[139,50515,843],{"emptyLinePlaceholder":842},[139,50517,50518],{"class":141,"line":12067},[139,50519,34411],{"class":2512},[139,50521,50522],{"class":141,"line":12072},[139,50523,34416],{"class":2512},[139,50525,50526],{"class":141,"line":12077},[139,50527,843],{"emptyLinePlaceholder":842},[139,50529,50530],{"class":141,"line":12086},[139,50531,34425],{"class":2512},[139,50533,50534,50536,50538],{"class":141,"line":12091},[139,50535,778],{"class":149},[139,50537,34432],{"class":781},[139,50539,34435],{"class":145},[139,50541,50542,50544,50546,50548,50550,50552,50554,50556,50558],{"class":141,"line":12097},[139,50543,33488],{"class":145},[139,50545,150],{"class":149},[139,50547,32706],{"class":145},[139,50549,33495],{"class":160},[139,50551,3992],{"class":149},[139,50553,33500],{"class":145},[139,50555,656],{"class":149},[139,50557,34454],{"class":160},[139,50559,164],{"class":145},[139,50561,50562],{"class":141,"line":12118},[139,50563,843],{"emptyLinePlaceholder":842},[139,50565,50566],{"class":141,"line":12124},[139,50567,34469],{"class":2512},[139,50569,50570],{"class":141,"line":12138},[139,50571,34474],{"class":2512},[139,50573,50574],{"class":141,"line":12144},[139,50575,34479],{"class":2512},[139,50577,50578,50580,50582,50584,50586,50588,50590],{"class":141,"line":12171},[139,50579,34484],{"class":145},[139,50581,150],{"class":149},[139,50583,34489],{"class":145},[139,50585,34492],{"class":2111},[139,50587,150],{"class":149},[139,50589,34497],{"class":153},[139,50591,164],{"class":145},[139,50593,50594],{"class":141,"line":12180},[139,50595,843],{"emptyLinePlaceholder":842},[139,50597,50598],{"class":141,"line":12186},[139,50599,34508],{"class":2512},[139,50601,50602,50604,50606],{"class":141,"line":12194},[139,50603,34513],{"class":145},[139,50605,150],{"class":149},[139,50607,34518],{"class":145},[139,50609,50610],{"class":141,"line":12199},[139,50611,843],{"emptyLinePlaceholder":842},[139,50613,50614],{"class":141,"line":18871},[139,50615,34527],{"class":2512},[139,50617,50618,50620,50622],{"class":141,"line":18877},[139,50619,33540],{"class":145},[139,50621,150],{"class":149},[139,50623,34536],{"class":145},[139,50625,50626],{"class":141,"line":18900},[139,50627,34541],{"class":2512},[139,50629,50630],{"class":141,"line":18906},[139,50631,34546],{"class":2512},[139,50633,50634],{"class":141,"line":18929},[139,50635,34551],{"class":2512},[139,50637,50638,50640,50642],{"class":141,"line":18943},[139,50639,34556],{"class":145},[139,50641,150],{"class":149},[139,50643,34561],{"class":145},[139,50645,50646],{"class":141,"line":18963},[139,50647,843],{"emptyLinePlaceholder":842},[139,50649,50650],{"class":141,"line":18969},[139,50651,34574],{"class":2512},[139,50653,50654],{"class":141,"line":18980},[139,50655,34579],{"class":2512},[139,50657,50658,50660,50662],{"class":141,"line":19003},[139,50659,34584],{"class":145},[139,50661,150],{"class":149},[139,50663,34589],{"class":153},[139,50665,50666],{"class":141,"line":19025},[139,50667,34594],{"class":2512},[139,50669,50670,50672,50674],{"class":141,"line":19030},[139,50671,34599],{"class":145},[139,50673,150],{"class":149},[139,50675,34604],{"class":145},[139,50677,50678],{"class":141,"line":19036},[139,50679,34609],{"class":2512},[139,50681,50682,50684,50686],{"class":141,"line":19050},[139,50683,34614],{"class":145},[139,50685,150],{"class":149},[139,50687,34604],{"class":145},[139,50689,50690],{"class":141,"line":19063},[139,50691,34623],{"class":2512},[139,50693,50694,50696,50698],{"class":141,"line":19068},[139,50695,34628],{"class":145},[139,50697,150],{"class":149},[139,50699,34604],{"class":145},[139,50701,50702],{"class":141,"line":19082},[139,50703,34637],{"class":2512},[139,50705,50706,50708,50710],{"class":141,"line":19087},[139,50707,34642],{"class":145},[139,50709,150],{"class":149},[139,50711,34604],{"class":145},[139,50713,50714],{"class":141,"line":19093},[139,50715,843],{"emptyLinePlaceholder":842},[139,50717,50718],{"class":141,"line":19098},[139,50719,34655],{"class":2512},[139,50721,50722,50724,50726],{"class":141,"line":19112},[139,50723,34660],{"class":145},[139,50725,150],{"class":149},[139,50727,34665],{"class":145},[139,50729,50730],{"class":141,"line":19117},[139,50731,843],{"emptyLinePlaceholder":842},[139,50733,50734],{"class":141,"line":19122},[139,50735,34678],{"class":2512},[139,50737,50738,50740,50742,50744,50746],{"class":141,"line":19136},[139,50739,5482],{"class":149},[139,50741,34685],{"class":145},[139,50743,1976],{"class":149},[139,50745,34690],{"class":153},[139,50747,34693],{"class":145},[139,50749,50750,50752,50754,50756,50758,50760,50762,50764,50766,50768,50770],{"class":141,"line":19148},[139,50751,34698],{"class":153},[139,50753,157],{"class":145},[139,50755,34703],{"class":160},[139,50757,34706],{"class":153},[139,50759,3019],{"class":160},[139,50761,34706],{"class":153},[139,50763,634],{"class":160},[139,50765,34715],{"class":145},[139,50767,855],{"class":149},[139,50769,410],{"class":153},[139,50771,207],{"class":145},[139,50773,50774,50776,50778,50780,50782,50784],{"class":141,"line":19153},[139,50775,34698],{"class":153},[139,50777,157],{"class":145},[139,50779,34730],{"class":160},[139,50781,2892],{"class":149},[139,50783,536],{"class":153},[139,50785,164],{"class":145},[139,50787,50788],{"class":141,"line":19166},[139,50789,843],{"emptyLinePlaceholder":842},[139,50791,50792],{"class":141,"line":19171},[139,50793,34745],{"class":2512},[139,50795,50796],{"class":141,"line":19176},[139,50797,34750],{"class":2512},[139,50799,50800,50802,50804],{"class":141,"line":19181},[139,50801,34755],{"class":145},[139,50803,150],{"class":149},[139,50805,34589],{"class":153},[139,50807,50808],{"class":141,"line":19194},[139,50809,34764],{"class":2512},[139,50811,50812,50814,50816],{"class":141,"line":19199},[139,50813,34769],{"class":145},[139,50815,150],{"class":149},[139,50817,5367],{"class":153},[139,50819,50820],{"class":141,"line":34880},[139,50821,34778],{"class":2512},[139,50823,50824,50826,50828],{"class":141,"line":34886},[139,50825,34783],{"class":145},[139,50827,150],{"class":149},[139,50829,34589],{"class":153},[139,50831,50832],{"class":141,"line":34892},[139,50833,34792],{"class":2512},[139,50835,50836,50838,50840],{"class":141,"line":34898},[139,50837,34797],{"class":145},[139,50839,150],{"class":149},[139,50841,5367],{"class":153},[139,50843,50844],{"class":141,"line":34904},[139,50845,34806],{"class":2512},[139,50847,50848,50850,50852],{"class":141,"line":34915},[139,50849,34811],{"class":145},[139,50851,150],{"class":149},[139,50853,5367],{"class":153},[139,50855,50856],{"class":141,"line":34921},[139,50857,34820],{"class":2512},[139,50859,50860,50862,50864],{"class":141,"line":34941},[139,50861,34825],{"class":145},[139,50863,150],{"class":149},[139,50865,5367],{"class":153},[139,50867,50868],{"class":141,"line":34947},[139,50869,34834],{"class":2512},[139,50871,50872,50874,50876,50878,50880],{"class":141,"line":34958},[139,50873,5684],{"class":149},[139,50875,33850],{"class":145},[139,50877,1976],{"class":149},[139,50879,33855],{"class":153},[139,50881,34847],{"class":145},[139,50883,50884],{"class":141,"line":34964},[139,50885,34852],{"class":2512},[139,50887,50888,50890,50892],{"class":141,"line":34970},[139,50889,34857],{"class":145},[139,50891,150],{"class":149},[139,50893,34862],{"class":145},[139,50895,50896],{"class":141,"line":34976},[139,50897,34867],{"class":2512},[139,50899,50900,50902,50904],{"class":141,"line":34982},[139,50901,34872],{"class":145},[139,50903,150],{"class":149},[139,50905,34877],{"class":145},[139,50907,50908],{"class":141,"line":34988},[139,50909,34883],{"class":2512},[139,50911,50912],{"class":141,"line":34994},[139,50913,34889],{"class":145},[139,50915,50916],{"class":141,"line":35000},[139,50917,34895],{"class":2512},[139,50919,50920],{"class":141,"line":35020},[139,50921,34901],{"class":2512},[139,50923,50924,50926,50928],{"class":141,"line":35026},[139,50925,34907],{"class":145},[139,50927,150],{"class":149},[139,50929,34912],{"class":145},[139,50931,50932],{"class":141,"line":35042},[139,50933,34918],{"class":2512},[139,50935,50936,50938,50940,50942,50944,50946,50948],{"class":141,"line":35048},[139,50937,34924],{"class":145},[139,50939,150],{"class":149},[139,50941,34929],{"class":145},[139,50943,34932],{"class":2111},[139,50945,150],{"class":149},[139,50947,410],{"class":153},[139,50949,164],{"class":145},[139,50951,50952],{"class":141,"line":35062},[139,50953,34944],{"class":2512},[139,50955,50956,50958,50960],{"class":141,"line":35068},[139,50957,34950],{"class":145},[139,50959,150],{"class":149},[139,50961,34955],{"class":145},[139,50963,50964],{"class":141,"line":35083},[139,50965,34961],{"class":2512},[139,50967,50968],{"class":141,"line":35089},[139,50969,34967],{"class":145},[139,50971,50972],{"class":141,"line":35098},[139,50973,34973],{"class":2512},[139,50975,50976],{"class":141,"line":35104},[139,50977,34979],{"class":145},[139,50979,50980],{"class":141,"line":35113},[139,50981,34985],{"class":2512},[139,50983,50984],{"class":141,"line":35119},[139,50985,34991],{"class":145},[139,50987,50988],{"class":141,"line":35125},[139,50989,34997],{"class":2512},[139,50991,50992,50994,50996,50998,51000,51002,51004],{"class":141,"line":35134},[139,50993,35003],{"class":145},[139,50995,11751],{"class":149},[139,50997,35008],{"class":145},[139,50999,2892],{"class":149},[139,51001,35013],{"class":145},[139,51003,2634],{"class":153},[139,51005,164],{"class":145},[139,51007,51008],{"class":141,"line":35140},[139,51009,35023],{"class":2512},[139,51011,51012,51014,51016,51018,51020],{"class":141,"line":35151},[139,51013,35029],{"class":145},[139,51015,11751],{"class":149},[139,51017,35034],{"class":145},[139,51019,5232],{"class":149},[139,51021,35039],{"class":145},[139,51023,51024],{"class":141,"line":35157},[139,51025,35045],{"class":2512},[139,51027,51028,51030,51032,51034,51036],{"class":141,"line":35176},[139,51029,35051],{"class":145},[139,51031,11751],{"class":149},[139,51033,35013],{"class":145},[139,51035,2634],{"class":153},[139,51037,164],{"class":145},[139,51039,51040],{"class":141,"line":35182},[139,51041,35065],{"class":2512},[139,51043,51044,51046,51048,51050,51052],{"class":141,"line":35193},[139,51045,5684],{"class":149},[139,51047,35073],{"class":145},[139,51049,1976],{"class":149},[139,51051,33855],{"class":153},[139,51053,35080],{"class":145},[139,51055,51056],{"class":141,"line":35199},[139,51057,35086],{"class":2512},[139,51059,51060,51062,51064],{"class":141,"line":35219},[139,51061,34857],{"class":145},[139,51063,150],{"class":149},[139,51065,34862],{"class":145},[139,51067,51068],{"class":141,"line":35235},[139,51069,35101],{"class":2512},[139,51071,51072,51074,51076],{"class":141,"line":35241},[139,51073,34872],{"class":145},[139,51075,150],{"class":149},[139,51077,34877],{"class":145},[139,51079,51080],{"class":141,"line":35255},[139,51081,35116],{"class":2512},[139,51083,51084],{"class":141,"line":35261},[139,51085,35122],{"class":145},[139,51087,51088],{"class":141,"line":35267},[139,51089,38599],{"class":2512},[139,51091,51092,51094],{"class":141,"line":35278},[139,51093,35128],{"class":149},[139,51095,35131],{"class":145},[139,51097,51098],{"class":141,"line":35284},[139,51099,35137],{"class":2512},[139,51101,51102,51104,51106],{"class":141,"line":35290},[139,51103,38614],{"class":145},[139,51105,150],{"class":149},[139,51107,34912],{"class":145},[139,51109,51110],{"class":141,"line":35300},[139,51111,35154],{"class":2512},[139,51113,51114,51116,51118,51120,51122,51124,51126],{"class":141,"line":35306},[139,51115,38627],{"class":145},[139,51117,150],{"class":149},[139,51119,34929],{"class":145},[139,51121,34932],{"class":2111},[139,51123,150],{"class":149},[139,51125,410],{"class":153},[139,51127,164],{"class":145},[139,51129,51130],{"class":141,"line":35317},[139,51131,35179],{"class":2512},[139,51133,51134,51136,51138],{"class":141,"line":35323},[139,51135,38648],{"class":145},[139,51137,150],{"class":149},[139,51139,34955],{"class":145},[139,51141,51142],{"class":141,"line":35333},[139,51143,35196],{"class":2512},[139,51145,51146,51148,51150,51152,51154,51156,51158],{"class":141,"line":35338},[139,51147,38661],{"class":145},[139,51149,11751],{"class":149},[139,51151,38666],{"class":145},[139,51153,2892],{"class":149},[139,51155,35013],{"class":145},[139,51157,2634],{"class":153},[139,51159,164],{"class":145},[139,51161,51162,51164,51166,51168,51170],{"class":141,"line":35344},[139,51163,38679],{"class":145},[139,51165,11751],{"class":149},[139,51167,35034],{"class":145},[139,51169,5232],{"class":149},[139,51171,35039],{"class":145},[139,51173,51174],{"class":141,"line":35392},[139,51175,38692],{"class":2512},[139,51177,51178,51180,51182,51184,51186],{"class":141,"line":35439},[139,51179,38697],{"class":145},[139,51181,11751],{"class":149},[139,51183,35013],{"class":145},[139,51185,2634],{"class":153},[139,51187,164],{"class":145},[139,51189,51190],{"class":141,"line":35444},[139,51191,35258],{"class":2512},[139,51193,51194],{"class":141,"line":35450},[139,51195,35264],{"class":2512},[139,51197,51198,51200,51202],{"class":141,"line":35469},[139,51199,35270],{"class":145},[139,51201,3019],{"class":149},[139,51203,35275],{"class":145},[139,51205,51206],{"class":141,"line":35475},[139,51207,35281],{"class":2512},[139,51209,51210],{"class":141,"line":35494},[139,51211,35287],{"class":2512},[139,51213,51214,51216,51218],{"class":141,"line":35500},[139,51215,35293],{"class":145},[139,51217,3019],{"class":149},[139,51219,35275],{"class":145},[139,51221,51222],{"class":141,"line":35506},[139,51223,35303],{"class":2512},[139,51225,51226,51228,51230],{"class":141,"line":35516},[139,51227,35309],{"class":145},[139,51229,3019],{"class":149},[139,51231,35314],{"class":145},[139,51233,51234],{"class":141,"line":35521},[139,51235,35320],{"class":2512},[139,51237,51238,51240,51242],{"class":141,"line":35527},[139,51239,35326],{"class":145},[139,51241,3019],{"class":149},[139,51243,35314],{"class":145},[139,51245,51246],{"class":141,"line":35543},[139,51247,843],{"emptyLinePlaceholder":842},[139,51249,51250],{"class":141,"line":35588},[139,51251,35341],{"class":2512},[139,51253,51254,51256,51258,51260,51262,51264,51266,51268,51270,51272,51274,51276,51278,51280,51282,51284,51286,51288,51290,51292],{"class":141,"line":35594},[139,51255,34698],{"class":153},[139,51257,157],{"class":145},[139,51259,5873],{"class":160},[139,51261,34706],{"class":153},[139,51263,35355],{"class":160},[139,51265,625],{"class":153},[139,51267,35360],{"class":149},[139,51269,631],{"class":153},[139,51271,35365],{"class":160},[139,51273,625],{"class":153},[139,51275,35360],{"class":149},[139,51277,631],{"class":153},[139,51279,5873],{"class":160},[139,51281,35376],{"class":145},[139,51283,855],{"class":149},[139,51285,410],{"class":153},[139,51287,35383],{"class":145},[139,51289,855],{"class":149},[139,51291,410],{"class":153},[139,51293,1454],{"class":145},[139,51295,51296,51298,51300,51302,51304,51306,51308,51310,51312,51314,51316,51318,51320,51322,51324,51326,51328,51330,51332,51334],{"class":141,"line":35600},[139,51297,34698],{"class":153},[139,51299,157],{"class":145},[139,51301,5873],{"class":160},[139,51303,34706],{"class":153},[139,51305,35403],{"class":160},[139,51307,625],{"class":153},[139,51309,35360],{"class":149},[139,51311,631],{"class":153},[139,51313,35412],{"class":160},[139,51315,625],{"class":153},[139,51317,35360],{"class":149},[139,51319,631],{"class":153},[139,51321,5873],{"class":160},[139,51323,35423],{"class":145},[139,51325,855],{"class":149},[139,51327,410],{"class":153},[139,51329,35430],{"class":145},[139,51331,855],{"class":149},[139,51333,410],{"class":153},[139,51335,1454],{"class":145},[139,51337,51338],{"class":141,"line":35606},[139,51339,843],{"emptyLinePlaceholder":842},[139,51341,51342],{"class":141,"line":35617},[139,51343,35447],{"class":2512},[139,51345,51346,51348,51350,51352,51354,51356,51358],{"class":141,"line":35623},[139,51347,4780],{"class":149},[139,51349,35455],{"class":145},[139,51351,855],{"class":149},[139,51353,410],{"class":153},[139,51355,3373],{"class":145},[139,51357,958],{"class":149},[139,51359,35466],{"class":145},[139,51361,51362],{"class":141,"line":35629},[139,51363,35472],{"class":2512},[139,51365,51366,51368,51370,51372,51374,51376,51378],{"class":141,"line":35635},[139,51367,35478],{"class":145},[139,51369,2496],{"class":153},[139,51371,150],{"class":149},[139,51373,35485],{"class":145},[139,51375,855],{"class":149},[139,51377,410],{"class":153},[139,51379,424],{"class":145},[139,51381,51382],{"class":141,"line":35653},[139,51383,35497],{"class":2512},[139,51385,51386],{"class":141,"line":35667},[139,51387,35503],{"class":2512},[139,51389,51390,51392,51394],{"class":141,"line":35676},[139,51391,35509],{"class":145},[139,51393,150],{"class":149},[139,51395,34561],{"class":145},[139,51397,51398],{"class":141,"line":35685},[139,51399,843],{"emptyLinePlaceholder":842},[139,51401,51402],{"class":141,"line":35694},[139,51403,35524],{"class":2512},[139,51405,51406,51408,51410,51412,51414],{"class":141,"line":35703},[139,51407,35530],{"class":145},[139,51409,150],{"class":149},[139,51411,35535],{"class":145},[139,51413,855],{"class":149},[139,51415,35540],{"class":145},[139,51417,51418,51420,51422,51424,51426,51428,51430,51432,51434,51436,51438,51440,51442,51444,51446,51448,51450,51452],{"class":141,"line":35709},[139,51419,34698],{"class":153},[139,51421,157],{"class":145},[139,51423,35550],{"class":160},[139,51425,625],{"class":153},[139,51427,35555],{"class":149},[139,51429,631],{"class":153},[139,51431,2979],{"class":160},[139,51433,625],{"class":153},[139,51435,35555],{"class":149},[139,51437,631],{"class":153},[139,51439,35568],{"class":160},[139,51441,35571],{"class":145},[139,51443,35574],{"class":149},[139,51445,3341],{"class":153},[139,51447,35579],{"class":145},[139,51449,2766],{"class":149},[139,51451,3341],{"class":153},[139,51453,207],{"class":145},[139,51455,51456],{"class":141,"line":35715},[139,51457,38976],{"class":2512},[139,51459,51460],{"class":141,"line":35723},[139,51461,38981],{"class":2512},[139,51463,51464,51466,51468],{"class":141,"line":35728},[139,51465,38986],{"class":145},[139,51467,35612],{"class":160},[139,51469,164],{"class":145},[139,51471,51472],{"class":141,"line":35734},[139,51473,35632],{"class":2512},[139,51475,51476,51478,51480,51482,51484,51486],{"class":141,"line":35745},[139,51477,35638],{"class":145},[139,51479,150],{"class":149},[139,51481,35643],{"class":145},[139,51483,35646],{"class":2111},[139,51485,150],{"class":149},[139,51487,3843],{"class":145},[139,51489,51490,51492,51494,51496],{"class":141,"line":35751},[139,51491,35656],{"class":160},[139,51493,3294],{"class":145},[139,51495,35661],{"class":153},[139,51497,35664],{"class":145},[139,51499,51500,51502],{"class":141,"line":35771},[139,51501,35670],{"class":160},[139,51503,35673],{"class":145},[139,51505,51506,51508],{"class":141,"line":35777},[139,51507,35679],{"class":160},[139,51509,35682],{"class":145},[139,51511,51512,51514],{"class":141,"line":35783},[139,51513,35688],{"class":160},[139,51515,35691],{"class":145},[139,51517,51518,51520],{"class":141,"line":35789},[139,51519,35697],{"class":160},[139,51521,35700],{"class":145},[139,51523,51524],{"class":141,"line":35806},[139,51525,35706],{"class":145},[139,51527,51528],{"class":141,"line":35812},[139,51529,35712],{"class":2512},[139,51531,51532,51534],{"class":141,"line":35818},[139,51533,978],{"class":149},[139,51535,35720],{"class":145},[139,51537,51538],{"class":141,"line":35824},[139,51539,843],{"emptyLinePlaceholder":842},[139,51541,51542],{"class":141,"line":35830},[139,51543,35731],{"class":2512},[139,51545,51546,51548,51550],{"class":141,"line":35836},[139,51547,778],{"class":149},[139,51549,35739],{"class":781},[139,51551,35742],{"class":145},[139,51553,51554],{"class":141,"line":35863},[139,51555,35748],{"class":2512},[139,51557,51558,51560,51562,51564,51566,51568,51570,51572],{"class":141,"line":35887},[139,51559,35754],{"class":145},[139,51561,33942],{"class":2111},[139,51563,150],{"class":149},[139,51565,157],{"class":145},[139,51567,2934],{"class":153},[139,51569,2816],{"class":145},[139,51571,1476],{"class":153},[139,51573,207],{"class":145},[139,51575,51576],{"class":141,"line":35893},[139,51577,35774],{"class":2512},[139,51579,51580],{"class":141,"line":35899},[139,51581,35780],{"class":2512},[139,51583,51584],{"class":141,"line":35905},[139,51585,35786],{"class":2512},[139,51587,51588,51590,51592,51594,51596,51598,51600],{"class":141,"line":35916},[139,51589,33976],{"class":145},[139,51591,410],{"class":153},[139,51593,2816],{"class":145},[139,51595,416],{"class":153},[139,51597,2816],{"class":145},[139,51599,410],{"class":153},[139,51601,164],{"class":145},[139,51603,51604],{"class":141,"line":35927},[139,51605,35809],{"class":2512},[139,51607,51608],{"class":141,"line":35933},[139,51609,35815],{"class":2512},[139,51611,51612],{"class":141,"line":35950},[139,51613,35821],{"class":2512},[139,51615,51616],{"class":141,"line":35973},[139,51617,35827],{"class":2512},[139,51619,51620],{"class":141,"line":35996},[139,51621,35833],{"class":2512},[139,51623,51624,51626,51628,51630,51632,51634,51636,51638,51640],{"class":141,"line":36002},[139,51625,35839],{"class":145},[139,51627,35842],{"class":160},[139,51629,35845],{"class":145},[139,51631,35848],{"class":160},[139,51633,2816],{"class":145},[139,51635,35853],{"class":2111},[139,51637,150],{"class":149},[139,51639,35858],{"class":160},[139,51641,164],{"class":145},[139,51643,51644,51646,51648,51650,51652,51654,51656,51658,51660],{"class":141,"line":36007},[139,51645,35839],{"class":145},[139,51647,35842],{"class":160},[139,51649,35870],{"class":145},[139,51651,35873],{"class":160},[139,51653,2816],{"class":145},[139,51655,35853],{"class":2111},[139,51657,150],{"class":149},[139,51659,35882],{"class":160},[139,51661,164],{"class":145},[139,51663,51664],{"class":141,"line":36016},[139,51665,35890],{"class":2512},[139,51667,51668],{"class":141,"line":36026},[139,51669,35896],{"class":145},[139,51671,51672],{"class":141,"line":36032},[139,51673,35902],{"class":2512},[139,51675,51676,51678,51680],{"class":141,"line":36037},[139,51677,35908],{"class":145},[139,51679,35911],{"class":160},[139,51681,164],{"class":145},[139,51683,51684,51686,51688],{"class":141,"line":36043},[139,51685,35919],{"class":145},[139,51687,35922],{"class":160},[139,51689,164],{"class":145},[139,51691,51692],{"class":141,"line":36056},[139,51693,35930],{"class":2512},[139,51695,51696,51698,51700,51702,51704,51706,51708],{"class":141,"line":36062},[139,51697,33976],{"class":145},[139,51699,410],{"class":153},[139,51701,2816],{"class":145},[139,51703,416],{"class":153},[139,51705,2816],{"class":145},[139,51707,416],{"class":153},[139,51709,164],{"class":145},[139,51711,51712,51714,51716,51718,51720,51722,51724,51726,51728],{"class":141,"line":36073},[139,51713,35839],{"class":145},[139,51715,35842],{"class":160},[139,51717,35957],{"class":145},[139,51719,35848],{"class":160},[139,51721,2816],{"class":145},[139,51723,35853],{"class":2111},[139,51725,150],{"class":149},[139,51727,35968],{"class":160},[139,51729,164],{"class":145},[139,51731,51732,51734,51736,51738,51740,51742,51744,51746,51748],{"class":141,"line":36084},[139,51733,35839],{"class":145},[139,51735,35842],{"class":160},[139,51737,35980],{"class":145},[139,51739,35873],{"class":160},[139,51741,2816],{"class":145},[139,51743,35853],{"class":2111},[139,51745,150],{"class":149},[139,51747,35991],{"class":160},[139,51749,164],{"class":145},[139,51751,51752],{"class":141,"line":36103},[139,51753,35999],{"class":2512},[139,51755,51757],{"class":141,"line":51756},219,[139,51758,35896],{"class":145},[139,51760,51762,51764,51766],{"class":141,"line":51761},220,[139,51763,35908],{"class":145},[139,51765,35842],{"class":160},[139,51767,164],{"class":145},[139,51769,51771,51773,51775],{"class":141,"line":51770},221,[139,51772,35919],{"class":145},[139,51774,36021],{"class":160},[139,51776,164],{"class":145},[139,51778,51780],{"class":141,"line":51779},222,[139,51781,36029],{"class":145},[139,51783,51785],{"class":141,"line":51784},223,[139,51786,843],{"emptyLinePlaceholder":842},[139,51788,51790],{"class":141,"line":51789},224,[139,51791,36040],{"class":2512},[139,51793,51795,51797,51799,51801,51803],{"class":141,"line":51794},225,[139,51796,1729],{"class":149},[139,51798,1732],{"class":153},[139,51800,5232],{"class":149},[139,51802,33476],{"class":160},[139,51804,246],{"class":145},[139,51806,51808],{"class":141,"line":51807},226,[139,51809,36059],{"class":2512},[139,51811,51813,51815,51817],{"class":141,"line":51812},227,[139,51814,46788],{"class":145},[139,51816,150],{"class":149},[139,51818,46793],{"class":145},[139,51820,51822,51824,51826],{"class":141,"line":51821},228,[139,51823,36076],{"class":145},[139,51825,150],{"class":149},[139,51827,36081],{"class":145},[139,51829,51831,51833,51835,51837,51839,51841,51843],{"class":141,"line":51830},229,[139,51832,35638],{"class":145},[139,51834,150],{"class":149},[139,51836,46810],{"class":145},[139,51838,36094],{"class":2111},[139,51840,150],{"class":149},[139,51842,3341],{"class":153},[139,51844,164],{"class":145},[139,51846,51848],{"class":141,"line":51847},230,[139,51849,36106],{"class":145},[24265,51851,51853],{"id":51852},"_242测试代码","2.4.2.测试代码",[19,51855,51856],{},"使用测试集进行测试与推理",[130,51858,51860],{"className":132,"code":51859,"language":134,"meta":135,"style":135},"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",[50,51861,51862,51868,51878,51888,51899,51909,51913,51917,51925,51930,51934,51951,51955,51959,51963,51967,51971,52003,52007,52015,52019,52031,52035,52039,52043,52047,52051,52055,52059,52063,52081,52095,52099,52109,52119,52129,52135,52139,52143,52151,52155,52171,52179,52183,52187,52195,52203,52207,52211,52215,52219,52225,52229,52239,52247,52255,52259,52263,52267,52275,52279,52295,52299,52303,52307,52319,52323,52335,52339,52343,52355,52359,52369,52373,52377,52389,52393,52401,52405,52409,52417,52421,52429,52433,52437,52441,52445,52449,52465,52473,52477,52481,52499,52505,52509,52519,52527,52535,52539,52543,52547,52551,52559,52563,52579,52583,52591,52599],{"__ignoreMap":135},[139,51863,51864,51866],{"class":141,"line":142},[139,51865,1064],{"class":149},[139,51867,32651],{"class":145},[139,51869,51870,51872,51874,51876],{"class":141,"line":210},[139,51871,1064],{"class":149},[139,51873,33664],{"class":145},[139,51875,1035],{"class":149},[139,51877,33669],{"class":145},[139,51879,51880,51882,51884,51886],{"class":141,"line":254},[139,51881,1265],{"class":149},[139,51883,33647],{"class":145},[139,51885,1064],{"class":149},[139,51887,33652],{"class":145},[139,51889,51890,51892,51894,51896],{"class":141,"line":262},[139,51891,1265],{"class":149},[139,51893,33618],{"class":145},[139,51895,1064],{"class":149},[139,51897,51898],{"class":145}," ImageFolder\n",[139,51900,51901,51903,51905,51907],{"class":141,"line":313},[139,51902,1265],{"class":149},[139,51904,34162],{"class":145},[139,51906,1064],{"class":149},[139,51908,46882],{"class":145},[139,51910,51911],{"class":141,"line":462},[139,51912,843],{"emptyLinePlaceholder":842},[139,51914,51915],{"class":141,"line":474},[139,51916,36196],{"class":2512},[139,51918,51919,51921,51923],{"class":141,"line":484},[139,51920,778],{"class":149},[139,51922,36203],{"class":781},[139,51924,34200],{"class":145},[139,51926,51927],{"class":141,"line":989},[139,51928,51929],{"class":2512},"   # 导入自己的数据集，并进行数据处理\n",[139,51931,51932],{"class":141,"line":994},[139,51933,50199],{"class":2512},[139,51935,51936,51938,51940,51942,51944,51946,51949],{"class":141,"line":999},[139,51937,50204],{"class":153},[139,51939,150],{"class":149},[139,51941,3105],{"class":149},[139,51943,634],{"class":160},[139,51945,2993],{"class":153},[139,51947,51948],{"class":50215},"\u002Fdata\u002Ftest",[139,51950,27396],{"class":160},[139,51952,51953],{"class":141,"line":1006},[139,51954,843],{"emptyLinePlaceholder":842},[139,51956,51957],{"class":141,"line":1027},[139,51958,50227],{"class":2512},[139,51960,51961],{"class":141,"line":1040},[139,51962,50232],{"class":2512},[139,51964,51965],{"class":141,"line":2160},[139,51966,50237],{"class":2512},[139,51968,51969],{"class":141,"line":2188},[139,51970,50242],{"class":2512},[139,51972,51973,51975,51977,51979,51981,51983,51985,51987,51989,51991,51993,51995,51997,51999,52001],{"class":141,"line":3944},[139,51974,50247],{"class":145},[139,51976,150],{"class":149},[139,51978,50252],{"class":145},[139,51980,50255],{"class":153},[139,51982,2816],{"class":145},[139,51984,50260],{"class":153},[139,51986,2816],{"class":145},[139,51988,50265],{"class":153},[139,51990,50268],{"class":145},[139,51992,50271],{"class":153},[139,51994,2816],{"class":145},[139,51996,50276],{"class":153},[139,51998,2816],{"class":145},[139,52000,50281],{"class":153},[139,52002,6935],{"class":145},[139,52004,52005],{"class":141,"line":3963},[139,52006,50288],{"class":2512},[139,52008,52009,52011,52013],{"class":141,"line":3968},[139,52010,50293],{"class":145},[139,52012,150],{"class":149},[139,52014,50298],{"class":145},[139,52016,52017],{"class":141,"line":3982},[139,52018,50303],{"class":2512},[139,52020,52021,52023,52025,52027,52029],{"class":141,"line":3987},[139,52022,50308],{"class":145},[139,52024,33750],{"class":153},[139,52026,2816],{"class":145},[139,52028,33750],{"class":153},[139,52030,44864],{"class":145},[139,52032,52033],{"class":141,"line":4014},[139,52034,50321],{"class":2512},[139,52036,52037],{"class":141,"line":4019},[139,52038,50326],{"class":145},[139,52040,52041],{"class":141,"line":4036},[139,52042,50331],{"class":145},[139,52044,52045],{"class":141,"line":4041},[139,52046,50336],{"class":2512},[139,52048,52049],{"class":141,"line":4046},[139,52050,50341],{"class":2512},[139,52052,52053],{"class":141,"line":4051},[139,52054,843],{"emptyLinePlaceholder":842},[139,52056,52057],{"class":141,"line":4065},[139,52058,50350],{"class":2512},[139,52060,52061],{"class":141,"line":4070},[139,52062,50355],{"class":2512},[139,52064,52065,52067,52069,52071,52073,52075,52077,52079],{"class":141,"line":4860},[139,52066,36210],{"class":145},[139,52068,150],{"class":149},[139,52070,50364],{"class":145},[139,52072,50367],{"class":153},[139,52074,2816],{"class":145},[139,52076,50372],{"class":2111},[139,52078,150],{"class":149},[139,52080,50377],{"class":145},[139,52082,52083,52085,52087,52089,52091,52093],{"class":141,"line":4874},[139,52084,36266],{"class":145},[139,52086,150],{"class":149},[139,52088,33783],{"class":145},[139,52090,33786],{"class":2111},[139,52092,150],{"class":149},[139,52094,36277],{"class":145},[139,52096,52097],{"class":141,"line":4882},[139,52098,36282],{"class":2512},[139,52100,52101,52103,52105,52107],{"class":141,"line":4887},[139,52102,36287],{"class":2111},[139,52104,150],{"class":149},[139,52106,410],{"class":153},[139,52108,33715],{"class":145},[139,52110,52111,52113,52115,52117],{"class":141,"line":4893},[139,52112,36298],{"class":2111},[139,52114,150],{"class":149},[139,52116,33725],{"class":153},[139,52118,33715],{"class":145},[139,52120,52121,52123,52125,52127],{"class":141,"line":4899},[139,52122,36309],{"class":2111},[139,52124,150],{"class":149},[139,52126,2634],{"class":153},[139,52128,164],{"class":145},[139,52130,52131,52133],{"class":141,"line":4904},[139,52132,978],{"class":149},[139,52134,36322],{"class":145},[139,52136,52137],{"class":141,"line":10222},[139,52138,843],{"emptyLinePlaceholder":842},[139,52140,52141],{"class":141,"line":10246},[139,52142,36331],{"class":2512},[139,52144,52145,52147,52149],{"class":141,"line":10251},[139,52146,778],{"class":149},[139,52148,36338],{"class":781},[139,52150,36341],{"class":145},[139,52152,52153],{"class":141,"line":10257},[139,52154,36346],{"class":2512},[139,52156,52157,52159,52161,52163,52165,52167,52169],{"class":141,"line":10284},[139,52158,33488],{"class":145},[139,52160,150],{"class":149},[139,52162,33495],{"class":160},[139,52164,3992],{"class":149},[139,52166,33500],{"class":145},[139,52168,656],{"class":149},[139,52170,36363],{"class":160},[139,52172,52173,52175,52177],{"class":141,"line":10289},[139,52174,33540],{"class":145},[139,52176,150],{"class":149},[139,52178,34536],{"class":145},[139,52180,52181],{"class":141,"line":10295},[139,52182,843],{"emptyLinePlaceholder":842},[139,52184,52185],{"class":141,"line":10307},[139,52186,36380],{"class":2512},[139,52188,52189,52191,52193],{"class":141,"line":10319},[139,52190,36385],{"class":145},[139,52192,150],{"class":149},[139,52194,34589],{"class":153},[139,52196,52197,52199,52201],{"class":141,"line":10331},[139,52198,36394],{"class":145},[139,52200,150],{"class":149},[139,52202,5367],{"class":153},[139,52204,52205],{"class":141,"line":11990},[139,52206,843],{"emptyLinePlaceholder":842},[139,52208,52209],{"class":141,"line":12015},[139,52210,36407],{"class":2512},[139,52212,52213],{"class":141,"line":12038},[139,52214,36412],{"class":2512},[139,52216,52217],{"class":141,"line":12062},[139,52218,36417],{"class":2512},[139,52220,52221,52223],{"class":141,"line":12067},[139,52222,2097],{"class":149},[139,52224,35131],{"class":145},[139,52226,52227],{"class":141,"line":12072},[139,52228,36428],{"class":2512},[139,52230,52231,52233,52235,52237],{"class":141,"line":12077},[139,52232,5684],{"class":149},[139,52234,36435],{"class":145},[139,52236,1976],{"class":149},[139,52238,36440],{"class":145},[139,52240,52241,52243,52245],{"class":141,"line":12086},[139,52242,36445],{"class":145},[139,52244,150],{"class":149},[139,52246,36450],{"class":145},[139,52248,52249,52251,52253],{"class":141,"line":12091},[139,52250,36455],{"class":145},[139,52252,150],{"class":149},[139,52254,36460],{"class":145},[139,52256,52257],{"class":141,"line":12097},[139,52258,36465],{"class":2512},[139,52260,52261],{"class":141,"line":12118},[139,52262,35122],{"class":145},[139,52264,52265],{"class":141,"line":12124},[139,52266,36474],{"class":2512},[139,52268,52269,52271,52273],{"class":141,"line":12138},[139,52270,34907],{"class":145},[139,52272,150],{"class":149},[139,52274,36483],{"class":145},[139,52276,52277],{"class":141,"line":12144},[139,52278,36488],{"class":2512},[139,52280,52281,52283,52285,52287,52289,52291,52293],{"class":141,"line":12171},[139,52282,34924],{"class":145},[139,52284,150],{"class":149},[139,52286,34929],{"class":145},[139,52288,34932],{"class":2111},[139,52290,150],{"class":149},[139,52292,410],{"class":153},[139,52294,164],{"class":145},[139,52296,52297],{"class":141,"line":12180},[139,52298,36509],{"class":2512},[139,52300,52301],{"class":141,"line":12186},[139,52302,36514],{"class":2512},[139,52304,52305],{"class":141,"line":12194},[139,52306,36519],{"class":2512},[139,52308,52309,52311,52313,52315,52317],{"class":141,"line":12199},[139,52310,36524],{"class":145},[139,52312,11751],{"class":149},[139,52314,35034],{"class":145},[139,52316,5232],{"class":149},[139,52318,36533],{"class":145},[139,52320,52321],{"class":141,"line":18871},[139,52322,36538],{"class":2512},[139,52324,52325,52327,52329,52331,52333],{"class":141,"line":18877},[139,52326,36543],{"class":145},[139,52328,11751],{"class":149},[139,52330,36548],{"class":145},[139,52332,2634],{"class":153},[139,52334,164],{"class":145},[139,52336,52337],{"class":141,"line":18900},[139,52338,843],{"emptyLinePlaceholder":842},[139,52340,52341],{"class":141,"line":18906},[139,52342,36561],{"class":2512},[139,52344,52345,52347,52349,52351,52353],{"class":141,"line":18929},[139,52346,36566],{"class":145},[139,52348,150],{"class":149},[139,52350,36571],{"class":145},[139,52352,3019],{"class":149},[139,52354,36576],{"class":145},[139,52356,52357],{"class":141,"line":18943},[139,52358,36581],{"class":2512},[139,52360,52361,52363,52365,52367],{"class":141,"line":18963},[139,52362,34698],{"class":153},[139,52364,157],{"class":145},[139,52366,36590],{"class":160},[139,52368,36593],{"class":145},[139,52370,52371],{"class":141,"line":18969},[139,52372,843],{"emptyLinePlaceholder":842},[139,52374,52375],{"class":141,"line":18980},[139,52376,36602],{"class":2512},[139,52378,52379,52381,52383,52385,52387],{"class":141,"line":19003},[139,52380,1729],{"class":149},[139,52382,1732],{"class":153},[139,52384,5232],{"class":149},[139,52386,33476],{"class":160},[139,52388,246],{"class":145},[139,52390,52391],{"class":141,"line":19025},[139,52392,36619],{"class":2512},[139,52394,52395,52397,52399],{"class":141,"line":19030},[139,52396,33540],{"class":145},[139,52398,150],{"class":149},[139,52400,46793],{"class":145},[139,52402,52403],{"class":141,"line":19036},[139,52404,36632],{"class":2512},[139,52406,52407],{"class":141,"line":19050},[139,52408,36637],{"class":2512},[139,52410,52411,52413,52415],{"class":141,"line":19063},[139,52412,36642],{"class":145},[139,52414,36645],{"class":160},[139,52416,207],{"class":145},[139,52418,52419],{"class":141,"line":19068},[139,52420,36652],{"class":2512},[139,52422,52423,52425,52427],{"class":141,"line":19082},[139,52424,36266],{"class":145},[139,52426,150],{"class":149},[139,52428,36661],{"class":145},[139,52430,52431],{"class":141,"line":19087},[139,52432,36666],{"class":2512},[139,52434,52435],{"class":141,"line":19093},[139,52436,36671],{"class":145},[139,52438,52439],{"class":141,"line":19098},[139,52440,843],{"emptyLinePlaceholder":842},[139,52442,52443],{"class":141,"line":19112},[139,52444,36680],{"class":2512},[139,52446,52447],{"class":141,"line":19117},[139,52448,36685],{"class":2512},[139,52450,52451,52453,52455,52457,52459,52461,52463],{"class":141,"line":19122},[139,52452,33488],{"class":145},[139,52454,150],{"class":149},[139,52456,33495],{"class":160},[139,52458,3992],{"class":149},[139,52460,33500],{"class":145},[139,52462,656],{"class":149},[139,52464,36363],{"class":160},[139,52466,52467,52469,52471],{"class":141,"line":19136},[139,52468,33540],{"class":145},[139,52470,150],{"class":149},[139,52472,34536],{"class":145},[139,52474,52475],{"class":141,"line":19148},[139,52476,36714],{"class":2512},[139,52478,52479],{"class":141,"line":19153},[139,52480,36719],{"class":2512},[139,52482,52483,52485,52487,52489,52492,52494,52497],{"class":141,"line":19166},[139,52484,36724],{"class":145},[139,52486,150],{"class":149},[139,52488,3325],{"class":145},[139,52490,52491],{"class":160},"'猫'",[139,52493,2816],{"class":145},[139,52495,52496],{"class":160},"'狗'",[139,52498,424],{"class":145},[139,52500,52501,52503],{"class":141,"line":19171},[139,52502,2097],{"class":149},[139,52504,35131],{"class":145},[139,52506,52507],{"class":141,"line":19176},[139,52508,36789],{"class":2512},[139,52510,52511,52513,52515,52517],{"class":141,"line":19181},[139,52512,5684],{"class":149},[139,52514,36796],{"class":145},[139,52516,1976],{"class":149},[139,52518,36440],{"class":145},[139,52520,52521,52523,52525],{"class":141,"line":19194},[139,52522,34857],{"class":145},[139,52524,150],{"class":149},[139,52526,34862],{"class":145},[139,52528,52529,52531,52533],{"class":141,"line":19199},[139,52530,34872],{"class":145},[139,52532,150],{"class":149},[139,52534,34877],{"class":145},[139,52536,52537],{"class":141,"line":34880},[139,52538,843],{"emptyLinePlaceholder":842},[139,52540,52541],{"class":141,"line":34886},[139,52542,36825],{"class":2512},[139,52544,52545],{"class":141,"line":34892},[139,52546,35122],{"class":145},[139,52548,52549],{"class":141,"line":34898},[139,52550,36834],{"class":2512},[139,52552,52553,52555,52557],{"class":141,"line":34904},[139,52554,34907],{"class":145},[139,52556,150],{"class":149},[139,52558,34912],{"class":145},[139,52560,52561],{"class":141,"line":34915},[139,52562,36847],{"class":2512},[139,52564,52565,52567,52569,52571,52573,52575,52577],{"class":141,"line":34921},[139,52566,34924],{"class":145},[139,52568,150],{"class":149},[139,52570,34929],{"class":145},[139,52572,34932],{"class":2111},[139,52574,150],{"class":149},[139,52576,410],{"class":153},[139,52578,164],{"class":145},[139,52580,52581],{"class":141,"line":34941},[139,52582,36868],{"class":2512},[139,52584,52585,52587,52589],{"class":141,"line":34947},[139,52586,36873],{"class":145},[139,52588,150],{"class":149},[139,52590,36878],{"class":145},[139,52592,52593,52595,52597],{"class":141,"line":34958},[139,52594,36883],{"class":145},[139,52596,150],{"class":149},[139,52598,36888],{"class":145},[139,52600,52601,52603,52605,52607,52609,52611,52613,52615],{"class":141,"line":34964},[139,52602,36893],{"class":153},[139,52604,157],{"class":145},[139,52606,36898],{"class":160},[139,52608,36901],{"class":145},[139,52610,36904],{"class":160},[139,52612,2816],{"class":145},[139,52614,36909],{"class":160},[139,52616,36912],{"class":145},[2348,52618,52619],{},"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":135,"searchDepth":210,"depth":210,"links":52621},[52622,52623,52624,52625],{"id":32845,"depth":254,"text":32846},{"id":40082,"depth":254,"text":40083},{"id":43514,"depth":254,"text":43515},{"id":47523,"depth":254,"text":47524},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32837,"description":2384},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52632,"title":52633,"body":52634,"description":2384,"extension":2385,"meta":52641,"navigation":842,"path":52642,"seo":52643,"stem":52644,"__hash__":52645},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52635,"toc":52639},[52636],[10,52637,52633],{"id":52638},"_3yolo模型学习",{"title":135,"searchDepth":210,"depth":210,"links":52640},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52633,"description":2384},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52647,"title":52648,"body":52649,"description":52656,"extension":2385,"meta":52657,"navigation":842,"path":52659,"seo":52660,"stem":52661,"__hash__":52662},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52650,"toc":52654},[52651],[19,52652,52653],{},"yolo模型还未补充",{"title":135,"searchDepth":210,"depth":210,"links":52655},[],"深度学习学习",{"category":52658},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52648,"description":52656},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52664,"title":52665,"body":52666,"description":2384,"extension":2385,"meta":52691,"navigation":842,"path":52692,"seo":52693,"stem":52694,"__hash__":52695},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52667,"toc":52689},[52668,52671,52674,52679,52686],[10,52669,52665],{"id":52670},"_1工具",[19,52672,52673],{},"提示错误插件：有问题会提前报错",[19,52675,52676],{},[3760,52677],{"alt":135,"src":52678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52680,52681],{},[2680,52682,52685],{"href":52683,"rel":52684},"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",[26128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52687,52688],{},"alt键加上下箭头可以实现语句的移动",{"title":135,"searchDepth":210,"depth":210,"links":52690},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52665,"description":2384},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52697,"title":52698,"body":52699,"description":2384,"extension":2385,"meta":55560,"navigation":842,"path":55561,"seo":55562,"stem":55563,"__hash__":55564},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52700,"toc":55511},[52701,52704,52708,52712,52717,52720,52725,52729,52736,52741,52748,52753,52760,52765,52769,52774,52777,52781,52786,52790,52795,52798,52801,52804,52807,52810,52813,52816,52819,52824,52829,52834,52838,52841,52844,52848,52853,52856,52864,52869,52886,52894,52899,52904,52909,52914,52919,52922,52927,52932,52936,52945,52950,52955,52959,52964,52967,52971,52976,52984,52989,52994,52997,53002,53007,53012,53015,53018,53021,53026,53031,53034,53039,53042,53047,53050,53053,53056,53061,53064,53067,53082,53087,53092,53097,53100,53103,53106,53120,53123,53128,53133,53136,53139,53142,53145,53148,53151,53154,53158,53162,53167,53171,53174,53179,53184,53187,53192,53195,53199,53204,53207,53210,53213,53216,53219,53222,53225,53228,53231,53235,53240,53245,53250,53253,53256,53260,53265,53268,53272,53275,53278,53283,53286,53289,53293,53297,53300,53305,53310,53313,53342,53347,53352,53357,53362,53366,53371,53375,53380,53383,53387,53391,53396,53400,53405,53410,53414,53419,53422,53424,53427,53432,53436,53441,53445,53449,53454,53459,53464,53469,53473,53478,53483,53488,53491,53494,53499,53502,53507,53512,53517,53522,53526,54331,54335,54677,54682,54685,54688,54691,54694,54697,54700,54703,54706,54708,54711,54713,54716,54720,54725,54728,54731,54734,54738,54743,54748,54768,54771,54775,54780,54785,54802,54806,54835,54839,54861,54863,54902,54910,54916,54920,54923,54926,54931,54936,54939,54942,54945,54950,54955,54958,54961,54964,54967,54970,54973,54976,54979,54982,54985,54988,54990,54993,54996,54999,55002,55005,55008,55011,55014,55018,55023,55026,55031,55034,55037,55040,55043,55046,55049,55052,55054,55057,55060,55063,55066,55069,55072,55076,55079,55088,55091,55096,55099,55104,55107,55110,55113,55116,55119,55122,55125,55129,55133,55136,55139,55144,55149,55154,55158,55163,55168,55171,55174,55177,55180,55183,55188,55191,55196,55198,55203,55206,55210,55215,55218,55221,55226,55230,55233,55238,55241,55244,55273,55278,55281,55284,55287,55290,55293,55297,55300,55386,55390,55393,55398,55403,55410,55413,55416,55419,55422,55425,55430,55435,55438,55441,55444,55447,55450,55453,55456,55459,55462,55464,55467,55471,55476,55481,55486,55489,55494,55499,55502,55505,55508],[10,52702,52698],{"id":52703},"_2基础语法",[14,52705,52707],{"id":52706},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1217,52709,52711],{"id":52710},"_211-js组成","2.1.1 js组成",[1760,52713,52714],{},[1763,52715,52716],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52718,52719],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1760,52721,52722],{"start":210},[1763,52723,52724],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1217,52726,52728],{"id":52727},"_212-js书写位置","2.1.2 js书写位置",[1760,52730,52731],{},[1763,52732,52733],{},[1674,52734,52735],{},"内部 JavaScript",[19,52737,52738],{},[3760,52739],{"alt":135,"src":52740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1760,52742,52743],{"start":210},[1763,52744,52745],{},[1674,52746,52747],{},"外部 JavaScript",[19,52749,52750],{},[3760,52751],{"alt":135,"src":52752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1760,52754,52755],{"start":254},[1763,52756,52757],{},[1674,52758,52759],{},"内联 JavaScript",[19,52761,52762],{},[3760,52763],{"alt":135,"src":52764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1217,52766,52768],{"id":52767},"_213-javascript注释","2.1.3 JavaScript注释",[19,52770,52771],{},[3760,52772],{"alt":135,"src":52773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52775,52776],{},"alt+shift+a一定要记住！",[1217,52778,52780],{"id":52779},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52782,52783],{},[3760,52784],{"alt":135,"src":52785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1217,52787,52789],{"id":52788},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1760,52791,52792],{},[1763,52793,52794],{},"输出语法：",[19,52796,52797],{},"①document.write('要出的内容')",[19,52799,52800],{},"向body内输出内容；",[19,52802,52803],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52805,52806],{},"②alert('要出的内容')",[19,52808,52809],{},"页面弹出警告对话框",[19,52811,52812],{},"③console.log('控制台打印')",[19,52814,52815],{},"控制台输出语法，程序员调试使用",[19,52817,52818],{},"输入log就行，自动生成：",[19,52820,52821],{},[3760,52822],{"alt":135,"src":52823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1760,52825,52826],{"start":210},[1763,52827,52828],{},"输入语法：",[19,52830,52831],{},[3760,52832],{"alt":135,"src":52833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1217,52835,52837],{"id":52836},"_2116-字面量","21.1.6 字面量",[19,52839,52840],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52842,52843],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52845,52847],{"id":52846},"_22-变量","2.2 变量",[1760,52849,52850],{},[1763,52851,52852],{},"变量声明",[19,52854,52855],{},"let 变量名",[3437,52857,52858,52861],{},[1763,52859,52860],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1763,52862,52863],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1760,52865,52866],{"start":210},[1763,52867,52868],{},"变量赋值",[130,52870,52874],{"className":52871,"code":52872,"language":52873,"meta":135,"style":135},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[50,52875,52876,52881],{"__ignoreMap":135},[139,52877,52878],{"class":141,"line":142},[139,52879,52880],{"class":145},"let age\n",[139,52882,52883],{"class":141,"line":210},[139,52884,52885],{"class":145},"age=18\n",[1760,52887,52888,52891],{"start":254},[1763,52889,52890],{},"连这些（变量的初始化）：let age=18",[1763,52892,52893],{},"更新变量",[19,52895,52896],{},[3760,52897],{"alt":135,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1760,52900,52901],{"start":313},[1763,52902,52903],{},"声明多个变量",[19,52905,52906],{},[3760,52907],{"alt":135,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1760,52910,52911],{"start":462},[1763,52912,52913],{},"变量命名规则与规范",[19,52915,52916],{},[3760,52917],{"alt":135,"src":52918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52920,52921],{},"遵守小驼峰！",[1760,52923,52924],{"start":474},[1763,52925,52926],{},"变量拓展-let和var的区别",[19,52928,52929],{},[3760,52930],{"alt":135,"src":52931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52933,52935],{"id":52934},"_23-数组","2.3 数组",[130,52937,52939],{"className":52871,"code":52938,"language":52873,"meta":135,"style":135},"let arr = []\n",[50,52940,52941],{"__ignoreMap":135},[139,52942,52943],{"class":141,"line":142},[139,52944,52938],{"class":145},[19,52946,52947],{},[3760,52948],{"alt":135,"src":52949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52951,52952],{},[3760,52953],{"alt":135,"src":52954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52956,52958],{"id":52957},"_24-常量","2.4 常量",[19,52960,52961],{},[3760,52962],{"alt":135,"src":52963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52965,52966],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52968,52970],{"id":52969},"_25-数据类型","2.5 数据类型",[19,52972,52973],{},[3760,52974],{"alt":135,"src":52975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1760,52977,52978,52981],{},[1763,52979,52980],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1763,52982,52983],{},"算数运算符：",[19,52985,52986],{},[3760,52987],{"alt":135,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1760,52990,52991],{"start":254},[1763,52992,52993],{},"数字类型（Number）",[19,52995,52996],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52998,52999],{},[3760,53000],{"alt":135,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1760,53003,53004],{"start":262},[1763,53005,53006],{},"字符串类型（string）",[19,53008,53009],{},[3760,53010],{"alt":135,"src":53011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53013,53014],{},"反引号也是可以使用的",[19,53016,53017],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53019,53020],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1760,53022,53023],{"start":313},[1763,53024,53025],{},"模板字符串",[19,53027,53028],{},[3760,53029],{"alt":135,"src":53030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53032,53033],{},"类似于python的字符串格式化",[1760,53035,53036],{"start":462},[1763,53037,53038],{},"布尔类型",[19,53040,53041],{},"true 和 false",[1760,53043,53044],{"start":474},[1763,53045,53046],{},"未定义类型（underfined）",[19,53048,53049],{},"表示没有赋值",[19,53051,53052],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53054,53055],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1760,53057,53058],{"start":484},[1763,53059,53060],{},"null（空类型）",[19,53062,53063],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53065,53066],{},"赋值了，但是内容为空",[130,53068,53070],{"className":52871,"code":53069,"language":52873,"meta":135,"style":135},"typeof null\n输出的是'object'，是一个对象数据类型\n",[50,53071,53072,53077],{"__ignoreMap":135},[139,53073,53074],{"class":141,"line":142},[139,53075,53076],{"class":145},"typeof null\n",[139,53078,53079],{"class":141,"line":210},[139,53080,53081],{"class":145},"输出的是'object'，是一个对象数据类型\n",[1760,53083,53084],{"start":989},[1763,53085,53086],{},"控制台检测数据类型",[19,53088,53089],{},[3760,53090],{"alt":135,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1760,53093,53094],{"start":994},[1763,53095,53096],{},"类型转换",[19,53098,53099],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53101,53102],{},"转换方式：隐式转换和显示转换",[19,53104,53105],{},"①隐式转换",[3437,53107,53108,53111,53114,53117],{},[1763,53109,53110],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1763,53112,53113],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1763,53115,53116],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1763,53118,53119],{},"任何数据和字符串相加结果都是字符串",[19,53121,53122],{},"②显示转换",[19,53124,53125],{},[3760,53126],{"alt":135,"src":53127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53129,53130],{},[3760,53131],{"alt":135,"src":53132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53134,53135],{},"在输入的时候要用好隐式转换，简单写起来",[19,53137,53138],{},"let num = +prompt(’请输入数字：‘)",[19,53140,53141],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53143,53144],{},"console.log(parseInt('12.333px'))",[19,53146,53147],{},"输出为：12",[19,53149,53150],{},"console.log(parseInt('a'a'a12.333px'))",[19,53152,53153],{},"输出：NaN",[14,53155,53157],{"id":53156},"_26-运算符","2.6 运算符",[1217,53159,53161],{"id":53160},"_261-赋值运算符","2.6.1 赋值运算符",[19,53163,53164],{},[3760,53165],{"alt":135,"src":53166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1217,53168,53170],{"id":53169},"_262-一元运算符","2.6.2 一元运算符",[19,53172,53173],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53175,53176],{},[3760,53177],{"alt":135,"src":53178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53180,53181],{},[3760,53182],{"alt":135,"src":53183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53185,53186],{},"两者的区别：",[19,53188,53189],{},[3760,53190],{"alt":135,"src":53191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53193,53194],{},"前置先自加；后置后加，代码执行完之后再加",[1217,53196,53198],{"id":53197},"_263-比较运算符","2.6.3 比较运算符",[19,53200,53201],{},[3760,53202],{"alt":135,"src":53203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53205,53206],{},"比较运算符也有隐式转换",[19,53208,53209],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53211,53212],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53214,53215],{},"要使用三等，开发的时候",[19,53217,53218],{},"NaN不等于任何人，包括它自己",[19,53220,53221],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53223,53224],{},"7\u002F10=0.7",[19,53226,53227],{},"最后：0.5+0.2=0.7",[19,53229,53230],{},"字符串比较，比较的是字符对应的ASCII码",[1217,53232,53234],{"id":53233},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53236,53237],{},[3760,53238],{"alt":135,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53241,53242],{},[3760,53243],{"alt":135,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53246,53247],{},[3760,53248],{"alt":135,"src":53249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53251,53252],{},"上述题目选D",[19,53254,53255],{},"与真2假1；或真1假2",[1217,53257,53259],{"id":53258},"_265-运算符优先级","2.6.5 运算符优先级",[19,53261,53262],{},[3760,53263],{"alt":135,"src":53264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53266,53267],{},"先算逻辑与，后算逻辑或",[14,53269,53271],{"id":53270},"_27-语句","2.7 语句",[19,53273,53274],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53276,53277],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53279,53280],{},[3760,53281],{"alt":135,"src":53282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53284,53285],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53287,53288],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1217,53290,53292],{"id":53291},"_271-分支语句","2.7.1 分支语句",[24265,53294,53296],{"id":53295},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53298,53299],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1760,53301,53302],{},[1763,53303,53304],{},"单分支语句",[19,53306,53307],{},[3760,53308],{"alt":135,"src":53309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53311,53312],{},"除了0，所有数字都为真",[130,53314,53316],{"className":52871,"code":53315,"language":52873,"meta":135,"style":135},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[50,53317,53318,53323,53328,53333,53337],{"__ignoreMap":135},[139,53319,53320],{"class":141,"line":142},[139,53321,53322],{"class":145},"if（0) {\n",[139,53324,53325],{"class":141,"line":210},[139,53326,53327],{"class":145},"    let a=1\n",[139,53329,53330],{"class":141,"line":254},[139,53331,53332],{"class":145},"    alert(typeof a)\n",[139,53334,53335],{"class":141,"line":262},[139,53336,3862],{"class":145},[139,53338,53339],{"class":141,"line":313},[139,53340,53341],{"class":145},"不输出，括号为假\n",[1760,53343,53344],{"start":210},[1763,53345,53346],{},"双分支语句",[19,53348,53349],{},[3760,53350],{"alt":135,"src":53351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1760,53353,53354],{"start":254},[1763,53355,53356],{},"多分支语句",[19,53358,53359],{},[3760,53360],{"alt":135,"src":53361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24265,53363,53365],{"id":53364},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53367,53368],{},[3760,53369],{"alt":135,"src":53370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24265,53372,53374],{"id":53373},"_2713-switch语句","2.7.1.3 switch语句",[19,53376,53377],{},[3760,53378],{"alt":135,"src":53379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53381,53382],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1217,53384,53386],{"id":53385},"_272-循环语句","2.7.2 循环语句",[24265,53388,53390],{"id":53389},"_2721-断点演示","2.7.2.1 断点演示",[19,53392,53393],{},[3760,53394],{"alt":135,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24265,53397,53399],{"id":53398},"_2722-while循环","2.7.2.2 while循环",[19,53401,53402],{},[3760,53403],{"alt":135,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53406,53407],{},[3760,53408],{"alt":135,"src":53409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24265,53411,53413],{"id":53412},"_2723-for循环","2.7.2.3 for循环",[19,53415,53416],{},[3760,53417],{"alt":135,"src":53418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53420,53421],{},"for(;;) {",[19,53423,631],{},[19,53425,53426],{},"表示无限循环",[19,53428,53429],{},[3760,53430],{"alt":135,"src":53431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24265,53433,53435],{"id":53434},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53437,53438],{},[3760,53439],{"alt":135,"src":53440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53442,53444],{"id":53443},"_28-数组","2.8 数组",[1217,53446,53448],{"id":53447},"_281-基础认识","2.8.1 基础认识",[19,53450,53451],{},[3760,53452],{"alt":135,"src":53453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53455,53456],{},[3760,53457],{"alt":135,"src":53458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53460,53461],{},[3760,53462],{"alt":135,"src":53463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53465,53466],{},[3760,53467],{"alt":135,"src":53468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1217,53470,53472],{"id":53471},"_282-操作数组","2.8.2 操作数组",[19,53474,53475],{},[3760,53476],{"alt":135,"src":53477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1760,53479,53480],{},[1763,53481,53482],{},"添加元素",[19,53484,53485],{},[3760,53486],{"alt":135,"src":53487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53489,53490],{},"console.log(arr.push('green'))",[19,53492,53493],{},"输出结果：为新数组的长度",[19,53495,53496],{},[3760,53497],{"alt":135,"src":53498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53500,53501],{},"push用的非常多，一定要记住",[1760,53503,53504],{},[1763,53505,53506],{},"删除元素",[19,53508,53509],{},[3760,53510],{"alt":135,"src":53511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53513,53514],{},[3760,53515],{"alt":135,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53518,53519],{},[3760,53520],{"alt":135,"src":53521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1217,53523,53525],{"id":53524},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[130,53527,53529],{"className":52871,"code":53528,"language":52873,"meta":135,"style":135},"\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",[50,53530,53531,53546,53562,53566,53575,53593,53617,53639,53653,53661,53668,53679,53690,53694,53698,53705,53717,53732,53745,53764,53781,53796,53808,53820,53832,53836,53840,53851,53861,53873,53885,53897,53908,53912,53916,53928,53932,53946,53950,53954,53965,53979,53991,54005,54009,54018,54027,54031,54040,54044,54053,54058,54063,54075,54103,54108,54113,54138,54143,54147,54152,54157,54172,54176,54181,54211,54223,54239,54255,54269,54274,54281,54285,54290,54303,54311,54319,54323],{"__ignoreMap":135},[139,53532,53533,53536,53540,53543],{"class":141,"line":142},[139,53534,53535],{"class":145},"\u003C!",[139,53537,53539],{"class":53538},"s9eBZ","DOCTYPE",[139,53541,53542],{"class":781}," html",[139,53544,53545],{"class":145},">\n",[139,53547,53548,53550,53552,53555,53557,53560],{"class":141,"line":210},[139,53549,796],{"class":145},[139,53551,52873],{"class":53538},[139,53553,53554],{"class":781}," lang",[139,53556,150],{"class":145},[139,53558,53559],{"class":160},"\"en\"",[139,53561,53545],{"class":145},[139,53563,53564],{"class":141,"line":254},[139,53565,843],{"emptyLinePlaceholder":842},[139,53567,53568,53570,53573],{"class":141,"line":262},[139,53569,796],{"class":145},[139,53571,53572],{"class":53538},"head",[139,53574,53545],{"class":145},[139,53576,53577,53580,53583,53586,53588,53591],{"class":141,"line":313},[139,53578,53579],{"class":145},"    \u003C",[139,53581,53582],{"class":53538},"meta",[139,53584,53585],{"class":781}," charset",[139,53587,150],{"class":145},[139,53589,53590],{"class":160},"\"UTF-8\"",[139,53592,53545],{"class":145},[139,53594,53595,53597,53599,53602,53604,53607,53610,53612,53615],{"class":141,"line":462},[139,53596,53579],{"class":145},[139,53598,53582],{"class":53538},[139,53600,53601],{"class":781}," http-equiv",[139,53603,150],{"class":145},[139,53605,53606],{"class":160},"\"X-UA-Compatible\"",[139,53608,53609],{"class":781}," content",[139,53611,150],{"class":145},[139,53613,53614],{"class":160},"\"IE=edge\"",[139,53616,53545],{"class":145},[139,53618,53619,53621,53623,53625,53627,53630,53632,53634,53637],{"class":141,"line":474},[139,53620,53579],{"class":145},[139,53622,53582],{"class":53538},[139,53624,17189],{"class":781},[139,53626,150],{"class":145},[139,53628,53629],{"class":160},"\"viewport\"",[139,53631,53609],{"class":781},[139,53633,150],{"class":145},[139,53635,53636],{"class":160},"\"width=device-width, initial-scale=1.0\"",[139,53638,53545],{"class":145},[139,53640,53641,53643,53646,53649,53651],{"class":141,"line":484},[139,53642,53579],{"class":145},[139,53644,53645],{"class":53538},"title",[139,53647,53648],{"class":145},">Document\u003C\u002F",[139,53650,53645],{"class":53538},[139,53652,53545],{"class":145},[139,53654,53655,53657,53659],{"class":141,"line":989},[139,53656,53579],{"class":145},[139,53658,2348],{"class":53538},[139,53660,53545],{"class":145},[139,53662,53663,53666],{"class":141,"line":994},[139,53664,53665],{"class":53538},"        *",[139,53667,17840],{"class":145},[139,53669,53670,53673,53675,53677],{"class":141,"line":999},[139,53671,53672],{"class":153},"            margin",[139,53674,2265],{"class":145},[139,53676,2634],{"class":153},[139,53678,3591],{"class":145},[139,53680,53681,53684,53686,53688],{"class":141,"line":1006},[139,53682,53683],{"class":153},"            padding",[139,53685,2265],{"class":145},[139,53687,2634],{"class":153},[139,53689,3591],{"class":145},[139,53691,53692],{"class":141,"line":1027},[139,53693,4812],{"class":145},[139,53695,53696],{"class":141,"line":1040},[139,53697,843],{"emptyLinePlaceholder":842},[139,53699,53700,53703],{"class":141,"line":2160},[139,53701,53702],{"class":781},"        .box",[139,53704,17840],{"class":145},[139,53706,53707,53710,53712,53715],{"class":141,"line":2188},[139,53708,53709],{"class":153},"            display",[139,53711,2265],{"class":145},[139,53713,53714],{"class":153},"flex",[139,53716,3591],{"class":145},[139,53718,53719,53722,53724,53727,53730],{"class":141,"line":3944},[139,53720,53721],{"class":153},"            width",[139,53723,2265],{"class":145},[139,53725,53726],{"class":153},"700",[139,53728,53729],{"class":149},"px",[139,53731,3591],{"class":145},[139,53733,53734,53737,53739,53741,53743],{"class":141,"line":3963},[139,53735,53736],{"class":153},"            height",[139,53738,2265],{"class":145},[139,53740,6253],{"class":153},[139,53742,53729],{"class":149},[139,53744,3591],{"class":145},[139,53746,53747,53750,53752,53754,53756,53759,53762],{"class":141,"line":3968},[139,53748,53749],{"class":153},"            border-left",[139,53751,2265],{"class":145},[139,53753,410],{"class":153},[139,53755,53729],{"class":149},[139,53757,53758],{"class":153}," solid",[139,53760,53761],{"class":153}," pink",[139,53763,3591],{"class":145},[139,53765,53766,53769,53771,53773,53775,53777,53779],{"class":141,"line":3982},[139,53767,53768],{"class":153},"            border-bottom",[139,53770,2265],{"class":145},[139,53772,410],{"class":153},[139,53774,53729],{"class":149},[139,53776,53758],{"class":153},[139,53778,53761],{"class":153},[139,53780,3591],{"class":145},[139,53782,53783,53785,53787,53789,53791,53794],{"class":141,"line":3987},[139,53784,53672],{"class":153},[139,53786,2265],{"class":145},[139,53788,3091],{"class":153},[139,53790,53729],{"class":149},[139,53792,53793],{"class":153}," auto",[139,53795,3591],{"class":145},[139,53797,53798,53801,53803,53806],{"class":141,"line":4014},[139,53799,53800],{"class":153},"            justify-content",[139,53802,2265],{"class":145},[139,53804,53805],{"class":153},"space-around",[139,53807,3591],{"class":145},[139,53809,53810,53813,53815,53818],{"class":141,"line":4019},[139,53811,53812],{"class":153},"            align-items",[139,53814,2265],{"class":145},[139,53816,53817],{"class":153},"flex-end",[139,53819,3591],{"class":145},[139,53821,53822,53825,53827,53830],{"class":141,"line":4036},[139,53823,53824],{"class":153},"            text-align",[139,53826,2265],{"class":145},[139,53828,53829],{"class":153},"center",[139,53831,3591],{"class":145},[139,53833,53834],{"class":141,"line":4041},[139,53835,4812],{"class":145},[139,53837,53838],{"class":141,"line":4046},[139,53839,843],{"emptyLinePlaceholder":842},[139,53841,53842,53844,53846,53849],{"class":141,"line":4051},[139,53843,53702],{"class":781},[139,53845,958],{"class":149},[139,53847,53848],{"class":53538},"div",[139,53850,17840],{"class":145},[139,53852,53853,53855,53857,53859],{"class":141,"line":4065},[139,53854,53709],{"class":153},[139,53856,2265],{"class":145},[139,53858,53714],{"class":153},[139,53860,3591],{"class":145},[139,53862,53863,53865,53867,53869,53871],{"class":141,"line":4070},[139,53864,53721],{"class":153},[139,53866,2265],{"class":145},[139,53868,3091],{"class":153},[139,53870,53729],{"class":149},[139,53872,3591],{"class":145},[139,53874,53875,53878,53880,53883],{"class":141,"line":4860},[139,53876,53877],{"class":153},"            background-color",[139,53879,2265],{"class":145},[139,53881,53882],{"class":153},"pink",[139,53884,3591],{"class":145},[139,53886,53887,53890,53892,53895],{"class":141,"line":4874},[139,53888,53889],{"class":153},"            flex-direction",[139,53891,2265],{"class":145},[139,53893,53894],{"class":153},"column",[139,53896,3591],{"class":145},[139,53898,53899,53901,53903,53906],{"class":141,"line":4882},[139,53900,53800],{"class":153},[139,53902,2265],{"class":145},[139,53904,53905],{"class":153},"space-between",[139,53907,3591],{"class":145},[139,53909,53910],{"class":141,"line":4887},[139,53911,4812],{"class":145},[139,53913,53914],{"class":141,"line":4893},[139,53915,843],{"emptyLinePlaceholder":842},[139,53917,53918,53920,53923,53926],{"class":141,"line":4899},[139,53919,53702],{"class":781},[139,53921,53922],{"class":53538}," div",[139,53924,53925],{"class":53538}," span",[139,53927,17840],{"class":145},[139,53929,53930],{"class":141,"line":4904},[139,53931,843],{"emptyLinePlaceholder":842},[139,53933,53934,53937,53939,53942,53944],{"class":141,"line":10222},[139,53935,53936],{"class":153},"            margin-top",[139,53938,2265],{"class":145},[139,53940,53941],{"class":153},"-20",[139,53943,53729],{"class":149},[139,53945,3591],{"class":145},[139,53947,53948],{"class":141,"line":10246},[139,53949,4812],{"class":145},[139,53951,53952],{"class":141,"line":10251},[139,53953,843],{"emptyLinePlaceholder":842},[139,53955,53956,53958,53960,53963],{"class":141,"line":10257},[139,53957,53702],{"class":781},[139,53959,53922],{"class":53538},[139,53961,53962],{"class":53538}," h4",[139,53964,17840],{"class":145},[139,53966,53967,53970,53972,53975,53977],{"class":141,"line":10284},[139,53968,53969],{"class":153},"            margin-bottom",[139,53971,2265],{"class":145},[139,53973,53974],{"class":153},"-35",[139,53976,53729],{"class":149},[139,53978,3591],{"class":145},[139,53980,53981,53983,53985,53987,53989],{"class":141,"line":10289},[139,53982,53721],{"class":153},[139,53984,2265],{"class":145},[139,53986,2794],{"class":153},[139,53988,53729],{"class":149},[139,53990,3591],{"class":145},[139,53992,53993,53996,53998,54001,54003],{"class":141,"line":10295},[139,53994,53995],{"class":153},"            margin-left",[139,53997,2265],{"class":145},[139,53999,54000],{"class":153},"-10",[139,54002,53729],{"class":149},[139,54004,3591],{"class":145},[139,54006,54007],{"class":141,"line":10307},[139,54008,4812],{"class":145},[139,54010,54011,54014,54016],{"class":141,"line":10319},[139,54012,54013],{"class":145},"    \u003C\u002F",[139,54015,2348],{"class":53538},[139,54017,53545],{"class":145},[139,54019,54020,54023,54025],{"class":141,"line":10331},[139,54021,54022],{"class":145},"\u003C\u002F",[139,54024,53572],{"class":53538},[139,54026,53545],{"class":145},[139,54028,54029],{"class":141,"line":11990},[139,54030,843],{"emptyLinePlaceholder":842},[139,54032,54033,54035,54038],{"class":141,"line":12015},[139,54034,796],{"class":145},[139,54036,54037],{"class":53538},"body",[139,54039,53545],{"class":145},[139,54041,54042],{"class":141,"line":12038},[139,54043,843],{"emptyLinePlaceholder":842},[139,54045,54046,54048,54051],{"class":141,"line":12062},[139,54047,53579],{"class":145},[139,54049,54050],{"class":53538},"script",[139,54052,53545],{"class":145},[139,54054,54055],{"class":141,"line":12067},[139,54056,54057],{"class":2512},"        \u002F\u002F 1. 四次弹框效果\n",[139,54059,54060],{"class":141,"line":12072},[139,54061,54062],{"class":2512},"        \u002F\u002F 声明一个新的数组\n",[139,54064,54065,54068,54071,54073],{"class":141,"line":12077},[139,54066,54067],{"class":149},"        let",[139,54069,54070],{"class":145}," arr ",[139,54072,150],{"class":149},[139,54074,2088],{"class":145},[139,54076,54077,54079,54081,54084,54086,54088,54090,54092,54094,54097,54099,54101],{"class":141,"line":12086},[139,54078,5684],{"class":149},[139,54080,549],{"class":145},[139,54082,54083],{"class":149},"let",[139,54085,11712],{"class":145},[139,54087,150],{"class":149},[139,54089,27381],{"class":153},[139,54091,11719],{"class":145},[139,54093,3885],{"class":149},[139,54095,54096],{"class":153}," 4",[139,54098,5495],{"class":145},[139,54100,4577],{"class":149},[139,54102,14714],{"class":145},[139,54104,54105],{"class":141,"line":12091},[139,54106,54107],{"class":2512},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[139,54109,54110],{"class":141,"line":12097},[139,54111,54112],{"class":2512},"            \u002F\u002F arr.push(num)\n",[139,54114,54115,54118,54121,54123,54126,54128,54131,54133,54136],{"class":141,"line":12118},[139,54116,54117],{"class":145},"            arr.",[139,54119,54120],{"class":781},"push",[139,54122,157],{"class":145},[139,54124,54125],{"class":781},"prompt",[139,54127,157],{"class":145},[139,54129,54130],{"class":160},"`请输入第${",[139,54132,2879],{"class":145},[139,54134,54135],{"class":160},"}季度的数据:`",[139,54137,207],{"class":145},[139,54139,54140],{"class":141,"line":12124},[139,54141,54142],{"class":2512},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[139,54144,54145],{"class":141,"line":12138},[139,54146,4812],{"class":145},[139,54148,54149],{"class":141,"line":12144},[139,54150,54151],{"class":2512},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[139,54153,54154],{"class":141,"line":12171},[139,54155,54156],{"class":2512},"        \u002F\u002F 盒子开头\n",[139,54158,54159,54162,54165,54167,54170],{"class":141,"line":12180},[139,54160,54161],{"class":145},"        document.",[139,54163,54164],{"class":781},"write",[139,54166,157],{"class":145},[139,54168,54169],{"class":160},"` \u003Cdiv class=\"box\">`",[139,54171,164],{"class":145},[139,54173,54174],{"class":141,"line":12186},[139,54175,843],{"emptyLinePlaceholder":842},[139,54177,54178],{"class":141,"line":12194},[139,54179,54180],{"class":2512},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[139,54182,54183,54185,54187,54189,54191,54193,54195,54197,54199,54202,54205,54207,54209],{"class":141,"line":12199},[139,54184,5684],{"class":149},[139,54186,549],{"class":145},[139,54188,54083],{"class":149},[139,54190,11712],{"class":145},[139,54192,150],{"class":149},[139,54194,799],{"class":153},[139,54196,11719],{"class":145},[139,54198,796],{"class":149},[139,54200,54201],{"class":145}," arr.",[139,54203,54204],{"class":153},"length",[139,54206,5495],{"class":145},[139,54208,4577],{"class":149},[139,54210,14714],{"class":145},[139,54212,54213,54216,54218,54220],{"class":141,"line":18871},[139,54214,54215],{"class":145},"            document.",[139,54217,54164],{"class":781},[139,54219,157],{"class":145},[139,54221,54222],{"class":160},"`\n",[139,54224,54225,54228,54230,54232,54234,54236],{"class":141,"line":18877},[139,54226,54227],{"class":160},"              \u003Cdiv style=\"height: ${",[139,54229,6160],{"class":145},[139,54231,3325],{"class":160},[139,54233,2879],{"class":145},[139,54235,3373],{"class":160},[139,54237,54238],{"class":160},"}px;\">\n",[139,54240,54241,54244,54246,54248,54250,54252],{"class":141,"line":18900},[139,54242,54243],{"class":160},"                \u003Cspan>${",[139,54245,6160],{"class":145},[139,54247,3325],{"class":160},[139,54249,2879],{"class":145},[139,54251,3373],{"class":160},[139,54253,54254],{"class":160},"}\u003C\u002Fspan>\n",[139,54256,54257,54260,54262,54264,54266],{"class":141,"line":18906},[139,54258,54259],{"class":160},"                \u003Ch4>第${",[139,54261,2879],{"class":145},[139,54263,47805],{"class":149},[139,54265,27381],{"class":153},[139,54267,54268],{"class":160},"}季度\u003C\u002Fh4>\n",[139,54270,54271],{"class":141,"line":18929},[139,54272,54273],{"class":160},"              \u003C\u002Fdiv>          \n",[139,54275,54276,54279],{"class":141,"line":18943},[139,54277,54278],{"class":160},"            `",[139,54280,164],{"class":145},[139,54282,54283],{"class":141,"line":18963},[139,54284,4812],{"class":145},[139,54286,54287],{"class":141,"line":18969},[139,54288,54289],{"class":2512},"        \u002F\u002F 盒子结尾\n",[139,54291,54292,54294,54296,54298,54301],{"class":141,"line":18980},[139,54293,54161],{"class":145},[139,54295,54164],{"class":781},[139,54297,157],{"class":145},[139,54299,54300],{"class":160},"` \u003C\u002Fdiv>`",[139,54302,164],{"class":145},[139,54304,54305,54307,54309],{"class":141,"line":19003},[139,54306,54013],{"class":145},[139,54308,54050],{"class":53538},[139,54310,53545],{"class":145},[139,54312,54313,54315,54317],{"class":141,"line":19025},[139,54314,54022],{"class":145},[139,54316,54037],{"class":53538},[139,54318,53545],{"class":145},[139,54320,54321],{"class":141,"line":19030},[139,54322,843],{"emptyLinePlaceholder":842},[139,54324,54325,54327,54329],{"class":141,"line":19036},[139,54326,54022],{"class":145},[139,54328,52873],{"class":53538},[139,54330,53545],{"class":145},[1217,54332,54334],{"id":54333},"_284-冒泡排序","2.8.4 冒泡排序",[130,54336,54338],{"className":52871,"code":54337,"language":52873,"meta":135,"style":135},"\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",[50,54339,54340,54350,54364,54368,54376,54391,54411,54423,54431,54435,54443,54451,54482,54515,54552,54557,54576,54581,54594,54609,54625,54629,54634,54638,54648,54657,54665,54669],{"__ignoreMap":135},[139,54341,54342,54344,54346,54348],{"class":141,"line":142},[139,54343,53535],{"class":145},[139,54345,53539],{"class":53538},[139,54347,53542],{"class":781},[139,54349,53545],{"class":145},[139,54351,54352,54354,54356,54358,54360,54362],{"class":141,"line":210},[139,54353,796],{"class":145},[139,54355,52873],{"class":53538},[139,54357,53554],{"class":781},[139,54359,150],{"class":145},[139,54361,53559],{"class":160},[139,54363,53545],{"class":145},[139,54365,54366],{"class":141,"line":254},[139,54367,843],{"emptyLinePlaceholder":842},[139,54369,54370,54372,54374],{"class":141,"line":262},[139,54371,796],{"class":145},[139,54373,53572],{"class":53538},[139,54375,53545],{"class":145},[139,54377,54378,54381,54383,54385,54387,54389],{"class":141,"line":313},[139,54379,54380],{"class":145},"  \u003C",[139,54382,53582],{"class":53538},[139,54384,53585],{"class":781},[139,54386,150],{"class":145},[139,54388,53590],{"class":160},[139,54390,53545],{"class":145},[139,54392,54393,54395,54397,54399,54401,54403,54405,54407,54409],{"class":141,"line":462},[139,54394,54380],{"class":145},[139,54396,53582],{"class":53538},[139,54398,17189],{"class":781},[139,54400,150],{"class":145},[139,54402,53629],{"class":160},[139,54404,53609],{"class":781},[139,54406,150],{"class":145},[139,54408,53636],{"class":160},[139,54410,53545],{"class":145},[139,54412,54413,54415,54417,54419,54421],{"class":141,"line":474},[139,54414,54380],{"class":145},[139,54416,53645],{"class":53538},[139,54418,53648],{"class":145},[139,54420,53645],{"class":53538},[139,54422,53545],{"class":145},[139,54424,54425,54427,54429],{"class":141,"line":484},[139,54426,54022],{"class":145},[139,54428,53572],{"class":53538},[139,54430,53545],{"class":145},[139,54432,54433],{"class":141,"line":989},[139,54434,843],{"emptyLinePlaceholder":842},[139,54436,54437,54439,54441],{"class":141,"line":994},[139,54438,796],{"class":145},[139,54440,54037],{"class":53538},[139,54442,53545],{"class":145},[139,54444,54445,54447,54449],{"class":141,"line":999},[139,54446,54380],{"class":145},[139,54448,54050],{"class":53538},[139,54450,53545],{"class":145},[139,54452,54453,54456,54458,54460,54462,54464,54466,54468,54470,54472,54474,54476,54478,54480],{"class":141,"line":1006},[139,54454,54455],{"class":149},"    let",[139,54457,54070],{"class":145},[139,54459,150],{"class":149},[139,54461,407],{"class":145},[139,54463,1481],{"class":153},[139,54465,413],{"class":145},[139,54467,1476],{"class":153},[139,54469,413],{"class":145},[139,54471,421],{"class":153},[139,54473,413],{"class":145},[139,54475,416],{"class":153},[139,54477,413],{"class":145},[139,54479,410],{"class":153},[139,54481,424],{"class":145},[139,54483,54484,54486,54488,54490,54492,54494,54496,54498,54500,54502,54504,54507,54509,54511,54513],{"class":141,"line":1027},[139,54485,5482],{"class":149},[139,54487,549],{"class":145},[139,54489,54083],{"class":149},[139,54491,11712],{"class":145},[139,54493,150],{"class":149},[139,54495,799],{"class":153},[139,54497,11719],{"class":145},[139,54499,796],{"class":149},[139,54501,54201],{"class":145},[139,54503,54204],{"class":153},[139,54505,54506],{"class":149}," -",[139,54508,27381],{"class":153},[139,54510,5495],{"class":145},[139,54512,4577],{"class":149},[139,54514,14714],{"class":145},[139,54516,54517,54520,54522,54524,54526,54528,54530,54532,54534,54536,54538,54540,54542,54544,54546,54548,54550],{"class":141,"line":1040},[139,54518,54519],{"class":149},"      for",[139,54521,549],{"class":145},[139,54523,54083],{"class":149},[139,54525,11774],{"class":145},[139,54527,150],{"class":149},[139,54529,799],{"class":153},[139,54531,11781],{"class":145},[139,54533,796],{"class":149},[139,54535,54201],{"class":145},[139,54537,54204],{"class":153},[139,54539,54506],{"class":149},[139,54541,11712],{"class":145},[139,54543,855],{"class":149},[139,54545,27381],{"class":153},[139,54547,11788],{"class":145},[139,54549,4577],{"class":149},[139,54551,14714],{"class":145},[139,54553,54554],{"class":141,"line":2160},[139,54555,54556],{"class":2512},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[139,54558,54559,54561,54564,54566,54569,54571,54573],{"class":141,"line":2188},[139,54560,4780],{"class":149},[139,54562,54563],{"class":145}," (arr[j] ",[139,54565,958],{"class":149},[139,54567,54568],{"class":145}," arr[j ",[139,54570,1147],{"class":149},[139,54572,27381],{"class":153},[139,54574,54575],{"class":145},"]) {\n",[139,54577,54578],{"class":141,"line":3944},[139,54579,54580],{"class":2512},"          \u002F\u002F 交换两个变量\n",[139,54582,54583,54586,54589,54591],{"class":141,"line":3963},[139,54584,54585],{"class":149},"          let",[139,54587,54588],{"class":145}," tmp ",[139,54590,150],{"class":149},[139,54592,54593],{"class":145}," arr[j]\n",[139,54595,54596,54599,54601,54603,54605,54607],{"class":141,"line":3968},[139,54597,54598],{"class":145},"          arr[j] ",[139,54600,150],{"class":149},[139,54602,54568],{"class":145},[139,54604,1147],{"class":149},[139,54606,27381],{"class":153},[139,54608,424],{"class":145},[139,54610,54611,54614,54616,54618,54620,54622],{"class":141,"line":3982},[139,54612,54613],{"class":145},"          arr[j ",[139,54615,1147],{"class":149},[139,54617,27381],{"class":153},[139,54619,6721],{"class":145},[139,54621,150],{"class":149},[139,54623,54624],{"class":145}," tmp\n",[139,54626,54627],{"class":141,"line":3987},[139,54628,4812],{"class":145},[139,54630,54631],{"class":141,"line":4014},[139,54632,54633],{"class":145},"      }\n",[139,54635,54636],{"class":141,"line":4019},[139,54637,4472],{"class":145},[139,54639,54640,54643,54645],{"class":141,"line":4036},[139,54641,54642],{"class":145},"    document.",[139,54644,54164],{"class":781},[139,54646,54647],{"class":145},"(arr)\n",[139,54649,54650,54653,54655],{"class":141,"line":4041},[139,54651,54652],{"class":145},"  \u003C\u002F",[139,54654,54050],{"class":53538},[139,54656,53545],{"class":145},[139,54658,54659,54661,54663],{"class":141,"line":4046},[139,54660,54022],{"class":145},[139,54662,54037],{"class":53538},[139,54664,53545],{"class":145},[139,54666,54667],{"class":141,"line":4051},[139,54668,843],{"emptyLinePlaceholder":842},[139,54670,54671,54673,54675],{"class":141,"line":4065},[139,54672,54022],{"class":145},[139,54674,52873],{"class":53538},[139,54676,53545],{"class":145},[19,54678,54679],{},[3760,54680],{"alt":135,"src":54681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54683,54684],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54686,54687],{},"let arr = [4, 2, 5, 1, 3]",[19,54689,54690],{},"\u002F\u002F 1.升序排列写法",[19,54692,54693],{},"arr.sort(function (a, b) {",[19,54695,54696],{},"return a - b",[19,54698,54699],{},"})",[19,54701,54702],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54704,54705],{},"\u002F\u002F 降序排列写法",[19,54707,54693],{},[19,54709,54710],{},"return b - a",[19,54712,54699],{},[19,54714,54715],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54717,54719],{"id":54718},"_29-函数","2.9 函数",[19,54721,54722],{},[3760,54723],{"alt":135,"src":54724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54726,54727],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54729,54730],{},"函数的声明用function",[19,54732,54733],{},"函数里边可以嵌套函数",[1217,54735,54737],{"id":54736},"_291-函数传参","2.9.1 函数传参",[19,54739,54740],{},[3760,54741],{"alt":135,"src":54742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54744,54745],{},[3760,54746],{"alt":135,"src":54747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3437,54749,54750,54753,54756,54759,54762,54765],{},[1763,54751,54752],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1763,54754,54755],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1763,54757,54758],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1763,54760,54761],{},"开发中尽量保持形参和实参个数一致",[1763,54763,54764],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1763,54766,54767],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54769,54770],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1217,54772,54774],{"id":54773},"_292-函数的返回值","2.9.2 函数的返回值",[19,54776,54777],{},[3760,54778],{"alt":135,"src":54779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54781,54782],{},[3760,54783],{"alt":135,"src":54784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3437,54786,54787,54790,54793,54796,54799],{},[1763,54788,54789],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1763,54791,54792],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1763,54794,54795],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1763,54797,54798],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1763,54800,54801],{},"断点调试:进入函数内部看执行过程F11",[1217,54803,54805],{"id":54804},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[130,54807,54809],{"className":52871,"code":54808,"language":52873,"meta":135,"style":135},"    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",[50,54810,54811,54816,54821,54825,54830],{"__ignoreMap":135},[139,54812,54813],{"class":141,"line":142},[139,54814,54815],{"class":145},"    function fn(a, b) {\n",[139,54817,54818],{"class":141,"line":210},[139,54819,54820],{"class":145},"      console.log(a + b);\n",[139,54822,54823],{"class":141,"line":254},[139,54824,4472],{"class":145},[139,54826,54827],{"class":141,"line":262},[139,54828,54829],{"class":145},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[139,54831,54832],{"class":141,"line":313},[139,54833,54834],{"class":145},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1217,54836,54838],{"id":54837},"_294-作用域","2.9.4 作用域",[3437,54840,54841,54847,54852,54855,54858],{},[1763,54842,54843,54844],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1674,54845,54846],{},"作用域",[1763,54848,54849],{},[1674,54850,54851],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1763,54853,54854],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1763,54856,54857],{},"函数内部可以直接所使用全局变量",[1763,54859,54860],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54862,16904],{},[130,54864,54866],{"className":52871,"code":54865,"language":52873,"meta":135,"style":135},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[50,54867,54868,54873,54878,54882,54887,54892,54897],{"__ignoreMap":135},[139,54869,54870],{"class":141,"line":142},[139,54871,54872],{"class":145},"    function fun() {\n",[139,54874,54875],{"class":141,"line":210},[139,54876,54877],{"class":145},"      num = 10\n",[139,54879,54880],{"class":141,"line":254},[139,54881,4472],{"class":145},[139,54883,54884],{"class":141,"line":262},[139,54885,54886],{"class":145},"    fun()\n",[139,54888,54889],{"class":141,"line":313},[139,54890,54891],{"class":145},"    console.log(num)\n",[139,54893,54894],{"class":141,"line":462},[139,54895,54896],{"class":145},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[139,54898,54899],{"class":141,"line":474},[139,54900,54901],{"class":145},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3437,54903,54904,54907],{},[1763,54905,54906],{},"函数内部的形参可以看做是局部变量",[1763,54908,54909],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54911,54912,54913],{},"变量访问原则： ",[1674,54914,54915],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1217,54917,54919],{"id":54918},"_295-匿名函数","2.9.5 匿名函数",[19,54921,54922],{},"函数可以分为具名函数和匿名函数",[19,54924,54925],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1760,54927,54928],{},[1763,54929,54930],{},"函数表达式",[19,54932,54933],{},[3760,54934],{"alt":135,"src":54935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54937,54938],{},"里边也可以写参数",[19,54940,54941],{},"具名函数调用位置可以随意调整；",[19,54943,54944],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1760,54946,54947],{"start":210},[1763,54948,54949],{},"立即执行函数",[19,54951,54952],{},[3760,54953],{"alt":135,"src":54954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54956,54957],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54959,54960],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54962,54963],{},"(function () {})();",[19,54965,54966],{},"不要落下最后的;",[19,54968,54969],{},"立即执行函数必须要加;",[19,54971,54972],{},"分号写前写后都没问题",[19,54974,54975],{},"写前：",[19,54977,54978],{},"(function() {})()",[19,54980,54981],{},";(function () {})();",[19,54983,54984],{},"写后:",[19,54986,54987],{},"(function() {})();",[19,54989,54963],{},[19,54991,54992],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54994,54995],{},"还有一种写法：",[19,54997,54998],{},"(function(){}());",[19,55000,55001],{},"或者:",[19,55003,55004],{},"!function(){}();",[19,55006,55007],{},"立即执行函数有时候也是可以加名字的：",[19,55009,55010],{},"(function flexible(window,document) {}(window,document));",[19,55012,55013],{},"省一些调用方法",[1217,55015,55017],{"id":55016},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55019,55020],{},[3760,55021],{"alt":135,"src":55022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55024,55025],{},"这样就不用非得给x,y初始化了",[19,55027,55028],{},[3760,55029],{"alt":135,"src":55030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55032,55033],{},"代码执行时先看左边",[19,55035,55036],{},"例如：console.log(false && 3+5)",[19,55038,55039],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55041,55042],{},"&&都是真时，就返回最后一个真值",[19,55044,55045],{},"console.log(11 && 22)",[19,55047,55048],{},"输出22",[19,55050,55051],{},"逻辑与：遇真则真",[19,55053,16904],{},[19,55055,55056],{},"let age=1",[19,55058,55059],{},"console.log(11 || age++)",[19,55061,55062],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55064,55065],{},"console.log(11 || 22)",[19,55067,55068],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55070,55071],{},"||如果都是假的话，就取最后一个假的值了",[1217,55073,55075],{"id":55074},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55077,55078],{},"显示转换：",[19,55080,55081,55084,55085],{},[1674,55082,55083],{},"记忆","： ",[1674,55086,55087],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55089,55090],{},"空字符串为假，其他字符串全为真",[19,55092,55093],{},[3760,55094],{"alt":135,"src":55095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55097,55098],{},"隐式转换：",[19,55100,55101],{},[3760,55102],{"alt":135,"src":55103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55105,55106],{},"隐式转换:",[19,55108,55109],{},"null+3=3",[19,55111,55112],{},"undefined+3=NaN",[19,55114,55115],{},"null==undefined 输出true,他两个都当0看",[19,55117,55118],{},"null===undefined 输出false",[19,55120,55121],{},"undefined做任何操作都是NaN",[19,55123,55124],{},"NaN不等于NaN，NaN表示计算错误",[14,55126,55128],{"id":55127},"_210-对象","2.10 对象",[1217,55130,55132],{"id":55131},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55134,55135],{},"对象也是一种数据类型，里边的数据是无序的",[19,55137,55138],{},"对象由属性和方法组成",[19,55140,55141],{},[3760,55142],{"alt":135,"src":55143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55145,55146],{},[3760,55147],{"alt":135,"src":55148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55150,55151],{},[3760,55152],{"alt":135,"src":55153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1217,55155,55157],{"id":55156},"_2102-对象属性","2.10.2 对象属性",[19,55159,55160],{},[3760,55161],{"alt":135,"src":55162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1760,55164,55165],{},[1763,55166,55167],{},"查询对象",[19,55169,55170],{},"对象名.属性 goods.uname",[19,55172,55173],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55175,55176],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55178,55179],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55181,55182],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1760,55184,55185],{"start":210},[1763,55186,55187],{},"重新赋值",[19,55189,55190],{},"对象名.属性=新值",[1760,55192,55193],{"start":254},[1763,55194,55195],{},"增加新数据",[19,55197,55190],{},[1760,55199,55200],{"start":262},[1763,55201,55202],{},"删除对象中的属性",[19,55204,55205],{},"delete 对象名.属性",[1217,55207,55209],{"id":55208},"_2103-对象方法","2.10.3 对象方法",[19,55211,55212],{},[3760,55213],{"alt":135,"src":55214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55216,55217],{},"后边跟的是匿名函数",[19,55219,55220],{},"对象外面的叫函数；对象内部的叫方法",[19,55222,55223],{},[3760,55224],{"alt":135,"src":55225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1217,55227,55229],{"id":55228},"_2104-遍历对象","2.10.4 遍历对象",[19,55231,55232],{},"理解为加括号的python字典遍历",[19,55234,55235],{},[3760,55236],{"alt":135,"src":55237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55239,55240],{},"k是字符串类型",[19,55242,55243],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[130,55245,55247],{"className":52871,"code":55246,"language":52873,"meta":135,"style":135},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[50,55248,55249,55254,55259,55264,55269],{"__ignoreMap":135},[139,55250,55251],{"class":141,"line":142},[139,55252,55253],{"class":145},"   let arr = [1, 2, 3]\n",[139,55255,55256],{"class":141,"line":210},[139,55257,55258],{"class":145},"    for (let k in arr) {\n",[139,55260,55261],{"class":141,"line":254},[139,55262,55263],{"class":145},"      console.log(k)\n",[139,55265,55266],{"class":141,"line":262},[139,55267,55268],{"class":145},"      console.log(arr[k])\n",[139,55270,55271],{"class":141,"line":313},[139,55272,4472],{"class":145},[19,55274,55275],{},[3760,55276],{"alt":135,"src":55277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55279,55280],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55282,55283],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55285,55286],{},"for in 得到的k是属性名",[54050,55288,55289],{},"\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,55291,55292],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1217,55294,55296],{"id":55295},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55298,55299],{},"数组中放对象信息",[130,55301,55305],{"className":55302,"code":55303,"language":55304,"meta":135,"style":135},"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",[50,55306,55307,55315,55320,55325,55330,55335,55340,55345,55350,55355,55360,55365,55370,55374,55378],{"__ignoreMap":135},[139,55308,55309,55311,55313],{"class":141,"line":142},[139,55310,796],{"class":145},[139,55312,54050],{"class":53538},[139,55314,53545],{"class":145},[139,55316,55317],{"class":141,"line":210},[139,55318,55319],{"class":145},"    let students = [\n",[139,55321,55322],{"class":141,"line":254},[139,55323,55324],{"class":145},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[139,55326,55327],{"class":141,"line":262},[139,55328,55329],{"class":145},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[139,55331,55332],{"class":141,"line":313},[139,55333,55334],{"class":145},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[139,55336,55337],{"class":141,"line":462},[139,55338,55339],{"class":145},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[139,55341,55342],{"class":141,"line":474},[139,55343,55344],{"class":145},"    ]\n",[139,55346,55347],{"class":141,"line":484},[139,55348,55349],{"class":145},"    for (let i = 0; i \u003C students.length; i++) {\n",[139,55351,55352],{"class":141,"line":989},[139,55353,55354],{"class":145},"      for (let k in students[i]) {\n",[139,55356,55357],{"class":141,"line":994},[139,55358,55359],{"class":145},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[139,55361,55362],{"class":141,"line":999},[139,55363,55364],{"class":145},"        \u002F\u002F输出每个人的名字：\n",[139,55366,55367],{"class":141,"line":1006},[139,55368,55369],{"class":145},"        \u002F\u002Fconsole.log(students[i].name)\n",[139,55371,55372],{"class":141,"line":1027},[139,55373,54633],{"class":145},[139,55375,55376],{"class":141,"line":1040},[139,55377,4472],{"class":145},[139,55379,55380,55382,55384],{"class":141,"line":2160},[139,55381,54652],{"class":145},[139,55383,54050],{"class":53538},[139,55385,53545],{"class":145},[1217,55387,55389],{"id":55388},"_2106-内置对象","2.10.6 内置对象",[19,55391,55392],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1760,55394,55395],{},[1763,55396,55397],{},"数学对象Math",[19,55399,55400],{},[3760,55401],{"alt":135,"src":55402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55404,55405],{},[2680,55406,55409],{"href":55407,"rel":55408},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55411,55412],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55414,55415],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55417,55418],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55420,55421],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55423,55424],{},"null属于对象数据类型",[1760,55426,55427],{"start":210},[1763,55428,55429],{},"生成任意范围随机数",[19,55431,55432],{},[3760,55433],{"alt":135,"src":55434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55436,55437],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55439,55440],{},"乘以几就取不到几",[19,55442,55443],{},"取数组中的随机元素：",[19,55445,55446],{},"let arr = ['red', 'green', 'blue']",[19,55448,55449],{},"let random = Math.floor(Math.random() * arr.length)",[19,55451,55452],{},"console.log(arr[random])",[19,55454,55455],{},"这个函数得到的是全闭区间",[19,55457,55458],{},"function getRandom(N, M) {",[19,55460,55461],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55463,631],{},[19,55465,55466],{},"console.log(getRandom(4, 8))",[1217,55468,55470],{"id":55469},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55472,55473],{},[3760,55474],{"alt":135,"src":55475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55477,55478],{},[3760,55479],{"alt":135,"src":55480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55482,55483],{},[3760,55484],{"alt":135,"src":55485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55487,55488],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55490,55491],{},[3760,55492],{"alt":135,"src":55493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55495,55496],{},[3760,55497],{"alt":135,"src":55498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55500,55501],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55503,55504],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55506,55507],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2348,55509,55510],{},"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":135,"searchDepth":210,"depth":210,"links":55512},[55513,55521,55522,55523,55524,55525,55532,55536,55542,55551],{"id":52706,"depth":210,"text":52707,"children":55514},[55515,55516,55517,55518,55519,55520],{"id":52710,"depth":254,"text":52711},{"id":52727,"depth":254,"text":52728},{"id":52767,"depth":254,"text":52768},{"id":52779,"depth":254,"text":52780},{"id":52788,"depth":254,"text":52789},{"id":52836,"depth":254,"text":52837},{"id":52846,"depth":210,"text":52847},{"id":52934,"depth":210,"text":52935},{"id":52957,"depth":210,"text":52958},{"id":52969,"depth":210,"text":52970},{"id":53156,"depth":210,"text":53157,"children":55526},[55527,55528,55529,55530,55531],{"id":53160,"depth":254,"text":53161},{"id":53169,"depth":254,"text":53170},{"id":53197,"depth":254,"text":53198},{"id":53233,"depth":254,"text":53234},{"id":53258,"depth":254,"text":53259},{"id":53270,"depth":210,"text":53271,"children":55533},[55534,55535],{"id":53291,"depth":254,"text":53292},{"id":53385,"depth":254,"text":53386},{"id":53443,"depth":210,"text":53444,"children":55537},[55538,55539,55540,55541],{"id":53447,"depth":254,"text":53448},{"id":53471,"depth":254,"text":53472},{"id":53524,"depth":254,"text":53525},{"id":54333,"depth":254,"text":54334},{"id":54718,"depth":210,"text":54719,"children":55543},[55544,55545,55546,55547,55548,55549,55550],{"id":54736,"depth":254,"text":54737},{"id":54773,"depth":254,"text":54774},{"id":54804,"depth":254,"text":54805},{"id":54837,"depth":254,"text":54838},{"id":54918,"depth":254,"text":54919},{"id":55016,"depth":254,"text":55017},{"id":55074,"depth":254,"text":55075},{"id":55127,"depth":210,"text":55128,"children":55552},[55553,55554,55555,55556,55557,55558,55559],{"id":55131,"depth":254,"text":55132},{"id":55156,"depth":254,"text":55157},{"id":55208,"depth":254,"text":55209},{"id":55228,"depth":254,"text":55229},{"id":55295,"depth":254,"text":55296},{"id":55388,"depth":254,"text":55389},{"id":55469,"depth":254,"text":55470},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52698,"description":2384},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55566,"title":55567,"body":55568,"description":2384,"extension":2385,"meta":78902,"navigation":842,"path":78903,"seo":78904,"stem":78905,"__hash__":78906},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55569,"toc":78842},[55570,55573,55576,55579,55584,55587,55590,55593,55597,55601,55607,55612,55620,55627,55630,55634,55639,55644,55649,55652,55655,55666,55669,55673,55676,55679,55684,55689,55694,55697,55700,55792,55795,55800,55803,55808,55811,55814,55819,55822,55827,55831,55834,55848,55852,55857,55860,55863,55867,55872,55875,55879,55883,55888,55892,55897,55900,55903,55906,55909,55912,55915,55920,55925,55953,55956,55959,55962,55967,55970,55973,55976,55979,55983,56012,56016,56021,56026,56029,56032,56035,56040,56154,56159,56164,56325,56330,56333,56337,56342,56347,56350,56353,56356,56359,56362,56365,56368,56371,56374,56377,56380,56383,56386,56389,56391,56394,56397,56400,56405,56409,56806,56809,56815,56819,56824,58106,58111,58114,58117,58120,58125,59321,59325,59331,59336,59339,59344,59349,59353,59357,59362,59365,59370,59373,59376,59380,60287,60290,60294,60515,60518,60521,60524,60750,60753,60977,60980,60984,60989,60992,60995,61223,61226,61259,61262,61266,61271,61275,61278,61281,61284,61287,61290,61293,61296,61301,62581,62585,62588,63681,63685,63688,63691,63694,63697,63701,63704,63707,63709,63717,65197,65201,65204,65207,65210,65419,65422,65426,65430,65435,65440,65443,65446,65451,65455,65460,65463,65572,65576,65581,65586,65589,65592,65596,65601,65606,65611,65614,65617,65628,65631,65636,65641,65644,65647,65720,65724,65729,65732,65734,65745,65749,65754,67079,67082,67085,67088,67090,67093,67096,67099,67102,67105,67108,67111,67114,67117,67120,67123,67126,67128,67130,67133,67137,68231,68234,68237,68253,68267,68270,68275,68281,68286,68290,68294,68299,68303,68308,68750,68755,68758,68762,68767,68770,68773,68777,68782,68786,68791,68796,68800,68805,68810,68813,68818,68823,68827,68832,68837,68941,68944,68948,68953,69318,69321,69324,69327,69330,69333,69336,69339,69342,70638,70642,70647,70652,70655,70658,70661,70664,70666,70671,70676,70679,70683,70688,70693,70698,70701,70704,70707,70710,70713,70718,70721,70725,70730,70735,70739,70744,70747,70752,70755,70758,70761,70764,70767,70772,70775,70778,70781,70784,70788,70793,70796,70800,70805,70808,70811,70815,70844,70847,70851,70855,70860,70864,70869,70872,70875,70878,70881,70884,70887,70890,70893,70896,70899,70902,70905,70908,70911,70915,70920,70925,70928,70932,70936,70941,70944,70948,70951,70954,70959,70964,70969,70974,70979,70982,70985,70990,70995,70999,71004,71007,71012,71015,71018,71021,71024,71029,71032,71041,71045,71050,71053,71056,71060,71063,71068,71072,71075,71081,71087,71091,71117,71120,72680,72683,73179,73182,73187,73192,73197,73201,73206,73211,73216,73220,73225,73228,73231,73234,73237,73241,73244,73249,73252,73257,73261,73266,73269,73274,73279,73284,73287,73290,73295,73300,73303,73306,73310,73313,73318,73321,73326,73329,73334,73339,73344,73347,73352,73417,73420,73431,73435,73440,73612,73616,73621,73624,73627,73630,73634,73645,73649,73652,73657,73662,73665,73668,73671,73674,73677,73679,73682,73685,73688,73693,73696,73701,73704,73708,73711,73714,73728,73732,73735,73790,73795,73798,73801,73806,73809,73813,73818,73948,73952,73957,73962,74043,74048,74052,74055,74060,74065,74071,74074,74077,74080,74084,74089,74092,74103,74107,74124,77171,77175,77178,77181,77184,77205,77209,77212,77220,77223,77228,77231,77234,77239,77244,77248,77269,77273,77278,77281,77284,77287,77290,77294,77299,77302,77306,77311,77314,77319,77322,77327,77330,77335,78538,78542,78547,78550,78555,78839],[10,55571,55567],{"id":55572},"_3web-apis",[19,55574,55575],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55577,55578],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55580,55581],{},[3760,55582],{"alt":135,"src":55583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55585,55586],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55588,55589],{},"建议数组和对象使用 const 来声明",[19,55591,55592],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55594,55596],{"id":55595},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1217,55598,55600],{"id":55599},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55602,55603,55606],{},[50,55604,55605],{},"document"," = HTML 文件解析后的对象化表示；",[19,55608,55609,55611],{},[50,55610,55605],{}," ≠ HTML 文件本身",[19,55613,55614,55619],{},[1674,55615,55616],{},[50,55617,55618],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55621,55622,55626],{},[1674,55623,55624],{},[50,55625,55605],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55628,55629],{},"document实际上为window.document的简写",[1217,55631,55633],{"id":55632},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55635,55636],{},[3760,55637],{"alt":135,"src":55638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55640,55641],{},[3760,55642],{"alt":135,"src":55643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55645,55646],{},[3760,55647],{"alt":135,"src":55648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55650,55651],{},"console.dir()",[19,55653,55654],{},"dir用来打印对象",[3437,55656,55657,55660,55663],{},[1763,55658,55659],{},"任何一个标签，都是一个对象",[1763,55661,55662],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1763,55664,55665],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55667,55668],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1217,55670,55672],{"id":55671},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55674,55675],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55677,55678],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55680,55681],{},[1674,55682,55683],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1760,55685,55686],{},[1763,55687,55688],{},"利用CSS选择器来获取标签元素",[19,55690,55691],{},[3760,55692],{"alt":135,"src":55693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55695,55696],{},"里边的选择器必须必须加引号！！！",[19,55698,55699],{},"只选择第一个元素",[130,55701,55703],{"className":55302,"code":55702,"language":55304,"meta":135,"style":135},"\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",[50,55704,55705,55713,55734,55753,55761,55766,55771,55776,55784],{"__ignoreMap":135},[139,55706,55707,55709,55711],{"class":141,"line":142},[139,55708,796],{"class":145},[139,55710,54037],{"class":53538},[139,55712,53545],{"class":145},[139,55714,55715,55717,55719,55722,55724,55727,55730,55732],{"class":141,"line":210},[139,55716,54380],{"class":145},[139,55718,53848],{"class":53538},[139,55720,55721],{"class":781}," class",[139,55723,150],{"class":145},[139,55725,55726],{"class":160},"\"box\"",[139,55728,55729],{"class":145},">123\u003C\u002F",[139,55731,53848],{"class":53538},[139,55733,53545],{"class":145},[139,55735,55736,55738,55740,55742,55744,55746,55749,55751],{"class":141,"line":254},[139,55737,54380],{"class":145},[139,55739,53848],{"class":53538},[139,55741,55721],{"class":781},[139,55743,150],{"class":145},[139,55745,55726],{"class":160},[139,55747,55748],{"class":145},">456\u003C\u002F",[139,55750,53848],{"class":53538},[139,55752,53545],{"class":145},[139,55754,55755,55757,55759],{"class":141,"line":262},[139,55756,54380],{"class":145},[139,55758,54050],{"class":53538},[139,55760,53545],{"class":145},[139,55762,55763],{"class":141,"line":313},[139,55764,55765],{"class":145},"    \u002F\u002F 1.获取匹配的第一个元素\n",[139,55767,55768],{"class":141,"line":462},[139,55769,55770],{"class":145},"    const box = document.querySelector('div')\n",[139,55772,55773],{"class":141,"line":474},[139,55774,55775],{"class":145},"    console.dir(box)\n",[139,55777,55778,55780,55782],{"class":141,"line":484},[139,55779,54652],{"class":145},[139,55781,54050],{"class":53538},[139,55783,53545],{"class":145},[139,55785,55786,55788,55790],{"class":141,"line":989},[139,55787,54022],{"class":145},[139,55789,54037],{"class":53538},[139,55791,53545],{"class":145},[19,55793,55794],{},"只选123，不选456",[19,55796,55797],{},[3760,55798],{"alt":135,"src":55799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55801,55802],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55804,55805],{},[3760,55806],{"alt":135,"src":55807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55809,55810],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55812,55813],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1760,55815,55816],{"start":210},[1763,55817,55818],{},"其他方法来获取标签元素",[19,55820,55821],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55823,55824],{},[3760,55825],{"alt":135,"src":55826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1217,55828,55830],{"id":55829},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55832,55833],{},"设置修改DOM元素内容有两种方式：",[3437,55835,55836,55839,55842,55845],{},[1763,55837,55838],{},"元素.innerText=''",[1763,55840,55841],{},"元素.innerHTML=''",[1763,55843,55844],{},"不写字符串输出数字也是可以的",[1763,55846,55847],{},"元素.innerHtml=1",[24265,55849,55851],{"id":55850},"_3131-innertext","3.1.3.1 innerText",[19,55853,55854],{},[3760,55855],{"alt":135,"src":55856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55858,55859],{},"思路：实现了修改盒子中的内容！",[19,55861,55862],{},"它只显示纯文本，不解析标签",[24265,55864,55866],{"id":55865},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55868,55869],{},[3760,55870],{"alt":135,"src":55871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55873,55874],{},"相比于innerText，他的强大之处在于可以解析标签",[1217,55876,55878],{"id":55877},"_314-操作元素属性","3.1.4 操作元素属性",[24265,55880,55882],{"id":55881},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55884,55885],{},[3760,55886],{"alt":135,"src":55887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24265,55889,55891],{"id":55890},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55893,55894],{},[3760,55895],{"alt":135,"src":55896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55898,55899],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55901,55902],{},"div.style.backgroundColor = 'hotpink'",[19,55904,55905],{},"如果按照css的写法，-表示减，就会出错",[19,55907,55908],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55910,55911],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55913,55914],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55916,55917],{},[3760,55918],{"alt":135,"src":55919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55921,55922],{},[3760,55923],{"alt":135,"src":55924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1760,55926,55927,55930,55933,55936,55939,55942],{},[1763,55928,55929],{},"className这个方式就是修改很多样式的时候来使用的！",[1763,55931,55932],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1763,55934,55935],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1763,55937,55938],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1763,55940,55941],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1763,55943,55944,55945,55950],{},"解析标签的时候就变为了",[53848,55946],{"className":55947},[55948,55949],"nav","box",[55951,55952],"br",{},[19,55954,55955],{},"例子：",[53848,55957],{"className":55958},[55948],[54050,55960,55961],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55963,55964],{},[3760,55965],{"alt":135,"src":55966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55968,55969],{},"追加和删除类名用classList",[19,55971,55972],{},"常用于类似于开关的操作",[19,55974,55975],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55977,55978],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24265,55980,55982],{"id":55981},"_3143-牢记点","3.1.4.3 牢记点",[1760,55984,55985,55988,55991,55994,55997,56000,56003,56006,56009],{},[1763,55986,55987],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1763,55989,55990],{},"使用style属性操作css时不要忘记引号",[1763,55992,55993],{},"使用className或者classList时也不要忘记引号",[1763,55995,55996],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1763,55998,55999],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1763,56001,56002],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1763,56004,56005],{},"若： let arr=['1','2',3] arr[0]=1",[1763,56007,56008],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1763,56010,56011],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1217,56013,56015],{"id":56014},"_315-操作表单元素","3.1.5 操作表单元素",[1760,56017,56018],{},[1763,56019,56020],{},"天生的属性",[19,56022,56023],{},[3760,56024],{"alt":135,"src":56025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56027,56028],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56030,56031],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56033,56034],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56036,56037],{},[3760,56038],{"alt":135,"src":56039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[130,56041,56043],{"className":52871,"code":56042,"language":52873,"meta":135,"style":135},"在复选框中如果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",[50,56044,56045,56050,56081,56086,56091,56096,56101,56105,56110,56115,56132,56144,56149],{"__ignoreMap":135},[139,56046,56047],{"class":141,"line":142},[139,56048,56049],{"class":145},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[139,56051,56052,56054,56056,56059,56061,56064,56066,56068,56070,56072,56074,56076,56079],{"class":141,"line":210},[139,56053,796],{"class":145},[139,56055,199],{"class":53538},[139,56057,56058],{"class":781}," type",[139,56060,150],{"class":145},[139,56062,56063],{"class":160},"\"checkbox\"",[139,56065,17189],{"class":781},[139,56067,150],{"class":145},[139,56069,9926],{"class":160},[139,56071,17228],{"class":781},[139,56073,150],{"class":145},[139,56075,9926],{"class":160},[139,56077,56078],{"class":781}," checked",[139,56080,53545],{"class":145},[139,56082,56083],{"class":141,"line":254},[139,56084,56085],{"class":145},"不选的话：\n",[139,56087,56088],{"class":141,"line":262},[139,56089,56090],{"class":145},"const input = document.querySelector('input')\n",[139,56092,56093],{"class":141,"line":313},[139,56094,56095],{"class":145},"input.checked=false\n",[139,56097,56098],{"class":141,"line":462},[139,56099,56100],{"class":145},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[139,56102,56103],{"class":141,"line":474},[139,56104,843],{"emptyLinePlaceholder":842},[139,56106,56107],{"class":141,"line":484},[139,56108,56109],{"class":145},"禁用按钮：\n",[139,56111,56112],{"class":141,"line":989},[139,56113,56114],{"class":145},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[139,56116,56117,56119,56122,56125,56128,56130],{"class":141,"line":994},[139,56118,796],{"class":145},[139,56120,56121],{"class":53538},"button",[139,56123,56124],{"class":781}," disabled",[139,56126,56127],{"class":145},">点击\u003C\u002F",[139,56129,56121],{"class":53538},[139,56131,53545],{"class":145},[139,56133,56134,56136,56138,56140,56142],{"class":141,"line":999},[139,56135,796],{"class":145},[139,56137,56121],{"class":53538},[139,56139,56127],{"class":145},[139,56141,56121],{"class":53538},[139,56143,53545],{"class":145},[139,56145,56146],{"class":141,"line":1006},[139,56147,56148],{"class":145},"const bt = document.querySelector('button')\n",[139,56150,56151],{"class":141,"line":1027},[139,56152,56153],{"class":145},"bt.disabled = false\n",[1760,56155,56156],{"start":210},[1763,56157,56158],{},"自定义属性",[19,56160,56161],{},[3760,56162],{"alt":135,"src":56163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[130,56165,56167],{"className":55302,"code":56166,"language":55304,"meta":135,"style":135},"\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",[50,56168,56169,56177,56205,56224,56243,56262,56281,56289,56294,56299,56304,56309,56317],{"__ignoreMap":135},[139,56170,56171,56173,56175],{"class":141,"line":142},[139,56172,796],{"class":145},[139,56174,54037],{"class":53538},[139,56176,53545],{"class":145},[139,56178,56179,56181,56183,56186,56188,56190,56193,56195,56198,56201,56203],{"class":141,"line":210},[139,56180,54380],{"class":145},[139,56182,53848],{"class":53538},[139,56184,56185],{"class":781}," data-id",[139,56187,150],{"class":145},[139,56189,5959],{"class":160},[139,56191,56192],{"class":781}," data-spm",[139,56194,150],{"class":145},[139,56196,56197],{"class":160},"\"我不知道\"",[139,56199,56200],{"class":145},">1\u003C\u002F",[139,56202,53848],{"class":53538},[139,56204,53545],{"class":145},[139,56206,56207,56209,56211,56213,56215,56217,56220,56222],{"class":141,"line":254},[139,56208,54380],{"class":145},[139,56210,53848],{"class":53538},[139,56212,56185],{"class":781},[139,56214,150],{"class":145},[139,56216,5982],{"class":160},[139,56218,56219],{"class":145},">2\u003C\u002F",[139,56221,53848],{"class":53538},[139,56223,53545],{"class":145},[139,56225,56226,56228,56230,56232,56234,56236,56239,56241],{"class":141,"line":262},[139,56227,54380],{"class":145},[139,56229,53848],{"class":53538},[139,56231,56185],{"class":781},[139,56233,150],{"class":145},[139,56235,5995],{"class":160},[139,56237,56238],{"class":145},">3\u003C\u002F",[139,56240,53848],{"class":53538},[139,56242,53545],{"class":145},[139,56244,56245,56247,56249,56251,56253,56255,56258,56260],{"class":141,"line":313},[139,56246,54380],{"class":145},[139,56248,53848],{"class":53538},[139,56250,56185],{"class":781},[139,56252,150],{"class":145},[139,56254,6008],{"class":160},[139,56256,56257],{"class":145},">4\u003C\u002F",[139,56259,53848],{"class":53538},[139,56261,53545],{"class":145},[139,56263,56264,56266,56268,56270,56272,56274,56277,56279],{"class":141,"line":462},[139,56265,54380],{"class":145},[139,56267,53848],{"class":53538},[139,56269,56185],{"class":781},[139,56271,150],{"class":145},[139,56273,6028],{"class":160},[139,56275,56276],{"class":145},">5\u003C\u002F",[139,56278,53848],{"class":53538},[139,56280,53545],{"class":145},[139,56282,56283,56285,56287],{"class":141,"line":474},[139,56284,54380],{"class":145},[139,56286,54050],{"class":53538},[139,56288,53545],{"class":145},[139,56290,56291],{"class":141,"line":484},[139,56292,56293],{"class":145},"    const one = document.querySelector('div')\n",[139,56295,56296],{"class":141,"line":989},[139,56297,56298],{"class":145},"    console.log(one.dataset)\n",[139,56300,56301],{"class":141,"line":994},[139,56302,56303],{"class":145},"    console.log(one.dataset.id)\n",[139,56305,56306],{"class":141,"line":999},[139,56307,56308],{"class":145},"    console.log(one.dataset.spm)\n",[139,56310,56311,56313,56315],{"class":141,"line":1006},[139,56312,54652],{"class":145},[139,56314,54050],{"class":53538},[139,56316,53545],{"class":145},[139,56318,56319,56321,56323],{"class":141,"line":1027},[139,56320,54022],{"class":145},[139,56322,54037],{"class":53538},[139,56324,53545],{"class":145},[19,56326,56327],{},[3760,56328],{"alt":135,"src":56329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56331,56332],{},"document.querySelector选择的是第一个对象（元素）",[1217,56334,56336],{"id":56335},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56338,56339],{},[3760,56340],{"alt":135,"src":56341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56343,56344],{},[3760,56345],{"alt":135,"src":56346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56348,56349],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54050,56351,56352],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56354,56355],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54050,56357,56358],{},"\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,56360,56361],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56363,56364],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56366,56367],{},"单位为毫秒！！！",[19,56369,56370],{},"可以搭配匿名函数来用！！！",[19,56372,56373],{},"setInterval(function () {",[19,56375,56376],{},"alert('两秒执行一次')",[19,56378,56379],{},"}, 2000)",[19,56381,56382],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56384,56385],{},"function fn() {",[19,56387,56388],{},"document.write(1)",[19,56390,631],{},[19,56392,56393],{},"setInterval(fn, 1000)",[19,56395,56396],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56398,56399],{},"setInterval('fn()', 1000)",[19,56401,56402],{},[3760,56403],{"alt":135,"src":56404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24265,56406,56408],{"id":56407},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[130,56410,56412],{"className":52871,"code":56411,"language":52873,"meta":135,"style":135},"\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",[50,56413,56414,56424,56438,56442,56450,56464,56484,56496,56504,56508,56516,56553,56558,56563,56568,56576,56584,56606,56614,56619,56641,56646,56651,56662,56667,56687,56695,56710,56725,56736,56741,56751,56761,56765,56774,56778,56786,56794,56798],{"__ignoreMap":135},[139,56415,56416,56418,56420,56422],{"class":141,"line":142},[139,56417,53535],{"class":145},[139,56419,53539],{"class":53538},[139,56421,53542],{"class":781},[139,56423,53545],{"class":145},[139,56425,56426,56428,56430,56432,56434,56436],{"class":141,"line":210},[139,56427,796],{"class":145},[139,56429,52873],{"class":53538},[139,56431,53554],{"class":781},[139,56433,150],{"class":145},[139,56435,53559],{"class":160},[139,56437,53545],{"class":145},[139,56439,56440],{"class":141,"line":254},[139,56441,843],{"emptyLinePlaceholder":842},[139,56443,56444,56446,56448],{"class":141,"line":262},[139,56445,796],{"class":145},[139,56447,53572],{"class":53538},[139,56449,53545],{"class":145},[139,56451,56452,56454,56456,56458,56460,56462],{"class":141,"line":313},[139,56453,54380],{"class":145},[139,56455,53582],{"class":53538},[139,56457,53585],{"class":781},[139,56459,150],{"class":145},[139,56461,53590],{"class":160},[139,56463,53545],{"class":145},[139,56465,56466,56468,56470,56472,56474,56476,56478,56480,56482],{"class":141,"line":462},[139,56467,54380],{"class":145},[139,56469,53582],{"class":53538},[139,56471,17189],{"class":781},[139,56473,150],{"class":145},[139,56475,53629],{"class":160},[139,56477,53609],{"class":781},[139,56479,150],{"class":145},[139,56481,53636],{"class":160},[139,56483,53545],{"class":145},[139,56485,56486,56488,56490,56492,56494],{"class":141,"line":474},[139,56487,54380],{"class":145},[139,56489,53645],{"class":53538},[139,56491,53648],{"class":145},[139,56493,53645],{"class":53538},[139,56495,53545],{"class":145},[139,56497,56498,56500,56502],{"class":141,"line":484},[139,56499,54022],{"class":145},[139,56501,53572],{"class":53538},[139,56503,53545],{"class":145},[139,56505,56506],{"class":141,"line":989},[139,56507,843],{"emptyLinePlaceholder":842},[139,56509,56510,56512,56514],{"class":141,"line":994},[139,56511,796],{"class":145},[139,56513,54037],{"class":53538},[139,56515,53545],{"class":145},[139,56517,56518,56520,56523,56525,56527,56529,56531,56533,56535,56538,56540,56543,56546,56548,56551],{"class":141,"line":999},[139,56519,54380],{"class":145},[139,56521,56522],{"class":53538},"textarea",[139,56524,17189],{"class":781},[139,56526,150],{"class":145},[139,56528,9926],{"class":160},[139,56530,17228],{"class":781},[139,56532,150],{"class":145},[139,56534,9926],{"class":160},[139,56536,56537],{"class":781}," cols",[139,56539,150],{"class":145},[139,56541,56542],{"class":160},"\"30\"",[139,56544,56545],{"class":781}," rows",[139,56547,150],{"class":145},[139,56549,56550],{"class":160},"\"10\"",[139,56552,53545],{"class":145},[139,56554,56555],{"class":141,"line":1006},[139,56556,56557],{"class":145},"        用户注册协议\n",[139,56559,56560],{"class":141,"line":1027},[139,56561,56562],{"class":145},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[139,56564,56565],{"class":141,"line":1040},[139,56566,56567],{"class":145},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[139,56569,56570,56572,56574],{"class":141,"line":2160},[139,56571,54013],{"class":145},[139,56573,56522],{"class":53538},[139,56575,53545],{"class":145},[139,56577,56578,56580,56582],{"class":141,"line":2188},[139,56579,54380],{"class":145},[139,56581,55951],{"class":53538},[139,56583,53545],{"class":145},[139,56585,56586,56588,56590,56592,56594,56597,56599,56602,56604],{"class":141,"line":3944},[139,56587,54380],{"class":145},[139,56589,56121],{"class":53538},[139,56591,55721],{"class":781},[139,56593,150],{"class":145},[139,56595,56596],{"class":160},"\"btn\"",[139,56598,56124],{"class":781},[139,56600,56601],{"class":145},">我已经阅读用户协议(5)\u003C\u002F",[139,56603,56121],{"class":53538},[139,56605,53545],{"class":145},[139,56607,56608,56610,56612],{"class":141,"line":3963},[139,56609,54380],{"class":145},[139,56611,54050],{"class":53538},[139,56613,53545],{"class":145},[139,56615,56616],{"class":141,"line":3968},[139,56617,56618],{"class":2512},"    \u002F\u002F 1. 获取元素\n",[139,56620,56621,56623,56626,56628,56631,56634,56636,56639],{"class":141,"line":3982},[139,56622,13494],{"class":149},[139,56624,56625],{"class":153}," btn",[139,56627,15836],{"class":149},[139,56629,56630],{"class":145}," document.",[139,56632,56633],{"class":781},"querySelector",[139,56635,157],{"class":145},[139,56637,56638],{"class":160},"'.btn'",[139,56640,164],{"class":145},[139,56642,56643],{"class":141,"line":3987},[139,56644,56645],{"class":2512},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[139,56647,56648],{"class":141,"line":4014},[139,56649,56650],{"class":2512},"    \u002F\u002F 2. 倒计时\n",[139,56652,56653,56655,56657,56659],{"class":141,"line":4019},[139,56654,54455],{"class":149},[139,56656,11712],{"class":145},[139,56658,150],{"class":149},[139,56660,56661],{"class":153}," 5\n",[139,56663,56664],{"class":141,"line":4036},[139,56665,56666],{"class":2512},"    \u002F\u002F 2.1 开启定时器\n",[139,56668,56669,56671,56674,56676,56679,56681,56684],{"class":141,"line":4041},[139,56670,54455],{"class":149},[139,56672,56673],{"class":145}," n ",[139,56675,150],{"class":149},[139,56677,56678],{"class":781}," setInterval",[139,56680,157],{"class":145},[139,56682,56683],{"class":149},"function",[139,56685,56686],{"class":145}," () {\n",[139,56688,56689,56692],{"class":141,"line":4046},[139,56690,56691],{"class":145},"      i",[139,56693,56694],{"class":149},"--\n",[139,56696,56697,56700,56702,56705,56707],{"class":141,"line":4051},[139,56698,56699],{"class":145},"      btn.innerHTML ",[139,56701,150],{"class":149},[139,56703,56704],{"class":160}," `我已经阅读用户协议(${",[139,56706,2879],{"class":145},[139,56708,56709],{"class":160},"})`\n",[139,56711,56712,56715,56718,56721,56723],{"class":141,"line":4065},[139,56713,56714],{"class":149},"      if",[139,56716,56717],{"class":145}," (i ",[139,56719,56720],{"class":149},"===",[139,56722,799],{"class":153},[139,56724,14714],{"class":145},[139,56726,56727,56730,56733],{"class":141,"line":4070},[139,56728,56729],{"class":781},"        clearInterval",[139,56731,56732],{"class":145},"(n)  ",[139,56734,56735],{"class":2512},"\u002F\u002F 关闭定时器\n",[139,56737,56738],{"class":141,"line":4860},[139,56739,56740],{"class":2512},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[139,56742,56743,56746,56748],{"class":141,"line":4874},[139,56744,56745],{"class":145},"        btn.disabled ",[139,56747,150],{"class":149},[139,56749,56750],{"class":153}," false\n",[139,56752,56753,56756,56758],{"class":141,"line":4882},[139,56754,56755],{"class":145},"        btn.innerHTML ",[139,56757,150],{"class":149},[139,56759,56760],{"class":160}," '同意'\n",[139,56762,56763],{"class":141,"line":4887},[139,56764,54633],{"class":145},[139,56766,56767,56770,56772],{"class":141,"line":4893},[139,56768,56769],{"class":145},"    }, ",[139,56771,8684],{"class":153},[139,56773,164],{"class":145},[139,56775,56776],{"class":141,"line":4899},[139,56777,843],{"emptyLinePlaceholder":842},[139,56779,56780,56782,56784],{"class":141,"line":4904},[139,56781,54652],{"class":145},[139,56783,54050],{"class":53538},[139,56785,53545],{"class":145},[139,56787,56788,56790,56792],{"class":141,"line":10222},[139,56789,54022],{"class":145},[139,56791,54037],{"class":53538},[139,56793,53545],{"class":145},[139,56795,56796],{"class":141,"line":10246},[139,56797,843],{"emptyLinePlaceholder":842},[139,56799,56800,56802,56804],{"class":141,"line":10251},[139,56801,54022],{"class":145},[139,56803,52873],{"class":53538},[139,56805,53545],{"class":145},[19,56807,56808],{},"不要一直想着用死循环,避免死循环",[19,56810,56811,56814],{},[50,56812,56813],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24265,56816,56818],{"id":56817},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1760,56820,56821],{},[1763,56822,56823],{},"法1",[130,56825,56827],{"className":52871,"code":56826,"language":52873,"meta":135,"style":135},"\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",[50,56828,56829,56839,56853,56857,56865,56879,56899,56911,56919,56925,56936,56947,56951,56955,56962,56974,56978,56982,56989,57001,57015,57028,57042,57046,57050,57057,57068,57079,57090,57102,57114,57126,57130,57134,57142,57152,57165,57177,57190,57194,57198,57205,57215,57227,57239,57250,57261,57271,57283,57295,57299,57303,57312,57324,57336,57364,57377,57381,57385,57392,57403,57407,57415,57423,57427,57435,57449,57464,57488,57496,57511,57524,57532,57553,57565,57577,57589,57601,57613,57625,57637,57646,57654,57662,57670,57682,57705,57724,57743,57762,57781,57800,57819,57839,57843,57863,57882,57902,57923,57934,57951,57961,57971,57981,57986,57991,57996,58001,58026,58039,58043,58066,58070,58078,58086,58094,58098],{"__ignoreMap":135},[139,56830,56831,56833,56835,56837],{"class":141,"line":142},[139,56832,53535],{"class":145},[139,56834,53539],{"class":53538},[139,56836,53542],{"class":781},[139,56838,53545],{"class":145},[139,56840,56841,56843,56845,56847,56849,56851],{"class":141,"line":210},[139,56842,796],{"class":145},[139,56844,52873],{"class":53538},[139,56846,53554],{"class":781},[139,56848,150],{"class":145},[139,56850,53559],{"class":160},[139,56852,53545],{"class":145},[139,56854,56855],{"class":141,"line":254},[139,56856,843],{"emptyLinePlaceholder":842},[139,56858,56859,56861,56863],{"class":141,"line":262},[139,56860,796],{"class":145},[139,56862,53572],{"class":53538},[139,56864,53545],{"class":145},[139,56866,56867,56869,56871,56873,56875,56877],{"class":141,"line":313},[139,56868,54380],{"class":145},[139,56870,53582],{"class":53538},[139,56872,53585],{"class":781},[139,56874,150],{"class":145},[139,56876,53590],{"class":160},[139,56878,53545],{"class":145},[139,56880,56881,56883,56885,56887,56889,56891,56893,56895,56897],{"class":141,"line":462},[139,56882,54380],{"class":145},[139,56884,53582],{"class":53538},[139,56886,17189],{"class":781},[139,56888,150],{"class":145},[139,56890,53629],{"class":160},[139,56892,53609],{"class":781},[139,56894,150],{"class":145},[139,56896,53636],{"class":160},[139,56898,53545],{"class":145},[139,56900,56901,56903,56905,56907,56909],{"class":141,"line":474},[139,56902,54380],{"class":145},[139,56904,53645],{"class":53538},[139,56906,53648],{"class":145},[139,56908,53645],{"class":53538},[139,56910,53545],{"class":145},[139,56912,56913,56915,56917],{"class":141,"line":484},[139,56914,54380],{"class":145},[139,56916,2348],{"class":53538},[139,56918,53545],{"class":145},[139,56920,56921,56923],{"class":141,"line":989},[139,56922,8677],{"class":53538},[139,56924,17840],{"class":145},[139,56926,56927,56930,56932,56934],{"class":141,"line":994},[139,56928,56929],{"class":153},"      padding",[139,56931,2265],{"class":145},[139,56933,2634],{"class":153},[139,56935,3591],{"class":145},[139,56937,56938,56941,56943,56945],{"class":141,"line":999},[139,56939,56940],{"class":153},"      margin",[139,56942,2265],{"class":145},[139,56944,2634],{"class":153},[139,56946,3591],{"class":145},[139,56948,56949],{"class":141,"line":1006},[139,56950,4472],{"class":145},[139,56952,56953],{"class":141,"line":1027},[139,56954,843],{"emptyLinePlaceholder":842},[139,56956,56957,56960],{"class":141,"line":1040},[139,56958,56959],{"class":53538},"    li",[139,56961,17840],{"class":145},[139,56963,56964,56967,56969,56972],{"class":141,"line":2160},[139,56965,56966],{"class":153},"      list-style",[139,56968,2265],{"class":145},[139,56970,56971],{"class":153},"none",[139,56973,3591],{"class":145},[139,56975,56976],{"class":141,"line":2188},[139,56977,4472],{"class":145},[139,56979,56980],{"class":141,"line":3944},[139,56981,843],{"emptyLinePlaceholder":842},[139,56983,56984,56987],{"class":141,"line":3963},[139,56985,56986],{"class":781},"    .box",[139,56988,17840],{"class":145},[139,56990,56991,56994,56996,56999],{"class":141,"line":3968},[139,56992,56993],{"class":153},"      position",[139,56995,2265],{"class":145},[139,56997,56998],{"class":153},"relative",[139,57000,3591],{"class":145},[139,57002,57003,57006,57008,57011,57013],{"class":141,"line":3982},[139,57004,57005],{"class":153},"      width",[139,57007,2265],{"class":145},[139,57009,57010],{"class":153},"976",[139,57012,53729],{"class":149},[139,57014,3591],{"class":145},[139,57016,57017,57020,57022,57024,57026],{"class":141,"line":3987},[139,57018,57019],{"class":153},"      height",[139,57021,2265],{"class":145},[139,57023,3836],{"class":153},[139,57025,53729],{"class":149},[139,57027,3591],{"class":145},[139,57029,57030,57032,57034,57036,57038,57040],{"class":141,"line":4014},[139,57031,56940],{"class":153},[139,57033,2265],{"class":145},[139,57035,1017],{"class":153},[139,57037,53729],{"class":149},[139,57039,53793],{"class":153},[139,57041,3591],{"class":145},[139,57043,57044],{"class":141,"line":4019},[139,57045,4472],{"class":145},[139,57047,57048],{"class":141,"line":4036},[139,57049,843],{"emptyLinePlaceholder":842},[139,57051,57052,57055],{"class":141,"line":4041},[139,57053,57054],{"class":781},"    .slider-footer",[139,57056,17840],{"class":145},[139,57058,57059,57061,57063,57066],{"class":141,"line":4046},[139,57060,56993],{"class":153},[139,57062,2265],{"class":145},[139,57064,57065],{"class":153},"absolute",[139,57067,3591],{"class":145},[139,57069,57070,57073,57075,57077],{"class":141,"line":4051},[139,57071,57072],{"class":153},"      left",[139,57074,2265],{"class":145},[139,57076,2634],{"class":153},[139,57078,3591],{"class":145},[139,57080,57081,57084,57086,57088],{"class":141,"line":4065},[139,57082,57083],{"class":153},"      bottom",[139,57085,2265],{"class":145},[139,57087,2634],{"class":153},[139,57089,3591],{"class":145},[139,57091,57092,57094,57096,57098,57100],{"class":141,"line":4070},[139,57093,57005],{"class":153},[139,57095,2265],{"class":145},[139,57097,1017],{"class":153},[139,57099,2766],{"class":149},[139,57101,3591],{"class":145},[139,57103,57104,57106,57108,57110,57112],{"class":141,"line":4860},[139,57105,57019],{"class":153},[139,57107,2265],{"class":145},[139,57109,3010],{"class":153},[139,57111,2766],{"class":149},[139,57113,3591],{"class":145},[139,57115,57116,57119,57121,57124],{"class":141,"line":4874},[139,57117,57118],{"class":153},"      background-color",[139,57120,2265],{"class":145},[139,57122,57123],{"class":153},"skyblue",[139,57125,3591],{"class":145},[139,57127,57128],{"class":141,"line":4882},[139,57129,4472],{"class":145},[139,57131,57132],{"class":141,"line":4887},[139,57133,843],{"emptyLinePlaceholder":842},[139,57135,57136,57138,57140],{"class":141,"line":4893},[139,57137,57054],{"class":781},[139,57139,9099],{"class":53538},[139,57141,17840],{"class":145},[139,57143,57144,57146,57148,57150],{"class":141,"line":4899},[139,57145,56993],{"class":153},[139,57147,2265],{"class":145},[139,57149,57065],{"class":153},[139,57151,3591],{"class":145},[139,57153,57154,57157,57159,57161,57163],{"class":141,"line":4904},[139,57155,57156],{"class":153},"      font-size",[139,57158,2265],{"class":145},[139,57160,3335],{"class":153},[139,57162,53729],{"class":149},[139,57164,3591],{"class":145},[139,57166,57167,57169,57171,57173,57175],{"class":141,"line":10222},[139,57168,57072],{"class":153},[139,57170,2265],{"class":145},[139,57172,3135],{"class":153},[139,57174,53729],{"class":149},[139,57176,3591],{"class":145},[139,57178,57179,57182,57184,57186,57188],{"class":141,"line":10246},[139,57180,57181],{"class":153},"      top",[139,57183,2265],{"class":145},[139,57185,1481],{"class":153},[139,57187,53729],{"class":149},[139,57189,3591],{"class":145},[139,57191,57192],{"class":141,"line":10251},[139,57193,4472],{"class":145},[139,57195,57196],{"class":141,"line":10257},[139,57197,843],{"emptyLinePlaceholder":842},[139,57199,57200,57203],{"class":141,"line":10284},[139,57201,57202],{"class":53538},"    ul",[139,57204,17840],{"class":145},[139,57206,57207,57209,57211,57213],{"class":141,"line":10289},[139,57208,56993],{"class":153},[139,57210,2265],{"class":145},[139,57212,57065],{"class":153},[139,57214,3591],{"class":145},[139,57216,57217,57219,57221,57223,57225],{"class":141,"line":10295},[139,57218,57181],{"class":153},[139,57220,2265],{"class":145},[139,57222,3216],{"class":153},[139,57224,53729],{"class":149},[139,57226,3591],{"class":145},[139,57228,57229,57231,57233,57235,57237],{"class":141,"line":10307},[139,57230,57072],{"class":153},[139,57232,2265],{"class":145},[139,57234,3135],{"class":153},[139,57236,53729],{"class":149},[139,57238,3591],{"class":145},[139,57240,57241,57244,57246,57248],{"class":141,"line":10319},[139,57242,57243],{"class":153},"      display",[139,57245,2265],{"class":145},[139,57247,53714],{"class":153},[139,57249,3591],{"class":145},[139,57251,57252,57255,57257,57259],{"class":141,"line":10331},[139,57253,57254],{"class":153},"      justify-content",[139,57256,2265],{"class":145},[139,57258,53905],{"class":153},[139,57260,3591],{"class":145},[139,57262,57263,57265,57267,57269],{"class":141,"line":11990},[139,57264,56993],{"class":153},[139,57266,2265],{"class":145},[139,57268,57065],{"class":153},[139,57270,3591],{"class":145},[139,57272,57273,57275,57277,57279,57281],{"class":141,"line":12015},[139,57274,57005],{"class":153},[139,57276,2265],{"class":145},[139,57278,6272],{"class":153},[139,57280,53729],{"class":149},[139,57282,3591],{"class":145},[139,57284,57285,57287,57289,57291,57293],{"class":141,"line":12038},[139,57286,57019],{"class":153},[139,57288,2265],{"class":145},[139,57290,3135],{"class":153},[139,57292,53729],{"class":149},[139,57294,3591],{"class":145},[139,57296,57297],{"class":141,"line":12062},[139,57298,4472],{"class":145},[139,57300,57301],{"class":141,"line":12067},[139,57302,843],{"emptyLinePlaceholder":842},[139,57304,57305,57307,57310],{"class":141,"line":12072},[139,57306,57202],{"class":53538},[139,57308,57309],{"class":53538}," li",[139,57311,17840],{"class":145},[139,57313,57314,57316,57318,57320,57322],{"class":141,"line":12077},[139,57315,57005],{"class":153},[139,57317,2265],{"class":145},[139,57319,3135],{"class":153},[139,57321,53729],{"class":149},[139,57323,3591],{"class":145},[139,57325,57326,57328,57330,57332,57334],{"class":141,"line":12086},[139,57327,57019],{"class":153},[139,57329,2265],{"class":145},[139,57331,3135],{"class":153},[139,57333,53729],{"class":149},[139,57335,3591],{"class":145},[139,57337,57338,57340,57342,57345,57347,57349,57351,57353,57355,57357,57359,57362],{"class":141,"line":12091},[139,57339,57118],{"class":153},[139,57341,2265],{"class":145},[139,57343,57344],{"class":153},"rgba",[139,57346,157],{"class":145},[139,57348,2634],{"class":153},[139,57350,413],{"class":145},[139,57352,2634],{"class":153},[139,57354,413],{"class":145},[139,57356,2634],{"class":153},[139,57358,413],{"class":145},[139,57360,57361],{"class":153},".4",[139,57363,5002],{"class":145},[139,57365,57366,57369,57371,57373,57375],{"class":141,"line":12097},[139,57367,57368],{"class":153},"      border-radius",[139,57370,2265],{"class":145},[139,57372,536],{"class":153},[139,57374,53729],{"class":149},[139,57376,3591],{"class":145},[139,57378,57379],{"class":141,"line":12118},[139,57380,4472],{"class":145},[139,57382,57383],{"class":141,"line":12124},[139,57384,843],{"emptyLinePlaceholder":842},[139,57386,57387,57390],{"class":141,"line":12138},[139,57388,57389],{"class":781},"    .activate",[139,57391,17840],{"class":145},[139,57393,57394,57396,57398,57401],{"class":141,"line":12144},[139,57395,57118],{"class":153},[139,57397,2265],{"class":145},[139,57399,57400],{"class":153},"#f7f7f7",[139,57402,3591],{"class":145},[139,57404,57405],{"class":141,"line":12171},[139,57406,4472],{"class":145},[139,57408,57409,57411,57413],{"class":141,"line":12180},[139,57410,54652],{"class":145},[139,57412,2348],{"class":53538},[139,57414,53545],{"class":145},[139,57416,57417,57419,57421],{"class":141,"line":12186},[139,57418,54022],{"class":145},[139,57420,53572],{"class":53538},[139,57422,53545],{"class":145},[139,57424,57425],{"class":141,"line":12194},[139,57426,843],{"emptyLinePlaceholder":842},[139,57428,57429,57431,57433],{"class":141,"line":12199},[139,57430,796],{"class":145},[139,57432,54037],{"class":53538},[139,57434,53545],{"class":145},[139,57436,57437,57439,57441,57443,57445,57447],{"class":141,"line":18871},[139,57438,54380],{"class":145},[139,57440,53848],{"class":53538},[139,57442,55721],{"class":781},[139,57444,150],{"class":145},[139,57446,55726],{"class":160},[139,57448,53545],{"class":145},[139,57450,57451,57453,57455,57457,57459,57462],{"class":141,"line":18877},[139,57452,53579],{"class":145},[139,57454,53848],{"class":53538},[139,57456,55721],{"class":781},[139,57458,150],{"class":145},[139,57460,57461],{"class":160},"\"slider-wrapper\"",[139,57463,53545],{"class":145},[139,57465,57466,57469,57471,57474,57476,57479,57482,57484,57486],{"class":141,"line":18900},[139,57467,57468],{"class":145},"      \u003C",[139,57470,3760],{"class":53538},[139,57472,57473],{"class":781}," src",[139,57475,150],{"class":145},[139,57477,57478],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[139,57480,57481],{"class":781}," alt",[139,57483,150],{"class":145},[139,57485,9926],{"class":160},[139,57487,53545],{"class":145},[139,57489,57490,57492,57494],{"class":141,"line":18906},[139,57491,54013],{"class":145},[139,57493,53848],{"class":53538},[139,57495,53545],{"class":145},[139,57497,57498,57500,57502,57504,57506,57509],{"class":141,"line":18929},[139,57499,53579],{"class":145},[139,57501,53848],{"class":53538},[139,57503,55721],{"class":781},[139,57505,150],{"class":145},[139,57507,57508],{"class":160},"\"slider-footer\"",[139,57510,53545],{"class":145},[139,57512,57513,57515,57517,57520,57522],{"class":141,"line":18943},[139,57514,57468],{"class":145},[139,57516,19],{"class":53538},[139,57518,57519],{"class":145},">对人类来说会不会太超前了?\u003C\u002F",[139,57521,19],{"class":53538},[139,57523,53545],{"class":145},[139,57525,57526,57528,57530],{"class":141,"line":18963},[139,57527,57468],{"class":145},[139,57529,3437],{"class":53538},[139,57531,53545],{"class":145},[139,57533,57534,57537,57539,57541,57543,57546,57549,57551],{"class":141,"line":18969},[139,57535,57536],{"class":145},"        \u003C",[139,57538,1763],{"class":53538},[139,57540,55721],{"class":781},[139,57542,150],{"class":145},[139,57544,57545],{"class":160},"\"activate\"",[139,57547,57548],{"class":145},">\u003C\u002F",[139,57550,1763],{"class":53538},[139,57552,53545],{"class":145},[139,57554,57555,57557,57559,57561,57563],{"class":141,"line":18980},[139,57556,57536],{"class":145},[139,57558,1763],{"class":53538},[139,57560,57548],{"class":145},[139,57562,1763],{"class":53538},[139,57564,53545],{"class":145},[139,57566,57567,57569,57571,57573,57575],{"class":141,"line":19003},[139,57568,57536],{"class":145},[139,57570,1763],{"class":53538},[139,57572,57548],{"class":145},[139,57574,1763],{"class":53538},[139,57576,53545],{"class":145},[139,57578,57579,57581,57583,57585,57587],{"class":141,"line":19025},[139,57580,57536],{"class":145},[139,57582,1763],{"class":53538},[139,57584,57548],{"class":145},[139,57586,1763],{"class":53538},[139,57588,53545],{"class":145},[139,57590,57591,57593,57595,57597,57599],{"class":141,"line":19030},[139,57592,57536],{"class":145},[139,57594,1763],{"class":53538},[139,57596,57548],{"class":145},[139,57598,1763],{"class":53538},[139,57600,53545],{"class":145},[139,57602,57603,57605,57607,57609,57611],{"class":141,"line":19036},[139,57604,57536],{"class":145},[139,57606,1763],{"class":53538},[139,57608,57548],{"class":145},[139,57610,1763],{"class":53538},[139,57612,53545],{"class":145},[139,57614,57615,57617,57619,57621,57623],{"class":141,"line":19050},[139,57616,57536],{"class":145},[139,57618,1763],{"class":53538},[139,57620,57548],{"class":145},[139,57622,1763],{"class":53538},[139,57624,53545],{"class":145},[139,57626,57627,57629,57631,57633,57635],{"class":141,"line":19063},[139,57628,57536],{"class":145},[139,57630,1763],{"class":53538},[139,57632,57548],{"class":145},[139,57634,1763],{"class":53538},[139,57636,53545],{"class":145},[139,57638,57639,57642,57644],{"class":141,"line":19068},[139,57640,57641],{"class":145},"      \u003C\u002F",[139,57643,3437],{"class":53538},[139,57645,53545],{"class":145},[139,57647,57648,57650,57652],{"class":141,"line":19082},[139,57649,54013],{"class":145},[139,57651,53848],{"class":53538},[139,57653,53545],{"class":145},[139,57655,57656,57658,57660],{"class":141,"line":19087},[139,57657,54652],{"class":145},[139,57659,53848],{"class":53538},[139,57661,53545],{"class":145},[139,57663,57664,57666,57668],{"class":141,"line":19093},[139,57665,54380],{"class":145},[139,57667,54050],{"class":53538},[139,57669,53545],{"class":145},[139,57671,57672,57674,57677,57679],{"class":141,"line":19098},[139,57673,13494],{"class":149},[139,57675,57676],{"class":153}," arrImage",[139,57678,15836],{"class":149},[139,57680,57681],{"class":145}," [\n",[139,57683,57684,57687,57690,57693,57696,57699,57702],{"class":141,"line":19112},[139,57685,57686],{"class":145},"      { url: ",[139,57688,57689],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[139,57691,57692],{"class":145},", title: ",[139,57694,57695],{"class":160},"'对人类来说会不会太超前了?'",[139,57697,57698],{"class":145},", color: ",[139,57700,57701],{"class":160},"'rgba(100,67,68)'",[139,57703,57704],{"class":145}," },\n",[139,57706,57707,57709,57712,57714,57717,57719,57722],{"class":141,"line":19117},[139,57708,57686],{"class":145},[139,57710,57711],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[139,57713,57692],{"class":145},[139,57715,57716],{"class":160},"'开启剑与雪的黑暗传说!'",[139,57718,57698],{"class":145},[139,57720,57721],{"class":160},"'rgba(43,35,26)'",[139,57723,57704],{"class":145},[139,57725,57726,57728,57731,57733,57736,57738,57741],{"class":141,"line":19122},[139,57727,57686],{"class":145},[139,57729,57730],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[139,57732,57692],{"class":145},[139,57734,57735],{"class":160},"'真正的jo厨出现了!'",[139,57737,57698],{"class":145},[139,57739,57740],{"class":160},"'rgba(36,31,33)'",[139,57742,57704],{"class":145},[139,57744,57745,57747,57750,57752,57755,57757,57760],{"class":141,"line":19136},[139,57746,57686],{"class":145},[139,57748,57749],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[139,57751,57692],{"class":145},[139,57753,57754],{"class":160},"'李玉刚:让世界通过b站看到东方大国文化'",[139,57756,57698],{"class":145},[139,57758,57759],{"class":160},"'rgba(139,98,66)'",[139,57761,57704],{"class":145},[139,57763,57764,57766,57769,57771,57774,57776,57779],{"class":141,"line":19148},[139,57765,57686],{"class":145},[139,57767,57768],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[139,57770,57692],{"class":145},[139,57772,57773],{"class":160},"'快来分享你的寒假日常吧'",[139,57775,57698],{"class":145},[139,57777,57778],{"class":160},"'rgba(67,90,92)'",[139,57780,57704],{"class":145},[139,57782,57783,57785,57788,57790,57793,57795,57798],{"class":141,"line":19153},[139,57784,57686],{"class":145},[139,57786,57787],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[139,57789,57692],{"class":145},[139,57791,57792],{"class":160},"'哔哩哔哩小年YEAR'",[139,57794,57698],{"class":145},[139,57796,57797],{"class":160},"'rgba(166,131,143)'",[139,57799,57704],{"class":145},[139,57801,57802,57804,57807,57809,57812,57814,57817],{"class":141,"line":19166},[139,57803,57686],{"class":145},[139,57805,57806],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[139,57808,57692],{"class":145},[139,57810,57811],{"class":160},"'一站式解决你的电脑配置问题'",[139,57813,57698],{"class":145},[139,57815,57816],{"class":160},"'rgba(53,29,25)'",[139,57818,57704],{"class":145},[139,57820,57821,57823,57826,57828,57831,57833,57836],{"class":141,"line":19171},[139,57822,57686],{"class":145},[139,57824,57825],{"class":160},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[139,57827,57692],{"class":145},[139,57829,57830],{"class":160},"'谁不想和小猫咪贴贴呢?'",[139,57832,57698],{"class":145},[139,57834,57835],{"class":160},"'rgba(99,72,114)'",[139,57837,57838],{"class":145}," }\n",[139,57840,57841],{"class":141,"line":19176},[139,57842,55344],{"class":145},[139,57844,57845,57847,57850,57852,57854,57856,57858,57861],{"class":141,"line":19181},[139,57846,13494],{"class":149},[139,57848,57849],{"class":153}," img",[139,57851,15836],{"class":149},[139,57853,56630],{"class":145},[139,57855,56633],{"class":781},[139,57857,157],{"class":145},[139,57859,57860],{"class":160},"'.slider-wrapper img'",[139,57862,164],{"class":145},[139,57864,57865,57867,57869,57871,57873,57875,57877,57880],{"class":141,"line":19194},[139,57866,13494],{"class":149},[139,57868,9099],{"class":153},[139,57870,15836],{"class":149},[139,57872,56630],{"class":145},[139,57874,56633],{"class":781},[139,57876,157],{"class":145},[139,57878,57879],{"class":160},"'.slider-footer p'",[139,57881,164],{"class":145},[139,57883,57884,57886,57889,57891,57893,57895,57897,57900],{"class":141,"line":19199},[139,57885,13494],{"class":149},[139,57887,57888],{"class":153}," color",[139,57890,15836],{"class":149},[139,57892,56630],{"class":145},[139,57894,56633],{"class":781},[139,57896,157],{"class":145},[139,57898,57899],{"class":160},"'.slider-footer'",[139,57901,164],{"class":145},[139,57903,57904,57906,57909,57911,57913,57916,57918,57921],{"class":141,"line":34880},[139,57905,13494],{"class":149},[139,57907,57908],{"class":153}," lis",[139,57910,15836],{"class":149},[139,57912,56630],{"class":145},[139,57914,57915],{"class":781},"querySelectorAll",[139,57917,157],{"class":145},[139,57919,57920],{"class":160},"'.slider-footer ul li'",[139,57922,164],{"class":145},[139,57924,57925,57927,57929,57931],{"class":141,"line":34886},[139,57926,54455],{"class":149},[139,57928,11712],{"class":145},[139,57930,150],{"class":149},[139,57932,57933],{"class":153}," 1\n",[139,57935,57936,57938,57941,57943,57945,57947,57949],{"class":141,"line":34892},[139,57937,54455],{"class":149},[139,57939,57940],{"class":145}," timer ",[139,57942,150],{"class":149},[139,57944,56678],{"class":781},[139,57946,157],{"class":145},[139,57948,56683],{"class":149},[139,57950,56686],{"class":145},[139,57952,57953,57956,57958],{"class":141,"line":34898},[139,57954,57955],{"class":145},"      img.src ",[139,57957,150],{"class":149},[139,57959,57960],{"class":145}," arrImage[i].url\n",[139,57962,57963,57966,57968],{"class":141,"line":34904},[139,57964,57965],{"class":145},"      p.innerHTML ",[139,57967,150],{"class":149},[139,57969,57970],{"class":145}," arrImage[i].title\n",[139,57972,57973,57976,57978],{"class":141,"line":34915},[139,57974,57975],{"class":145},"      color.style.backgroundColor ",[139,57977,150],{"class":149},[139,57979,57980],{"class":145}," arrImage[i].color\n",[139,57982,57983],{"class":141,"line":34921},[139,57984,57985],{"class":2512},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[139,57987,57988],{"class":141,"line":34941},[139,57989,57990],{"class":2512},"      \u002F\u002F li.classList.add('activate')\n",[139,57992,57993],{"class":141,"line":34947},[139,57994,57995],{"class":2512},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[139,57997,57998],{"class":141,"line":34958},[139,57999,58000],{"class":2512},"      \u002F\u002F lis[i].classList.remove('activate')\n",[139,58002,58003,58006,58008,58010,58013,58016,58019,58021,58024],{"class":141,"line":34964},[139,58004,58005],{"class":145},"      document.",[139,58007,56633],{"class":781},[139,58009,157],{"class":145},[139,58011,58012],{"class":160},"'.activate'",[139,58014,58015],{"class":145},")?.classList.",[139,58017,58018],{"class":781},"toggle",[139,58020,157],{"class":145},[139,58022,58023],{"class":160},"'activate'",[139,58025,164],{"class":145},[139,58027,58028,58031,58033,58035,58037],{"class":141,"line":34970},[139,58029,58030],{"class":145},"      lis[i].classList.",[139,58032,7608],{"class":781},[139,58034,157],{"class":145},[139,58036,58023],{"class":160},[139,58038,164],{"class":145},[139,58040,58041],{"class":141,"line":34976},[139,58042,843],{"emptyLinePlaceholder":842},[139,58044,58045,58048,58050,58052,58054,58056,58058,58060,58063],{"class":141,"line":34982},[139,58046,58047],{"class":145},"      i ",[139,58049,150],{"class":149},[139,58051,56717],{"class":145},[139,58053,1147],{"class":149},[139,58055,27381],{"class":153},[139,58057,2120],{"class":145},[139,58059,2766],{"class":149},[139,58061,58062],{"class":145}," arrImage.",[139,58064,58065],{"class":153},"length\n",[139,58067,58068],{"class":141,"line":34988},[139,58069,843],{"emptyLinePlaceholder":842},[139,58071,58072,58074,58076],{"class":141,"line":34994},[139,58073,56769],{"class":145},[139,58075,8684],{"class":153},[139,58077,164],{"class":145},[139,58079,58080,58082,58084],{"class":141,"line":35000},[139,58081,54652],{"class":145},[139,58083,54050],{"class":53538},[139,58085,53545],{"class":145},[139,58087,58088,58090,58092],{"class":141,"line":35020},[139,58089,54022],{"class":145},[139,58091,54037],{"class":53538},[139,58093,53545],{"class":145},[139,58095,58096],{"class":141,"line":35026},[139,58097,843],{"emptyLinePlaceholder":842},[139,58099,58100,58102,58104],{"class":141,"line":35042},[139,58101,54022],{"class":145},[139,58103,52873],{"class":53538},[139,58105,53545],{"class":145},[19,58107,58108],{},[3760,58109],{"alt":135,"src":58110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58112,58113],{},"?.就是短路保护,确保输出正常进行",[19,58115,58116],{},"不要忘记取余%,有时候可以用",[19,58118,58119],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1760,58121,58122],{"start":210},[1763,58123,58124],{},"法2",[130,58126,58128],{"className":52871,"code":58127,"language":52873,"meta":135,"style":135},"\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",[50,58129,58130,58140,58154,58158,58166,58180,58200,58212,58220,58226,58236,58246,58250,58254,58260,58270,58274,58278,58284,58294,58306,58318,58332,58336,58340,58346,58356,58366,58376,58388,58400,58410,58414,58418,58426,58436,58448,58460,58472,58476,58480,58486,58496,58508,58520,58530,58540,58550,58562,58574,58578,58582,58590,58602,58614,58640,58652,58656,58660,58666,58676,58680,58688,58696,58700,58708,58722,58736,58756,58764,58778,58790,58798,58816,58828,58840,58852,58864,58876,58888,58900,58908,58916,58924,58932,58943,58959,58975,58991,59007,59023,59039,59055,59071,59075,59080,59098,59116,59126,59131,59136,59147,59153,59168,59177,59181,59186,59195,59200,59209,59214,59219,59224,59247,59277,59281,59289,59293,59301,59309,59313],{"__ignoreMap":135},[139,58131,58132,58134,58136,58138],{"class":141,"line":142},[139,58133,53535],{"class":145},[139,58135,53539],{"class":53538},[139,58137,53542],{"class":781},[139,58139,53545],{"class":145},[139,58141,58142,58144,58146,58148,58150,58152],{"class":141,"line":210},[139,58143,796],{"class":145},[139,58145,52873],{"class":53538},[139,58147,53554],{"class":781},[139,58149,150],{"class":145},[139,58151,53559],{"class":160},[139,58153,53545],{"class":145},[139,58155,58156],{"class":141,"line":254},[139,58157,843],{"emptyLinePlaceholder":842},[139,58159,58160,58162,58164],{"class":141,"line":262},[139,58161,796],{"class":145},[139,58163,53572],{"class":53538},[139,58165,53545],{"class":145},[139,58167,58168,58170,58172,58174,58176,58178],{"class":141,"line":313},[139,58169,54380],{"class":145},[139,58171,53582],{"class":53538},[139,58173,53585],{"class":781},[139,58175,150],{"class":145},[139,58177,53590],{"class":160},[139,58179,53545],{"class":145},[139,58181,58182,58184,58186,58188,58190,58192,58194,58196,58198],{"class":141,"line":462},[139,58183,54380],{"class":145},[139,58185,53582],{"class":53538},[139,58187,17189],{"class":781},[139,58189,150],{"class":145},[139,58191,53629],{"class":160},[139,58193,53609],{"class":781},[139,58195,150],{"class":145},[139,58197,53636],{"class":160},[139,58199,53545],{"class":145},[139,58201,58202,58204,58206,58208,58210],{"class":141,"line":474},[139,58203,54380],{"class":145},[139,58205,53645],{"class":53538},[139,58207,53648],{"class":145},[139,58209,53645],{"class":53538},[139,58211,53545],{"class":145},[139,58213,58214,58216,58218],{"class":141,"line":484},[139,58215,54380],{"class":145},[139,58217,2348],{"class":53538},[139,58219,53545],{"class":145},[139,58221,58222,58224],{"class":141,"line":989},[139,58223,8677],{"class":53538},[139,58225,17840],{"class":145},[139,58227,58228,58230,58232,58234],{"class":141,"line":994},[139,58229,56929],{"class":153},[139,58231,2265],{"class":145},[139,58233,2634],{"class":153},[139,58235,3591],{"class":145},[139,58237,58238,58240,58242,58244],{"class":141,"line":999},[139,58239,56940],{"class":153},[139,58241,2265],{"class":145},[139,58243,2634],{"class":153},[139,58245,3591],{"class":145},[139,58247,58248],{"class":141,"line":1006},[139,58249,4472],{"class":145},[139,58251,58252],{"class":141,"line":1027},[139,58253,843],{"emptyLinePlaceholder":842},[139,58255,58256,58258],{"class":141,"line":1040},[139,58257,56959],{"class":53538},[139,58259,17840],{"class":145},[139,58261,58262,58264,58266,58268],{"class":141,"line":2160},[139,58263,56966],{"class":153},[139,58265,2265],{"class":145},[139,58267,56971],{"class":153},[139,58269,3591],{"class":145},[139,58271,58272],{"class":141,"line":2188},[139,58273,4472],{"class":145},[139,58275,58276],{"class":141,"line":3944},[139,58277,843],{"emptyLinePlaceholder":842},[139,58279,58280,58282],{"class":141,"line":3963},[139,58281,56986],{"class":781},[139,58283,17840],{"class":145},[139,58285,58286,58288,58290,58292],{"class":141,"line":3968},[139,58287,56993],{"class":153},[139,58289,2265],{"class":145},[139,58291,56998],{"class":153},[139,58293,3591],{"class":145},[139,58295,58296,58298,58300,58302,58304],{"class":141,"line":3982},[139,58297,57005],{"class":153},[139,58299,2265],{"class":145},[139,58301,57010],{"class":153},[139,58303,53729],{"class":149},[139,58305,3591],{"class":145},[139,58307,58308,58310,58312,58314,58316],{"class":141,"line":3987},[139,58309,57019],{"class":153},[139,58311,2265],{"class":145},[139,58313,3836],{"class":153},[139,58315,53729],{"class":149},[139,58317,3591],{"class":145},[139,58319,58320,58322,58324,58326,58328,58330],{"class":141,"line":4014},[139,58321,56940],{"class":153},[139,58323,2265],{"class":145},[139,58325,1017],{"class":153},[139,58327,53729],{"class":149},[139,58329,53793],{"class":153},[139,58331,3591],{"class":145},[139,58333,58334],{"class":141,"line":4019},[139,58335,4472],{"class":145},[139,58337,58338],{"class":141,"line":4036},[139,58339,843],{"emptyLinePlaceholder":842},[139,58341,58342,58344],{"class":141,"line":4041},[139,58343,57054],{"class":781},[139,58345,17840],{"class":145},[139,58347,58348,58350,58352,58354],{"class":141,"line":4046},[139,58349,56993],{"class":153},[139,58351,2265],{"class":145},[139,58353,57065],{"class":153},[139,58355,3591],{"class":145},[139,58357,58358,58360,58362,58364],{"class":141,"line":4051},[139,58359,57072],{"class":153},[139,58361,2265],{"class":145},[139,58363,2634],{"class":153},[139,58365,3591],{"class":145},[139,58367,58368,58370,58372,58374],{"class":141,"line":4065},[139,58369,57083],{"class":153},[139,58371,2265],{"class":145},[139,58373,2634],{"class":153},[139,58375,3591],{"class":145},[139,58377,58378,58380,58382,58384,58386],{"class":141,"line":4070},[139,58379,57005],{"class":153},[139,58381,2265],{"class":145},[139,58383,1017],{"class":153},[139,58385,2766],{"class":149},[139,58387,3591],{"class":145},[139,58389,58390,58392,58394,58396,58398],{"class":141,"line":4860},[139,58391,57019],{"class":153},[139,58393,2265],{"class":145},[139,58395,3010],{"class":153},[139,58397,2766],{"class":149},[139,58399,3591],{"class":145},[139,58401,58402,58404,58406,58408],{"class":141,"line":4874},[139,58403,57118],{"class":153},[139,58405,2265],{"class":145},[139,58407,57123],{"class":153},[139,58409,3591],{"class":145},[139,58411,58412],{"class":141,"line":4882},[139,58413,4472],{"class":145},[139,58415,58416],{"class":141,"line":4887},[139,58417,843],{"emptyLinePlaceholder":842},[139,58419,58420,58422,58424],{"class":141,"line":4893},[139,58421,57054],{"class":781},[139,58423,9099],{"class":53538},[139,58425,17840],{"class":145},[139,58427,58428,58430,58432,58434],{"class":141,"line":4899},[139,58429,56993],{"class":153},[139,58431,2265],{"class":145},[139,58433,57065],{"class":153},[139,58435,3591],{"class":145},[139,58437,58438,58440,58442,58444,58446],{"class":141,"line":4904},[139,58439,57156],{"class":153},[139,58441,2265],{"class":145},[139,58443,3335],{"class":153},[139,58445,53729],{"class":149},[139,58447,3591],{"class":145},[139,58449,58450,58452,58454,58456,58458],{"class":141,"line":10222},[139,58451,57072],{"class":153},[139,58453,2265],{"class":145},[139,58455,3135],{"class":153},[139,58457,53729],{"class":149},[139,58459,3591],{"class":145},[139,58461,58462,58464,58466,58468,58470],{"class":141,"line":10246},[139,58463,57181],{"class":153},[139,58465,2265],{"class":145},[139,58467,1481],{"class":153},[139,58469,53729],{"class":149},[139,58471,3591],{"class":145},[139,58473,58474],{"class":141,"line":10251},[139,58475,4472],{"class":145},[139,58477,58478],{"class":141,"line":10257},[139,58479,843],{"emptyLinePlaceholder":842},[139,58481,58482,58484],{"class":141,"line":10284},[139,58483,57202],{"class":53538},[139,58485,17840],{"class":145},[139,58487,58488,58490,58492,58494],{"class":141,"line":10289},[139,58489,56993],{"class":153},[139,58491,2265],{"class":145},[139,58493,57065],{"class":153},[139,58495,3591],{"class":145},[139,58497,58498,58500,58502,58504,58506],{"class":141,"line":10295},[139,58499,57181],{"class":153},[139,58501,2265],{"class":145},[139,58503,3216],{"class":153},[139,58505,53729],{"class":149},[139,58507,3591],{"class":145},[139,58509,58510,58512,58514,58516,58518],{"class":141,"line":10307},[139,58511,57072],{"class":153},[139,58513,2265],{"class":145},[139,58515,3135],{"class":153},[139,58517,53729],{"class":149},[139,58519,3591],{"class":145},[139,58521,58522,58524,58526,58528],{"class":141,"line":10319},[139,58523,57243],{"class":153},[139,58525,2265],{"class":145},[139,58527,53714],{"class":153},[139,58529,3591],{"class":145},[139,58531,58532,58534,58536,58538],{"class":141,"line":10331},[139,58533,57254],{"class":153},[139,58535,2265],{"class":145},[139,58537,53905],{"class":153},[139,58539,3591],{"class":145},[139,58541,58542,58544,58546,58548],{"class":141,"line":11990},[139,58543,56993],{"class":153},[139,58545,2265],{"class":145},[139,58547,57065],{"class":153},[139,58549,3591],{"class":145},[139,58551,58552,58554,58556,58558,58560],{"class":141,"line":12015},[139,58553,57005],{"class":153},[139,58555,2265],{"class":145},[139,58557,6272],{"class":153},[139,58559,53729],{"class":149},[139,58561,3591],{"class":145},[139,58563,58564,58566,58568,58570,58572],{"class":141,"line":12038},[139,58565,57019],{"class":153},[139,58567,2265],{"class":145},[139,58569,3135],{"class":153},[139,58571,53729],{"class":149},[139,58573,3591],{"class":145},[139,58575,58576],{"class":141,"line":12062},[139,58577,4472],{"class":145},[139,58579,58580],{"class":141,"line":12067},[139,58581,843],{"emptyLinePlaceholder":842},[139,58583,58584,58586,58588],{"class":141,"line":12072},[139,58585,57202],{"class":53538},[139,58587,57309],{"class":53538},[139,58589,17840],{"class":145},[139,58591,58592,58594,58596,58598,58600],{"class":141,"line":12077},[139,58593,57005],{"class":153},[139,58595,2265],{"class":145},[139,58597,3135],{"class":153},[139,58599,53729],{"class":149},[139,58601,3591],{"class":145},[139,58603,58604,58606,58608,58610,58612],{"class":141,"line":12086},[139,58605,57019],{"class":153},[139,58607,2265],{"class":145},[139,58609,3135],{"class":153},[139,58611,53729],{"class":149},[139,58613,3591],{"class":145},[139,58615,58616,58618,58620,58622,58624,58626,58628,58630,58632,58634,58636,58638],{"class":141,"line":12091},[139,58617,57118],{"class":153},[139,58619,2265],{"class":145},[139,58621,57344],{"class":153},[139,58623,157],{"class":145},[139,58625,2634],{"class":153},[139,58627,413],{"class":145},[139,58629,2634],{"class":153},[139,58631,413],{"class":145},[139,58633,2634],{"class":153},[139,58635,413],{"class":145},[139,58637,57361],{"class":153},[139,58639,5002],{"class":145},[139,58641,58642,58644,58646,58648,58650],{"class":141,"line":12097},[139,58643,57368],{"class":153},[139,58645,2265],{"class":145},[139,58647,536],{"class":153},[139,58649,53729],{"class":149},[139,58651,3591],{"class":145},[139,58653,58654],{"class":141,"line":12118},[139,58655,4472],{"class":145},[139,58657,58658],{"class":141,"line":12124},[139,58659,843],{"emptyLinePlaceholder":842},[139,58661,58662,58664],{"class":141,"line":12138},[139,58663,57389],{"class":781},[139,58665,17840],{"class":145},[139,58667,58668,58670,58672,58674],{"class":141,"line":12144},[139,58669,57118],{"class":153},[139,58671,2265],{"class":145},[139,58673,57400],{"class":153},[139,58675,3591],{"class":145},[139,58677,58678],{"class":141,"line":12171},[139,58679,4472],{"class":145},[139,58681,58682,58684,58686],{"class":141,"line":12180},[139,58683,54652],{"class":145},[139,58685,2348],{"class":53538},[139,58687,53545],{"class":145},[139,58689,58690,58692,58694],{"class":141,"line":12186},[139,58691,54022],{"class":145},[139,58693,53572],{"class":53538},[139,58695,53545],{"class":145},[139,58697,58698],{"class":141,"line":12194},[139,58699,843],{"emptyLinePlaceholder":842},[139,58701,58702,58704,58706],{"class":141,"line":12199},[139,58703,796],{"class":145},[139,58705,54037],{"class":53538},[139,58707,53545],{"class":145},[139,58709,58710,58712,58714,58716,58718,58720],{"class":141,"line":18871},[139,58711,54380],{"class":145},[139,58713,53848],{"class":53538},[139,58715,55721],{"class":781},[139,58717,150],{"class":145},[139,58719,55726],{"class":160},[139,58721,53545],{"class":145},[139,58723,58724,58726,58728,58730,58732,58734],{"class":141,"line":18877},[139,58725,53579],{"class":145},[139,58727,53848],{"class":53538},[139,58729,55721],{"class":781},[139,58731,150],{"class":145},[139,58733,57461],{"class":160},[139,58735,53545],{"class":145},[139,58737,58738,58740,58742,58744,58746,58748,58750,58752,58754],{"class":141,"line":18900},[139,58739,57468],{"class":145},[139,58741,3760],{"class":53538},[139,58743,57473],{"class":781},[139,58745,150],{"class":145},[139,58747,57478],{"class":160},[139,58749,57481],{"class":781},[139,58751,150],{"class":145},[139,58753,9926],{"class":160},[139,58755,53545],{"class":145},[139,58757,58758,58760,58762],{"class":141,"line":18906},[139,58759,54013],{"class":145},[139,58761,53848],{"class":53538},[139,58763,53545],{"class":145},[139,58765,58766,58768,58770,58772,58774,58776],{"class":141,"line":18929},[139,58767,53579],{"class":145},[139,58769,53848],{"class":53538},[139,58771,55721],{"class":781},[139,58773,150],{"class":145},[139,58775,57508],{"class":160},[139,58777,53545],{"class":145},[139,58779,58780,58782,58784,58786,58788],{"class":141,"line":18943},[139,58781,57468],{"class":145},[139,58783,19],{"class":53538},[139,58785,57519],{"class":145},[139,58787,19],{"class":53538},[139,58789,53545],{"class":145},[139,58791,58792,58794,58796],{"class":141,"line":18963},[139,58793,57468],{"class":145},[139,58795,3437],{"class":53538},[139,58797,53545],{"class":145},[139,58799,58800,58802,58804,58806,58808,58810,58812,58814],{"class":141,"line":18969},[139,58801,57536],{"class":145},[139,58803,1763],{"class":53538},[139,58805,55721],{"class":781},[139,58807,150],{"class":145},[139,58809,57545],{"class":160},[139,58811,57548],{"class":145},[139,58813,1763],{"class":53538},[139,58815,53545],{"class":145},[139,58817,58818,58820,58822,58824,58826],{"class":141,"line":18980},[139,58819,57536],{"class":145},[139,58821,1763],{"class":53538},[139,58823,57548],{"class":145},[139,58825,1763],{"class":53538},[139,58827,53545],{"class":145},[139,58829,58830,58832,58834,58836,58838],{"class":141,"line":19003},[139,58831,57536],{"class":145},[139,58833,1763],{"class":53538},[139,58835,57548],{"class":145},[139,58837,1763],{"class":53538},[139,58839,53545],{"class":145},[139,58841,58842,58844,58846,58848,58850],{"class":141,"line":19025},[139,58843,57536],{"class":145},[139,58845,1763],{"class":53538},[139,58847,57548],{"class":145},[139,58849,1763],{"class":53538},[139,58851,53545],{"class":145},[139,58853,58854,58856,58858,58860,58862],{"class":141,"line":19030},[139,58855,57536],{"class":145},[139,58857,1763],{"class":53538},[139,58859,57548],{"class":145},[139,58861,1763],{"class":53538},[139,58863,53545],{"class":145},[139,58865,58866,58868,58870,58872,58874],{"class":141,"line":19036},[139,58867,57536],{"class":145},[139,58869,1763],{"class":53538},[139,58871,57548],{"class":145},[139,58873,1763],{"class":53538},[139,58875,53545],{"class":145},[139,58877,58878,58880,58882,58884,58886],{"class":141,"line":19050},[139,58879,57536],{"class":145},[139,58881,1763],{"class":53538},[139,58883,57548],{"class":145},[139,58885,1763],{"class":53538},[139,58887,53545],{"class":145},[139,58889,58890,58892,58894,58896,58898],{"class":141,"line":19063},[139,58891,57536],{"class":145},[139,58893,1763],{"class":53538},[139,58895,57548],{"class":145},[139,58897,1763],{"class":53538},[139,58899,53545],{"class":145},[139,58901,58902,58904,58906],{"class":141,"line":19068},[139,58903,57641],{"class":145},[139,58905,3437],{"class":53538},[139,58907,53545],{"class":145},[139,58909,58910,58912,58914],{"class":141,"line":19082},[139,58911,54013],{"class":145},[139,58913,53848],{"class":53538},[139,58915,53545],{"class":145},[139,58917,58918,58920,58922],{"class":141,"line":19087},[139,58919,54652],{"class":145},[139,58921,53848],{"class":53538},[139,58923,53545],{"class":145},[139,58925,58926,58928,58930],{"class":141,"line":19093},[139,58927,54380],{"class":145},[139,58929,54050],{"class":53538},[139,58931,53545],{"class":145},[139,58933,58934,58936,58939,58941],{"class":141,"line":19098},[139,58935,13494],{"class":149},[139,58937,58938],{"class":153}," sliderData",[139,58940,15836],{"class":149},[139,58942,57681],{"class":145},[139,58944,58945,58947,58949,58951,58953,58955,58957],{"class":141,"line":19112},[139,58946,57686],{"class":145},[139,58948,57689],{"class":160},[139,58950,57692],{"class":145},[139,58952,57695],{"class":160},[139,58954,57698],{"class":145},[139,58956,57701],{"class":160},[139,58958,57704],{"class":145},[139,58960,58961,58963,58965,58967,58969,58971,58973],{"class":141,"line":19117},[139,58962,57686],{"class":145},[139,58964,57711],{"class":160},[139,58966,57692],{"class":145},[139,58968,57716],{"class":160},[139,58970,57698],{"class":145},[139,58972,57721],{"class":160},[139,58974,57704],{"class":145},[139,58976,58977,58979,58981,58983,58985,58987,58989],{"class":141,"line":19122},[139,58978,57686],{"class":145},[139,58980,57730],{"class":160},[139,58982,57692],{"class":145},[139,58984,57735],{"class":160},[139,58986,57698],{"class":145},[139,58988,57740],{"class":160},[139,58990,57704],{"class":145},[139,58992,58993,58995,58997,58999,59001,59003,59005],{"class":141,"line":19136},[139,58994,57686],{"class":145},[139,58996,57749],{"class":160},[139,58998,57692],{"class":145},[139,59000,57754],{"class":160},[139,59002,57698],{"class":145},[139,59004,57759],{"class":160},[139,59006,57704],{"class":145},[139,59008,59009,59011,59013,59015,59017,59019,59021],{"class":141,"line":19148},[139,59010,57686],{"class":145},[139,59012,57768],{"class":160},[139,59014,57692],{"class":145},[139,59016,57773],{"class":160},[139,59018,57698],{"class":145},[139,59020,57778],{"class":160},[139,59022,57704],{"class":145},[139,59024,59025,59027,59029,59031,59033,59035,59037],{"class":141,"line":19153},[139,59026,57686],{"class":145},[139,59028,57787],{"class":160},[139,59030,57692],{"class":145},[139,59032,57792],{"class":160},[139,59034,57698],{"class":145},[139,59036,57797],{"class":160},[139,59038,57704],{"class":145},[139,59040,59041,59043,59045,59047,59049,59051,59053],{"class":141,"line":19166},[139,59042,57686],{"class":145},[139,59044,57806],{"class":160},[139,59046,57692],{"class":145},[139,59048,57811],{"class":160},[139,59050,57698],{"class":145},[139,59052,57816],{"class":160},[139,59054,57704],{"class":145},[139,59056,59057,59059,59061,59063,59065,59067,59069],{"class":141,"line":19171},[139,59058,57686],{"class":145},[139,59060,57825],{"class":160},[139,59062,57692],{"class":145},[139,59064,57830],{"class":160},[139,59066,57698],{"class":145},[139,59068,57835],{"class":160},[139,59070,57838],{"class":145},[139,59072,59073],{"class":141,"line":19176},[139,59074,55344],{"class":145},[139,59076,59077],{"class":141,"line":19181},[139,59078,59079],{"class":2512},"    \u002F\u002F 1.获取元素\n",[139,59081,59082,59084,59086,59088,59090,59092,59094,59096],{"class":141,"line":19194},[139,59083,13494],{"class":149},[139,59085,57849],{"class":153},[139,59087,15836],{"class":149},[139,59089,56630],{"class":145},[139,59091,56633],{"class":781},[139,59093,157],{"class":145},[139,59095,57860],{"class":160},[139,59097,164],{"class":145},[139,59099,59100,59102,59104,59106,59108,59110,59112,59114],{"class":141,"line":19199},[139,59101,13494],{"class":149},[139,59103,9099],{"class":153},[139,59105,15836],{"class":149},[139,59107,56630],{"class":145},[139,59109,56633],{"class":781},[139,59111,157],{"class":145},[139,59113,57879],{"class":160},[139,59115,164],{"class":145},[139,59117,59118,59120,59122,59124],{"class":141,"line":34880},[139,59119,54455],{"class":149},[139,59121,11712],{"class":145},[139,59123,150],{"class":149},[139,59125,49571],{"class":153},[139,59127,59128],{"class":141,"line":34886},[139,59129,59130],{"class":2512},"    \u002F\u002F 2.开启定时器\n",[139,59132,59133],{"class":141,"line":34892},[139,59134,59135],{"class":2512},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[139,59137,59138,59141,59143,59145],{"class":141,"line":34898},[139,59139,59140],{"class":781},"    setInterval",[139,59142,157],{"class":145},[139,59144,56683],{"class":149},[139,59146,56686],{"class":145},[139,59148,59149,59151],{"class":141,"line":34904},[139,59150,56691],{"class":145},[139,59152,4985],{"class":149},[139,59154,59155,59157,59159,59161,59164,59166],{"class":141,"line":34915},[139,59156,56714],{"class":149},[139,59158,56717],{"class":145},[139,59160,3998],{"class":149},[139,59162,59163],{"class":145}," sliderData.",[139,59165,54204],{"class":153},[139,59167,14714],{"class":145},[139,59169,59170,59173,59175],{"class":141,"line":34921},[139,59171,59172],{"class":145},"        i ",[139,59174,150],{"class":149},[139,59176,49571],{"class":153},[139,59178,59179],{"class":141,"line":34941},[139,59180,54633],{"class":145},[139,59182,59183],{"class":141,"line":34947},[139,59184,59185],{"class":2512},"      \u002F\u002F 更换图片路径\n",[139,59187,59188,59190,59192],{"class":141,"line":34958},[139,59189,57955],{"class":145},[139,59191,150],{"class":149},[139,59193,59194],{"class":145}," sliderData[i].url\n",[139,59196,59197],{"class":141,"line":34964},[139,59198,59199],{"class":2512},"      \u002F\u002F 把文字写到p里面\n",[139,59201,59202,59204,59206],{"class":141,"line":34970},[139,59203,57965],{"class":145},[139,59205,150],{"class":149},[139,59207,59208],{"class":145}," sliderData[i].title\n",[139,59210,59211],{"class":141,"line":34976},[139,59212,59213],{"class":2512},"      \u002F\u002F 小圆点\n",[139,59215,59216],{"class":141,"line":34982},[139,59217,59218],{"class":2512},"      \u002F\u002F 先删除以前的active\n",[139,59220,59221],{"class":141,"line":34988},[139,59222,59223],{"class":2512},"      \u002F\u002F 只让当前li添加active\n",[139,59225,59226,59228,59230,59232,59235,59238,59241,59243,59245],{"class":141,"line":34994},[139,59227,58005],{"class":145},[139,59229,56633],{"class":781},[139,59231,157],{"class":145},[139,59233,59234],{"class":160},"'.slider-footer .activate'",[139,59236,59237],{"class":145},").classList.",[139,59239,59240],{"class":781},"remove",[139,59242,157],{"class":145},[139,59244,58023],{"class":160},[139,59246,164],{"class":145},[139,59248,59249,59251,59253,59255,59258,59260,59262,59264,59267,59269,59271,59273,59275],{"class":141,"line":35000},[139,59250,58005],{"class":145},[139,59252,56633],{"class":781},[139,59254,157],{"class":145},[139,59256,59257],{"class":160},"`.slider-footer ul li:nth-child(${",[139,59259,2879],{"class":145},[139,59261,47805],{"class":149},[139,59263,27381],{"class":153},[139,59265,59266],{"class":160},"})`",[139,59268,59237],{"class":145},[139,59270,7608],{"class":781},[139,59272,157],{"class":145},[139,59274,58023],{"class":160},[139,59276,164],{"class":145},[139,59278,59279],{"class":141,"line":35020},[139,59280,843],{"emptyLinePlaceholder":842},[139,59282,59283,59285,59287],{"class":141,"line":35026},[139,59284,56769],{"class":145},[139,59286,8684],{"class":153},[139,59288,164],{"class":145},[139,59290,59291],{"class":141,"line":35042},[139,59292,843],{"emptyLinePlaceholder":842},[139,59294,59295,59297,59299],{"class":141,"line":35048},[139,59296,54652],{"class":145},[139,59298,54050],{"class":53538},[139,59300,53545],{"class":145},[139,59302,59303,59305,59307],{"class":141,"line":35062},[139,59304,54022],{"class":145},[139,59306,54037],{"class":53538},[139,59308,53545],{"class":145},[139,59310,59311],{"class":141,"line":35068},[139,59312,843],{"emptyLinePlaceholder":842},[139,59314,59315,59317,59319],{"class":141,"line":35083},[139,59316,54022],{"class":145},[139,59318,52873],{"class":53538},[139,59320,53545],{"class":145},[1217,59322,59324],{"id":59323},"_317-重要知识点","3.1.7 重要知识点",[19,59326,59327,59328],{},"浏览器在渲染文本时， ",[1674,59329,59330],{},"没有空格或换行符就没有“断行点”",[19,59332,59333],{},[3760,59334],{"alt":135,"src":59335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59337,59338],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59340,59341],{},[3760,59342],{"alt":135,"src":59343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59345,59346],{},[3760,59347],{"alt":135,"src":59348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59350,59352],{"id":59351},"_32-dom事件基础","3.2 DOM事件基础",[1217,59354,59356],{"id":59355},"_321-事件监听","3.2.1 事件监听",[19,59358,59359],{},[3760,59360],{"alt":135,"src":59361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59363,59364],{},"事件监听有响应的发生",[19,59366,59367],{},[3760,59368],{"alt":135,"src":59369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59371,59372],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59374,59375],{},"对于有名函数,要执行的函数名后边不要加()",[1217,59377,59379],{"id":59378},"_322-随机点名案例","3.2.2 随机点名案例",[130,59381,59383],{"className":52871,"code":59382,"language":52873,"meta":135,"style":135},"\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",[50,59384,59385,59395,59409,59413,59421,59435,59455,59467,59475,59481,59491,59501,59505,59509,59516,59527,59531,59535,59541,59553,59567,59577,59589,59602,59606,59610,59617,59621,59634,59646,59658,59662,59666,59670,59677,59687,59691,59695,59704,59716,59728,59743,59747,59755,59763,59767,59775,59788,59802,59815,59835,59843,59858,59878,59898,59906,59910,59918,59923,59959,59979,59984,60003,60008,60019,60024,60034,60039,60058,60073,60078,60104,60114,60123,60128,60144,60149,60154,60159,60174,60178,60182,60187,60206,60223,60231,60236,60251,60255,60259,60267,60275,60279],{"__ignoreMap":135},[139,59386,59387,59389,59391,59393],{"class":141,"line":142},[139,59388,53535],{"class":145},[139,59390,53539],{"class":53538},[139,59392,53542],{"class":781},[139,59394,53545],{"class":145},[139,59396,59397,59399,59401,59403,59405,59407],{"class":141,"line":210},[139,59398,796],{"class":145},[139,59400,52873],{"class":53538},[139,59402,53554],{"class":781},[139,59404,150],{"class":145},[139,59406,53559],{"class":160},[139,59408,53545],{"class":145},[139,59410,59411],{"class":141,"line":254},[139,59412,843],{"emptyLinePlaceholder":842},[139,59414,59415,59417,59419],{"class":141,"line":262},[139,59416,796],{"class":145},[139,59418,53572],{"class":53538},[139,59420,53545],{"class":145},[139,59422,59423,59425,59427,59429,59431,59433],{"class":141,"line":313},[139,59424,54380],{"class":145},[139,59426,53582],{"class":53538},[139,59428,53585],{"class":781},[139,59430,150],{"class":145},[139,59432,53590],{"class":160},[139,59434,53545],{"class":145},[139,59436,59437,59439,59441,59443,59445,59447,59449,59451,59453],{"class":141,"line":462},[139,59438,54380],{"class":145},[139,59440,53582],{"class":53538},[139,59442,17189],{"class":781},[139,59444,150],{"class":145},[139,59446,53629],{"class":160},[139,59448,53609],{"class":781},[139,59450,150],{"class":145},[139,59452,53636],{"class":160},[139,59454,53545],{"class":145},[139,59456,59457,59459,59461,59463,59465],{"class":141,"line":474},[139,59458,54380],{"class":145},[139,59460,53645],{"class":53538},[139,59462,53648],{"class":145},[139,59464,53645],{"class":53538},[139,59466,53545],{"class":145},[139,59468,59469,59471,59473],{"class":141,"line":484},[139,59470,54380],{"class":145},[139,59472,2348],{"class":53538},[139,59474,53545],{"class":145},[139,59476,59477,59479],{"class":141,"line":989},[139,59478,8677],{"class":53538},[139,59480,17840],{"class":145},[139,59482,59483,59485,59487,59489],{"class":141,"line":994},[139,59484,56940],{"class":153},[139,59486,2265],{"class":145},[139,59488,2634],{"class":153},[139,59490,3591],{"class":145},[139,59492,59493,59495,59497,59499],{"class":141,"line":999},[139,59494,56929],{"class":153},[139,59496,2265],{"class":145},[139,59498,2634],{"class":153},[139,59500,3591],{"class":145},[139,59502,59503],{"class":141,"line":1006},[139,59504,4472],{"class":145},[139,59506,59507],{"class":141,"line":1027},[139,59508,843],{"emptyLinePlaceholder":842},[139,59510,59511,59514],{"class":141,"line":1040},[139,59512,59513],{"class":53538},"    h2",[139,59515,17840],{"class":145},[139,59517,59518,59521,59523,59525],{"class":141,"line":2160},[139,59519,59520],{"class":153},"      text-align",[139,59522,2265],{"class":145},[139,59524,53829],{"class":153},[139,59526,3591],{"class":145},[139,59528,59529],{"class":141,"line":2188},[139,59530,4472],{"class":145},[139,59532,59533],{"class":141,"line":3944},[139,59534,843],{"emptyLinePlaceholder":842},[139,59536,59537,59539],{"class":141,"line":3963},[139,59538,56986],{"class":781},[139,59540,17840],{"class":145},[139,59542,59543,59545,59547,59549,59551],{"class":141,"line":3968},[139,59544,57005],{"class":153},[139,59546,2265],{"class":145},[139,59548,3836],{"class":153},[139,59550,53729],{"class":149},[139,59552,3591],{"class":145},[139,59554,59555,59557,59559,59561,59563,59565],{"class":141,"line":3982},[139,59556,56940],{"class":153},[139,59558,2265],{"class":145},[139,59560,3091],{"class":153},[139,59562,53729],{"class":149},[139,59564,53793],{"class":153},[139,59566,3591],{"class":145},[139,59568,59569,59571,59573,59575],{"class":141,"line":3987},[139,59570,57243],{"class":153},[139,59572,2265],{"class":145},[139,59574,53714],{"class":153},[139,59576,3591],{"class":145},[139,59578,59579,59581,59583,59585,59587],{"class":141,"line":4014},[139,59580,57156],{"class":153},[139,59582,2265],{"class":145},[139,59584,3260],{"class":153},[139,59586,53729],{"class":149},[139,59588,3591],{"class":145},[139,59590,59591,59594,59596,59598,59600],{"class":141,"line":4019},[139,59592,59593],{"class":153},"      line-height",[139,59595,2265],{"class":145},[139,59597,2839],{"class":153},[139,59599,53729],{"class":149},[139,59601,3591],{"class":145},[139,59603,59604],{"class":141,"line":4036},[139,59605,4472],{"class":145},[139,59607,59608],{"class":141,"line":4041},[139,59609,843],{"emptyLinePlaceholder":842},[139,59611,59612,59615],{"class":141,"line":4046},[139,59613,59614],{"class":781},"    .qs",[139,59616,17840],{"class":145},[139,59618,59619],{"class":141,"line":4051},[139,59620,843],{"emptyLinePlaceholder":842},[139,59622,59623,59625,59627,59630,59632],{"class":141,"line":4065},[139,59624,57005],{"class":153},[139,59626,2265],{"class":145},[139,59628,59629],{"class":153},"450",[139,59631,53729],{"class":149},[139,59633,3591],{"class":145},[139,59635,59636,59638,59640,59642,59644],{"class":141,"line":4070},[139,59637,57019],{"class":153},[139,59639,2265],{"class":145},[139,59641,2839],{"class":153},[139,59643,53729],{"class":149},[139,59645,3591],{"class":145},[139,59647,59648,59651,59653,59656],{"class":141,"line":4860},[139,59649,59650],{"class":153},"      color",[139,59652,2265],{"class":145},[139,59654,59655],{"class":153},"red",[139,59657,3591],{"class":145},[139,59659,59660],{"class":141,"line":4874},[139,59661,843],{"emptyLinePlaceholder":842},[139,59663,59664],{"class":141,"line":4882},[139,59665,4472],{"class":145},[139,59667,59668],{"class":141,"line":4887},[139,59669,843],{"emptyLinePlaceholder":842},[139,59671,59672,59675],{"class":141,"line":4893},[139,59673,59674],{"class":781},"    .btns",[139,59676,17840],{"class":145},[139,59678,59679,59681,59683,59685],{"class":141,"line":4899},[139,59680,59520],{"class":153},[139,59682,2265],{"class":145},[139,59684,53829],{"class":153},[139,59686,3591],{"class":145},[139,59688,59689],{"class":141,"line":4904},[139,59690,4472],{"class":145},[139,59692,59693],{"class":141,"line":10222},[139,59694,843],{"emptyLinePlaceholder":842},[139,59696,59697,59699,59702],{"class":141,"line":10246},[139,59698,59674],{"class":781},[139,59700,59701],{"class":53538}," button",[139,59703,17840],{"class":145},[139,59705,59706,59708,59710,59712,59714],{"class":141,"line":10251},[139,59707,57005],{"class":153},[139,59709,2265],{"class":145},[139,59711,3252],{"class":153},[139,59713,53729],{"class":149},[139,59715,3591],{"class":145},[139,59717,59718,59720,59722,59724,59726],{"class":141,"line":10257},[139,59719,57019],{"class":153},[139,59721,2265],{"class":145},[139,59723,2714],{"class":153},[139,59725,53729],{"class":149},[139,59727,3591],{"class":145},[139,59729,59730,59732,59734,59736,59739,59741],{"class":141,"line":10284},[139,59731,56940],{"class":153},[139,59733,2265],{"class":145},[139,59735,2634],{"class":153},[139,59737,59738],{"class":153}," 50",[139,59740,53729],{"class":149},[139,59742,3591],{"class":145},[139,59744,59745],{"class":141,"line":10289},[139,59746,4472],{"class":145},[139,59748,59749,59751,59753],{"class":141,"line":10295},[139,59750,54652],{"class":145},[139,59752,2348],{"class":53538},[139,59754,53545],{"class":145},[139,59756,59757,59759,59761],{"class":141,"line":10307},[139,59758,54022],{"class":145},[139,59760,53572],{"class":53538},[139,59762,53545],{"class":145},[139,59764,59765],{"class":141,"line":10319},[139,59766,843],{"emptyLinePlaceholder":842},[139,59768,59769,59771,59773],{"class":141,"line":10331},[139,59770,796],{"class":145},[139,59772,54037],{"class":53538},[139,59774,53545],{"class":145},[139,59776,59777,59779,59781,59784,59786],{"class":141,"line":11990},[139,59778,54380],{"class":145},[139,59780,14],{"class":53538},[139,59782,59783],{"class":145},">随机点名\u003C\u002F",[139,59785,14],{"class":53538},[139,59787,53545],{"class":145},[139,59789,59790,59792,59794,59796,59798,59800],{"class":141,"line":12015},[139,59791,54380],{"class":145},[139,59793,53848],{"class":53538},[139,59795,55721],{"class":781},[139,59797,150],{"class":145},[139,59799,55726],{"class":160},[139,59801,53545],{"class":145},[139,59803,59804,59806,59808,59811,59813],{"class":141,"line":12038},[139,59805,53579],{"class":145},[139,59807,139],{"class":53538},[139,59809,59810],{"class":145},">名字是：\u003C\u002F",[139,59812,139],{"class":53538},[139,59814,53545],{"class":145},[139,59816,59817,59819,59821,59823,59825,59828,59831,59833],{"class":141,"line":12062},[139,59818,53579],{"class":145},[139,59820,53848],{"class":53538},[139,59822,55721],{"class":781},[139,59824,150],{"class":145},[139,59826,59827],{"class":160},"\"qs\"",[139,59829,59830],{"class":145},">这里显示姓名\u003C\u002F",[139,59832,53848],{"class":53538},[139,59834,53545],{"class":145},[139,59836,59837,59839,59841],{"class":141,"line":12067},[139,59838,54652],{"class":145},[139,59840,53848],{"class":53538},[139,59842,53545],{"class":145},[139,59844,59845,59847,59849,59851,59853,59856],{"class":141,"line":12072},[139,59846,54380],{"class":145},[139,59848,53848],{"class":53538},[139,59850,55721],{"class":781},[139,59852,150],{"class":145},[139,59854,59855],{"class":160},"\"btns\"",[139,59857,53545],{"class":145},[139,59859,59860,59862,59864,59866,59868,59871,59874,59876],{"class":141,"line":12077},[139,59861,53579],{"class":145},[139,59863,56121],{"class":53538},[139,59865,55721],{"class":781},[139,59867,150],{"class":145},[139,59869,59870],{"class":160},"\"start\"",[139,59872,59873],{"class":145},">开始\u003C\u002F",[139,59875,56121],{"class":53538},[139,59877,53545],{"class":145},[139,59879,59880,59882,59884,59886,59888,59891,59894,59896],{"class":141,"line":12086},[139,59881,53579],{"class":145},[139,59883,56121],{"class":53538},[139,59885,55721],{"class":781},[139,59887,150],{"class":145},[139,59889,59890],{"class":160},"\"end\"",[139,59892,59893],{"class":145},">结束\u003C\u002F",[139,59895,56121],{"class":53538},[139,59897,53545],{"class":145},[139,59899,59900,59902,59904],{"class":141,"line":12091},[139,59901,54652],{"class":145},[139,59903,53848],{"class":53538},[139,59905,53545],{"class":145},[139,59907,59908],{"class":141,"line":12097},[139,59909,843],{"emptyLinePlaceholder":842},[139,59911,59912,59914,59916],{"class":141,"line":12118},[139,59913,54380],{"class":145},[139,59915,54050],{"class":53538},[139,59917,53545],{"class":145},[139,59919,59920],{"class":141,"line":12124},[139,59921,59922],{"class":2512},"    \u002F\u002F 数据数组\n",[139,59924,59925,59927,59930,59932,59934,59937,59939,59942,59944,59947,59949,59952,59954,59957],{"class":141,"line":12138},[139,59926,13494],{"class":149},[139,59928,59929],{"class":153}," arr",[139,59931,15836],{"class":149},[139,59933,407],{"class":145},[139,59935,59936],{"class":160},"'马超'",[139,59938,413],{"class":145},[139,59940,59941],{"class":160},"'黄忠'",[139,59943,413],{"class":145},[139,59945,59946],{"class":160},"'赵云'",[139,59948,413],{"class":145},[139,59950,59951],{"class":160},"'关羽'",[139,59953,413],{"class":145},[139,59955,59956],{"class":160},"'张飞'",[139,59958,424],{"class":145},[139,59960,59961,59963,59966,59968,59970,59972,59974,59977],{"class":141,"line":12144},[139,59962,13494],{"class":149},[139,59964,59965],{"class":153}," qs",[139,59967,15836],{"class":149},[139,59969,56630],{"class":145},[139,59971,56633],{"class":781},[139,59973,157],{"class":145},[139,59975,59976],{"class":160},"'.qs'",[139,59978,164],{"class":145},[139,59980,59981],{"class":141,"line":12171},[139,59982,59983],{"class":2512},"    \u002F\u002F 1.业务1.开始按钮模块\n",[139,59985,59986,59988,59990,59992,59994,59996,59998,60001],{"class":141,"line":12180},[139,59987,13494],{"class":149},[139,59989,6462],{"class":153},[139,59991,15836],{"class":149},[139,59993,56630],{"class":145},[139,59995,56633],{"class":781},[139,59997,157],{"class":145},[139,59999,60000],{"class":160},"'.start'",[139,60002,164],{"class":145},[139,60004,60005],{"class":141,"line":12186},[139,60006,60007],{"class":2512},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[139,60009,60010,60012,60015,60017],{"class":141,"line":12194},[139,60011,54455],{"class":149},[139,60013,60014],{"class":145}," timerId ",[139,60016,150],{"class":149},[139,60018,49571],{"class":153},[139,60020,60021],{"class":141,"line":12199},[139,60022,60023],{"class":2512},"    \u002F\u002F 随机号要全局变量\n",[139,60025,60026,60028,60030,60032],{"class":141,"line":18871},[139,60027,54455],{"class":149},[139,60029,1268],{"class":145},[139,60031,150],{"class":149},[139,60033,49571],{"class":153},[139,60035,60036],{"class":141,"line":18877},[139,60037,60038],{"class":2512},"    \u002F\u002F 1.1 添加点击事件\n",[139,60040,60041,60044,60047,60049,60052,60054,60056],{"class":141,"line":18900},[139,60042,60043],{"class":145},"    start.",[139,60045,60046],{"class":781},"addEventListener",[139,60048,157],{"class":145},[139,60050,60051],{"class":160},"'click'",[139,60053,413],{"class":145},[139,60055,56683],{"class":149},[139,60057,56686],{"class":145},[139,60059,60060,60063,60065,60067,60069,60071],{"class":141,"line":18906},[139,60061,60062],{"class":145},"      timerId ",[139,60064,150],{"class":149},[139,60066,56678],{"class":781},[139,60068,157],{"class":145},[139,60070,56683],{"class":149},[139,60072,56686],{"class":145},[139,60074,60075],{"class":141,"line":18929},[139,60076,60077],{"class":2512},"        \u002F\u002F 随机数\n",[139,60079,60080,60083,60085,60088,60091,60094,60096,60098,60100,60102],{"class":141,"line":18943},[139,60081,60082],{"class":145},"        random ",[139,60084,150],{"class":149},[139,60086,60087],{"class":781}," parseInt",[139,60089,60090],{"class":145},"(Math.",[139,60092,60093],{"class":781},"random",[139,60095,15322],{"class":145},[139,60097,2892],{"class":149},[139,60099,54201],{"class":145},[139,60101,54204],{"class":153},[139,60103,164],{"class":145},[139,60105,60106,60109,60111],{"class":141,"line":18963},[139,60107,60108],{"class":145},"        qs.innerHTML ",[139,60110,150],{"class":149},[139,60112,60113],{"class":145}," arr[random]\n",[139,60115,60116,60119,60121],{"class":141,"line":18969},[139,60117,60118],{"class":145},"      }, ",[139,60120,2714],{"class":153},[139,60122,164],{"class":145},[139,60124,60125],{"class":141,"line":18980},[139,60126,60127],{"class":2512},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[139,60129,60130,60132,60135,60137,60140,60142],{"class":141,"line":19003},[139,60131,56714],{"class":149},[139,60133,60134],{"class":145}," (arr.",[139,60136,54204],{"class":153},[139,60138,60139],{"class":149}," ===",[139,60141,27381],{"class":153},[139,60143,14714],{"class":145},[139,60145,60146],{"class":141,"line":19025},[139,60147,60148],{"class":2512},"        \u002F\u002F start.disabled = true\n",[139,60150,60151],{"class":141,"line":19030},[139,60152,60153],{"class":2512},"        \u002F\u002F end.disabled = true\n",[139,60155,60156],{"class":141,"line":19036},[139,60157,60158],{"class":2512},"        \u002F\u002F 可以合起来写\n",[139,60160,60161,60164,60166,60169,60171],{"class":141,"line":19050},[139,60162,60163],{"class":145},"        start.disabled ",[139,60165,150],{"class":149},[139,60167,60168],{"class":145}," end.disabled ",[139,60170,150],{"class":149},[139,60172,60173],{"class":153}," true\n",[139,60175,60176],{"class":141,"line":19063},[139,60177,54633],{"class":145},[139,60179,60180],{"class":141,"line":19068},[139,60181,35706],{"class":145},[139,60183,60184],{"class":141,"line":19082},[139,60185,60186],{"class":2512},"    \u002F\u002F 1.2 关闭按钮模块\n",[139,60188,60189,60191,60193,60195,60197,60199,60201,60204],{"class":141,"line":19087},[139,60190,13494],{"class":149},[139,60192,6478],{"class":153},[139,60194,15836],{"class":149},[139,60196,56630],{"class":145},[139,60198,56633],{"class":781},[139,60200,157],{"class":145},[139,60202,60203],{"class":160},"'.end'",[139,60205,164],{"class":145},[139,60207,60208,60211,60213,60215,60217,60219,60221],{"class":141,"line":19093},[139,60209,60210],{"class":145},"    end.",[139,60212,60046],{"class":781},[139,60214,157],{"class":145},[139,60216,60051],{"class":160},[139,60218,413],{"class":145},[139,60220,56683],{"class":149},[139,60222,56686],{"class":145},[139,60224,60225,60228],{"class":141,"line":19098},[139,60226,60227],{"class":781},"      clearInterval",[139,60229,60230],{"class":145},"(timerId)\n",[139,60232,60233],{"class":141,"line":19112},[139,60234,60235],{"class":2512},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[139,60237,60238,60241,60244,60247,60249],{"class":141,"line":19117},[139,60239,60240],{"class":145},"      arr.",[139,60242,60243],{"class":781},"splice",[139,60245,60246],{"class":145},"(random, ",[139,60248,410],{"class":153},[139,60250,164],{"class":145},[139,60252,60253],{"class":141,"line":19122},[139,60254,35706],{"class":145},[139,60256,60257],{"class":141,"line":19136},[139,60258,843],{"emptyLinePlaceholder":842},[139,60260,60261,60263,60265],{"class":141,"line":19148},[139,60262,54652],{"class":145},[139,60264,54050],{"class":53538},[139,60266,53545],{"class":145},[139,60268,60269,60271,60273],{"class":141,"line":19153},[139,60270,54022],{"class":145},[139,60272,54037],{"class":53538},[139,60274,53545],{"class":145},[139,60276,60277],{"class":141,"line":19166},[139,60278,843],{"emptyLinePlaceholder":842},[139,60280,60281,60283,60285],{"class":141,"line":19171},[139,60282,54022],{"class":145},[139,60284,52873],{"class":53538},[139,60286,53545],{"class":145},[19,60288,60289],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1217,60291,60293],{"id":60292},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[130,60295,60297],{"className":52871,"code":60296,"language":52873,"meta":135,"style":135},"\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",[50,60298,60299,60309,60323,60327,60335,60349,60369,60381,60389,60393,60401,60413,60421,60440,60457,60473,60483,60487,60495,60503,60507],{"__ignoreMap":135},[139,60300,60301,60303,60305,60307],{"class":141,"line":142},[139,60302,53535],{"class":145},[139,60304,53539],{"class":53538},[139,60306,53542],{"class":781},[139,60308,53545],{"class":145},[139,60310,60311,60313,60315,60317,60319,60321],{"class":141,"line":210},[139,60312,796],{"class":145},[139,60314,52873],{"class":53538},[139,60316,53554],{"class":781},[139,60318,150],{"class":145},[139,60320,53559],{"class":160},[139,60322,53545],{"class":145},[139,60324,60325],{"class":141,"line":254},[139,60326,843],{"emptyLinePlaceholder":842},[139,60328,60329,60331,60333],{"class":141,"line":262},[139,60330,796],{"class":145},[139,60332,53572],{"class":53538},[139,60334,53545],{"class":145},[139,60336,60337,60339,60341,60343,60345,60347],{"class":141,"line":313},[139,60338,54380],{"class":145},[139,60340,53582],{"class":53538},[139,60342,53585],{"class":781},[139,60344,150],{"class":145},[139,60346,53590],{"class":160},[139,60348,53545],{"class":145},[139,60350,60351,60353,60355,60357,60359,60361,60363,60365,60367],{"class":141,"line":462},[139,60352,54380],{"class":145},[139,60354,53582],{"class":53538},[139,60356,17189],{"class":781},[139,60358,150],{"class":145},[139,60360,53629],{"class":160},[139,60362,53609],{"class":781},[139,60364,150],{"class":145},[139,60366,53636],{"class":160},[139,60368,53545],{"class":145},[139,60370,60371,60373,60375,60377,60379],{"class":141,"line":474},[139,60372,54380],{"class":145},[139,60374,53645],{"class":53538},[139,60376,53648],{"class":145},[139,60378,53645],{"class":53538},[139,60380,53545],{"class":145},[139,60382,60383,60385,60387],{"class":141,"line":484},[139,60384,54022],{"class":145},[139,60386,53572],{"class":53538},[139,60388,53545],{"class":145},[139,60390,60391],{"class":141,"line":989},[139,60392,843],{"emptyLinePlaceholder":842},[139,60394,60395,60397,60399],{"class":141,"line":994},[139,60396,796],{"class":145},[139,60398,54037],{"class":53538},[139,60400,53545],{"class":145},[139,60402,60403,60405,60407,60409,60411],{"class":141,"line":999},[139,60404,54380],{"class":145},[139,60406,56121],{"class":53538},[139,60408,56127],{"class":145},[139,60410,56121],{"class":53538},[139,60412,53545],{"class":145},[139,60414,60415,60417,60419],{"class":141,"line":1006},[139,60416,54380],{"class":145},[139,60418,54050],{"class":53538},[139,60420,53545],{"class":145},[139,60422,60423,60425,60427,60429,60431,60433,60435,60438],{"class":141,"line":1027},[139,60424,13494],{"class":149},[139,60426,56625],{"class":153},[139,60428,15836],{"class":149},[139,60430,56630],{"class":145},[139,60432,56633],{"class":781},[139,60434,157],{"class":145},[139,60436,60437],{"class":160},"'button'",[139,60439,164],{"class":145},[139,60441,60442,60445,60447,60449,60451,60453,60455],{"class":141,"line":1040},[139,60443,60444],{"class":145},"    btn.",[139,60446,60046],{"class":781},[139,60448,157],{"class":145},[139,60450,60051],{"class":160},[139,60452,413],{"class":145},[139,60454,56683],{"class":149},[139,60456,56686],{"class":145},[139,60458,60459,60462,60464,60466,60469,60471],{"class":141,"line":2160},[139,60460,60461],{"class":149},"      const",[139,60463,4525],{"class":153},[139,60465,15836],{"class":149},[139,60467,60468],{"class":145}," Math.",[139,60470,60093],{"class":781},[139,60472,4262],{"class":145},[139,60474,60475,60478,60481],{"class":141,"line":2188},[139,60476,60477],{"class":145},"      console.",[139,60479,60480],{"class":781},"log",[139,60482,2470],{"class":145},[139,60484,60485],{"class":141,"line":3944},[139,60486,35706],{"class":145},[139,60488,60489,60491,60493],{"class":141,"line":3963},[139,60490,54652],{"class":145},[139,60492,54050],{"class":53538},[139,60494,53545],{"class":145},[139,60496,60497,60499,60501],{"class":141,"line":3968},[139,60498,54022],{"class":145},[139,60500,54037],{"class":53538},[139,60502,53545],{"class":145},[139,60504,60505],{"class":141,"line":3982},[139,60506,843],{"emptyLinePlaceholder":842},[139,60508,60509,60511,60513],{"class":141,"line":3987},[139,60510,54022],{"class":145},[139,60512,52873],{"class":53538},[139,60514,53545],{"class":145},[19,60516,60517],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60519,60520],{},"常量不可以重新赋值",[19,60522,60523],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[130,60525,60527],{"className":52871,"code":60526,"language":52873,"meta":135,"style":135},"\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",[50,60528,60529,60539,60553,60557,60565,60579,60599,60611,60619,60623,60631,60643,60651,60662,60680,60696,60710,60718,60722,60730,60738,60742],{"__ignoreMap":135},[139,60530,60531,60533,60535,60537],{"class":141,"line":142},[139,60532,53535],{"class":145},[139,60534,53539],{"class":53538},[139,60536,53542],{"class":781},[139,60538,53545],{"class":145},[139,60540,60541,60543,60545,60547,60549,60551],{"class":141,"line":210},[139,60542,796],{"class":145},[139,60544,52873],{"class":53538},[139,60546,53554],{"class":781},[139,60548,150],{"class":145},[139,60550,53559],{"class":160},[139,60552,53545],{"class":145},[139,60554,60555],{"class":141,"line":254},[139,60556,843],{"emptyLinePlaceholder":842},[139,60558,60559,60561,60563],{"class":141,"line":262},[139,60560,796],{"class":145},[139,60562,53572],{"class":53538},[139,60564,53545],{"class":145},[139,60566,60567,60569,60571,60573,60575,60577],{"class":141,"line":313},[139,60568,54380],{"class":145},[139,60570,53582],{"class":53538},[139,60572,53585],{"class":781},[139,60574,150],{"class":145},[139,60576,53590],{"class":160},[139,60578,53545],{"class":145},[139,60580,60581,60583,60585,60587,60589,60591,60593,60595,60597],{"class":141,"line":462},[139,60582,54380],{"class":145},[139,60584,53582],{"class":53538},[139,60586,17189],{"class":781},[139,60588,150],{"class":145},[139,60590,53629],{"class":160},[139,60592,53609],{"class":781},[139,60594,150],{"class":145},[139,60596,53636],{"class":160},[139,60598,53545],{"class":145},[139,60600,60601,60603,60605,60607,60609],{"class":141,"line":474},[139,60602,54380],{"class":145},[139,60604,53645],{"class":53538},[139,60606,53648],{"class":145},[139,60608,53645],{"class":53538},[139,60610,53545],{"class":145},[139,60612,60613,60615,60617],{"class":141,"line":484},[139,60614,54022],{"class":145},[139,60616,53572],{"class":53538},[139,60618,53545],{"class":145},[139,60620,60621],{"class":141,"line":989},[139,60622,843],{"emptyLinePlaceholder":842},[139,60624,60625,60627,60629],{"class":141,"line":994},[139,60626,796],{"class":145},[139,60628,54037],{"class":53538},[139,60630,53545],{"class":145},[139,60632,60633,60635,60637,60639,60641],{"class":141,"line":999},[139,60634,54380],{"class":145},[139,60636,56121],{"class":53538},[139,60638,56127],{"class":145},[139,60640,56121],{"class":53538},[139,60642,53545],{"class":145},[139,60644,60645,60647,60649],{"class":141,"line":1006},[139,60646,54380],{"class":145},[139,60648,54050],{"class":53538},[139,60650,53545],{"class":145},[139,60652,60653,60655,60657,60659],{"class":141,"line":1027},[139,60654,13494],{"class":149},[139,60656,4525],{"class":153},[139,60658,15836],{"class":149},[139,60660,60661],{"class":153}," 10\n",[139,60663,60664,60666,60668,60670,60672,60674,60676,60678],{"class":141,"line":1040},[139,60665,13494],{"class":149},[139,60667,56625],{"class":153},[139,60669,15836],{"class":149},[139,60671,56630],{"class":145},[139,60673,56633],{"class":781},[139,60675,157],{"class":145},[139,60677,60437],{"class":160},[139,60679,164],{"class":145},[139,60681,60682,60684,60686,60688,60690,60692,60694],{"class":141,"line":2160},[139,60683,60444],{"class":145},[139,60685,60046],{"class":781},[139,60687,157],{"class":145},[139,60689,60051],{"class":160},[139,60691,413],{"class":145},[139,60693,56683],{"class":149},[139,60695,56686],{"class":145},[139,60697,60698,60700,60702,60704,60706,60708],{"class":141,"line":2188},[139,60699,60461],{"class":149},[139,60701,4525],{"class":153},[139,60703,15836],{"class":149},[139,60705,60468],{"class":145},[139,60707,60093],{"class":781},[139,60709,4262],{"class":145},[139,60711,60712,60714,60716],{"class":141,"line":3944},[139,60713,60477],{"class":145},[139,60715,60480],{"class":781},[139,60717,2470],{"class":145},[139,60719,60720],{"class":141,"line":3963},[139,60721,35706],{"class":145},[139,60723,60724,60726,60728],{"class":141,"line":3968},[139,60725,54652],{"class":145},[139,60727,54050],{"class":53538},[139,60729,53545],{"class":145},[139,60731,60732,60734,60736],{"class":141,"line":3982},[139,60733,54022],{"class":145},[139,60735,54037],{"class":53538},[139,60737,53545],{"class":145},[139,60739,60740],{"class":141,"line":3987},[139,60741,843],{"emptyLinePlaceholder":842},[139,60743,60744,60746,60748],{"class":141,"line":4014},[139,60745,54022],{"class":145},[139,60747,52873],{"class":53538},[139,60749,53545],{"class":145},[19,60751,60752],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[130,60754,60756],{"className":52871,"code":60755,"language":52873,"meta":135,"style":135},"\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",[50,60757,60758,60768,60782,60786,60794,60808,60828,60840,60848,60852,60860,60872,60880,60890,60908,60924,60937,60945,60949,60957,60965,60969],{"__ignoreMap":135},[139,60759,60760,60762,60764,60766],{"class":141,"line":142},[139,60761,53535],{"class":145},[139,60763,53539],{"class":53538},[139,60765,53542],{"class":781},[139,60767,53545],{"class":145},[139,60769,60770,60772,60774,60776,60778,60780],{"class":141,"line":210},[139,60771,796],{"class":145},[139,60773,52873],{"class":53538},[139,60775,53554],{"class":781},[139,60777,150],{"class":145},[139,60779,53559],{"class":160},[139,60781,53545],{"class":145},[139,60783,60784],{"class":141,"line":254},[139,60785,843],{"emptyLinePlaceholder":842},[139,60787,60788,60790,60792],{"class":141,"line":262},[139,60789,796],{"class":145},[139,60791,53572],{"class":53538},[139,60793,53545],{"class":145},[139,60795,60796,60798,60800,60802,60804,60806],{"class":141,"line":313},[139,60797,54380],{"class":145},[139,60799,53582],{"class":53538},[139,60801,53585],{"class":781},[139,60803,150],{"class":145},[139,60805,53590],{"class":160},[139,60807,53545],{"class":145},[139,60809,60810,60812,60814,60816,60818,60820,60822,60824,60826],{"class":141,"line":462},[139,60811,54380],{"class":145},[139,60813,53582],{"class":53538},[139,60815,17189],{"class":781},[139,60817,150],{"class":145},[139,60819,53629],{"class":160},[139,60821,53609],{"class":781},[139,60823,150],{"class":145},[139,60825,53636],{"class":160},[139,60827,53545],{"class":145},[139,60829,60830,60832,60834,60836,60838],{"class":141,"line":474},[139,60831,54380],{"class":145},[139,60833,53645],{"class":53538},[139,60835,53648],{"class":145},[139,60837,53645],{"class":53538},[139,60839,53545],{"class":145},[139,60841,60842,60844,60846],{"class":141,"line":484},[139,60843,54022],{"class":145},[139,60845,53572],{"class":53538},[139,60847,53545],{"class":145},[139,60849,60850],{"class":141,"line":989},[139,60851,843],{"emptyLinePlaceholder":842},[139,60853,60854,60856,60858],{"class":141,"line":994},[139,60855,796],{"class":145},[139,60857,54037],{"class":53538},[139,60859,53545],{"class":145},[139,60861,60862,60864,60866,60868,60870],{"class":141,"line":999},[139,60863,54380],{"class":145},[139,60865,56121],{"class":53538},[139,60867,56127],{"class":145},[139,60869,56121],{"class":53538},[139,60871,53545],{"class":145},[139,60873,60874,60876,60878],{"class":141,"line":1006},[139,60875,54380],{"class":145},[139,60877,54050],{"class":53538},[139,60879,53545],{"class":145},[139,60881,60882,60884,60886,60888],{"class":141,"line":1027},[139,60883,13494],{"class":149},[139,60885,4525],{"class":153},[139,60887,15836],{"class":149},[139,60889,60661],{"class":153},[139,60891,60892,60894,60896,60898,60900,60902,60904,60906],{"class":141,"line":1040},[139,60893,13494],{"class":149},[139,60895,56625],{"class":153},[139,60897,15836],{"class":149},[139,60899,56630],{"class":145},[139,60901,56633],{"class":781},[139,60903,157],{"class":145},[139,60905,60437],{"class":160},[139,60907,164],{"class":145},[139,60909,60910,60912,60914,60916,60918,60920,60922],{"class":141,"line":2160},[139,60911,60444],{"class":145},[139,60913,60046],{"class":781},[139,60915,157],{"class":145},[139,60917,60051],{"class":160},[139,60919,413],{"class":145},[139,60921,56683],{"class":149},[139,60923,56686],{"class":145},[139,60925,60926,60929,60931,60933,60935],{"class":141,"line":2188},[139,60927,60928],{"class":145},"      num ",[139,60930,150],{"class":149},[139,60932,60468],{"class":145},[139,60934,60093],{"class":781},[139,60936,4262],{"class":145},[139,60938,60939,60941,60943],{"class":141,"line":3944},[139,60940,60477],{"class":145},[139,60942,60480],{"class":781},[139,60944,2470],{"class":145},[139,60946,60947],{"class":141,"line":3963},[139,60948,35706],{"class":145},[139,60950,60951,60953,60955],{"class":141,"line":3968},[139,60952,54652],{"class":145},[139,60954,54050],{"class":53538},[139,60956,53545],{"class":145},[139,60958,60959,60961,60963],{"class":141,"line":3982},[139,60960,54022],{"class":145},[139,60962,54037],{"class":53538},[139,60964,53545],{"class":145},[139,60966,60967],{"class":141,"line":3987},[139,60968,843],{"emptyLinePlaceholder":842},[139,60970,60971,60973,60975],{"class":141,"line":4014},[139,60972,54022],{"class":145},[139,60974,52873],{"class":53538},[139,60976,53545],{"class":145},[19,60978,60979],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1217,60981,60983],{"id":60982},"_324-事件监听版本","3.2.4 事件监听版本",[19,60985,60986],{},[3760,60987],{"alt":135,"src":60988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60990,60991],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60993,60994],{},"这种方式会覆盖前边的事件监听:",[130,60996,60998],{"className":52871,"code":60997,"language":52873,"meta":135,"style":135},"\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",[50,60999,61000,61010,61024,61028,61036,61050,61070,61082,61090,61094,61102,61114,61122,61140,61154,61165,61169,61181,61191,61195,61203,61211,61215],{"__ignoreMap":135},[139,61001,61002,61004,61006,61008],{"class":141,"line":142},[139,61003,53535],{"class":145},[139,61005,53539],{"class":53538},[139,61007,53542],{"class":781},[139,61009,53545],{"class":145},[139,61011,61012,61014,61016,61018,61020,61022],{"class":141,"line":210},[139,61013,796],{"class":145},[139,61015,52873],{"class":53538},[139,61017,53554],{"class":781},[139,61019,150],{"class":145},[139,61021,53559],{"class":160},[139,61023,53545],{"class":145},[139,61025,61026],{"class":141,"line":254},[139,61027,843],{"emptyLinePlaceholder":842},[139,61029,61030,61032,61034],{"class":141,"line":262},[139,61031,796],{"class":145},[139,61033,53572],{"class":53538},[139,61035,53545],{"class":145},[139,61037,61038,61040,61042,61044,61046,61048],{"class":141,"line":313},[139,61039,54380],{"class":145},[139,61041,53582],{"class":53538},[139,61043,53585],{"class":781},[139,61045,150],{"class":145},[139,61047,53590],{"class":160},[139,61049,53545],{"class":145},[139,61051,61052,61054,61056,61058,61060,61062,61064,61066,61068],{"class":141,"line":462},[139,61053,54380],{"class":145},[139,61055,53582],{"class":53538},[139,61057,17189],{"class":781},[139,61059,150],{"class":145},[139,61061,53629],{"class":160},[139,61063,53609],{"class":781},[139,61065,150],{"class":145},[139,61067,53636],{"class":160},[139,61069,53545],{"class":145},[139,61071,61072,61074,61076,61078,61080],{"class":141,"line":474},[139,61073,54380],{"class":145},[139,61075,53645],{"class":53538},[139,61077,53648],{"class":145},[139,61079,53645],{"class":53538},[139,61081,53545],{"class":145},[139,61083,61084,61086,61088],{"class":141,"line":484},[139,61085,54022],{"class":145},[139,61087,53572],{"class":53538},[139,61089,53545],{"class":145},[139,61091,61092],{"class":141,"line":989},[139,61093,843],{"emptyLinePlaceholder":842},[139,61095,61096,61098,61100],{"class":141,"line":994},[139,61097,796],{"class":145},[139,61099,54037],{"class":53538},[139,61101,53545],{"class":145},[139,61103,61104,61106,61108,61110,61112],{"class":141,"line":999},[139,61105,54380],{"class":145},[139,61107,56121],{"class":53538},[139,61109,56127],{"class":145},[139,61111,56121],{"class":53538},[139,61113,53545],{"class":145},[139,61115,61116,61118,61120],{"class":141,"line":1006},[139,61117,54380],{"class":145},[139,61119,54050],{"class":53538},[139,61121,53545],{"class":145},[139,61123,61124,61126,61128,61130,61132,61134,61136,61138],{"class":141,"line":1027},[139,61125,13494],{"class":149},[139,61127,56625],{"class":153},[139,61129,15836],{"class":149},[139,61131,56630],{"class":145},[139,61133,56633],{"class":781},[139,61135,157],{"class":145},[139,61137,60437],{"class":160},[139,61139,164],{"class":145},[139,61141,61142,61144,61147,61149,61152],{"class":141,"line":1040},[139,61143,60444],{"class":145},[139,61145,61146],{"class":781},"onclick",[139,61148,15836],{"class":149},[139,61150,61151],{"class":149}," function",[139,61153,56686],{"class":145},[139,61155,61156,61159,61161,61163],{"class":141,"line":2160},[139,61157,61158],{"class":781},"      alert",[139,61160,157],{"class":145},[139,61162,2909],{"class":153},[139,61164,164],{"class":145},[139,61166,61167],{"class":141,"line":2188},[139,61168,4472],{"class":145},[139,61170,61171,61173,61175,61177,61179],{"class":141,"line":3944},[139,61172,60444],{"class":145},[139,61174,61146],{"class":781},[139,61176,15836],{"class":149},[139,61178,61151],{"class":149},[139,61180,56686],{"class":145},[139,61182,61183,61185,61187,61189],{"class":141,"line":3963},[139,61184,61158],{"class":781},[139,61186,157],{"class":145},[139,61188,3185],{"class":153},[139,61190,164],{"class":145},[139,61192,61193],{"class":141,"line":3968},[139,61194,4472],{"class":145},[139,61196,61197,61199,61201],{"class":141,"line":3982},[139,61198,54652],{"class":145},[139,61200,54050],{"class":53538},[139,61202,53545],{"class":145},[139,61204,61205,61207,61209],{"class":141,"line":3987},[139,61206,54022],{"class":145},[139,61208,54037],{"class":53538},[139,61210,53545],{"class":145},[139,61212,61213],{"class":141,"line":4014},[139,61214,843],{"emptyLinePlaceholder":842},[139,61216,61217,61219,61221],{"class":141,"line":4019},[139,61218,54022],{"class":145},[139,61220,52873],{"class":53538},[139,61222,53545],{"class":145},[19,61224,61225],{},"只要点击就输出结果为22,前边11被覆盖了",[130,61227,61229],{"className":52871,"code":61228,"language":52873,"meta":135,"style":135},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[50,61230,61231,61236,61241,61245,61250,61255],{"__ignoreMap":135},[139,61232,61233],{"class":141,"line":142},[139,61234,61235],{"class":145},"  btn.addEventListener('click', function () {\n",[139,61237,61238],{"class":141,"line":210},[139,61239,61240],{"class":145},"      alert(11)\n",[139,61242,61243],{"class":141,"line":254},[139,61244,35706],{"class":145},[139,61246,61247],{"class":141,"line":262},[139,61248,61249],{"class":145},"    btn.addEventListener('click', function () {\n",[139,61251,61252],{"class":141,"line":313},[139,61253,61254],{"class":145},"      alert(22)\n",[139,61256,61257],{"class":141,"line":462},[139,61258,35706],{"class":145},[19,61260,61261],{},"点击第一次输出11,第二次点击为22",[1217,61263,61265],{"id":61264},"_325-事件类型","3.2.5 事件类型",[19,61267,61268],{},[3760,61269],{"alt":135,"src":61270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24265,61272,61274],{"id":61273},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61276,61277],{},"补充知识:",[19,61279,61280],{},"轮播图自动播放模块,可以使用",[19,61282,61283],{},"let timerId = setInterval(function () {",[19,61285,61286],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61288,61289],{},"用js方法模拟进行点击事件,click必须加()",[19,61291,61292],{},"next.click()",[19,61294,61295],{},"}, 1000)",[19,61297,61298],{},[3760,61299],{"alt":135,"src":61300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[130,61302,61304],{"className":55302,"code":61303,"language":55304,"meta":135,"style":135},"\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",[50,61305,61306,61310,61320,61334,61338,61346,61361,61381,61401,61414,61422,61427,61432,61436,61440,61445,61450,61455,61460,61464,61468,61473,61478,61483,61487,61491,61496,61500,61505,61510,61514,61518,61523,61528,61533,61538,61543,61547,61551,61556,61561,61566,61571,61576,61580,61584,61589,61594,61599,61604,61609,61614,61619,61624,61629,61634,61638,61642,61647,61652,61656,61660,61665,61670,61674,61679,61684,61688,61692,61697,61701,61706,61711,61715,61720,61724,61728,61733,61738,61743,61748,61753,61758,61763,61767,61771,61775,61780,61785,61790,61795,61799,61807,61815,61819,61827,61842,61856,61877,61885,61899,61912,61927,61946,61958,61970,61982,61994,62006,62018,62030,62038,62053,62077,62101,62109,62117,62125,62133,62138,62143,62148,62153,62158,62163,62168,62173,62178,62183,62187,62192,62197,62202,62207,62212,62217,62222,62227,62232,62236,62241,62246,62251,62256,62261,62266,62271,62276,62281,62286,62291,62296,62300,62304,62309,62314,62319,62323,62328,62333,62338,62343,62348,62352,62357,62361,62365,62369,62373,62377,62381,62386,62391,62396,62401,62406,62411,62416,62421,62426,62430,62434,62439,62444,62449,62454,62459,62463,62468,62473,62478,62483,62488,62493,62497,62501,62506,62510,62515,62519,62524,62529,62534,62539,62544,62549,62553,62561,62569,62573],{"__ignoreMap":135},[139,61307,61308],{"class":141,"line":142},[139,61309,843],{"emptyLinePlaceholder":842},[139,61311,61312,61314,61316,61318],{"class":141,"line":210},[139,61313,53535],{"class":145},[139,61315,53539],{"class":149},[139,61317,53542],{"class":153},[139,61319,53545],{"class":145},[139,61321,61322,61324,61326,61328,61330,61332],{"class":141,"line":254},[139,61323,796],{"class":145},[139,61325,52873],{"class":53538},[139,61327,53554],{"class":781},[139,61329,150],{"class":145},[139,61331,53559],{"class":160},[139,61333,53545],{"class":145},[139,61335,61336],{"class":141,"line":262},[139,61337,843],{"emptyLinePlaceholder":842},[139,61339,61340,61342,61344],{"class":141,"line":313},[139,61341,796],{"class":145},[139,61343,53572],{"class":53538},[139,61345,53545],{"class":145},[139,61347,61348,61350,61352,61354,61356,61358],{"class":141,"line":462},[139,61349,54380],{"class":145},[139,61351,53582],{"class":53538},[139,61353,53585],{"class":781},[139,61355,150],{"class":145},[139,61357,53590],{"class":160},[139,61359,61360],{"class":145}," \u002F>\n",[139,61362,61363,61365,61367,61369,61371,61373,61375,61377,61379],{"class":141,"line":474},[139,61364,54380],{"class":145},[139,61366,53582],{"class":53538},[139,61368,53601],{"class":781},[139,61370,150],{"class":145},[139,61372,53606],{"class":160},[139,61374,53609],{"class":781},[139,61376,150],{"class":145},[139,61378,53614],{"class":160},[139,61380,61360],{"class":145},[139,61382,61383,61385,61387,61389,61391,61393,61395,61397,61399],{"class":141,"line":484},[139,61384,54380],{"class":145},[139,61386,53582],{"class":53538},[139,61388,17189],{"class":781},[139,61390,150],{"class":145},[139,61392,53629],{"class":160},[139,61394,53609],{"class":781},[139,61396,150],{"class":145},[139,61398,53636],{"class":160},[139,61400,61360],{"class":145},[139,61402,61403,61405,61407,61410,61412],{"class":141,"line":989},[139,61404,54380],{"class":145},[139,61406,53645],{"class":53538},[139,61408,61409],{"class":145},">轮播图点击切换\u003C\u002F",[139,61411,53645],{"class":53538},[139,61413,53545],{"class":145},[139,61415,61416,61418,61420],{"class":141,"line":994},[139,61417,54380],{"class":145},[139,61419,2348],{"class":53538},[139,61421,53545],{"class":145},[139,61423,61424],{"class":141,"line":999},[139,61425,61426],{"class":145},"    * {\n",[139,61428,61429],{"class":141,"line":1006},[139,61430,61431],{"class":145},"      box-sizing: border-box;\n",[139,61433,61434],{"class":141,"line":1027},[139,61435,4472],{"class":145},[139,61437,61438],{"class":141,"line":1040},[139,61439,843],{"emptyLinePlaceholder":842},[139,61441,61442],{"class":141,"line":2160},[139,61443,61444],{"class":145},"    .slider {\n",[139,61446,61447],{"class":141,"line":2188},[139,61448,61449],{"class":145},"      width: 560px;\n",[139,61451,61452],{"class":141,"line":3944},[139,61453,61454],{"class":145},"      height: 400px;\n",[139,61456,61457],{"class":141,"line":3963},[139,61458,61459],{"class":145},"      overflow: hidden;\n",[139,61461,61462],{"class":141,"line":3968},[139,61463,4472],{"class":145},[139,61465,61466],{"class":141,"line":3982},[139,61467,843],{"emptyLinePlaceholder":842},[139,61469,61470],{"class":141,"line":3987},[139,61471,61472],{"class":145},"    .slider-wrapper {\n",[139,61474,61475],{"class":141,"line":4014},[139,61476,61477],{"class":145},"      width: 100%;\n",[139,61479,61480],{"class":141,"line":4019},[139,61481,61482],{"class":145},"      height: 320px;\n",[139,61484,61485],{"class":141,"line":4036},[139,61486,4472],{"class":145},[139,61488,61489],{"class":141,"line":4041},[139,61490,843],{"emptyLinePlaceholder":842},[139,61492,61493],{"class":141,"line":4046},[139,61494,61495],{"class":145},"    .slider-wrapper img {\n",[139,61497,61498],{"class":141,"line":4051},[139,61499,61477],{"class":145},[139,61501,61502],{"class":141,"line":4065},[139,61503,61504],{"class":145},"      height: 100%;\n",[139,61506,61507],{"class":141,"line":4070},[139,61508,61509],{"class":145},"      display: block;\n",[139,61511,61512],{"class":141,"line":4860},[139,61513,4472],{"class":145},[139,61515,61516],{"class":141,"line":4874},[139,61517,843],{"emptyLinePlaceholder":842},[139,61519,61520],{"class":141,"line":4882},[139,61521,61522],{"class":145},"    .slider-footer {\n",[139,61524,61525],{"class":141,"line":4887},[139,61526,61527],{"class":145},"      height: 80px;\n",[139,61529,61530],{"class":141,"line":4893},[139,61531,61532],{"class":145},"      background-color: rgb(100, 67, 68);\n",[139,61534,61535],{"class":141,"line":4899},[139,61536,61537],{"class":145},"      padding: 12px 12px 0 12px;\n",[139,61539,61540],{"class":141,"line":4904},[139,61541,61542],{"class":145},"      position: relative;\n",[139,61544,61545],{"class":141,"line":10222},[139,61546,4472],{"class":145},[139,61548,61549],{"class":141,"line":10246},[139,61550,843],{"emptyLinePlaceholder":842},[139,61552,61553],{"class":141,"line":10251},[139,61554,61555],{"class":145},"    .slider-footer .toggle {\n",[139,61557,61558],{"class":141,"line":10257},[139,61559,61560],{"class":145},"      position: absolute;\n",[139,61562,61563],{"class":141,"line":10284},[139,61564,61565],{"class":145},"      right: 0;\n",[139,61567,61568],{"class":141,"line":10289},[139,61569,61570],{"class":145},"      top: 12px;\n",[139,61572,61573],{"class":141,"line":10295},[139,61574,61575],{"class":145},"      display: flex;\n",[139,61577,61578],{"class":141,"line":10307},[139,61579,4472],{"class":145},[139,61581,61582],{"class":141,"line":10319},[139,61583,843],{"emptyLinePlaceholder":842},[139,61585,61586],{"class":141,"line":10331},[139,61587,61588],{"class":145},"    .slider-footer .toggle button {\n",[139,61590,61591],{"class":141,"line":11990},[139,61592,61593],{"class":145},"      margin-right: 12px;\n",[139,61595,61596],{"class":141,"line":12015},[139,61597,61598],{"class":145},"      width: 28px;\n",[139,61600,61601],{"class":141,"line":12038},[139,61602,61603],{"class":145},"      height: 28px;\n",[139,61605,61606],{"class":141,"line":12062},[139,61607,61608],{"class":145},"      appearance: none;\n",[139,61610,61611],{"class":141,"line":12067},[139,61612,61613],{"class":145},"      border: none;\n",[139,61615,61616],{"class":141,"line":12072},[139,61617,61618],{"class":145},"      background: rgba(255, 255, 255, 0.1);\n",[139,61620,61621],{"class":141,"line":12077},[139,61622,61623],{"class":145},"      color: #fff;\n",[139,61625,61626],{"class":141,"line":12086},[139,61627,61628],{"class":145},"      border-radius: 4px;\n",[139,61630,61631],{"class":141,"line":12091},[139,61632,61633],{"class":145},"      cursor: pointer;\n",[139,61635,61636],{"class":141,"line":12097},[139,61637,4472],{"class":145},[139,61639,61640],{"class":141,"line":12118},[139,61641,843],{"emptyLinePlaceholder":842},[139,61643,61644],{"class":141,"line":12124},[139,61645,61646],{"class":145},"    .slider-footer .toggle button:hover {\n",[139,61648,61649],{"class":141,"line":12138},[139,61650,61651],{"class":145},"      background: rgba(255, 255, 255, 0.2);\n",[139,61653,61654],{"class":141,"line":12144},[139,61655,4472],{"class":145},[139,61657,61658],{"class":141,"line":12171},[139,61659,843],{"emptyLinePlaceholder":842},[139,61661,61662],{"class":141,"line":12180},[139,61663,61664],{"class":145},"    .slider-footer p {\n",[139,61666,61667],{"class":141,"line":12186},[139,61668,61669],{"class":145},"      margin: 0;\n",[139,61671,61672],{"class":141,"line":12194},[139,61673,61623],{"class":145},[139,61675,61676],{"class":141,"line":12199},[139,61677,61678],{"class":145},"      font-size: 18px;\n",[139,61680,61681],{"class":141,"line":18871},[139,61682,61683],{"class":145},"      margin-bottom: 10px;\n",[139,61685,61686],{"class":141,"line":18877},[139,61687,4472],{"class":145},[139,61689,61690],{"class":141,"line":18900},[139,61691,843],{"emptyLinePlaceholder":842},[139,61693,61694],{"class":141,"line":18906},[139,61695,61696],{"class":145},"    .slider-indicator {\n",[139,61698,61699],{"class":141,"line":18929},[139,61700,61669],{"class":145},[139,61702,61703],{"class":141,"line":18943},[139,61704,61705],{"class":145},"      padding: 0;\n",[139,61707,61708],{"class":141,"line":18963},[139,61709,61710],{"class":145},"      list-style: none;\n",[139,61712,61713],{"class":141,"line":18969},[139,61714,61575],{"class":145},[139,61716,61717],{"class":141,"line":18980},[139,61718,61719],{"class":145},"      align-items: center;\n",[139,61721,61722],{"class":141,"line":19003},[139,61723,4472],{"class":145},[139,61725,61726],{"class":141,"line":19025},[139,61727,843],{"emptyLinePlaceholder":842},[139,61729,61730],{"class":141,"line":19030},[139,61731,61732],{"class":145},"    .slider-indicator li {\n",[139,61734,61735],{"class":141,"line":19036},[139,61736,61737],{"class":145},"      width: 8px;\n",[139,61739,61740],{"class":141,"line":19050},[139,61741,61742],{"class":145},"      height: 8px;\n",[139,61744,61745],{"class":141,"line":19063},[139,61746,61747],{"class":145},"      margin: 4px;\n",[139,61749,61750],{"class":141,"line":19068},[139,61751,61752],{"class":145},"      border-radius: 50%;\n",[139,61754,61755],{"class":141,"line":19082},[139,61756,61757],{"class":145},"      background: #fff;\n",[139,61759,61760],{"class":141,"line":19087},[139,61761,61762],{"class":145},"      opacity: 0.4;\n",[139,61764,61765],{"class":141,"line":19093},[139,61766,61633],{"class":145},[139,61768,61769],{"class":141,"line":19098},[139,61770,4472],{"class":145},[139,61772,61773],{"class":141,"line":19112},[139,61774,843],{"emptyLinePlaceholder":842},[139,61776,61777],{"class":141,"line":19117},[139,61778,61779],{"class":145},"    .slider-indicator li.active {\n",[139,61781,61782],{"class":141,"line":19122},[139,61783,61784],{"class":145},"      width: 12px;\n",[139,61786,61787],{"class":141,"line":19136},[139,61788,61789],{"class":145},"      height: 12px;\n",[139,61791,61792],{"class":141,"line":19148},[139,61793,61794],{"class":145},"      opacity: 1;\n",[139,61796,61797],{"class":141,"line":19153},[139,61798,4472],{"class":145},[139,61800,61801,61803,61805],{"class":141,"line":19166},[139,61802,54652],{"class":145},[139,61804,2348],{"class":53538},[139,61806,53545],{"class":145},[139,61808,61809,61811,61813],{"class":141,"line":19171},[139,61810,54022],{"class":145},[139,61812,53572],{"class":53538},[139,61814,53545],{"class":145},[139,61816,61817],{"class":141,"line":19176},[139,61818,843],{"emptyLinePlaceholder":842},[139,61820,61821,61823,61825],{"class":141,"line":19181},[139,61822,796],{"class":145},[139,61824,54037],{"class":53538},[139,61826,53545],{"class":145},[139,61828,61829,61831,61833,61835,61837,61840],{"class":141,"line":19194},[139,61830,54380],{"class":145},[139,61832,53848],{"class":53538},[139,61834,55721],{"class":781},[139,61836,150],{"class":145},[139,61838,61839],{"class":160},"\"slider\"",[139,61841,53545],{"class":145},[139,61843,61844,61846,61848,61850,61852,61854],{"class":141,"line":19199},[139,61845,53579],{"class":145},[139,61847,53848],{"class":53538},[139,61849,55721],{"class":781},[139,61851,150],{"class":145},[139,61853,57461],{"class":160},[139,61855,53545],{"class":145},[139,61857,61858,61860,61862,61864,61866,61869,61871,61873,61875],{"class":141,"line":34880},[139,61859,57468],{"class":145},[139,61861,3760],{"class":53538},[139,61863,57473],{"class":781},[139,61865,150],{"class":145},[139,61867,61868],{"class":160},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[139,61870,57481],{"class":781},[139,61872,150],{"class":145},[139,61874,9926],{"class":160},[139,61876,61360],{"class":145},[139,61878,61879,61881,61883],{"class":141,"line":34886},[139,61880,54013],{"class":145},[139,61882,53848],{"class":53538},[139,61884,53545],{"class":145},[139,61886,61887,61889,61891,61893,61895,61897],{"class":141,"line":34892},[139,61888,53579],{"class":145},[139,61890,53848],{"class":53538},[139,61892,55721],{"class":781},[139,61894,150],{"class":145},[139,61896,57508],{"class":160},[139,61898,53545],{"class":145},[139,61900,61901,61903,61905,61908,61910],{"class":141,"line":34898},[139,61902,57468],{"class":145},[139,61904,19],{"class":53538},[139,61906,61907],{"class":145},">对人类来说会不会太超前了？\u003C\u002F",[139,61909,19],{"class":53538},[139,61911,53545],{"class":145},[139,61913,61914,61916,61918,61920,61922,61925],{"class":141,"line":34904},[139,61915,57468],{"class":145},[139,61917,3437],{"class":53538},[139,61919,55721],{"class":781},[139,61921,150],{"class":145},[139,61923,61924],{"class":160},"\"slider-indicator\"",[139,61926,53545],{"class":145},[139,61928,61929,61931,61933,61935,61937,61940,61942,61944],{"class":141,"line":34915},[139,61930,57536],{"class":145},[139,61932,1763],{"class":53538},[139,61934,55721],{"class":781},[139,61936,150],{"class":145},[139,61938,61939],{"class":160},"\"active\"",[139,61941,57548],{"class":145},[139,61943,1763],{"class":53538},[139,61945,53545],{"class":145},[139,61947,61948,61950,61952,61954,61956],{"class":141,"line":34921},[139,61949,57536],{"class":145},[139,61951,1763],{"class":53538},[139,61953,57548],{"class":145},[139,61955,1763],{"class":53538},[139,61957,53545],{"class":145},[139,61959,61960,61962,61964,61966,61968],{"class":141,"line":34941},[139,61961,57536],{"class":145},[139,61963,1763],{"class":53538},[139,61965,57548],{"class":145},[139,61967,1763],{"class":53538},[139,61969,53545],{"class":145},[139,61971,61972,61974,61976,61978,61980],{"class":141,"line":34947},[139,61973,57536],{"class":145},[139,61975,1763],{"class":53538},[139,61977,57548],{"class":145},[139,61979,1763],{"class":53538},[139,61981,53545],{"class":145},[139,61983,61984,61986,61988,61990,61992],{"class":141,"line":34958},[139,61985,57536],{"class":145},[139,61987,1763],{"class":53538},[139,61989,57548],{"class":145},[139,61991,1763],{"class":53538},[139,61993,53545],{"class":145},[139,61995,61996,61998,62000,62002,62004],{"class":141,"line":34964},[139,61997,57536],{"class":145},[139,61999,1763],{"class":53538},[139,62001,57548],{"class":145},[139,62003,1763],{"class":53538},[139,62005,53545],{"class":145},[139,62007,62008,62010,62012,62014,62016],{"class":141,"line":34970},[139,62009,57536],{"class":145},[139,62011,1763],{"class":53538},[139,62013,57548],{"class":145},[139,62015,1763],{"class":53538},[139,62017,53545],{"class":145},[139,62019,62020,62022,62024,62026,62028],{"class":141,"line":34976},[139,62021,57536],{"class":145},[139,62023,1763],{"class":53538},[139,62025,57548],{"class":145},[139,62027,1763],{"class":53538},[139,62029,53545],{"class":145},[139,62031,62032,62034,62036],{"class":141,"line":34982},[139,62033,57641],{"class":145},[139,62035,3437],{"class":53538},[139,62037,53545],{"class":145},[139,62039,62040,62042,62044,62046,62048,62051],{"class":141,"line":34988},[139,62041,57468],{"class":145},[139,62043,53848],{"class":53538},[139,62045,55721],{"class":781},[139,62047,150],{"class":145},[139,62049,62050],{"class":160},"\"toggle\"",[139,62052,53545],{"class":145},[139,62054,62055,62057,62059,62061,62063,62066,62068,62071,62073,62075],{"class":141,"line":34994},[139,62056,57536],{"class":145},[139,62058,56121],{"class":53538},[139,62060,55721],{"class":781},[139,62062,150],{"class":145},[139,62064,62065],{"class":160},"\"prev\"",[139,62067,958],{"class":145},[139,62069,62070],{"class":153},"&lt;",[139,62072,54022],{"class":145},[139,62074,56121],{"class":53538},[139,62076,53545],{"class":145},[139,62078,62079,62081,62083,62085,62087,62090,62092,62095,62097,62099],{"class":141,"line":35000},[139,62080,57536],{"class":145},[139,62082,56121],{"class":53538},[139,62084,55721],{"class":781},[139,62086,150],{"class":145},[139,62088,62089],{"class":160},"\"next\"",[139,62091,958],{"class":145},[139,62093,62094],{"class":153},"&gt;",[139,62096,54022],{"class":145},[139,62098,56121],{"class":53538},[139,62100,53545],{"class":145},[139,62102,62103,62105,62107],{"class":141,"line":35020},[139,62104,57641],{"class":145},[139,62106,53848],{"class":53538},[139,62108,53545],{"class":145},[139,62110,62111,62113,62115],{"class":141,"line":35026},[139,62112,54013],{"class":145},[139,62114,53848],{"class":53538},[139,62116,53545],{"class":145},[139,62118,62119,62121,62123],{"class":141,"line":35042},[139,62120,54652],{"class":145},[139,62122,53848],{"class":53538},[139,62124,53545],{"class":145},[139,62126,62127,62129,62131],{"class":141,"line":35048},[139,62128,54380],{"class":145},[139,62130,54050],{"class":53538},[139,62132,53545],{"class":145},[139,62134,62135],{"class":141,"line":35062},[139,62136,62137],{"class":145},"    \u002F\u002F 1. 初始数据\n",[139,62139,62140],{"class":141,"line":35068},[139,62141,62142],{"class":145},"    const data = [\n",[139,62144,62145],{"class":141,"line":35083},[139,62146,62147],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[139,62149,62150],{"class":141,"line":35089},[139,62151,62152],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[139,62154,62155],{"class":141,"line":35098},[139,62156,62157],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[139,62159,62160],{"class":141,"line":35104},[139,62161,62162],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[139,62164,62165],{"class":141,"line":35113},[139,62166,62167],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[139,62169,62170],{"class":141,"line":35119},[139,62171,62172],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[139,62174,62175],{"class":141,"line":35125},[139,62176,62177],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[139,62179,62180],{"class":141,"line":35134},[139,62181,62182],{"class":145},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[139,62184,62185],{"class":141,"line":35140},[139,62186,55344],{"class":145},[139,62188,62189],{"class":141,"line":35151},[139,62190,62191],{"class":145},"    \u002F\u002F 获取元素\n",[139,62193,62194],{"class":141,"line":35157},[139,62195,62196],{"class":145},"    const img = document.querySelector('.slider-wrapper img')\n",[139,62198,62199],{"class":141,"line":35176},[139,62200,62201],{"class":145},"    const p = document.querySelector('.slider-footer p')\n",[139,62203,62204],{"class":141,"line":35182},[139,62205,62206],{"class":145},"    const footer = document.querySelector('.slider-footer')\n",[139,62208,62209],{"class":141,"line":35193},[139,62210,62211],{"class":145},"    \u002F\u002F 1. 右按钮业务\n",[139,62213,62214],{"class":141,"line":35199},[139,62215,62216],{"class":145},"    \u002F\u002F 1.1 获取右侧按钮 \n",[139,62218,62219],{"class":141,"line":35219},[139,62220,62221],{"class":145},"    const next = document.querySelector('.next')\n",[139,62223,62224],{"class":141,"line":35235},[139,62225,62226],{"class":145},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[139,62228,62229],{"class":141,"line":35241},[139,62230,62231],{"class":145},"    \u002F\u002F 1.2 注册点击事件\n",[139,62233,62234],{"class":141,"line":35255},[139,62235,843],{"emptyLinePlaceholder":842},[139,62237,62238],{"class":141,"line":35261},[139,62239,62240],{"class":145},"    next.addEventListener('click', function () {\n",[139,62242,62243],{"class":141,"line":35267},[139,62244,62245],{"class":145},"      \u002F\u002F console.log(11)\n",[139,62247,62248],{"class":141,"line":35278},[139,62249,62250],{"class":145},"      i++\n",[139,62252,62253],{"class":141,"line":35284},[139,62254,62255],{"class":145},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[139,62257,62258],{"class":141,"line":35290},[139,62259,62260],{"class":145},"      \u002F\u002F if (i >= 8) {\n",[139,62262,62263],{"class":141,"line":35300},[139,62264,62265],{"class":145},"      \u002F\u002F   i = 0\n",[139,62267,62268],{"class":141,"line":35306},[139,62269,62270],{"class":145},"      \u002F\u002F }\n",[139,62272,62273],{"class":141,"line":35317},[139,62274,62275],{"class":145},"      i = i >= data.length ? 0 : i\n",[139,62277,62278],{"class":141,"line":35323},[139,62279,62280],{"class":145},"      \u002F\u002F 1.3 得到对应的对象\n",[139,62282,62283],{"class":141,"line":35333},[139,62284,62285],{"class":145},"      \u002F\u002F console.log(data[i])\n",[139,62287,62288],{"class":141,"line":35338},[139,62289,62290],{"class":145},"      \u002F\u002F 调用函数\n",[139,62292,62293],{"class":141,"line":35344},[139,62294,62295],{"class":145},"      toggle()\n",[139,62297,62298],{"class":141,"line":35392},[139,62299,35706],{"class":145},[139,62301,62302],{"class":141,"line":35439},[139,62303,843],{"emptyLinePlaceholder":842},[139,62305,62306],{"class":141,"line":35444},[139,62307,62308],{"class":145},"    \u002F\u002F 2. 左侧按钮业务\n",[139,62310,62311],{"class":141,"line":35450},[139,62312,62313],{"class":145},"    \u002F\u002F 2.1 获取左侧按钮 \n",[139,62315,62316],{"class":141,"line":35469},[139,62317,62318],{"class":145},"    const prev = document.querySelector('.prev')\n",[139,62320,62321],{"class":141,"line":35475},[139,62322,62231],{"class":145},[139,62324,62325],{"class":141,"line":35494},[139,62326,62327],{"class":145},"    prev.addEventListener('click', function () {\n",[139,62329,62330],{"class":141,"line":35500},[139,62331,62332],{"class":145},"      i--\n",[139,62334,62335],{"class":141,"line":35506},[139,62336,62337],{"class":145},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[139,62339,62340],{"class":141,"line":35516},[139,62341,62342],{"class":145},"      \u002F\u002F if (i \u003C 0) {\n",[139,62344,62345],{"class":141,"line":35521},[139,62346,62347],{"class":145},"      \u002F\u002F   i = 7\n",[139,62349,62350],{"class":141,"line":35527},[139,62351,62270],{"class":145},[139,62353,62354],{"class":141,"line":35543},[139,62355,62356],{"class":145},"      i = i \u003C 0 ? data.length - 1 : i\n",[139,62358,62359],{"class":141,"line":35588},[139,62360,62280],{"class":145},[139,62362,62363],{"class":141,"line":35594},[139,62364,62285],{"class":145},[139,62366,62367],{"class":141,"line":35600},[139,62368,62290],{"class":145},[139,62370,62371],{"class":141,"line":35606},[139,62372,62295],{"class":145},[139,62374,62375],{"class":141,"line":35617},[139,62376,35706],{"class":145},[139,62378,62379],{"class":141,"line":35623},[139,62380,843],{"emptyLinePlaceholder":842},[139,62382,62383],{"class":141,"line":35629},[139,62384,62385],{"class":145},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[139,62387,62388],{"class":141,"line":35635},[139,62389,62390],{"class":145},"    function toggle() {\n",[139,62392,62393],{"class":141,"line":35653},[139,62394,62395],{"class":145},"      \u002F\u002F 1.4 渲染对应的数据\n",[139,62397,62398],{"class":141,"line":35667},[139,62399,62400],{"class":145},"      img.src = data[i].url\n",[139,62402,62403],{"class":141,"line":35676},[139,62404,62405],{"class":145},"      p.innerHTML = data[i].title\n",[139,62407,62408],{"class":141,"line":35685},[139,62409,62410],{"class":145},"      footer.style.backgroundColor = data[i].color\n",[139,62412,62413],{"class":141,"line":35694},[139,62414,62415],{"class":145},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[139,62417,62418],{"class":141,"line":35703},[139,62419,62420],{"class":145},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[139,62422,62423],{"class":141,"line":35709},[139,62424,62425],{"class":145},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[139,62427,62428],{"class":141,"line":35715},[139,62429,4472],{"class":145},[139,62431,62432],{"class":141,"line":35723},[139,62433,843],{"emptyLinePlaceholder":842},[139,62435,62436],{"class":141,"line":35728},[139,62437,62438],{"class":145},"    \u002F\u002F 3. 自动播放模块\n",[139,62440,62441],{"class":141,"line":35734},[139,62442,62443],{"class":145},"    let timerId = setInterval(function () {\n",[139,62445,62446],{"class":141,"line":35745},[139,62447,62448],{"class":145},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[139,62450,62451],{"class":141,"line":35751},[139,62452,62453],{"class":145},"      next.click()\n",[139,62455,62456],{"class":141,"line":35771},[139,62457,62458],{"class":145},"    }, 1000)\n",[139,62460,62461],{"class":141,"line":35777},[139,62462,843],{"emptyLinePlaceholder":842},[139,62464,62465],{"class":141,"line":35783},[139,62466,62467],{"class":145},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[139,62469,62470],{"class":141,"line":35789},[139,62471,62472],{"class":145},"    const slider = document.querySelector('.slider')\n",[139,62474,62475],{"class":141,"line":35806},[139,62476,62477],{"class":145},"    \u002F\u002F 注册事件\n",[139,62479,62480],{"class":141,"line":35812},[139,62481,62482],{"class":145},"    slider.addEventListener('mouseenter', function () {\n",[139,62484,62485],{"class":141,"line":35818},[139,62486,62487],{"class":145},"      \u002F\u002F 停止定时器\n",[139,62489,62490],{"class":141,"line":35824},[139,62491,62492],{"class":145},"      clearInterval(timerId)\n",[139,62494,62495],{"class":141,"line":35830},[139,62496,35706],{"class":145},[139,62498,62499],{"class":141,"line":35836},[139,62500,843],{"emptyLinePlaceholder":842},[139,62502,62503],{"class":141,"line":35863},[139,62504,62505],{"class":145},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[139,62507,62508],{"class":141,"line":35887},[139,62509,62477],{"class":145},[139,62511,62512],{"class":141,"line":35893},[139,62513,62514],{"class":145},"    slider.addEventListener('mouseleave', function () {\n",[139,62516,62517],{"class":141,"line":35899},[139,62518,62487],{"class":145},[139,62520,62521],{"class":141,"line":35905},[139,62522,62523],{"class":145},"      if (timerId) clearInterval(timerId)\n",[139,62525,62526],{"class":141,"line":35916},[139,62527,62528],{"class":145},"      \u002F\u002F 开启定时器\n",[139,62530,62531],{"class":141,"line":35927},[139,62532,62533],{"class":145},"      timerId = setInterval(function () {\n",[139,62535,62536],{"class":141,"line":35933},[139,62537,62538],{"class":145},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[139,62540,62541],{"class":141,"line":35950},[139,62542,62543],{"class":145},"        next.click()\n",[139,62545,62546],{"class":141,"line":35973},[139,62547,62548],{"class":145},"      }, 1000)\n",[139,62550,62551],{"class":141,"line":35996},[139,62552,35706],{"class":145},[139,62554,62555,62557,62559],{"class":141,"line":36002},[139,62556,54652],{"class":145},[139,62558,54050],{"class":53538},[139,62560,53545],{"class":145},[139,62562,62563,62565,62567],{"class":141,"line":36007},[139,62564,54022],{"class":145},[139,62566,54037],{"class":53538},[139,62568,53545],{"class":145},[139,62570,62571],{"class":141,"line":36016},[139,62572,843],{"emptyLinePlaceholder":842},[139,62574,62575,62577,62579],{"class":141,"line":36026},[139,62576,54022],{"class":145},[139,62578,52873],{"class":53538},[139,62580,53545],{"class":145},[24265,62582,62584],{"id":62583},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62586,62587],{},"小米搜索框案例：",[130,62589,62591],{"className":52871,"code":62590,"language":52873,"meta":135,"style":135},"\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",[50,62592,62593,62603,62617,62621,62629,62643,62663,62683,62695,62703,62709,62719,62729,62741,62745,62749,62756,62760,62771,62775,62779,62786,62797,62810,62824,62828,62832,62841,62853,62865,62879,62892,62905,62923,62934,62938,62942,62951,62968,62972,62976,62983,62993,63003,63014,63027,63039,63055,63066,63078,63082,63086,63094,63105,63122,63134,63146,63157,63161,63165,63176,63187,63191,63199,63203,63211,63215,63223,63238,63261,63276,63307,63334,63361,63388,63415,63442,63469,63478,63486,63494,63499,63519,63539,63544,63549,63567,63572,63582,63587,63601,63606,63611,63628,63637,63649,63653,63661,63669,63673],{"__ignoreMap":135},[139,62594,62595,62597,62599,62601],{"class":141,"line":142},[139,62596,53535],{"class":145},[139,62598,53539],{"class":53538},[139,62600,53542],{"class":781},[139,62602,53545],{"class":145},[139,62604,62605,62607,62609,62611,62613,62615],{"class":141,"line":210},[139,62606,796],{"class":145},[139,62608,52873],{"class":53538},[139,62610,53554],{"class":781},[139,62612,150],{"class":145},[139,62614,53559],{"class":160},[139,62616,53545],{"class":145},[139,62618,62619],{"class":141,"line":254},[139,62620,843],{"emptyLinePlaceholder":842},[139,62622,62623,62625,62627],{"class":141,"line":262},[139,62624,796],{"class":145},[139,62626,53572],{"class":53538},[139,62628,53545],{"class":145},[139,62630,62631,62633,62635,62637,62639,62641],{"class":141,"line":313},[139,62632,53579],{"class":145},[139,62634,53582],{"class":53538},[139,62636,53585],{"class":781},[139,62638,150],{"class":145},[139,62640,53590],{"class":160},[139,62642,53545],{"class":145},[139,62644,62645,62647,62649,62651,62653,62655,62657,62659,62661],{"class":141,"line":462},[139,62646,53579],{"class":145},[139,62648,53582],{"class":53538},[139,62650,53601],{"class":781},[139,62652,150],{"class":145},[139,62654,53606],{"class":160},[139,62656,53609],{"class":781},[139,62658,150],{"class":145},[139,62660,53614],{"class":160},[139,62662,53545],{"class":145},[139,62664,62665,62667,62669,62671,62673,62675,62677,62679,62681],{"class":141,"line":474},[139,62666,53579],{"class":145},[139,62668,53582],{"class":53538},[139,62670,17189],{"class":781},[139,62672,150],{"class":145},[139,62674,53629],{"class":160},[139,62676,53609],{"class":781},[139,62678,150],{"class":145},[139,62680,53636],{"class":160},[139,62682,53545],{"class":145},[139,62684,62685,62687,62689,62691,62693],{"class":141,"line":484},[139,62686,53579],{"class":145},[139,62688,53645],{"class":53538},[139,62690,53648],{"class":145},[139,62692,53645],{"class":53538},[139,62694,53545],{"class":145},[139,62696,62697,62699,62701],{"class":141,"line":989},[139,62698,53579],{"class":145},[139,62700,2348],{"class":53538},[139,62702,53545],{"class":145},[139,62704,62705,62707],{"class":141,"line":994},[139,62706,53665],{"class":53538},[139,62708,17840],{"class":145},[139,62710,62711,62713,62715,62717],{"class":141,"line":999},[139,62712,53672],{"class":153},[139,62714,2265],{"class":145},[139,62716,2634],{"class":153},[139,62718,3591],{"class":145},[139,62720,62721,62723,62725,62727],{"class":141,"line":1006},[139,62722,53683],{"class":153},[139,62724,2265],{"class":145},[139,62726,2634],{"class":153},[139,62728,3591],{"class":145},[139,62730,62731,62734,62736,62739],{"class":141,"line":1027},[139,62732,62733],{"class":153},"            box-sizing",[139,62735,2265],{"class":145},[139,62737,62738],{"class":153},"border-box",[139,62740,3591],{"class":145},[139,62742,62743],{"class":141,"line":1040},[139,62744,4812],{"class":145},[139,62746,62747],{"class":141,"line":2160},[139,62748,843],{"emptyLinePlaceholder":842},[139,62750,62751,62754],{"class":141,"line":2188},[139,62752,62753],{"class":53538},"        ul",[139,62755,17840],{"class":145},[139,62757,62758],{"class":141,"line":3944},[139,62759,843],{"emptyLinePlaceholder":842},[139,62761,62762,62765,62767,62769],{"class":141,"line":3963},[139,62763,62764],{"class":153},"            list-style",[139,62766,2265],{"class":145},[139,62768,56971],{"class":153},[139,62770,3591],{"class":145},[139,62772,62773],{"class":141,"line":3968},[139,62774,4812],{"class":145},[139,62776,62777],{"class":141,"line":3982},[139,62778,843],{"emptyLinePlaceholder":842},[139,62780,62781,62784],{"class":141,"line":3987},[139,62782,62783],{"class":781},"        .mi",[139,62785,17840],{"class":145},[139,62787,62788,62791,62793,62795],{"class":141,"line":4014},[139,62789,62790],{"class":153},"            position",[139,62792,2265],{"class":145},[139,62794,56998],{"class":153},[139,62796,3591],{"class":145},[139,62798,62799,62801,62803,62806,62808],{"class":141,"line":4019},[139,62800,53721],{"class":153},[139,62802,2265],{"class":145},[139,62804,62805],{"class":153},"223",[139,62807,53729],{"class":149},[139,62809,3591],{"class":145},[139,62811,62812,62814,62816,62818,62820,62822],{"class":141,"line":4036},[139,62813,53672],{"class":153},[139,62815,2265],{"class":145},[139,62817,1017],{"class":153},[139,62819,53729],{"class":149},[139,62821,53793],{"class":153},[139,62823,3591],{"class":145},[139,62825,62826],{"class":141,"line":4041},[139,62827,4812],{"class":145},[139,62829,62830],{"class":141,"line":4046},[139,62831,843],{"emptyLinePlaceholder":842},[139,62833,62834,62836,62839],{"class":141,"line":4051},[139,62835,62783],{"class":781},[139,62837,62838],{"class":53538}," input",[139,62840,17840],{"class":145},[139,62842,62843,62845,62847,62849,62851],{"class":141,"line":4065},[139,62844,53721],{"class":153},[139,62846,2265],{"class":145},[139,62848,62805],{"class":153},[139,62850,53729],{"class":149},[139,62852,3591],{"class":145},[139,62854,62855,62857,62859,62861,62863],{"class":141,"line":4070},[139,62856,53736],{"class":153},[139,62858,2265],{"class":145},[139,62860,3042],{"class":153},[139,62862,53729],{"class":149},[139,62864,3591],{"class":145},[139,62866,62867,62869,62871,62873,62875,62877],{"class":141,"line":4860},[139,62868,53683],{"class":153},[139,62870,2265],{"class":145},[139,62872,2634],{"class":153},[139,62874,4323],{"class":153},[139,62876,53729],{"class":149},[139,62878,3591],{"class":145},[139,62880,62881,62884,62886,62888,62890],{"class":141,"line":4874},[139,62882,62883],{"class":153},"            font-size",[139,62885,2265],{"class":145},[139,62887,2984],{"class":153},[139,62889,53729],{"class":149},[139,62891,3591],{"class":145},[139,62893,62894,62897,62899,62901,62903],{"class":141,"line":4882},[139,62895,62896],{"class":153},"            line-height",[139,62898,2265],{"class":145},[139,62900,3042],{"class":153},[139,62902,53729],{"class":149},[139,62904,3591],{"class":145},[139,62906,62907,62910,62912,62914,62916,62918,62921],{"class":141,"line":4887},[139,62908,62909],{"class":153},"            border",[139,62911,2265],{"class":145},[139,62913,410],{"class":153},[139,62915,53729],{"class":149},[139,62917,53758],{"class":153},[139,62919,62920],{"class":153}," #e0e0e0",[139,62922,3591],{"class":145},[139,62924,62925,62928,62930,62932],{"class":141,"line":4893},[139,62926,62927],{"class":153},"            outline",[139,62929,2265],{"class":145},[139,62931,56971],{"class":153},[139,62933,3591],{"class":145},[139,62935,62936],{"class":141,"line":4899},[139,62937,4812],{"class":145},[139,62939,62940],{"class":141,"line":4904},[139,62941,843],{"emptyLinePlaceholder":842},[139,62943,62944,62946,62949],{"class":141,"line":10222},[139,62945,62783],{"class":781},[139,62947,62948],{"class":781}," .search",[139,62950,17840],{"class":145},[139,62952,62953,62955,62957,62959,62961,62963,62966],{"class":141,"line":10246},[139,62954,62909],{"class":153},[139,62956,2265],{"class":145},[139,62958,410],{"class":153},[139,62960,53729],{"class":149},[139,62962,53758],{"class":153},[139,62964,62965],{"class":153}," #ff6700",[139,62967,3591],{"class":145},[139,62969,62970],{"class":141,"line":10251},[139,62971,4812],{"class":145},[139,62973,62974],{"class":141,"line":10257},[139,62975,843],{"emptyLinePlaceholder":842},[139,62977,62978,62981],{"class":141,"line":10284},[139,62979,62980],{"class":781},"        .result-list",[139,62982,17840],{"class":145},[139,62984,62985,62987,62989,62991],{"class":141,"line":10289},[139,62986,53709],{"class":153},[139,62988,2265],{"class":145},[139,62990,56971],{"class":153},[139,62992,3591],{"class":145},[139,62994,62995,62997,62999,63001],{"class":141,"line":10295},[139,62996,62790],{"class":153},[139,62998,2265],{"class":145},[139,63000,57065],{"class":153},[139,63002,3591],{"class":145},[139,63004,63005,63008,63010,63012],{"class":141,"line":10307},[139,63006,63007],{"class":153},"            left",[139,63009,2265],{"class":145},[139,63011,2634],{"class":153},[139,63013,3591],{"class":145},[139,63015,63016,63019,63021,63023,63025],{"class":141,"line":10319},[139,63017,63018],{"class":153},"            top",[139,63020,2265],{"class":145},[139,63022,3042],{"class":153},[139,63024,53729],{"class":149},[139,63026,3591],{"class":145},[139,63028,63029,63031,63033,63035,63037],{"class":141,"line":10331},[139,63030,53721],{"class":153},[139,63032,2265],{"class":145},[139,63034,62805],{"class":153},[139,63036,53729],{"class":149},[139,63038,3591],{"class":145},[139,63040,63041,63043,63045,63047,63049,63051,63053],{"class":141,"line":11990},[139,63042,62909],{"class":153},[139,63044,2265],{"class":145},[139,63046,410],{"class":153},[139,63048,53729],{"class":149},[139,63050,53758],{"class":153},[139,63052,62965],{"class":153},[139,63054,3591],{"class":145},[139,63056,63057,63060,63062,63064],{"class":141,"line":12015},[139,63058,63059],{"class":153},"            border-top",[139,63061,2265],{"class":145},[139,63063,2634],{"class":153},[139,63065,3591],{"class":145},[139,63067,63068,63071,63073,63076],{"class":141,"line":12038},[139,63069,63070],{"class":153},"            background",[139,63072,2265],{"class":145},[139,63074,63075],{"class":153},"#fff",[139,63077,3591],{"class":145},[139,63079,63080],{"class":141,"line":12062},[139,63081,4812],{"class":145},[139,63083,63084],{"class":141,"line":12067},[139,63085,843],{"emptyLinePlaceholder":842},[139,63087,63088,63090,63092],{"class":141,"line":12072},[139,63089,62980],{"class":781},[139,63091,3696],{"class":53538},[139,63093,17840],{"class":145},[139,63095,63096,63098,63100,63103],{"class":141,"line":12077},[139,63097,53709],{"class":153},[139,63099,2265],{"class":145},[139,63101,63102],{"class":153},"block",[139,63104,3591],{"class":145},[139,63106,63107,63109,63111,63113,63115,63118,63120],{"class":141,"line":12086},[139,63108,53683],{"class":153},[139,63110,2265],{"class":145},[139,63112,2782],{"class":153},[139,63114,53729],{"class":149},[139,63116,63117],{"class":153}," 15",[139,63119,53729],{"class":149},[139,63121,3591],{"class":145},[139,63123,63124,63126,63128,63130,63132],{"class":141,"line":12091},[139,63125,62883],{"class":153},[139,63127,2265],{"class":145},[139,63129,2934],{"class":153},[139,63131,53729],{"class":149},[139,63133,3591],{"class":145},[139,63135,63136,63139,63141,63144],{"class":141,"line":12097},[139,63137,63138],{"class":153},"            color",[139,63140,2265],{"class":145},[139,63142,63143],{"class":153},"#424242",[139,63145,3591],{"class":145},[139,63147,63148,63151,63153,63155],{"class":141,"line":12118},[139,63149,63150],{"class":153},"            text-decoration",[139,63152,2265],{"class":145},[139,63154,56971],{"class":153},[139,63156,3591],{"class":145},[139,63158,63159],{"class":141,"line":12124},[139,63160,4812],{"class":145},[139,63162,63163],{"class":141,"line":12138},[139,63164,843],{"emptyLinePlaceholder":842},[139,63166,63167,63169,63171,63174],{"class":141,"line":12144},[139,63168,62980],{"class":781},[139,63170,3696],{"class":53538},[139,63172,63173],{"class":781},":hover",[139,63175,17840],{"class":145},[139,63177,63178,63180,63182,63185],{"class":141,"line":12171},[139,63179,53877],{"class":153},[139,63181,2265],{"class":145},[139,63183,63184],{"class":153},"#eee",[139,63186,3591],{"class":145},[139,63188,63189],{"class":141,"line":12180},[139,63190,4812],{"class":145},[139,63192,63193,63195,63197],{"class":141,"line":12186},[139,63194,54013],{"class":145},[139,63196,2348],{"class":53538},[139,63198,53545],{"class":145},[139,63200,63201],{"class":141,"line":12194},[139,63202,843],{"emptyLinePlaceholder":842},[139,63204,63205,63207,63209],{"class":141,"line":12199},[139,63206,54022],{"class":145},[139,63208,53572],{"class":53538},[139,63210,53545],{"class":145},[139,63212,63213],{"class":141,"line":18871},[139,63214,843],{"emptyLinePlaceholder":842},[139,63216,63217,63219,63221],{"class":141,"line":18877},[139,63218,796],{"class":145},[139,63220,54037],{"class":53538},[139,63222,53545],{"class":145},[139,63224,63225,63227,63229,63231,63233,63236],{"class":141,"line":18900},[139,63226,53579],{"class":145},[139,63228,53848],{"class":53538},[139,63230,55721],{"class":781},[139,63232,150],{"class":145},[139,63234,63235],{"class":160},"\"mi\"",[139,63237,53545],{"class":145},[139,63239,63240,63242,63244,63246,63248,63251,63254,63256,63259],{"class":141,"line":18906},[139,63241,57536],{"class":145},[139,63243,199],{"class":53538},[139,63245,56058],{"class":781},[139,63247,150],{"class":145},[139,63249,63250],{"class":160},"\"search\"",[139,63252,63253],{"class":781}," placeholder",[139,63255,150],{"class":145},[139,63257,63258],{"class":160},"\"小米笔记本\"",[139,63260,53545],{"class":145},[139,63262,63263,63265,63267,63269,63271,63274],{"class":141,"line":18929},[139,63264,57536],{"class":145},[139,63266,3437],{"class":53538},[139,63268,55721],{"class":781},[139,63270,150],{"class":145},[139,63272,63273],{"class":160},"\"result-list\"",[139,63275,53545],{"class":145},[139,63277,63278,63281,63283,63286,63288,63291,63293,63296,63299,63301,63303,63305],{"class":141,"line":18943},[139,63279,63280],{"class":145},"            \u003C",[139,63282,1763],{"class":53538},[139,63284,63285],{"class":145},">\u003C",[139,63287,2680],{"class":53538},[139,63289,63290],{"class":781}," href",[139,63292,150],{"class":145},[139,63294,63295],{"class":160},"\"#\"",[139,63297,63298],{"class":145},">全部商品\u003C\u002F",[139,63300,2680],{"class":53538},[139,63302,57548],{"class":145},[139,63304,1763],{"class":53538},[139,63306,53545],{"class":145},[139,63308,63309,63311,63313,63315,63317,63319,63321,63323,63326,63328,63330,63332],{"class":141,"line":18963},[139,63310,63280],{"class":145},[139,63312,1763],{"class":53538},[139,63314,63285],{"class":145},[139,63316,2680],{"class":53538},[139,63318,63290],{"class":781},[139,63320,150],{"class":145},[139,63322,63295],{"class":160},[139,63324,63325],{"class":145},">小米11\u003C\u002F",[139,63327,2680],{"class":53538},[139,63329,57548],{"class":145},[139,63331,1763],{"class":53538},[139,63333,53545],{"class":145},[139,63335,63336,63338,63340,63342,63344,63346,63348,63350,63353,63355,63357,63359],{"class":141,"line":18969},[139,63337,63280],{"class":145},[139,63339,1763],{"class":53538},[139,63341,63285],{"class":145},[139,63343,2680],{"class":53538},[139,63345,63290],{"class":781},[139,63347,150],{"class":145},[139,63349,63295],{"class":160},[139,63351,63352],{"class":145},">小米10S\u003C\u002F",[139,63354,2680],{"class":53538},[139,63356,57548],{"class":145},[139,63358,1763],{"class":53538},[139,63360,53545],{"class":145},[139,63362,63363,63365,63367,63369,63371,63373,63375,63377,63380,63382,63384,63386],{"class":141,"line":18980},[139,63364,63280],{"class":145},[139,63366,1763],{"class":53538},[139,63368,63285],{"class":145},[139,63370,2680],{"class":53538},[139,63372,63290],{"class":781},[139,63374,150],{"class":145},[139,63376,63295],{"class":160},[139,63378,63379],{"class":145},">小米笔记本\u003C\u002F",[139,63381,2680],{"class":53538},[139,63383,57548],{"class":145},[139,63385,1763],{"class":53538},[139,63387,53545],{"class":145},[139,63389,63390,63392,63394,63396,63398,63400,63402,63404,63407,63409,63411,63413],{"class":141,"line":19003},[139,63391,63280],{"class":145},[139,63393,1763],{"class":53538},[139,63395,63285],{"class":145},[139,63397,2680],{"class":53538},[139,63399,63290],{"class":781},[139,63401,150],{"class":145},[139,63403,63295],{"class":160},[139,63405,63406],{"class":145},">小米手机\u003C\u002F",[139,63408,2680],{"class":53538},[139,63410,57548],{"class":145},[139,63412,1763],{"class":53538},[139,63414,53545],{"class":145},[139,63416,63417,63419,63421,63423,63425,63427,63429,63431,63434,63436,63438,63440],{"class":141,"line":19025},[139,63418,63280],{"class":145},[139,63420,1763],{"class":53538},[139,63422,63285],{"class":145},[139,63424,2680],{"class":53538},[139,63426,63290],{"class":781},[139,63428,150],{"class":145},[139,63430,63295],{"class":160},[139,63432,63433],{"class":145},">黑鲨4\u003C\u002F",[139,63435,2680],{"class":53538},[139,63437,57548],{"class":145},[139,63439,1763],{"class":53538},[139,63441,53545],{"class":145},[139,63443,63444,63446,63448,63450,63452,63454,63456,63458,63461,63463,63465,63467],{"class":141,"line":19030},[139,63445,63280],{"class":145},[139,63447,1763],{"class":53538},[139,63449,63285],{"class":145},[139,63451,2680],{"class":53538},[139,63453,63290],{"class":781},[139,63455,150],{"class":145},[139,63457,63295],{"class":160},[139,63459,63460],{"class":145},">空调\u003C\u002F",[139,63462,2680],{"class":53538},[139,63464,57548],{"class":145},[139,63466,1763],{"class":53538},[139,63468,53545],{"class":145},[139,63470,63471,63474,63476],{"class":141,"line":19036},[139,63472,63473],{"class":145},"        \u003C\u002F",[139,63475,3437],{"class":53538},[139,63477,53545],{"class":145},[139,63479,63480,63482,63484],{"class":141,"line":19050},[139,63481,54013],{"class":145},[139,63483,53848],{"class":53538},[139,63485,53545],{"class":145},[139,63487,63488,63490,63492],{"class":141,"line":19063},[139,63489,53579],{"class":145},[139,63491,54050],{"class":53538},[139,63493,53545],{"class":145},[139,63495,63496],{"class":141,"line":19068},[139,63497,63498],{"class":2512},"        \u002F\u002F 1. 获取元素\n",[139,63500,63501,63504,63506,63508,63510,63512,63514,63517],{"class":141,"line":19082},[139,63502,63503],{"class":149},"        const",[139,63505,62838],{"class":153},[139,63507,15836],{"class":149},[139,63509,56630],{"class":145},[139,63511,56633],{"class":781},[139,63513,157],{"class":145},[139,63515,63516],{"class":160},"'[type=search]'",[139,63518,164],{"class":145},[139,63520,63521,63523,63526,63528,63530,63532,63534,63537],{"class":141,"line":19087},[139,63522,63503],{"class":149},[139,63524,63525],{"class":153}," ul",[139,63527,15836],{"class":149},[139,63529,56630],{"class":145},[139,63531,56633],{"class":781},[139,63533,157],{"class":145},[139,63535,63536],{"class":160},"'.result-list'",[139,63538,164],{"class":145},[139,63540,63541],{"class":141,"line":19093},[139,63542,63543],{"class":2512},"        \u002F\u002F console.log(input)\n",[139,63545,63546],{"class":141,"line":19098},[139,63547,63548],{"class":2512},"        \u002F\u002F 2. 监听事件 获得焦点\n",[139,63550,63551,63554,63556,63558,63561,63563,63565],{"class":141,"line":19112},[139,63552,63553],{"class":145},"        input.",[139,63555,60046],{"class":781},[139,63557,157],{"class":145},[139,63559,63560],{"class":160},"'focus'",[139,63562,413],{"class":145},[139,63564,56683],{"class":149},[139,63566,56686],{"class":145},[139,63568,63569],{"class":141,"line":19117},[139,63570,63571],{"class":2512},"            \u002F\u002F ul显示\n",[139,63573,63574,63577,63579],{"class":141,"line":19122},[139,63575,63576],{"class":145},"            ul.style.display ",[139,63578,150],{"class":149},[139,63580,63581],{"class":160}," 'block'\n",[139,63583,63584],{"class":141,"line":19136},[139,63585,63586],{"class":2512},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[139,63588,63589,63592,63594,63596,63599],{"class":141,"line":19148},[139,63590,63591],{"class":145},"            input.classList.",[139,63593,7608],{"class":781},[139,63595,157],{"class":145},[139,63597,63598],{"class":160},"'search'",[139,63600,164],{"class":145},[139,63602,63603],{"class":141,"line":19153},[139,63604,63605],{"class":145},"        })\n",[139,63607,63608],{"class":141,"line":19166},[139,63609,63610],{"class":2512},"        \u002F\u002F 3. 监听事件 失去焦点\n",[139,63612,63613,63615,63617,63619,63622,63624,63626],{"class":141,"line":19171},[139,63614,63553],{"class":145},[139,63616,60046],{"class":781},[139,63618,157],{"class":145},[139,63620,63621],{"class":160},"'blur'",[139,63623,413],{"class":145},[139,63625,56683],{"class":149},[139,63627,56686],{"class":145},[139,63629,63630,63632,63634],{"class":141,"line":19176},[139,63631,63576],{"class":145},[139,63633,150],{"class":149},[139,63635,63636],{"class":160}," 'none'\n",[139,63638,63639,63641,63643,63645,63647],{"class":141,"line":19181},[139,63640,63591],{"class":145},[139,63642,59240],{"class":781},[139,63644,157],{"class":145},[139,63646,63598],{"class":160},[139,63648,164],{"class":145},[139,63650,63651],{"class":141,"line":19194},[139,63652,63605],{"class":145},[139,63654,63655,63657,63659],{"class":141,"line":19199},[139,63656,54013],{"class":145},[139,63658,54050],{"class":53538},[139,63660,53545],{"class":145},[139,63662,63663,63665,63667],{"class":141,"line":34880},[139,63664,54022],{"class":145},[139,63666,54037],{"class":53538},[139,63668,53545],{"class":145},[139,63670,63671],{"class":141,"line":34886},[139,63672,843],{"emptyLinePlaceholder":842},[139,63674,63675,63677,63679],{"class":141,"line":34892},[139,63676,54022],{"class":145},[139,63678,52873],{"class":53538},[139,63680,53545],{"class":145},[24265,63682,63684],{"id":63683},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63686,63687],{},"评论字数统计案例",[19,63689,63690],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63692,63693],{},"牢记focus伪类选择器",[53582,63695],{"charSet":63696},"UTF-8",[53582,63698],{"name":63699,"content":63700},"viewport","width=device-width, initial-scale=1.0",[53645,63702,63703],{},"Document",[2348,63705,63706],{},"\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",[199,63708],{"type":645},[3437,63710,63711,63714],{},[1763,63712,63713],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1763,63715,63716],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[130,63718,63720],{"className":52871,"code":63719,"language":52873,"meta":135,"style":135},"\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",[50,63721,63722,63732,63746,63750,63758,63772,63792,63812,63825,63833,63840,63853,63867,63877,63887,63891,63895,63902,63914,63926,63938,63950,63979,63992,63996,64000,64009,64020,64032,64043,64054,64066,64077,64089,64105,64117,64121,64125,64136,64147,64157,64169,64173,64177,64185,64196,64206,64217,64229,64242,64254,64266,64270,64274,64283,64295,64306,64319,64330,64344,64348,64352,64359,64371,64383,64393,64397,64401,64410,64422,64432,64436,64440,64451,64461,64480,64493,64497,64501,64511,64521,64525,64529,64540,64551,64563,64575,64579,64583,64594,64605,64619,64623,64627,64638,64648,64660,64664,64672,64680,64684,64692,64707,64726,64766,64779,64787,64801,64821,64829,64844,64867,64885,64900,64919,64939,64959,64967,64975,64983,64991,65011,65031,65036,65053,65062,65066,65071,65087,65095,65099,65104,65121,65126,65151,65155,65159,65164,65169,65177,65185,65189],{"__ignoreMap":135},[139,63723,63724,63726,63728,63730],{"class":141,"line":142},[139,63725,53535],{"class":145},[139,63727,53539],{"class":53538},[139,63729,53542],{"class":781},[139,63731,53545],{"class":145},[139,63733,63734,63736,63738,63740,63742,63744],{"class":141,"line":210},[139,63735,796],{"class":145},[139,63737,52873],{"class":53538},[139,63739,53554],{"class":781},[139,63741,150],{"class":145},[139,63743,53559],{"class":160},[139,63745,53545],{"class":145},[139,63747,63748],{"class":141,"line":254},[139,63749,843],{"emptyLinePlaceholder":842},[139,63751,63752,63754,63756],{"class":141,"line":262},[139,63753,796],{"class":145},[139,63755,53572],{"class":53538},[139,63757,53545],{"class":145},[139,63759,63760,63762,63764,63766,63768,63770],{"class":141,"line":313},[139,63761,54380],{"class":145},[139,63763,53582],{"class":53538},[139,63765,53585],{"class":781},[139,63767,150],{"class":145},[139,63769,53590],{"class":160},[139,63771,53545],{"class":145},[139,63773,63774,63776,63778,63780,63782,63784,63786,63788,63790],{"class":141,"line":462},[139,63775,54380],{"class":145},[139,63777,53582],{"class":53538},[139,63779,53601],{"class":781},[139,63781,150],{"class":145},[139,63783,53606],{"class":160},[139,63785,53609],{"class":781},[139,63787,150],{"class":145},[139,63789,53614],{"class":160},[139,63791,53545],{"class":145},[139,63793,63794,63796,63798,63800,63802,63804,63806,63808,63810],{"class":141,"line":474},[139,63795,54380],{"class":145},[139,63797,53582],{"class":53538},[139,63799,17189],{"class":781},[139,63801,150],{"class":145},[139,63803,53629],{"class":160},[139,63805,53609],{"class":781},[139,63807,150],{"class":145},[139,63809,53636],{"class":160},[139,63811,53545],{"class":145},[139,63813,63814,63816,63818,63821,63823],{"class":141,"line":484},[139,63815,54380],{"class":145},[139,63817,53645],{"class":53538},[139,63819,63820],{"class":145},">评论回车发布\u003C\u002F",[139,63822,53645],{"class":53538},[139,63824,53545],{"class":145},[139,63826,63827,63829,63831],{"class":141,"line":989},[139,63828,54380],{"class":145},[139,63830,2348],{"class":53538},[139,63832,53545],{"class":145},[139,63834,63835,63838],{"class":141,"line":994},[139,63836,63837],{"class":781},"    .wrapper",[139,63839,17840],{"class":145},[139,63841,63842,63845,63847,63849,63851],{"class":141,"line":999},[139,63843,63844],{"class":153},"      min-width",[139,63846,2265],{"class":145},[139,63848,6267],{"class":153},[139,63850,53729],{"class":149},[139,63852,3591],{"class":145},[139,63854,63855,63858,63860,63863,63865],{"class":141,"line":1006},[139,63856,63857],{"class":153},"      max-width",[139,63859,2265],{"class":145},[139,63861,63862],{"class":153},"800",[139,63864,53729],{"class":149},[139,63866,3591],{"class":145},[139,63868,63869,63871,63873,63875],{"class":141,"line":1027},[139,63870,57243],{"class":153},[139,63872,2265],{"class":145},[139,63874,53714],{"class":153},[139,63876,3591],{"class":145},[139,63878,63879,63881,63883,63885],{"class":141,"line":1040},[139,63880,57254],{"class":153},[139,63882,2265],{"class":145},[139,63884,53817],{"class":153},[139,63886,3591],{"class":145},[139,63888,63889],{"class":141,"line":2160},[139,63890,4472],{"class":145},[139,63892,63893],{"class":141,"line":2188},[139,63894,843],{"emptyLinePlaceholder":842},[139,63896,63897,63900],{"class":141,"line":3944},[139,63898,63899],{"class":781},"    .avatar",[139,63901,17840],{"class":145},[139,63903,63904,63906,63908,63910,63912],{"class":141,"line":3963},[139,63905,57005],{"class":153},[139,63907,2265],{"class":145},[139,63909,3042],{"class":153},[139,63911,53729],{"class":149},[139,63913,3591],{"class":145},[139,63915,63916,63918,63920,63922,63924],{"class":141,"line":3968},[139,63917,57019],{"class":153},[139,63919,2265],{"class":145},[139,63921,3042],{"class":153},[139,63923,53729],{"class":149},[139,63925,3591],{"class":145},[139,63927,63928,63930,63932,63934,63936],{"class":141,"line":3982},[139,63929,57368],{"class":153},[139,63931,2265],{"class":145},[139,63933,3091],{"class":153},[139,63935,2766],{"class":149},[139,63937,3591],{"class":145},[139,63939,63940,63943,63945,63948],{"class":141,"line":3987},[139,63941,63942],{"class":153},"      overflow",[139,63944,2265],{"class":145},[139,63946,63947],{"class":153},"hidden",[139,63949,3591],{"class":145},[139,63951,63952,63955,63957,63960,63962,63965,63967,63970,63972,63974,63977],{"class":141,"line":4014},[139,63953,63954],{"class":153},"      background",[139,63956,2265],{"class":145},[139,63958,63959],{"class":153},"url",[139,63961,157],{"class":145},[139,63963,63964],{"class":2111},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[139,63966,2120],{"class":145},[139,63968,63969],{"class":153},"no-repeat",[139,63971,19411],{"class":153},[139,63973,27241],{"class":145},[139,63975,63976],{"class":153},"cover",[139,63978,3591],{"class":145},[139,63980,63981,63984,63986,63988,63990],{"class":141,"line":4019},[139,63982,63983],{"class":153},"      margin-right",[139,63985,2265],{"class":145},[139,63987,3135],{"class":153},[139,63989,53729],{"class":149},[139,63991,3591],{"class":145},[139,63993,63994],{"class":141,"line":4036},[139,63995,4472],{"class":145},[139,63997,63998],{"class":141,"line":4041},[139,63999,843],{"emptyLinePlaceholder":842},[139,64001,64002,64004,64007],{"class":141,"line":4046},[139,64003,63837],{"class":781},[139,64005,64006],{"class":53538}," textarea",[139,64008,17840],{"class":145},[139,64010,64011,64014,64016,64018],{"class":141,"line":4051},[139,64012,64013],{"class":153},"      outline",[139,64015,2265],{"class":145},[139,64017,56971],{"class":153},[139,64019,3591],{"class":145},[139,64021,64022,64025,64027,64030],{"class":141,"line":4065},[139,64023,64024],{"class":153},"      border-color",[139,64026,2265],{"class":145},[139,64028,64029],{"class":153},"transparent",[139,64031,3591],{"class":145},[139,64033,64034,64037,64039,64041],{"class":141,"line":4070},[139,64035,64036],{"class":153},"      resize",[139,64038,2265],{"class":145},[139,64040,56971],{"class":153},[139,64042,3591],{"class":145},[139,64044,64045,64047,64049,64052],{"class":141,"line":4860},[139,64046,63954],{"class":153},[139,64048,2265],{"class":145},[139,64050,64051],{"class":153},"#f5f5f5",[139,64053,3591],{"class":145},[139,64055,64056,64058,64060,64062,64064],{"class":141,"line":4874},[139,64057,57368],{"class":153},[139,64059,2265],{"class":145},[139,64061,1476],{"class":153},[139,64063,53729],{"class":149},[139,64065,3591],{"class":145},[139,64067,64068,64071,64073,64075],{"class":141,"line":4882},[139,64069,64070],{"class":153},"      flex",[139,64072,2265],{"class":145},[139,64074,410],{"class":153},[139,64076,3591],{"class":145},[139,64078,64079,64081,64083,64085,64087],{"class":141,"line":4887},[139,64080,56929],{"class":153},[139,64082,2265],{"class":145},[139,64084,536],{"class":153},[139,64086,53729],{"class":149},[139,64088,3591],{"class":145},[139,64090,64091,64094,64096,64098,64101,64103],{"class":141,"line":4893},[139,64092,64093],{"class":153},"      transition",[139,64095,2265],{"class":145},[139,64097,30381],{"class":153},[139,64099,64100],{"class":153}," 0.5",[139,64102,3130],{"class":149},[139,64104,3591],{"class":145},[139,64106,64107,64109,64111,64113,64115],{"class":141,"line":4899},[139,64108,57019],{"class":153},[139,64110,2265],{"class":145},[139,64112,3383],{"class":153},[139,64114,53729],{"class":149},[139,64116,3591],{"class":145},[139,64118,64119],{"class":141,"line":4904},[139,64120,4472],{"class":145},[139,64122,64123],{"class":141,"line":10222},[139,64124,843],{"emptyLinePlaceholder":842},[139,64126,64127,64129,64131,64134],{"class":141,"line":10246},[139,64128,63837],{"class":781},[139,64130,64006],{"class":53538},[139,64132,64133],{"class":781},":focus",[139,64135,17840],{"class":145},[139,64137,64138,64140,64142,64145],{"class":141,"line":10251},[139,64139,64024],{"class":153},[139,64141,2265],{"class":145},[139,64143,64144],{"class":153},"#e4e4e4",[139,64146,3591],{"class":145},[139,64148,64149,64151,64153,64155],{"class":141,"line":10257},[139,64150,63954],{"class":153},[139,64152,2265],{"class":145},[139,64154,63075],{"class":153},[139,64156,3591],{"class":145},[139,64158,64159,64161,64163,64165,64167],{"class":141,"line":10284},[139,64160,57019],{"class":153},[139,64162,2265],{"class":145},[139,64164,3091],{"class":153},[139,64166,53729],{"class":149},[139,64168,3591],{"class":145},[139,64170,64171],{"class":141,"line":10289},[139,64172,4472],{"class":145},[139,64174,64175],{"class":141,"line":10295},[139,64176,843],{"emptyLinePlaceholder":842},[139,64178,64179,64181,64183],{"class":141,"line":10307},[139,64180,63837],{"class":781},[139,64182,59701],{"class":53538},[139,64184,17840],{"class":145},[139,64186,64187,64189,64191,64194],{"class":141,"line":10319},[139,64188,63954],{"class":153},[139,64190,2265],{"class":145},[139,64192,64193],{"class":153},"#00aeec",[139,64195,3591],{"class":145},[139,64197,64198,64200,64202,64204],{"class":141,"line":10331},[139,64199,59650],{"class":153},[139,64201,2265],{"class":145},[139,64203,63075],{"class":153},[139,64205,3591],{"class":145},[139,64207,64208,64211,64213,64215],{"class":141,"line":11990},[139,64209,64210],{"class":153},"      border",[139,64212,2265],{"class":145},[139,64214,56971],{"class":153},[139,64216,3591],{"class":145},[139,64218,64219,64221,64223,64225,64227],{"class":141,"line":12015},[139,64220,57368],{"class":153},[139,64222,2265],{"class":145},[139,64224,1476],{"class":153},[139,64226,53729],{"class":149},[139,64228,3591],{"class":145},[139,64230,64231,64234,64236,64238,64240],{"class":141,"line":12038},[139,64232,64233],{"class":153},"      margin-left",[139,64235,2265],{"class":145},[139,64237,536],{"class":153},[139,64239,53729],{"class":149},[139,64241,3591],{"class":145},[139,64243,64244,64246,64248,64250,64252],{"class":141,"line":12062},[139,64245,57005],{"class":153},[139,64247,2265],{"class":145},[139,64249,2794],{"class":153},[139,64251,53729],{"class":149},[139,64253,3591],{"class":145},[139,64255,64256,64259,64261,64264],{"class":141,"line":12067},[139,64257,64258],{"class":153},"      cursor",[139,64260,2265],{"class":145},[139,64262,64263],{"class":153},"pointer",[139,64265,3591],{"class":145},[139,64267,64268],{"class":141,"line":12072},[139,64269,4472],{"class":145},[139,64271,64272],{"class":141,"line":12077},[139,64273,843],{"emptyLinePlaceholder":842},[139,64275,64276,64278,64281],{"class":141,"line":12086},[139,64277,63837],{"class":781},[139,64279,64280],{"class":781}," .total",[139,64282,17840],{"class":145},[139,64284,64285,64287,64289,64291,64293],{"class":141,"line":12091},[139,64286,63983],{"class":153},[139,64288,2265],{"class":145},[139,64290,3047],{"class":153},[139,64292,53729],{"class":149},[139,64294,3591],{"class":145},[139,64296,64297,64299,64301,64304],{"class":141,"line":12097},[139,64298,59650],{"class":153},[139,64300,2265],{"class":145},[139,64302,64303],{"class":153},"#999",[139,64305,3591],{"class":145},[139,64307,64308,64311,64313,64315,64317],{"class":141,"line":12118},[139,64309,64310],{"class":153},"      margin-top",[139,64312,2265],{"class":145},[139,64314,1481],{"class":153},[139,64316,53729],{"class":149},[139,64318,3591],{"class":145},[139,64320,64321,64324,64326,64328],{"class":141,"line":12124},[139,64322,64323],{"class":153},"      opacity",[139,64325,2265],{"class":145},[139,64327,2634],{"class":153},[139,64329,3591],{"class":145},[139,64331,64332,64334,64336,64338,64340,64342],{"class":141,"line":12138},[139,64333,64093],{"class":153},[139,64335,2265],{"class":145},[139,64337,30381],{"class":153},[139,64339,64100],{"class":153},[139,64341,3130],{"class":149},[139,64343,3591],{"class":145},[139,64345,64346],{"class":141,"line":12144},[139,64347,4472],{"class":145},[139,64349,64350],{"class":141,"line":12171},[139,64351,843],{"emptyLinePlaceholder":842},[139,64353,64354,64357],{"class":141,"line":12180},[139,64355,64356],{"class":781},"    .list",[139,64358,17840],{"class":145},[139,64360,64361,64363,64365,64367,64369],{"class":141,"line":12186},[139,64362,63844],{"class":153},[139,64364,2265],{"class":145},[139,64366,6267],{"class":153},[139,64368,53729],{"class":149},[139,64370,3591],{"class":145},[139,64372,64373,64375,64377,64379,64381],{"class":141,"line":12194},[139,64374,63857],{"class":153},[139,64376,2265],{"class":145},[139,64378,63862],{"class":153},[139,64380,53729],{"class":149},[139,64382,3591],{"class":145},[139,64384,64385,64387,64389,64391],{"class":141,"line":12199},[139,64386,57243],{"class":153},[139,64388,2265],{"class":145},[139,64390,53714],{"class":153},[139,64392,3591],{"class":145},[139,64394,64395],{"class":141,"line":18871},[139,64396,4472],{"class":145},[139,64398,64399],{"class":141,"line":18877},[139,64400,843],{"emptyLinePlaceholder":842},[139,64402,64403,64405,64408],{"class":141,"line":18900},[139,64404,64356],{"class":781},[139,64406,64407],{"class":781}," .item",[139,64409,17840],{"class":145},[139,64411,64412,64414,64416,64418,64420],{"class":141,"line":18906},[139,64413,57005],{"class":153},[139,64415,2265],{"class":145},[139,64417,1017],{"class":153},[139,64419,2766],{"class":149},[139,64421,3591],{"class":145},[139,64423,64424,64426,64428,64430],{"class":141,"line":18929},[139,64425,57243],{"class":153},[139,64427,2265],{"class":145},[139,64429,53714],{"class":153},[139,64431,3591],{"class":145},[139,64433,64434],{"class":141,"line":18943},[139,64435,4472],{"class":145},[139,64437,64438],{"class":141,"line":18963},[139,64439,843],{"emptyLinePlaceholder":842},[139,64441,64442,64444,64446,64449],{"class":141,"line":18969},[139,64443,64356],{"class":781},[139,64445,64407],{"class":781},[139,64447,64448],{"class":781}," .info",[139,64450,17840],{"class":145},[139,64452,64453,64455,64457,64459],{"class":141,"line":18980},[139,64454,64070],{"class":153},[139,64456,2265],{"class":145},[139,64458,410],{"class":153},[139,64460,3591],{"class":145},[139,64462,64463,64466,64468,64470,64472,64475,64478],{"class":141,"line":19003},[139,64464,64465],{"class":153},"      border-bottom",[139,64467,2265],{"class":145},[139,64469,410],{"class":153},[139,64471,53729],{"class":149},[139,64473,64474],{"class":153}," dashed",[139,64476,64477],{"class":153}," #e4e4e4",[139,64479,3591],{"class":145},[139,64481,64482,64485,64487,64489,64491],{"class":141,"line":19025},[139,64483,64484],{"class":153},"      padding-bottom",[139,64486,2265],{"class":145},[139,64488,536],{"class":153},[139,64490,53729],{"class":149},[139,64492,3591],{"class":145},[139,64494,64495],{"class":141,"line":19030},[139,64496,4472],{"class":145},[139,64498,64499],{"class":141,"line":19036},[139,64500,843],{"emptyLinePlaceholder":842},[139,64502,64503,64505,64507,64509],{"class":141,"line":19050},[139,64504,64356],{"class":781},[139,64506,64407],{"class":781},[139,64508,9099],{"class":53538},[139,64510,17840],{"class":145},[139,64512,64513,64515,64517,64519],{"class":141,"line":19063},[139,64514,56940],{"class":153},[139,64516,2265],{"class":145},[139,64518,2634],{"class":153},[139,64520,3591],{"class":145},[139,64522,64523],{"class":141,"line":19068},[139,64524,4472],{"class":145},[139,64526,64527],{"class":141,"line":19082},[139,64528,843],{"emptyLinePlaceholder":842},[139,64530,64531,64533,64535,64538],{"class":141,"line":19087},[139,64532,64356],{"class":781},[139,64534,64407],{"class":781},[139,64536,64537],{"class":781}," .name",[139,64539,17840],{"class":145},[139,64541,64542,64544,64546,64549],{"class":141,"line":19093},[139,64543,59650],{"class":153},[139,64545,2265],{"class":145},[139,64547,64548],{"class":153},"#FB7299",[139,64550,3591],{"class":145},[139,64552,64553,64555,64557,64559,64561],{"class":141,"line":19098},[139,64554,57156],{"class":153},[139,64556,2265],{"class":145},[139,64558,2984],{"class":153},[139,64560,53729],{"class":149},[139,64562,3591],{"class":145},[139,64564,64565,64568,64570,64573],{"class":141,"line":19112},[139,64566,64567],{"class":153},"      font-weight",[139,64569,2265],{"class":145},[139,64571,64572],{"class":153},"bold",[139,64574,3591],{"class":145},[139,64576,64577],{"class":141,"line":19117},[139,64578,4472],{"class":145},[139,64580,64581],{"class":141,"line":19122},[139,64582,843],{"emptyLinePlaceholder":842},[139,64584,64585,64587,64589,64592],{"class":141,"line":19136},[139,64586,64356],{"class":781},[139,64588,64407],{"class":781},[139,64590,64591],{"class":781}," .text",[139,64593,17840],{"class":145},[139,64595,64596,64598,64600,64603],{"class":141,"line":19148},[139,64597,59650],{"class":153},[139,64599,2265],{"class":145},[139,64601,64602],{"class":153},"#333",[139,64604,3591],{"class":145},[139,64606,64607,64609,64611,64613,64615,64617],{"class":141,"line":19153},[139,64608,56929],{"class":153},[139,64610,2265],{"class":145},[139,64612,536],{"class":153},[139,64614,53729],{"class":149},[139,64616,799],{"class":153},[139,64618,3591],{"class":145},[139,64620,64621],{"class":141,"line":19166},[139,64622,4472],{"class":145},[139,64624,64625],{"class":141,"line":19171},[139,64626,843],{"emptyLinePlaceholder":842},[139,64628,64629,64631,64633,64636],{"class":141,"line":19176},[139,64630,64356],{"class":781},[139,64632,64407],{"class":781},[139,64634,64635],{"class":781}," .time",[139,64637,17840],{"class":145},[139,64639,64640,64642,64644,64646],{"class":141,"line":19181},[139,64641,59650],{"class":153},[139,64643,2265],{"class":145},[139,64645,64303],{"class":153},[139,64647,3591],{"class":145},[139,64649,64650,64652,64654,64656,64658],{"class":141,"line":19194},[139,64651,57156],{"class":153},[139,64653,2265],{"class":145},[139,64655,2934],{"class":153},[139,64657,53729],{"class":149},[139,64659,3591],{"class":145},[139,64661,64662],{"class":141,"line":19199},[139,64663,4472],{"class":145},[139,64665,64666,64668,64670],{"class":141,"line":34880},[139,64667,54652],{"class":145},[139,64669,2348],{"class":53538},[139,64671,53545],{"class":145},[139,64673,64674,64676,64678],{"class":141,"line":34886},[139,64675,54022],{"class":145},[139,64677,53572],{"class":53538},[139,64679,53545],{"class":145},[139,64681,64682],{"class":141,"line":34892},[139,64683,843],{"emptyLinePlaceholder":842},[139,64685,64686,64688,64690],{"class":141,"line":34898},[139,64687,796],{"class":145},[139,64689,54037],{"class":53538},[139,64691,53545],{"class":145},[139,64693,64694,64696,64698,64700,64702,64705],{"class":141,"line":34904},[139,64695,54380],{"class":145},[139,64697,53848],{"class":53538},[139,64699,55721],{"class":781},[139,64701,150],{"class":145},[139,64703,64704],{"class":160},"\"wrapper\"",[139,64706,53545],{"class":145},[139,64708,64709,64711,64713,64715,64717,64720,64722,64724],{"class":141,"line":34915},[139,64710,53579],{"class":145},[139,64712,2879],{"class":53538},[139,64714,55721],{"class":781},[139,64716,150],{"class":145},[139,64718,64719],{"class":160},"\"avatar\"",[139,64721,57548],{"class":145},[139,64723,2879],{"class":53538},[139,64725,53545],{"class":145},[139,64727,64728,64730,64732,64734,64736,64739,64741,64743,64746,64748,64750,64752,64755,64757,64760,64762,64764],{"class":141,"line":34921},[139,64729,53579],{"class":145},[139,64731,56522],{"class":53538},[139,64733,17228],{"class":781},[139,64735,150],{"class":145},[139,64737,64738],{"class":160},"\"tx\"",[139,64740,63253],{"class":781},[139,64742,150],{"class":145},[139,64744,64745],{"class":160},"\"发一条友善的评论\"",[139,64747,56545],{"class":781},[139,64749,150],{"class":145},[139,64751,5982],{"class":160},[139,64753,64754],{"class":781}," maxlength",[139,64756,150],{"class":145},[139,64758,64759],{"class":160},"\"200\"",[139,64761,57548],{"class":145},[139,64763,56522],{"class":53538},[139,64765,53545],{"class":145},[139,64767,64768,64770,64772,64775,64777],{"class":141,"line":34941},[139,64769,53579],{"class":145},[139,64771,56121],{"class":53538},[139,64773,64774],{"class":145},">发布\u003C\u002F",[139,64776,56121],{"class":53538},[139,64778,53545],{"class":145},[139,64780,64781,64783,64785],{"class":141,"line":34947},[139,64782,54652],{"class":145},[139,64784,53848],{"class":53538},[139,64786,53545],{"class":145},[139,64788,64789,64791,64793,64795,64797,64799],{"class":141,"line":34958},[139,64790,54380],{"class":145},[139,64792,53848],{"class":53538},[139,64794,55721],{"class":781},[139,64796,150],{"class":145},[139,64798,64704],{"class":160},[139,64800,53545],{"class":145},[139,64802,64803,64805,64807,64809,64811,64814,64817,64819],{"class":141,"line":34964},[139,64804,53579],{"class":145},[139,64806,139],{"class":53538},[139,64808,55721],{"class":781},[139,64810,150],{"class":145},[139,64812,64813],{"class":160},"\"total\"",[139,64815,64816],{"class":145},">0\u002F200字\u003C\u002F",[139,64818,139],{"class":53538},[139,64820,53545],{"class":145},[139,64822,64823,64825,64827],{"class":141,"line":34970},[139,64824,54652],{"class":145},[139,64826,53848],{"class":53538},[139,64828,53545],{"class":145},[139,64830,64831,64833,64835,64837,64839,64842],{"class":141,"line":34976},[139,64832,54380],{"class":145},[139,64834,53848],{"class":53538},[139,64836,55721],{"class":781},[139,64838,150],{"class":145},[139,64840,64841],{"class":160},"\"list\"",[139,64843,53545],{"class":145},[139,64845,64846,64848,64850,64852,64854,64857,64860,64862,64865],{"class":141,"line":34982},[139,64847,53579],{"class":145},[139,64849,53848],{"class":53538},[139,64851,55721],{"class":781},[139,64853,150],{"class":145},[139,64855,64856],{"class":160},"\"item\"",[139,64858,64859],{"class":781}," style",[139,64861,150],{"class":145},[139,64863,64864],{"class":160},"\"display: none;\"",[139,64866,53545],{"class":145},[139,64868,64869,64871,64873,64875,64877,64879,64881,64883],{"class":141,"line":34988},[139,64870,57468],{"class":145},[139,64872,2879],{"class":53538},[139,64874,55721],{"class":781},[139,64876,150],{"class":145},[139,64878,64719],{"class":160},[139,64880,57548],{"class":145},[139,64882,2879],{"class":53538},[139,64884,53545],{"class":145},[139,64886,64887,64889,64891,64893,64895,64898],{"class":141,"line":34994},[139,64888,57468],{"class":145},[139,64890,53848],{"class":53538},[139,64892,55721],{"class":781},[139,64894,150],{"class":145},[139,64896,64897],{"class":160},"\"info\"",[139,64899,53545],{"class":145},[139,64901,64902,64904,64906,64908,64910,64912,64915,64917],{"class":141,"line":35000},[139,64903,57536],{"class":145},[139,64905,19],{"class":53538},[139,64907,55721],{"class":781},[139,64909,150],{"class":145},[139,64911,2262],{"class":160},[139,64913,64914],{"class":145},">清风徐来\u003C\u002F",[139,64916,19],{"class":53538},[139,64918,53545],{"class":145},[139,64920,64921,64923,64925,64927,64929,64932,64935,64937],{"class":141,"line":35020},[139,64922,57536],{"class":145},[139,64924,19],{"class":53538},[139,64926,55721],{"class":781},[139,64928,150],{"class":145},[139,64930,64931],{"class":160},"\"text\"",[139,64933,64934],{"class":145},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[139,64936,19],{"class":53538},[139,64938,53545],{"class":145},[139,64940,64941,64943,64945,64947,64949,64952,64955,64957],{"class":141,"line":35026},[139,64942,57536],{"class":145},[139,64944,19],{"class":53538},[139,64946,55721],{"class":781},[139,64948,150],{"class":145},[139,64950,64951],{"class":160},"\"time\"",[139,64953,64954],{"class":145},">2022-10-10 20:29:21\u003C\u002F",[139,64956,19],{"class":53538},[139,64958,53545],{"class":145},[139,64960,64961,64963,64965],{"class":141,"line":35042},[139,64962,57641],{"class":145},[139,64964,53848],{"class":53538},[139,64966,53545],{"class":145},[139,64968,64969,64971,64973],{"class":141,"line":35048},[139,64970,54013],{"class":145},[139,64972,53848],{"class":53538},[139,64974,53545],{"class":145},[139,64976,64977,64979,64981],{"class":141,"line":35062},[139,64978,54652],{"class":145},[139,64980,53848],{"class":53538},[139,64982,53545],{"class":145},[139,64984,64985,64987,64989],{"class":141,"line":35068},[139,64986,54380],{"class":145},[139,64988,54050],{"class":53538},[139,64990,53545],{"class":145},[139,64992,64993,64995,64998,65000,65002,65004,65006,65009],{"class":141,"line":35083},[139,64994,13494],{"class":149},[139,64996,64997],{"class":153}," tx",[139,64999,15836],{"class":149},[139,65001,56630],{"class":145},[139,65003,56633],{"class":781},[139,65005,157],{"class":145},[139,65007,65008],{"class":160},"'#tx'",[139,65010,164],{"class":145},[139,65012,65013,65015,65018,65020,65022,65024,65026,65029],{"class":141,"line":35089},[139,65014,13494],{"class":149},[139,65016,65017],{"class":153}," total",[139,65019,15836],{"class":149},[139,65021,56630],{"class":145},[139,65023,56633],{"class":781},[139,65025,157],{"class":145},[139,65027,65028],{"class":160},"'.total'",[139,65030,164],{"class":145},[139,65032,65033],{"class":141,"line":35098},[139,65034,65035],{"class":2512},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[139,65037,65038,65041,65043,65045,65047,65049,65051],{"class":141,"line":35104},[139,65039,65040],{"class":145},"    tx.",[139,65042,60046],{"class":781},[139,65044,157],{"class":145},[139,65046,63560],{"class":160},[139,65048,413],{"class":145},[139,65050,56683],{"class":149},[139,65052,56686],{"class":145},[139,65054,65055,65058,65060],{"class":141,"line":35113},[139,65056,65057],{"class":145},"      total.style.opacity ",[139,65059,150],{"class":149},[139,65061,57933],{"class":153},[139,65063,65064],{"class":141,"line":35119},[139,65065,35706],{"class":145},[139,65067,65068],{"class":141,"line":35125},[139,65069,65070],{"class":2512},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[139,65072,65073,65075,65077,65079,65081,65083,65085],{"class":141,"line":35134},[139,65074,65040],{"class":145},[139,65076,60046],{"class":781},[139,65078,157],{"class":145},[139,65080,63621],{"class":160},[139,65082,413],{"class":145},[139,65084,56683],{"class":149},[139,65086,56686],{"class":145},[139,65088,65089,65091,65093],{"class":141,"line":35140},[139,65090,65057],{"class":145},[139,65092,150],{"class":149},[139,65094,49571],{"class":153},[139,65096,65097],{"class":141,"line":35151},[139,65098,35706],{"class":145},[139,65100,65101],{"class":141,"line":35157},[139,65102,65103],{"class":2512},"    \u002F\u002F 3. 检测用户输入\n",[139,65105,65106,65108,65110,65112,65115,65117,65119],{"class":141,"line":35176},[139,65107,65040],{"class":145},[139,65109,60046],{"class":781},[139,65111,157],{"class":145},[139,65113,65114],{"class":160},"'input'",[139,65116,413],{"class":145},[139,65118,56683],{"class":149},[139,65120,56686],{"class":145},[139,65122,65123],{"class":141,"line":35182},[139,65124,65125],{"class":2512},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[139,65127,65128,65131,65133,65136,65139,65141,65144,65146,65148],{"class":141,"line":35193},[139,65129,65130],{"class":145},"      total.innerHTML ",[139,65132,150],{"class":149},[139,65134,65135],{"class":160}," `${",[139,65137,65138],{"class":145},"tx",[139,65140,2993],{"class":160},[139,65142,65143],{"class":145},"value",[139,65145,2993],{"class":160},[139,65147,54204],{"class":153},[139,65149,65150],{"class":160},"}\u002F200字`\n",[139,65152,65153],{"class":141,"line":35199},[139,65154,35706],{"class":145},[139,65156,65157],{"class":141,"line":35219},[139,65158,843],{"emptyLinePlaceholder":842},[139,65160,65161],{"class":141,"line":35235},[139,65162,65163],{"class":2512},"    \u002F\u002F const str = 'andy'\n",[139,65165,65166],{"class":141,"line":35241},[139,65167,65168],{"class":2512},"    \u002F\u002F console.log(str.length)\n",[139,65170,65171,65173,65175],{"class":141,"line":35255},[139,65172,54652],{"class":145},[139,65174,54050],{"class":53538},[139,65176,53545],{"class":145},[139,65178,65179,65181,65183],{"class":141,"line":35261},[139,65180,54022],{"class":145},[139,65182,54037],{"class":53538},[139,65184,53545],{"class":145},[139,65186,65187],{"class":141,"line":35267},[139,65188,843],{"emptyLinePlaceholder":842},[139,65190,65191,65193,65195],{"class":141,"line":35278},[139,65192,54022],{"class":145},[139,65194,52873],{"class":53538},[139,65196,53545],{"class":145},[24265,65198,65200],{"id":65199},"_3254-change事件","3.2.5.4 change事件",[19,65202,65203],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65205,65206],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65208,65209],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[130,65211,65213],{"className":52871,"code":65212,"language":52873,"meta":135,"style":135},"\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",[50,65214,65215,65225,65239,65243,65251,65265,65285,65297,65305,65309,65317,65331,65339,65357,65375,65387,65391,65399,65407,65411],{"__ignoreMap":135},[139,65216,65217,65219,65221,65223],{"class":141,"line":142},[139,65218,53535],{"class":145},[139,65220,53539],{"class":53538},[139,65222,53542],{"class":781},[139,65224,53545],{"class":145},[139,65226,65227,65229,65231,65233,65235,65237],{"class":141,"line":210},[139,65228,796],{"class":145},[139,65230,52873],{"class":53538},[139,65232,53554],{"class":781},[139,65234,150],{"class":145},[139,65236,53559],{"class":160},[139,65238,53545],{"class":145},[139,65240,65241],{"class":141,"line":254},[139,65242,843],{"emptyLinePlaceholder":842},[139,65244,65245,65247,65249],{"class":141,"line":262},[139,65246,796],{"class":145},[139,65248,53572],{"class":53538},[139,65250,53545],{"class":145},[139,65252,65253,65255,65257,65259,65261,65263],{"class":141,"line":313},[139,65254,54380],{"class":145},[139,65256,53582],{"class":53538},[139,65258,53585],{"class":781},[139,65260,150],{"class":145},[139,65262,53590],{"class":160},[139,65264,53545],{"class":145},[139,65266,65267,65269,65271,65273,65275,65277,65279,65281,65283],{"class":141,"line":462},[139,65268,54380],{"class":145},[139,65270,53582],{"class":53538},[139,65272,17189],{"class":781},[139,65274,150],{"class":145},[139,65276,53629],{"class":160},[139,65278,53609],{"class":781},[139,65280,150],{"class":145},[139,65282,53636],{"class":160},[139,65284,53545],{"class":145},[139,65286,65287,65289,65291,65293,65295],{"class":141,"line":474},[139,65288,54380],{"class":145},[139,65290,53645],{"class":53538},[139,65292,53648],{"class":145},[139,65294,53645],{"class":53538},[139,65296,53545],{"class":145},[139,65298,65299,65301,65303],{"class":141,"line":484},[139,65300,54022],{"class":145},[139,65302,53572],{"class":53538},[139,65304,53545],{"class":145},[139,65306,65307],{"class":141,"line":989},[139,65308,843],{"emptyLinePlaceholder":842},[139,65310,65311,65313,65315],{"class":141,"line":994},[139,65312,796],{"class":145},[139,65314,54037],{"class":53538},[139,65316,53545],{"class":145},[139,65318,65319,65321,65323,65325,65327,65329],{"class":141,"line":999},[139,65320,54380],{"class":145},[139,65322,199],{"class":53538},[139,65324,56058],{"class":781},[139,65326,150],{"class":145},[139,65328,64931],{"class":160},[139,65330,53545],{"class":145},[139,65332,65333,65335,65337],{"class":141,"line":1006},[139,65334,54380],{"class":145},[139,65336,54050],{"class":53538},[139,65338,53545],{"class":145},[139,65340,65341,65343,65345,65347,65349,65351,65353,65355],{"class":141,"line":1027},[139,65342,13494],{"class":149},[139,65344,62838],{"class":153},[139,65346,15836],{"class":149},[139,65348,56630],{"class":145},[139,65350,56633],{"class":781},[139,65352,157],{"class":145},[139,65354,65114],{"class":160},[139,65356,164],{"class":145},[139,65358,65359,65362,65364,65366,65369,65371,65373],{"class":141,"line":1040},[139,65360,65361],{"class":145},"    input.",[139,65363,60046],{"class":781},[139,65365,157],{"class":145},[139,65367,65368],{"class":160},"'change'",[139,65370,413],{"class":145},[139,65372,56683],{"class":149},[139,65374,56686],{"class":145},[139,65376,65377,65379,65381,65383,65385],{"class":141,"line":2160},[139,65378,60477],{"class":145},[139,65380,60480],{"class":781},[139,65382,157],{"class":145},[139,65384,3028],{"class":153},[139,65386,164],{"class":145},[139,65388,65389],{"class":141,"line":2188},[139,65390,35706],{"class":145},[139,65392,65393,65395,65397],{"class":141,"line":3944},[139,65394,54652],{"class":145},[139,65396,54050],{"class":53538},[139,65398,53545],{"class":145},[139,65400,65401,65403,65405],{"class":141,"line":3963},[139,65402,54022],{"class":145},[139,65404,54037],{"class":53538},[139,65406,53545],{"class":145},[139,65408,65409],{"class":141,"line":3968},[139,65410,843],{"emptyLinePlaceholder":842},[139,65412,65413,65415,65417],{"class":141,"line":3982},[139,65414,54022],{"class":145},[139,65416,52873],{"class":53538},[139,65418,53545],{"class":145},[19,65420,65421],{},"总结：内容发生改变才回去触发",[1217,65423,65425],{"id":65424},"_326-事件对象","3.2.6 事件对象",[24265,65427,65429],{"id":65428},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65431,65432],{},[3760,65433],{"alt":135,"src":65434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65436,65437],{},[3760,65438],{"alt":135,"src":65439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65441,65442],{},"点击一次，就输出了事件对象，它是个对象",[19,65444,65445],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65447,65448],{},[3760,65449],{"alt":135,"src":65450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24265,65452,65454],{"id":65453},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65456,65457],{},[3760,65458],{"alt":135,"src":65459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65461,65462],{},"实现按特殊字符才是实现打印输出效果：",[130,65464,65466],{"className":55302,"code":65465,"language":55304,"meta":135,"style":135},"\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",[50,65467,65468,65476,65481,65495,65503,65508,65513,65518,65523,65528,65533,65538,65543,65548,65552,65556,65564],{"__ignoreMap":135},[139,65469,65470,65472,65474],{"class":141,"line":142},[139,65471,796],{"class":145},[139,65473,54037],{"class":53538},[139,65475,53545],{"class":145},[139,65477,65478],{"class":141,"line":210},[139,65479,65480],{"class":2512},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[139,65482,65483,65485,65487,65489,65491,65493],{"class":141,"line":254},[139,65484,54380],{"class":145},[139,65486,199],{"class":53538},[139,65488,56058],{"class":781},[139,65490,150],{"class":145},[139,65492,64931],{"class":160},[139,65494,53545],{"class":145},[139,65496,65497,65499,65501],{"class":141,"line":262},[139,65498,54380],{"class":145},[139,65500,54050],{"class":53538},[139,65502,53545],{"class":145},[139,65504,65505],{"class":141,"line":313},[139,65506,65507],{"class":145},"    \u002F\u002F const btn = document.querySelector('button')\n",[139,65509,65510],{"class":141,"line":462},[139,65511,65512],{"class":145},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[139,65514,65515],{"class":141,"line":474},[139,65516,65517],{"class":145},"    \u002F\u002F   console.log(e);\n",[139,65519,65520],{"class":141,"line":484},[139,65521,65522],{"class":145},"    \u002F\u002F })\n",[139,65524,65525],{"class":141,"line":989},[139,65526,65527],{"class":145},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[139,65529,65530],{"class":141,"line":994},[139,65531,65532],{"class":145},"    const input = document.querySelector('input')\n",[139,65534,65535],{"class":141,"line":999},[139,65536,65537],{"class":145},"    input.addEventListener('keyup', function (e) {\n",[139,65539,65540],{"class":141,"line":1006},[139,65541,65542],{"class":145},"      if (e.key === 'Enter') {\n",[139,65544,65545],{"class":141,"line":1027},[139,65546,65547],{"class":145},"        console.log('我按下了回车键')\n",[139,65549,65550],{"class":141,"line":1040},[139,65551,54633],{"class":145},[139,65553,65554],{"class":141,"line":2160},[139,65555,35706],{"class":145},[139,65557,65558,65560,65562],{"class":141,"line":2188},[139,65559,54652],{"class":145},[139,65561,54050],{"class":53538},[139,65563,53545],{"class":145},[139,65565,65566,65568,65570],{"class":141,"line":3944},[139,65567,54022],{"class":145},[139,65569,54037],{"class":53538},[139,65571,53545],{"class":145},[24265,65573,65575],{"id":65574},"_3263-trim方法","3.2.6.3 trim方法",[19,65577,65578],{},[3760,65579],{"alt":135,"src":65580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65582,65583],{},[3760,65584],{"alt":135,"src":65585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65587,65588],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65590,65591],{},"str.trim()",[1217,65593,65595],{"id":65594},"_327-环境对象","3.2.7 环境对象",[19,65597,65598],{},[3760,65599],{"alt":135,"src":65600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65602,65603],{},[3760,65604],{"alt":135,"src":65605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65607,65608],{},[3760,65609],{"alt":135,"src":65610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65612,65613],{},"实际函数调用是window.fn()",[19,65615,65616],{},"普通函数里面this指向的是window",[3437,65618,65619,65622,65625],{},[1763,65620,65621],{},"在普通函数下，this指向的是window",[1763,65623,65624],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1763,65626,65627],{},"箭头函数没有this",[19,65629,65630],{},"粗略记法就是：谁调用，this就指向谁",[19,65632,65633],{},[3760,65634],{"alt":135,"src":65635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65637,65638],{},[3760,65639],{"alt":135,"src":65640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65642,65643],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65645,65646],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[130,65648,65650],{"className":55302,"code":65649,"language":55304,"meta":135,"style":135},"\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",[50,65651,65652,65660,65672,65680,65685,65690,65695,65700,65704,65712],{"__ignoreMap":135},[139,65653,65654,65656,65658],{"class":141,"line":142},[139,65655,796],{"class":145},[139,65657,54037],{"class":53538},[139,65659,53545],{"class":145},[139,65661,65662,65664,65666,65668,65670],{"class":141,"line":210},[139,65663,54380],{"class":145},[139,65665,56121],{"class":53538},[139,65667,56127],{"class":145},[139,65669,56121],{"class":53538},[139,65671,53545],{"class":145},[139,65673,65674,65676,65678],{"class":141,"line":254},[139,65675,54380],{"class":145},[139,65677,54050],{"class":53538},[139,65679,53545],{"class":145},[139,65681,65682],{"class":141,"line":262},[139,65683,65684],{"class":145},"    const button = document.querySelector('button')\n",[139,65686,65687],{"class":141,"line":313},[139,65688,65689],{"class":145},"    button.addEventListener('click', function () {\n",[139,65691,65692],{"class":141,"line":462},[139,65693,65694],{"class":145},"      \u002F\u002F console.log(this);\n",[139,65696,65697],{"class":141,"line":474},[139,65698,65699],{"class":145},"      this.style.color = 'pink'\n",[139,65701,65702],{"class":141,"line":484},[139,65703,35706],{"class":145},[139,65705,65706,65708,65710],{"class":141,"line":989},[139,65707,54652],{"class":145},[139,65709,54050],{"class":53538},[139,65711,53545],{"class":145},[139,65713,65714,65716,65718],{"class":141,"line":994},[139,65715,54022],{"class":145},[139,65717,54037],{"class":53538},[139,65719,53545],{"class":145},[1217,65721,65723],{"id":65722},"_328-回调函数","3.2.8 回调函数",[19,65725,65726],{},[3760,65727],{"alt":135,"src":65728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65730,65731],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65733,13605],{},[3437,65735,65736,65739,65742],{},[1763,65737,65738],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1763,65740,65741],{},"回调函数本质还是函数，只不过把它当成参数使用",[1763,65743,65744],{},"使用匿名函数做为回调函数比较常见",[1217,65746,65748],{"id":65747},"_329-tab栏切换","3.2.9 tab栏切换",[19,65750,65751],{},[3760,65752],{"alt":135,"src":65753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[130,65755,65757],{"className":52871,"code":65756,"language":52873,"meta":135,"style":135},"\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",[50,65758,65759,65769,65783,65787,65795,65809,65829,65849,65862,65870,65876,65886,65896,65900,65904,65911,65924,65937,65949,65965,65969,65973,65980,65992,66004,66016,66026,66036,66040,66044,66053,66065,66076,66088,66092,66096,66104,66114,66124,66134,66138,66142,66152,66166,66178,66182,66186,66198,66209,66226,66236,66240,66244,66259,66270,66280,66284,66288,66295,66310,66314,66318,66326,66336,66340,66344,66353,66363,66367,66375,66383,66387,66395,66410,66425,66438,66446,66480,66507,66534,66561,66588,66596,66604,66619,66656,66691,66726,66761,66796,66804,66812,66820,66825,66830,66849,66854,66883,66888,66893,66911,66916,66921,66926,66948,66953,66969,66973,66978,66983,67004,67009,67038,67042,67047,67051,67059,67067,67071],{"__ignoreMap":135},[139,65760,65761,65763,65765,65767],{"class":141,"line":142},[139,65762,53535],{"class":145},[139,65764,53539],{"class":53538},[139,65766,53542],{"class":781},[139,65768,53545],{"class":145},[139,65770,65771,65773,65775,65777,65779,65781],{"class":141,"line":210},[139,65772,796],{"class":145},[139,65774,52873],{"class":53538},[139,65776,53554],{"class":781},[139,65778,150],{"class":145},[139,65780,53559],{"class":160},[139,65782,53545],{"class":145},[139,65784,65785],{"class":141,"line":254},[139,65786,843],{"emptyLinePlaceholder":842},[139,65788,65789,65791,65793],{"class":141,"line":262},[139,65790,796],{"class":145},[139,65792,53572],{"class":53538},[139,65794,53545],{"class":145},[139,65796,65797,65799,65801,65803,65805,65807],{"class":141,"line":313},[139,65798,54380],{"class":145},[139,65800,53582],{"class":53538},[139,65802,53585],{"class":781},[139,65804,150],{"class":145},[139,65806,53590],{"class":160},[139,65808,61360],{"class":145},[139,65810,65811,65813,65815,65817,65819,65821,65823,65825,65827],{"class":141,"line":462},[139,65812,54380],{"class":145},[139,65814,53582],{"class":53538},[139,65816,53601],{"class":781},[139,65818,150],{"class":145},[139,65820,53606],{"class":160},[139,65822,53609],{"class":781},[139,65824,150],{"class":145},[139,65826,53614],{"class":160},[139,65828,61360],{"class":145},[139,65830,65831,65833,65835,65837,65839,65841,65843,65845,65847],{"class":141,"line":474},[139,65832,54380],{"class":145},[139,65834,53582],{"class":53538},[139,65836,17189],{"class":781},[139,65838,150],{"class":145},[139,65840,53629],{"class":160},[139,65842,53609],{"class":781},[139,65844,150],{"class":145},[139,65846,53636],{"class":160},[139,65848,61360],{"class":145},[139,65850,65851,65853,65855,65858,65860],{"class":141,"line":484},[139,65852,54380],{"class":145},[139,65854,53645],{"class":53538},[139,65856,65857],{"class":145},">tab栏切换\u003C\u002F",[139,65859,53645],{"class":53538},[139,65861,53545],{"class":145},[139,65863,65864,65866,65868],{"class":141,"line":989},[139,65865,54380],{"class":145},[139,65867,2348],{"class":53538},[139,65869,53545],{"class":145},[139,65871,65872,65874],{"class":141,"line":994},[139,65873,8677],{"class":53538},[139,65875,17840],{"class":145},[139,65877,65878,65880,65882,65884],{"class":141,"line":999},[139,65879,56940],{"class":153},[139,65881,2265],{"class":145},[139,65883,2634],{"class":153},[139,65885,3591],{"class":145},[139,65887,65888,65890,65892,65894],{"class":141,"line":1006},[139,65889,56929],{"class":153},[139,65891,2265],{"class":145},[139,65893,2634],{"class":153},[139,65895,3591],{"class":145},[139,65897,65898],{"class":141,"line":1027},[139,65899,4472],{"class":145},[139,65901,65902],{"class":141,"line":1040},[139,65903,843],{"emptyLinePlaceholder":842},[139,65905,65906,65909],{"class":141,"line":2160},[139,65907,65908],{"class":781},"    .tab",[139,65910,17840],{"class":145},[139,65912,65913,65915,65917,65920,65922],{"class":141,"line":2188},[139,65914,57005],{"class":153},[139,65916,2265],{"class":145},[139,65918,65919],{"class":153},"590",[139,65921,53729],{"class":149},[139,65923,3591],{"class":145},[139,65925,65926,65928,65930,65933,65935],{"class":141,"line":3944},[139,65927,57019],{"class":153},[139,65929,2265],{"class":145},[139,65931,65932],{"class":153},"340",[139,65934,53729],{"class":149},[139,65936,3591],{"class":145},[139,65938,65939,65941,65943,65945,65947],{"class":141,"line":3963},[139,65940,56940],{"class":153},[139,65942,2265],{"class":145},[139,65944,3135],{"class":153},[139,65946,53729],{"class":149},[139,65948,3591],{"class":145},[139,65950,65951,65953,65955,65957,65959,65961,65963],{"class":141,"line":3968},[139,65952,64210],{"class":153},[139,65954,2265],{"class":145},[139,65956,410],{"class":153},[139,65958,53729],{"class":149},[139,65960,53758],{"class":153},[139,65962,64477],{"class":153},[139,65964,3591],{"class":145},[139,65966,65967],{"class":141,"line":3982},[139,65968,4472],{"class":145},[139,65970,65971],{"class":141,"line":3987},[139,65972,843],{"emptyLinePlaceholder":842},[139,65974,65975,65978],{"class":141,"line":4014},[139,65976,65977],{"class":781},"    .tab-nav",[139,65979,17840],{"class":145},[139,65981,65982,65984,65986,65988,65990],{"class":141,"line":4019},[139,65983,57005],{"class":153},[139,65985,2265],{"class":145},[139,65987,1017],{"class":153},[139,65989,2766],{"class":149},[139,65991,3591],{"class":145},[139,65993,65994,65996,65998,66000,66002],{"class":141,"line":4036},[139,65995,57019],{"class":153},[139,65997,2265],{"class":145},[139,65999,3341],{"class":153},[139,66001,53729],{"class":149},[139,66003,3591],{"class":145},[139,66005,66006,66008,66010,66012,66014],{"class":141,"line":4041},[139,66007,59593],{"class":153},[139,66009,2265],{"class":145},[139,66011,3341],{"class":153},[139,66013,53729],{"class":149},[139,66015,3591],{"class":145},[139,66017,66018,66020,66022,66024],{"class":141,"line":4046},[139,66019,57243],{"class":153},[139,66021,2265],{"class":145},[139,66023,53714],{"class":153},[139,66025,3591],{"class":145},[139,66027,66028,66030,66032,66034],{"class":141,"line":4051},[139,66029,57254],{"class":153},[139,66031,2265],{"class":145},[139,66033,53905],{"class":153},[139,66035,3591],{"class":145},[139,66037,66038],{"class":141,"line":4065},[139,66039,4472],{"class":145},[139,66041,66042],{"class":141,"line":4070},[139,66043,843],{"emptyLinePlaceholder":842},[139,66045,66046,66048,66051],{"class":141,"line":4860},[139,66047,65977],{"class":781},[139,66049,66050],{"class":53538}," h3",[139,66052,17840],{"class":145},[139,66054,66055,66057,66059,66061,66063],{"class":141,"line":4874},[139,66056,57156],{"class":153},[139,66058,2265],{"class":145},[139,66060,3235],{"class":153},[139,66062,53729],{"class":149},[139,66064,3591],{"class":145},[139,66066,66067,66069,66071,66074],{"class":141,"line":4882},[139,66068,64567],{"class":153},[139,66070,2265],{"class":145},[139,66072,66073],{"class":153},"normal",[139,66075,3591],{"class":145},[139,66077,66078,66080,66082,66084,66086],{"class":141,"line":4887},[139,66079,64233],{"class":153},[139,66081,2265],{"class":145},[139,66083,3135],{"class":153},[139,66085,53729],{"class":149},[139,66087,3591],{"class":145},[139,66089,66090],{"class":141,"line":4893},[139,66091,4472],{"class":145},[139,66093,66094],{"class":141,"line":4899},[139,66095,843],{"emptyLinePlaceholder":842},[139,66097,66098,66100,66102],{"class":141,"line":4904},[139,66099,65977],{"class":781},[139,66101,63525],{"class":53538},[139,66103,17840],{"class":145},[139,66105,66106,66108,66110,66112],{"class":141,"line":10222},[139,66107,56966],{"class":153},[139,66109,2265],{"class":145},[139,66111,56971],{"class":153},[139,66113,3591],{"class":145},[139,66115,66116,66118,66120,66122],{"class":141,"line":10246},[139,66117,57243],{"class":153},[139,66119,2265],{"class":145},[139,66121,53714],{"class":153},[139,66123,3591],{"class":145},[139,66125,66126,66128,66130,66132],{"class":141,"line":10251},[139,66127,57254],{"class":153},[139,66129,2265],{"class":145},[139,66131,53817],{"class":153},[139,66133,3591],{"class":145},[139,66135,66136],{"class":141,"line":10257},[139,66137,4472],{"class":145},[139,66139,66140],{"class":141,"line":10284},[139,66141,843],{"emptyLinePlaceholder":842},[139,66143,66144,66146,66148,66150],{"class":141,"line":10289},[139,66145,65977],{"class":781},[139,66147,63525],{"class":53538},[139,66149,57309],{"class":53538},[139,66151,17840],{"class":145},[139,66153,66154,66156,66158,66160,66162,66164],{"class":141,"line":10295},[139,66155,56940],{"class":153},[139,66157,2265],{"class":145},[139,66159,2634],{"class":153},[139,66161,11224],{"class":153},[139,66163,53729],{"class":149},[139,66165,3591],{"class":145},[139,66167,66168,66170,66172,66174,66176],{"class":141,"line":10307},[139,66169,57156],{"class":153},[139,66171,2265],{"class":145},[139,66173,2984],{"class":153},[139,66175,53729],{"class":149},[139,66177,3591],{"class":145},[139,66179,66180],{"class":141,"line":10319},[139,66181,4472],{"class":145},[139,66183,66184],{"class":141,"line":10331},[139,66185,843],{"emptyLinePlaceholder":842},[139,66187,66188,66190,66192,66194,66196],{"class":141,"line":11990},[139,66189,65977],{"class":781},[139,66191,63525],{"class":53538},[139,66193,57309],{"class":53538},[139,66195,3696],{"class":53538},[139,66197,17840],{"class":145},[139,66199,66200,66203,66205,66207],{"class":141,"line":12015},[139,66201,66202],{"class":153},"      text-decoration",[139,66204,2265],{"class":145},[139,66206,56971],{"class":153},[139,66208,3591],{"class":145},[139,66210,66211,66213,66215,66217,66219,66221,66224],{"class":141,"line":12038},[139,66212,64465],{"class":153},[139,66214,2265],{"class":145},[139,66216,416],{"class":153},[139,66218,53729],{"class":149},[139,66220,53758],{"class":153},[139,66222,66223],{"class":153}," transparent",[139,66225,3591],{"class":145},[139,66227,66228,66230,66232,66234],{"class":141,"line":12062},[139,66229,59650],{"class":153},[139,66231,2265],{"class":145},[139,66233,64602],{"class":153},[139,66235,3591],{"class":145},[139,66237,66238],{"class":141,"line":12067},[139,66239,4472],{"class":145},[139,66241,66242],{"class":141,"line":12072},[139,66243,843],{"emptyLinePlaceholder":842},[139,66245,66246,66248,66250,66252,66254,66257],{"class":141,"line":12077},[139,66247,65977],{"class":781},[139,66249,63525],{"class":53538},[139,66251,57309],{"class":53538},[139,66253,3696],{"class":53538},[139,66255,66256],{"class":781},".active",[139,66258,17840],{"class":145},[139,66260,66261,66263,66265,66268],{"class":141,"line":12086},[139,66262,64024],{"class":153},[139,66264,2265],{"class":145},[139,66266,66267],{"class":153},"#e1251b",[139,66269,3591],{"class":145},[139,66271,66272,66274,66276,66278],{"class":141,"line":12091},[139,66273,59650],{"class":153},[139,66275,2265],{"class":145},[139,66277,66267],{"class":153},[139,66279,3591],{"class":145},[139,66281,66282],{"class":141,"line":12097},[139,66283,4472],{"class":145},[139,66285,66286],{"class":141,"line":12118},[139,66287,843],{"emptyLinePlaceholder":842},[139,66289,66290,66293],{"class":141,"line":12124},[139,66291,66292],{"class":781},"    .tab-content",[139,66294,17840],{"class":145},[139,66296,66297,66299,66301,66303,66306,66308],{"class":141,"line":12138},[139,66298,56929],{"class":153},[139,66300,2265],{"class":145},[139,66302,2634],{"class":153},[139,66304,66305],{"class":153}," 16",[139,66307,53729],{"class":149},[139,66309,3591],{"class":145},[139,66311,66312],{"class":141,"line":12144},[139,66313,4472],{"class":145},[139,66315,66316],{"class":141,"line":12171},[139,66317,843],{"emptyLinePlaceholder":842},[139,66319,66320,66322,66324],{"class":141,"line":12180},[139,66321,66292],{"class":781},[139,66323,64407],{"class":781},[139,66325,17840],{"class":145},[139,66327,66328,66330,66332,66334],{"class":141,"line":12186},[139,66329,57243],{"class":153},[139,66331,2265],{"class":145},[139,66333,56971],{"class":153},[139,66335,3591],{"class":145},[139,66337,66338],{"class":141,"line":12194},[139,66339,4472],{"class":145},[139,66341,66342],{"class":141,"line":12199},[139,66343,843],{"emptyLinePlaceholder":842},[139,66345,66346,66348,66351],{"class":141,"line":18871},[139,66347,66292],{"class":781},[139,66349,66350],{"class":781}," .item.active",[139,66352,17840],{"class":145},[139,66354,66355,66357,66359,66361],{"class":141,"line":18877},[139,66356,57243],{"class":153},[139,66358,2265],{"class":145},[139,66360,63102],{"class":153},[139,66362,3591],{"class":145},[139,66364,66365],{"class":141,"line":18900},[139,66366,4472],{"class":145},[139,66368,66369,66371,66373],{"class":141,"line":18906},[139,66370,54652],{"class":145},[139,66372,2348],{"class":53538},[139,66374,53545],{"class":145},[139,66376,66377,66379,66381],{"class":141,"line":18929},[139,66378,54022],{"class":145},[139,66380,53572],{"class":53538},[139,66382,53545],{"class":145},[139,66384,66385],{"class":141,"line":18943},[139,66386,843],{"emptyLinePlaceholder":842},[139,66388,66389,66391,66393],{"class":141,"line":18963},[139,66390,796],{"class":145},[139,66392,54037],{"class":53538},[139,66394,53545],{"class":145},[139,66396,66397,66399,66401,66403,66405,66408],{"class":141,"line":18969},[139,66398,54380],{"class":145},[139,66400,53848],{"class":53538},[139,66402,55721],{"class":781},[139,66404,150],{"class":145},[139,66406,66407],{"class":160},"\"tab\"",[139,66409,53545],{"class":145},[139,66411,66412,66414,66416,66418,66420,66423],{"class":141,"line":18980},[139,66413,53579],{"class":145},[139,66415,53848],{"class":53538},[139,66417,55721],{"class":781},[139,66419,150],{"class":145},[139,66421,66422],{"class":160},"\"tab-nav\"",[139,66424,53545],{"class":145},[139,66426,66427,66429,66431,66434,66436],{"class":141,"line":19003},[139,66428,57468],{"class":145},[139,66430,1217],{"class":53538},[139,66432,66433],{"class":145},">每日特价\u003C\u002F",[139,66435,1217],{"class":53538},[139,66437,53545],{"class":145},[139,66439,66440,66442,66444],{"class":141,"line":19025},[139,66441,57468],{"class":145},[139,66443,3437],{"class":53538},[139,66445,53545],{"class":145},[139,66447,66448,66450,66452,66454,66456,66458,66460,66462,66464,66466,66469,66472,66474,66476,66478],{"class":141,"line":19030},[139,66449,57536],{"class":145},[139,66451,1763],{"class":53538},[139,66453,63285],{"class":145},[139,66455,2680],{"class":53538},[139,66457,55721],{"class":781},[139,66459,150],{"class":145},[139,66461,61939],{"class":160},[139,66463,63290],{"class":781},[139,66465,150],{"class":145},[139,66467,66468],{"class":160},"\"javascript:;\"",[139,66470,66471],{"class":145},">精选\u003C\u002F",[139,66473,2680],{"class":53538},[139,66475,57548],{"class":145},[139,66477,1763],{"class":53538},[139,66479,53545],{"class":145},[139,66481,66482,66484,66486,66488,66490,66492,66494,66496,66499,66501,66503,66505],{"class":141,"line":19036},[139,66483,57536],{"class":145},[139,66485,1763],{"class":53538},[139,66487,63285],{"class":145},[139,66489,2680],{"class":53538},[139,66491,63290],{"class":781},[139,66493,150],{"class":145},[139,66495,66468],{"class":160},[139,66497,66498],{"class":145},">美食\u003C\u002F",[139,66500,2680],{"class":53538},[139,66502,57548],{"class":145},[139,66504,1763],{"class":53538},[139,66506,53545],{"class":145},[139,66508,66509,66511,66513,66515,66517,66519,66521,66523,66526,66528,66530,66532],{"class":141,"line":19050},[139,66510,57536],{"class":145},[139,66512,1763],{"class":53538},[139,66514,63285],{"class":145},[139,66516,2680],{"class":53538},[139,66518,63290],{"class":781},[139,66520,150],{"class":145},[139,66522,66468],{"class":160},[139,66524,66525],{"class":145},">百货\u003C\u002F",[139,66527,2680],{"class":53538},[139,66529,57548],{"class":145},[139,66531,1763],{"class":53538},[139,66533,53545],{"class":145},[139,66535,66536,66538,66540,66542,66544,66546,66548,66550,66553,66555,66557,66559],{"class":141,"line":19063},[139,66537,57536],{"class":145},[139,66539,1763],{"class":53538},[139,66541,63285],{"class":145},[139,66543,2680],{"class":53538},[139,66545,63290],{"class":781},[139,66547,150],{"class":145},[139,66549,66468],{"class":160},[139,66551,66552],{"class":145},">个护\u003C\u002F",[139,66554,2680],{"class":53538},[139,66556,57548],{"class":145},[139,66558,1763],{"class":53538},[139,66560,53545],{"class":145},[139,66562,66563,66565,66567,66569,66571,66573,66575,66577,66580,66582,66584,66586],{"class":141,"line":19068},[139,66564,57536],{"class":145},[139,66566,1763],{"class":53538},[139,66568,63285],{"class":145},[139,66570,2680],{"class":53538},[139,66572,63290],{"class":781},[139,66574,150],{"class":145},[139,66576,66468],{"class":160},[139,66578,66579],{"class":145},">预告\u003C\u002F",[139,66581,2680],{"class":53538},[139,66583,57548],{"class":145},[139,66585,1763],{"class":53538},[139,66587,53545],{"class":145},[139,66589,66590,66592,66594],{"class":141,"line":19082},[139,66591,57641],{"class":145},[139,66593,3437],{"class":53538},[139,66595,53545],{"class":145},[139,66597,66598,66600,66602],{"class":141,"line":19087},[139,66599,54013],{"class":145},[139,66601,53848],{"class":53538},[139,66603,53545],{"class":145},[139,66605,66606,66608,66610,66612,66614,66617],{"class":141,"line":19093},[139,66607,53579],{"class":145},[139,66609,53848],{"class":53538},[139,66611,55721],{"class":781},[139,66613,150],{"class":145},[139,66615,66616],{"class":160},"\"tab-content\"",[139,66618,53545],{"class":145},[139,66620,66621,66623,66625,66627,66629,66632,66634,66636,66638,66640,66643,66645,66647,66649,66652,66654],{"class":141,"line":19098},[139,66622,57468],{"class":145},[139,66624,53848],{"class":53538},[139,66626,55721],{"class":781},[139,66628,150],{"class":145},[139,66630,66631],{"class":160},"\"item active\"",[139,66633,63285],{"class":145},[139,66635,3760],{"class":53538},[139,66637,57473],{"class":781},[139,66639,150],{"class":145},[139,66641,66642],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[139,66644,57481],{"class":781},[139,66646,150],{"class":145},[139,66648,9926],{"class":160},[139,66650,66651],{"class":145}," \u002F>\u003C\u002F",[139,66653,53848],{"class":53538},[139,66655,53545],{"class":145},[139,66657,66658,66660,66662,66664,66666,66668,66670,66672,66674,66676,66679,66681,66683,66685,66687,66689],{"class":141,"line":19112},[139,66659,57468],{"class":145},[139,66661,53848],{"class":53538},[139,66663,55721],{"class":781},[139,66665,150],{"class":145},[139,66667,64856],{"class":160},[139,66669,63285],{"class":145},[139,66671,3760],{"class":53538},[139,66673,57473],{"class":781},[139,66675,150],{"class":145},[139,66677,66678],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[139,66680,57481],{"class":781},[139,66682,150],{"class":145},[139,66684,9926],{"class":160},[139,66686,66651],{"class":145},[139,66688,53848],{"class":53538},[139,66690,53545],{"class":145},[139,66692,66693,66695,66697,66699,66701,66703,66705,66707,66709,66711,66714,66716,66718,66720,66722,66724],{"class":141,"line":19117},[139,66694,57468],{"class":145},[139,66696,53848],{"class":53538},[139,66698,55721],{"class":781},[139,66700,150],{"class":145},[139,66702,64856],{"class":160},[139,66704,63285],{"class":145},[139,66706,3760],{"class":53538},[139,66708,57473],{"class":781},[139,66710,150],{"class":145},[139,66712,66713],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[139,66715,57481],{"class":781},[139,66717,150],{"class":145},[139,66719,9926],{"class":160},[139,66721,66651],{"class":145},[139,66723,53848],{"class":53538},[139,66725,53545],{"class":145},[139,66727,66728,66730,66732,66734,66736,66738,66740,66742,66744,66746,66749,66751,66753,66755,66757,66759],{"class":141,"line":19122},[139,66729,57468],{"class":145},[139,66731,53848],{"class":53538},[139,66733,55721],{"class":781},[139,66735,150],{"class":145},[139,66737,64856],{"class":160},[139,66739,63285],{"class":145},[139,66741,3760],{"class":53538},[139,66743,57473],{"class":781},[139,66745,150],{"class":145},[139,66747,66748],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[139,66750,57481],{"class":781},[139,66752,150],{"class":145},[139,66754,9926],{"class":160},[139,66756,66651],{"class":145},[139,66758,53848],{"class":53538},[139,66760,53545],{"class":145},[139,66762,66763,66765,66767,66769,66771,66773,66775,66777,66779,66781,66784,66786,66788,66790,66792,66794],{"class":141,"line":19136},[139,66764,57468],{"class":145},[139,66766,53848],{"class":53538},[139,66768,55721],{"class":781},[139,66770,150],{"class":145},[139,66772,64856],{"class":160},[139,66774,63285],{"class":145},[139,66776,3760],{"class":53538},[139,66778,57473],{"class":781},[139,66780,150],{"class":145},[139,66782,66783],{"class":160},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[139,66785,57481],{"class":781},[139,66787,150],{"class":145},[139,66789,9926],{"class":160},[139,66791,66651],{"class":145},[139,66793,53848],{"class":53538},[139,66795,53545],{"class":145},[139,66797,66798,66800,66802],{"class":141,"line":19148},[139,66799,54013],{"class":145},[139,66801,53848],{"class":53538},[139,66803,53545],{"class":145},[139,66805,66806,66808,66810],{"class":141,"line":19153},[139,66807,54652],{"class":145},[139,66809,53848],{"class":53538},[139,66811,53545],{"class":145},[139,66813,66814,66816,66818],{"class":141,"line":19166},[139,66815,54380],{"class":145},[139,66817,54050],{"class":53538},[139,66819,53545],{"class":145},[139,66821,66822],{"class":141,"line":19171},[139,66823,66824],{"class":2512},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[139,66826,66827],{"class":141,"line":19176},[139,66828,66829],{"class":2512},"    \u002F\u002F 1.1 获取 a 元素 \n",[139,66831,66832,66834,66836,66838,66840,66842,66844,66847],{"class":141,"line":19181},[139,66833,13494],{"class":149},[139,66835,607],{"class":153},[139,66837,15836],{"class":149},[139,66839,56630],{"class":145},[139,66841,57915],{"class":781},[139,66843,157],{"class":145},[139,66845,66846],{"class":160},"'.tab-nav a'",[139,66848,164],{"class":145},[139,66850,66851],{"class":141,"line":19194},[139,66852,66853],{"class":2512},"    \u002F\u002F console.log(as) \n",[139,66855,66856,66858,66860,66862,66864,66866,66868,66870,66872,66875,66877,66879,66881],{"class":141,"line":19199},[139,66857,5482],{"class":149},[139,66859,549],{"class":145},[139,66861,54083],{"class":149},[139,66863,11712],{"class":145},[139,66865,150],{"class":149},[139,66867,799],{"class":153},[139,66869,11719],{"class":145},[139,66871,796],{"class":149},[139,66873,66874],{"class":145}," as.",[139,66876,54204],{"class":153},[139,66878,5495],{"class":145},[139,66880,4577],{"class":149},[139,66882,14714],{"class":145},[139,66884,66885],{"class":141,"line":34880},[139,66886,66887],{"class":2512},"      \u002F\u002F console.log(as[i])\n",[139,66889,66890],{"class":141,"line":34886},[139,66891,66892],{"class":2512},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[139,66894,66895,66898,66900,66902,66905,66907,66909],{"class":141,"line":34892},[139,66896,66897],{"class":145},"      as[i].",[139,66899,60046],{"class":781},[139,66901,157],{"class":145},[139,66903,66904],{"class":160},"'mouseenter'",[139,66906,413],{"class":145},[139,66908,56683],{"class":149},[139,66910,56686],{"class":145},[139,66912,66913],{"class":141,"line":34898},[139,66914,66915],{"class":2512},"        \u002F\u002F console.log('鼠标经过')\n",[139,66917,66918],{"class":141,"line":34904},[139,66919,66920],{"class":2512},"        \u002F\u002F 排他思想  \n",[139,66922,66923],{"class":141,"line":34915},[139,66924,66925],{"class":2512},"        \u002F\u002F 干掉别人 移除类active\n",[139,66927,66928,66930,66932,66934,66937,66939,66941,66943,66946],{"class":141,"line":34921},[139,66929,54161],{"class":145},[139,66931,56633],{"class":781},[139,66933,157],{"class":145},[139,66935,66936],{"class":160},"'.tab-nav .active'",[139,66938,59237],{"class":145},[139,66940,59240],{"class":781},[139,66942,157],{"class":145},[139,66944,66945],{"class":160},"'active'",[139,66947,164],{"class":145},[139,66949,66950],{"class":141,"line":34941},[139,66951,66952],{"class":2512},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[139,66954,66955,66958,66961,66963,66965,66967],{"class":141,"line":34947},[139,66956,66957],{"class":153},"        this",[139,66959,66960],{"class":145},".classList.",[139,66962,7608],{"class":781},[139,66964,157],{"class":145},[139,66966,66945],{"class":160},[139,66968,164],{"class":145},[139,66970,66971],{"class":141,"line":34958},[139,66972,843],{"emptyLinePlaceholder":842},[139,66974,66975],{"class":141,"line":34964},[139,66976,66977],{"class":2512},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[139,66979,66980],{"class":141,"line":34970},[139,66981,66982],{"class":2512},"        \u002F\u002F 干掉别人\n",[139,66984,66985,66987,66989,66991,66994,66996,66998,67000,67002],{"class":141,"line":34976},[139,66986,54161],{"class":145},[139,66988,56633],{"class":781},[139,66990,157],{"class":145},[139,66992,66993],{"class":160},"'.tab-content .active'",[139,66995,59237],{"class":145},[139,66997,59240],{"class":781},[139,66999,157],{"class":145},[139,67001,66945],{"class":160},[139,67003,164],{"class":145},[139,67005,67006],{"class":141,"line":34982},[139,67007,67008],{"class":2512},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[139,67010,67011,67013,67015,67017,67020,67022,67024,67026,67028,67030,67032,67034,67036],{"class":141,"line":34988},[139,67012,54161],{"class":145},[139,67014,56633],{"class":781},[139,67016,157],{"class":145},[139,67018,67019],{"class":160},"`.tab-content .item:nth-child(${",[139,67021,2879],{"class":145},[139,67023,47805],{"class":149},[139,67025,27381],{"class":153},[139,67027,59266],{"class":160},[139,67029,59237],{"class":145},[139,67031,7608],{"class":781},[139,67033,157],{"class":145},[139,67035,66945],{"class":160},[139,67037,164],{"class":145},[139,67039,67040],{"class":141,"line":34994},[139,67041,843],{"emptyLinePlaceholder":842},[139,67043,67044],{"class":141,"line":35000},[139,67045,67046],{"class":145},"      })\n",[139,67048,67049],{"class":141,"line":35020},[139,67050,4472],{"class":145},[139,67052,67053,67055,67057],{"class":141,"line":35026},[139,67054,54652],{"class":145},[139,67056,54050],{"class":53538},[139,67058,53545],{"class":145},[139,67060,67061,67063,67065],{"class":141,"line":35042},[139,67062,54022],{"class":145},[139,67064,54037],{"class":53538},[139,67066,53545],{"class":145},[139,67068,67069],{"class":141,"line":35048},[139,67070,843],{"emptyLinePlaceholder":842},[139,67072,67073,67075,67077],{"class":141,"line":35062},[139,67074,54022],{"class":145},[139,67076,52873],{"class":53538},[139,67078,53545],{"class":145},[19,67080,67081],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67083,67084],{},"在监听事件中，this指向的就是他的调用者",[19,67086,67087],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67089,55955],{},[19,67091,67092],{},"(function () {",[19,67094,67095],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67097,67098],{},"list.addEventListener('click', function (e) {",[19,67100,67101],{},"if (e.target.tagName === 'A') {",[19,67103,67104],{},"\u002F\u002F 排他思想",[19,67106,67107],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67109,67110],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67112,67113],{},"\u002F\u002F console.log(old);",[19,67115,67116],{},"\u002F\u002F 判断",[19,67118,67119],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67121,67122],{},"if (old) old.classList.remove('active')",[19,67124,67125],{},"e.target.classList.add('active')",[19,67127,631],{},[19,67129,54699],{},[19,67131,67132],{},"})();",[1217,67134,67136],{"id":67135},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[130,67138,67140],{"className":52871,"code":67139,"language":52873,"meta":135,"style":135},"\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",[50,67141,67142,67152,67156,67164,67168,67182,67196,67208,67216,67222,67232,67242,67246,67250,67257,67269,67280,67297,67310,67324,67334,67338,67342,67349,67360,67378,67388,67400,67404,67408,67415,67432,67443,67455,67459,67463,67470,67482,67486,67494,67502,67506,67514,67522,67530,67545,67589,67597,67610,67623,67636,67644,67652,67660,67688,67696,67708,67721,67734,67742,67750,67758,67784,67792,67805,67817,67830,67838,67846,67854,67880,67888,67901,67913,67926,67934,67942,67950,67955,67975,67980,68000,68005,68022,68027,68035,68040,68069,68082,68086,68090,68095,68099,68127,68132,68149,68154,68159,68164,68169,68195,68199,68203,68211,68219,68223],{"__ignoreMap":135},[139,67143,67144,67146,67148,67150],{"class":141,"line":142},[139,67145,53535],{"class":145},[139,67147,53539],{"class":53538},[139,67149,53542],{"class":781},[139,67151,53545],{"class":145},[139,67153,67154],{"class":141,"line":210},[139,67155,843],{"emptyLinePlaceholder":842},[139,67157,67158,67160,67162],{"class":141,"line":254},[139,67159,796],{"class":145},[139,67161,52873],{"class":53538},[139,67163,53545],{"class":145},[139,67165,67166],{"class":141,"line":262},[139,67167,843],{"emptyLinePlaceholder":842},[139,67169,67170,67172,67174,67176,67178,67180],{"class":141,"line":313},[139,67171,796],{"class":145},[139,67173,53572],{"class":53538},[139,67175,53554],{"class":781},[139,67177,150],{"class":145},[139,67179,53559],{"class":160},[139,67181,53545],{"class":145},[139,67183,67184,67186,67188,67190,67192,67194],{"class":141,"line":462},[139,67185,54380],{"class":145},[139,67187,53582],{"class":53538},[139,67189,53585],{"class":781},[139,67191,150],{"class":145},[139,67193,53590],{"class":160},[139,67195,53545],{"class":145},[139,67197,67198,67200,67202,67204,67206],{"class":141,"line":474},[139,67199,54380],{"class":145},[139,67201,53645],{"class":53538},[139,67203,57548],{"class":145},[139,67205,53645],{"class":53538},[139,67207,53545],{"class":145},[139,67209,67210,67212,67214],{"class":141,"line":484},[139,67211,54380],{"class":145},[139,67213,2348],{"class":53538},[139,67215,53545],{"class":145},[139,67217,67218,67220],{"class":141,"line":989},[139,67219,8677],{"class":53538},[139,67221,17840],{"class":145},[139,67223,67224,67226,67228,67230],{"class":141,"line":994},[139,67225,56940],{"class":153},[139,67227,2265],{"class":145},[139,67229,2634],{"class":153},[139,67231,3591],{"class":145},[139,67233,67234,67236,67238,67240],{"class":141,"line":999},[139,67235,56929],{"class":153},[139,67237,2265],{"class":145},[139,67239,2634],{"class":153},[139,67241,3591],{"class":145},[139,67243,67244],{"class":141,"line":1006},[139,67245,4472],{"class":145},[139,67247,67248],{"class":141,"line":1027},[139,67249,843],{"emptyLinePlaceholder":842},[139,67251,67252,67255],{"class":141,"line":1040},[139,67253,67254],{"class":53538},"    table",[139,67256,17840],{"class":145},[139,67258,67259,67262,67264,67267],{"class":141,"line":2160},[139,67260,67261],{"class":153},"      border-collapse",[139,67263,2265],{"class":145},[139,67265,67266],{"class":153},"collapse",[139,67268,3591],{"class":145},[139,67270,67271,67274,67276,67278],{"class":141,"line":2188},[139,67272,67273],{"class":153},"      border-spacing",[139,67275,2265],{"class":145},[139,67277,2634],{"class":153},[139,67279,3591],{"class":145},[139,67281,67282,67284,67286,67288,67290,67292,67295],{"class":141,"line":3944},[139,67283,64210],{"class":153},[139,67285,2265],{"class":145},[139,67287,410],{"class":153},[139,67289,53729],{"class":149},[139,67291,53758],{"class":153},[139,67293,67294],{"class":153}," #c0c0c0",[139,67296,3591],{"class":145},[139,67298,67299,67301,67303,67306,67308],{"class":141,"line":3963},[139,67300,57005],{"class":153},[139,67302,2265],{"class":145},[139,67304,67305],{"class":153},"500",[139,67307,53729],{"class":149},[139,67309,3591],{"class":145},[139,67311,67312,67314,67316,67318,67320,67322],{"class":141,"line":3968},[139,67313,56940],{"class":153},[139,67315,2265],{"class":145},[139,67317,1017],{"class":153},[139,67319,53729],{"class":149},[139,67321,53793],{"class":153},[139,67323,3591],{"class":145},[139,67325,67326,67328,67330,67332],{"class":141,"line":3982},[139,67327,59520],{"class":153},[139,67329,2265],{"class":145},[139,67331,53829],{"class":153},[139,67333,3591],{"class":145},[139,67335,67336],{"class":141,"line":3987},[139,67337,4472],{"class":145},[139,67339,67340],{"class":141,"line":4014},[139,67341,843],{"emptyLinePlaceholder":842},[139,67343,67344,67347],{"class":141,"line":4019},[139,67345,67346],{"class":53538},"    th",[139,67348,17840],{"class":145},[139,67350,67351,67353,67355,67358],{"class":141,"line":4036},[139,67352,57118],{"class":153},[139,67354,2265],{"class":145},[139,67356,67357],{"class":153},"#09c",[139,67359,3591],{"class":145},[139,67361,67362,67365,67367,67369,67371,67373,67376],{"class":141,"line":4041},[139,67363,67364],{"class":153},"      font",[139,67366,2265],{"class":145},[139,67368,64572],{"class":153},[139,67370,66305],{"class":153},[139,67372,53729],{"class":149},[139,67374,67375],{"class":160}," \"微软雅黑\"",[139,67377,3591],{"class":145},[139,67379,67380,67382,67384,67386],{"class":141,"line":4046},[139,67381,59650],{"class":153},[139,67383,2265],{"class":145},[139,67385,63075],{"class":153},[139,67387,3591],{"class":145},[139,67389,67390,67392,67394,67396,67398],{"class":141,"line":4051},[139,67391,57019],{"class":153},[139,67393,2265],{"class":145},[139,67395,3235],{"class":153},[139,67397,53729],{"class":149},[139,67399,3591],{"class":145},[139,67401,67402],{"class":141,"line":4065},[139,67403,4472],{"class":145},[139,67405,67406],{"class":141,"line":4070},[139,67407,843],{"emptyLinePlaceholder":842},[139,67409,67410,67413],{"class":141,"line":4860},[139,67411,67412],{"class":53538},"    td",[139,67414,17840],{"class":145},[139,67416,67417,67419,67421,67423,67425,67427,67430],{"class":141,"line":4874},[139,67418,64210],{"class":153},[139,67420,2265],{"class":145},[139,67422,410],{"class":153},[139,67424,53729],{"class":149},[139,67426,53758],{"class":153},[139,67428,67429],{"class":153}," #d0d0d0",[139,67431,3591],{"class":145},[139,67433,67434,67436,67438,67441],{"class":141,"line":4882},[139,67435,59650],{"class":153},[139,67437,2265],{"class":145},[139,67439,67440],{"class":153},"#404060",[139,67442,3591],{"class":145},[139,67444,67445,67447,67449,67451,67453],{"class":141,"line":4887},[139,67446,56929],{"class":153},[139,67448,2265],{"class":145},[139,67450,536],{"class":153},[139,67452,53729],{"class":149},[139,67454,3591],{"class":145},[139,67456,67457],{"class":141,"line":4893},[139,67458,4472],{"class":145},[139,67460,67461],{"class":141,"line":4899},[139,67462,843],{"emptyLinePlaceholder":842},[139,67464,67465,67468],{"class":141,"line":4904},[139,67466,67467],{"class":781},"    .allCheck",[139,67469,17840],{"class":145},[139,67471,67472,67474,67476,67478,67480],{"class":141,"line":10222},[139,67473,57005],{"class":153},[139,67475,2265],{"class":145},[139,67477,3047],{"class":153},[139,67479,53729],{"class":149},[139,67481,3591],{"class":145},[139,67483,67484],{"class":141,"line":10246},[139,67485,4472],{"class":145},[139,67487,67488,67490,67492],{"class":141,"line":10251},[139,67489,54652],{"class":145},[139,67491,2348],{"class":53538},[139,67493,53545],{"class":145},[139,67495,67496,67498,67500],{"class":141,"line":10257},[139,67497,54022],{"class":145},[139,67499,53572],{"class":53538},[139,67501,53545],{"class":145},[139,67503,67504],{"class":141,"line":10284},[139,67505,843],{"emptyLinePlaceholder":842},[139,67507,67508,67510,67512],{"class":141,"line":10289},[139,67509,796],{"class":145},[139,67511,54037],{"class":53538},[139,67513,53545],{"class":145},[139,67515,67516,67518,67520],{"class":141,"line":10295},[139,67517,54380],{"class":145},[139,67519,26],{"class":53538},[139,67521,53545],{"class":145},[139,67523,67524,67526,67528],{"class":141,"line":10307},[139,67525,53579],{"class":145},[139,67527,32],{"class":53538},[139,67529,53545],{"class":145},[139,67531,67532,67534,67536,67538,67540,67543],{"class":141,"line":10319},[139,67533,57468],{"class":145},[139,67535,35],{"class":53538},[139,67537,55721],{"class":781},[139,67539,150],{"class":145},[139,67541,67542],{"class":160},"\"allCheck\"",[139,67544,53545],{"class":145},[139,67546,67547,67549,67551,67553,67555,67557,67559,67561,67563,67565,67567,67570,67573,67575,67577,67579,67582,67585,67587],{"class":141,"line":10331},[139,67548,57536],{"class":145},[139,67550,199],{"class":53538},[139,67552,56058],{"class":781},[139,67554,150],{"class":145},[139,67556,56063],{"class":160},[139,67558,17189],{"class":781},[139,67560,150],{"class":145},[139,67562,9926],{"class":160},[139,67564,17228],{"class":781},[139,67566,150],{"class":145},[139,67568,67569],{"class":160},"\"checkAll\"",[139,67571,67572],{"class":145},"> \u003C",[139,67574,139],{"class":53538},[139,67576,55721],{"class":781},[139,67578,150],{"class":145},[139,67580,67581],{"class":160},"\"all\"",[139,67583,67584],{"class":145},">全选\u003C\u002F",[139,67586,139],{"class":53538},[139,67588,53545],{"class":145},[139,67590,67591,67593,67595],{"class":141,"line":11990},[139,67592,57641],{"class":145},[139,67594,35],{"class":53538},[139,67596,53545],{"class":145},[139,67598,67599,67601,67603,67606,67608],{"class":141,"line":12015},[139,67600,57468],{"class":145},[139,67602,35],{"class":53538},[139,67604,67605],{"class":145},">商品\u003C\u002F",[139,67607,35],{"class":53538},[139,67609,53545],{"class":145},[139,67611,67612,67614,67616,67619,67621],{"class":141,"line":12038},[139,67613,57468],{"class":145},[139,67615,35],{"class":53538},[139,67617,67618],{"class":145},">商家\u003C\u002F",[139,67620,35],{"class":53538},[139,67622,53545],{"class":145},[139,67624,67625,67627,67629,67632,67634],{"class":141,"line":12062},[139,67626,57468],{"class":145},[139,67628,35],{"class":53538},[139,67630,67631],{"class":145},">价格\u003C\u002F",[139,67633,35],{"class":53538},[139,67635,53545],{"class":145},[139,67637,67638,67640,67642],{"class":141,"line":12067},[139,67639,54013],{"class":145},[139,67641,32],{"class":53538},[139,67643,53545],{"class":145},[139,67645,67646,67648,67650],{"class":141,"line":12072},[139,67647,53579],{"class":145},[139,67649,32],{"class":53538},[139,67651,53545],{"class":145},[139,67653,67654,67656,67658],{"class":141,"line":12077},[139,67655,57468],{"class":145},[139,67657,47],{"class":53538},[139,67659,53545],{"class":145},[139,67661,67662,67664,67666,67668,67670,67672,67674,67676,67679,67681,67683,67686],{"class":141,"line":12086},[139,67663,57536],{"class":145},[139,67665,199],{"class":53538},[139,67667,56058],{"class":781},[139,67669,150],{"class":145},[139,67671,56063],{"class":160},[139,67673,17189],{"class":781},[139,67675,150],{"class":145},[139,67677,67678],{"class":160},"\"check\"",[139,67680,55721],{"class":781},[139,67682,150],{"class":145},[139,67684,67685],{"class":160},"\"ck\"",[139,67687,53545],{"class":145},[139,67689,67690,67692,67694],{"class":141,"line":12091},[139,67691,57641],{"class":145},[139,67693,47],{"class":53538},[139,67695,53545],{"class":145},[139,67697,67698,67700,67702,67704,67706],{"class":141,"line":12097},[139,67699,57468],{"class":145},[139,67701,47],{"class":53538},[139,67703,63406],{"class":145},[139,67705,47],{"class":53538},[139,67707,53545],{"class":145},[139,67709,67710,67712,67714,67717,67719],{"class":141,"line":12118},[139,67711,57468],{"class":145},[139,67713,47],{"class":53538},[139,67715,67716],{"class":145},">小米\u003C\u002F",[139,67718,47],{"class":53538},[139,67720,53545],{"class":145},[139,67722,67723,67725,67727,67730,67732],{"class":141,"line":12124},[139,67724,57468],{"class":145},[139,67726,47],{"class":53538},[139,67728,67729],{"class":145},">￥1999\u003C\u002F",[139,67731,47],{"class":53538},[139,67733,53545],{"class":145},[139,67735,67736,67738,67740],{"class":141,"line":12138},[139,67737,54013],{"class":145},[139,67739,32],{"class":53538},[139,67741,53545],{"class":145},[139,67743,67744,67746,67748],{"class":141,"line":12144},[139,67745,53579],{"class":145},[139,67747,32],{"class":53538},[139,67749,53545],{"class":145},[139,67751,67752,67754,67756],{"class":141,"line":12171},[139,67753,57468],{"class":145},[139,67755,47],{"class":53538},[139,67757,53545],{"class":145},[139,67759,67760,67762,67764,67766,67768,67770,67772,67774,67776,67778,67780,67782],{"class":141,"line":12180},[139,67761,57536],{"class":145},[139,67763,199],{"class":53538},[139,67765,56058],{"class":781},[139,67767,150],{"class":145},[139,67769,56063],{"class":160},[139,67771,17189],{"class":781},[139,67773,150],{"class":145},[139,67775,67678],{"class":160},[139,67777,55721],{"class":781},[139,67779,150],{"class":145},[139,67781,67685],{"class":160},[139,67783,53545],{"class":145},[139,67785,67786,67788,67790],{"class":141,"line":12186},[139,67787,57641],{"class":145},[139,67789,47],{"class":53538},[139,67791,53545],{"class":145},[139,67793,67794,67796,67798,67801,67803],{"class":141,"line":12194},[139,67795,57468],{"class":145},[139,67797,47],{"class":53538},[139,67799,67800],{"class":145},">小米净水器\u003C\u002F",[139,67802,47],{"class":53538},[139,67804,53545],{"class":145},[139,67806,67807,67809,67811,67813,67815],{"class":141,"line":12199},[139,67808,57468],{"class":145},[139,67810,47],{"class":53538},[139,67812,67716],{"class":145},[139,67814,47],{"class":53538},[139,67816,53545],{"class":145},[139,67818,67819,67821,67823,67826,67828],{"class":141,"line":18871},[139,67820,57468],{"class":145},[139,67822,47],{"class":53538},[139,67824,67825],{"class":145},">￥4999\u003C\u002F",[139,67827,47],{"class":53538},[139,67829,53545],{"class":145},[139,67831,67832,67834,67836],{"class":141,"line":18877},[139,67833,54013],{"class":145},[139,67835,32],{"class":53538},[139,67837,53545],{"class":145},[139,67839,67840,67842,67844],{"class":141,"line":18900},[139,67841,53579],{"class":145},[139,67843,32],{"class":53538},[139,67845,53545],{"class":145},[139,67847,67848,67850,67852],{"class":141,"line":18906},[139,67849,57468],{"class":145},[139,67851,47],{"class":53538},[139,67853,53545],{"class":145},[139,67855,67856,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878],{"class":141,"line":18929},[139,67857,57536],{"class":145},[139,67859,199],{"class":53538},[139,67861,56058],{"class":781},[139,67863,150],{"class":145},[139,67865,56063],{"class":160},[139,67867,17189],{"class":781},[139,67869,150],{"class":145},[139,67871,67678],{"class":160},[139,67873,55721],{"class":781},[139,67875,150],{"class":145},[139,67877,67685],{"class":160},[139,67879,53545],{"class":145},[139,67881,67882,67884,67886],{"class":141,"line":18943},[139,67883,57641],{"class":145},[139,67885,47],{"class":53538},[139,67887,53545],{"class":145},[139,67889,67890,67892,67894,67897,67899],{"class":141,"line":18963},[139,67891,57468],{"class":145},[139,67893,47],{"class":53538},[139,67895,67896],{"class":145},">小米电视\u003C\u002F",[139,67898,47],{"class":53538},[139,67900,53545],{"class":145},[139,67902,67903,67905,67907,67909,67911],{"class":141,"line":18969},[139,67904,57468],{"class":145},[139,67906,47],{"class":53538},[139,67908,67716],{"class":145},[139,67910,47],{"class":53538},[139,67912,53545],{"class":145},[139,67914,67915,67917,67919,67922,67924],{"class":141,"line":18980},[139,67916,57468],{"class":145},[139,67918,47],{"class":53538},[139,67920,67921],{"class":145},">￥5999\u003C\u002F",[139,67923,47],{"class":53538},[139,67925,53545],{"class":145},[139,67927,67928,67930,67932],{"class":141,"line":19003},[139,67929,54013],{"class":145},[139,67931,32],{"class":53538},[139,67933,53545],{"class":145},[139,67935,67936,67938,67940],{"class":141,"line":19025},[139,67937,54652],{"class":145},[139,67939,26],{"class":53538},[139,67941,53545],{"class":145},[139,67943,67944,67946,67948],{"class":141,"line":19030},[139,67945,54380],{"class":145},[139,67947,54050],{"class":53538},[139,67949,53545],{"class":145},[139,67951,67952],{"class":141,"line":19036},[139,67953,67954],{"class":2512},"    \u002F\u002F 1. 获取大复选框\n",[139,67956,67957,67959,67962,67964,67966,67968,67970,67973],{"class":141,"line":19050},[139,67958,13494],{"class":149},[139,67960,67961],{"class":153}," checkAll",[139,67963,15836],{"class":149},[139,67965,56630],{"class":145},[139,67967,56633],{"class":781},[139,67969,157],{"class":145},[139,67971,67972],{"class":160},"'#checkAll'",[139,67974,164],{"class":145},[139,67976,67977],{"class":141,"line":19063},[139,67978,67979],{"class":2512},"    \u002F\u002F 2. 获取所有的小复选框\n",[139,67981,67982,67984,67987,67989,67991,67993,67995,67998],{"class":141,"line":19068},[139,67983,13494],{"class":149},[139,67985,67986],{"class":153}," cks",[139,67988,15836],{"class":149},[139,67990,56630],{"class":145},[139,67992,57915],{"class":781},[139,67994,157],{"class":145},[139,67996,67997],{"class":160},"'.ck'",[139,67999,164],{"class":145},[139,68001,68002],{"class":141,"line":19082},[139,68003,68004],{"class":2512},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[139,68006,68007,68010,68012,68014,68016,68018,68020],{"class":141,"line":19087},[139,68008,68009],{"class":145},"    checkAll.",[139,68011,60046],{"class":781},[139,68013,157],{"class":145},[139,68015,60051],{"class":160},[139,68017,413],{"class":145},[139,68019,56683],{"class":149},[139,68021,56686],{"class":145},[139,68023,68024],{"class":141,"line":19093},[139,68025,68026],{"class":2512},"      \u002F\u002F 得到当前大复选框的选中状态\n",[139,68028,68029,68032],{"class":141,"line":19098},[139,68030,68031],{"class":2512},"      \u002F\u002F console.log(checkAll.checked)",[139,68033,68034],{"class":2512},"  \u002F\u002F 得到 是 true 或者是 false\n",[139,68036,68037],{"class":141,"line":19112},[139,68038,68039],{"class":2512},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[139,68041,68042,68044,68046,68048,68050,68052,68054,68056,68058,68061,68063,68065,68067],{"class":141,"line":19117},[139,68043,54519],{"class":149},[139,68045,549],{"class":145},[139,68047,54083],{"class":149},[139,68049,11712],{"class":145},[139,68051,150],{"class":149},[139,68053,799],{"class":153},[139,68055,11719],{"class":145},[139,68057,796],{"class":149},[139,68059,68060],{"class":145}," cks.",[139,68062,54204],{"class":153},[139,68064,5495],{"class":145},[139,68066,4577],{"class":149},[139,68068,14714],{"class":145},[139,68070,68071,68074,68076,68079],{"class":141,"line":19122},[139,68072,68073],{"class":145},"        cks[i].checked ",[139,68075,150],{"class":149},[139,68077,68078],{"class":153}," this",[139,68080,68081],{"class":145},".checked\n",[139,68083,68084],{"class":141,"line":19136},[139,68085,54633],{"class":145},[139,68087,68088],{"class":141,"line":19148},[139,68089,35706],{"class":145},[139,68091,68092],{"class":141,"line":19153},[139,68093,68094],{"class":2512},"    \u002F\u002F 5. 小复选框控制大复选框\n",[139,68096,68097],{"class":141,"line":19166},[139,68098,843],{"emptyLinePlaceholder":842},[139,68100,68101,68103,68105,68107,68109,68111,68113,68115,68117,68119,68121,68123,68125],{"class":141,"line":19171},[139,68102,5482],{"class":149},[139,68104,549],{"class":145},[139,68106,54083],{"class":149},[139,68108,11712],{"class":145},[139,68110,150],{"class":149},[139,68112,799],{"class":153},[139,68114,11719],{"class":145},[139,68116,796],{"class":149},[139,68118,68060],{"class":145},[139,68120,54204],{"class":153},[139,68122,5495],{"class":145},[139,68124,4577],{"class":149},[139,68126,14714],{"class":145},[139,68128,68129],{"class":141,"line":19176},[139,68130,68131],{"class":2512},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[139,68133,68134,68137,68139,68141,68143,68145,68147],{"class":141,"line":19181},[139,68135,68136],{"class":145},"      cks[i].",[139,68138,60046],{"class":781},[139,68140,157],{"class":145},[139,68142,60051],{"class":160},[139,68144,413],{"class":145},[139,68146,56683],{"class":149},[139,68148,56686],{"class":145},[139,68150,68151],{"class":141,"line":19194},[139,68152,68153],{"class":2512},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[139,68155,68156],{"class":141,"line":19199},[139,68157,68158],{"class":2512},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[139,68160,68161],{"class":141,"line":34880},[139,68162,68163],{"class":2512},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[139,68165,68166],{"class":141,"line":34886},[139,68167,68168],{"class":2512},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[139,68170,68171,68174,68176,68178,68180,68182,68185,68187,68189,68191,68193],{"class":141,"line":34892},[139,68172,68173],{"class":145},"        checkAll.checked ",[139,68175,150],{"class":149},[139,68177,56630],{"class":145},[139,68179,57915],{"class":781},[139,68181,157],{"class":145},[139,68183,68184],{"class":160},"'.ck:checked'",[139,68186,33078],{"class":145},[139,68188,54204],{"class":153},[139,68190,60139],{"class":149},[139,68192,68060],{"class":145},[139,68194,58065],{"class":153},[139,68196,68197],{"class":141,"line":34898},[139,68198,67046],{"class":145},[139,68200,68201],{"class":141,"line":34904},[139,68202,4472],{"class":145},[139,68204,68205,68207,68209],{"class":141,"line":34915},[139,68206,54652],{"class":145},[139,68208,54050],{"class":53538},[139,68210,53545],{"class":145},[139,68212,68213,68215,68217],{"class":141,"line":34921},[139,68214,54022],{"class":145},[139,68216,54037],{"class":53538},[139,68218,53545],{"class":145},[139,68220,68221],{"class":141,"line":34941},[139,68222,843],{"emptyLinePlaceholder":842},[139,68224,68225,68227,68229],{"class":141,"line":34947},[139,68226,54022],{"class":145},[139,68228,52873],{"class":53538},[139,68230,53545],{"class":145},[19,68232,68233],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68235,68236],{},"用好之间比较得到的布尔值！！！",[19,68238,68239,68240,68243,68244,549,68247,3019,68249,68252],{},"在 JS 里访问的时候，",[50,68241,68242],{},"checkbox.checked"," 是一个 ",[1674,68245,68246],{},"布尔值",[50,68248,3660],{},[50,68250,68251],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68254,68255,68256,68259,68260],{},"HTML 的 ",[50,68257,68258],{},"checked=\"checked\""," 只是 ",[1674,68261,68262,68263,68266],{},"初始值；JS 的 ",[50,68264,68265],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68268,68269],{},"：checked是一个伪类选择器",[19,68271,68272],{},[3760,68273],{"alt":135,"src":68274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68276,68277,68280],{},[68278,68279],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68282,68283],{},[3760,68284],{"alt":135,"src":68285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68287,68289],{"id":68288},"_33-dom事件进阶","3.3 DOM事件进阶",[1217,68291,68293],{"id":68292},"_331-事件流","3.3.1 事件流",[19,68295,68296],{},[3760,68297],{"alt":135,"src":68298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24265,68300,68302],{"id":68301},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68304,68305],{},[3760,68306],{"alt":135,"src":68307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[130,68309,68311],{"className":52871,"code":68310,"language":52873,"meta":135,"style":135},"\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",[50,68312,68313,68323,68337,68341,68349,68363,68383,68395,68403,68410,68422,68434,68444,68448,68452,68459,68471,68483,68493,68497,68505,68513,68517,68525,68540,68559,68567,68575,68595,68615,68631,68642,68650,68667,68678,68686,68703,68714,68722,68730,68738,68742],{"__ignoreMap":135},[139,68314,68315,68317,68319,68321],{"class":141,"line":142},[139,68316,53535],{"class":145},[139,68318,53539],{"class":53538},[139,68320,53542],{"class":781},[139,68322,53545],{"class":145},[139,68324,68325,68327,68329,68331,68333,68335],{"class":141,"line":210},[139,68326,796],{"class":145},[139,68328,52873],{"class":53538},[139,68330,53554],{"class":781},[139,68332,150],{"class":145},[139,68334,53559],{"class":160},[139,68336,53545],{"class":145},[139,68338,68339],{"class":141,"line":254},[139,68340,843],{"emptyLinePlaceholder":842},[139,68342,68343,68345,68347],{"class":141,"line":262},[139,68344,796],{"class":145},[139,68346,53572],{"class":53538},[139,68348,53545],{"class":145},[139,68350,68351,68353,68355,68357,68359,68361],{"class":141,"line":313},[139,68352,54380],{"class":145},[139,68354,53582],{"class":53538},[139,68356,53585],{"class":781},[139,68358,150],{"class":145},[139,68360,53590],{"class":160},[139,68362,53545],{"class":145},[139,68364,68365,68367,68369,68371,68373,68375,68377,68379,68381],{"class":141,"line":462},[139,68366,54380],{"class":145},[139,68368,53582],{"class":53538},[139,68370,17189],{"class":781},[139,68372,150],{"class":145},[139,68374,53629],{"class":160},[139,68376,53609],{"class":781},[139,68378,150],{"class":145},[139,68380,53636],{"class":160},[139,68382,53545],{"class":145},[139,68384,68385,68387,68389,68391,68393],{"class":141,"line":474},[139,68386,54380],{"class":145},[139,68388,53645],{"class":53538},[139,68390,53648],{"class":145},[139,68392,53645],{"class":53538},[139,68394,53545],{"class":145},[139,68396,68397,68399,68401],{"class":141,"line":484},[139,68398,54380],{"class":145},[139,68400,2348],{"class":53538},[139,68402,53545],{"class":145},[139,68404,68405,68408],{"class":141,"line":989},[139,68406,68407],{"class":781},"    .father",[139,68409,17840],{"class":145},[139,68411,68412,68414,68416,68418,68420],{"class":141,"line":994},[139,68413,57005],{"class":153},[139,68415,2265],{"class":145},[139,68417,67305],{"class":153},[139,68419,53729],{"class":149},[139,68421,3591],{"class":145},[139,68423,68424,68426,68428,68430,68432],{"class":141,"line":999},[139,68425,57019],{"class":153},[139,68427,2265],{"class":145},[139,68429,67305],{"class":153},[139,68431,53729],{"class":149},[139,68433,3591],{"class":145},[139,68435,68436,68438,68440,68442],{"class":141,"line":1006},[139,68437,57118],{"class":153},[139,68439,2265],{"class":145},[139,68441,53882],{"class":153},[139,68443,3591],{"class":145},[139,68445,68446],{"class":141,"line":1027},[139,68447,4472],{"class":145},[139,68449,68450],{"class":141,"line":1040},[139,68451,843],{"emptyLinePlaceholder":842},[139,68453,68454,68457],{"class":141,"line":2160},[139,68455,68456],{"class":781},"    .son",[139,68458,17840],{"class":145},[139,68460,68461,68463,68465,68467,68469],{"class":141,"line":2188},[139,68462,57005],{"class":153},[139,68464,2265],{"class":145},[139,68466,1022],{"class":153},[139,68468,53729],{"class":149},[139,68470,3591],{"class":145},[139,68472,68473,68475,68477,68479,68481],{"class":141,"line":3944},[139,68474,57019],{"class":153},[139,68476,2265],{"class":145},[139,68478,1022],{"class":153},[139,68480,53729],{"class":149},[139,68482,3591],{"class":145},[139,68484,68485,68487,68489,68491],{"class":141,"line":3963},[139,68486,57118],{"class":153},[139,68488,2265],{"class":145},[139,68490,57123],{"class":153},[139,68492,3591],{"class":145},[139,68494,68495],{"class":141,"line":3968},[139,68496,4472],{"class":145},[139,68498,68499,68501,68503],{"class":141,"line":3982},[139,68500,54652],{"class":145},[139,68502,2348],{"class":53538},[139,68504,53545],{"class":145},[139,68506,68507,68509,68511],{"class":141,"line":3987},[139,68508,54022],{"class":145},[139,68510,53572],{"class":53538},[139,68512,53545],{"class":145},[139,68514,68515],{"class":141,"line":4014},[139,68516,843],{"emptyLinePlaceholder":842},[139,68518,68519,68521,68523],{"class":141,"line":4019},[139,68520,796],{"class":145},[139,68522,54037],{"class":53538},[139,68524,53545],{"class":145},[139,68526,68527,68529,68531,68533,68535,68538],{"class":141,"line":4036},[139,68528,54380],{"class":145},[139,68530,53848],{"class":53538},[139,68532,55721],{"class":781},[139,68534,150],{"class":145},[139,68536,68537],{"class":160},"\"father\"",[139,68539,53545],{"class":145},[139,68541,68542,68544,68546,68548,68550,68553,68555,68557],{"class":141,"line":4041},[139,68543,53579],{"class":145},[139,68545,53848],{"class":53538},[139,68547,55721],{"class":781},[139,68549,150],{"class":145},[139,68551,68552],{"class":160},"\"son\"",[139,68554,57548],{"class":145},[139,68556,53848],{"class":53538},[139,68558,53545],{"class":145},[139,68560,68561,68563,68565],{"class":141,"line":4046},[139,68562,54652],{"class":145},[139,68564,53848],{"class":53538},[139,68566,53545],{"class":145},[139,68568,68569,68571,68573],{"class":141,"line":4051},[139,68570,54380],{"class":145},[139,68572,54050],{"class":53538},[139,68574,53545],{"class":145},[139,68576,68577,68579,68582,68584,68586,68588,68590,68593],{"class":141,"line":4065},[139,68578,13494],{"class":149},[139,68580,68581],{"class":153}," fa",[139,68583,15836],{"class":149},[139,68585,56630],{"class":145},[139,68587,56633],{"class":781},[139,68589,157],{"class":145},[139,68591,68592],{"class":160},"'.father'",[139,68594,164],{"class":145},[139,68596,68597,68599,68602,68604,68606,68608,68610,68613],{"class":141,"line":4070},[139,68598,13494],{"class":149},[139,68600,68601],{"class":153}," son",[139,68603,15836],{"class":149},[139,68605,56630],{"class":145},[139,68607,56633],{"class":781},[139,68609,157],{"class":145},[139,68611,68612],{"class":160},"'.son'",[139,68614,164],{"class":145},[139,68616,68617,68619,68621,68623,68625,68627,68629],{"class":141,"line":4860},[139,68618,54642],{"class":145},[139,68620,60046],{"class":781},[139,68622,157],{"class":145},[139,68624,60051],{"class":160},[139,68626,413],{"class":145},[139,68628,56683],{"class":149},[139,68630,56686],{"class":145},[139,68632,68633,68635,68637,68640],{"class":141,"line":4874},[139,68634,61158],{"class":781},[139,68636,157],{"class":145},[139,68638,68639],{"class":160},"'woshiu1'",[139,68641,164],{"class":145},[139,68643,68644,68646,68648],{"class":141,"line":4882},[139,68645,56769],{"class":145},[139,68647,3660],{"class":153},[139,68649,164],{"class":145},[139,68651,68652,68655,68657,68659,68661,68663,68665],{"class":141,"line":4887},[139,68653,68654],{"class":145},"    fa.",[139,68656,60046],{"class":781},[139,68658,157],{"class":145},[139,68660,60051],{"class":160},[139,68662,413],{"class":145},[139,68664,56683],{"class":149},[139,68666,56686],{"class":145},[139,68668,68669,68671,68673,68676],{"class":141,"line":4893},[139,68670,61158],{"class":781},[139,68672,157],{"class":145},[139,68674,68675],{"class":160},"'1'",[139,68677,164],{"class":145},[139,68679,68680,68682,68684],{"class":141,"line":4899},[139,68681,56769],{"class":145},[139,68683,3660],{"class":153},[139,68685,164],{"class":145},[139,68687,68688,68691,68693,68695,68697,68699,68701],{"class":141,"line":4904},[139,68689,68690],{"class":145},"    son.",[139,68692,60046],{"class":781},[139,68694,157],{"class":145},[139,68696,60051],{"class":160},[139,68698,413],{"class":145},[139,68700,56683],{"class":149},[139,68702,56686],{"class":145},[139,68704,68705,68707,68709,68712],{"class":141,"line":10222},[139,68706,61158],{"class":781},[139,68708,157],{"class":145},[139,68710,68711],{"class":160},"'2'",[139,68713,164],{"class":145},[139,68715,68716,68718,68720],{"class":141,"line":10246},[139,68717,56769],{"class":145},[139,68719,3660],{"class":153},[139,68721,164],{"class":145},[139,68723,68724,68726,68728],{"class":141,"line":10251},[139,68725,54652],{"class":145},[139,68727,54050],{"class":53538},[139,68729,53545],{"class":145},[139,68731,68732,68734,68736],{"class":141,"line":10257},[139,68733,54022],{"class":145},[139,68735,54037],{"class":53538},[139,68737,53545],{"class":145},[139,68739,68740],{"class":141,"line":10284},[139,68741,843],{"emptyLinePlaceholder":842},[139,68743,68744,68746,68748],{"class":141,"line":10289},[139,68745,54022],{"class":145},[139,68747,52873],{"class":53538},[139,68749,53545],{"class":145},[19,68751,68752],{},[3760,68753],{"alt":135,"src":68754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68756,68757],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24265,68759,68761],{"id":68760},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68763,68764],{},[3760,68765],{"alt":135,"src":68766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68768,68769],{},"反着来",[19,68771,68772],{},"注意是同名事件，比如都是‘click’",[24265,68774,68776],{"id":68775},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68778,68779],{},[3760,68780],{"alt":135,"src":68781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24265,68783,68785],{"id":68784},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68787,68788],{},[3760,68789],{"alt":135,"src":68790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68792,68793],{},[3760,68794],{"alt":135,"src":68795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24265,68797,68799],{"id":68798},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1760,68801,68802],{},[1763,68803,68804],{},"事件类型的区别",[19,68806,68807],{},[3760,68808],{"alt":135,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68811,68812],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1760,68814,68815],{"start":210},[1763,68816,68817],{},"注册事件的区别",[19,68819,68820],{},[3760,68821],{"alt":135,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24265,68824,68826],{"id":68825},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68828,68829],{},[3760,68830],{"alt":135,"src":68831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68833,68834],{},[3760,68835],{"alt":135,"src":68836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[130,68838,68840],{"className":55302,"code":68839,"language":55304,"meta":135,"style":135},"\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",[50,68841,68842,68850,68867,68890,68898,68903,68908,68913,68917,68925,68933],{"__ignoreMap":135},[139,68843,68844,68846,68848],{"class":141,"line":142},[139,68845,796],{"class":145},[139,68847,54037],{"class":53538},[139,68849,53545],{"class":145},[139,68851,68852,68854,68857,68860,68862,68865],{"class":141,"line":210},[139,68853,54380],{"class":145},[139,68855,68856],{"class":53538},"form",[139,68858,68859],{"class":781}," action",[139,68861,150],{"class":145},[139,68863,68864],{"class":160},"\"http:\u002F\u002Fwww.itcast.cn\"",[139,68866,53545],{"class":145},[139,68868,68869,68871,68873,68875,68877,68880,68883,68885,68888],{"class":141,"line":254},[139,68870,53579],{"class":145},[139,68872,199],{"class":53538},[139,68874,56058],{"class":781},[139,68876,150],{"class":145},[139,68878,68879],{"class":160},"\"submit\"",[139,68881,68882],{"class":781}," value",[139,68884,150],{"class":145},[139,68886,68887],{"class":160},"\"免费注册\"",[139,68889,53545],{"class":145},[139,68891,68892,68894,68896],{"class":141,"line":262},[139,68893,53579],{"class":145},[139,68895,54050],{"class":53538},[139,68897,53545],{"class":145},[139,68899,68900],{"class":141,"line":313},[139,68901,68902],{"class":145},"      const form = document.querySelector('form')\n",[139,68904,68905],{"class":141,"line":462},[139,68906,68907],{"class":145},"      form.addEventListener('submit', function (e) {\n",[139,68909,68910],{"class":141,"line":474},[139,68911,68912],{"class":145},"        e.preventDefault()\n",[139,68914,68915],{"class":141,"line":484},[139,68916,67046],{"class":145},[139,68918,68919,68921,68923],{"class":141,"line":989},[139,68920,54013],{"class":145},[139,68922,54050],{"class":53538},[139,68924,53545],{"class":145},[139,68926,68927,68929,68931],{"class":141,"line":994},[139,68928,54652],{"class":145},[139,68930,68856],{"class":53538},[139,68932,53545],{"class":145},[139,68934,68935,68937,68939],{"class":141,"line":999},[139,68936,54022],{"class":145},[139,68938,54037],{"class":53538},[139,68940,53545],{"class":145},[19,68942,68943],{},"点击不在跳转！！！",[1217,68945,68947],{"id":68946},"_332-事件委托","3.3.2 事件委托",[19,68949,68950],{},[3760,68951],{"alt":135,"src":68952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[130,68954,68956],{"className":52871,"code":68955,"language":52873,"meta":135,"style":135},"\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",[50,68957,68958,68968,68982,68986,68994,69008,69028,69040,69048,69052,69060,69068,69080,69092,69104,69116,69128,69141,69149,69157,69162,69181,69202,69207,69212,69217,69222,69230,69234,69244,69248,69253,69258,69272,69282,69286,69290,69298,69306,69310],{"__ignoreMap":135},[139,68959,68960,68962,68964,68966],{"class":141,"line":142},[139,68961,53535],{"class":145},[139,68963,53539],{"class":53538},[139,68965,53542],{"class":781},[139,68967,53545],{"class":145},[139,68969,68970,68972,68974,68976,68978,68980],{"class":141,"line":210},[139,68971,796],{"class":145},[139,68973,52873],{"class":53538},[139,68975,53554],{"class":781},[139,68977,150],{"class":145},[139,68979,53559],{"class":160},[139,68981,53545],{"class":145},[139,68983,68984],{"class":141,"line":254},[139,68985,843],{"emptyLinePlaceholder":842},[139,68987,68988,68990,68992],{"class":141,"line":262},[139,68989,796],{"class":145},[139,68991,53572],{"class":53538},[139,68993,53545],{"class":145},[139,68995,68996,68998,69000,69002,69004,69006],{"class":141,"line":313},[139,68997,54380],{"class":145},[139,68999,53582],{"class":53538},[139,69001,53585],{"class":781},[139,69003,150],{"class":145},[139,69005,53590],{"class":160},[139,69007,53545],{"class":145},[139,69009,69010,69012,69014,69016,69018,69020,69022,69024,69026],{"class":141,"line":462},[139,69011,54380],{"class":145},[139,69013,53582],{"class":53538},[139,69015,17189],{"class":781},[139,69017,150],{"class":145},[139,69019,53629],{"class":160},[139,69021,53609],{"class":781},[139,69023,150],{"class":145},[139,69025,53636],{"class":160},[139,69027,53545],{"class":145},[139,69029,69030,69032,69034,69036,69038],{"class":141,"line":474},[139,69031,54380],{"class":145},[139,69033,53645],{"class":53538},[139,69035,53648],{"class":145},[139,69037,53645],{"class":53538},[139,69039,53545],{"class":145},[139,69041,69042,69044,69046],{"class":141,"line":484},[139,69043,54022],{"class":145},[139,69045,53572],{"class":53538},[139,69047,53545],{"class":145},[139,69049,69050],{"class":141,"line":989},[139,69051,843],{"emptyLinePlaceholder":842},[139,69053,69054,69056,69058],{"class":141,"line":994},[139,69055,796],{"class":145},[139,69057,54037],{"class":53538},[139,69059,53545],{"class":145},[139,69061,69062,69064,69066],{"class":141,"line":999},[139,69063,54380],{"class":145},[139,69065,3437],{"class":53538},[139,69067,53545],{"class":145},[139,69069,69070,69072,69074,69076,69078],{"class":141,"line":1006},[139,69071,53579],{"class":145},[139,69073,1763],{"class":53538},[139,69075,56200],{"class":145},[139,69077,1763],{"class":53538},[139,69079,53545],{"class":145},[139,69081,69082,69084,69086,69088,69090],{"class":141,"line":1027},[139,69083,53579],{"class":145},[139,69085,1763],{"class":53538},[139,69087,56219],{"class":145},[139,69089,1763],{"class":53538},[139,69091,53545],{"class":145},[139,69093,69094,69096,69098,69100,69102],{"class":141,"line":1040},[139,69095,53579],{"class":145},[139,69097,1763],{"class":53538},[139,69099,56238],{"class":145},[139,69101,1763],{"class":53538},[139,69103,53545],{"class":145},[139,69105,69106,69108,69110,69112,69114],{"class":141,"line":2160},[139,69107,53579],{"class":145},[139,69109,1763],{"class":53538},[139,69111,56257],{"class":145},[139,69113,1763],{"class":53538},[139,69115,53545],{"class":145},[139,69117,69118,69120,69122,69124,69126],{"class":141,"line":2188},[139,69119,53579],{"class":145},[139,69121,1763],{"class":53538},[139,69123,56276],{"class":145},[139,69125,1763],{"class":53538},[139,69127,53545],{"class":145},[139,69129,69130,69132,69134,69137,69139],{"class":141,"line":3944},[139,69131,53579],{"class":145},[139,69133,19],{"class":53538},[139,69135,69136],{"class":145},">我不需要变色\u003C\u002F",[139,69138,19],{"class":53538},[139,69140,53545],{"class":145},[139,69142,69143,69145,69147],{"class":141,"line":3963},[139,69144,54652],{"class":145},[139,69146,3437],{"class":53538},[139,69148,53545],{"class":145},[139,69150,69151,69153,69155],{"class":141,"line":3968},[139,69152,54380],{"class":145},[139,69154,54050],{"class":53538},[139,69156,53545],{"class":145},[139,69158,69159],{"class":141,"line":3982},[139,69160,69161],{"class":2512},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[139,69163,69164,69166,69168,69170,69172,69174,69176,69179],{"class":141,"line":3987},[139,69165,13494],{"class":149},[139,69167,63525],{"class":153},[139,69169,15836],{"class":149},[139,69171,56630],{"class":145},[139,69173,56633],{"class":781},[139,69175,157],{"class":145},[139,69177,69178],{"class":160},"'ul'",[139,69180,164],{"class":145},[139,69182,69183,69186,69188,69190,69192,69194,69196,69198,69200],{"class":141,"line":4014},[139,69184,69185],{"class":145},"    ul.",[139,69187,60046],{"class":781},[139,69189,157],{"class":145},[139,69191,60051],{"class":160},[139,69193,413],{"class":145},[139,69195,56683],{"class":149},[139,69197,549],{"class":145},[139,69199,628],{"class":2111},[139,69201,14714],{"class":145},[139,69203,69204],{"class":141,"line":4019},[139,69205,69206],{"class":2512},"      \u002F\u002F alert(1)\n",[139,69208,69209],{"class":141,"line":4036},[139,69210,69211],{"class":2512},"      \u002F\u002F e.target就是我们点击的对象\n",[139,69213,69214],{"class":141,"line":4041},[139,69215,69216],{"class":2512},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[139,69218,69219],{"class":141,"line":4046},[139,69220,69221],{"class":2512},"      \u002F\u002F e.target.style.color = 'red'\n",[139,69223,69224,69226,69228],{"class":141,"line":4051},[139,69225,60477],{"class":145},[139,69227,60480],{"class":781},[139,69229,901],{"class":145},[139,69231,69232],{"class":141,"line":4065},[139,69233,843],{"emptyLinePlaceholder":842},[139,69235,69236,69238,69241],{"class":141,"line":4070},[139,69237,60477],{"class":145},[139,69239,69240],{"class":781},"dir",[139,69242,69243],{"class":145},"(e.target)\n",[139,69245,69246],{"class":141,"line":4860},[139,69247,843],{"emptyLinePlaceholder":842},[139,69249,69250],{"class":141,"line":4874},[139,69251,69252],{"class":2512},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[139,69254,69255],{"class":141,"line":4882},[139,69256,69257],{"class":2512},"      \u002F\u002F 通过tagName来进行判断\n",[139,69259,69260,69262,69265,69267,69270],{"class":141,"line":4887},[139,69261,56714],{"class":149},[139,69263,69264],{"class":145}," (e.target.tagName ",[139,69266,56720],{"class":149},[139,69268,69269],{"class":160}," 'LI'",[139,69271,14714],{"class":145},[139,69273,69274,69277,69279],{"class":141,"line":4893},[139,69275,69276],{"class":145},"        e.target.style.color ",[139,69278,150],{"class":149},[139,69280,69281],{"class":160}," 'red'\n",[139,69283,69284],{"class":141,"line":4899},[139,69285,54633],{"class":145},[139,69287,69288],{"class":141,"line":4904},[139,69289,35706],{"class":145},[139,69291,69292,69294,69296],{"class":141,"line":10222},[139,69293,54652],{"class":145},[139,69295,54050],{"class":53538},[139,69297,53545],{"class":145},[139,69299,69300,69302,69304],{"class":141,"line":10246},[139,69301,54022],{"class":145},[139,69303,54037],{"class":53538},[139,69305,53545],{"class":145},[139,69307,69308],{"class":141,"line":10251},[139,69309,843],{"emptyLinePlaceholder":842},[139,69311,69312,69314,69316],{"class":141,"line":10257},[139,69313,54022],{"class":145},[139,69315,52873],{"class":53538},[139,69317,53545],{"class":145},[19,69319,69320],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69322,69323],{},"if(e.target.ragName==='P') {}",[19,69325,69326],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69328,69329],{},"通过事件委托的方式实现tab栏切换改造：",[19,69331,69332],{},"一定要记住自定义属性！！！！！！",[19,69334,69335],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69337,69338],{},"id是自定义的属性名",[19,69340,69341],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[130,69343,69345],{"className":52871,"code":69344,"language":52873,"meta":135,"style":135},"\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",[50,69346,69347,69357,69371,69375,69383,69397,69417,69437,69449,69457,69463,69473,69483,69487,69491,69497,69509,69521,69533,69549,69553,69557,69563,69575,69587,69599,69609,69619,69623,69627,69635,69647,69657,69669,69673,69677,69685,69695,69705,69715,69719,69723,69733,69747,69759,69763,69767,69779,69789,69805,69815,69819,69823,69837,69847,69857,69861,69865,69871,69885,69889,69893,69901,69911,69915,69919,69928,69938,69942,69950,69958,69962,69970,69984,69998,70010,70018,70057,70089,70121,70153,70185,70193,70201,70215,70249,70283,70317,70351,70385,70393,70401,70409,70414,70419,70438,70443,70463,70471,70476,70489,70510,70523,70527,70532,70537,70550,70570,70598,70602,70606,70610,70618,70626,70630],{"__ignoreMap":135},[139,69348,69349,69351,69353,69355],{"class":141,"line":142},[139,69350,53535],{"class":145},[139,69352,53539],{"class":53538},[139,69354,53542],{"class":781},[139,69356,53545],{"class":145},[139,69358,69359,69361,69363,69365,69367,69369],{"class":141,"line":210},[139,69360,796],{"class":145},[139,69362,52873],{"class":53538},[139,69364,53554],{"class":781},[139,69366,150],{"class":145},[139,69368,53559],{"class":160},[139,69370,53545],{"class":145},[139,69372,69373],{"class":141,"line":254},[139,69374,843],{"emptyLinePlaceholder":842},[139,69376,69377,69379,69381],{"class":141,"line":262},[139,69378,796],{"class":145},[139,69380,53572],{"class":53538},[139,69382,53545],{"class":145},[139,69384,69385,69387,69389,69391,69393,69395],{"class":141,"line":313},[139,69386,54380],{"class":145},[139,69388,53582],{"class":53538},[139,69390,53585],{"class":781},[139,69392,150],{"class":145},[139,69394,53590],{"class":160},[139,69396,61360],{"class":145},[139,69398,69399,69401,69403,69405,69407,69409,69411,69413,69415],{"class":141,"line":462},[139,69400,54380],{"class":145},[139,69402,53582],{"class":53538},[139,69404,53601],{"class":781},[139,69406,150],{"class":145},[139,69408,53606],{"class":160},[139,69410,53609],{"class":781},[139,69412,150],{"class":145},[139,69414,53614],{"class":160},[139,69416,61360],{"class":145},[139,69418,69419,69421,69423,69425,69427,69429,69431,69433,69435],{"class":141,"line":474},[139,69420,54380],{"class":145},[139,69422,53582],{"class":53538},[139,69424,17189],{"class":781},[139,69426,150],{"class":145},[139,69428,53629],{"class":160},[139,69430,53609],{"class":781},[139,69432,150],{"class":145},[139,69434,53636],{"class":160},[139,69436,61360],{"class":145},[139,69438,69439,69441,69443,69445,69447],{"class":141,"line":484},[139,69440,54380],{"class":145},[139,69442,53645],{"class":53538},[139,69444,65857],{"class":145},[139,69446,53645],{"class":53538},[139,69448,53545],{"class":145},[139,69450,69451,69453,69455],{"class":141,"line":989},[139,69452,54380],{"class":145},[139,69454,2348],{"class":53538},[139,69456,53545],{"class":145},[139,69458,69459,69461],{"class":141,"line":994},[139,69460,8677],{"class":53538},[139,69462,17840],{"class":145},[139,69464,69465,69467,69469,69471],{"class":141,"line":999},[139,69466,56940],{"class":153},[139,69468,2265],{"class":145},[139,69470,2634],{"class":153},[139,69472,3591],{"class":145},[139,69474,69475,69477,69479,69481],{"class":141,"line":1006},[139,69476,56929],{"class":153},[139,69478,2265],{"class":145},[139,69480,2634],{"class":153},[139,69482,3591],{"class":145},[139,69484,69485],{"class":141,"line":1027},[139,69486,4472],{"class":145},[139,69488,69489],{"class":141,"line":1040},[139,69490,843],{"emptyLinePlaceholder":842},[139,69492,69493,69495],{"class":141,"line":2160},[139,69494,65908],{"class":781},[139,69496,17840],{"class":145},[139,69498,69499,69501,69503,69505,69507],{"class":141,"line":2188},[139,69500,57005],{"class":153},[139,69502,2265],{"class":145},[139,69504,65919],{"class":153},[139,69506,53729],{"class":149},[139,69508,3591],{"class":145},[139,69510,69511,69513,69515,69517,69519],{"class":141,"line":3944},[139,69512,57019],{"class":153},[139,69514,2265],{"class":145},[139,69516,65932],{"class":153},[139,69518,53729],{"class":149},[139,69520,3591],{"class":145},[139,69522,69523,69525,69527,69529,69531],{"class":141,"line":3963},[139,69524,56940],{"class":153},[139,69526,2265],{"class":145},[139,69528,3135],{"class":153},[139,69530,53729],{"class":149},[139,69532,3591],{"class":145},[139,69534,69535,69537,69539,69541,69543,69545,69547],{"class":141,"line":3968},[139,69536,64210],{"class":153},[139,69538,2265],{"class":145},[139,69540,410],{"class":153},[139,69542,53729],{"class":149},[139,69544,53758],{"class":153},[139,69546,64477],{"class":153},[139,69548,3591],{"class":145},[139,69550,69551],{"class":141,"line":3982},[139,69552,4472],{"class":145},[139,69554,69555],{"class":141,"line":3987},[139,69556,843],{"emptyLinePlaceholder":842},[139,69558,69559,69561],{"class":141,"line":4014},[139,69560,65977],{"class":781},[139,69562,17840],{"class":145},[139,69564,69565,69567,69569,69571,69573],{"class":141,"line":4019},[139,69566,57005],{"class":153},[139,69568,2265],{"class":145},[139,69570,1017],{"class":153},[139,69572,2766],{"class":149},[139,69574,3591],{"class":145},[139,69576,69577,69579,69581,69583,69585],{"class":141,"line":4036},[139,69578,57019],{"class":153},[139,69580,2265],{"class":145},[139,69582,3341],{"class":153},[139,69584,53729],{"class":149},[139,69586,3591],{"class":145},[139,69588,69589,69591,69593,69595,69597],{"class":141,"line":4041},[139,69590,59593],{"class":153},[139,69592,2265],{"class":145},[139,69594,3341],{"class":153},[139,69596,53729],{"class":149},[139,69598,3591],{"class":145},[139,69600,69601,69603,69605,69607],{"class":141,"line":4046},[139,69602,57243],{"class":153},[139,69604,2265],{"class":145},[139,69606,53714],{"class":153},[139,69608,3591],{"class":145},[139,69610,69611,69613,69615,69617],{"class":141,"line":4051},[139,69612,57254],{"class":153},[139,69614,2265],{"class":145},[139,69616,53905],{"class":153},[139,69618,3591],{"class":145},[139,69620,69621],{"class":141,"line":4065},[139,69622,4472],{"class":145},[139,69624,69625],{"class":141,"line":4070},[139,69626,843],{"emptyLinePlaceholder":842},[139,69628,69629,69631,69633],{"class":141,"line":4860},[139,69630,65977],{"class":781},[139,69632,66050],{"class":53538},[139,69634,17840],{"class":145},[139,69636,69637,69639,69641,69643,69645],{"class":141,"line":4874},[139,69638,57156],{"class":153},[139,69640,2265],{"class":145},[139,69642,3235],{"class":153},[139,69644,53729],{"class":149},[139,69646,3591],{"class":145},[139,69648,69649,69651,69653,69655],{"class":141,"line":4882},[139,69650,64567],{"class":153},[139,69652,2265],{"class":145},[139,69654,66073],{"class":153},[139,69656,3591],{"class":145},[139,69658,69659,69661,69663,69665,69667],{"class":141,"line":4887},[139,69660,64233],{"class":153},[139,69662,2265],{"class":145},[139,69664,3135],{"class":153},[139,69666,53729],{"class":149},[139,69668,3591],{"class":145},[139,69670,69671],{"class":141,"line":4893},[139,69672,4472],{"class":145},[139,69674,69675],{"class":141,"line":4899},[139,69676,843],{"emptyLinePlaceholder":842},[139,69678,69679,69681,69683],{"class":141,"line":4904},[139,69680,65977],{"class":781},[139,69682,63525],{"class":53538},[139,69684,17840],{"class":145},[139,69686,69687,69689,69691,69693],{"class":141,"line":10222},[139,69688,56966],{"class":153},[139,69690,2265],{"class":145},[139,69692,56971],{"class":153},[139,69694,3591],{"class":145},[139,69696,69697,69699,69701,69703],{"class":141,"line":10246},[139,69698,57243],{"class":153},[139,69700,2265],{"class":145},[139,69702,53714],{"class":153},[139,69704,3591],{"class":145},[139,69706,69707,69709,69711,69713],{"class":141,"line":10251},[139,69708,57254],{"class":153},[139,69710,2265],{"class":145},[139,69712,53817],{"class":153},[139,69714,3591],{"class":145},[139,69716,69717],{"class":141,"line":10257},[139,69718,4472],{"class":145},[139,69720,69721],{"class":141,"line":10284},[139,69722,843],{"emptyLinePlaceholder":842},[139,69724,69725,69727,69729,69731],{"class":141,"line":10289},[139,69726,65977],{"class":781},[139,69728,63525],{"class":53538},[139,69730,57309],{"class":53538},[139,69732,17840],{"class":145},[139,69734,69735,69737,69739,69741,69743,69745],{"class":141,"line":10295},[139,69736,56940],{"class":153},[139,69738,2265],{"class":145},[139,69740,2634],{"class":153},[139,69742,11224],{"class":153},[139,69744,53729],{"class":149},[139,69746,3591],{"class":145},[139,69748,69749,69751,69753,69755,69757],{"class":141,"line":10307},[139,69750,57156],{"class":153},[139,69752,2265],{"class":145},[139,69754,2984],{"class":153},[139,69756,53729],{"class":149},[139,69758,3591],{"class":145},[139,69760,69761],{"class":141,"line":10319},[139,69762,4472],{"class":145},[139,69764,69765],{"class":141,"line":10331},[139,69766,843],{"emptyLinePlaceholder":842},[139,69768,69769,69771,69773,69775,69777],{"class":141,"line":11990},[139,69770,65977],{"class":781},[139,69772,63525],{"class":53538},[139,69774,57309],{"class":53538},[139,69776,3696],{"class":53538},[139,69778,17840],{"class":145},[139,69780,69781,69783,69785,69787],{"class":141,"line":12015},[139,69782,66202],{"class":153},[139,69784,2265],{"class":145},[139,69786,56971],{"class":153},[139,69788,3591],{"class":145},[139,69790,69791,69793,69795,69797,69799,69801,69803],{"class":141,"line":12038},[139,69792,64465],{"class":153},[139,69794,2265],{"class":145},[139,69796,416],{"class":153},[139,69798,53729],{"class":149},[139,69800,53758],{"class":153},[139,69802,66223],{"class":153},[139,69804,3591],{"class":145},[139,69806,69807,69809,69811,69813],{"class":141,"line":12062},[139,69808,59650],{"class":153},[139,69810,2265],{"class":145},[139,69812,64602],{"class":153},[139,69814,3591],{"class":145},[139,69816,69817],{"class":141,"line":12067},[139,69818,4472],{"class":145},[139,69820,69821],{"class":141,"line":12072},[139,69822,843],{"emptyLinePlaceholder":842},[139,69824,69825,69827,69829,69831,69833,69835],{"class":141,"line":12077},[139,69826,65977],{"class":781},[139,69828,63525],{"class":53538},[139,69830,57309],{"class":53538},[139,69832,3696],{"class":53538},[139,69834,66256],{"class":781},[139,69836,17840],{"class":145},[139,69838,69839,69841,69843,69845],{"class":141,"line":12086},[139,69840,64024],{"class":153},[139,69842,2265],{"class":145},[139,69844,66267],{"class":153},[139,69846,3591],{"class":145},[139,69848,69849,69851,69853,69855],{"class":141,"line":12091},[139,69850,59650],{"class":153},[139,69852,2265],{"class":145},[139,69854,66267],{"class":153},[139,69856,3591],{"class":145},[139,69858,69859],{"class":141,"line":12097},[139,69860,4472],{"class":145},[139,69862,69863],{"class":141,"line":12118},[139,69864,843],{"emptyLinePlaceholder":842},[139,69866,69867,69869],{"class":141,"line":12124},[139,69868,66292],{"class":781},[139,69870,17840],{"class":145},[139,69872,69873,69875,69877,69879,69881,69883],{"class":141,"line":12138},[139,69874,56929],{"class":153},[139,69876,2265],{"class":145},[139,69878,2634],{"class":153},[139,69880,66305],{"class":153},[139,69882,53729],{"class":149},[139,69884,3591],{"class":145},[139,69886,69887],{"class":141,"line":12144},[139,69888,4472],{"class":145},[139,69890,69891],{"class":141,"line":12171},[139,69892,843],{"emptyLinePlaceholder":842},[139,69894,69895,69897,69899],{"class":141,"line":12180},[139,69896,66292],{"class":781},[139,69898,64407],{"class":781},[139,69900,17840],{"class":145},[139,69902,69903,69905,69907,69909],{"class":141,"line":12186},[139,69904,57243],{"class":153},[139,69906,2265],{"class":145},[139,69908,56971],{"class":153},[139,69910,3591],{"class":145},[139,69912,69913],{"class":141,"line":12194},[139,69914,4472],{"class":145},[139,69916,69917],{"class":141,"line":12199},[139,69918,843],{"emptyLinePlaceholder":842},[139,69920,69921,69923,69926],{"class":141,"line":18871},[139,69922,66292],{"class":781},[139,69924,69925],{"class":781}," .active",[139,69927,17840],{"class":145},[139,69929,69930,69932,69934,69936],{"class":141,"line":18877},[139,69931,57243],{"class":153},[139,69933,2265],{"class":145},[139,69935,63102],{"class":153},[139,69937,3591],{"class":145},[139,69939,69940],{"class":141,"line":18900},[139,69941,4472],{"class":145},[139,69943,69944,69946,69948],{"class":141,"line":18906},[139,69945,54652],{"class":145},[139,69947,2348],{"class":53538},[139,69949,53545],{"class":145},[139,69951,69952,69954,69956],{"class":141,"line":18929},[139,69953,54022],{"class":145},[139,69955,53572],{"class":53538},[139,69957,53545],{"class":145},[139,69959,69960],{"class":141,"line":18943},[139,69961,843],{"emptyLinePlaceholder":842},[139,69963,69964,69966,69968],{"class":141,"line":18963},[139,69965,796],{"class":145},[139,69967,54037],{"class":53538},[139,69969,53545],{"class":145},[139,69971,69972,69974,69976,69978,69980,69982],{"class":141,"line":18969},[139,69973,54380],{"class":145},[139,69975,53848],{"class":53538},[139,69977,55721],{"class":781},[139,69979,150],{"class":145},[139,69981,66407],{"class":160},[139,69983,53545],{"class":145},[139,69985,69986,69988,69990,69992,69994,69996],{"class":141,"line":18980},[139,69987,53579],{"class":145},[139,69989,53848],{"class":53538},[139,69991,55721],{"class":781},[139,69993,150],{"class":145},[139,69995,66422],{"class":160},[139,69997,53545],{"class":145},[139,69999,70000,70002,70004,70006,70008],{"class":141,"line":19003},[139,70001,57468],{"class":145},[139,70003,1217],{"class":53538},[139,70005,66433],{"class":145},[139,70007,1217],{"class":53538},[139,70009,53545],{"class":145},[139,70011,70012,70014,70016],{"class":141,"line":19025},[139,70013,57468],{"class":145},[139,70015,3437],{"class":53538},[139,70017,53545],{"class":145},[139,70019,70020,70022,70024,70026,70028,70030,70032,70034,70036,70038,70040,70042,70044,70047,70049,70051,70053,70055],{"class":141,"line":19030},[139,70021,57536],{"class":145},[139,70023,1763],{"class":53538},[139,70025,63285],{"class":145},[139,70027,2680],{"class":53538},[139,70029,55721],{"class":781},[139,70031,150],{"class":145},[139,70033,61939],{"class":160},[139,70035,63290],{"class":781},[139,70037,150],{"class":145},[139,70039,66468],{"class":160},[139,70041,56185],{"class":781},[139,70043,150],{"class":145},[139,70045,70046],{"class":160},"\"0\"",[139,70048,66471],{"class":145},[139,70050,2680],{"class":53538},[139,70052,57548],{"class":145},[139,70054,1763],{"class":53538},[139,70056,53545],{"class":145},[139,70058,70059,70061,70063,70065,70067,70069,70071,70073,70075,70077,70079,70081,70083,70085,70087],{"class":141,"line":19036},[139,70060,57536],{"class":145},[139,70062,1763],{"class":53538},[139,70064,63285],{"class":145},[139,70066,2680],{"class":53538},[139,70068,63290],{"class":781},[139,70070,150],{"class":145},[139,70072,66468],{"class":160},[139,70074,56185],{"class":781},[139,70076,150],{"class":145},[139,70078,5959],{"class":160},[139,70080,66498],{"class":145},[139,70082,2680],{"class":53538},[139,70084,57548],{"class":145},[139,70086,1763],{"class":53538},[139,70088,53545],{"class":145},[139,70090,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113,70115,70117,70119],{"class":141,"line":19050},[139,70092,57536],{"class":145},[139,70094,1763],{"class":53538},[139,70096,63285],{"class":145},[139,70098,2680],{"class":53538},[139,70100,63290],{"class":781},[139,70102,150],{"class":145},[139,70104,66468],{"class":160},[139,70106,56185],{"class":781},[139,70108,150],{"class":145},[139,70110,5982],{"class":160},[139,70112,66525],{"class":145},[139,70114,2680],{"class":53538},[139,70116,57548],{"class":145},[139,70118,1763],{"class":53538},[139,70120,53545],{"class":145},[139,70122,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145,70147,70149,70151],{"class":141,"line":19063},[139,70124,57536],{"class":145},[139,70126,1763],{"class":53538},[139,70128,63285],{"class":145},[139,70130,2680],{"class":53538},[139,70132,63290],{"class":781},[139,70134,150],{"class":145},[139,70136,66468],{"class":160},[139,70138,56185],{"class":781},[139,70140,150],{"class":145},[139,70142,5995],{"class":160},[139,70144,66552],{"class":145},[139,70146,2680],{"class":53538},[139,70148,57548],{"class":145},[139,70150,1763],{"class":53538},[139,70152,53545],{"class":145},[139,70154,70155,70157,70159,70161,70163,70165,70167,70169,70171,70173,70175,70177,70179,70181,70183],{"class":141,"line":19068},[139,70156,57536],{"class":145},[139,70158,1763],{"class":53538},[139,70160,63285],{"class":145},[139,70162,2680],{"class":53538},[139,70164,63290],{"class":781},[139,70166,150],{"class":145},[139,70168,66468],{"class":160},[139,70170,56185],{"class":781},[139,70172,150],{"class":145},[139,70174,6008],{"class":160},[139,70176,66579],{"class":145},[139,70178,2680],{"class":53538},[139,70180,57548],{"class":145},[139,70182,1763],{"class":53538},[139,70184,53545],{"class":145},[139,70186,70187,70189,70191],{"class":141,"line":19082},[139,70188,57641],{"class":145},[139,70190,3437],{"class":53538},[139,70192,53545],{"class":145},[139,70194,70195,70197,70199],{"class":141,"line":19087},[139,70196,54013],{"class":145},[139,70198,53848],{"class":53538},[139,70200,53545],{"class":145},[139,70202,70203,70205,70207,70209,70211,70213],{"class":141,"line":19093},[139,70204,53579],{"class":145},[139,70206,53848],{"class":53538},[139,70208,55721],{"class":781},[139,70210,150],{"class":145},[139,70212,66616],{"class":160},[139,70214,53545],{"class":145},[139,70216,70217,70219,70221,70223,70225,70227,70229,70231,70233,70235,70237,70239,70241,70243,70245,70247],{"class":141,"line":19098},[139,70218,57468],{"class":145},[139,70220,53848],{"class":53538},[139,70222,55721],{"class":781},[139,70224,150],{"class":145},[139,70226,66631],{"class":160},[139,70228,63285],{"class":145},[139,70230,3760],{"class":53538},[139,70232,57473],{"class":781},[139,70234,150],{"class":145},[139,70236,66642],{"class":160},[139,70238,57481],{"class":781},[139,70240,150],{"class":145},[139,70242,9926],{"class":160},[139,70244,66651],{"class":145},[139,70246,53848],{"class":53538},[139,70248,53545],{"class":145},[139,70250,70251,70253,70255,70257,70259,70261,70263,70265,70267,70269,70271,70273,70275,70277,70279,70281],{"class":141,"line":19112},[139,70252,57468],{"class":145},[139,70254,53848],{"class":53538},[139,70256,55721],{"class":781},[139,70258,150],{"class":145},[139,70260,64856],{"class":160},[139,70262,63285],{"class":145},[139,70264,3760],{"class":53538},[139,70266,57473],{"class":781},[139,70268,150],{"class":145},[139,70270,66678],{"class":160},[139,70272,57481],{"class":781},[139,70274,150],{"class":145},[139,70276,9926],{"class":160},[139,70278,66651],{"class":145},[139,70280,53848],{"class":53538},[139,70282,53545],{"class":145},[139,70284,70285,70287,70289,70291,70293,70295,70297,70299,70301,70303,70305,70307,70309,70311,70313,70315],{"class":141,"line":19117},[139,70286,57468],{"class":145},[139,70288,53848],{"class":53538},[139,70290,55721],{"class":781},[139,70292,150],{"class":145},[139,70294,64856],{"class":160},[139,70296,63285],{"class":145},[139,70298,3760],{"class":53538},[139,70300,57473],{"class":781},[139,70302,150],{"class":145},[139,70304,66713],{"class":160},[139,70306,57481],{"class":781},[139,70308,150],{"class":145},[139,70310,9926],{"class":160},[139,70312,66651],{"class":145},[139,70314,53848],{"class":53538},[139,70316,53545],{"class":145},[139,70318,70319,70321,70323,70325,70327,70329,70331,70333,70335,70337,70339,70341,70343,70345,70347,70349],{"class":141,"line":19122},[139,70320,57468],{"class":145},[139,70322,53848],{"class":53538},[139,70324,55721],{"class":781},[139,70326,150],{"class":145},[139,70328,64856],{"class":160},[139,70330,63285],{"class":145},[139,70332,3760],{"class":53538},[139,70334,57473],{"class":781},[139,70336,150],{"class":145},[139,70338,66748],{"class":160},[139,70340,57481],{"class":781},[139,70342,150],{"class":145},[139,70344,9926],{"class":160},[139,70346,66651],{"class":145},[139,70348,53848],{"class":53538},[139,70350,53545],{"class":145},[139,70352,70353,70355,70357,70359,70361,70363,70365,70367,70369,70371,70373,70375,70377,70379,70381,70383],{"class":141,"line":19136},[139,70354,57468],{"class":145},[139,70356,53848],{"class":53538},[139,70358,55721],{"class":781},[139,70360,150],{"class":145},[139,70362,64856],{"class":160},[139,70364,63285],{"class":145},[139,70366,3760],{"class":53538},[139,70368,57473],{"class":781},[139,70370,150],{"class":145},[139,70372,66783],{"class":160},[139,70374,57481],{"class":781},[139,70376,150],{"class":145},[139,70378,9926],{"class":160},[139,70380,66651],{"class":145},[139,70382,53848],{"class":53538},[139,70384,53545],{"class":145},[139,70386,70387,70389,70391],{"class":141,"line":19148},[139,70388,54013],{"class":145},[139,70390,53848],{"class":53538},[139,70392,53545],{"class":145},[139,70394,70395,70397,70399],{"class":141,"line":19153},[139,70396,54652],{"class":145},[139,70398,53848],{"class":53538},[139,70400,53545],{"class":145},[139,70402,70403,70405,70407],{"class":141,"line":19166},[139,70404,54380],{"class":145},[139,70406,54050],{"class":53538},[139,70408,53545],{"class":145},[139,70410,70411],{"class":141,"line":19171},[139,70412,70413],{"class":2512},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[139,70415,70416],{"class":141,"line":19176},[139,70417,70418],{"class":2512},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[139,70420,70421,70423,70425,70427,70429,70431,70433,70436],{"class":141,"line":19181},[139,70422,13494],{"class":149},[139,70424,63525],{"class":153},[139,70426,15836],{"class":149},[139,70428,56630],{"class":145},[139,70430,56633],{"class":781},[139,70432,157],{"class":145},[139,70434,70435],{"class":160},"'.tab-nav ul'",[139,70437,164],{"class":145},[139,70439,70440],{"class":141,"line":19194},[139,70441,70442],{"class":2512},"    \u002F\u002F 2.添加事件\n",[139,70444,70445,70447,70449,70451,70453,70455,70457,70459,70461],{"class":141,"line":19199},[139,70446,69185],{"class":145},[139,70448,60046],{"class":781},[139,70450,157],{"class":145},[139,70452,60051],{"class":160},[139,70454,413],{"class":145},[139,70456,56683],{"class":149},[139,70458,549],{"class":145},[139,70460,628],{"class":2111},[139,70462,14714],{"class":145},[139,70464,70465,70467,70469],{"class":141,"line":34880},[139,70466,60477],{"class":145},[139,70468,69240],{"class":781},[139,70470,69243],{"class":145},[139,70472,70473],{"class":141,"line":34886},[139,70474,70475],{"class":2512},"      \u002F\u002Fe.targer是我们点击的对象\n",[139,70477,70478,70480,70482,70484,70487],{"class":141,"line":34892},[139,70479,56714],{"class":149},[139,70481,69264],{"class":145},[139,70483,56720],{"class":149},[139,70485,70486],{"class":160}," 'A'",[139,70488,14714],{"class":145},[139,70490,70491,70493,70495,70497,70500,70502,70504,70506,70508],{"class":141,"line":34898},[139,70492,54161],{"class":145},[139,70494,56633],{"class":781},[139,70496,157],{"class":145},[139,70498,70499],{"class":160},"'.active'",[139,70501,59237],{"class":145},[139,70503,59240],{"class":781},[139,70505,157],{"class":145},[139,70507,66945],{"class":160},[139,70509,164],{"class":145},[139,70511,70512,70515,70517,70519,70521],{"class":141,"line":34904},[139,70513,70514],{"class":145},"        e.target.classList.",[139,70516,7608],{"class":781},[139,70518,157],{"class":145},[139,70520,66945],{"class":160},[139,70522,164],{"class":145},[139,70524,70525],{"class":141,"line":34915},[139,70526,843],{"emptyLinePlaceholder":842},[139,70528,70529],{"class":141,"line":34921},[139,70530,70531],{"class":2512},"        \u002F\u002F 下面大盒子模块\n",[139,70533,70534],{"class":141,"line":34941},[139,70535,70536],{"class":2512},"        \u002F\u002F console.log(e.target.dataset.id)\n",[139,70538,70539,70541,70543,70545,70547],{"class":141,"line":34947},[139,70540,63503],{"class":149},[139,70542,5314],{"class":153},[139,70544,15836],{"class":149},[139,70546,47805],{"class":149},[139,70548,70549],{"class":145},"e.target.dataset.id\n",[139,70551,70552,70554,70556,70558,70560,70562,70564,70566,70568],{"class":141,"line":34958},[139,70553,54161],{"class":145},[139,70555,56633],{"class":781},[139,70557,157],{"class":145},[139,70559,66993],{"class":160},[139,70561,59237],{"class":145},[139,70563,59240],{"class":781},[139,70565,157],{"class":145},[139,70567,66945],{"class":160},[139,70569,164],{"class":145},[139,70571,70572,70574,70576,70578,70580,70582,70584,70586,70588,70590,70592,70594,70596],{"class":141,"line":34964},[139,70573,54161],{"class":145},[139,70575,56633],{"class":781},[139,70577,157],{"class":145},[139,70579,67019],{"class":160},[139,70581,2879],{"class":145},[139,70583,47805],{"class":149},[139,70585,27381],{"class":153},[139,70587,59266],{"class":160},[139,70589,59237],{"class":145},[139,70591,7608],{"class":781},[139,70593,157],{"class":145},[139,70595,66945],{"class":160},[139,70597,164],{"class":145},[139,70599,70600],{"class":141,"line":34970},[139,70601,843],{"emptyLinePlaceholder":842},[139,70603,70604],{"class":141,"line":34976},[139,70605,54633],{"class":145},[139,70607,70608],{"class":141,"line":34982},[139,70609,35706],{"class":145},[139,70611,70612,70614,70616],{"class":141,"line":34988},[139,70613,54652],{"class":145},[139,70615,54050],{"class":53538},[139,70617,53545],{"class":145},[139,70619,70620,70622,70624],{"class":141,"line":34994},[139,70621,54022],{"class":145},[139,70623,54037],{"class":53538},[139,70625,53545],{"class":145},[139,70627,70628],{"class":141,"line":35000},[139,70629,843],{"emptyLinePlaceholder":842},[139,70631,70632,70634,70636],{"class":141,"line":35020},[139,70633,54022],{"class":145},[139,70635,52873],{"class":53538},[139,70637,53545],{"class":145},[1217,70639,70641],{"id":70640},"_333-页面加载事件","3.3.3 页面加载事件",[1760,70643,70644],{},[1763,70645,70646],{},"load",[19,70648,70649],{},[3760,70650],{"alt":135,"src":70651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70653,70654],{},"window代表整个窗口，比document还要大",[19,70656,70657],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70659,70660],{},"img.addEventListener('load', function () {",[19,70662,70663],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70665,54699],{},[1760,70667,70668],{"start":210},[1763,70669,70670],{},"DOMContentLoaded",[19,70672,70673],{},[3760,70674],{"alt":135,"src":70675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70677,70678],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1217,70680,70682],{"id":70681},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70684,70685],{},[3760,70686],{"alt":135,"src":70687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70689,70690],{},[3760,70691],{"alt":135,"src":70692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70694,70695],{},[3760,70696],{"alt":135,"src":70697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70699,70700],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70702,70703],{},"获得的是数字型数据，不带单位",[19,70705,70706],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70708,70709],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70711,70712],{},"它是通过document.documentElement来获取",[19,70714,70715],{},[3760,70716],{"alt":135,"src":70717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70719,70720],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1217,70722,70724],{"id":70723},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70726,70727],{},[3760,70728],{"alt":135,"src":70729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70731,70732],{},[3760,70733],{"alt":135,"src":70734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1217,70736,70738],{"id":70737},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70740,70741],{},[3760,70742],{"alt":135,"src":70743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70745,70746],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70748,70749],{},[3760,70750],{"alt":135,"src":70751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70753,70754],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70756,70757],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70759,70760],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70762,70763],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70765,70766],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70768,70769],{},[3760,70770],{"alt":135,"src":70771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70773,70774],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70776,70777],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70779,70780],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70782,70783],{},"e.pageX-box.getBoundingClientRect()",[1217,70785,70787],{"id":70786},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70789,70790],{},[3760,70791],{"alt":135,"src":70792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70794,70795],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1217,70797,70799],{"id":70798},"_338-总结","3.3.8 总结",[19,70801,70802],{},[3760,70803],{"alt":135,"src":70804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70806,70807],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70809,70810],{},"修改盒子的宽高只能通过width和height来实现",[1217,70812,70814],{"id":70813},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[130,70816,70818],{"className":52871,"code":70817,"language":52873,"meta":135,"style":135},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[50,70819,70820,70825,70830,70835,70840],{"__ignoreMap":135},[139,70821,70822],{"class":141,"line":142},[139,70823,70824],{"class":145},"\u002F* 页面滑动 *\u002F\n",[139,70826,70827],{"class":141,"line":210},[139,70828,70829],{"class":145},"html {\n",[139,70831,70832],{"class":141,"line":254},[139,70833,70834],{"class":145},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[139,70836,70837],{"class":141,"line":262},[139,70838,70839],{"class":145},"  scroll-behavior: smooth;\n",[139,70841,70842],{"class":141,"line":313},[139,70843,3862],{"class":145},[19,70845,70846],{},"默认是auto",[1217,70848,70850],{"id":70849},"_3310-日期对象","3.3.10 日期对象",[24265,70852,70854],{"id":70853},"_33101-实例化","3.3.10.1 实例化",[19,70856,70857],{},[3760,70858],{"alt":135,"src":70859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24265,70861,70863],{"id":70862},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70865,70866],{},[3760,70867],{"alt":135,"src":70868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70870,70871],{},"月份+1",[19,70873,70874],{},"老外认为第一天为0，星期天",[19,70876,70877],{},"方法使用的时候必须要跟括号",[19,70879,70880],{},"快速获得日期",[19,70882,70883],{},"\u002F\u002F 得到年月日",[19,70885,70886],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70888,70889],{},"\u002F\u002F 得到当地日期",[19,70891,70892],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70894,70895],{},"\u002F\u002F 得到当地时间",[19,70897,70898],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70900,70901],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70903,70904],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54050,70906,70907],{},"\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,70909,70910],{},"学会去封装函数！",[24265,70912,70914],{"id":70913},"_33103-时间戳","3.3.10.3 时间戳",[19,70916,70917],{},[3760,70918],{"alt":135,"src":70919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70921,70922],{},[3760,70923],{"alt":135,"src":70924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70926,70927],{},"三种方法记住一个就可以",[1217,70929,70931],{"id":70930},"_3311-节点操作","3.3.11 节点操作",[24265,70933,70935],{"id":70934},"_33111-dom节点","3.3.11.1 DOM节点",[19,70937,70938],{},[3760,70939],{"alt":135,"src":70940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70942,70943],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24265,70945,70947],{"id":70946},"_33112-查找节点","3.3.11.2 查找节点",[19,70949,70950],{},"前边的document.querySelector()是获取的元素",[19,70952,70953],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70955,70956],{},[3760,70957],{"alt":135,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1760,70960,70961],{},[1763,70962,70963],{},"父节点",[19,70965,70966],{},[3760,70967],{"alt":135,"src":70968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1760,70970,70971],{"start":210},[1763,70972,70973],{},"子节点",[19,70975,70976],{},[3760,70977],{"alt":135,"src":70978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70980,70981],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70983,70984],{},"children获得的是伪数组，是亲儿子",[1760,70986,70987],{"start":254},[1763,70988,70989],{},"兄弟节点",[19,70991,70992],{},[3760,70993],{"alt":135,"src":70994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24265,70996,70998],{"id":70997},"_33113-增加节点","3.3.11.3 增加节点",[19,71000,71001],{},[3760,71002],{"alt":135,"src":71003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71005,71006],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71008,71009],{},[3760,71010],{"alt":135,"src":71011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71013,71014],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71016,71017],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71019,71020],{},"例：",[54050,71022,71023],{},"\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,71025,71026],{},[3760,71027],{"alt":135,"src":71028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71030,71031],{},"false只克隆标签，里边的内容不会克隆过来",[130,71033,71035],{"className":52871,"code":71034,"language":52873,"meta":135,"style":135},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[50,71036,71037],{"__ignoreMap":135},[139,71038,71039],{"class":141,"line":142},[139,71040,71034],{"class":145},[24265,71042,71044],{"id":71043},"_33114-删除节点","3.3.11.4 删除节点",[19,71046,71047],{},[3760,71048],{"alt":135,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71051,71052],{},"父亲删儿子",[19,71054,71055],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1217,71057,71059],{"id":71058},"_3312-m端事件","3.3.12 M端事件",[19,71061,71062],{},"M端就是移动端",[19,71064,71065],{},[3760,71066],{"alt":135,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1217,71069,71071],{"id":71070},"_3313-插件","3.3.13 插件",[19,71073,71074],{},"要熟悉官网！！！",[19,71076,71077],{},[2680,71078,71079],{"href":71079,"rel":71080},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26128],[19,71082,71083],{},[2680,71084,71085],{"href":71085,"rel":71086},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26128],[1217,71088,71090],{"id":71089},"_3314-学生信息表","3.3.14 学生信息表",[1760,71092,71093,71096,71099,71102,71105,71108,71111,71114],{},[1763,71094,71095],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1763,71097,71098],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1763,71100,71101],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1763,71103,71104],{},"用好表单元素自带的属性，value,name等",[1763,71106,71107],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1763,71109,71110],{},"不要忘记事件对象",[1763,71112,71113],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1763,71115,71116],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71118,71119],{},"结构：",[130,71121,71123],{"className":52871,"code":71122,"language":52873,"meta":135,"style":135},"\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",[50,71124,71125,71135,71149,71153,71161,71175,71195,71216,71229,71253,71261,71265,71273,71286,71307,71335,71363,71368,71390,71410,71429,71437,71465,71487,71507,71527,71547,71567,71587,71595,71615,71623,71627,71640,71648,71656,71664,71677,71690,71703,71716,71729,71742,71755,71763,71771,71779,71784,71789,71794,71799,71804,71809,71814,71819,71824,71829,71834,71839,71844,71852,71860,71868,71872,71892,71911,71931,71951,71971,71991,71995,72000,72020,72025,72035,72040,72045,72065,72087,72092,72102,72106,72110,72115,72120,72149,72163,72178,72182,72186,72190,72195,72206,72219,72224,72229,72234,72239,72244,72248,72253,72258,72267,72272,72277,72289,72294,72301,72305,72310,72320,72325,72335,72340,72368,72389,72399,72419,72437,72453,72470,72487,72504,72508,72518,72523,72528,72533,72544,72548,72552,72556,72561,72566,72587,72599,72604,72609,72614,72628,72633,72640,72644,72648,72656,72660,72668,72672],{"__ignoreMap":135},[139,71126,71127,71129,71131,71133],{"class":141,"line":142},[139,71128,53535],{"class":145},[139,71130,53539],{"class":53538},[139,71132,53542],{"class":781},[139,71134,53545],{"class":145},[139,71136,71137,71139,71141,71143,71145,71147],{"class":141,"line":210},[139,71138,796],{"class":145},[139,71140,52873],{"class":53538},[139,71142,53554],{"class":781},[139,71144,150],{"class":145},[139,71146,53559],{"class":160},[139,71148,53545],{"class":145},[139,71150,71151],{"class":141,"line":254},[139,71152,843],{"emptyLinePlaceholder":842},[139,71154,71155,71157,71159],{"class":141,"line":262},[139,71156,796],{"class":145},[139,71158,53572],{"class":53538},[139,71160,53545],{"class":145},[139,71162,71163,71165,71167,71169,71171,71173],{"class":141,"line":313},[139,71164,54380],{"class":145},[139,71166,53582],{"class":53538},[139,71168,53585],{"class":781},[139,71170,150],{"class":145},[139,71172,53590],{"class":160},[139,71174,61360],{"class":145},[139,71176,71177,71179,71181,71183,71185,71187,71189,71191,71193],{"class":141,"line":462},[139,71178,54380],{"class":145},[139,71180,53582],{"class":53538},[139,71182,17189],{"class":781},[139,71184,150],{"class":145},[139,71186,53629],{"class":160},[139,71188,53609],{"class":781},[139,71190,150],{"class":145},[139,71192,53636],{"class":160},[139,71194,61360],{"class":145},[139,71196,71197,71199,71201,71203,71205,71207,71209,71211,71214],{"class":141,"line":474},[139,71198,54380],{"class":145},[139,71200,53582],{"class":53538},[139,71202,53601],{"class":781},[139,71204,150],{"class":145},[139,71206,53606],{"class":160},[139,71208,53609],{"class":781},[139,71210,150],{"class":145},[139,71212,71213],{"class":160},"\"ie=edge\"",[139,71215,61360],{"class":145},[139,71217,71218,71220,71222,71225,71227],{"class":141,"line":484},[139,71219,54380],{"class":145},[139,71221,53645],{"class":53538},[139,71223,71224],{"class":145},">学生信息管理\u003C\u002F",[139,71226,53645],{"class":53538},[139,71228,53545],{"class":145},[139,71230,71231,71233,71236,71239,71241,71244,71246,71248,71251],{"class":141,"line":989},[139,71232,54380],{"class":145},[139,71234,71235],{"class":53538},"link",[139,71237,71238],{"class":781}," rel",[139,71240,150],{"class":145},[139,71242,71243],{"class":160},"\"stylesheet\"",[139,71245,63290],{"class":781},[139,71247,150],{"class":145},[139,71249,71250],{"class":160},"\"css\u002Findex.css\"",[139,71252,61360],{"class":145},[139,71254,71255,71257,71259],{"class":141,"line":994},[139,71256,54022],{"class":145},[139,71258,53572],{"class":53538},[139,71260,53545],{"class":145},[139,71262,71263],{"class":141,"line":999},[139,71264,843],{"emptyLinePlaceholder":842},[139,71266,71267,71269,71271],{"class":141,"line":1006},[139,71268,796],{"class":145},[139,71270,54037],{"class":53538},[139,71272,53545],{"class":145},[139,71274,71275,71277,71279,71282,71284],{"class":141,"line":1027},[139,71276,54380],{"class":145},[139,71278,10],{"class":53538},[139,71280,71281],{"class":145},">新增学员\u003C\u002F",[139,71283,10],{"class":53538},[139,71285,53545],{"class":145},[139,71287,71288,71290,71292,71294,71296,71298,71301,71303,71305],{"class":141,"line":1040},[139,71289,54380],{"class":145},[139,71291,68856],{"class":53538},[139,71293,55721],{"class":781},[139,71295,150],{"class":145},[139,71297,64897],{"class":160},[139,71299,71300],{"class":781}," autocomplete",[139,71302,150],{"class":145},[139,71304,34025],{"class":160},[139,71306,53545],{"class":145},[139,71308,71309,71312,71314,71316,71318,71320,71322,71324,71327,71329,71331,71333],{"class":141,"line":2160},[139,71310,71311],{"class":145},"    姓名：\u003C",[139,71313,199],{"class":53538},[139,71315,56058],{"class":781},[139,71317,150],{"class":145},[139,71319,64931],{"class":160},[139,71321,55721],{"class":781},[139,71323,150],{"class":145},[139,71325,71326],{"class":160},"\"uname\"",[139,71328,17189],{"class":781},[139,71330,150],{"class":145},[139,71332,71326],{"class":160},[139,71334,61360],{"class":145},[139,71336,71337,71340,71342,71344,71346,71348,71350,71352,71355,71357,71359,71361],{"class":141,"line":2188},[139,71338,71339],{"class":145},"    年龄：\u003C",[139,71341,199],{"class":53538},[139,71343,56058],{"class":781},[139,71345,150],{"class":145},[139,71347,64931],{"class":160},[139,71349,55721],{"class":781},[139,71351,150],{"class":145},[139,71353,71354],{"class":160},"\"age\"",[139,71356,17189],{"class":781},[139,71358,150],{"class":145},[139,71360,71354],{"class":160},[139,71362,61360],{"class":145},[139,71364,71365],{"class":141,"line":3944},[139,71366,71367],{"class":145},"    性别:\n",[139,71369,71370,71372,71375,71377,71379,71382,71384,71386,71388],{"class":141,"line":3963},[139,71371,53579],{"class":145},[139,71373,71374],{"class":53538},"select",[139,71376,17189],{"class":781},[139,71378,150],{"class":145},[139,71380,71381],{"class":160},"\"gender\"",[139,71383,55721],{"class":781},[139,71385,150],{"class":145},[139,71387,71381],{"class":160},[139,71389,53545],{"class":145},[139,71391,71392,71394,71397,71399,71401,71403,71406,71408],{"class":141,"line":3968},[139,71393,57468],{"class":145},[139,71395,71396],{"class":53538},"option",[139,71398,68882],{"class":781},[139,71400,150],{"class":145},[139,71402,12235],{"class":160},[139,71404,71405],{"class":145},">男\u003C\u002F",[139,71407,71396],{"class":53538},[139,71409,53545],{"class":145},[139,71411,71412,71414,71416,71418,71420,71422,71425,71427],{"class":141,"line":3982},[139,71413,57468],{"class":145},[139,71415,71396],{"class":53538},[139,71417,68882],{"class":781},[139,71419,150],{"class":145},[139,71421,12304],{"class":160},[139,71423,71424],{"class":145},">女\u003C\u002F",[139,71426,71396],{"class":53538},[139,71428,53545],{"class":145},[139,71430,71431,71433,71435],{"class":141,"line":3987},[139,71432,54013],{"class":145},[139,71434,71374],{"class":53538},[139,71436,53545],{"class":145},[139,71438,71439,71442,71444,71446,71448,71450,71452,71454,71457,71459,71461,71463],{"class":141,"line":4014},[139,71440,71441],{"class":145},"    薪资：\u003C",[139,71443,199],{"class":53538},[139,71445,56058],{"class":781},[139,71447,150],{"class":145},[139,71449,64931],{"class":160},[139,71451,55721],{"class":781},[139,71453,150],{"class":145},[139,71455,71456],{"class":160},"\"salary\"",[139,71458,17189],{"class":781},[139,71460,150],{"class":145},[139,71462,71456],{"class":160},[139,71464,61360],{"class":145},[139,71466,71467,71470,71472,71474,71476,71479,71481,71483,71485],{"class":141,"line":4019},[139,71468,71469],{"class":145},"    就业城市：\u003C",[139,71471,71374],{"class":53538},[139,71473,17189],{"class":781},[139,71475,150],{"class":145},[139,71477,71478],{"class":160},"\"city\"",[139,71480,55721],{"class":781},[139,71482,150],{"class":145},[139,71484,71478],{"class":160},[139,71486,53545],{"class":145},[139,71488,71489,71491,71493,71495,71497,71500,71503,71505],{"class":141,"line":4036},[139,71490,57468],{"class":145},[139,71492,71396],{"class":53538},[139,71494,68882],{"class":781},[139,71496,150],{"class":145},[139,71498,71499],{"class":160},"\"北京\"",[139,71501,71502],{"class":145},">北京\u003C\u002F",[139,71504,71396],{"class":53538},[139,71506,53545],{"class":145},[139,71508,71509,71511,71513,71515,71517,71520,71523,71525],{"class":141,"line":4041},[139,71510,57468],{"class":145},[139,71512,71396],{"class":53538},[139,71514,68882],{"class":781},[139,71516,150],{"class":145},[139,71518,71519],{"class":160},"\"上海\"",[139,71521,71522],{"class":145},">上海\u003C\u002F",[139,71524,71396],{"class":53538},[139,71526,53545],{"class":145},[139,71528,71529,71531,71533,71535,71537,71540,71543,71545],{"class":141,"line":4046},[139,71530,57468],{"class":145},[139,71532,71396],{"class":53538},[139,71534,68882],{"class":781},[139,71536,150],{"class":145},[139,71538,71539],{"class":160},"\"广州\"",[139,71541,71542],{"class":145},">广州\u003C\u002F",[139,71544,71396],{"class":53538},[139,71546,53545],{"class":145},[139,71548,71549,71551,71553,71555,71557,71560,71563,71565],{"class":141,"line":4051},[139,71550,57468],{"class":145},[139,71552,71396],{"class":53538},[139,71554,68882],{"class":781},[139,71556,150],{"class":145},[139,71558,71559],{"class":160},"\"深圳\"",[139,71561,71562],{"class":145},">深圳\u003C\u002F",[139,71564,71396],{"class":53538},[139,71566,53545],{"class":145},[139,71568,71569,71571,71573,71575,71577,71580,71583,71585],{"class":141,"line":4065},[139,71570,57468],{"class":145},[139,71572,71396],{"class":53538},[139,71574,68882],{"class":781},[139,71576,150],{"class":145},[139,71578,71579],{"class":160},"\"曹县\"",[139,71581,71582],{"class":145},">曹县\u003C\u002F",[139,71584,71396],{"class":53538},[139,71586,53545],{"class":145},[139,71588,71589,71591,71593],{"class":141,"line":4070},[139,71590,54013],{"class":145},[139,71592,71374],{"class":53538},[139,71594,53545],{"class":145},[139,71596,71597,71599,71601,71603,71605,71608,71611,71613],{"class":141,"line":4860},[139,71598,53579],{"class":145},[139,71600,56121],{"class":53538},[139,71602,55721],{"class":781},[139,71604,150],{"class":145},[139,71606,71607],{"class":160},"\"add\"",[139,71609,71610],{"class":145},">录入\u003C\u002F",[139,71612,56121],{"class":53538},[139,71614,53545],{"class":145},[139,71616,71617,71619,71621],{"class":141,"line":4874},[139,71618,54652],{"class":145},[139,71620,68856],{"class":53538},[139,71622,53545],{"class":145},[139,71624,71625],{"class":141,"line":4882},[139,71626,843],{"emptyLinePlaceholder":842},[139,71628,71629,71631,71633,71636,71638],{"class":141,"line":4887},[139,71630,54380],{"class":145},[139,71632,10],{"class":53538},[139,71634,71635],{"class":145},">就业榜\u003C\u002F",[139,71637,10],{"class":53538},[139,71639,53545],{"class":145},[139,71641,71642,71644,71646],{"class":141,"line":4893},[139,71643,54380],{"class":145},[139,71645,26],{"class":53538},[139,71647,53545],{"class":145},[139,71649,71650,71652,71654],{"class":141,"line":4899},[139,71651,53579],{"class":145},[139,71653,29],{"class":53538},[139,71655,53545],{"class":145},[139,71657,71658,71660,71662],{"class":141,"line":4904},[139,71659,57468],{"class":145},[139,71661,32],{"class":53538},[139,71663,53545],{"class":145},[139,71665,71666,71668,71670,71673,71675],{"class":141,"line":10222},[139,71667,57536],{"class":145},[139,71669,35],{"class":53538},[139,71671,71672],{"class":145},">序号\u003C\u002F",[139,71674,35],{"class":53538},[139,71676,53545],{"class":145},[139,71678,71679,71681,71683,71686,71688],{"class":141,"line":10246},[139,71680,57536],{"class":145},[139,71682,35],{"class":53538},[139,71684,71685],{"class":145},">姓名\u003C\u002F",[139,71687,35],{"class":53538},[139,71689,53545],{"class":145},[139,71691,71692,71694,71696,71699,71701],{"class":141,"line":10251},[139,71693,57536],{"class":145},[139,71695,35],{"class":53538},[139,71697,71698],{"class":145},">年龄\u003C\u002F",[139,71700,35],{"class":53538},[139,71702,53545],{"class":145},[139,71704,71705,71707,71709,71712,71714],{"class":141,"line":10257},[139,71706,57536],{"class":145},[139,71708,35],{"class":53538},[139,71710,71711],{"class":145},">性别\u003C\u002F",[139,71713,35],{"class":53538},[139,71715,53545],{"class":145},[139,71717,71718,71720,71722,71725,71727],{"class":141,"line":10284},[139,71719,57536],{"class":145},[139,71721,35],{"class":53538},[139,71723,71724],{"class":145},">薪资\u003C\u002F",[139,71726,35],{"class":53538},[139,71728,53545],{"class":145},[139,71730,71731,71733,71735,71738,71740],{"class":141,"line":10289},[139,71732,57536],{"class":145},[139,71734,35],{"class":53538},[139,71736,71737],{"class":145},">就业城市\u003C\u002F",[139,71739,35],{"class":53538},[139,71741,53545],{"class":145},[139,71743,71744,71746,71748,71751,71753],{"class":141,"line":10295},[139,71745,57536],{"class":145},[139,71747,35],{"class":53538},[139,71749,71750],{"class":145},">操作\u003C\u002F",[139,71752,35],{"class":53538},[139,71754,53545],{"class":145},[139,71756,71757,71759,71761],{"class":141,"line":10307},[139,71758,57641],{"class":145},[139,71760,32],{"class":53538},[139,71762,53545],{"class":145},[139,71764,71765,71767,71769],{"class":141,"line":10319},[139,71766,54013],{"class":145},[139,71768,29],{"class":53538},[139,71770,53545],{"class":145},[139,71772,71773,71775,71777],{"class":141,"line":10331},[139,71774,53579],{"class":145},[139,71776,42],{"class":53538},[139,71778,53545],{"class":145},[139,71780,71781],{"class":141,"line":11990},[139,71782,71783],{"class":2512},"      \u003C!-- \n",[139,71785,71786],{"class":141,"line":12015},[139,71787,71788],{"class":2512},"        \u003Ctr>\n",[139,71790,71791],{"class":141,"line":12038},[139,71792,71793],{"class":2512},"          \u003Ctd>1001\u003C\u002Ftd>\n",[139,71795,71796],{"class":141,"line":12062},[139,71797,71798],{"class":2512},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[139,71800,71801],{"class":141,"line":12067},[139,71802,71803],{"class":2512},"          \u003Ctd>19\u003C\u002Ftd>\n",[139,71805,71806],{"class":141,"line":12072},[139,71807,71808],{"class":2512},"          \u003Ctd>男\u003C\u002Ftd>\n",[139,71810,71811],{"class":141,"line":12077},[139,71812,71813],{"class":2512},"          \u003Ctd>15000\u003C\u002Ftd>\n",[139,71815,71816],{"class":141,"line":12086},[139,71817,71818],{"class":2512},"          \u003Ctd>上海\u003C\u002Ftd>\n",[139,71820,71821],{"class":141,"line":12091},[139,71822,71823],{"class":2512},"          \u003Ctd>\n",[139,71825,71826],{"class":141,"line":12097},[139,71827,71828],{"class":2512},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[139,71830,71831],{"class":141,"line":12118},[139,71832,71833],{"class":2512},"          \u003C\u002Ftd>\n",[139,71835,71836],{"class":141,"line":12124},[139,71837,71838],{"class":2512},"        \u003C\u002Ftr> \n",[139,71840,71841],{"class":141,"line":12138},[139,71842,71843],{"class":2512},"        -->\n",[139,71845,71846,71848,71850],{"class":141,"line":12144},[139,71847,54013],{"class":145},[139,71849,42],{"class":53538},[139,71851,53545],{"class":145},[139,71853,71854,71856,71858],{"class":141,"line":12171},[139,71855,54652],{"class":145},[139,71857,26],{"class":53538},[139,71859,53545],{"class":145},[139,71861,71862,71864,71866],{"class":141,"line":12180},[139,71863,54380],{"class":145},[139,71865,54050],{"class":53538},[139,71867,53545],{"class":145},[139,71869,71870],{"class":141,"line":12186},[139,71871,62191],{"class":2512},[139,71873,71874,71876,71879,71881,71883,71885,71887,71890],{"class":141,"line":12194},[139,71875,13494],{"class":149},[139,71877,71878],{"class":153}," uname",[139,71880,15836],{"class":149},[139,71882,56630],{"class":145},[139,71884,56633],{"class":781},[139,71886,157],{"class":145},[139,71888,71889],{"class":160},"'.uname'",[139,71891,164],{"class":145},[139,71893,71894,71896,71898,71900,71902,71904,71906,71909],{"class":141,"line":12199},[139,71895,13494],{"class":149},[139,71897,17957],{"class":153},[139,71899,15836],{"class":149},[139,71901,56630],{"class":145},[139,71903,56633],{"class":781},[139,71905,157],{"class":145},[139,71907,71908],{"class":160},"'.age'",[139,71910,164],{"class":145},[139,71912,71913,71915,71918,71920,71922,71924,71926,71929],{"class":141,"line":18871},[139,71914,13494],{"class":149},[139,71916,71917],{"class":153}," gender",[139,71919,15836],{"class":149},[139,71921,56630],{"class":145},[139,71923,56633],{"class":781},[139,71925,157],{"class":145},[139,71927,71928],{"class":160},"'.gender'",[139,71930,164],{"class":145},[139,71932,71933,71935,71938,71940,71942,71944,71946,71949],{"class":141,"line":18877},[139,71934,13494],{"class":149},[139,71936,71937],{"class":153}," salary",[139,71939,15836],{"class":149},[139,71941,56630],{"class":145},[139,71943,56633],{"class":781},[139,71945,157],{"class":145},[139,71947,71948],{"class":160},"'.salary'",[139,71950,164],{"class":145},[139,71952,71953,71955,71958,71960,71962,71964,71966,71969],{"class":141,"line":18900},[139,71954,13494],{"class":149},[139,71956,71957],{"class":153}," city",[139,71959,15836],{"class":149},[139,71961,56630],{"class":145},[139,71963,56633],{"class":781},[139,71965,157],{"class":145},[139,71967,71968],{"class":160},"'.city'",[139,71970,164],{"class":145},[139,71972,71973,71975,71978,71980,71982,71984,71986,71989],{"class":141,"line":18906},[139,71974,13494],{"class":149},[139,71976,71977],{"class":153}," tbody",[139,71979,15836],{"class":149},[139,71981,56630],{"class":145},[139,71983,56633],{"class":781},[139,71985,157],{"class":145},[139,71987,71988],{"class":160},"'tbody'",[139,71990,164],{"class":145},[139,71992,71993],{"class":141,"line":18929},[139,71994,843],{"emptyLinePlaceholder":842},[139,71996,71997],{"class":141,"line":18943},[139,71998,71999],{"class":2512},"    \u002F\u002F 获取所有带有name属性的元素\n",[139,72001,72002,72004,72007,72009,72011,72013,72015,72018],{"class":141,"line":18963},[139,72003,13494],{"class":149},[139,72005,72006],{"class":153}," items",[139,72008,15836],{"class":149},[139,72010,56630],{"class":145},[139,72012,57915],{"class":781},[139,72014,157],{"class":145},[139,72016,72017],{"class":160},"'[name]'",[139,72019,164],{"class":145},[139,72021,72022],{"class":141,"line":18969},[139,72023,72024],{"class":2512},"    \u002F\u002F 声明一个空的数组\n",[139,72026,72027,72029,72031,72033],{"class":141,"line":18980},[139,72028,13494],{"class":149},[139,72030,59929],{"class":153},[139,72032,15836],{"class":149},[139,72034,2088],{"class":145},[139,72036,72037],{"class":141,"line":19003},[139,72038,72039],{"class":2512},"    \u002F\u002F 1.录入模块\n",[139,72041,72042],{"class":141,"line":19025},[139,72043,72044],{"class":2512},"    \u002F\u002F 1.1这是一个表单提交事件\n",[139,72046,72047,72049,72052,72054,72056,72058,72060,72063],{"class":141,"line":19030},[139,72048,13494],{"class":149},[139,72050,72051],{"class":153}," info",[139,72053,15836],{"class":149},[139,72055,56630],{"class":145},[139,72057,56633],{"class":781},[139,72059,157],{"class":145},[139,72061,72062],{"class":160},"'.info'",[139,72064,164],{"class":145},[139,72066,72067,72070,72072,72074,72077,72079,72081,72083,72085],{"class":141,"line":19036},[139,72068,72069],{"class":145},"    info.",[139,72071,60046],{"class":781},[139,72073,157],{"class":145},[139,72075,72076],{"class":160},"'submit'",[139,72078,413],{"class":145},[139,72080,56683],{"class":149},[139,72082,549],{"class":145},[139,72084,628],{"class":2111},[139,72086,14714],{"class":145},[139,72088,72089],{"class":141,"line":19050},[139,72090,72091],{"class":2512},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[139,72093,72094,72097,72100],{"class":141,"line":19063},[139,72095,72096],{"class":145},"      e.",[139,72098,72099],{"class":781},"preventDefault",[139,72101,4262],{"class":145},[139,72103,72104],{"class":141,"line":19068},[139,72105,62245],{"class":2512},[139,72107,72108],{"class":141,"line":19082},[139,72109,843],{"emptyLinePlaceholder":842},[139,72111,72112],{"class":141,"line":19087},[139,72113,72114],{"class":2512},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[139,72116,72117],{"class":141,"line":19093},[139,72118,72119],{"class":2512},"      \u002F\u002F 先遍历循环\n",[139,72121,72122,72124,72126,72128,72130,72132,72134,72136,72138,72141,72143,72145,72147],{"class":141,"line":19098},[139,72123,54519],{"class":149},[139,72125,549],{"class":145},[139,72127,54083],{"class":149},[139,72129,11712],{"class":145},[139,72131,150],{"class":149},[139,72133,799],{"class":153},[139,72135,11719],{"class":145},[139,72137,796],{"class":149},[139,72139,72140],{"class":145}," items.",[139,72142,54204],{"class":153},[139,72144,5495],{"class":145},[139,72146,4577],{"class":149},[139,72148,14714],{"class":145},[139,72150,72151,72153,72156,72158,72161],{"class":141,"line":19112},[139,72152,4780],{"class":149},[139,72154,72155],{"class":145}," (items[i].value ",[139,72157,56720],{"class":149},[139,72159,72160],{"class":160}," ''",[139,72162,14714],{"class":145},[139,72164,72165,72168,72171,72173,72176],{"class":141,"line":19117},[139,72166,72167],{"class":149},"          return",[139,72169,72170],{"class":781}," alert",[139,72172,157],{"class":145},[139,72174,72175],{"class":160},"'输入内容不能为空'",[139,72177,164],{"class":145},[139,72179,72180],{"class":141,"line":19122},[139,72181,4812],{"class":145},[139,72183,72184],{"class":141,"line":19136},[139,72185,54633],{"class":145},[139,72187,72188],{"class":141,"line":19148},[139,72189,843],{"emptyLinePlaceholder":842},[139,72191,72192],{"class":141,"line":19153},[139,72193,72194],{"class":2512},"      \u002F\u002F 创建新的对象\n",[139,72196,72197,72199,72202,72204],{"class":141,"line":19166},[139,72198,60461],{"class":149},[139,72200,72201],{"class":153}," obj",[139,72203,15836],{"class":149},[139,72205,17840],{"class":145},[139,72207,72208,72211,72213,72215,72217],{"class":141,"line":19171},[139,72209,72210],{"class":145},"        stuID: arr.",[139,72212,54204],{"class":153},[139,72214,47805],{"class":149},[139,72216,27381],{"class":153},[139,72218,33715],{"class":145},[139,72220,72221],{"class":141,"line":19176},[139,72222,72223],{"class":145},"        uname: uname.value,\n",[139,72225,72226],{"class":141,"line":19181},[139,72227,72228],{"class":145},"        age: age.value,\n",[139,72230,72231],{"class":141,"line":19194},[139,72232,72233],{"class":145},"        gender: gender.value,\n",[139,72235,72236],{"class":141,"line":19199},[139,72237,72238],{"class":145},"        salary: salary.value,\n",[139,72240,72241],{"class":141,"line":34880},[139,72242,72243],{"class":145},"        city: city.value\n",[139,72245,72246],{"class":141,"line":34886},[139,72247,54633],{"class":145},[139,72249,72250],{"class":141,"line":34892},[139,72251,72252],{"class":2512},"      \u002F\u002F console.log(obj);\n",[139,72254,72255],{"class":141,"line":34898},[139,72256,72257],{"class":2512},"      \u002F\u002F 追加到数组里面\n",[139,72259,72260,72262,72264],{"class":141,"line":34904},[139,72261,60240],{"class":145},[139,72263,54120],{"class":781},[139,72265,72266],{"class":145},"(obj)\n",[139,72268,72269],{"class":141,"line":34915},[139,72270,72271],{"class":2512},"      \u002F\u002F console.log(arr);\n",[139,72273,72274],{"class":141,"line":34921},[139,72275,72276],{"class":2512},"      \u002F\u002F 清空表单  reset重置表单\n",[139,72278,72279,72282,72284,72287],{"class":141,"line":34941},[139,72280,72281],{"class":153},"      this",[139,72283,2993],{"class":145},[139,72285,72286],{"class":781},"reset",[139,72288,4262],{"class":145},[139,72290,72291],{"class":141,"line":34947},[139,72292,72293],{"class":2512},"      \u002F\u002F 调用渲染函数\n",[139,72295,72296,72299],{"class":141,"line":34958},[139,72297,72298],{"class":781},"      render",[139,72300,4262],{"class":145},[139,72302,72303],{"class":141,"line":34964},[139,72304,35706],{"class":145},[139,72306,72307],{"class":141,"line":34970},[139,72308,72309],{"class":2512},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[139,72311,72312,72315,72318],{"class":141,"line":34976},[139,72313,72314],{"class":149},"    function",[139,72316,72317],{"class":781}," render",[139,72319,13127],{"class":145},[139,72321,72322],{"class":141,"line":34982},[139,72323,72324],{"class":2512},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[139,72326,72327,72330,72332],{"class":141,"line":34988},[139,72328,72329],{"class":145},"      tbody.innerHTML ",[139,72331,150],{"class":149},[139,72333,72334],{"class":160}," ''\n",[139,72336,72337],{"class":141,"line":34994},[139,72338,72339],{"class":2512},"      \u002F\u002F 遍历数组\n",[139,72341,72342,72344,72346,72348,72350,72352,72354,72356,72358,72360,72362,72364,72366],{"class":141,"line":35000},[139,72343,54519],{"class":149},[139,72345,549],{"class":145},[139,72347,54083],{"class":149},[139,72349,11712],{"class":145},[139,72351,150],{"class":149},[139,72353,799],{"class":153},[139,72355,11719],{"class":145},[139,72357,796],{"class":149},[139,72359,54201],{"class":145},[139,72361,54204],{"class":153},[139,72363,5495],{"class":145},[139,72365,4577],{"class":149},[139,72367,14714],{"class":145},[139,72369,72370,72372,72375,72377,72379,72382,72384,72387],{"class":141,"line":35020},[139,72371,63503],{"class":149},[139,72373,72374],{"class":153}," tr",[139,72376,15836],{"class":149},[139,72378,56630],{"class":145},[139,72380,72381],{"class":781},"createElement",[139,72383,157],{"class":145},[139,72385,72386],{"class":160},"'tr'",[139,72388,164],{"class":145},[139,72390,72391,72394,72396],{"class":141,"line":35026},[139,72392,72393],{"class":145},"        tr.innerHTML ",[139,72395,150],{"class":149},[139,72397,72398],{"class":160}," `\n",[139,72400,72401,72404,72406,72408,72410,72413,72416],{"class":141,"line":35042},[139,72402,72403],{"class":160},"        \u003Ctd>${",[139,72405,6160],{"class":145},[139,72407,3325],{"class":160},[139,72409,2879],{"class":145},[139,72411,72412],{"class":160},"].",[139,72414,72415],{"class":145},"stuID",[139,72417,72418],{"class":160},"}\u003C\u002Ftd>\n",[139,72420,72421,72424,72426,72428,72430,72432,72435],{"class":141,"line":35048},[139,72422,72423],{"class":160},"          \u003Ctd>${",[139,72425,6160],{"class":145},[139,72427,3325],{"class":160},[139,72429,2879],{"class":145},[139,72431,72412],{"class":160},[139,72433,72434],{"class":145},"uname",[139,72436,72418],{"class":160},[139,72438,72439,72441,72443,72445,72447,72449,72451],{"class":141,"line":35062},[139,72440,72423],{"class":160},[139,72442,6160],{"class":145},[139,72444,3325],{"class":160},[139,72446,2879],{"class":145},[139,72448,72412],{"class":160},[139,72450,831],{"class":145},[139,72452,72418],{"class":160},[139,72454,72455,72457,72459,72461,72463,72465,72468],{"class":141,"line":35068},[139,72456,72423],{"class":160},[139,72458,6160],{"class":145},[139,72460,3325],{"class":160},[139,72462,2879],{"class":145},[139,72464,72412],{"class":160},[139,72466,72467],{"class":145},"gender",[139,72469,72418],{"class":160},[139,72471,72472,72474,72476,72478,72480,72482,72485],{"class":141,"line":35083},[139,72473,72423],{"class":160},[139,72475,6160],{"class":145},[139,72477,3325],{"class":160},[139,72479,2879],{"class":145},[139,72481,72412],{"class":160},[139,72483,72484],{"class":145},"salary",[139,72486,72418],{"class":160},[139,72488,72489,72491,72493,72495,72497,72499,72502],{"class":141,"line":35089},[139,72490,72423],{"class":160},[139,72492,6160],{"class":145},[139,72494,3325],{"class":160},[139,72496,2879],{"class":145},[139,72498,72412],{"class":160},[139,72500,72501],{"class":145},"city",[139,72503,72418],{"class":160},[139,72505,72506],{"class":141,"line":35098},[139,72507,71823],{"class":160},[139,72509,72510,72513,72515],{"class":141,"line":35104},[139,72511,72512],{"class":160},"            \u003Ca href=\"javascript:\" data-id=${",[139,72514,2879],{"class":145},[139,72516,72517],{"class":160},"}>删除\u003C\u002Fa>\n",[139,72519,72520],{"class":141,"line":35113},[139,72521,72522],{"class":160},"          \u003C\u002Ftd> \n",[139,72524,72525],{"class":141,"line":35119},[139,72526,72527],{"class":160},"          `\n",[139,72529,72530],{"class":141,"line":35125},[139,72531,72532],{"class":2512},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[139,72534,72535,72538,72541],{"class":141,"line":35134},[139,72536,72537],{"class":145},"        tbody.",[139,72539,72540],{"class":781},"appendChild",[139,72542,72543],{"class":145},"(tr)\n",[139,72545,72546],{"class":141,"line":35140},[139,72547,54633],{"class":145},[139,72549,72550],{"class":141,"line":35151},[139,72551,4472],{"class":145},[139,72553,72554],{"class":141,"line":35157},[139,72555,843],{"emptyLinePlaceholder":842},[139,72557,72558],{"class":141,"line":35176},[139,72559,72560],{"class":2512},"    \u002F\u002F 3.删除委托\n",[139,72562,72563],{"class":141,"line":35182},[139,72564,72565],{"class":2512},"    \u002F\u002F 3.1 事件委托 tbody\n",[139,72567,72568,72571,72573,72575,72577,72579,72581,72583,72585],{"class":141,"line":35193},[139,72569,72570],{"class":145},"    tbody.",[139,72572,60046],{"class":781},[139,72574,157],{"class":145},[139,72576,60051],{"class":160},[139,72578,413],{"class":145},[139,72580,56683],{"class":149},[139,72582,549],{"class":145},[139,72584,628],{"class":2111},[139,72586,14714],{"class":145},[139,72588,72589,72591,72593,72595,72597],{"class":141,"line":35199},[139,72590,56714],{"class":149},[139,72592,69264],{"class":145},[139,72594,56720],{"class":149},[139,72596,70486],{"class":160},[139,72598,14714],{"class":145},[139,72600,72601],{"class":141,"line":35219},[139,72602,72603],{"class":2512},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[139,72605,72606],{"class":141,"line":35235},[139,72607,72608],{"class":2512},"        \u002F\u002F console.log(e.target.dataset.id);\n",[139,72610,72611],{"class":141,"line":35241},[139,72612,72613],{"class":2512},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[139,72615,72616,72619,72621,72624,72626],{"class":141,"line":35255},[139,72617,72618],{"class":145},"        arr.",[139,72620,60243],{"class":781},[139,72622,72623],{"class":145},"(e.target.dataset.id, ",[139,72625,410],{"class":153},[139,72627,164],{"class":145},[139,72629,72630],{"class":141,"line":35261},[139,72631,72632],{"class":2512},"        \u002F\u002F 重新渲染一次\n",[139,72634,72635,72638],{"class":141,"line":35267},[139,72636,72637],{"class":781},"        render",[139,72639,4262],{"class":145},[139,72641,72642],{"class":141,"line":35278},[139,72643,54633],{"class":145},[139,72645,72646],{"class":141,"line":35284},[139,72647,35706],{"class":145},[139,72649,72650,72652,72654],{"class":141,"line":35290},[139,72651,54652],{"class":145},[139,72653,54050],{"class":53538},[139,72655,53545],{"class":145},[139,72657,72658],{"class":141,"line":35300},[139,72659,843],{"emptyLinePlaceholder":842},[139,72661,72662,72664,72666],{"class":141,"line":35306},[139,72663,54022],{"class":145},[139,72665,54037],{"class":53538},[139,72667,53545],{"class":145},[139,72669,72670],{"class":141,"line":35317},[139,72671,843],{"emptyLinePlaceholder":842},[139,72673,72674,72676,72678],{"class":141,"line":35323},[139,72675,54022],{"class":145},[139,72677,52873],{"class":53538},[139,72679,53545],{"class":145},[19,72681,72682],{},"样式：",[130,72684,72688],{"className":72685,"code":72686,"language":72687,"meta":135,"style":135},"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",[50,72689,72690,72695,72705,72714,72718,72722,72727,72737,72742,72746,72751,72761,72766,72775,72779,72783,72788,72793,72803,72813,72818,72822,72827,72836,72846,72851,72861,72871,72875,72880,72888,72892,72897,72902,72907,72915,72924,72928,72933,72942,72946,72951,72960,72964,72969,72978,72987,72995,72999,73004,73013,73023,73032,73042,73048,73057,73067,73077,73081,73086,73095,73103,73113,73121,73130,73139,73149,73157,73161,73166,73175],{"__ignoreMap":135},[139,72691,72692],{"class":141,"line":142},[139,72693,72694],{"class":145},"* {\n",[139,72696,72697,72700,72702],{"class":141,"line":210},[139,72698,72699],{"class":53538},"  margin",[139,72701,2265],{"class":145},[139,72703,72704],{"class":160},"0;\n",[139,72706,72707,72710,72712],{"class":141,"line":254},[139,72708,72709],{"class":160},"  padding",[139,72711,2265],{"class":145},[139,72713,72704],{"class":160},[139,72715,72716],{"class":141,"line":262},[139,72717,3862],{"class":145},[139,72719,72720],{"class":141,"line":313},[139,72721,843],{"emptyLinePlaceholder":842},[139,72723,72724],{"class":141,"line":462},[139,72725,72726],{"class":160},"a {\n",[139,72728,72729,72732,72734],{"class":141,"line":474},[139,72730,72731],{"class":53538},"  text-decoration",[139,72733,2265],{"class":145},[139,72735,72736],{"class":160},"none;\n",[139,72738,72739],{"class":141,"line":484},[139,72740,72741],{"class":160},"  color:#721c24;\n",[139,72743,72744],{"class":141,"line":989},[139,72745,3862],{"class":145},[139,72747,72748],{"class":141,"line":994},[139,72749,72750],{"class":160},"h1 {\n",[139,72752,72753,72756,72758],{"class":141,"line":999},[139,72754,72755],{"class":53538},"  text-align",[139,72757,2265],{"class":145},[139,72759,72760],{"class":160},"center;\n",[139,72762,72763],{"class":141,"line":1006},[139,72764,72765],{"class":160},"  color:#333;\n",[139,72767,72768,72770,72772],{"class":141,"line":1027},[139,72769,72699],{"class":53538},[139,72771,2265],{"class":145},[139,72773,72774],{"class":160},"20px 0;\n",[139,72776,72777],{"class":141,"line":1040},[139,72778,4957],{"class":145},[139,72780,72781],{"class":141,"line":2160},[139,72782,3862],{"class":145},[139,72784,72785],{"class":141,"line":2188},[139,72786,72787],{"class":160},"table {\n",[139,72789,72790],{"class":141,"line":3944},[139,72791,72792],{"class":160},"  margin:0 auto;\n",[139,72794,72795,72798,72800],{"class":141,"line":3963},[139,72796,72797],{"class":53538},"  width",[139,72799,2265],{"class":145},[139,72801,72802],{"class":160},"800px;\n",[139,72804,72805,72808,72810],{"class":141,"line":3968},[139,72806,72807],{"class":53538},"  border-collapse",[139,72809,2265],{"class":145},[139,72811,72812],{"class":160},"collapse;\n",[139,72814,72815],{"class":141,"line":3982},[139,72816,72817],{"class":160},"  color:#004085;\n",[139,72819,72820],{"class":141,"line":3987},[139,72821,3862],{"class":145},[139,72823,72824],{"class":141,"line":4014},[139,72825,72826],{"class":160},"th {\n",[139,72828,72829,72831,72833],{"class":141,"line":4019},[139,72830,72709],{"class":53538},[139,72832,2265],{"class":145},[139,72834,72835],{"class":160},"10px;\n",[139,72837,72838,72841,72843],{"class":141,"line":4036},[139,72839,72840],{"class":53538},"  background",[139,72842,2265],{"class":145},[139,72844,72845],{"class":2512},"#cfe5ff;\n",[139,72847,72848],{"class":141,"line":4041},[139,72849,72850],{"class":145},"  \n",[139,72852,72853,72856,72858],{"class":141,"line":4046},[139,72854,72855],{"class":53538},"  font-size",[139,72857,2265],{"class":145},[139,72859,72860],{"class":160},"20px;\n",[139,72862,72863,72866,72868],{"class":141,"line":4051},[139,72864,72865],{"class":53538},"  font-weight",[139,72867,2265],{"class":145},[139,72869,72870],{"class":160},"400;\n",[139,72872,72873],{"class":141,"line":4065},[139,72874,3862],{"class":145},[139,72876,72877],{"class":141,"line":4070},[139,72878,72879],{"class":160},"td,th {\n",[139,72881,72882,72885],{"class":141,"line":4860},[139,72883,72884],{"class":160},"  border:1px solid",[139,72886,72887],{"class":2512}," #b8daff;\n",[139,72889,72890],{"class":141,"line":4874},[139,72891,3862],{"class":145},[139,72893,72894],{"class":141,"line":4882},[139,72895,72896],{"class":160},"td {\n",[139,72898,72899],{"class":141,"line":4887},[139,72900,72901],{"class":160},"  padding:10px;\n",[139,72903,72904],{"class":141,"line":4893},[139,72905,72906],{"class":160},"  color:#666;\n",[139,72908,72909,72911,72913],{"class":141,"line":4899},[139,72910,72755],{"class":53538},[139,72912,2265],{"class":145},[139,72914,72760],{"class":160},[139,72916,72917,72919,72921],{"class":141,"line":4904},[139,72918,72855],{"class":53538},[139,72920,2265],{"class":145},[139,72922,72923],{"class":160},"16px;\n",[139,72925,72926],{"class":141,"line":10222},[139,72927,3862],{"class":145},[139,72929,72930],{"class":141,"line":10246},[139,72931,72932],{"class":160},"tbody tr {\n",[139,72934,72935,72937,72939],{"class":141,"line":10251},[139,72936,72840],{"class":53538},[139,72938,2265],{"class":145},[139,72940,72941],{"class":2512},"#fff;\n",[139,72943,72944],{"class":141,"line":10257},[139,72945,3862],{"class":145},[139,72947,72948],{"class":141,"line":10284},[139,72949,72950],{"class":160},"tbody tr:hover {\n",[139,72952,72953,72955,72957],{"class":141,"line":10289},[139,72954,72840],{"class":53538},[139,72956,2265],{"class":145},[139,72958,72959],{"class":2512},"#e1ecf8;\n",[139,72961,72962],{"class":141,"line":10295},[139,72963,3862],{"class":145},[139,72965,72966],{"class":141,"line":10307},[139,72967,72968],{"class":160},".info {\n",[139,72970,72971,72973,72975],{"class":141,"line":10319},[139,72972,72797],{"class":53538},[139,72974,2265],{"class":145},[139,72976,72977],{"class":160},"900px;\n",[139,72979,72980,72982,72984],{"class":141,"line":10331},[139,72981,72699],{"class":53538},[139,72983,2265],{"class":145},[139,72985,72986],{"class":160},"50px auto;\n",[139,72988,72989,72991,72993],{"class":141,"line":11990},[139,72990,72755],{"class":53538},[139,72992,2265],{"class":145},[139,72994,72760],{"class":160},[139,72996,72997],{"class":141,"line":12015},[139,72998,3862],{"class":145},[139,73000,73001],{"class":141,"line":12038},[139,73002,73003],{"class":160},".info  input, .info select {\n",[139,73005,73006,73008,73010],{"class":141,"line":12062},[139,73007,72797],{"class":53538},[139,73009,2265],{"class":145},[139,73011,73012],{"class":160},"80px;\n",[139,73014,73015,73018,73020],{"class":141,"line":12067},[139,73016,73017],{"class":53538},"  height",[139,73019,2265],{"class":145},[139,73021,73022],{"class":160},"27px;\n",[139,73024,73025,73028,73030],{"class":141,"line":12072},[139,73026,73027],{"class":53538},"  outline",[139,73029,2265],{"class":145},[139,73031,72736],{"class":160},[139,73033,73034,73037,73039],{"class":141,"line":12077},[139,73035,73036],{"class":53538},"  border-radius",[139,73038,2265],{"class":145},[139,73040,73041],{"class":160},"5px;\n",[139,73043,73044,73046],{"class":141,"line":12086},[139,73045,72884],{"class":160},[139,73047,72887],{"class":2512},[139,73049,73050,73053,73055],{"class":141,"line":12091},[139,73051,73052],{"class":53538},"  padding-left",[139,73054,2265],{"class":145},[139,73056,73041],{"class":160},[139,73058,73059,73062,73064],{"class":141,"line":12097},[139,73060,73061],{"class":53538},"  box-sizing",[139,73063,2265],{"class":145},[139,73065,73066],{"class":160},"border-box;\n",[139,73068,73069,73072,73074],{"class":141,"line":12118},[139,73070,73071],{"class":53538},"  margin-right",[139,73073,2265],{"class":145},[139,73075,73076],{"class":160},"15px;\n",[139,73078,73079],{"class":141,"line":12124},[139,73080,3862],{"class":145},[139,73082,73083],{"class":141,"line":12138},[139,73084,73085],{"class":160},".info button {\n",[139,73087,73088,73090,73092],{"class":141,"line":12144},[139,73089,72797],{"class":53538},[139,73091,2265],{"class":145},[139,73093,73094],{"class":160},"60px;\n",[139,73096,73097,73099,73101],{"class":141,"line":12171},[139,73098,73017],{"class":53538},[139,73100,2265],{"class":145},[139,73102,73022],{"class":160},[139,73104,73105,73108,73110],{"class":141,"line":12180},[139,73106,73107],{"class":53538},"  background-color",[139,73109,2265],{"class":145},[139,73111,73112],{"class":2512},"#004085;\n",[139,73114,73115,73117,73119],{"class":141,"line":12186},[139,73116,73027],{"class":53538},[139,73118,2265],{"class":145},[139,73120,72736],{"class":160},[139,73122,73123,73126,73128],{"class":141,"line":12194},[139,73124,73125],{"class":53538},"  border",[139,73127,2265],{"class":145},[139,73129,72704],{"class":160},[139,73131,73132,73135,73137],{"class":141,"line":12199},[139,73133,73134],{"class":53538},"  color",[139,73136,2265],{"class":145},[139,73138,72941],{"class":2512},[139,73140,73141,73144,73146],{"class":141,"line":18871},[139,73142,73143],{"class":53538},"  cursor",[139,73145,2265],{"class":145},[139,73147,73148],{"class":160},"pointer;\n",[139,73150,73151,73153,73155],{"class":141,"line":18877},[139,73152,73036],{"class":53538},[139,73154,2265],{"class":145},[139,73156,73041],{"class":160},[139,73158,73159],{"class":141,"line":18900},[139,73160,3862],{"class":145},[139,73162,73163],{"class":141,"line":18906},[139,73164,73165],{"class":160},".info .age {\n",[139,73167,73168,73170,73172],{"class":141,"line":18929},[139,73169,72797],{"class":53538},[139,73171,2265],{"class":145},[139,73173,73174],{"class":160},"50px;\n",[139,73176,73177],{"class":141,"line":18943},[139,73178,3862],{"class":145},[19,73180,73181],{},"思路：",[19,73183,73184],{},[3760,73185],{"alt":135,"src":73186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73188,73189],{},[3760,73190],{"alt":135,"src":73191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73193,73194],{},[3760,73195],{"alt":135,"src":73196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1217,73198,73200],{"id":73199},"_3315-重绘回流","3.3.15 重绘回流",[19,73202,73203],{},[3760,73204],{"alt":135,"src":73205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73207,73208],{},[3760,73209],{"alt":135,"src":73210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73212,73213],{},[3760,73214],{"alt":135,"src":73215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73217,73219],{"id":73218},"_34-bom","3.4 BOM",[19,73221,73222],{},[3760,73223],{"alt":135,"src":73224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73226,73227],{},"平时写的document省略了window而已，实际上是window.document",[19,73229,73230],{},"函数也是这样，调用的时候实际为window.fn()",[19,73232,73233],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73235,73236],{},"window大部分情况下可以省略",[1217,73238,73240],{"id":73239},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73242,73243],{},"只执行一次",[19,73245,73246],{},[3760,73247],{"alt":135,"src":73248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73250,73251],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73253,73254],{},[3760,73255],{"alt":135,"src":73256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1217,73258,73260],{"id":73259},"_342-js执行机制","3.4.2 JS执行机制",[19,73262,73263],{},[3760,73264],{"alt":135,"src":73265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73267,73268],{},"两个的结果都是1111 3333 2222",[19,73270,73271],{},[3760,73272],{"alt":135,"src":73273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73275,73276],{},[3760,73277],{"alt":135,"src":73278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73280,73281],{},[3760,73282],{"alt":135,"src":73283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73285,73286],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73288,73289],{},"工作流程：",[19,73291,73292],{},[3760,73293],{"alt":135,"src":73294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73296,73297],{},[3760,73298],{"alt":135,"src":73299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73301,73302],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73304,73305],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1217,73307,73309],{"id":73308},"_343-location对象","3.4.3 location对象",[19,73311,73312],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73314,73315],{},[3760,73316],{"alt":135,"src":73317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73319,73320],{},"href可以跳转页面",[1760,73322,73323],{},[1763,73324,73325],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73327,73328],{},"search得到提交信息之后网站后边的地址",[19,73330,73331],{},[3760,73332],{"alt":135,"src":73333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73335,73336],{},[3760,73337],{"alt":135,"src":73338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1760,73340,73341],{"start":210},[1763,73342,73343],{},"hash:这个获取单页面应用#后边的地址",[19,73345,73346],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73348,73349],{},[3760,73350],{"alt":135,"src":73351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[130,73353,73355],{"className":55302,"code":73354,"language":55304,"meta":135,"style":135},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[50,73356,73357,73377,73397],{"__ignoreMap":135},[139,73358,73359,73361,73363,73365,73367,73370,73373,73375],{"class":141,"line":142},[139,73360,54380],{"class":145},[139,73362,2680],{"class":53538},[139,73364,63290],{"class":781},[139,73366,150],{"class":145},[139,73368,73369],{"class":160},"\"#\u002Fmy\"",[139,73371,73372],{"class":145},">我的\u003C\u002F",[139,73374,2680],{"class":53538},[139,73376,53545],{"class":145},[139,73378,73379,73381,73383,73385,73387,73390,73393,73395],{"class":141,"line":210},[139,73380,54380],{"class":145},[139,73382,2680],{"class":53538},[139,73384,63290],{"class":781},[139,73386,150],{"class":145},[139,73388,73389],{"class":160},"\"#\u002Ffriend\"",[139,73391,73392],{"class":145},">关注\u003C\u002F",[139,73394,2680],{"class":53538},[139,73396,53545],{"class":145},[139,73398,73399,73401,73403,73405,73407,73410,73413,73415],{"class":141,"line":254},[139,73400,54380],{"class":145},[139,73402,2680],{"class":53538},[139,73404,63290],{"class":781},[139,73406,150],{"class":145},[139,73408,73409],{"class":160},"\"#\u002Fdownload\"",[139,73411,73412],{"class":145},">下载\u003C\u002F",[139,73414,2680],{"class":53538},[139,73416,53545],{"class":145},[19,73418,73419],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1760,73421,73422],{"start":254},[1763,73423,73424,73425,73427,73428,73430],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55951,73426],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55951,73429],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1217,73432,73434],{"id":73433},"_345-navigator对象","3.4.5 navigator对象",[19,73436,73437],{},[3760,73438],{"alt":135,"src":73439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[130,73441,73445],{"className":73442,"code":73443,"language":73444,"meta":135,"style":135},"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",[50,73446,73447,73452,73463,73475,73480,73531,73572,73577,73590,73602,73607],{"__ignoreMap":135},[139,73448,73449],{"class":141,"line":142},[139,73450,73451],{"class":2512},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[139,73453,73454,73456,73458,73460],{"class":141,"line":210},[139,73455,2668],{"class":149},[139,73457,157],{"class":145},[139,73459,56683],{"class":149},[139,73461,73462],{"class":145}," () { \n",[139,73464,73465,73467,73470,73472],{"class":141,"line":254},[139,73466,9066],{"class":149},[139,73468,73469],{"class":153}," userAgent",[139,73471,15836],{"class":149},[139,73473,73474],{"class":145}," navigator.userAgent \n",[139,73476,73477],{"class":141,"line":262},[139,73478,73479],{"class":2512},"\u002F\u002F 验证是否为Android或iPhone \n",[139,73481,73482,73484,73487,73489,73492,73495,73497,73499,73502,73504,73507,73511,73513,73515,73517,73520,73522,73524,73526,73528],{"class":141,"line":313},[139,73483,9066],{"class":149},[139,73485,73486],{"class":153}," android",[139,73488,15836],{"class":149},[139,73490,73491],{"class":145}," userAgent.",[139,73493,73494],{"class":781},"match",[139,73496,157],{"class":145},[139,73498,3019],{"class":160},[139,73500,73501],{"class":50215},"(Android);",[139,73503,3417],{"class":149},[139,73505,73506],{"class":153},"[\\s",[139,73508,73510],{"class":73509},"snhLl","\\\u002F",[139,73512,3373],{"class":153},[139,73514,1147],{"class":149},[139,73516,157],{"class":50215},[139,73518,73519],{"class":153},"[\\d.]",[139,73521,1147],{"class":149},[139,73523,2867],{"class":50215},[139,73525,3417],{"class":149},[139,73527,3019],{"class":160},[139,73529,73530],{"class":145},") \n",[139,73532,73533,73535,73538,73540,73542,73544,73546,73548,73551,73554,73557,73559,73561,73564,73566,73568,73570],{"class":141,"line":462},[139,73534,9066],{"class":149},[139,73536,73537],{"class":153}," iphone",[139,73539,15836],{"class":149},[139,73541,73491],{"class":145},[139,73543,73494],{"class":781},[139,73545,157],{"class":145},[139,73547,3019],{"class":160},[139,73549,73550],{"class":50215},"(iPhone",[139,73552,73553],{"class":153},"\\s",[139,73555,73556],{"class":50215},"OS)",[139,73558,73553],{"class":153},[139,73560,157],{"class":50215},[139,73562,73563],{"class":153},"[\\d_]",[139,73565,1147],{"class":149},[139,73567,2867],{"class":50215},[139,73569,3019],{"class":160},[139,73571,73530],{"class":145},[139,73573,73574],{"class":141,"line":474},[139,73575,73576],{"class":2512},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[139,73578,73579,73581,73584,73587],{"class":141,"line":484},[139,73580,1729],{"class":149},[139,73582,73583],{"class":145}," (android ",[139,73585,73586],{"class":149},"||",[139,73588,73589],{"class":145}," iphone) { \n",[139,73591,73592,73595,73597,73600],{"class":141,"line":989},[139,73593,73594],{"class":145},"location.href ",[139,73596,150],{"class":149},[139,73598,73599],{"class":160}," 'http:\u002F\u002Fm.itcast.cn'",[139,73601,4957],{"class":145},[139,73603,73604],{"class":141,"line":994},[139,73605,73606],{"class":145},"} \n",[139,73608,73609],{"class":141,"line":999},[139,73610,73611],{"class":145},"})()\n",[1217,73613,73615],{"id":73614},"_346-histroy对象","3.4.6 histroy对象",[19,73617,73618],{},[3760,73619],{"alt":135,"src":73620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73622,73623],{},"浏览器地址的前进与后退!!!",[19,73625,73626],{},"history.back() 等效于 history.go(-1)",[19,73628,73629],{},"history.forward() 等效于 history.go(1)",[14,73631,73633],{"id":73632},"_35-本地存储","3.5 本地存储",[1760,73635,73636,73639,73642],{},[1763,73637,73638],{},"数据存储在用户浏览器中",[1763,73640,73641],{},"设置、读取方便、甚至页面刷新不丢失数据",[1763,73643,73644],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1217,73646,73648],{"id":73647},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73650,73651],{},"只能存储字符串",[19,73653,73654],{},[3760,73655],{"alt":135,"src":73656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73658,73659],{},[3760,73660],{"alt":135,"src":73661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73663,73664],{},"键值对要加引号,不然就会当变量来看了",[19,73666,73667],{},"localStorage.setItem('uname', 'pink')",[19,73669,73670],{},"刷新之后信息不再丢失",[19,73672,73673],{},"操作key,value会跟着变",[19,73675,73676],{},"删除只删除键就可以,即名字",[19,73678,73667],{},[19,73680,73681],{},"改:",[19,73683,73684],{},"localStorage.setItem('uname','red')",[19,73686,73687],{},"有这个键就是改,没有这个键就是改",[19,73689,73690],{},[3760,73691],{"alt":135,"src":73692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73694,73695],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73697,73698],{},[3760,73699],{"alt":135,"src":73700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73702,73703],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1217,73705,73707],{"id":73706},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73709,73710],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73712,73713],{},"特性:",[1760,73715,73716,73719,73722,73725],{},[1763,73717,73718],{},"生命周期为关闭浏览器窗口",[1763,73720,73721],{},"在同一个窗口(页面)下数据可以共享",[1763,73723,73724],{},"以键值对的形式存储使用",[1763,73726,73727],{},"用法跟localStorage 基本相同",[1217,73729,73731],{"id":73730},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73733,73734],{},"本地只能存储字符串,无法直接存储复杂数据类型",[130,73736,73738],{"className":55302,"code":73737,"language":55304,"meta":135,"style":135},"\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",[50,73739,73740,73748,73753,73758,73763,73768,73772,73777,73782],{"__ignoreMap":135},[139,73741,73742,73744,73746],{"class":141,"line":142},[139,73743,796],{"class":145},[139,73745,54050],{"class":53538},[139,73747,53545],{"class":145},[139,73749,73750],{"class":141,"line":210},[139,73751,73752],{"class":145},"    const obj = {\n",[139,73754,73755],{"class":141,"line":254},[139,73756,73757],{"class":145},"      uname: 'pink老师',\n",[139,73759,73760],{"class":141,"line":262},[139,73761,73762],{"class":145},"      age: 18,\n",[139,73764,73765],{"class":141,"line":313},[139,73766,73767],{"class":145},"      gender: '女'\n",[139,73769,73770],{"class":141,"line":462},[139,73771,4472],{"class":145},[139,73773,73774],{"class":141,"line":474},[139,73775,73776],{"class":145},"    \u002F\u002F 存储复杂数据类型\n",[139,73778,73779],{"class":141,"line":484},[139,73780,73781],{"class":145},"    localStorage.setItem('obj', obj)\n",[139,73783,73784,73786,73788],{"class":141,"line":989},[139,73785,54652],{"class":145},[139,73787,54050],{"class":53538},[139,73789,53545],{"class":145},[19,73791,73792],{},[3760,73793],{"alt":135,"src":73794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73796,73797],{},"如果获取一下数据:",[19,73799,73800],{},"log(localStorage.getItem('obj'))",[19,73802,73803],{},[3760,73804],{"alt":135,"src":73805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73807,73808],{},"发现直接存对象是使用不了的!!!",[24265,73810,73812],{"id":73811},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73814,73815],{},[3760,73816],{"alt":135,"src":73817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[130,73819,73821],{"className":52871,"code":73820,"language":52873,"meta":135,"style":135},"\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",[50,73822,73823,73831,73841,73851,73860,73868,73872,73876,73902,73921,73929,73933,73938,73943],{"__ignoreMap":135},[139,73824,73825,73827,73829],{"class":141,"line":142},[139,73826,796],{"class":145},[139,73828,54050],{"class":53538},[139,73830,53545],{"class":145},[139,73832,73833,73835,73837,73839],{"class":141,"line":210},[139,73834,13494],{"class":149},[139,73836,72201],{"class":153},[139,73838,15836],{"class":149},[139,73840,17840],{"class":145},[139,73842,73843,73846,73849],{"class":141,"line":254},[139,73844,73845],{"class":145},"      uname: ",[139,73847,73848],{"class":160},"'pink老师'",[139,73850,33715],{"class":145},[139,73852,73853,73856,73858],{"class":141,"line":262},[139,73854,73855],{"class":145},"      age: ",[139,73857,3085],{"class":153},[139,73859,33715],{"class":145},[139,73861,73862,73865],{"class":141,"line":313},[139,73863,73864],{"class":145},"      gender: ",[139,73866,73867],{"class":160},"'女'\n",[139,73869,73870],{"class":141,"line":462},[139,73871,4472],{"class":145},[139,73873,73874],{"class":141,"line":474},[139,73875,73776],{"class":2512},[139,73877,73878,73881,73884,73886,73889,73891,73894,73896,73899],{"class":141,"line":484},[139,73879,73880],{"class":145},"  localStorage.",[139,73882,73883],{"class":781},"setItem",[139,73885,157],{"class":145},[139,73887,73888],{"class":160},"'obj'",[139,73890,413],{"class":145},[139,73892,73893],{"class":153},"JSON",[139,73895,2993],{"class":145},[139,73897,73898],{"class":781},"stringify",[139,73900,73901],{"class":145},"(obj))\n",[139,73903,73904,73907,73909,73912,73915,73917,73919],{"class":141,"line":989},[139,73905,73906],{"class":145},"  console.",[139,73908,60480],{"class":781},[139,73910,73911],{"class":145},"(localStorage.",[139,73913,73914],{"class":781},"getItem",[139,73916,157],{"class":145},[139,73918,73888],{"class":160},[139,73920,207],{"class":145},[139,73922,73923,73925,73927],{"class":141,"line":994},[139,73924,54652],{"class":145},[139,73926,54050],{"class":53538},[139,73928,53545],{"class":145},[139,73930,73931],{"class":141,"line":999},[139,73932,72850],{"class":145},[139,73934,73935],{"class":141,"line":1006},[139,73936,73937],{"class":145},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[139,73939,73940],{"class":141,"line":1027},[139,73941,73942],{"class":145},"  类型是字符串的\n",[139,73944,73945],{"class":141,"line":1040},[139,73946,73947],{"class":145},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24265,73949,73951],{"id":73950},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73953,73954],{},[3760,73955],{"alt":135,"src":73956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73958,73959],{},[3760,73960],{"alt":135,"src":73961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[130,73963,73965],{"className":55302,"code":73964,"language":55304,"meta":135,"style":135},"  \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",[50,73966,73967,73975,73979,73983,73987,73991,73995,74000,74005,74010,74015,74020,74025,74030,74035],{"__ignoreMap":135},[139,73968,73969,73971,73973],{"class":141,"line":142},[139,73970,54380],{"class":145},[139,73972,54050],{"class":53538},[139,73974,53545],{"class":145},[139,73976,73977],{"class":141,"line":210},[139,73978,73752],{"class":145},[139,73980,73981],{"class":141,"line":254},[139,73982,73757],{"class":145},[139,73984,73985],{"class":141,"line":262},[139,73986,73762],{"class":145},[139,73988,73989],{"class":141,"line":313},[139,73990,73767],{"class":145},[139,73992,73993],{"class":141,"line":462},[139,73994,4472],{"class":145},[139,73996,73997],{"class":141,"line":474},[139,73998,73999],{"class":145},"    \u002F\u002F 1.存储复杂数据类型\n",[139,74001,74002],{"class":141,"line":484},[139,74003,74004],{"class":145},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[139,74006,74007],{"class":141,"line":989},[139,74008,74009],{"class":145},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[139,74011,74012],{"class":141,"line":994},[139,74013,74014],{"class":145},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[139,74016,74017],{"class":141,"line":999},[139,74018,74019],{"class":145},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[139,74021,74022],{"class":141,"line":1006},[139,74023,74024],{"class":145},"    \u002F\u002F 取\n",[139,74026,74027],{"class":141,"line":1027},[139,74028,74029],{"class":145},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[139,74031,74032],{"class":141,"line":1040},[139,74033,74034],{"class":145},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[139,74036,74037,74039,74041],{"class":141,"line":2160},[139,74038,54652],{"class":145},[139,74040,54050],{"class":53538},[139,74042,53545],{"class":145},[19,74044,74045],{},[3760,74046],{"alt":135,"src":74047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1217,74049,74051],{"id":74050},"_356-数组map方法","3.5.6 数组map方法",[19,74053,74054],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74056,74057],{},[3760,74058],{"alt":135,"src":74059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74061,74062],{},[3760,74063],{"alt":135,"src":74064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74066,74067,74070],{},[1674,74068,74069],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74072,74073],{},"map有返回值，但是forEach没有返回值",[19,74075,74076],{},"map是个方法。用的时候要加 ()",[19,74078,74079],{},"map返回的是一个数组",[1217,74081,74083],{"id":74082},"_357-数组中join方法","3.5.7 数组中join方法",[19,74085,74086],{},[3760,74087],{"alt":135,"src":74088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74090,74091],{},"类似于python中拼接字符串一样！",[1760,74093,74094,74097,74100],{},[1763,74095,74096],{},"小括号为空则逗号分开",[1763,74098,74099],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1763,74101,74102],{},"小括号用啥符号就用进行分割",[1217,74104,74106],{"id":74105},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1760,74108,74109,74112,74115,74118,74121],{},[1763,74110,74111],{},"记住本地时间获取快速方式：new Date().toDateString()",[1763,74113,74114],{},"尽量减少DOM操作，用好map+join的渲染方式",[1763,74116,74117],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1763,74119,74120],{},"return可以实现函数的结束",[1763,74122,74123],{},"禁止跳转是 preventDefault() 不要忘记",[130,74125,74127],{"className":52871,"code":74126,"language":52873,"meta":135,"style":135},"\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",[50,74128,74129,74139,74153,74157,74165,74179,74199,74211,74219,74225,74235,74245,74249,74253,74259,74269,74281,74285,74289,74296,74308,74322,74332,74336,74340,74347,74354,74361,74373,74385,74395,74407,74411,74415,74422,74429,74441,74453,74463,74475,74505,74509,74513,74520,74532,74544,74568,74578,74588,74592,74596,74604,74615,74627,74639,74651,74668,74680,74692,74696,74700,74707,74719,74731,74743,74754,74772,74785,74797,74821,74832,74836,74840,74848,74858,74862,74866,74872,74884,74895,74905,74909,74913,74919,74941,74945,74949,74955,74961,74973,74983,74995,75025,75038,75055,75059,75063,75074,75096,75106,75110,75114,75127,75137,75149,75161,75173,75185,75195,75205,75215,75226,75239,75243,75251,75259,75263,75271,75284,75304,75337,75370,75403,75429,75447,75465,75473,75499,75517,75535,75553,75571,75589,75597,75605,75623,75631,75660,75668,75676,75684,75697,75709,75721,75733,75745,75757,75770,75782,75790,75798,75806,75811,75816,75820,75824,75828,75832,75836,75840,75845,75850,75855,75860,75868,75876,75884,75889,75894,75899,75904,75909,75914,75919,75924,75929,75934,75939,75944,75949,75954,75958,75963,75968,75978,75987,75991,75996,76005,76021,76063,76103,76142,76207,76215,76219,76224,76242,76250,76255,76260,76290,76296,76301,76314,76326,76338,76350,76362,76374,76386,76390,76400,76404,76409,76414,76418,76427,76431,76436,76441,76460,76465,76485,76489,76494,76498,76503,76521,76539,76557,76576,76595,76614,76619,76625,76646,76652,76661,76667,76673,76679,76706,76719,76724,76734,76740,76746,76752,76758,76763,76769,76775,76781,76787,76820,76825,76830,76835,76840,76846,76852,76858,76869,76874,76880,76887,76901,76907,76931,76936,76941,76947,76953,76974,76980,76993,76999,77005,77011,77017,77022,77028,77034,77040,77058,77072,77078,77086,77092,77114,77119,77124,77129,77134,77139,77148,77157,77162],{"__ignoreMap":135},[139,74130,74131,74133,74135,74137],{"class":141,"line":142},[139,74132,53535],{"class":145},[139,74134,53539],{"class":53538},[139,74136,53542],{"class":781},[139,74138,53545],{"class":145},[139,74140,74141,74143,74145,74147,74149,74151],{"class":141,"line":210},[139,74142,796],{"class":145},[139,74144,52873],{"class":53538},[139,74146,53554],{"class":781},[139,74148,150],{"class":145},[139,74150,53559],{"class":160},[139,74152,53545],{"class":145},[139,74154,74155],{"class":141,"line":254},[139,74156,843],{"emptyLinePlaceholder":842},[139,74158,74159,74161,74163],{"class":141,"line":262},[139,74160,796],{"class":145},[139,74162,53572],{"class":53538},[139,74164,53545],{"class":145},[139,74166,74167,74169,74171,74173,74175,74177],{"class":141,"line":313},[139,74168,54380],{"class":145},[139,74170,53582],{"class":53538},[139,74172,53585],{"class":781},[139,74174,150],{"class":145},[139,74176,53590],{"class":160},[139,74178,53545],{"class":145},[139,74180,74181,74183,74185,74187,74189,74191,74193,74195,74197],{"class":141,"line":462},[139,74182,54380],{"class":145},[139,74184,53582],{"class":53538},[139,74186,17189],{"class":781},[139,74188,150],{"class":145},[139,74190,53629],{"class":160},[139,74192,53609],{"class":781},[139,74194,150],{"class":145},[139,74196,53636],{"class":160},[139,74198,53545],{"class":145},[139,74200,74201,74203,74205,74207,74209],{"class":141,"line":474},[139,74202,54380],{"class":145},[139,74204,53645],{"class":53538},[139,74206,53648],{"class":145},[139,74208,53645],{"class":53538},[139,74210,53545],{"class":145},[139,74212,74213,74215,74217],{"class":141,"line":484},[139,74214,54380],{"class":145},[139,74216,2348],{"class":53538},[139,74218,53545],{"class":145},[139,74220,74221,74223],{"class":141,"line":989},[139,74222,8677],{"class":53538},[139,74224,17840],{"class":145},[139,74226,74227,74229,74231,74233],{"class":141,"line":994},[139,74228,56929],{"class":153},[139,74230,2265],{"class":145},[139,74232,2634],{"class":153},[139,74234,3591],{"class":145},[139,74236,74237,74239,74241,74243],{"class":141,"line":999},[139,74238,56940],{"class":153},[139,74240,2265],{"class":145},[139,74242,2634],{"class":153},[139,74244,3591],{"class":145},[139,74246,74247],{"class":141,"line":1006},[139,74248,4472],{"class":145},[139,74250,74251],{"class":141,"line":1027},[139,74252,843],{"emptyLinePlaceholder":842},[139,74254,74255,74257],{"class":141,"line":1040},[139,74256,59513],{"class":53538},[139,74258,17840],{"class":145},[139,74260,74261,74263,74265,74267],{"class":141,"line":2160},[139,74262,59520],{"class":153},[139,74264,2265],{"class":145},[139,74266,53829],{"class":153},[139,74268,3591],{"class":145},[139,74270,74271,74273,74275,74277,74279],{"class":141,"line":2188},[139,74272,64310],{"class":153},[139,74274,2265],{"class":145},[139,74276,3135],{"class":153},[139,74278,53729],{"class":149},[139,74280,3591],{"class":145},[139,74282,74283],{"class":141,"line":3944},[139,74284,4472],{"class":145},[139,74286,74287],{"class":141,"line":3963},[139,74288,843],{"emptyLinePlaceholder":842},[139,74290,74291,74294],{"class":141,"line":3968},[139,74292,74293],{"class":781},"    .info",[139,74295,17840],{"class":145},[139,74297,74298,74300,74302,74304,74306],{"class":141,"line":3982},[139,74299,57005],{"class":153},[139,74301,2265],{"class":145},[139,74303,53726],{"class":153},[139,74305,53729],{"class":149},[139,74307,3591],{"class":145},[139,74309,74310,74312,74314,74316,74318,74320],{"class":141,"line":3987},[139,74311,56940],{"class":153},[139,74313,2265],{"class":145},[139,74315,536],{"class":153},[139,74317,53729],{"class":149},[139,74319,53793],{"class":153},[139,74321,3591],{"class":145},[139,74323,74324,74326,74328,74330],{"class":141,"line":4014},[139,74325,59520],{"class":153},[139,74327,2265],{"class":145},[139,74329,53829],{"class":153},[139,74331,3591],{"class":145},[139,74333,74334],{"class":141,"line":4019},[139,74335,4472],{"class":145},[139,74337,74338],{"class":141,"line":4036},[139,74339,843],{"emptyLinePlaceholder":842},[139,74341,74342,74345],{"class":141,"line":4041},[139,74343,74344],{"class":781},"    .uname",[139,74346,33715],{"class":145},[139,74348,74349,74352],{"class":141,"line":4046},[139,74350,74351],{"class":781},"    .age",[139,74353,33715],{"class":145},[139,74355,74356,74359],{"class":141,"line":4051},[139,74357,74358],{"class":781},"    .salary",[139,74360,17840],{"class":145},[139,74362,74363,74365,74367,74369,74371],{"class":141,"line":4065},[139,74364,57005],{"class":153},[139,74366,2265],{"class":145},[139,74368,1017],{"class":153},[139,74370,53729],{"class":149},[139,74372,3591],{"class":145},[139,74374,74375,74377,74379,74381,74383],{"class":141,"line":4070},[139,74376,57019],{"class":153},[139,74378,2265],{"class":145},[139,74380,3135],{"class":153},[139,74382,53729],{"class":149},[139,74384,3591],{"class":145},[139,74386,74387,74389,74391,74393],{"class":141,"line":4860},[139,74388,64013],{"class":153},[139,74390,2265],{"class":145},[139,74392,56971],{"class":153},[139,74394,3591],{"class":145},[139,74396,74397,74399,74401,74403,74405],{"class":141,"line":4874},[139,74398,63983],{"class":153},[139,74400,2265],{"class":145},[139,74402,3010],{"class":153},[139,74404,53729],{"class":149},[139,74406,3591],{"class":145},[139,74408,74409],{"class":141,"line":4882},[139,74410,4472],{"class":145},[139,74412,74413],{"class":141,"line":4887},[139,74414,843],{"emptyLinePlaceholder":842},[139,74416,74417,74420],{"class":141,"line":4893},[139,74418,74419],{"class":781},"    .gender",[139,74421,33715],{"class":145},[139,74423,74424,74427],{"class":141,"line":4899},[139,74425,74426],{"class":781},"    .city",[139,74428,17840],{"class":145},[139,74430,74431,74433,74435,74437,74439],{"class":141,"line":4904},[139,74432,57005],{"class":153},[139,74434,2265],{"class":145},[139,74436,1017],{"class":153},[139,74438,53729],{"class":149},[139,74440,3591],{"class":145},[139,74442,74443,74445,74447,74449,74451],{"class":141,"line":10222},[139,74444,57019],{"class":153},[139,74446,2265],{"class":145},[139,74448,3260],{"class":153},[139,74450,53729],{"class":149},[139,74452,3591],{"class":145},[139,74454,74455,74457,74459,74461],{"class":141,"line":10246},[139,74456,64013],{"class":153},[139,74458,2265],{"class":145},[139,74460,56971],{"class":153},[139,74462,3591],{"class":145},[139,74464,74465,74467,74469,74471,74473],{"class":141,"line":10251},[139,74466,63983],{"class":153},[139,74468,2265],{"class":145},[139,74470,3010],{"class":153},[139,74472,53729],{"class":149},[139,74474,3591],{"class":145},[139,74476,74477,74479,74481,74483,74485,74487,74490,74492,74494,74496,74499,74501,74503],{"class":141,"line":10257},[139,74478,64210],{"class":153},[139,74480,2265],{"class":145},[139,74482,410],{"class":153},[139,74484,53729],{"class":149},[139,74486,53758],{"class":153},[139,74488,74489],{"class":153}," rgb",[139,74491,157],{"class":145},[139,74493,1022],{"class":153},[139,74495,413],{"class":145},[139,74497,74498],{"class":153},"197",[139,74500,413],{"class":145},[139,74502,74498],{"class":153},[139,74504,5002],{"class":145},[139,74506,74507],{"class":141,"line":10284},[139,74508,4472],{"class":145},[139,74510,74511],{"class":141,"line":10289},[139,74512,843],{"emptyLinePlaceholder":842},[139,74514,74515,74518],{"class":141,"line":10295},[139,74516,74517],{"class":53538},"    button",[139,74519,17840],{"class":145},[139,74521,74522,74524,74526,74528,74530],{"class":141,"line":10307},[139,74523,57019],{"class":153},[139,74525,2265],{"class":145},[139,74527,3260],{"class":153},[139,74529,53729],{"class":149},[139,74531,3591],{"class":145},[139,74533,74534,74536,74538,74540,74542],{"class":141,"line":10319},[139,74535,57005],{"class":153},[139,74537,2265],{"class":145},[139,74539,2920],{"class":153},[139,74541,53729],{"class":149},[139,74543,3591],{"class":145},[139,74545,74546,74548,74550,74553,74555,74557,74559,74562,74564,74566],{"class":141,"line":10331},[139,74547,57118],{"class":153},[139,74549,2265],{"class":145},[139,74551,74552],{"class":153},"rgb",[139,74554,157],{"class":145},[139,74556,3400],{"class":153},[139,74558,413],{"class":145},[139,74560,74561],{"class":153},"187",[139,74563,413],{"class":145},[139,74565,2739],{"class":153},[139,74567,5002],{"class":145},[139,74569,74570,74572,74574,74576],{"class":141,"line":11990},[139,74571,59650],{"class":153},[139,74573,2265],{"class":145},[139,74575,63075],{"class":153},[139,74577,3591],{"class":145},[139,74579,74580,74582,74584,74586],{"class":141,"line":12015},[139,74581,64210],{"class":153},[139,74583,2265],{"class":145},[139,74585,2634],{"class":153},[139,74587,3591],{"class":145},[139,74589,74590],{"class":141,"line":12038},[139,74591,4472],{"class":145},[139,74593,74594],{"class":141,"line":12062},[139,74595,843],{"emptyLinePlaceholder":842},[139,74597,74598,74600,74602],{"class":141,"line":12067},[139,74599,74517],{"class":53538},[139,74601,53925],{"class":53538},[139,74603,17840],{"class":145},[139,74605,74606,74608,74610,74613],{"class":141,"line":12072},[139,74607,57243],{"class":153},[139,74609,2265],{"class":145},[139,74611,74612],{"class":153},"inline-block",[139,74614,3591],{"class":145},[139,74616,74617,74619,74621,74623,74625],{"class":141,"line":12077},[139,74618,57005],{"class":153},[139,74620,2265],{"class":145},[139,74622,536],{"class":153},[139,74624,53729],{"class":149},[139,74626,3591],{"class":145},[139,74628,74629,74631,74633,74635,74637],{"class":141,"line":12086},[139,74630,57019],{"class":153},[139,74632,2265],{"class":145},[139,74634,536],{"class":153},[139,74636,53729],{"class":149},[139,74638,3591],{"class":145},[139,74640,74641,74643,74645,74647,74649],{"class":141,"line":12091},[139,74642,59593],{"class":153},[139,74644,2265],{"class":145},[139,74646,2909],{"class":153},[139,74648,53729],{"class":149},[139,74650,3591],{"class":145},[139,74652,74653,74655,74657,74659,74661,74663,74666],{"class":141,"line":12097},[139,74654,64210],{"class":153},[139,74656,2265],{"class":145},[139,74658,410],{"class":153},[139,74660,53729],{"class":149},[139,74662,53758],{"class":153},[139,74664,74665],{"class":153}," #fff",[139,74667,3591],{"class":145},[139,74669,74670,74672,74674,74676,74678],{"class":141,"line":12118},[139,74671,57368],{"class":153},[139,74673,2265],{"class":145},[139,74675,1481],{"class":153},[139,74677,53729],{"class":149},[139,74679,3591],{"class":145},[139,74681,74682,74684,74686,74688,74690],{"class":141,"line":12124},[139,74683,63983],{"class":153},[139,74685,2265],{"class":145},[139,74687,410],{"class":153},[139,74689,53729],{"class":149},[139,74691,3591],{"class":145},[139,74693,74694],{"class":141,"line":12138},[139,74695,4472],{"class":145},[139,74697,74698],{"class":141,"line":12144},[139,74699,843],{"emptyLinePlaceholder":842},[139,74701,74702,74705],{"class":141,"line":12171},[139,74703,74704],{"class":781},"    .total",[139,74706,17840],{"class":145},[139,74708,74709,74711,74713,74715,74717],{"class":141,"line":12180},[139,74710,57005],{"class":153},[139,74712,2265],{"class":145},[139,74714,63862],{"class":153},[139,74716,53729],{"class":149},[139,74718,3591],{"class":145},[139,74720,74721,74723,74725,74727,74729],{"class":141,"line":12186},[139,74722,57019],{"class":153},[139,74724,2265],{"class":145},[139,74726,2839],{"class":153},[139,74728,53729],{"class":149},[139,74730,3591],{"class":145},[139,74732,74733,74735,74737,74739,74741],{"class":141,"line":12194},[139,74734,59593],{"class":153},[139,74736,2265],{"class":145},[139,74738,2839],{"class":153},[139,74740,53729],{"class":149},[139,74742,3591],{"class":145},[139,74744,74745,74747,74749,74752],{"class":141,"line":12199},[139,74746,59520],{"class":153},[139,74748,2265],{"class":145},[139,74750,74751],{"class":153},"right",[139,74753,3591],{"class":145},[139,74755,74756,74758,74760,74762,74764,74766,74768,74770],{"class":141,"line":18871},[139,74757,56940],{"class":153},[139,74759,2265],{"class":145},[139,74761,2839],{"class":153},[139,74763,53729],{"class":149},[139,74765,53793],{"class":153},[139,74767,4323],{"class":153},[139,74769,53729],{"class":149},[139,74771,3591],{"class":145},[139,74773,74774,74777,74779,74781,74783],{"class":141,"line":18877},[139,74775,74776],{"class":153},"      padding-right",[139,74778,2265],{"class":145},[139,74780,536],{"class":153},[139,74782,53729],{"class":149},[139,74784,3591],{"class":145},[139,74786,74787,74789,74791,74793,74795],{"class":141,"line":18900},[139,74788,57156],{"class":153},[139,74790,2265],{"class":145},[139,74792,2959],{"class":153},[139,74794,53729],{"class":149},[139,74796,3591],{"class":145},[139,74798,74799,74801,74803,74805,74807,74810,74812,74815,74817,74819],{"class":141,"line":18906},[139,74800,57118],{"class":153},[139,74802,2265],{"class":145},[139,74804,74552],{"class":153},[139,74806,157],{"class":145},[139,74808,74809],{"class":153},"237",[139,74811,413],{"class":145},[139,74813,74814],{"class":153},"235",[139,74816,413],{"class":145},[139,74818,74814],{"class":153},[139,74820,5002],{"class":145},[139,74822,74823,74826,74828,74830],{"class":141,"line":18929},[139,74824,74825],{"class":153},"      box-sizing",[139,74827,2265],{"class":145},[139,74829,62738],{"class":153},[139,74831,3591],{"class":145},[139,74833,74834],{"class":141,"line":18943},[139,74835,4472],{"class":145},[139,74837,74838],{"class":141,"line":18963},[139,74839,843],{"emptyLinePlaceholder":842},[139,74841,74842,74844,74846],{"class":141,"line":18969},[139,74843,74704],{"class":781},[139,74845,53925],{"class":53538},[139,74847,17840],{"class":145},[139,74849,74850,74852,74854,74856],{"class":141,"line":18980},[139,74851,59650],{"class":153},[139,74853,2265],{"class":145},[139,74855,59655],{"class":153},[139,74857,3591],{"class":145},[139,74859,74860],{"class":141,"line":19003},[139,74861,4472],{"class":145},[139,74863,74864],{"class":141,"line":19025},[139,74865,843],{"emptyLinePlaceholder":842},[139,74867,74868,74870],{"class":141,"line":19030},[139,74869,67254],{"class":53538},[139,74871,17840],{"class":145},[139,74873,74874,74876,74878,74880,74882],{"class":141,"line":19036},[139,74875,57005],{"class":153},[139,74877,2265],{"class":145},[139,74879,63862],{"class":153},[139,74881,53729],{"class":149},[139,74883,3591],{"class":145},[139,74885,74886,74888,74890,74893],{"class":141,"line":19050},[139,74887,56940],{"class":153},[139,74889,2265],{"class":145},[139,74891,74892],{"class":153},"auto",[139,74894,3591],{"class":145},[139,74896,74897,74899,74901,74903],{"class":141,"line":19063},[139,74898,67261],{"class":153},[139,74900,2265],{"class":145},[139,74902,67266],{"class":153},[139,74904,3591],{"class":145},[139,74906,74907],{"class":141,"line":19068},[139,74908,4472],{"class":145},[139,74910,74911],{"class":141,"line":19082},[139,74912,843],{"emptyLinePlaceholder":842},[139,74914,74915,74917],{"class":141,"line":19087},[139,74916,67346],{"class":53538},[139,74918,17840],{"class":145},[139,74920,74921,74923,74925,74927,74929,74931,74933,74935,74937,74939],{"class":141,"line":19093},[139,74922,57118],{"class":153},[139,74924,2265],{"class":145},[139,74926,74552],{"class":153},[139,74928,157],{"class":145},[139,74930,74809],{"class":153},[139,74932,413],{"class":145},[139,74934,74814],{"class":153},[139,74936,413],{"class":145},[139,74938,74814],{"class":153},[139,74940,5002],{"class":145},[139,74942,74943],{"class":141,"line":19098},[139,74944,4472],{"class":145},[139,74946,74947],{"class":141,"line":19112},[139,74948,843],{"emptyLinePlaceholder":842},[139,74950,74951,74953],{"class":141,"line":19117},[139,74952,67346],{"class":53538},[139,74954,33715],{"class":145},[139,74956,74957,74959],{"class":141,"line":19122},[139,74958,67412],{"class":53538},[139,74960,17840],{"class":145},[139,74962,74963,74965,74967,74969,74971],{"class":141,"line":19136},[139,74964,57019],{"class":153},[139,74966,2265],{"class":145},[139,74968,2714],{"class":153},[139,74970,53729],{"class":149},[139,74972,3591],{"class":145},[139,74974,74975,74977,74979,74981],{"class":141,"line":19148},[139,74976,59520],{"class":153},[139,74978,2265],{"class":145},[139,74980,26003],{"class":153},[139,74982,3591],{"class":145},[139,74984,74985,74987,74989,74991,74993],{"class":141,"line":19153},[139,74986,57156],{"class":153},[139,74988,2265],{"class":145},[139,74990,2984],{"class":153},[139,74992,53729],{"class":149},[139,74994,3591],{"class":145},[139,74996,74997,74999,75001,75003,75005,75007,75009,75011,75014,75016,75019,75021,75023],{"class":141,"line":19166},[139,74998,64210],{"class":153},[139,75000,2265],{"class":145},[139,75002,410],{"class":153},[139,75004,53729],{"class":149},[139,75006,53758],{"class":153},[139,75008,74489],{"class":153},[139,75010,157],{"class":145},[139,75012,75013],{"class":153},"228",[139,75015,413],{"class":145},[139,75017,75018],{"class":153},"225",[139,75020,413],{"class":145},[139,75022,75018],{"class":153},[139,75024,5002],{"class":145},[139,75026,75027,75030,75032,75034,75036],{"class":141,"line":19171},[139,75028,75029],{"class":153},"      padding-left",[139,75031,2265],{"class":145},[139,75033,1481],{"class":153},[139,75035,53729],{"class":149},[139,75037,3591],{"class":145},[139,75039,75040,75042,75044,75046,75049,75051,75053],{"class":141,"line":19176},[139,75041,64093],{"class":153},[139,75043,2265],{"class":145},[139,75045,30381],{"class":153},[139,75047,75048],{"class":153}," linear",[139,75050,64100],{"class":153},[139,75052,3130],{"class":149},[139,75054,3591],{"class":145},[139,75056,75057],{"class":141,"line":19181},[139,75058,4472],{"class":145},[139,75060,75061],{"class":141,"line":19194},[139,75062,843],{"emptyLinePlaceholder":842},[139,75064,75065,75068,75070,75072],{"class":141,"line":19199},[139,75066,75067],{"class":53538},"    tbody",[139,75069,72374],{"class":53538},[139,75071,63173],{"class":781},[139,75073,17840],{"class":145},[139,75075,75076,75078,75080,75082,75084,75086,75088,75090,75092,75094],{"class":141,"line":34880},[139,75077,57118],{"class":153},[139,75079,2265],{"class":145},[139,75081,74552],{"class":153},[139,75083,157],{"class":145},[139,75085,74809],{"class":153},[139,75087,413],{"class":145},[139,75089,74814],{"class":153},[139,75091,413],{"class":145},[139,75093,74814],{"class":153},[139,75095,5002],{"class":145},[139,75097,75098,75100,75102,75104],{"class":141,"line":34886},[139,75099,64258],{"class":153},[139,75101,2265],{"class":145},[139,75103,64263],{"class":153},[139,75105,3591],{"class":145},[139,75107,75108],{"class":141,"line":34892},[139,75109,4472],{"class":145},[139,75111,75112],{"class":141,"line":34898},[139,75113,843],{"emptyLinePlaceholder":842},[139,75115,75116,75118,75120,75123,75125],{"class":141,"line":34904},[139,75117,75067],{"class":53538},[139,75119,72374],{"class":53538},[139,75121,75122],{"class":53538}," td",[139,75124,3696],{"class":53538},[139,75126,17840],{"class":145},[139,75128,75129,75131,75133,75135],{"class":141,"line":34915},[139,75130,57243],{"class":153},[139,75132,2265],{"class":145},[139,75134,63102],{"class":153},[139,75136,3591],{"class":145},[139,75138,75139,75141,75143,75145,75147],{"class":141,"line":34921},[139,75140,57005],{"class":153},[139,75142,2265],{"class":145},[139,75144,3341],{"class":153},[139,75146,53729],{"class":149},[139,75148,3591],{"class":145},[139,75150,75151,75153,75155,75157,75159],{"class":141,"line":34941},[139,75152,57019],{"class":153},[139,75154,2265],{"class":145},[139,75156,3260],{"class":153},[139,75158,53729],{"class":149},[139,75160,3591],{"class":145},[139,75162,75163,75165,75167,75169,75171],{"class":141,"line":34947},[139,75164,59593],{"class":153},[139,75166,2265],{"class":145},[139,75168,3260],{"class":153},[139,75170,53729],{"class":149},[139,75172,3591],{"class":145},[139,75174,75175,75177,75179,75181,75183],{"class":141,"line":34958},[139,75176,64310],{"class":153},[139,75178,2265],{"class":145},[139,75180,416],{"class":153},[139,75182,53729],{"class":149},[139,75184,3591],{"class":145},[139,75186,75187,75189,75191,75193],{"class":141,"line":34964},[139,75188,59650],{"class":153},[139,75190,2265],{"class":145},[139,75192,63075],{"class":153},[139,75194,3591],{"class":145},[139,75196,75197,75199,75201,75203],{"class":141,"line":34970},[139,75198,59520],{"class":153},[139,75200,2265],{"class":145},[139,75202,53829],{"class":153},[139,75204,3591],{"class":145},[139,75206,75207,75209,75211,75213],{"class":141,"line":34976},[139,75208,66202],{"class":153},[139,75210,2265],{"class":145},[139,75212,56971],{"class":153},[139,75214,3591],{"class":145},[139,75216,75217,75219,75221,75224],{"class":141,"line":34982},[139,75218,57118],{"class":153},[139,75220,2265],{"class":145},[139,75222,75223],{"class":153},"orange",[139,75225,3591],{"class":145},[139,75227,75228,75230,75232,75235,75237],{"class":141,"line":34988},[139,75229,57368],{"class":153},[139,75231,2265],{"class":145},[139,75233,75234],{"class":153},"12.5",[139,75236,53729],{"class":149},[139,75238,3591],{"class":145},[139,75240,75241],{"class":141,"line":34994},[139,75242,4472],{"class":145},[139,75244,75245,75247,75249],{"class":141,"line":35000},[139,75246,54652],{"class":145},[139,75248,2348],{"class":53538},[139,75250,53545],{"class":145},[139,75252,75253,75255,75257],{"class":141,"line":35020},[139,75254,54022],{"class":145},[139,75256,53572],{"class":53538},[139,75258,53545],{"class":145},[139,75260,75261],{"class":141,"line":35026},[139,75262,843],{"emptyLinePlaceholder":842},[139,75264,75265,75267,75269],{"class":141,"line":35042},[139,75266,796],{"class":145},[139,75268,54037],{"class":53538},[139,75270,53545],{"class":145},[139,75272,75273,75275,75277,75280,75282],{"class":141,"line":35048},[139,75274,54380],{"class":145},[139,75276,14],{"class":53538},[139,75278,75279],{"class":145},">学生就业统计表\u003C\u002F",[139,75281,14],{"class":53538},[139,75283,53545],{"class":145},[139,75285,75286,75288,75290,75292,75294,75296,75298,75300,75302],{"class":141,"line":35062},[139,75287,54380],{"class":145},[139,75289,68856],{"class":53538},[139,75291,55721],{"class":781},[139,75293,150],{"class":145},[139,75295,64897],{"class":160},[139,75297,71300],{"class":781},[139,75299,150],{"class":145},[139,75301,34025],{"class":160},[139,75303,53545],{"class":145},[139,75305,75306,75308,75310,75312,75314,75316,75318,75320,75322,75324,75326,75329,75331,75333,75335],{"class":141,"line":35068},[139,75307,53579],{"class":145},[139,75309,199],{"class":53538},[139,75311,56058],{"class":781},[139,75313,150],{"class":145},[139,75315,64931],{"class":160},[139,75317,17189],{"class":781},[139,75319,150],{"class":145},[139,75321,71326],{"class":160},[139,75323,63253],{"class":781},[139,75325,150],{"class":145},[139,75327,75328],{"class":160},"\"姓名\"",[139,75330,55721],{"class":781},[139,75332,150],{"class":145},[139,75334,71326],{"class":160},[139,75336,53545],{"class":145},[139,75338,75339,75341,75343,75345,75347,75349,75351,75353,75355,75357,75359,75362,75364,75366,75368],{"class":141,"line":35083},[139,75340,53579],{"class":145},[139,75342,199],{"class":53538},[139,75344,56058],{"class":781},[139,75346,150],{"class":145},[139,75348,64931],{"class":160},[139,75350,17189],{"class":781},[139,75352,150],{"class":145},[139,75354,71354],{"class":160},[139,75356,63253],{"class":781},[139,75358,150],{"class":145},[139,75360,75361],{"class":160},"\"年龄\"",[139,75363,55721],{"class":781},[139,75365,150],{"class":145},[139,75367,71354],{"class":160},[139,75369,53545],{"class":145},[139,75371,75372,75374,75376,75378,75380,75382,75384,75386,75388,75390,75392,75395,75397,75399,75401],{"class":141,"line":35089},[139,75373,53579],{"class":145},[139,75375,199],{"class":53538},[139,75377,56058],{"class":781},[139,75379,150],{"class":145},[139,75381,64931],{"class":160},[139,75383,17189],{"class":781},[139,75385,150],{"class":145},[139,75387,71456],{"class":160},[139,75389,63253],{"class":781},[139,75391,150],{"class":145},[139,75393,75394],{"class":160},"\"薪资\"",[139,75396,55721],{"class":781},[139,75398,150],{"class":145},[139,75400,71456],{"class":160},[139,75402,53545],{"class":145},[139,75404,75405,75407,75409,75411,75413,75415,75417,75419,75421,75423,75425,75427],{"class":141,"line":35098},[139,75406,53579],{"class":145},[139,75408,71374],{"class":53538},[139,75410,17189],{"class":781},[139,75412,150],{"class":145},[139,75414,71381],{"class":160},[139,75416,17228],{"class":781},[139,75418,150],{"class":145},[139,75420,9926],{"class":160},[139,75422,55721],{"class":781},[139,75424,150],{"class":145},[139,75426,71381],{"class":160},[139,75428,53545],{"class":145},[139,75430,75431,75433,75435,75437,75439,75441,75443,75445],{"class":141,"line":35104},[139,75432,57468],{"class":145},[139,75434,71396],{"class":53538},[139,75436,68882],{"class":781},[139,75438,150],{"class":145},[139,75440,12235],{"class":160},[139,75442,71405],{"class":145},[139,75444,71396],{"class":53538},[139,75446,53545],{"class":145},[139,75448,75449,75451,75453,75455,75457,75459,75461,75463],{"class":141,"line":35113},[139,75450,57468],{"class":145},[139,75452,71396],{"class":53538},[139,75454,68882],{"class":781},[139,75456,150],{"class":145},[139,75458,12304],{"class":160},[139,75460,71424],{"class":145},[139,75462,71396],{"class":53538},[139,75464,53545],{"class":145},[139,75466,75467,75469,75471],{"class":141,"line":35119},[139,75468,54013],{"class":145},[139,75470,71374],{"class":53538},[139,75472,53545],{"class":145},[139,75474,75475,75477,75479,75481,75483,75485,75487,75489,75491,75493,75495,75497],{"class":141,"line":35125},[139,75476,53579],{"class":145},[139,75478,71374],{"class":53538},[139,75480,17189],{"class":781},[139,75482,150],{"class":145},[139,75484,71478],{"class":160},[139,75486,17228],{"class":781},[139,75488,150],{"class":145},[139,75490,9926],{"class":160},[139,75492,55721],{"class":781},[139,75494,150],{"class":145},[139,75496,71478],{"class":160},[139,75498,53545],{"class":145},[139,75500,75501,75503,75505,75507,75509,75511,75513,75515],{"class":141,"line":35134},[139,75502,57468],{"class":145},[139,75504,71396],{"class":53538},[139,75506,68882],{"class":781},[139,75508,150],{"class":145},[139,75510,71499],{"class":160},[139,75512,71502],{"class":145},[139,75514,71396],{"class":53538},[139,75516,53545],{"class":145},[139,75518,75519,75521,75523,75525,75527,75529,75531,75533],{"class":141,"line":35140},[139,75520,57468],{"class":145},[139,75522,71396],{"class":53538},[139,75524,68882],{"class":781},[139,75526,150],{"class":145},[139,75528,71519],{"class":160},[139,75530,71522],{"class":145},[139,75532,71396],{"class":53538},[139,75534,53545],{"class":145},[139,75536,75537,75539,75541,75543,75545,75547,75549,75551],{"class":141,"line":35151},[139,75538,57468],{"class":145},[139,75540,71396],{"class":53538},[139,75542,68882],{"class":781},[139,75544,150],{"class":145},[139,75546,71539],{"class":160},[139,75548,71542],{"class":145},[139,75550,71396],{"class":53538},[139,75552,53545],{"class":145},[139,75554,75555,75557,75559,75561,75563,75565,75567,75569],{"class":141,"line":35157},[139,75556,57468],{"class":145},[139,75558,71396],{"class":53538},[139,75560,68882],{"class":781},[139,75562,150],{"class":145},[139,75564,71559],{"class":160},[139,75566,71562],{"class":145},[139,75568,71396],{"class":53538},[139,75570,53545],{"class":145},[139,75572,75573,75575,75577,75579,75581,75583,75585,75587],{"class":141,"line":35176},[139,75574,57468],{"class":145},[139,75576,71396],{"class":53538},[139,75578,68882],{"class":781},[139,75580,150],{"class":145},[139,75582,71579],{"class":160},[139,75584,71582],{"class":145},[139,75586,71396],{"class":53538},[139,75588,53545],{"class":145},[139,75590,75591,75593,75595],{"class":141,"line":35182},[139,75592,54013],{"class":145},[139,75594,71374],{"class":53538},[139,75596,53545],{"class":145},[139,75598,75599,75601,75603],{"class":141,"line":35193},[139,75600,53579],{"class":145},[139,75602,56121],{"class":53538},[139,75604,53545],{"class":145},[139,75606,75607,75609,75611,75614,75616,75619,75621],{"class":141,"line":35199},[139,75608,57468],{"class":145},[139,75610,139],{"class":53538},[139,75612,75613],{"class":145},">+\u003C\u002F",[139,75615,139],{"class":53538},[139,75617,75618],{"class":145},">添加\u003C\u002F",[139,75620,56121],{"class":53538},[139,75622,53545],{"class":145},[139,75624,75625,75627,75629],{"class":141,"line":35219},[139,75626,54652],{"class":145},[139,75628,68856],{"class":53538},[139,75630,53545],{"class":145},[139,75632,75633,75635,75637,75639,75641,75643,75646,75648,75651,75653,75656,75658],{"class":141,"line":35235},[139,75634,54380],{"class":145},[139,75636,53848],{"class":53538},[139,75638,55721],{"class":781},[139,75640,150],{"class":145},[139,75642,64813],{"class":160},[139,75644,75645],{"class":145},">共有数据 \u003C",[139,75647,139],{"class":53538},[139,75649,75650],{"class":145},">0\u003C\u002F",[139,75652,139],{"class":53538},[139,75654,75655],{"class":145},"> 条\u003C\u002F",[139,75657,53848],{"class":53538},[139,75659,53545],{"class":145},[139,75661,75662,75664,75666],{"class":141,"line":35241},[139,75663,54380],{"class":145},[139,75665,26],{"class":53538},[139,75667,53545],{"class":145},[139,75669,75670,75672,75674],{"class":141,"line":35255},[139,75671,53579],{"class":145},[139,75673,29],{"class":53538},[139,75675,53545],{"class":145},[139,75677,75678,75680,75682],{"class":141,"line":35261},[139,75679,57468],{"class":145},[139,75681,32],{"class":53538},[139,75683,53545],{"class":145},[139,75685,75686,75688,75690,75693,75695],{"class":141,"line":35267},[139,75687,57536],{"class":145},[139,75689,35],{"class":53538},[139,75691,75692],{"class":145},">ID\u003C\u002F",[139,75694,35],{"class":53538},[139,75696,53545],{"class":145},[139,75698,75699,75701,75703,75705,75707],{"class":141,"line":35278},[139,75700,57536],{"class":145},[139,75702,35],{"class":53538},[139,75704,71685],{"class":145},[139,75706,35],{"class":53538},[139,75708,53545],{"class":145},[139,75710,75711,75713,75715,75717,75719],{"class":141,"line":35284},[139,75712,57536],{"class":145},[139,75714,35],{"class":53538},[139,75716,71698],{"class":145},[139,75718,35],{"class":53538},[139,75720,53545],{"class":145},[139,75722,75723,75725,75727,75729,75731],{"class":141,"line":35290},[139,75724,57536],{"class":145},[139,75726,35],{"class":53538},[139,75728,71711],{"class":145},[139,75730,35],{"class":53538},[139,75732,53545],{"class":145},[139,75734,75735,75737,75739,75741,75743],{"class":141,"line":35300},[139,75736,57536],{"class":145},[139,75738,35],{"class":53538},[139,75740,71724],{"class":145},[139,75742,35],{"class":53538},[139,75744,53545],{"class":145},[139,75746,75747,75749,75751,75753,75755],{"class":141,"line":35306},[139,75748,57536],{"class":145},[139,75750,35],{"class":53538},[139,75752,71737],{"class":145},[139,75754,35],{"class":53538},[139,75756,53545],{"class":145},[139,75758,75759,75761,75763,75766,75768],{"class":141,"line":35317},[139,75760,57536],{"class":145},[139,75762,35],{"class":53538},[139,75764,75765],{"class":145},">录入时间\u003C\u002F",[139,75767,35],{"class":53538},[139,75769,53545],{"class":145},[139,75771,75772,75774,75776,75778,75780],{"class":141,"line":35323},[139,75773,57536],{"class":145},[139,75775,35],{"class":53538},[139,75777,71750],{"class":145},[139,75779,35],{"class":53538},[139,75781,53545],{"class":145},[139,75783,75784,75786,75788],{"class":141,"line":35333},[139,75785,57641],{"class":145},[139,75787,32],{"class":53538},[139,75789,53545],{"class":145},[139,75791,75792,75794,75796],{"class":141,"line":35338},[139,75793,54013],{"class":145},[139,75795,29],{"class":53538},[139,75797,53545],{"class":145},[139,75799,75800,75802,75804],{"class":141,"line":35344},[139,75801,53579],{"class":145},[139,75803,42],{"class":53538},[139,75805,53545],{"class":145},[139,75807,75808],{"class":141,"line":35392},[139,75809,75810],{"class":2512},"      \u003C!-- \u003Ctr>\n",[139,75812,75813],{"class":141,"line":35439},[139,75814,75815],{"class":2512},"        \u003Ctd>1\u003C\u002Ftd>\n",[139,75817,75818],{"class":141,"line":35444},[139,75819,75815],{"class":2512},[139,75821,75822],{"class":141,"line":35450},[139,75823,75815],{"class":2512},[139,75825,75826],{"class":141,"line":35469},[139,75827,75815],{"class":2512},[139,75829,75830],{"class":141,"line":35475},[139,75831,75815],{"class":2512},[139,75833,75834],{"class":141,"line":35494},[139,75835,75815],{"class":2512},[139,75837,75838],{"class":141,"line":35500},[139,75839,75815],{"class":2512},[139,75841,75842],{"class":141,"line":35506},[139,75843,75844],{"class":2512},"        \u003Ctd>\n",[139,75846,75847],{"class":141,"line":35516},[139,75848,75849],{"class":2512},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[139,75851,75852],{"class":141,"line":35521},[139,75853,75854],{"class":2512},"        \u003C\u002Ftd>\n",[139,75856,75857],{"class":141,"line":35527},[139,75858,75859],{"class":2512},"      \u003C\u002Ftr> -->\n",[139,75861,75862,75864,75866],{"class":141,"line":35543},[139,75863,54013],{"class":145},[139,75865,42],{"class":53538},[139,75867,53545],{"class":145},[139,75869,75870,75872,75874],{"class":141,"line":35588},[139,75871,54652],{"class":145},[139,75873,26],{"class":53538},[139,75875,53545],{"class":145},[139,75877,75878,75880,75882],{"class":141,"line":35594},[139,75879,54380],{"class":145},[139,75881,54050],{"class":53538},[139,75883,53545],{"class":145},[139,75885,75886],{"class":141,"line":35600},[139,75887,75888],{"class":2512},"    \u002F\u002F const initData = [{\n",[139,75890,75891],{"class":141,"line":35606},[139,75892,75893],{"class":2512},"    \u002F\u002F   unameId: 1,\n",[139,75895,75896],{"class":141,"line":35617},[139,75897,75898],{"class":2512},"    \u002F\u002F   uname: '华晨宇',\n",[139,75900,75901],{"class":141,"line":35623},[139,75902,75903],{"class":2512},"    \u002F\u002F   age: 22,\n",[139,75905,75906],{"class":141,"line":35629},[139,75907,75908],{"class":2512},"    \u002F\u002F   salary: 12000,\n",[139,75910,75911],{"class":141,"line":35635},[139,75912,75913],{"class":2512},"    \u002F\u002F   gender: '男',\n",[139,75915,75916],{"class":141,"line":35653},[139,75917,75918],{"class":2512},"    \u002F\u002F   city: '北京',\n",[139,75920,75921],{"class":141,"line":35667},[139,75922,75923],{"class":2512},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[139,75925,75926],{"class":141,"line":35676},[139,75927,75928],{"class":2512},"    \u002F\u002F }]\n",[139,75930,75931],{"class":141,"line":35685},[139,75932,75933],{"class":2512},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[139,75935,75936],{"class":141,"line":35694},[139,75937,75938],{"class":2512},"    \u002F\u002F 1.渲染业务\n",[139,75940,75941],{"class":141,"line":35703},[139,75942,75943],{"class":2512},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[139,75945,75946],{"class":141,"line":35709},[139,75947,75948],{"class":2512},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[139,75950,75951],{"class":141,"line":35715},[139,75952,75953],{"class":2512},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[139,75955,75956],{"class":141,"line":35723},[139,75957,843],{"emptyLinePlaceholder":842},[139,75959,75960],{"class":141,"line":35728},[139,75961,75962],{"class":2512},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[139,75964,75965],{"class":141,"line":35734},[139,75966,75967],{"class":2512},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[139,75969,75970,75972,75974,75976],{"class":141,"line":35745},[139,75971,13494],{"class":149},[139,75973,59929],{"class":153},[139,75975,15836],{"class":149},[139,75977,2088],{"class":145},[139,75979,75980,75983,75985],{"class":141,"line":35751},[139,75981,75982],{"class":145},"    console.",[139,75984,60480],{"class":781},[139,75986,54647],{"class":145},[139,75988,75989],{"class":141,"line":35771},[139,75990,843],{"emptyLinePlaceholder":842},[139,75992,75993],{"class":141,"line":35777},[139,75994,75995],{"class":2512},"    \u002F\u002F 时间函数\n",[139,75997,75998,76000,76003],{"class":141,"line":35783},[139,75999,72314],{"class":149},[139,76001,76002],{"class":781}," getTime",[139,76004,13127],{"class":145},[139,76006,76007,76009,76012,76014,76016,76019],{"class":141,"line":35789},[139,76008,60461],{"class":149},[139,76010,76011],{"class":153}," date",[139,76013,15836],{"class":149},[139,76015,13851],{"class":149},[139,76017,76018],{"class":781}," Date",[139,76020,4262],{"class":145},[139,76022,76023,76025,76027,76029,76032,76035,76037,76039,76041,76044,76047,76049,76051,76053,76055,76057,76059,76061],{"class":141,"line":35806},[139,76024,60461],{"class":149},[139,76026,18358],{"class":153},[139,76028,15836],{"class":149},[139,76030,76031],{"class":145}," date.",[139,76033,76034],{"class":781},"getHours",[139,76036,15322],{"class":145},[139,76038,796],{"class":149},[139,76040,4323],{"class":153},[139,76042,76043],{"class":149}," ?",[139,76045,76046],{"class":160}," '0'",[139,76048,47805],{"class":149},[139,76050,76031],{"class":145},[139,76052,76034],{"class":781},[139,76054,15322],{"class":145},[139,76056,3294],{"class":149},[139,76058,76031],{"class":145},[139,76060,76034],{"class":781},[139,76062,4262],{"class":145},[139,76064,76065,76067,76070,76072,76074,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76099,76101],{"class":141,"line":35812},[139,76066,60461],{"class":149},[139,76068,76069],{"class":153}," m",[139,76071,15836],{"class":149},[139,76073,76031],{"class":145},[139,76075,76076],{"class":781},"getMinutes",[139,76078,15322],{"class":145},[139,76080,796],{"class":149},[139,76082,4323],{"class":153},[139,76084,76043],{"class":149},[139,76086,76046],{"class":160},[139,76088,47805],{"class":149},[139,76090,76031],{"class":145},[139,76092,76076],{"class":781},[139,76094,15322],{"class":145},[139,76096,3294],{"class":149},[139,76098,76031],{"class":145},[139,76100,76076],{"class":781},[139,76102,4262],{"class":145},[139,76104,76105,76107,76109,76111,76113,76116,76118,76120,76122,76124,76126,76128,76130,76132,76134,76136,76138,76140],{"class":141,"line":35818},[139,76106,60461],{"class":149},[139,76108,10702],{"class":153},[139,76110,15836],{"class":149},[139,76112,76031],{"class":145},[139,76114,76115],{"class":781},"getSeconds",[139,76117,15322],{"class":145},[139,76119,796],{"class":149},[139,76121,4323],{"class":153},[139,76123,76043],{"class":149},[139,76125,76046],{"class":160},[139,76127,47805],{"class":149},[139,76129,76031],{"class":145},[139,76131,76115],{"class":781},[139,76133,15322],{"class":145},[139,76135,3294],{"class":149},[139,76137,76031],{"class":145},[139,76139,76115],{"class":781},[139,76141,4262],{"class":145},[139,76143,76144,76146,76149,76151,76153,76156,76158,76161,76163,76166,76168,76170,76173,76175,76177,76179,76181,76183,76185,76188,76190,76193,76195,76198,76200,76202,76204],{"class":141,"line":35824},[139,76145,60461],{"class":149},[139,76147,76148],{"class":153}," str",[139,76150,15836],{"class":149},[139,76152,65135],{"class":160},[139,76154,76155],{"class":145},"date",[139,76157,2993],{"class":160},[139,76159,76160],{"class":781},"getFullYear",[139,76162,4710],{"class":160},[139,76164,76165],{"class":160},"}\u002F${",[139,76167,76155],{"class":145},[139,76169,2993],{"class":160},[139,76171,76172],{"class":781},"getMonth",[139,76174,15322],{"class":160},[139,76176,1147],{"class":149},[139,76178,27381],{"class":153},[139,76180,76165],{"class":160},[139,76182,76155],{"class":145},[139,76184,2993],{"class":160},[139,76186,76187],{"class":781},"getDate",[139,76189,4710],{"class":160},[139,76191,76192],{"class":160},"} ${",[139,76194,2853],{"class":145},[139,76196,76197],{"class":160},"}:${",[139,76199,2979],{"class":145},[139,76201,76197],{"class":160},[139,76203,3130],{"class":145},[139,76205,76206],{"class":160},"}`\n",[139,76208,76209,76212],{"class":141,"line":35830},[139,76210,76211],{"class":149},"      return",[139,76213,76214],{"class":145}," str\n",[139,76216,76217],{"class":141,"line":35836},[139,76218,4472],{"class":145},[139,76220,76221],{"class":141,"line":35863},[139,76222,76223],{"class":2512},"    \u002F\u002F 渲染函数\n",[139,76225,76226,76228,76230,76232,76234,76236,76238,76240],{"class":141,"line":35887},[139,76227,13494],{"class":149},[139,76229,71977],{"class":153},[139,76231,15836],{"class":149},[139,76233,56630],{"class":145},[139,76235,56633],{"class":781},[139,76237,157],{"class":145},[139,76239,71988],{"class":160},[139,76241,164],{"class":145},[139,76243,76244,76246,76248],{"class":141,"line":35893},[139,76245,72314],{"class":149},[139,76247,72317],{"class":781},[139,76249,13127],{"class":145},[139,76251,76252],{"class":141,"line":35899},[139,76253,76254],{"class":2512},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[139,76256,76257],{"class":141,"line":35905},[139,76258,76259],{"class":2512},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[139,76261,76262,76264,76267,76269,76271,76274,76276,76278,76280,76283,76285,76288],{"class":141,"line":35916},[139,76263,60461],{"class":149},[139,76265,76266],{"class":153}," trArr",[139,76268,15836],{"class":149},[139,76270,54201],{"class":145},[139,76272,76273],{"class":781},"map",[139,76275,157],{"class":145},[139,76277,56683],{"class":149},[139,76279,549],{"class":145},[139,76281,76282],{"class":2111},"ele",[139,76284,413],{"class":145},[139,76286,76287],{"class":2111},"index",[139,76289,14714],{"class":145},[139,76291,76292,76294],{"class":141,"line":35927},[139,76293,2085],{"class":149},[139,76295,72398],{"class":160},[139,76297,76298],{"class":141,"line":35933},[139,76299,76300],{"class":160},"      \u003Ctr>\n",[139,76302,76303,76305,76307,76309,76312],{"class":141,"line":35950},[139,76304,72403],{"class":160},[139,76306,76282],{"class":145},[139,76308,2993],{"class":160},[139,76310,76311],{"class":145},"unameId",[139,76313,72418],{"class":160},[139,76315,76316,76318,76320,76322,76324],{"class":141,"line":35973},[139,76317,72403],{"class":160},[139,76319,76282],{"class":145},[139,76321,2993],{"class":160},[139,76323,72434],{"class":145},[139,76325,72418],{"class":160},[139,76327,76328,76330,76332,76334,76336],{"class":141,"line":35996},[139,76329,72403],{"class":160},[139,76331,76282],{"class":145},[139,76333,2993],{"class":160},[139,76335,831],{"class":145},[139,76337,72418],{"class":160},[139,76339,76340,76342,76344,76346,76348],{"class":141,"line":36002},[139,76341,72403],{"class":160},[139,76343,76282],{"class":145},[139,76345,2993],{"class":160},[139,76347,72467],{"class":145},[139,76349,72418],{"class":160},[139,76351,76352,76354,76356,76358,76360],{"class":141,"line":36007},[139,76353,72403],{"class":160},[139,76355,76282],{"class":145},[139,76357,2993],{"class":160},[139,76359,72484],{"class":145},[139,76361,72418],{"class":160},[139,76363,76364,76366,76368,76370,76372],{"class":141,"line":36016},[139,76365,72403],{"class":160},[139,76367,76282],{"class":145},[139,76369,2993],{"class":160},[139,76371,72501],{"class":145},[139,76373,72418],{"class":160},[139,76375,76376,76378,76380,76382,76384],{"class":141,"line":36026},[139,76377,72403],{"class":160},[139,76379,76282],{"class":145},[139,76381,2993],{"class":160},[139,76383,4671],{"class":145},[139,76385,72418],{"class":160},[139,76387,76388],{"class":141,"line":36032},[139,76389,75844],{"class":160},[139,76391,76392,76395,76397],{"class":141,"line":36037},[139,76393,76394],{"class":160},"          \u003Ca href=\"#\" data-id=\"${",[139,76396,76287],{"class":145},[139,76398,76399],{"class":160},"}\">删除\u003C\u002Fa>\n",[139,76401,76402],{"class":141,"line":36043},[139,76403,75854],{"class":160},[139,76405,76406],{"class":141,"line":36056},[139,76407,76408],{"class":160},"      \u003C\u002Ftr>\n",[139,76410,76411],{"class":141,"line":36062},[139,76412,76413],{"class":160},"  `\n",[139,76415,76416],{"class":141,"line":36073},[139,76417,67046],{"class":145},[139,76419,76420,76422,76424],{"class":141,"line":36084},[139,76421,60477],{"class":145},[139,76423,60480],{"class":781},[139,76425,76426],{"class":145},"(trArr)\n",[139,76428,76429],{"class":141,"line":36103},[139,76430,843],{"emptyLinePlaceholder":842},[139,76432,76433],{"class":141,"line":51756},[139,76434,76435],{"class":2512},"      \u002F\u002F (2) 把数组转换为字符串join\n",[139,76437,76438],{"class":141,"line":51761},[139,76439,76440],{"class":2512},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[139,76442,76443,76445,76447,76450,76453,76455,76458],{"class":141,"line":51770},[139,76444,72329],{"class":145},[139,76446,150],{"class":149},[139,76448,76449],{"class":145}," trArr.",[139,76451,76452],{"class":781},"join",[139,76454,157],{"class":145},[139,76456,76457],{"class":160},"''",[139,76459,164],{"class":145},[139,76461,76462],{"class":141,"line":51779},[139,76463,76464],{"class":2512},"      \u002F\u002F 显示共有几条\n",[139,76466,76467,76469,76471,76473,76476,76479,76481,76483],{"class":141,"line":51784},[139,76468,58005],{"class":145},[139,76470,56633],{"class":781},[139,76472,157],{"class":145},[139,76474,76475],{"class":160},"'.total span'",[139,76477,76478],{"class":145},").innerHTML ",[139,76480,150],{"class":149},[139,76482,54201],{"class":145},[139,76484,58065],{"class":153},[139,76486,76487],{"class":141,"line":51789},[139,76488,4472],{"class":145},[139,76490,76491],{"class":141,"line":51794},[139,76492,76493],{"class":2512},"    \u002F\u002F render()\n",[139,76495,76496],{"class":141,"line":51807},[139,76497,843],{"emptyLinePlaceholder":842},[139,76499,76500],{"class":141,"line":51812},[139,76501,76502],{"class":2512},"    \u002F\u002F 获取DOM对象\n",[139,76504,76505,76507,76509,76511,76513,76515,76517,76519],{"class":141,"line":51821},[139,76506,13494],{"class":149},[139,76508,72051],{"class":153},[139,76510,15836],{"class":149},[139,76512,56630],{"class":145},[139,76514,56633],{"class":781},[139,76516,157],{"class":145},[139,76518,72062],{"class":160},[139,76520,164],{"class":145},[139,76522,76523,76525,76527,76529,76531,76533,76535,76537],{"class":141,"line":51830},[139,76524,13494],{"class":149},[139,76526,71878],{"class":153},[139,76528,15836],{"class":149},[139,76530,56630],{"class":145},[139,76532,56633],{"class":781},[139,76534,157],{"class":145},[139,76536,71889],{"class":160},[139,76538,164],{"class":145},[139,76540,76541,76543,76545,76547,76549,76551,76553,76555],{"class":141,"line":51847},[139,76542,13494],{"class":149},[139,76544,17957],{"class":153},[139,76546,15836],{"class":149},[139,76548,56630],{"class":145},[139,76550,56633],{"class":781},[139,76552,157],{"class":145},[139,76554,71908],{"class":160},[139,76556,164],{"class":145},[139,76558,76560,76562,76564,76566,76568,76570,76572,76574],{"class":141,"line":76559},231,[139,76561,13494],{"class":149},[139,76563,71937],{"class":153},[139,76565,15836],{"class":149},[139,76567,56630],{"class":145},[139,76569,56633],{"class":781},[139,76571,157],{"class":145},[139,76573,71948],{"class":160},[139,76575,164],{"class":145},[139,76577,76579,76581,76583,76585,76587,76589,76591,76593],{"class":141,"line":76578},232,[139,76580,13494],{"class":149},[139,76582,71917],{"class":153},[139,76584,15836],{"class":149},[139,76586,56630],{"class":145},[139,76588,56633],{"class":781},[139,76590,157],{"class":145},[139,76592,71928],{"class":160},[139,76594,164],{"class":145},[139,76596,76598,76600,76602,76604,76606,76608,76610,76612],{"class":141,"line":76597},233,[139,76599,13494],{"class":149},[139,76601,71957],{"class":153},[139,76603,15836],{"class":149},[139,76605,56630],{"class":145},[139,76607,56633],{"class":781},[139,76609,157],{"class":145},[139,76611,71968],{"class":160},[139,76613,164],{"class":145},[139,76615,76617],{"class":141,"line":76616},234,[139,76618,843],{"emptyLinePlaceholder":842},[139,76620,76622],{"class":141,"line":76621},235,[139,76623,76624],{"class":2512},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[139,76626,76628,76630,76632,76634,76636,76638,76640,76642,76644],{"class":141,"line":76627},236,[139,76629,72069],{"class":145},[139,76631,60046],{"class":781},[139,76633,157],{"class":145},[139,76635,72076],{"class":160},[139,76637,413],{"class":145},[139,76639,56683],{"class":149},[139,76641,549],{"class":145},[139,76643,628],{"class":2111},[139,76645,14714],{"class":145},[139,76647,76649],{"class":141,"line":76648},237,[139,76650,76651],{"class":2512},"      \u002F\u002F 禁止浏览器跳转\n",[139,76653,76655,76657,76659],{"class":141,"line":76654},238,[139,76656,72096],{"class":145},[139,76658,72099],{"class":781},[139,76660,4262],{"class":145},[139,76662,76664],{"class":141,"line":76663},239,[139,76665,76666],{"class":2512},"      \u002F\u002F 非空判断\n",[139,76668,76670],{"class":141,"line":76669},240,[139,76671,76672],{"class":2512},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[139,76674,76676],{"class":141,"line":76675},241,[139,76677,76678],{"class":2512},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[139,76680,76682,76684,76686,76688,76691,76693,76696,76699,76701,76703],{"class":141,"line":76681},242,[139,76683,56714],{"class":149},[139,76685,549],{"class":145},[139,76687,2668],{"class":149},[139,76689,76690],{"class":145},"uname.value ",[139,76692,73586],{"class":149},[139,76694,76695],{"class":149}," !",[139,76697,76698],{"class":145},"age.value ",[139,76700,73586],{"class":149},[139,76702,76695],{"class":149},[139,76704,76705],{"class":145},"salary.value) {\n",[139,76707,76709,76711,76713,76715,76717],{"class":141,"line":76708},243,[139,76710,2085],{"class":149},[139,76712,72170],{"class":781},[139,76714,157],{"class":145},[139,76716,72175],{"class":160},[139,76718,164],{"class":145},[139,76720,76722],{"class":141,"line":76721},244,[139,76723,54633],{"class":145},[139,76725,76727,76729,76731],{"class":141,"line":76726},245,[139,76728,60240],{"class":145},[139,76730,54120],{"class":781},[139,76732,76733],{"class":145},"({\n",[139,76735,76737],{"class":141,"line":76736},246,[139,76738,76739],{"class":2512},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[139,76741,76743],{"class":141,"line":76742},247,[139,76744,76745],{"class":2512},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[139,76747,76749],{"class":141,"line":76748},248,[139,76750,76751],{"class":2512},"        \u002F\u002F 对象的序号应为数组长度+1\n",[139,76753,76755],{"class":141,"line":76754},249,[139,76756,76757],{"class":2512},"        \u002F\u002F unameId: arr.length + 1,\n",[139,76759,76761],{"class":141,"line":76760},250,[139,76762,843],{"emptyLinePlaceholder":842},[139,76764,76766],{"class":141,"line":76765},251,[139,76767,76768],{"class":2512},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[139,76770,76772],{"class":141,"line":76771},252,[139,76773,76774],{"class":2512},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[139,76776,76778],{"class":141,"line":76777},253,[139,76779,76780],{"class":2512},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[139,76782,76784],{"class":141,"line":76783},254,[139,76785,76786],{"class":2512},"        \u002F\u002F 0当假看\n",[139,76788,76790,76793,76795,76797,76800,76802,76804,76806,76809,76811,76813,76816,76818],{"class":141,"line":76789},255,[139,76791,76792],{"class":145},"        unameId: arr.",[139,76794,54204],{"class":153},[139,76796,76043],{"class":149},[139,76798,76799],{"class":145}," arr[arr.",[139,76801,54204],{"class":153},[139,76803,54506],{"class":149},[139,76805,27381],{"class":153},[139,76807,76808],{"class":145},"].unameId ",[139,76810,1147],{"class":149},[139,76812,27381],{"class":153},[139,76814,76815],{"class":149}," :",[139,76817,27381],{"class":153},[139,76819,33715],{"class":145},[139,76821,76823],{"class":141,"line":76822},256,[139,76824,72223],{"class":145},[139,76826,76828],{"class":141,"line":76827},257,[139,76829,72228],{"class":145},[139,76831,76833],{"class":141,"line":76832},258,[139,76834,72238],{"class":145},[139,76836,76838],{"class":141,"line":76837},259,[139,76839,72233],{"class":145},[139,76841,76843],{"class":141,"line":76842},260,[139,76844,76845],{"class":145},"        city: city.value,\n",[139,76847,76849],{"class":141,"line":76848},261,[139,76850,76851],{"class":2512},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[139,76853,76855],{"class":141,"line":76854},262,[139,76856,76857],{"class":2512},"        \u002F\u002F time: new Date().toDateString()\n",[139,76859,76861,76864,76867],{"class":141,"line":76860},263,[139,76862,76863],{"class":145},"        time: ",[139,76865,76866],{"class":781},"getTime",[139,76868,4262],{"class":145},[139,76870,76872],{"class":141,"line":76871},264,[139,76873,67046],{"class":145},[139,76875,76877],{"class":141,"line":76876},265,[139,76878,76879],{"class":2512},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[139,76881,76883,76885],{"class":141,"line":76882},266,[139,76884,72298],{"class":781},[139,76886,4262],{"class":145},[139,76888,76890,76892,76894,76896,76898],{"class":141,"line":76889},267,[139,76891,72281],{"class":153},[139,76893,2993],{"class":145},[139,76895,72286],{"class":781},[139,76897,15322],{"class":145},[139,76899,76900],{"class":2512},"\u002F\u002F重置表单\n",[139,76902,76904],{"class":141,"line":76903},268,[139,76905,76906],{"class":2512},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[139,76908,76910,76913,76915,76917,76920,76922,76924,76926,76928],{"class":141,"line":76909},269,[139,76911,76912],{"class":145},"      localStorage.",[139,76914,73883],{"class":781},[139,76916,157],{"class":145},[139,76918,76919],{"class":160},"'data'",[139,76921,413],{"class":145},[139,76923,73893],{"class":153},[139,76925,2993],{"class":145},[139,76927,73898],{"class":781},[139,76929,76930],{"class":145},"(arr))\n",[139,76932,76934],{"class":141,"line":76933},270,[139,76935,35706],{"class":145},[139,76937,76939],{"class":141,"line":76938},271,[139,76940,843],{"emptyLinePlaceholder":842},[139,76942,76944],{"class":141,"line":76943},272,[139,76945,76946],{"class":2512},"    \u002F\u002F 3.删除业务\n",[139,76948,76950],{"class":141,"line":76949},273,[139,76951,76952],{"class":2512},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[139,76954,76956,76958,76960,76962,76964,76966,76968,76970,76972],{"class":141,"line":76955},274,[139,76957,72570],{"class":145},[139,76959,60046],{"class":781},[139,76961,157],{"class":145},[139,76963,60051],{"class":160},[139,76965,413],{"class":145},[139,76967,56683],{"class":149},[139,76969,549],{"class":145},[139,76971,628],{"class":2111},[139,76973,14714],{"class":145},[139,76975,76977],{"class":141,"line":76976},275,[139,76978,76979],{"class":2512},"      \u002F\u002F 判断是否点击的是删除按钮\n",[139,76981,76983,76985,76987,76989,76991],{"class":141,"line":76982},276,[139,76984,56714],{"class":149},[139,76986,69264],{"class":145},[139,76988,56720],{"class":149},[139,76990,70486],{"class":160},[139,76992,14714],{"class":145},[139,76994,76996],{"class":141,"line":76995},277,[139,76997,76998],{"class":2512},"        \u002F\u002F alert(1)\n",[139,77000,77002],{"class":141,"line":77001},278,[139,77003,77004],{"class":2512},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[139,77006,77008],{"class":141,"line":77007},279,[139,77009,77010],{"class":2512},"        \u002F\u002F console.log(e.target)\n",[139,77012,77014],{"class":141,"line":77013},280,[139,77015,77016],{"class":2512},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[139,77018,77020],{"class":141,"line":77019},281,[139,77021,843],{"emptyLinePlaceholder":842},[139,77023,77025],{"class":141,"line":77024},282,[139,77026,77027],{"class":2512},"        \u002F\u002F 确认框，确然是否真的要删除\n",[139,77029,77031],{"class":141,"line":77030},283,[139,77032,77033],{"class":2512},"        \u002F\u002F confirm()为确认框\n",[139,77035,77037],{"class":141,"line":77036},284,[139,77038,77039],{"class":2512},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[139,77041,77043,77045,77047,77050,77052,77055],{"class":141,"line":77042},285,[139,77044,4780],{"class":149},[139,77046,549],{"class":145},[139,77048,77049],{"class":781},"confirm",[139,77051,157],{"class":145},[139,77053,77054],{"class":160},"'您确定要删除这条数据吗？'",[139,77056,77057],{"class":145},")) {\n",[139,77059,77061,77064,77066,77068,77070],{"class":141,"line":77060},286,[139,77062,77063],{"class":145},"          arr.",[139,77065,60243],{"class":781},[139,77067,72623],{"class":145},[139,77069,410],{"class":153},[139,77071,164],{"class":145},[139,77073,77075],{"class":141,"line":77074},287,[139,77076,77077],{"class":2512},"          \u002F\u002F 3.4 重新渲染页面\n",[139,77079,77081,77084],{"class":141,"line":77080},288,[139,77082,77083],{"class":781},"          render",[139,77085,4262],{"class":145},[139,77087,77089],{"class":141,"line":77088},289,[139,77090,77091],{"class":2512},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[139,77093,77095,77098,77100,77102,77104,77106,77108,77110,77112],{"class":141,"line":77094},290,[139,77096,77097],{"class":145},"          localStorage.",[139,77099,73883],{"class":781},[139,77101,157],{"class":145},[139,77103,76919],{"class":160},[139,77105,413],{"class":145},[139,77107,73893],{"class":153},[139,77109,2993],{"class":145},[139,77111,73898],{"class":781},[139,77113,76930],{"class":145},[139,77115,77117],{"class":141,"line":77116},291,[139,77118,4812],{"class":145},[139,77120,77122],{"class":141,"line":77121},292,[139,77123,54633],{"class":145},[139,77125,77127],{"class":141,"line":77126},293,[139,77128,843],{"emptyLinePlaceholder":842},[139,77130,77132],{"class":141,"line":77131},294,[139,77133,35706],{"class":145},[139,77135,77137],{"class":141,"line":77136},295,[139,77138,843],{"emptyLinePlaceholder":842},[139,77140,77142,77144,77146],{"class":141,"line":77141},296,[139,77143,54652],{"class":145},[139,77145,54050],{"class":53538},[139,77147,53545],{"class":145},[139,77149,77151,77153,77155],{"class":141,"line":77150},297,[139,77152,54022],{"class":145},[139,77154,54037],{"class":53538},[139,77156,53545],{"class":145},[139,77158,77160],{"class":141,"line":77159},298,[139,77161,843],{"emptyLinePlaceholder":842},[139,77163,77165,77167,77169],{"class":141,"line":77164},299,[139,77166,54022],{"class":145},[139,77168,52873],{"class":53538},[139,77170,53545],{"class":145},[14,77172,77174],{"id":77173},"_36-正则表达式","3.6 正则表达式",[19,77176,77177],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77179,77180],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77182,77183],{},"正则表达式的作用：",[3437,77185,77186,77193,77199],{},[1763,77187,77188,77189,77192],{},"表单验证（ ",[1674,77190,77191],{},"匹配"," ）",[1763,77194,77195,77196,77192],{},"过滤敏感词（ ",[1674,77197,77198],{},"替换",[1763,77200,77201,77202,77192],{},"字符串中提取我们想要的部分（ ",[1674,77203,77204],{},"提取",[1217,77206,77208],{"id":77207},"_361-语法","3.6.1 语法",[19,77210,77211],{},"正则表达式使用步骤：",[1760,77213,77214,77217],{},[1763,77215,77216],{},"定义规则",[1763,77218,77219],{},"查找是否匹配",[19,77221,77222],{},"正则表达式里边不需要写引号",[19,77224,77225],{},[3760,77226],{"alt":135,"src":77227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77229,77230],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77232,77233],{},"reg.test(str)",[19,77235,77236],{},[3760,77237],{"alt":135,"src":77238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77240,77241],{},[3760,77242],{"alt":135,"src":77243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1217,77245,77247],{"id":77246},"_362-元字符","3.6.2 元字符",[1760,77249,77250,77253,77256,77259,77266],{},[1763,77251,77252],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1763,77254,77255],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1763,77257,77258],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1763,77260,77261,77262],{},"正则验证工具：",[2680,77263,77264],{"href":77264,"rel":77265},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26128],[1763,77267,77268],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24265,77270,77272],{"id":77271},"_3621-边界符","3.6.2.1 边界符",[19,77274,77275],{},[3760,77276],{"alt":135,"src":77277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77279,77280],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77282,77283],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77285,77286],{},"只匹配一次",[19,77288,77289],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24265,77291,77293],{"id":77292},"_3622-量词","3.6.2.2 量词",[19,77295,77296],{},[3760,77297],{"alt":135,"src":77298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77300,77301],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24265,77303,77305],{"id":77304},"_3623-元字符","3.6.2.3 元字符",[19,77307,77308],{},[3760,77309],{"alt":135,"src":77310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77312,77313],{},"匹配的是a或b或c []只选一个",[19,77315,77316],{},[3760,77317],{"alt":135,"src":77318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77320,77321],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77323,77324],{},[3760,77325],{"alt":135,"src":77326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77328,77329],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77331,77332],{},[3760,77333],{"alt":135,"src":77334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[130,77336,77338],{"className":52871,"code":77337,"language":52873,"meta":135,"style":135},"\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",[50,77339,77340,77350,77364,77368,77376,77390,77410,77422,77430,77434,77442,77450,77455,77486,77513,77541,77545,77550,77578,77609,77614,77619,77650,77682,77714,77718,77723,77754,77784,77814,77818,77823,77854,77885,77915,77945,77949,77954,77987,77991,77996,78027,78058,78062,78067,78098,78128,78159,78163,78168,78200,78231,78262,78289,78320,78352,78385,78416,78447,78479,78510,78518,78526,78530],{"__ignoreMap":135},[139,77341,77342,77344,77346,77348],{"class":141,"line":142},[139,77343,53535],{"class":145},[139,77345,53539],{"class":53538},[139,77347,53542],{"class":781},[139,77349,53545],{"class":145},[139,77351,77352,77354,77356,77358,77360,77362],{"class":141,"line":210},[139,77353,796],{"class":145},[139,77355,52873],{"class":53538},[139,77357,53554],{"class":781},[139,77359,150],{"class":145},[139,77361,53559],{"class":160},[139,77363,53545],{"class":145},[139,77365,77366],{"class":141,"line":254},[139,77367,843],{"emptyLinePlaceholder":842},[139,77369,77370,77372,77374],{"class":141,"line":262},[139,77371,796],{"class":145},[139,77373,53572],{"class":53538},[139,77375,53545],{"class":145},[139,77377,77378,77380,77382,77384,77386,77388],{"class":141,"line":313},[139,77379,54380],{"class":145},[139,77381,53582],{"class":53538},[139,77383,53585],{"class":781},[139,77385,150],{"class":145},[139,77387,53590],{"class":160},[139,77389,53545],{"class":145},[139,77391,77392,77394,77396,77398,77400,77402,77404,77406,77408],{"class":141,"line":462},[139,77393,54380],{"class":145},[139,77395,53582],{"class":53538},[139,77397,17189],{"class":781},[139,77399,150],{"class":145},[139,77401,53629],{"class":160},[139,77403,53609],{"class":781},[139,77405,150],{"class":145},[139,77407,53636],{"class":160},[139,77409,53545],{"class":145},[139,77411,77412,77414,77416,77418,77420],{"class":141,"line":474},[139,77413,54380],{"class":145},[139,77415,53645],{"class":53538},[139,77417,53648],{"class":145},[139,77419,53645],{"class":53538},[139,77421,53545],{"class":145},[139,77423,77424,77426,77428],{"class":141,"line":484},[139,77425,54022],{"class":145},[139,77427,53572],{"class":53538},[139,77429,53545],{"class":145},[139,77431,77432],{"class":141,"line":989},[139,77433,843],{"emptyLinePlaceholder":842},[139,77435,77436,77438,77440],{"class":141,"line":994},[139,77437,796],{"class":145},[139,77439,54037],{"class":53538},[139,77441,53545],{"class":145},[139,77443,77444,77446,77448],{"class":141,"line":999},[139,77445,54380],{"class":145},[139,77447,54050],{"class":53538},[139,77449,53545],{"class":145},[139,77451,77452],{"class":141,"line":1006},[139,77453,77454],{"class":2512},"    \u002F\u002F 元字符中\n",[139,77456,77457,77459,77461,77463,77465,77468,77470,77472,77475,77477,77480,77483],{"class":141,"line":1027},[139,77458,75982],{"class":145},[139,77460,60480],{"class":781},[139,77462,157],{"class":145},[139,77464,3019],{"class":160},[139,77466,77467],{"class":50215},"哈",[139,77469,3019],{"class":160},[139,77471,2993],{"class":145},[139,77473,77474],{"class":781},"test",[139,77476,157],{"class":145},[139,77478,77479],{"class":160},"'哈'",[139,77481,77482],{"class":145},"))  ",[139,77484,77485],{"class":2512},"\u002F\u002Ftrue\n",[139,77487,77488,77490,77492,77494,77496,77498,77500,77502,77504,77506,77509,77511],{"class":141,"line":1040},[139,77489,75982],{"class":145},[139,77491,60480],{"class":781},[139,77493,157],{"class":145},[139,77495,3019],{"class":160},[139,77497,77467],{"class":50215},[139,77499,3019],{"class":160},[139,77501,2993],{"class":145},[139,77503,77474],{"class":781},[139,77505,157],{"class":145},[139,77507,77508],{"class":160},"'哈哈'",[139,77510,77482],{"class":145},[139,77512,77485],{"class":2512},[139,77514,77515,77517,77519,77521,77523,77525,77527,77529,77531,77533,77536,77539],{"class":141,"line":2160},[139,77516,75982],{"class":145},[139,77518,60480],{"class":781},[139,77520,157],{"class":145},[139,77522,3019],{"class":160},[139,77524,77467],{"class":50215},[139,77526,3019],{"class":160},[139,77528,2993],{"class":145},[139,77530,77474],{"class":781},[139,77532,157],{"class":145},[139,77534,77535],{"class":160},"'二哈'",[139,77537,77538],{"class":145},"))   ",[139,77540,77485],{"class":2512},[139,77542,77543],{"class":141,"line":2188},[139,77544,843],{"emptyLinePlaceholder":842},[139,77546,77547],{"class":141,"line":3944},[139,77548,77549],{"class":2512},"    \u002F\u002F 1.边界符\n",[139,77551,77552,77554,77556,77558,77560,77562,77564,77566,77568,77570,77572,77574,77576],{"class":141,"line":3963},[139,77553,75982],{"class":145},[139,77555,60480],{"class":781},[139,77557,157],{"class":145},[139,77559,3019],{"class":160},[139,77561,3397],{"class":149},[139,77563,77467],{"class":50215},[139,77565,3019],{"class":160},[139,77567,2993],{"class":145},[139,77569,77474],{"class":781},[139,77571,157],{"class":145},[139,77573,77479],{"class":160},[139,77575,77482],{"class":145},[139,77577,77485],{"class":2512},[139,77579,77580,77582,77584,77586,77588,77590,77592,77594,77596,77598,77600,77602,77604,77606],{"class":141,"line":3968},[139,77581,75982],{"class":145},[139,77583,60480],{"class":781},[139,77585,157],{"class":145},[139,77587,3019],{"class":160},[139,77589,3397],{"class":149},[139,77591,77467],{"class":50215},[139,77593,2742],{"class":149},[139,77595,3019],{"class":160},[139,77597,2993],{"class":145},[139,77599,77474],{"class":781},[139,77601,157],{"class":145},[139,77603,77508],{"class":160},[139,77605,77482],{"class":145},[139,77607,77608],{"class":2512},"\u002F\u002Ffalse\n",[139,77610,77611],{"class":141,"line":3982},[139,77612,77613],{"class":2512},"    \u002F\u002F 2.量词\n",[139,77615,77616],{"class":141,"line":3987},[139,77617,77618],{"class":2512},"    \u002F\u002F 量词 * 类似于 >= 0\n",[139,77620,77621,77623,77625,77627,77629,77631,77633,77636,77638,77640,77642,77644,77646,77648],{"class":141,"line":4014},[139,77622,75982],{"class":145},[139,77624,60480],{"class":781},[139,77626,157],{"class":145},[139,77628,3019],{"class":160},[139,77630,3397],{"class":149},[139,77632,77467],{"class":50215},[139,77634,77635],{"class":149},"*$",[139,77637,3019],{"class":160},[139,77639,2993],{"class":145},[139,77641,77474],{"class":781},[139,77643,157],{"class":145},[139,77645,77508],{"class":160},[139,77647,77482],{"class":145},[139,77649,77485],{"class":2512},[139,77651,77652,77654,77656,77658,77660,77662,77664,77666,77668,77670,77672,77674,77677,77679],{"class":141,"line":4019},[139,77653,75982],{"class":145},[139,77655,60480],{"class":781},[139,77657,157],{"class":145},[139,77659,3019],{"class":160},[139,77661,3397],{"class":149},[139,77663,77467],{"class":50215},[139,77665,77635],{"class":149},[139,77667,3019],{"class":160},[139,77669,2993],{"class":145},[139,77671,77474],{"class":781},[139,77673,157],{"class":145},[139,77675,77676],{"class":160},"'二哈好傻'",[139,77678,77482],{"class":145},[139,77680,77681],{"class":2512},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[139,77683,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704,77706,77709,77711],{"class":141,"line":4036},[139,77685,75982],{"class":145},[139,77687,60480],{"class":781},[139,77689,157],{"class":145},[139,77691,3019],{"class":160},[139,77693,3397],{"class":149},[139,77695,77467],{"class":50215},[139,77697,77635],{"class":149},[139,77699,3019],{"class":160},[139,77701,2993],{"class":145},[139,77703,77474],{"class":781},[139,77705,157],{"class":145},[139,77707,77708],{"class":160},"'哈好哈'",[139,77710,77538],{"class":145},[139,77712,77713],{"class":2512},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[139,77715,77716],{"class":141,"line":4041},[139,77717,843],{"emptyLinePlaceholder":842},[139,77719,77720],{"class":141,"line":4046},[139,77721,77722],{"class":2512},"    \u002F\u002F +类似于>=1\n",[139,77724,77725,77727,77729,77731,77733,77735,77737,77740,77742,77744,77746,77748,77750,77752],{"class":141,"line":4051},[139,77726,75982],{"class":145},[139,77728,60480],{"class":781},[139,77730,157],{"class":145},[139,77732,3019],{"class":160},[139,77734,3397],{"class":149},[139,77736,77467],{"class":50215},[139,77738,77739],{"class":149},"+$",[139,77741,3019],{"class":160},[139,77743,2993],{"class":145},[139,77745,77474],{"class":781},[139,77747,157],{"class":145},[139,77749,77508],{"class":160},[139,77751,77482],{"class":145},[139,77753,77485],{"class":2512},[139,77755,77756,77758,77760,77762,77764,77766,77768,77770,77772,77774,77776,77778,77780,77782],{"class":141,"line":4065},[139,77757,75982],{"class":145},[139,77759,60480],{"class":781},[139,77761,157],{"class":145},[139,77763,3019],{"class":160},[139,77765,3397],{"class":149},[139,77767,77467],{"class":50215},[139,77769,77739],{"class":149},[139,77771,3019],{"class":160},[139,77773,2993],{"class":145},[139,77775,77474],{"class":781},[139,77777,157],{"class":145},[139,77779,77676],{"class":160},[139,77781,77482],{"class":145},[139,77783,77681],{"class":2512},[139,77785,77786,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808,77810,77812],{"class":141,"line":4070},[139,77787,75982],{"class":145},[139,77789,60480],{"class":781},[139,77791,157],{"class":145},[139,77793,3019],{"class":160},[139,77795,3397],{"class":149},[139,77797,77467],{"class":50215},[139,77799,77739],{"class":149},[139,77801,3019],{"class":160},[139,77803,2993],{"class":145},[139,77805,77474],{"class":781},[139,77807,157],{"class":145},[139,77809,77708],{"class":160},[139,77811,77538],{"class":145},[139,77813,77608],{"class":2512},[139,77815,77816],{"class":141,"line":4860},[139,77817,843],{"emptyLinePlaceholder":842},[139,77819,77820],{"class":141,"line":4874},[139,77821,77822],{"class":2512},"    \u002F\u002F ?类似于0次或一次\n",[139,77824,77825,77827,77829,77831,77833,77835,77838,77840,77842,77844,77846,77848,77850,77852],{"class":141,"line":4882},[139,77826,75982],{"class":145},[139,77828,60480],{"class":781},[139,77830,157],{"class":145},[139,77832,3019],{"class":160},[139,77834,3397],{"class":149},[139,77836,77837],{"class":50215},"哈？",[139,77839,2742],{"class":149},[139,77841,3019],{"class":160},[139,77843,2993],{"class":145},[139,77845,77474],{"class":781},[139,77847,157],{"class":145},[139,77849,76457],{"class":160},[139,77851,77538],{"class":145},[139,77853,77485],{"class":2512},[139,77855,77856,77858,77860,77862,77864,77866,77868,77871,77873,77875,77877,77879,77881,77883],{"class":141,"line":4887},[139,77857,75982],{"class":145},[139,77859,60480],{"class":781},[139,77861,157],{"class":145},[139,77863,3019],{"class":160},[139,77865,3397],{"class":149},[139,77867,77467],{"class":50215},[139,77869,77870],{"class":149},"?$",[139,77872,3019],{"class":160},[139,77874,2993],{"class":145},[139,77876,77474],{"class":781},[139,77878,157],{"class":145},[139,77880,77508],{"class":160},[139,77882,77482],{"class":145},[139,77884,77608],{"class":2512},[139,77886,77887,77889,77891,77893,77895,77897,77899,77901,77903,77905,77907,77909,77911,77913],{"class":141,"line":4893},[139,77888,75982],{"class":145},[139,77890,60480],{"class":781},[139,77892,157],{"class":145},[139,77894,3019],{"class":160},[139,77896,3397],{"class":149},[139,77898,77467],{"class":50215},[139,77900,77870],{"class":149},[139,77902,3019],{"class":160},[139,77904,2993],{"class":145},[139,77906,77474],{"class":781},[139,77908,157],{"class":145},[139,77910,77676],{"class":160},[139,77912,77482],{"class":145},[139,77914,77681],{"class":2512},[139,77916,77917,77919,77921,77923,77925,77927,77929,77931,77933,77935,77937,77939,77941,77943],{"class":141,"line":4899},[139,77918,75982],{"class":145},[139,77920,60480],{"class":781},[139,77922,157],{"class":145},[139,77924,3019],{"class":160},[139,77926,3397],{"class":149},[139,77928,77467],{"class":50215},[139,77930,77870],{"class":149},[139,77932,3019],{"class":160},[139,77934,2993],{"class":145},[139,77936,77474],{"class":781},[139,77938,157],{"class":145},[139,77940,77708],{"class":160},[139,77942,77482],{"class":145},[139,77944,77608],{"class":2512},[139,77946,77947],{"class":141,"line":4904},[139,77948,843],{"emptyLinePlaceholder":842},[139,77950,77951],{"class":141,"line":10222},[139,77952,77953],{"class":2512},"    \u002F\u002F {n}写几，就必须出现几次\n",[139,77955,77956,77958,77960,77962,77964,77966,77968,77971,77973,77975,77977,77979,77982,77985],{"class":141,"line":10246},[139,77957,75982],{"class":145},[139,77959,60480],{"class":781},[139,77961,157],{"class":145},[139,77963,3019],{"class":160},[139,77965,3397],{"class":149},[139,77967,77467],{"class":50215},[139,77969,77970],{"class":149},"{4}$",[139,77972,3019],{"class":160},[139,77974,2993],{"class":145},[139,77976,77474],{"class":781},[139,77978,157],{"class":145},[139,77980,77981],{"class":160},"'哈哈哈哈'",[139,77983,77984],{"class":145},")) ",[139,77986,77485],{"class":2512},[139,77988,77989],{"class":141,"line":10251},[139,77990,843],{"emptyLinePlaceholder":842},[139,77992,77993],{"class":141,"line":10257},[139,77994,77995],{"class":2512},"    \u002F\u002F {n,}大于等于n次\n",[139,77997,77998,78000,78002,78004,78006,78008,78010,78013,78015,78017,78019,78021,78023,78025],{"class":141,"line":10284},[139,77999,75982],{"class":145},[139,78001,60480],{"class":781},[139,78003,157],{"class":145},[139,78005,3019],{"class":160},[139,78007,3397],{"class":149},[139,78009,77467],{"class":50215},[139,78011,78012],{"class":149},"{4,}$",[139,78014,3019],{"class":160},[139,78016,2993],{"class":145},[139,78018,77474],{"class":781},[139,78020,157],{"class":145},[139,78022,77981],{"class":160},[139,78024,77984],{"class":145},[139,78026,77485],{"class":2512},[139,78028,78029,78031,78033,78035,78037,78039,78041,78043,78045,78047,78049,78051,78054,78056],{"class":141,"line":10289},[139,78030,75982],{"class":145},[139,78032,60480],{"class":781},[139,78034,157],{"class":145},[139,78036,3019],{"class":160},[139,78038,3397],{"class":149},[139,78040,77467],{"class":50215},[139,78042,78012],{"class":149},[139,78044,3019],{"class":160},[139,78046,2993],{"class":145},[139,78048,77474],{"class":781},[139,78050,157],{"class":145},[139,78052,78053],{"class":160},"'哈哈哈哈哈'",[139,78055,77984],{"class":145},[139,78057,77485],{"class":2512},[139,78059,78060],{"class":141,"line":10295},[139,78061,843],{"emptyLinePlaceholder":842},[139,78063,78064],{"class":141,"line":10307},[139,78065,78066],{"class":2512},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[139,78068,78069,78071,78073,78075,78077,78079,78081,78084,78086,78088,78090,78092,78094,78096],{"class":141,"line":10319},[139,78070,75982],{"class":145},[139,78072,60480],{"class":781},[139,78074,157],{"class":145},[139,78076,3019],{"class":160},[139,78078,3397],{"class":149},[139,78080,77467],{"class":50215},[139,78082,78083],{"class":149},"{4,6}$",[139,78085,3019],{"class":160},[139,78087,2993],{"class":145},[139,78089,77474],{"class":781},[139,78091,157],{"class":145},[139,78093,77981],{"class":160},[139,78095,77984],{"class":145},[139,78097,77485],{"class":2512},[139,78099,78100,78102,78104,78106,78108,78110,78112,78114,78116,78118,78120,78122,78124,78126],{"class":141,"line":10331},[139,78101,75982],{"class":145},[139,78103,60480],{"class":781},[139,78105,157],{"class":145},[139,78107,3019],{"class":160},[139,78109,3397],{"class":149},[139,78111,77467],{"class":50215},[139,78113,78083],{"class":149},[139,78115,3019],{"class":160},[139,78117,2993],{"class":145},[139,78119,77474],{"class":781},[139,78121,157],{"class":145},[139,78123,78053],{"class":160},[139,78125,77984],{"class":145},[139,78127,77485],{"class":2512},[139,78129,78130,78132,78134,78136,78138,78140,78142,78144,78146,78148,78150,78152,78155,78157],{"class":141,"line":11990},[139,78131,75982],{"class":145},[139,78133,60480],{"class":781},[139,78135,157],{"class":145},[139,78137,3019],{"class":160},[139,78139,3397],{"class":149},[139,78141,77467],{"class":50215},[139,78143,78083],{"class":149},[139,78145,3019],{"class":160},[139,78147,2993],{"class":145},[139,78149,77474],{"class":781},[139,78151,157],{"class":145},[139,78153,78154],{"class":160},"'哈哈哈哈哈哈哈'",[139,78156,77984],{"class":145},[139,78158,77608],{"class":2512},[139,78160,78161],{"class":141,"line":12015},[139,78162,843],{"emptyLinePlaceholder":842},[139,78164,78165],{"class":141,"line":12038},[139,78166,78167],{"class":2512},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[139,78169,78170,78172,78174,78176,78178,78180,78183,78185,78187,78189,78191,78193,78196,78198],{"class":141,"line":12062},[139,78171,75982],{"class":145},[139,78173,60480],{"class":781},[139,78175,157],{"class":145},[139,78177,3019],{"class":160},[139,78179,3397],{"class":149},[139,78181,78182],{"class":153},"[abc]",[139,78184,2742],{"class":149},[139,78186,3019],{"class":160},[139,78188,2993],{"class":145},[139,78190,77474],{"class":781},[139,78192,157],{"class":145},[139,78194,78195],{"class":160},"'a'",[139,78197,77482],{"class":145},[139,78199,77485],{"class":2512},[139,78201,78202,78204,78206,78208,78210,78212,78214,78216,78218,78220,78222,78224,78227,78229],{"class":141,"line":12067},[139,78203,75982],{"class":145},[139,78205,60480],{"class":781},[139,78207,157],{"class":145},[139,78209,3019],{"class":160},[139,78211,3397],{"class":149},[139,78213,78182],{"class":153},[139,78215,2742],{"class":149},[139,78217,3019],{"class":160},[139,78219,2993],{"class":145},[139,78221,77474],{"class":781},[139,78223,157],{"class":145},[139,78225,78226],{"class":160},"'b'",[139,78228,77482],{"class":145},[139,78230,77485],{"class":2512},[139,78232,78233,78235,78237,78239,78241,78243,78245,78247,78249,78251,78253,78255,78258,78260],{"class":141,"line":12072},[139,78234,75982],{"class":145},[139,78236,60480],{"class":781},[139,78238,157],{"class":145},[139,78240,3019],{"class":160},[139,78242,3397],{"class":149},[139,78244,78182],{"class":153},[139,78246,2742],{"class":149},[139,78248,3019],{"class":160},[139,78250,2993],{"class":145},[139,78252,77474],{"class":781},[139,78254,157],{"class":145},[139,78256,78257],{"class":160},"'c'",[139,78259,77482],{"class":145},[139,78261,77485],{"class":2512},[139,78263,78264,78266,78268,78270,78272,78274,78276,78278,78280,78282,78285,78287],{"class":141,"line":12077},[139,78265,75982],{"class":145},[139,78267,60480],{"class":781},[139,78269,157],{"class":145},[139,78271,3019],{"class":160},[139,78273,78182],{"class":153},[139,78275,3019],{"class":160},[139,78277,2993],{"class":145},[139,78279,77474],{"class":781},[139,78281,157],{"class":145},[139,78283,78284],{"class":160},"'ab'",[139,78286,77482],{"class":145},[139,78288,77485],{"class":2512},[139,78290,78291,78293,78295,78297,78299,78301,78303,78305,78307,78309,78311,78313,78315,78317],{"class":141,"line":12086},[139,78292,75982],{"class":145},[139,78294,60480],{"class":781},[139,78296,157],{"class":145},[139,78298,3019],{"class":160},[139,78300,3397],{"class":149},[139,78302,78182],{"class":153},[139,78304,2742],{"class":149},[139,78306,3019],{"class":160},[139,78308,2993],{"class":145},[139,78310,77474],{"class":781},[139,78312,157],{"class":145},[139,78314,78284],{"class":160},[139,78316,77482],{"class":145},[139,78318,78319],{"class":2512},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[139,78321,78322,78324,78326,78328,78330,78332,78334,78337,78339,78341,78343,78345,78347,78349],{"class":141,"line":12091},[139,78323,75982],{"class":145},[139,78325,60480],{"class":781},[139,78327,157],{"class":145},[139,78329,3019],{"class":160},[139,78331,3397],{"class":149},[139,78333,78182],{"class":153},[139,78335,78336],{"class":149},"{2}$",[139,78338,3019],{"class":160},[139,78340,2993],{"class":145},[139,78342,77474],{"class":781},[139,78344,157],{"class":145},[139,78346,78284],{"class":160},[139,78348,77482],{"class":145},[139,78350,78351],{"class":2512},"\u002F\u002Ftrue   可以选两个\n",[139,78353,78354,78356,78358,78360,78362,78364,78367,78369,78371,78373,78375,78377,78380,78382],{"class":141,"line":12097},[139,78355,75982],{"class":145},[139,78357,60480],{"class":781},[139,78359,157],{"class":145},[139,78361,3019],{"class":160},[139,78363,3397],{"class":149},[139,78365,78366],{"class":153},"[a-z]",[139,78368,2742],{"class":149},[139,78370,3019],{"class":160},[139,78372,2993],{"class":145},[139,78374,77474],{"class":781},[139,78376,157],{"class":145},[139,78378,78379],{"class":160},"'p'",[139,78381,77538],{"class":145},[139,78383,78384],{"class":2512},"\u002F\u002Ftrue   依然只能选一个\n",[139,78386,78387,78389,78391,78393,78395,78397,78400,78402,78404,78406,78408,78410,78412,78414],{"class":141,"line":12118},[139,78388,75982],{"class":145},[139,78390,60480],{"class":781},[139,78392,157],{"class":145},[139,78394,3019],{"class":160},[139,78396,3397],{"class":149},[139,78398,78399],{"class":153},"[A-Z]",[139,78401,2742],{"class":149},[139,78403,3019],{"class":160},[139,78405,2993],{"class":145},[139,78407,77474],{"class":781},[139,78409,157],{"class":145},[139,78411,78379],{"class":160},[139,78413,77538],{"class":145},[139,78415,77608],{"class":2512},[139,78417,78418,78420,78422,78424,78426,78428,78430,78432,78434,78436,78438,78440,78443,78445],{"class":141,"line":12124},[139,78419,75982],{"class":145},[139,78421,60480],{"class":781},[139,78423,157],{"class":145},[139,78425,3019],{"class":160},[139,78427,3397],{"class":149},[139,78429,78399],{"class":153},[139,78431,2742],{"class":149},[139,78433,3019],{"class":160},[139,78435,2993],{"class":145},[139,78437,77474],{"class":781},[139,78439,157],{"class":145},[139,78441,78442],{"class":160},"'P'",[139,78444,77538],{"class":145},[139,78446,77485],{"class":2512},[139,78448,78449,78451,78453,78455,78457,78459,78462,78464,78466,78468,78470,78472,78475,78477],{"class":141,"line":12138},[139,78450,75982],{"class":145},[139,78452,60480],{"class":781},[139,78454,157],{"class":145},[139,78456,3019],{"class":160},[139,78458,3397],{"class":149},[139,78460,78461],{"class":153},"[0-9]",[139,78463,2742],{"class":149},[139,78465,3019],{"class":160},[139,78467,2993],{"class":145},[139,78469,77474],{"class":781},[139,78471,157],{"class":145},[139,78473,78474],{"class":160},"'0'",[139,78476,77538],{"class":145},[139,78478,77485],{"class":2512},[139,78480,78481,78483,78485,78487,78489,78491,78494,78496,78498,78500,78502,78504,78506,78508],{"class":141,"line":12144},[139,78482,75982],{"class":145},[139,78484,60480],{"class":781},[139,78486,157],{"class":145},[139,78488,3019],{"class":160},[139,78490,3397],{"class":149},[139,78492,78493],{"class":153},"[a-zA-Z0-9]",[139,78495,2742],{"class":149},[139,78497,3019],{"class":160},[139,78499,2993],{"class":145},[139,78501,77474],{"class":781},[139,78503,157],{"class":145},[139,78505,78379],{"class":160},[139,78507,77482],{"class":145},[139,78509,77485],{"class":2512},[139,78511,78512,78514,78516],{"class":141,"line":12171},[139,78513,54652],{"class":145},[139,78515,54050],{"class":53538},[139,78517,53545],{"class":145},[139,78519,78520,78522,78524],{"class":141,"line":12180},[139,78521,54022],{"class":145},[139,78523,54037],{"class":53538},[139,78525,53545],{"class":145},[139,78527,78528],{"class":141,"line":12186},[139,78529,843],{"emptyLinePlaceholder":842},[139,78531,78532,78534,78536],{"class":141,"line":12194},[139,78533,54022],{"class":145},[139,78535,52873],{"class":53538},[139,78537,53545],{"class":145},[24265,78539,78541],{"id":78540},"_3624-修饰符","3.6.2.4 修饰符",[19,78543,78544],{},[3760,78545],{"alt":135,"src":78546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78548,78549],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78551,78552],{},[3760,78553],{"alt":135,"src":78554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[130,78556,78558],{"className":52871,"code":78557,"language":52873,"meta":135,"style":135},"\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",[50,78559,78560,78570,78584,78592,78606,78626,78638,78646,78654,78662,78694,78725,78730,78762,78773,78806,78815,78823,78831],{"__ignoreMap":135},[139,78561,78562,78564,78566,78568],{"class":141,"line":142},[139,78563,53535],{"class":145},[139,78565,53539],{"class":53538},[139,78567,53542],{"class":781},[139,78569,53545],{"class":145},[139,78571,78572,78574,78576,78578,78580,78582],{"class":141,"line":210},[139,78573,796],{"class":145},[139,78575,52873],{"class":53538},[139,78577,53554],{"class":781},[139,78579,150],{"class":145},[139,78581,53559],{"class":160},[139,78583,53545],{"class":145},[139,78585,78586,78588,78590],{"class":141,"line":254},[139,78587,796],{"class":145},[139,78589,53572],{"class":53538},[139,78591,53545],{"class":145},[139,78593,78594,78596,78598,78600,78602,78604],{"class":141,"line":262},[139,78595,54380],{"class":145},[139,78597,53582],{"class":53538},[139,78599,53585],{"class":781},[139,78601,150],{"class":145},[139,78603,53590],{"class":160},[139,78605,53545],{"class":145},[139,78607,78608,78610,78612,78614,78616,78618,78620,78622,78624],{"class":141,"line":313},[139,78609,54380],{"class":145},[139,78611,53582],{"class":53538},[139,78613,17189],{"class":781},[139,78615,150],{"class":145},[139,78617,53629],{"class":160},[139,78619,53609],{"class":781},[139,78621,150],{"class":145},[139,78623,53636],{"class":160},[139,78625,53545],{"class":145},[139,78627,78628,78630,78632,78634,78636],{"class":141,"line":462},[139,78629,54380],{"class":145},[139,78631,53645],{"class":53538},[139,78633,53648],{"class":145},[139,78635,53645],{"class":53538},[139,78637,53545],{"class":145},[139,78639,78640,78642,78644],{"class":141,"line":474},[139,78641,54022],{"class":145},[139,78643,53572],{"class":53538},[139,78645,53545],{"class":145},[139,78647,78648,78650,78652],{"class":141,"line":484},[139,78649,796],{"class":145},[139,78651,54037],{"class":53538},[139,78653,53545],{"class":145},[139,78655,78656,78658,78660],{"class":141,"line":989},[139,78657,54380],{"class":145},[139,78659,54050],{"class":53538},[139,78661,53545],{"class":145},[139,78663,78664,78666,78668,78670,78672,78674,78677,78679,78681,78683,78685,78687,78690,78692],{"class":141,"line":994},[139,78665,75982],{"class":145},[139,78667,60480],{"class":781},[139,78669,157],{"class":145},[139,78671,3019],{"class":160},[139,78673,3397],{"class":149},[139,78675,78676],{"class":50215},"java",[139,78678,2742],{"class":149},[139,78680,3019],{"class":160},[139,78682,2993],{"class":145},[139,78684,77474],{"class":781},[139,78686,157],{"class":145},[139,78688,78689],{"class":160},"'java'",[139,78691,77984],{"class":145},[139,78693,77485],{"class":2512},[139,78695,78696,78698,78700,78702,78704,78706,78708,78710,78712,78714,78716,78718,78721,78723],{"class":141,"line":999},[139,78697,75982],{"class":145},[139,78699,60480],{"class":781},[139,78701,157],{"class":145},[139,78703,3019],{"class":160},[139,78705,3397],{"class":149},[139,78707,78676],{"class":50215},[139,78709,2742],{"class":149},[139,78711,3019],{"class":160},[139,78713,2993],{"class":145},[139,78715,77474],{"class":781},[139,78717,157],{"class":145},[139,78719,78720],{"class":160},"'Java'",[139,78722,77984],{"class":145},[139,78724,77608],{"class":2512},[139,78726,78727],{"class":141,"line":1006},[139,78728,78729],{"class":2512},"    \u002F\u002F 不区分大小写、\n",[139,78731,78732,78734,78736,78738,78740,78742,78744,78746,78748,78750,78752,78754,78756,78758,78760],{"class":141,"line":1027},[139,78733,75982],{"class":145},[139,78735,60480],{"class":781},[139,78737,157],{"class":145},[139,78739,3019],{"class":160},[139,78741,3397],{"class":149},[139,78743,78676],{"class":50215},[139,78745,2742],{"class":149},[139,78747,3019],{"class":160},[139,78749,2879],{"class":149},[139,78751,2993],{"class":145},[139,78753,77474],{"class":781},[139,78755,157],{"class":145},[139,78757,78720],{"class":160},[139,78759,77984],{"class":145},[139,78761,77485],{"class":2512},[139,78763,78764,78766,78768,78770],{"class":141,"line":1040},[139,78765,13494],{"class":149},[139,78767,76148],{"class":153},[139,78769,15836],{"class":149},[139,78771,78772],{"class":160}," 'java是一门编程语言，学完java工资很高'\n",[139,78774,78775,78777,78780,78782,78785,78788,78790,78792,78794,78796,78799,78801,78804],{"class":141,"line":2160},[139,78776,13494],{"class":149},[139,78778,78779],{"class":153}," result",[139,78781,15836],{"class":149},[139,78783,78784],{"class":145}," str.",[139,78786,78787],{"class":781},"replace",[139,78789,157],{"class":145},[139,78791,3019],{"class":160},[139,78793,78676],{"class":50215},[139,78795,3019],{"class":160},[139,78797,78798],{"class":149},"ig",[139,78800,413],{"class":145},[139,78802,78803],{"class":160},"'前端'",[139,78805,164],{"class":145},[139,78807,78808,78810,78812],{"class":141,"line":2188},[139,78809,75982],{"class":145},[139,78811,60480],{"class":781},[139,78813,78814],{"class":145},"(result)\n",[139,78816,78817,78819,78821],{"class":141,"line":3944},[139,78818,54652],{"class":145},[139,78820,54050],{"class":53538},[139,78822,53545],{"class":145},[139,78824,78825,78827,78829],{"class":141,"line":3963},[139,78826,54022],{"class":145},[139,78828,54037],{"class":53538},[139,78830,53545],{"class":145},[139,78832,78833,78835,78837],{"class":141,"line":3968},[139,78834,54022],{"class":145},[139,78836,52873],{"class":53538},[139,78838,53545],{"class":145},[2348,78840,78841],{},"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":135,"searchDepth":210,"depth":210,"links":78843},[78844,78854,78866,78883,78890,78898],{"id":55595,"depth":210,"text":55596,"children":78845},[78846,78847,78848,78849,78850,78851,78852,78853],{"id":55599,"depth":254,"text":55600},{"id":55632,"depth":254,"text":55633},{"id":55671,"depth":254,"text":55672},{"id":55829,"depth":254,"text":55830},{"id":55877,"depth":254,"text":55878},{"id":56014,"depth":254,"text":56015},{"id":56335,"depth":254,"text":56336},{"id":59323,"depth":254,"text":59324},{"id":59351,"depth":210,"text":59352,"children":78855},[78856,78857,78858,78859,78860,78861,78862,78863,78864,78865],{"id":59355,"depth":254,"text":59356},{"id":59378,"depth":254,"text":59379},{"id":60292,"depth":254,"text":60293},{"id":60982,"depth":254,"text":60983},{"id":61264,"depth":254,"text":61265},{"id":65424,"depth":254,"text":65425},{"id":65594,"depth":254,"text":65595},{"id":65722,"depth":254,"text":65723},{"id":65747,"depth":254,"text":65748},{"id":67135,"depth":254,"text":67136},{"id":68288,"depth":210,"text":68289,"children":78867},[78868,78869,78870,78871,78872,78873,78874,78875,78876,78877,78878,78879,78880,78881,78882],{"id":68292,"depth":254,"text":68293},{"id":68946,"depth":254,"text":68947},{"id":70640,"depth":254,"text":70641},{"id":70681,"depth":254,"text":70682},{"id":70723,"depth":254,"text":70724},{"id":70737,"depth":254,"text":70738},{"id":70786,"depth":254,"text":70787},{"id":70798,"depth":254,"text":70799},{"id":70813,"depth":254,"text":70814},{"id":70849,"depth":254,"text":70850},{"id":70930,"depth":254,"text":70931},{"id":71058,"depth":254,"text":71059},{"id":71070,"depth":254,"text":71071},{"id":71089,"depth":254,"text":71090},{"id":73199,"depth":254,"text":73200},{"id":73218,"depth":210,"text":73219,"children":78884},[78885,78886,78887,78888,78889],{"id":73239,"depth":254,"text":73240},{"id":73259,"depth":254,"text":73260},{"id":73308,"depth":254,"text":73309},{"id":73433,"depth":254,"text":73434},{"id":73614,"depth":254,"text":73615},{"id":73632,"depth":210,"text":73633,"children":78891},[78892,78893,78894,78895,78896,78897],{"id":73647,"depth":254,"text":73648},{"id":73706,"depth":254,"text":73707},{"id":73730,"depth":254,"text":73731},{"id":74050,"depth":254,"text":74051},{"id":74082,"depth":254,"text":74083},{"id":74105,"depth":254,"text":74106},{"id":77173,"depth":210,"text":77174,"children":78899},[78900,78901],{"id":77207,"depth":254,"text":77208},{"id":77246,"depth":254,"text":77247},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55567,"description":2384},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78908,"title":78909,"body":78910,"description":2384,"extension":2385,"meta":95046,"navigation":842,"path":95047,"seo":95048,"stem":95049,"__hash__":95050},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78911,"toc":94982},[78912,78915,78918,78922,78926,78931,78936,78947,78951,78956,78959,78963,78966,78971,78975,78979,78982,78987,78990,78994,78997,79005,79008,79012,79017,79022,79025,79029,79034,79039,79042,79046,79051,79054,79059,79062,79067,79070,79075,79080,79083,79086,79090,79095,79100,79103,79107,79111,79114,79117,79120,79124,79128,79133,79138,79141,79145,79150,79155,79158,79161,79164,79167,79170,79173,79176,79179,79182,79187,79191,79196,79201,79204,79207,79210,79213,79216,79219,79222,79225,79229,79233,79236,79239,79242,79247,79249,79252,79255,79258,79261,79264,79267,79270,79273,79276,79279,79282,79285,79288,79293,79298,79303,79306,79310,79313,79318,79322,79324,79335,79340,79441,79444,79447,79450,79453,79456,79459,79462,79465,79467,79470,79473,79476,79479,79482,79484,79487,79490,79493,79496,79499,79502,79504,79507,79509,79511,79514,79518,79522,79525,79528,79531,79534,79537,79540,79543,79546,79549,79554,79674,79677,79680,79685,79688,79691,79694,79697,79702,79705,79708,79711,79714,79719,79722,79822,79887,79961,79965,79968,79971,79975,79978,79992,80021,80024,80027,80030,80033,80036,80039,80042,80044,80047,80050,80053,80056,80060,80065,80069,80074,80149,80152,80335,80338,80341,80344,80347,80350,80352,80355,80358,80361,80364,80367,80370,80372,80376,80379,80384,80387,80390,80393,80396,80398,80403,80406,80409,80412,80415,80417,80422,80425,80428,80430,80432,80435,80439,80442,80445,80450,80453,80456,80459,80509,80514,80518,80523,80526,80595,80598,80607,80611,80616,80619,80622,80630,80633,80650,82451,82455,82459,82464,82467,82471,82477,82483,82635,82640,82645,82648,82651,82654,82657,82660,82663,82666,82669,82672,82675,82678,82681,82686,82690,82693,82704,82708,82713,82716,82719,82722,82725,82728,82730,82733,82736,82739,82742,82744,82761,82764,82768,82771,82776,82781,82784,82787,82791,82794,82797,82806,82809,82813,82816,82821,82826,82893,82897,82900,82903,82908,82913,82999,83004,83008,83011,83014,83029,83032,83037,83041,83046,83155,83158,83169,83319,83323,83328,83437,83441,83446,83451,83456,83459,83466,83486,83522,83686,83691,83694,83699,83706,83709,83712,83715,83774,83830,83886,83890,83895,84210,84213,84217,84220,84225,84334,84339,84343,84348,84352,84423,84427,84429,84432,84435,84473,84749,84753,84770,84836,84870,84874,84877,84882,84911,84918,84927,84932,84947,84952,84961,84964,85101,85105,85167,85171,85176,85421,85425,85430,85433,85436,85439,85442,85446,85451,87032,87036,87040,87046,87049,87054,87058,87061,87066,87069,87080,87084,87089,87093,87098,87103,87106,87111,87115,87119,87122,87127,87132,87135,87138,87141,87263,87268,87370,87373,87376,87380,87385,87557,87562,87566,87569,87574,87640,87645,87648,87779,87782,87787,87790,87793,87884,87889,87892,87895,87898,87901,87906,87911,87914,87919,87924,87929,87933,87936,87939,87944,87949,87954,87959,88013,88016,88019,88024,88027,88030,88035,88040,88045,88049,88054,88068,88073,88076,88081,88085,88090,88095,88100,88105,88110,88115,88120,88125,88128,88132,88137,88140,88143,88146,88151,88156,88159,88162,88166,88169,88172,88177,88182,88187,88192,88195,88200,88205,88266,88271,88274,88279,89520,89525,89529,89533,89538,89541,89546,89551,89554,89559,89561,89566,89570,89573,89576,89587,89591,89596,89601,89656,89661,89666,89671,89882,89887,89891,89896,89899,89901,89904,89907,90354,90359,90366,90372,90375,90378,90642,90647,90651,90916,90921,90925,90930,90935,90940,90945,91276,91279,91284,91289,91292,91296,91300,91305,91310,91315,91320,91325,91330,91334,91337,91342,91347,91350,91424,91429,91434,91439,91441,91444,91814,91819,91824,91829,91832,91835,91937,91942,91947,92050,92054,92059,92063,92067,92072,92077,92080,92085,92088,92091,92484,92489,92492,92495,92498,92501,93021,93025,93030,93035,93040,93043,93048,93051,93054,93436,93441,93443,93445,93448,93451,93963,93967,94028,94031,94034,94037,94041,94044,94049,94054,94979],[10,78913,78909],{"id":78914},"_4js进阶",[19,78916,78917],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78919,78921],{"id":78920},"_41-作用域","4.1 作用域",[1217,78923,78925],{"id":78924},"_411-局部作用域","4.1.1 局部作用域",[19,78927,78928],{},[3760,78929],{"alt":135,"src":78930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78932,78933],{},[3760,78934],{"alt":135,"src":78935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3437,78937,78938,78941,78944],{},[1763,78939,78940],{},"函数作用域在函数内部",[1763,78942,78943],{},"块级作用域在{}",[1763,78945,78946],{},"对象的那个{}不是作用域，不是块作用域",[1217,78948,78950],{"id":78949},"_412-全局作用域","4.1.2 全局作用域",[19,78952,78953],{},[3760,78954],{"alt":135,"src":78955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78957,78958],{},"window.a=10不要这样写",[1217,78960,78962],{"id":78961},"_413-作用域链","4.1.3 作用域链",[19,78964,78965],{},"变量查找机制",[19,78967,78968],{},[3760,78969],{"alt":135,"src":78970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78972,78974],{"id":78973},"_42-垃圾回收机制","4.2 垃圾回收机制",[1217,78976,78978],{"id":78977},"_421-大体介绍","4.2.1 大体介绍",[19,78980,78981],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78983,78984],{},[3760,78985],{"alt":135,"src":78986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78988,78989],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1217,78991,78993],{"id":78992},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78995,78996],{},"堆栈空间分配区别：",[1760,78998,78999,79002],{},[1763,79000,79001],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1763,79003,79004],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79006,79007],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24265,79009,79011],{"id":79010},"_4221-引用计数","4.2.2.1 引用计数",[19,79013,79014],{},[3760,79015],{"alt":135,"src":79016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79018,79019],{},[3760,79020],{"alt":135,"src":79021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79023,79024],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24265,79026,79028],{"id":79027},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79030,79031],{},[3760,79032],{"alt":135,"src":79033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79035,79036],{},[3760,79037],{"alt":135,"src":79038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79040,79041],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79043,79045],{"id":79044},"_43-闭包","4.3 闭包",[19,79047,79048],{},[3760,79049],{"alt":135,"src":79050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79052,79053],{},"闭包：内层函数+外层函数的变量",[19,79055,79056],{},[3760,79057],{"alt":135,"src":79058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79060,79061],{},"closure就是闭包",[19,79063,79064],{},[3760,79065],{"alt":135,"src":79066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79068,79069],{},"内层函数必须包含外层函数的变量才是闭包",[19,79071,79072],{},[3760,79073],{"alt":135,"src":79074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79076,79077],{},[3760,79078],{"alt":135,"src":79079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79081,79082],{},"闭包可能会引起内存泄漏",[19,79084,79085],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79087,79089],{"id":79088},"_44-变量提升","4.4 变量提升",[19,79091,79092],{},[3760,79093],{"alt":135,"src":79094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79096,79097],{},[3760,79098],{"alt":135,"src":79099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79101,79102],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79104,79106],{"id":79105},"_45-函数进阶","4.5 函数进阶",[1217,79108,79110],{"id":79109},"_451-函数提升","4.5.1 函数提升",[19,79112,79113],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79115,79116],{},"只提升函数声明，不提升函数调用",[54050,79118,79119],{},"\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",[1217,79121,79123],{"id":79122},"_452-函数参数","4.5.2 函数参数",[24265,79125,79127],{"id":79126},"_4521-动态参数","4.5.2.1 动态参数",[19,79129,79130],{},[3760,79131],{"alt":135,"src":79132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79134,79135],{},[3760,79136],{"alt":135,"src":79137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79139,79140],{},"箭头函数里边没有arguments",[24265,79142,79144],{"id":79143},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79146,79147],{},[3760,79148],{"alt":135,"src":79149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79151,79152],{},[3760,79153],{"alt":135,"src":79154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79156,79157],{},"剩余参数使用的时候不需要写...",[19,79159,79160],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79162,79163],{},"  function getSum(a,b,...arr) {",[19,79165,79166],{},"  console.log(11)",[19,79168,79169],{},"  }",[19,79171,79172],{},"  getSum(1,2,3,4)",[19,79174,79175],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79177,79178],{},"  getSum(1,2)",[19,79180,79181],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79183,79184],{},[3760,79185],{"alt":135,"src":79186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24265,79188,79190],{"id":79189},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79192,79193],{},[3760,79194],{"alt":135,"src":79195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79197,79198],{},[3760,79199],{"alt":135,"src":79200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79202,79203],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79205,79206],{},"展开运算符可以用于数组之间的合并：",[19,79208,79209],{},"const arr1 = [1, 2, 3]",[19,79211,79212],{},"const arr2 = [3, 4, 5]",[19,79214,79215],{},"const arr = [...arr1, ...arr2]",[19,79217,79218],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79220,79221],{},"剩余参数：函数参数使用，得到真数组",[19,79223,79224],{},"展开运算符：数组中使用，数组展开",[1217,79226,79228],{"id":79227},"_453-箭头函数","4.5.3 箭头函数",[24265,79230,79232],{"id":79231},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79234,79235],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79237,79238],{},"它不是万能的！！！",[19,79240,79241],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79243,79244],{},[3760,79245],{"alt":135,"src":79246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79248,2486],{},[19,79250,79251],{},"① 只有一个形参的时候，可以省略小括号：",[19,79253,79254],{},"const fn=x=>{console.log(x)}",[19,79256,79257],{},"② 只有一行代码时可以省略大括号：",[19,79259,79260],{},"const fn=x=>console.log(11)",[19,79262,79263],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79265,79266],{},"const fn=x=>x+x",[19,79268,79269],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79271,79272],{},"⑤ 阻止表单默认提交：",[19,79274,79275],{},"const form = document.querySelector('form')",[19,79277,79278],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79280,79281],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79283,79284],{},"const fn=uname=>({uname:uname})",[19,79286,79287],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79289,79290],{},[3760,79291],{"alt":135,"src":79292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79294,79295],{},[3760,79296],{"alt":135,"src":79297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79299,79300],{},[3760,79301],{"alt":135,"src":79302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79304,79305],{},"一定不要忘记用()，有()就理解为自带return",[24265,79307,79309],{"id":79308},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79311,79312],{},"箭头函数是没有动态参数的arguments",[19,79314,79315],{},[3760,79316],{"alt":135,"src":79317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24265,79319,79321],{"id":79320},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79323,13605],{},[1760,79325,79326,79329,79332],{},[1763,79327,79328],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1763,79330,79331],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1763,79333,79334],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79336,79337],{},[3760,79338],{"alt":135,"src":79339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[130,79341,79343],{"className":55302,"code":79342,"language":55304,"meta":135,"style":135},"  \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",[50,79344,79345,79353,79358,79363,79368,79373,79378,79382,79387,79391,79395,79400,79405,79410,79414,79418,79423,79428,79433],{"__ignoreMap":135},[139,79346,79347,79349,79351],{"class":141,"line":142},[139,79348,54380],{"class":145},[139,79350,54050],{"class":53538},[139,79352,53545],{"class":145},[139,79354,79355],{"class":141,"line":210},[139,79356,79357],{"class":145},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[139,79359,79360],{"class":141,"line":254},[139,79361,79362],{"class":145},"    console.log(this) \u002F\u002F指向window\n",[139,79364,79365],{"class":141,"line":262},[139,79366,79367],{"class":145},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[139,79369,79370],{"class":141,"line":313},[139,79371,79372],{"class":145},"    function fn() {\n",[139,79374,79375],{"class":141,"line":462},[139,79376,79377],{"class":145},"      console.log(this)  \u002F\u002F指向window\n",[139,79379,79380],{"class":141,"line":474},[139,79381,4472],{"class":145},[139,79383,79384],{"class":141,"line":484},[139,79385,79386],{"class":145},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[139,79388,79389],{"class":141,"line":989},[139,79390,843],{"emptyLinePlaceholder":842},[139,79392,79393],{"class":141,"line":994},[139,79394,73752],{"class":145},[139,79396,79397],{"class":141,"line":999},[139,79398,79399],{"class":145},"      name: 'andy',\n",[139,79401,79402],{"class":141,"line":1006},[139,79403,79404],{"class":145},"      sayHai: function () {\n",[139,79406,79407],{"class":141,"line":1027},[139,79408,79409],{"class":145},"        console.log(this)\n",[139,79411,79412],{"class":141,"line":1040},[139,79413,54633],{"class":145},[139,79415,79416],{"class":141,"line":2160},[139,79417,4472],{"class":145},[139,79419,79420],{"class":141,"line":2188},[139,79421,79422],{"class":145},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[139,79424,79425],{"class":141,"line":3944},[139,79426,79427],{"class":145},"    \u002F\u002F 2.箭头函数的this\n",[139,79429,79430],{"class":141,"line":3963},[139,79431,79432],{"class":145},"    const fn = () => console.log(this)\n",[139,79434,79435,79437,79439],{"class":141,"line":3968},[139,79436,54652],{"class":145},[139,79438,54050],{"class":53538},[139,79440,53545],{"class":145},[19,79442,79443],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79445,79446],{},"const fn = () => console.log(this)",[19,79448,79449],{},"fn() \u002F\u002F指向window",[19,79451,79452],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79454,79455],{},"①",[19,79457,79458],{},"const obj = {",[19,79460,79461],{},"uname: 'pink老师',",[19,79463,79464],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79466,631],{},[19,79468,79469],{},"调用对象里边的函数",[19,79471,79472],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79474,79475],{},"obj.sayHai()",[19,79477,79478],{},"②",[19,79480,79481],{},"const obj1 = {",[19,79483,79461],{},[19,79485,79486],{},"sayHai: function () {",[19,79488,79489],{},"let i = 10",[19,79491,79492],{},"const count = () => {",[19,79494,79495],{},"console.log(this)",[19,79497,79498],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79500,79501],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79503,631],{},[19,79505,79506],{},"count()",[19,79508,631],{},[19,79510,631],{},[19,79512,79513],{},"obj1.sayHai()",[14,79515,79517],{"id":79516},"_46-解构赋值","4.6 解构赋值",[1217,79519,79521],{"id":79520},"_461-数组解构","4.6.1 数组解构",[19,79523,79524],{},"以前要是使用数组中的值的话：",[19,79526,79527],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79529,79530],{},"const arr=[100,60,80]",[19,79532,79533],{},"const max=arr[0]",[19,79535,79536],{},"const min=arr[1]",[19,79538,79539],{},"const avg=arr[2]",[19,79541,79542],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79544,79545],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79547,79548],{},"这个写法就类似于上边的那种用很多const的方法",[19,79550,79551],{},[3760,79552],{"alt":135,"src":79553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[130,79555,79557],{"className":52871,"code":79556,"language":52873,"meta":135,"style":135},"①变量之间交换值:\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",[50,79558,79559,79564,79569,79574,79579,79584,79588,79592,79597,79601,79606,79611,79615,79620,79625,79636,79646,79651,79656,79661,79665,79669],{"__ignoreMap":135},[139,79560,79561],{"class":141,"line":142},[139,79562,79563],{"class":145},"①变量之间交换值:\n",[139,79565,79566],{"class":141,"line":210},[139,79567,79568],{"class":145},"let a=1\n",[139,79570,79571],{"class":141,"line":254},[139,79572,79573],{"class":145},"let b=2;\n",[139,79575,79576],{"class":141,"line":262},[139,79577,79578],{"class":145},"必须加这行代码，不然就会报错\n",[139,79580,79581],{"class":141,"line":313},[139,79582,79583],{"class":145},"[b,a]=[a,b]\n",[139,79585,79586],{"class":141,"line":462},[139,79587,843],{"emptyLinePlaceholder":842},[139,79589,79590],{"class":141,"line":474},[139,79591,843],{"emptyLinePlaceholder":842},[139,79593,79594],{"class":141,"line":484},[139,79595,79596],{"class":145},"可以写成下面的方式：\n",[139,79598,79599],{"class":141,"line":989},[139,79600,79568],{"class":145},[139,79602,79603],{"class":141,"line":994},[139,79604,79605],{"class":145},"let b=2\n",[139,79607,79608],{"class":141,"line":999},[139,79609,79610],{"class":145},";[b,a]=[a,b]\n",[139,79612,79613],{"class":141,"line":1006},[139,79614,843],{"emptyLinePlaceholder":842},[139,79616,79617],{"class":141,"line":1027},[139,79618,79619],{"class":145},"②排序\n",[139,79621,79622],{"class":141,"line":1040},[139,79623,79624],{"class":145},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[139,79626,79627,79630,79633],{"class":141,"line":2160},[139,79628,79629],{"class":145},"for (let i = 0; i ",[139,79631,796],{"class":79632},"s7hpK",[139,79634,79635],{"class":145}," arr1.length; i++) {\n",[139,79637,79638,79641,79643],{"class":141,"line":2188},[139,79639,79640],{"class":145},"   for (let j = 0; j ",[139,79642,796],{"class":79632},[139,79644,79645],{"class":145}," arr1.length - 1; j++) {\n",[139,79647,79648],{"class":141,"line":3944},[139,79649,79650],{"class":145},"      if (arr1[j] > arr1[j + 1]) {\n",[139,79652,79653],{"class":141,"line":3963},[139,79654,79655],{"class":145},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[139,79657,79658],{"class":141,"line":3968},[139,79659,79660],{"class":145},"       }\n",[139,79662,79663],{"class":141,"line":3982},[139,79664,6587],{"class":145},[139,79666,79667],{"class":141,"line":3987},[139,79668,3862],{"class":145},[139,79670,79671],{"class":141,"line":4014},[139,79672,79673],{"class":145},"console.log(arr1)\n",[19,79675,79676],{},"数组解构的细节：",[19,79678,79679],{},"①变量多，单元值少",[19,79681,79682],{},[3760,79683],{"alt":135,"src":79684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79686,79687],{},"防止出现undefined的方法：",[19,79689,79690],{},"const [a=0,b=0] =[1]",[19,79692,79693],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79695,79696],{},"②变量少，单元值多",[19,79698,79699],{},[3760,79700],{"alt":135,"src":79701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79703,79704],{},"此时可以使用剩余参数来接收多余的值",[19,79706,79707],{},"const [a,b,...c]=[1,2,3,4]",[19,79709,79710],{},"console.log(c) 输出[3,4]",[19,79712,79713],{},"③可以按需导入，忽略某些返回值",[19,79715,79716],{},[3760,79717],{"alt":135,"src":79718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79720,79721],{},"④支持多维数组的结构",[130,79723,79727],{"className":79724,"code":79725,"language":79726,"meta":135,"style":135},"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",[50,79728,79729,79757,79773,79788,79803],{"__ignoreMap":135},[139,79730,79731,79733,79735,79737,79739,79741,79743,79745,79748,79750,79752,79754],{"class":141,"line":142},[139,79732,9066],{"class":149},[139,79734,54070],{"class":145},[139,79736,150],{"class":149},[139,79738,407],{"class":145},[139,79740,410],{"class":153},[139,79742,413],{"class":145},[139,79744,416],{"class":153},[139,79746,79747],{"class":145},", [",[139,79749,421],{"class":153},[139,79751,413],{"class":145},[139,79753,1476],{"class":153},[139,79755,79756],{"class":145},"]]\n",[139,79758,79759,79762,79764,79766,79768,79770],{"class":141,"line":210},[139,79760,79761],{"class":145},"console.",[139,79763,60480],{"class":781},[139,79765,6131],{"class":145},[139,79767,2634],{"class":153},[139,79769,6494],{"class":145},[139,79771,79772],{"class":2512},"  \u002F\u002F1\n",[139,79774,79775,79777,79779,79781,79783,79785],{"class":141,"line":254},[139,79776,79761],{"class":145},[139,79778,60480],{"class":781},[139,79780,6131],{"class":145},[139,79782,410],{"class":153},[139,79784,6494],{"class":145},[139,79786,79787],{"class":2512},"  \u002F\u002F2\n",[139,79789,79790,79792,79794,79796,79798,79800],{"class":141,"line":262},[139,79791,79761],{"class":145},[139,79793,60480],{"class":781},[139,79795,6131],{"class":145},[139,79797,416],{"class":153},[139,79799,6494],{"class":145},[139,79801,79802],{"class":2512},"  \u002F\u002F[3,4]\n",[139,79804,79805,79807,79809,79811,79813,79815,79817,79819],{"class":141,"line":313},[139,79806,79761],{"class":145},[139,79808,60480],{"class":781},[139,79810,6131],{"class":145},[139,79812,416],{"class":153},[139,79814,7179],{"class":145},[139,79816,2634],{"class":153},[139,79818,6494],{"class":145},[139,79820,79821],{"class":2512},"  \u002F\u002F3\n",[130,79823,79825],{"className":79724,"code":79824,"language":79726,"meta":135,"style":135},"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",[50,79826,79827,79854,79865,79876],{"__ignoreMap":135},[139,79828,79829,79831,79834,79836,79838,79840,79842,79844,79846,79848,79850,79852],{"class":141,"line":142},[139,79830,9066],{"class":149},[139,79832,79833],{"class":145}," [a, b, c] ",[139,79835,150],{"class":149},[139,79837,407],{"class":145},[139,79839,410],{"class":153},[139,79841,413],{"class":145},[139,79843,416],{"class":153},[139,79845,79747],{"class":145},[139,79847,421],{"class":153},[139,79849,413],{"class":145},[139,79851,1476],{"class":153},[139,79853,79756],{"class":145},[139,79855,79856,79858,79860,79863],{"class":141,"line":210},[139,79857,79761],{"class":145},[139,79859,60480],{"class":781},[139,79861,79862],{"class":145},"(a)",[139,79864,79772],{"class":2512},[139,79866,79867,79869,79871,79874],{"class":141,"line":254},[139,79868,79761],{"class":145},[139,79870,60480],{"class":781},[139,79872,79873],{"class":145},"(b)",[139,79875,79787],{"class":2512},[139,79877,79878,79880,79882,79885],{"class":141,"line":262},[139,79879,79761],{"class":145},[139,79881,60480],{"class":781},[139,79883,79884],{"class":145},"(c)",[139,79886,79802],{"class":2512},[130,79888,79890],{"className":79724,"code":79889,"language":79726,"meta":135,"style":135},"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",[50,79891,79892,79919,79929,79939,79949],{"__ignoreMap":135},[139,79893,79894,79896,79899,79901,79903,79905,79907,79909,79911,79913,79915,79917],{"class":141,"line":142},[139,79895,9066],{"class":149},[139,79897,79898],{"class":145}," [a, b, [c, d]] ",[139,79900,150],{"class":149},[139,79902,407],{"class":145},[139,79904,410],{"class":153},[139,79906,413],{"class":145},[139,79908,416],{"class":153},[139,79910,79747],{"class":145},[139,79912,421],{"class":153},[139,79914,413],{"class":145},[139,79916,1476],{"class":153},[139,79918,79756],{"class":145},[139,79920,79921,79923,79925,79927],{"class":141,"line":210},[139,79922,79761],{"class":145},[139,79924,60480],{"class":781},[139,79926,79862],{"class":145},[139,79928,79772],{"class":2512},[139,79930,79931,79933,79935,79937],{"class":141,"line":254},[139,79932,79761],{"class":145},[139,79934,60480],{"class":781},[139,79936,79873],{"class":145},[139,79938,79787],{"class":2512},[139,79940,79941,79943,79945,79947],{"class":141,"line":262},[139,79942,79761],{"class":145},[139,79944,60480],{"class":781},[139,79946,79884],{"class":145},[139,79948,79821],{"class":2512},[139,79950,79951,79953,79955,79958],{"class":141,"line":313},[139,79952,79761],{"class":145},[139,79954,60480],{"class":781},[139,79956,79957],{"class":145},"(d)",[139,79959,79960],{"class":2512},"  \u002F\u002F4\n",[1217,79962,79964],{"id":79963},"_462-对象解构","4.6.2 对象解构",[19,79966,79967],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79969,79970],{},"用的非常非常多！！！！！！",[24265,79972,79974],{"id":79973},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79976,79977],{},"基本语法：",[1760,79979,79980,79983,79986,79989],{},[1763,79981,79982],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1763,79984,79985],{},"对象属性的值将被赋值给与属性名相同的变量",[1763,79987,79988],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1763,79990,79991],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[130,79993,79995],{"className":52871,"code":79994,"language":52873,"meta":135,"style":135},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[50,79996,79997,80002,80007,80012,80016],{"__ignoreMap":135},[139,79998,79999],{"class":141,"line":142},[139,80000,80001],{"class":145},"const obj = {\n",[139,80003,80004],{"class":141,"line":210},[139,80005,80006],{"class":145},"   uname: 'pink老师',\n",[139,80008,80009],{"class":141,"line":254},[139,80010,80011],{"class":145},"   age: 18,\n",[139,80013,80014],{"class":141,"line":262},[139,80015,3862],{"class":145},[139,80017,80018],{"class":141,"line":313},[139,80019,80020],{"class":145},"const { uname, age } = obj\n",[19,80022,80023],{},"上方代码这样写等价于：",[19,80025,80026],{},"const uname等价于obj.uname",[19,80028,80029],{},"变量名可以重新改名：",[19,80031,80032],{},"const uname='red老师'",[19,80034,80035],{},"const user={",[19,80037,80038],{},"  uname:'pink老师',",[19,80040,80041],{},"  age:18",[19,80043,631],{},[19,80045,80046],{},"const {uname,age}=user",[19,80048,80049],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80051,80052],{},"const {旧变量名：新变量名}=对象",[19,80054,80055],{},"const {uname:username,age}=user",[24265,80057,80059],{"id":80058},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80061,80062],{},[3760,80063],{"alt":135,"src":80064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24265,80066,80068],{"id":80067},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80070,80071],{},[3760,80072],{"alt":135,"src":80073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[130,80075,80077],{"className":55302,"code":80076,"language":55304,"meta":135,"style":135},"  \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",[50,80078,80079,80087,80092,80097,80102,80107,80112,80117,80122,80127,80131,80136,80141],{"__ignoreMap":135},[139,80080,80081,80083,80085],{"class":141,"line":142},[139,80082,54380],{"class":145},[139,80084,54050],{"class":53538},[139,80086,53545],{"class":145},[139,80088,80089],{"class":141,"line":210},[139,80090,80091],{"class":145},"    const pig = {\n",[139,80093,80094],{"class":141,"line":254},[139,80095,80096],{"class":145},"      name: '佩奇',\n",[139,80098,80099],{"class":141,"line":262},[139,80100,80101],{"class":145},"      family: {\n",[139,80103,80104],{"class":141,"line":313},[139,80105,80106],{"class":145},"        mother: '猪妈妈',\n",[139,80108,80109],{"class":141,"line":462},[139,80110,80111],{"class":145},"        father: '猪爸爸',\n",[139,80113,80114],{"class":141,"line":474},[139,80115,80116],{"class":145},"        sister: '乔治'\n",[139,80118,80119],{"class":141,"line":484},[139,80120,80121],{"class":145},"      },\n",[139,80123,80124],{"class":141,"line":989},[139,80125,80126],{"class":145},"      age: 6\n",[139,80128,80129],{"class":141,"line":994},[139,80130,4472],{"class":145},[139,80132,80133],{"class":141,"line":999},[139,80134,80135],{"class":145},"    \u002F\u002F 多级对象解构\n",[139,80137,80138],{"class":141,"line":1006},[139,80139,80140],{"class":145},"    const { name, family: { mother, father, sister }, age } = pig\n",[139,80142,80143,80145,80147],{"class":141,"line":1027},[139,80144,54652],{"class":145},[139,80146,54050],{"class":53538},[139,80148,53545],{"class":145},[19,80150,80151],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[130,80153,80156],{"className":80154,"code":80155,"language":78676,"meta":135,"style":135},"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",[50,80157,80158,80163,80174,80186,80198,80207,80211,80222,80234,80244,80249,80253,80263,80274,80283,80287,80291,80302,80313,80322,80326,80331],{"__ignoreMap":135},[139,80159,80160],{"class":141,"line":142},[139,80161,80162],{"class":2512},"    \u002F\u002F 这是后台传递过来的数据\n",[139,80164,80165,80167,80170,80172],{"class":141,"line":210},[139,80166,13494],{"class":149},[139,80168,80169],{"class":145}," msg ",[139,80171,150],{"class":149},[139,80173,17840],{"class":145},[139,80175,80176,80179,80181,80184],{"class":141,"line":254},[139,80177,80178],{"class":160},"      \"code\"",[139,80180,3294],{"class":149},[139,80182,80183],{"class":153}," 200",[139,80185,33715],{"class":145},[139,80187,80188,80191,80193,80196],{"class":141,"line":262},[139,80189,80190],{"class":160},"      \"msg\"",[139,80192,3294],{"class":149},[139,80194,80195],{"class":160}," \"获取新闻列表成功\"",[139,80197,33715],{"class":145},[139,80199,80200,80203,80205],{"class":141,"line":313},[139,80201,80202],{"class":160},"      \"data\"",[139,80204,3294],{"class":149},[139,80206,57681],{"class":145},[139,80208,80209],{"class":141,"line":462},[139,80210,4793],{"class":145},[139,80212,80213,80216,80218,80220],{"class":141,"line":474},[139,80214,80215],{"class":160},"          \"id\"",[139,80217,3294],{"class":149},[139,80219,27381],{"class":153},[139,80221,33715],{"class":145},[139,80223,80224,80227,80229,80232],{"class":141,"line":484},[139,80225,80226],{"class":160},"          \"title\"",[139,80228,3294],{"class":149},[139,80230,80231],{"class":160}," \"5G商用自己，三大运用商收入下降\"",[139,80233,33715],{"class":145},[139,80235,80236,80239,80241],{"class":141,"line":989},[139,80237,80238],{"class":160},"          \"count\"",[139,80240,3294],{"class":149},[139,80242,80243],{"class":153}," 58\n",[139,80245,80246],{"class":141,"line":994},[139,80247,80248],{"class":145},"        },\n",[139,80250,80251],{"class":141,"line":999},[139,80252,4793],{"class":145},[139,80254,80255,80257,80259,80261],{"class":141,"line":1006},[139,80256,80215],{"class":160},[139,80258,3294],{"class":149},[139,80260,17024],{"class":153},[139,80262,33715],{"class":145},[139,80264,80265,80267,80269,80272],{"class":141,"line":1027},[139,80266,80226],{"class":160},[139,80268,3294],{"class":149},[139,80270,80271],{"class":160}," \"国际媒体头条速览\"",[139,80273,33715],{"class":145},[139,80275,80276,80278,80280],{"class":141,"line":1040},[139,80277,80238],{"class":160},[139,80279,3294],{"class":149},[139,80281,80282],{"class":153}," 56\n",[139,80284,80285],{"class":141,"line":2160},[139,80286,80248],{"class":145},[139,80288,80289],{"class":141,"line":2188},[139,80290,4793],{"class":145},[139,80292,80293,80295,80297,80300],{"class":141,"line":3944},[139,80294,80215],{"class":160},[139,80296,3294],{"class":149},[139,80298,80299],{"class":153}," 3",[139,80301,33715],{"class":145},[139,80303,80304,80306,80308,80311],{"class":141,"line":3963},[139,80305,80226],{"class":160},[139,80307,3294],{"class":149},[139,80309,80310],{"class":160}," \"乌克兰和俄罗斯持续冲突\"",[139,80312,33715],{"class":145},[139,80314,80315,80317,80319],{"class":141,"line":3968},[139,80316,80238],{"class":160},[139,80318,3294],{"class":149},[139,80320,80321],{"class":153}," 1669\n",[139,80323,80324],{"class":141,"line":3982},[139,80325,80248],{"class":145},[139,80327,80328],{"class":141,"line":3987},[139,80329,80330],{"class":145},"      ]\n",[139,80332,80333],{"class":141,"line":4014},[139,80334,4472],{"class":145},[19,80336,80337],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80339,80340],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80342,80343],{},"\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,80345,80346],{},"function({data}) {",[19,80348,80349],{},"console.log(data)",[19,80351,631],{},[19,80353,80354],{},"render(msg)",[19,80356,80357],{},"实参传递给形参的时候解构了",[19,80359,80360],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80362,80363],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80365,80366],{},"function render({data:mydata}) {",[19,80368,80369],{},"  console.log(data)",[19,80371,631],{},[1217,80373,80375],{"id":80374},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80377,80378],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1760,80380,80381],{},[1763,80382,80383],{},"如果对一个数组进行遍历，有两种方式：",[19,80385,80386],{},"①法1",[19,80388,80389],{},"const arr=[1,2,3]",[19,80391,80392],{},"arr.map(function(item,index) {",[19,80394,80395],{},"  console.log(item)",[19,80397,54699],{},[19,80399,80400],{},[3760,80401],{"alt":135,"src":80402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80404,80405],{},"②法2",[19,80407,80408],{},"const str='pink'",[19,80410,80411],{},"[1,2,3].map(function(item,index) {",[19,80413,80414],{},"console.log(item)",[19,80416,54699],{},[19,80418,80419],{},[3760,80420],{"alt":135,"src":80421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80423,80424],{},"此时会报错",[19,80426,80427],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80429,80414],{},[19,80431,54699],{},[19,80433,80434],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80436,80438],{"id":80437},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80440,80441],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80443,80444],{},"可以理解为加强版的for循环",[19,80446,80447],{},[3760,80448],{"alt":135,"src":80449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80451,80452],{},"里边不写return，不返回数组，只遍历不返回",[19,80454,80455],{},"map是返回数组",[19,80457,80458],{},"forEach主要用于遍历数组对象",[130,80460,80462],{"className":55302,"code":80461,"language":55304,"meta":135,"style":135},"  \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",[50,80463,80464,80472,80477,80482,80487,80492,80496,80501],{"__ignoreMap":135},[139,80465,80466,80468,80470],{"class":141,"line":142},[139,80467,54380],{"class":145},[139,80469,54050],{"class":53538},[139,80471,53545],{"class":145},[139,80473,80474],{"class":141,"line":210},[139,80475,80476],{"class":145},"    const arr = ['red', 'green', 'pink']\n",[139,80478,80479],{"class":141,"line":254},[139,80480,80481],{"class":145},"    const result = arr.forEach(function (item, index) {\n",[139,80483,80484],{"class":141,"line":262},[139,80485,80486],{"class":145},"      console.log(item)\n",[139,80488,80489],{"class":141,"line":313},[139,80490,80491],{"class":145},"      console.log(index)\n",[139,80493,80494],{"class":141,"line":462},[139,80495,35706],{"class":145},[139,80497,80498],{"class":141,"line":474},[139,80499,80500],{"class":145},"    console.log(result)\n",[139,80502,80503,80505,80507],{"class":141,"line":484},[139,80504,54652],{"class":145},[139,80506,54050],{"class":53538},[139,80508,53545],{"class":145},[19,80510,80511],{},[3760,80512],{"alt":135,"src":80513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80515,80517],{"id":80516},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80519,80520],{},[3760,80521],{"alt":135,"src":80522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80524,80525],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[130,80527,80529],{"className":55302,"code":80528,"language":55304,"meta":135,"style":135},"\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",[50,80530,80531,80539,80547,80552,80557,80561,80565,80570,80574,80579,80587],{"__ignoreMap":135},[139,80532,80533,80535,80537],{"class":141,"line":142},[139,80534,796],{"class":145},[139,80536,54037],{"class":53538},[139,80538,53545],{"class":145},[139,80540,80541,80543,80545],{"class":141,"line":210},[139,80542,54380],{"class":145},[139,80544,54050],{"class":53538},[139,80546,53545],{"class":145},[139,80548,80549],{"class":141,"line":254},[139,80550,80551],{"class":145},"    const arr = [10, 20, 30]\n",[139,80553,80554],{"class":141,"line":262},[139,80555,80556],{"class":145},"    const newArr = arr.filter(function (item, index) {\n",[139,80558,80559],{"class":141,"line":313},[139,80560,80486],{"class":145},[139,80562,80563],{"class":141,"line":462},[139,80564,80491],{"class":145},[139,80566,80567],{"class":141,"line":474},[139,80568,80569],{"class":145},"      return item >= 20\n",[139,80571,80572],{"class":141,"line":484},[139,80573,35706],{"class":145},[139,80575,80576],{"class":141,"line":989},[139,80577,80578],{"class":145},"    console.log(newArr)\n",[139,80580,80581,80583,80585],{"class":141,"line":994},[139,80582,54652],{"class":145},[139,80584,54050],{"class":53538},[139,80586,53545],{"class":145},[139,80588,80589,80591,80593],{"class":141,"line":999},[139,80590,54022],{"class":145},[139,80592,54037],{"class":53538},[139,80594,53545],{"class":145},[19,80596,80597],{},"这个也可以写成箭头函数：",[130,80599,80601],{"className":52871,"code":80600,"language":52873,"meta":135,"style":135},"const newArr = arr.filter(item => item >= 20)\n",[50,80602,80603],{"__ignoreMap":135},[139,80604,80605],{"class":141,"line":142},[139,80606,80600],{"class":145},[14,80608,80610],{"id":80609},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80612,80613],{},[3760,80614],{"alt":135,"src":80615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80617,80618],{},"步骤：",[19,80620,80621],{},"①：渲染页面模块",[3437,80623,80624,80627],{},[1763,80625,80626],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1763,80628,80629],{},"用forEach+字符串的形式",[19,80631,80632],{},"②：点击不同需求，显示不同页面内容",[3437,80634,80635,80638,80641,80644,80647],{},[1763,80636,80637],{},"点击采取事件委托方式 .filter",[1763,80639,80640],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1763,80642,80643],{},"筛选条件是根据点击的 data-index 来判断",[1763,80645,80646],{},"可以使用对象解构，把事件对象解构",[1763,80648,80649],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[130,80651,80653],{"className":52871,"code":80652,"language":52873,"meta":135,"style":135},"\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",[50,80654,80655,80665,80679,80683,80691,80705,80725,80737,80745,80751,80761,80771,80781,80785,80789,80795,80808,80820,80830,80842,80846,80850,80857,80870,80882,80899,80917,80930,80934,80938,80950,80960,80964,80968,80975,81016,81043,81053,81057,81061,81069,81081,81085,81089,81097,81109,81121,81132,81136,81140,81149,81161,81172,81176,81180,81189,81201,81213,81217,81221,81228,81238,81250,81262,81277,81281,81285,81293,81309,81319,81329,81339,81351,81355,81359,81369,81380,81390,81394,81402,81410,81414,81422,81437,81463,81488,81513,81532,81540,81554,81559,81564,81569,81574,81579,81587,81595,81600,81611,81616,81626,81636,81646,81656,81660,81664,81673,81682,81691,81700,81704,81708,81717,81726,81735,81744,81748,81752,81761,81770,81779,81788,81792,81796,81805,81814,81823,81832,81836,81840,81849,81858,81867,81876,81880,81884,81893,81902,81911,81920,81924,81928,81937,81946,81954,81963,81967,81971,81975,81980,81992,81997,82009,82013,82030,82057,82066,82071,82081,82091,82100,82105,82110,82114,82119,82136,82140,82145,82153,82158,82185,82190,82210,82215,82227,82232,82237,82242,82253,82267,82304,82322,82355,82372,82396,82400,82405,82411,82415,82419,82423,82431,82439,82443],{"__ignoreMap":135},[139,80656,80657,80659,80661,80663],{"class":141,"line":142},[139,80658,53535],{"class":145},[139,80660,53539],{"class":53538},[139,80662,53542],{"class":781},[139,80664,53545],{"class":145},[139,80666,80667,80669,80671,80673,80675,80677],{"class":141,"line":210},[139,80668,796],{"class":145},[139,80670,52873],{"class":53538},[139,80672,53554],{"class":781},[139,80674,150],{"class":145},[139,80676,53559],{"class":160},[139,80678,53545],{"class":145},[139,80680,80681],{"class":141,"line":254},[139,80682,843],{"emptyLinePlaceholder":842},[139,80684,80685,80687,80689],{"class":141,"line":262},[139,80686,796],{"class":145},[139,80688,53572],{"class":53538},[139,80690,53545],{"class":145},[139,80692,80693,80695,80697,80699,80701,80703],{"class":141,"line":313},[139,80694,54380],{"class":145},[139,80696,53582],{"class":53538},[139,80698,53585],{"class":781},[139,80700,150],{"class":145},[139,80702,53590],{"class":160},[139,80704,53545],{"class":145},[139,80706,80707,80709,80711,80713,80715,80717,80719,80721,80723],{"class":141,"line":462},[139,80708,54380],{"class":145},[139,80710,53582],{"class":53538},[139,80712,17189],{"class":781},[139,80714,150],{"class":145},[139,80716,53629],{"class":160},[139,80718,53609],{"class":781},[139,80720,150],{"class":145},[139,80722,53636],{"class":160},[139,80724,53545],{"class":145},[139,80726,80727,80729,80731,80733,80735],{"class":141,"line":474},[139,80728,54380],{"class":145},[139,80730,53645],{"class":53538},[139,80732,53648],{"class":145},[139,80734,53645],{"class":53538},[139,80736,53545],{"class":145},[139,80738,80739,80741,80743],{"class":141,"line":484},[139,80740,54380],{"class":145},[139,80742,2348],{"class":53538},[139,80744,53545],{"class":145},[139,80746,80747,80749],{"class":141,"line":989},[139,80748,8677],{"class":53538},[139,80750,17840],{"class":145},[139,80752,80753,80755,80757,80759],{"class":141,"line":994},[139,80754,56929],{"class":153},[139,80756,2265],{"class":145},[139,80758,2634],{"class":153},[139,80760,3591],{"class":145},[139,80762,80763,80765,80767,80769],{"class":141,"line":999},[139,80764,56940],{"class":153},[139,80766,2265],{"class":145},[139,80768,2634],{"class":153},[139,80770,3591],{"class":145},[139,80772,80773,80775,80777,80779],{"class":141,"line":1006},[139,80774,74825],{"class":153},[139,80776,2265],{"class":145},[139,80778,62738],{"class":153},[139,80780,3591],{"class":145},[139,80782,80783],{"class":141,"line":1027},[139,80784,4472],{"class":145},[139,80786,80787],{"class":141,"line":1040},[139,80788,843],{"emptyLinePlaceholder":842},[139,80790,80791,80793],{"class":141,"line":2160},[139,80792,64356],{"class":781},[139,80794,17840],{"class":145},[139,80796,80797,80799,80801,80804,80806],{"class":141,"line":2188},[139,80798,57005],{"class":153},[139,80800,2265],{"class":145},[139,80802,80803],{"class":153},"990",[139,80805,53729],{"class":149},[139,80807,3591],{"class":145},[139,80809,80810,80812,80814,80816,80818],{"class":141,"line":3944},[139,80811,56940],{"class":153},[139,80813,2265],{"class":145},[139,80815,2634],{"class":153},[139,80817,53793],{"class":153},[139,80819,3591],{"class":145},[139,80821,80822,80824,80826,80828],{"class":141,"line":3963},[139,80823,57243],{"class":153},[139,80825,2265],{"class":145},[139,80827,53714],{"class":153},[139,80829,3591],{"class":145},[139,80831,80832,80835,80837,80840],{"class":141,"line":3968},[139,80833,80834],{"class":153},"      flex-wrap",[139,80836,2265],{"class":145},[139,80838,80839],{"class":153},"wrap",[139,80841,3591],{"class":145},[139,80843,80844],{"class":141,"line":3982},[139,80845,4472],{"class":145},[139,80847,80848],{"class":141,"line":3987},[139,80849,843],{"emptyLinePlaceholder":842},[139,80851,80852,80855],{"class":141,"line":4014},[139,80853,80854],{"class":781},"    .item",[139,80856,17840],{"class":145},[139,80858,80859,80861,80863,80866,80868],{"class":141,"line":4019},[139,80860,57005],{"class":153},[139,80862,2265],{"class":145},[139,80864,80865],{"class":153},"240",[139,80867,53729],{"class":149},[139,80869,3591],{"class":145},[139,80871,80872,80874,80876,80878,80880],{"class":141,"line":4036},[139,80873,64233],{"class":153},[139,80875,2265],{"class":145},[139,80877,536],{"class":153},[139,80879,53729],{"class":149},[139,80881,3591],{"class":145},[139,80883,80884,80886,80888,80890,80892,80895,80897],{"class":141,"line":4041},[139,80885,56929],{"class":153},[139,80887,2265],{"class":145},[139,80889,3135],{"class":153},[139,80891,53729],{"class":149},[139,80893,80894],{"class":153}," 30",[139,80896,53729],{"class":149},[139,80898,3591],{"class":145},[139,80900,80901,80903,80905,80907,80910,80913,80915],{"class":141,"line":4046},[139,80902,64093],{"class":153},[139,80904,2265],{"class":145},[139,80906,30381],{"class":153},[139,80908,80909],{"class":153}," ease",[139,80911,80912],{"class":153}," .5",[139,80914,3130],{"class":149},[139,80916,3591],{"class":145},[139,80918,80919,80922,80924,80926,80928],{"class":141,"line":4051},[139,80920,80921],{"class":153},"      margin-bottom",[139,80923,2265],{"class":145},[139,80925,3135],{"class":153},[139,80927,53729],{"class":149},[139,80929,3591],{"class":145},[139,80931,80932],{"class":141,"line":4065},[139,80933,4472],{"class":145},[139,80935,80936],{"class":141,"line":4070},[139,80937,843],{"emptyLinePlaceholder":842},[139,80939,80940,80943,80945,80948],{"class":141,"line":4860},[139,80941,80942],{"class":781},"    .item:nth-child",[139,80944,157],{"class":145},[139,80946,80947],{"class":153},"4n",[139,80949,14714],{"class":145},[139,80951,80952,80954,80956,80958],{"class":141,"line":4874},[139,80953,64233],{"class":153},[139,80955,2265],{"class":145},[139,80957,2634],{"class":153},[139,80959,3591],{"class":145},[139,80961,80962],{"class":141,"line":4882},[139,80963,4472],{"class":145},[139,80965,80966],{"class":141,"line":4887},[139,80967,843],{"emptyLinePlaceholder":842},[139,80969,80970,80973],{"class":141,"line":4893},[139,80971,80972],{"class":781},"    .item:hover",[139,80974,17840],{"class":145},[139,80976,80977,80980,80982,80984,80986,80988,80990,80992,80994,80997,80999,81001,81003,81005,81007,81009,81011,81014],{"class":141,"line":4899},[139,80978,80979],{"class":153},"      box-shadow",[139,80981,2265],{"class":145},[139,80983,2634],{"class":153},[139,80985,53729],{"class":149},[139,80987,799],{"class":153},[139,80989,53729],{"class":149},[139,80991,4433],{"class":153},[139,80993,53729],{"class":149},[139,80995,80996],{"class":153}," rgba",[139,80998,157],{"class":145},[139,81000,2634],{"class":153},[139,81002,413],{"class":145},[139,81004,2634],{"class":153},[139,81006,413],{"class":145},[139,81008,2634],{"class":153},[139,81010,413],{"class":145},[139,81012,81013],{"class":153},".2",[139,81015,5002],{"class":145},[139,81017,81018,81021,81023,81026,81028,81030,81032,81035,81037,81039,81041],{"class":141,"line":4904},[139,81019,81020],{"class":153},"      transform",[139,81022,2265],{"class":145},[139,81024,81025],{"class":153},"translate3d",[139,81027,157],{"class":145},[139,81029,2634],{"class":153},[139,81031,413],{"class":145},[139,81033,81034],{"class":153},"-4",[139,81036,53729],{"class":149},[139,81038,413],{"class":145},[139,81040,2634],{"class":153},[139,81042,5002],{"class":145},[139,81044,81045,81047,81049,81051],{"class":141,"line":10222},[139,81046,64258],{"class":153},[139,81048,2265],{"class":145},[139,81050,64263],{"class":153},[139,81052,3591],{"class":145},[139,81054,81055],{"class":141,"line":10246},[139,81056,4472],{"class":145},[139,81058,81059],{"class":141,"line":10251},[139,81060,843],{"emptyLinePlaceholder":842},[139,81062,81063,81065,81067],{"class":141,"line":10257},[139,81064,80854],{"class":781},[139,81066,57849],{"class":53538},[139,81068,17840],{"class":145},[139,81070,81071,81073,81075,81077,81079],{"class":141,"line":10284},[139,81072,57005],{"class":153},[139,81074,2265],{"class":145},[139,81076,1017],{"class":153},[139,81078,2766],{"class":149},[139,81080,3591],{"class":145},[139,81082,81083],{"class":141,"line":10289},[139,81084,4472],{"class":145},[139,81086,81087],{"class":141,"line":10295},[139,81088,843],{"emptyLinePlaceholder":842},[139,81090,81091,81093,81095],{"class":141,"line":10307},[139,81092,80854],{"class":781},[139,81094,64537],{"class":781},[139,81096,17840],{"class":145},[139,81098,81099,81101,81103,81105,81107],{"class":141,"line":10319},[139,81100,57156],{"class":153},[139,81102,2265],{"class":145},[139,81104,3085],{"class":153},[139,81106,53729],{"class":149},[139,81108,3591],{"class":145},[139,81110,81111,81113,81115,81117,81119],{"class":141,"line":10331},[139,81112,80921],{"class":153},[139,81114,2265],{"class":145},[139,81116,536],{"class":153},[139,81118,53729],{"class":149},[139,81120,3591],{"class":145},[139,81122,81123,81125,81127,81130],{"class":141,"line":11990},[139,81124,59650],{"class":153},[139,81126,2265],{"class":145},[139,81128,81129],{"class":153},"#666",[139,81131,3591],{"class":145},[139,81133,81134],{"class":141,"line":12015},[139,81135,4472],{"class":145},[139,81137,81138],{"class":141,"line":12038},[139,81139,843],{"emptyLinePlaceholder":842},[139,81141,81142,81144,81147],{"class":141,"line":12062},[139,81143,80854],{"class":781},[139,81145,81146],{"class":781}," .price",[139,81148,17840],{"class":145},[139,81150,81151,81153,81155,81157,81159],{"class":141,"line":12067},[139,81152,57156],{"class":153},[139,81154,2265],{"class":145},[139,81156,3185],{"class":153},[139,81158,53729],{"class":149},[139,81160,3591],{"class":145},[139,81162,81163,81165,81167,81170],{"class":141,"line":12072},[139,81164,59650],{"class":153},[139,81166,2265],{"class":145},[139,81168,81169],{"class":153},"firebrick",[139,81171,3591],{"class":145},[139,81173,81174],{"class":141,"line":12077},[139,81175,4472],{"class":145},[139,81177,81178],{"class":141,"line":12086},[139,81179,843],{"emptyLinePlaceholder":842},[139,81181,81182,81184,81187],{"class":141,"line":12091},[139,81183,80854],{"class":781},[139,81185,81186],{"class":781}," .price::before",[139,81188,17840],{"class":145},[139,81190,81191,81194,81196,81199],{"class":141,"line":12097},[139,81192,81193],{"class":153},"      content",[139,81195,2265],{"class":145},[139,81197,81198],{"class":160},"'￥'",[139,81200,3591],{"class":145},[139,81202,81203,81205,81207,81209,81211],{"class":141,"line":12118},[139,81204,57156],{"class":153},[139,81206,2265],{"class":145},[139,81208,2984],{"class":153},[139,81210,53729],{"class":149},[139,81212,3591],{"class":145},[139,81214,81215],{"class":141,"line":12124},[139,81216,4472],{"class":145},[139,81218,81219],{"class":141,"line":12138},[139,81220,843],{"emptyLinePlaceholder":842},[139,81222,81223,81226],{"class":141,"line":12144},[139,81224,81225],{"class":781},"    .filter",[139,81227,17840],{"class":145},[139,81229,81230,81232,81234,81236],{"class":141,"line":12171},[139,81231,57243],{"class":153},[139,81233,2265],{"class":145},[139,81235,53714],{"class":153},[139,81237,3591],{"class":145},[139,81239,81240,81242,81244,81246,81248],{"class":141,"line":12180},[139,81241,57005],{"class":153},[139,81243,2265],{"class":145},[139,81245,80803],{"class":153},[139,81247,53729],{"class":149},[139,81249,3591],{"class":145},[139,81251,81252,81254,81256,81258,81260],{"class":141,"line":12186},[139,81253,56940],{"class":153},[139,81255,2265],{"class":145},[139,81257,2634],{"class":153},[139,81259,53793],{"class":153},[139,81261,3591],{"class":145},[139,81263,81264,81266,81268,81270,81272,81274],{"class":141,"line":12194},[139,81265,56929],{"class":153},[139,81267,2265],{"class":145},[139,81269,3091],{"class":153},[139,81271,53729],{"class":149},[139,81273,80894],{"class":153},[139,81275,81276],{"class":149},"px\n",[139,81278,81279],{"class":141,"line":12199},[139,81280,4472],{"class":145},[139,81282,81283],{"class":141,"line":18871},[139,81284,843],{"emptyLinePlaceholder":842},[139,81286,81287,81289,81291],{"class":141,"line":18877},[139,81288,81225],{"class":781},[139,81290,3696],{"class":53538},[139,81292,17840],{"class":145},[139,81294,81295,81297,81299,81301,81303,81305,81307],{"class":141,"line":18900},[139,81296,56929],{"class":153},[139,81298,2265],{"class":145},[139,81300,536],{"class":153},[139,81302,53729],{"class":149},[139,81304,11224],{"class":153},[139,81306,53729],{"class":149},[139,81308,3591],{"class":145},[139,81310,81311,81313,81315,81317],{"class":141,"line":18906},[139,81312,63954],{"class":153},[139,81314,2265],{"class":145},[139,81316,64051],{"class":153},[139,81318,3591],{"class":145},[139,81320,81321,81323,81325,81327],{"class":141,"line":18929},[139,81322,59650],{"class":153},[139,81324,2265],{"class":145},[139,81326,81129],{"class":153},[139,81328,3591],{"class":145},[139,81330,81331,81333,81335,81337],{"class":141,"line":18943},[139,81332,66202],{"class":153},[139,81334,2265],{"class":145},[139,81336,56971],{"class":153},[139,81338,3591],{"class":145},[139,81340,81341,81343,81345,81347,81349],{"class":141,"line":18963},[139,81342,63983],{"class":153},[139,81344,2265],{"class":145},[139,81346,3135],{"class":153},[139,81348,53729],{"class":149},[139,81350,3591],{"class":145},[139,81352,81353],{"class":141,"line":18969},[139,81354,4472],{"class":145},[139,81356,81357],{"class":141,"line":18980},[139,81358,843],{"emptyLinePlaceholder":842},[139,81360,81361,81363,81365,81367],{"class":141,"line":19003},[139,81362,81225],{"class":781},[139,81364,3696],{"class":53538},[139,81366,64133],{"class":781},[139,81368,17840],{"class":145},[139,81370,81371,81373,81375,81378],{"class":141,"line":19025},[139,81372,57118],{"class":153},[139,81374,2265],{"class":145},[139,81376,81377],{"class":153},"#05943c",[139,81379,3591],{"class":145},[139,81381,81382,81384,81386,81388],{"class":141,"line":19030},[139,81383,59650],{"class":153},[139,81385,2265],{"class":145},[139,81387,63075],{"class":153},[139,81389,3591],{"class":145},[139,81391,81392],{"class":141,"line":19036},[139,81393,4472],{"class":145},[139,81395,81396,81398,81400],{"class":141,"line":19050},[139,81397,54652],{"class":145},[139,81399,2348],{"class":53538},[139,81401,53545],{"class":145},[139,81403,81404,81406,81408],{"class":141,"line":19063},[139,81405,54022],{"class":145},[139,81407,53572],{"class":53538},[139,81409,53545],{"class":145},[139,81411,81412],{"class":141,"line":19068},[139,81413,843],{"emptyLinePlaceholder":842},[139,81415,81416,81418,81420],{"class":141,"line":19082},[139,81417,796],{"class":145},[139,81419,54037],{"class":53538},[139,81421,53545],{"class":145},[139,81423,81424,81426,81428,81430,81432,81435],{"class":141,"line":19087},[139,81425,54380],{"class":145},[139,81427,53848],{"class":53538},[139,81429,55721],{"class":781},[139,81431,150],{"class":145},[139,81433,81434],{"class":160},"\"filter\"",[139,81436,53545],{"class":145},[139,81438,81439,81441,81443,81445,81447,81449,81452,81454,81456,81459,81461],{"class":141,"line":19093},[139,81440,53579],{"class":145},[139,81442,2680],{"class":53538},[139,81444,63290],{"class":781},[139,81446,150],{"class":145},[139,81448,63295],{"class":160},[139,81450,81451],{"class":781}," data-index",[139,81453,150],{"class":145},[139,81455,5959],{"class":160},[139,81457,81458],{"class":145},">0-100元\u003C\u002F",[139,81460,2680],{"class":53538},[139,81462,53545],{"class":145},[139,81464,81465,81467,81469,81471,81473,81475,81477,81479,81481,81484,81486],{"class":141,"line":19098},[139,81466,53579],{"class":145},[139,81468,2680],{"class":53538},[139,81470,63290],{"class":781},[139,81472,150],{"class":145},[139,81474,63295],{"class":160},[139,81476,81451],{"class":781},[139,81478,150],{"class":145},[139,81480,5982],{"class":160},[139,81482,81483],{"class":145},">100-300元\u003C\u002F",[139,81485,2680],{"class":53538},[139,81487,53545],{"class":145},[139,81489,81490,81492,81494,81496,81498,81500,81502,81504,81506,81509,81511],{"class":141,"line":19112},[139,81491,53579],{"class":145},[139,81493,2680],{"class":53538},[139,81495,63290],{"class":781},[139,81497,150],{"class":145},[139,81499,63295],{"class":160},[139,81501,81451],{"class":781},[139,81503,150],{"class":145},[139,81505,5995],{"class":160},[139,81507,81508],{"class":145},">300元以上\u003C\u002F",[139,81510,2680],{"class":53538},[139,81512,53545],{"class":145},[139,81514,81515,81517,81519,81521,81523,81525,81528,81530],{"class":141,"line":19117},[139,81516,53579],{"class":145},[139,81518,2680],{"class":53538},[139,81520,63290],{"class":781},[139,81522,150],{"class":145},[139,81524,63295],{"class":160},[139,81526,81527],{"class":145},">全部区间\u003C\u002F",[139,81529,2680],{"class":53538},[139,81531,53545],{"class":145},[139,81533,81534,81536,81538],{"class":141,"line":19122},[139,81535,54652],{"class":145},[139,81537,53848],{"class":53538},[139,81539,53545],{"class":145},[139,81541,81542,81544,81546,81548,81550,81552],{"class":141,"line":19136},[139,81543,54380],{"class":145},[139,81545,53848],{"class":53538},[139,81547,55721],{"class":781},[139,81549,150],{"class":145},[139,81551,64841],{"class":160},[139,81553,53545],{"class":145},[139,81555,81556],{"class":141,"line":19148},[139,81557,81558],{"class":2512},"    \u003C!-- \u003Cdiv class=\"item\">\n",[139,81560,81561],{"class":141,"line":19153},[139,81562,81563],{"class":2512},"      \u003Cimg src=\"\" alt=\"\">\n",[139,81565,81566],{"class":141,"line":19166},[139,81567,81568],{"class":2512},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[139,81570,81571],{"class":141,"line":19171},[139,81572,81573],{"class":2512},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[139,81575,81576],{"class":141,"line":19176},[139,81577,81578],{"class":2512},"    \u003C\u002Fdiv> -->\n",[139,81580,81581,81583,81585],{"class":141,"line":19181},[139,81582,54652],{"class":145},[139,81584,53848],{"class":53538},[139,81586,53545],{"class":145},[139,81588,81589,81591,81593],{"class":141,"line":19194},[139,81590,54380],{"class":145},[139,81592,54050],{"class":53538},[139,81594,53545],{"class":145},[139,81596,81597],{"class":141,"line":19199},[139,81598,81599],{"class":2512},"    \u002F\u002F 2. 初始化数据\n",[139,81601,81602,81604,81607,81609],{"class":141,"line":34880},[139,81603,13494],{"class":149},[139,81605,81606],{"class":153}," goodsList",[139,81608,15836],{"class":149},[139,81610,57681],{"class":145},[139,81612,81613],{"class":141,"line":34886},[139,81614,81615],{"class":145},"      {\n",[139,81617,81618,81621,81624],{"class":141,"line":34892},[139,81619,81620],{"class":145},"        id: ",[139,81622,81623],{"class":160},"'4001172'",[139,81625,33715],{"class":145},[139,81627,81628,81631,81634],{"class":141,"line":34898},[139,81629,81630],{"class":145},"        name: ",[139,81632,81633],{"class":160},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[139,81635,33715],{"class":145},[139,81637,81638,81641,81644],{"class":141,"line":34904},[139,81639,81640],{"class":145},"        price: ",[139,81642,81643],{"class":160},"'289.00'",[139,81645,33715],{"class":145},[139,81647,81648,81651,81654],{"class":141,"line":34915},[139,81649,81650],{"class":145},"        picture: ",[139,81652,81653],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[139,81655,33715],{"class":145},[139,81657,81658],{"class":141,"line":34921},[139,81659,80121],{"class":145},[139,81661,81662],{"class":141,"line":34941},[139,81663,81615],{"class":145},[139,81665,81666,81668,81671],{"class":141,"line":34947},[139,81667,81620],{"class":145},[139,81669,81670],{"class":160},"'4001594'",[139,81672,33715],{"class":145},[139,81674,81675,81677,81680],{"class":141,"line":34958},[139,81676,81630],{"class":145},[139,81678,81679],{"class":160},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[139,81681,33715],{"class":145},[139,81683,81684,81686,81689],{"class":141,"line":34964},[139,81685,81640],{"class":145},[139,81687,81688],{"class":160},"'288.00'",[139,81690,33715],{"class":145},[139,81692,81693,81695,81698],{"class":141,"line":34970},[139,81694,81650],{"class":145},[139,81696,81697],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[139,81699,33715],{"class":145},[139,81701,81702],{"class":141,"line":34976},[139,81703,80121],{"class":145},[139,81705,81706],{"class":141,"line":34982},[139,81707,81615],{"class":145},[139,81709,81710,81712,81715],{"class":141,"line":34988},[139,81711,81620],{"class":145},[139,81713,81714],{"class":160},"'4001009'",[139,81716,33715],{"class":145},[139,81718,81719,81721,81724],{"class":141,"line":34994},[139,81720,81630],{"class":145},[139,81722,81723],{"class":160},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[139,81725,33715],{"class":145},[139,81727,81728,81730,81733],{"class":141,"line":35000},[139,81729,81640],{"class":145},[139,81731,81732],{"class":160},"'109.00'",[139,81734,33715],{"class":145},[139,81736,81737,81739,81742],{"class":141,"line":35020},[139,81738,81650],{"class":145},[139,81740,81741],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[139,81743,33715],{"class":145},[139,81745,81746],{"class":141,"line":35026},[139,81747,80121],{"class":145},[139,81749,81750],{"class":141,"line":35042},[139,81751,81615],{"class":145},[139,81753,81754,81756,81759],{"class":141,"line":35048},[139,81755,81620],{"class":145},[139,81757,81758],{"class":160},"'4001874'",[139,81760,33715],{"class":145},[139,81762,81763,81765,81768],{"class":141,"line":35062},[139,81764,81630],{"class":145},[139,81766,81767],{"class":160},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[139,81769,33715],{"class":145},[139,81771,81772,81774,81777],{"class":141,"line":35068},[139,81773,81640],{"class":145},[139,81775,81776],{"class":160},"'488.00'",[139,81778,33715],{"class":145},[139,81780,81781,81783,81786],{"class":141,"line":35083},[139,81782,81650],{"class":145},[139,81784,81785],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[139,81787,33715],{"class":145},[139,81789,81790],{"class":141,"line":35089},[139,81791,80121],{"class":145},[139,81793,81794],{"class":141,"line":35098},[139,81795,81615],{"class":145},[139,81797,81798,81800,81803],{"class":141,"line":35104},[139,81799,81620],{"class":145},[139,81801,81802],{"class":160},"'4001649'",[139,81804,33715],{"class":145},[139,81806,81807,81809,81812],{"class":141,"line":35113},[139,81808,81630],{"class":145},[139,81810,81811],{"class":160},"'大师监制龙泉青瓷茶叶罐'",[139,81813,33715],{"class":145},[139,81815,81816,81818,81821],{"class":141,"line":35119},[139,81817,81640],{"class":145},[139,81819,81820],{"class":160},"'139.00'",[139,81822,33715],{"class":145},[139,81824,81825,81827,81830],{"class":141,"line":35125},[139,81826,81650],{"class":145},[139,81828,81829],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[139,81831,33715],{"class":145},[139,81833,81834],{"class":141,"line":35134},[139,81835,80121],{"class":145},[139,81837,81838],{"class":141,"line":35140},[139,81839,81615],{"class":145},[139,81841,81842,81844,81847],{"class":141,"line":35151},[139,81843,81620],{"class":145},[139,81845,81846],{"class":160},"'3997185'",[139,81848,33715],{"class":145},[139,81850,81851,81853,81856],{"class":141,"line":35157},[139,81852,81630],{"class":145},[139,81854,81855],{"class":160},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[139,81857,33715],{"class":145},[139,81859,81860,81862,81865],{"class":141,"line":35176},[139,81861,81640],{"class":145},[139,81863,81864],{"class":160},"'108.00'",[139,81866,33715],{"class":145},[139,81868,81869,81871,81874],{"class":141,"line":35182},[139,81870,81650],{"class":145},[139,81872,81873],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[139,81875,33715],{"class":145},[139,81877,81878],{"class":141,"line":35193},[139,81879,80121],{"class":145},[139,81881,81882],{"class":141,"line":35199},[139,81883,81615],{"class":145},[139,81885,81886,81888,81891],{"class":141,"line":35219},[139,81887,81620],{"class":145},[139,81889,81890],{"class":160},"'3997403'",[139,81892,33715],{"class":145},[139,81894,81895,81897,81900],{"class":141,"line":35235},[139,81896,81630],{"class":145},[139,81898,81899],{"class":160},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[139,81901,33715],{"class":145},[139,81903,81904,81906,81909],{"class":141,"line":35241},[139,81905,81640],{"class":145},[139,81907,81908],{"class":160},"'100.00'",[139,81910,33715],{"class":145},[139,81912,81913,81915,81918],{"class":141,"line":35255},[139,81914,81650],{"class":145},[139,81916,81917],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[139,81919,33715],{"class":145},[139,81921,81922],{"class":141,"line":35261},[139,81923,80121],{"class":145},[139,81925,81926],{"class":141,"line":35267},[139,81927,81615],{"class":145},[139,81929,81930,81932,81935],{"class":141,"line":35278},[139,81931,81620],{"class":145},[139,81933,81934],{"class":160},"'3998274'",[139,81936,33715],{"class":145},[139,81938,81939,81941,81944],{"class":141,"line":35284},[139,81940,81630],{"class":145},[139,81942,81943],{"class":160},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[139,81945,33715],{"class":145},[139,81947,81948,81950,81952],{"class":141,"line":35290},[139,81949,81640],{"class":145},[139,81951,81820],{"class":160},[139,81953,33715],{"class":145},[139,81955,81956,81958,81961],{"class":141,"line":35300},[139,81957,81650],{"class":145},[139,81959,81960],{"class":160},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[139,81962,33715],{"class":145},[139,81964,81965],{"class":141,"line":35306},[139,81966,80121],{"class":145},[139,81968,81969],{"class":141,"line":35317},[139,81970,55344],{"class":145},[139,81972,81973],{"class":141,"line":35323},[139,81974,843],{"emptyLinePlaceholder":842},[139,81976,81977],{"class":141,"line":35333},[139,81978,81979],{"class":2512},"    \u002F\u002F 1.渲染函数\n",[139,81981,81982,81984,81986,81988,81990],{"class":141,"line":35338},[139,81983,72314],{"class":149},[139,81985,72317],{"class":781},[139,81987,157],{"class":145},[139,81989,6160],{"class":2111},[139,81991,14714],{"class":145},[139,81993,81994],{"class":141,"line":35344},[139,81995,81996],{"class":2512},"      \u002F\u002F 声明空字符串\n",[139,81998,81999,82002,82005,82007],{"class":141,"line":35392},[139,82000,82001],{"class":149},"      let",[139,82003,82004],{"class":145}," str ",[139,82006,150],{"class":149},[139,82008,72334],{"class":160},[139,82010,82011],{"class":141,"line":35439},[139,82012,72339],{"class":2512},[139,82014,82015,82017,82020,82022,82025,82028],{"class":141,"line":35444},[139,82016,60240],{"class":145},[139,82018,82019],{"class":781},"forEach",[139,82021,157],{"class":145},[139,82023,82024],{"class":2111},"item",[139,82026,82027],{"class":149}," =>",[139,82029,17840],{"class":145},[139,82031,82032,82034,82037,82039,82041,82044,82046,82049,82052,82054],{"class":141,"line":35450},[139,82033,63503],{"class":149},[139,82035,82036],{"class":145}," { ",[139,82038,1676],{"class":153},[139,82040,413],{"class":145},[139,82042,82043],{"class":153},"price",[139,82045,413],{"class":145},[139,82047,82048],{"class":153},"picture",[139,82050,82051],{"class":145}," } ",[139,82053,150],{"class":149},[139,82055,82056],{"class":145}," item\n",[139,82058,82059,82062,82064],{"class":141,"line":35469},[139,82060,82061],{"class":145},"        str ",[139,82063,11751],{"class":149},[139,82065,72398],{"class":160},[139,82067,82068],{"class":141,"line":35475},[139,82069,82070],{"class":160},"          \u003Cdiv class=\"item\">\n",[139,82072,82073,82076,82078],{"class":141,"line":35494},[139,82074,82075],{"class":160},"            \u003Cimg src=\"${",[139,82077,82048],{"class":145},[139,82079,82080],{"class":160},"}\" alt=\"\">\n",[139,82082,82083,82086,82088],{"class":141,"line":35500},[139,82084,82085],{"class":160},"            \u003Cp class=\"name\">${",[139,82087,1676],{"class":145},[139,82089,82090],{"class":160},"}\u003C\u002Fp>\n",[139,82092,82093,82096,82098],{"class":141,"line":35506},[139,82094,82095],{"class":160},"            \u003Cp class=\"price\">${",[139,82097,82043],{"class":145},[139,82099,82090],{"class":160},[139,82101,82102],{"class":141,"line":35516},[139,82103,82104],{"class":160},"          \u003C\u002Fdiv>\n",[139,82106,82107],{"class":141,"line":35521},[139,82108,82109],{"class":160},"        `\n",[139,82111,82112],{"class":141,"line":35527},[139,82113,67046],{"class":145},[139,82115,82116],{"class":141,"line":35543},[139,82117,82118],{"class":2512},"      \u002F\u002F 追加给List\n",[139,82120,82121,82123,82125,82127,82130,82132,82134],{"class":141,"line":35588},[139,82122,58005],{"class":145},[139,82124,56633],{"class":781},[139,82126,157],{"class":145},[139,82128,82129],{"class":160},"'.list'",[139,82131,76478],{"class":145},[139,82133,150],{"class":149},[139,82135,76214],{"class":145},[139,82137,82138],{"class":141,"line":35594},[139,82139,4472],{"class":145},[139,82141,82142],{"class":141,"line":35600},[139,82143,82144],{"class":2512},"    \u002F\u002F 页面一打开就需要渲染\n",[139,82146,82147,82150],{"class":141,"line":35606},[139,82148,82149],{"class":781},"    render",[139,82151,82152],{"class":145},"(goodsList)\n",[139,82154,82155],{"class":141,"line":35617},[139,82156,82157],{"class":2512},"    \u002F\u002F 2.过滤筛选\n",[139,82159,82160,82162,82164,82166,82169,82171,82173,82175,82177,82179,82181,82183],{"class":141,"line":35623},[139,82161,54642],{"class":145},[139,82163,56633],{"class":781},[139,82165,157],{"class":145},[139,82167,82168],{"class":160},"'.filter'",[139,82170,33078],{"class":145},[139,82172,60046],{"class":781},[139,82174,157],{"class":145},[139,82176,60051],{"class":160},[139,82178,413],{"class":145},[139,82180,628],{"class":2111},[139,82182,82027],{"class":149},[139,82184,17840],{"class":145},[139,82186,82187],{"class":141,"line":35629},[139,82188,82189],{"class":2512},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[139,82191,82192,82194,82196,82199,82201,82203,82205,82207],{"class":141,"line":35635},[139,82193,60461],{"class":149},[139,82195,82036],{"class":145},[139,82197,82198],{"class":153},"tagName",[139,82200,413],{"class":145},[139,82202,33786],{"class":153},[139,82204,82051],{"class":145},[139,82206,150],{"class":149},[139,82208,82209],{"class":145}," e.target\n",[139,82211,82212],{"class":141,"line":35653},[139,82213,82214],{"class":2512},"      \u002F\u002F 判断\n",[139,82216,82217,82219,82221,82223,82225],{"class":141,"line":35667},[139,82218,56714],{"class":149},[139,82220,69264],{"class":145},[139,82222,56720],{"class":149},[139,82224,70486],{"class":160},[139,82226,14714],{"class":145},[139,82228,82229],{"class":141,"line":35676},[139,82230,82231],{"class":2512},"        \u002F\u002F console.log(11)\n",[139,82233,82234],{"class":141,"line":35685},[139,82235,82236],{"class":2512},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[139,82238,82239],{"class":141,"line":35694},[139,82240,82241],{"class":2512},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[139,82243,82244,82246,82248,82250],{"class":141,"line":35703},[139,82245,54067],{"class":149},[139,82247,54070],{"class":145},[139,82249,150],{"class":149},[139,82251,82252],{"class":145}," goodsList\n",[139,82254,82255,82257,82260,82262,82265],{"class":141,"line":35709},[139,82256,4780],{"class":149},[139,82258,82259],{"class":145}," (dataset.index ",[139,82261,56720],{"class":149},[139,82263,82264],{"class":160}," '1'",[139,82266,14714],{"class":145},[139,82268,82269,82272,82274,82277,82280,82282,82284,82286,82289,82291,82293,82296,82298,82300,82302],{"class":141,"line":35715},[139,82270,82271],{"class":145},"          arr ",[139,82273,150],{"class":149},[139,82275,82276],{"class":145}," goodsList.",[139,82278,82279],{"class":781},"filter",[139,82281,157],{"class":145},[139,82283,82024],{"class":2111},[139,82285,82027],{"class":149},[139,82287,82288],{"class":145}," item.price ",[139,82290,3998],{"class":149},[139,82292,799],{"class":153},[139,82294,82295],{"class":149}," &&",[139,82297,82288],{"class":145},[139,82299,3885],{"class":149},[139,82301,8028],{"class":153},[139,82303,164],{"class":145},[139,82305,82306,82309,82311,82313,82315,82317,82320],{"class":141,"line":35723},[139,82307,82308],{"class":145},"        } ",[139,82310,656],{"class":149},[139,82312,3992],{"class":149},[139,82314,82259],{"class":145},[139,82316,56720],{"class":149},[139,82318,82319],{"class":160}," '2'",[139,82321,14714],{"class":145},[139,82323,82324,82326,82328,82330,82332,82334,82336,82338,82340,82342,82344,82346,82348,82350,82353],{"class":141,"line":35728},[139,82325,82271],{"class":145},[139,82327,150],{"class":149},[139,82329,82276],{"class":145},[139,82331,82279],{"class":781},[139,82333,157],{"class":145},[139,82335,82024],{"class":2111},[139,82337,82027],{"class":149},[139,82339,82288],{"class":145},[139,82341,3998],{"class":149},[139,82343,8028],{"class":153},[139,82345,82295],{"class":149},[139,82347,82288],{"class":145},[139,82349,3885],{"class":149},[139,82351,82352],{"class":153}," 300",[139,82354,164],{"class":145},[139,82356,82357,82359,82361,82363,82365,82367,82370],{"class":141,"line":35734},[139,82358,82308],{"class":145},[139,82360,656],{"class":149},[139,82362,3992],{"class":149},[139,82364,82259],{"class":145},[139,82366,56720],{"class":149},[139,82368,82369],{"class":160}," '3'",[139,82371,14714],{"class":145},[139,82373,82374,82376,82378,82380,82382,82384,82386,82388,82390,82392,82394],{"class":141,"line":35745},[139,82375,82271],{"class":145},[139,82377,150],{"class":149},[139,82379,82276],{"class":145},[139,82381,82279],{"class":781},[139,82383,157],{"class":145},[139,82385,82024],{"class":2111},[139,82387,82027],{"class":149},[139,82389,82288],{"class":145},[139,82391,3998],{"class":149},[139,82393,82352],{"class":153},[139,82395,164],{"class":145},[139,82397,82398],{"class":141,"line":35751},[139,82399,4812],{"class":145},[139,82401,82402],{"class":141,"line":35771},[139,82403,82404],{"class":2512},"        \u002F\u002F 渲染函数\n",[139,82406,82407,82409],{"class":141,"line":35777},[139,82408,72637],{"class":781},[139,82410,54647],{"class":145},[139,82412,82413],{"class":141,"line":35783},[139,82414,54633],{"class":145},[139,82416,82417],{"class":141,"line":35789},[139,82418,843],{"emptyLinePlaceholder":842},[139,82420,82421],{"class":141,"line":35806},[139,82422,35706],{"class":145},[139,82424,82425,82427,82429],{"class":141,"line":35812},[139,82426,54652],{"class":145},[139,82428,54050],{"class":53538},[139,82430,53545],{"class":145},[139,82432,82433,82435,82437],{"class":141,"line":35818},[139,82434,54022],{"class":145},[139,82436,54037],{"class":53538},[139,82438,53545],{"class":145},[139,82440,82441],{"class":141,"line":35824},[139,82442,843],{"emptyLinePlaceholder":842},[139,82444,82445,82447,82449],{"class":141,"line":35830},[139,82446,54022],{"class":145},[139,82448,52873],{"class":53538},[139,82450,53545],{"class":145},[14,82452,82454],{"id":82453},"_410-深入了解对象","4.10 深入了解对象",[1217,82456,82458],{"id":82457},"_4101-创建对象","4.10.1 创建对象",[19,82460,82461],{},[3760,82462],{"alt":135,"src":82463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82465,82466],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1217,82468,82470],{"id":82469},"_4102-构造函数","4.10.2 构造函数",[19,82472,82473,82476],{},[1674,82474,82475],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82478,82479,82482],{},[1674,82480,82481],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[130,82484,82486],{"className":52871,"code":82485,"language":52873,"meta":135,"style":135},"\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",[50,82487,82488,82496,82501,82522,82535,82547,82559,82563,82568,82595,82600,82627],{"__ignoreMap":135},[139,82489,82490,82492,82494],{"class":141,"line":142},[139,82491,796],{"class":145},[139,82493,54050],{"class":53538},[139,82495,53545],{"class":145},[139,82497,82498],{"class":141,"line":210},[139,82499,82500],{"class":2512},"\u002F\u002F例：\n",[139,82502,82503,82505,82508,82510,82512,82514,82516,82518,82520],{"class":141,"line":254},[139,82504,56683],{"class":149},[139,82506,82507],{"class":781}," Pig",[139,82509,157],{"class":145},[139,82511,1676],{"class":2111},[139,82513,2816],{"class":145},[139,82515,831],{"class":2111},[139,82517,2816],{"class":145},[139,82519,72467],{"class":2111},[139,82521,14714],{"class":145},[139,82523,82524,82527,82530,82532],{"class":141,"line":262},[139,82525,82526],{"class":153},"    this",[139,82528,82529],{"class":145},".name",[139,82531,150],{"class":149},[139,82533,82534],{"class":145},"name\n",[139,82536,82537,82539,82542,82544],{"class":141,"line":313},[139,82538,82526],{"class":153},[139,82540,82541],{"class":145},".age",[139,82543,150],{"class":149},[139,82545,82546],{"class":145},"age\n",[139,82548,82549,82551,82554,82556],{"class":141,"line":462},[139,82550,82526],{"class":153},[139,82552,82553],{"class":145},".gender",[139,82555,150],{"class":149},[139,82557,82558],{"class":145},"gender    \n",[139,82560,82561],{"class":141,"line":474},[139,82562,3862],{"class":145},[139,82564,82565],{"class":141,"line":484},[139,82566,82567],{"class":2512},"\u002F\u002F创建佩奇对象\n",[139,82569,82570,82572,82575,82577,82579,82581,82584,82586,82588,82590,82593],{"class":141,"line":989},[139,82571,9066],{"class":149},[139,82573,82574],{"class":153}," Peppa",[139,82576,13990],{"class":149},[139,82578,82507],{"class":781},[139,82580,157],{"class":145},[139,82582,82583],{"class":160},"'佩奇'",[139,82585,2816],{"class":145},[139,82587,2782],{"class":153},[139,82589,2816],{"class":145},[139,82591,82592],{"class":160},"'女'",[139,82594,164],{"class":145},[139,82596,82597],{"class":141,"line":994},[139,82598,82599],{"class":2512},"\u002F\u002F创建乔治对象\n",[139,82601,82602,82604,82607,82609,82611,82613,82616,82618,82620,82622,82625],{"class":141,"line":999},[139,82603,9066],{"class":149},[139,82605,82606],{"class":153}," George",[139,82608,13990],{"class":149},[139,82610,82507],{"class":781},[139,82612,157],{"class":145},[139,82614,82615],{"class":160},"'乔治'",[139,82617,2816],{"class":145},[139,82619,421],{"class":153},[139,82621,2816],{"class":145},[139,82623,82624],{"class":160},"'男'",[139,82626,164],{"class":145},[139,82628,82629,82631,82633],{"class":141,"line":1006},[139,82630,54022],{"class":145},[139,82632,54050],{"class":53538},[139,82634,53545],{"class":145},[19,82636,82637],{},[3760,82638],{"alt":135,"src":82639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82641,82642],{},[3760,82643],{"alt":135,"src":82644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82646,82647],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82649,82650],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82652,82653],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82655,82656],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82658,82659],{},"这里用等号是因为：对象.属性=值",[19,82661,82662],{},"①利用对象字面量创建对象",[19,82664,82665],{},"const o={",[19,82667,82668],{},"name:'pink'",[19,82670,82671],{},"} ②利用new Object创建对象",[19,82673,82674],{},"const o=new Object({name:'pink'})",[19,82676,82677],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82679,82680],{},"构造函数创建对象的执行过程：",[19,82682,82683],{},[3760,82684],{"alt":135,"src":82685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1217,82687,82689],{"id":82688},"_4103-实例成员","4.10.3 实例成员",[19,82691,82692],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1760,82694,82695,82698,82701],{},[1763,82696,82697],{},"实例对象的属性和方法即为实例成员",[1763,82699,82700],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1763,82702,82703],{},"构造函数创建的实例对象彼此独立互不影响",[1217,82705,82707],{"id":82706},"_4104-静态成员","4.10.4 静态成员",[19,82709,82710],{},[3760,82711],{"alt":135,"src":82712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82714,82715],{},"静态成员有Date.now() Math.PI Math.random()",[19,82717,82718],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82720,82721],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82723,82724],{},"function Pig(name) n {",[19,82726,82727],{},"this.name=name",[19,82729,631],{},[19,82731,82732],{},"Pig.eyes=2",[19,82734,82735],{},"Pig.sayHai=function () { console.log(this) }",[19,82737,82738],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82740,82741],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82743,13605],{},[1760,82745,82746,82749,82752,82755,82758],{},[1763,82747,82748],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1763,82750,82751],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1763,82753,82754],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1763,82756,82757],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1763,82759,82760],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82762,82763],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1217,82765,82767],{"id":82766},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82769,82770],{},"内置构造函数包含：",[19,82772,82773],{},[3760,82774],{"alt":135,"src":82775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82777,82778],{},[3760,82779],{"alt":135,"src":82780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82782,82783],{},"这些基本数据类型，js对他们进行了包装",[54050,82785,82786],{},"\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",[24265,82788,82790],{"id":82789},"_41051-object","4.10.5.1 Object",[19,82792,82793],{},"Object 是内置的构造函数，用于创建普通对象",[19,82795,82796],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[130,82798,82800],{"className":52871,"code":82799,"language":52873,"meta":135,"style":135},"const user=new Object({name:'小明',age:15})\n",[50,82801,82802],{"__ignoreMap":135},[139,82803,82804],{"class":141,"line":142},[139,82805,82799],{"class":145},[19,82807,82808],{},"三个常用的静态方法：",[25177,82810,82812],{"id":82811},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82814,82815],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82817,82818],{},[3760,82819],{"alt":135,"src":82820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82822,82823],{},[3760,82824],{"alt":135,"src":82825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[130,82827,82829],{"className":55302,"code":82828,"language":55304,"meta":135,"style":135},"\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",[50,82830,82831,82839,82847,82852,82857,82862,82867,82872,82877,82885],{"__ignoreMap":135},[139,82832,82833,82835,82837],{"class":141,"line":142},[139,82834,796],{"class":145},[139,82836,54037],{"class":53538},[139,82838,53545],{"class":145},[139,82840,82841,82843,82845],{"class":141,"line":210},[139,82842,54380],{"class":145},[139,82844,54050],{"class":53538},[139,82846,53545],{"class":145},[139,82848,82849],{"class":141,"line":254},[139,82850,82851],{"class":145},"    const o = { name: 'pink', age: 6 }\n",[139,82853,82854],{"class":141,"line":262},[139,82855,82856],{"class":145},"    \u002F\u002F 获得所有属性名\n",[139,82858,82859],{"class":141,"line":313},[139,82860,82861],{"class":145},"    const arr = Object.keys(o)\n",[139,82863,82864],{"class":141,"line":462},[139,82865,82866],{"class":145},"    console.log(arr)\n",[139,82868,82869],{"class":141,"line":474},[139,82870,82871],{"class":145},"    \u002F\u002F 获得所有属性值\n",[139,82873,82874],{"class":141,"line":484},[139,82875,82876],{"class":145},"    console.log(Object.values(o))\n",[139,82878,82879,82881,82883],{"class":141,"line":989},[139,82880,54652],{"class":145},[139,82882,54050],{"class":53538},[139,82884,53545],{"class":145},[139,82886,82887,82889,82891],{"class":141,"line":994},[139,82888,54022],{"class":145},[139,82890,54037],{"class":53538},[139,82892,53545],{"class":145},[25177,82894,82896],{"id":82895},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82898,82899],{},"Object.assign(oo,o)",[19,82901,82902],{},"后的东西添加给前 是追加",[19,82904,82905],{},[3760,82906],{"alt":135,"src":82907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82909,82910],{},[3760,82911],{"alt":135,"src":82912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[130,82914,82916],{"className":55302,"code":82915,"language":55304,"meta":135,"style":135},"\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",[50,82917,82918,82926,82934,82938,82942,82946,82950,82954,82958,82963,82968,82973,82978,82983,82991],{"__ignoreMap":135},[139,82919,82920,82922,82924],{"class":141,"line":142},[139,82921,796],{"class":145},[139,82923,54037],{"class":53538},[139,82925,53545],{"class":145},[139,82927,82928,82930,82932],{"class":141,"line":210},[139,82929,54380],{"class":145},[139,82931,54050],{"class":53538},[139,82933,53545],{"class":145},[139,82935,82936],{"class":141,"line":254},[139,82937,82851],{"class":145},[139,82939,82940],{"class":141,"line":262},[139,82941,82856],{"class":145},[139,82943,82944],{"class":141,"line":313},[139,82945,82861],{"class":145},[139,82947,82948],{"class":141,"line":462},[139,82949,82866],{"class":145},[139,82951,82952],{"class":141,"line":474},[139,82953,82871],{"class":145},[139,82955,82956],{"class":141,"line":484},[139,82957,82876],{"class":145},[139,82959,82960],{"class":141,"line":989},[139,82961,82962],{"class":145},"    const oo = {}\n",[139,82964,82965],{"class":141,"line":994},[139,82966,82967],{"class":145},"    Object.assign(oo, o)\n",[139,82969,82970],{"class":141,"line":999},[139,82971,82972],{"class":145},"    console.log(oo)\n",[139,82974,82975],{"class":141,"line":1006},[139,82976,82977],{"class":145},"    Object.assign(o, { gender: '女' })\n",[139,82979,82980],{"class":141,"line":1027},[139,82981,82982],{"class":145},"    console.log(o)\n",[139,82984,82985,82987,82989],{"class":141,"line":1040},[139,82986,54652],{"class":145},[139,82988,54050],{"class":53538},[139,82990,53545],{"class":145},[139,82992,82993,82995,82997],{"class":141,"line":2160},[139,82994,54022],{"class":145},[139,82996,54037],{"class":53538},[139,82998,53545],{"class":145},[19,83000,83001],{},[3760,83002],{"alt":135,"src":83003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24265,83005,83007],{"id":83006},"_41052-array","4.10.5.2 Array",[19,83009,83010],{},"Array 是内置的构造函数，用于创建数组",[19,83012,83013],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[130,83015,83017],{"className":52871,"code":83016,"language":52873,"meta":135,"style":135},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[50,83018,83019,83024],{"__ignoreMap":135},[139,83020,83021],{"class":141,"line":142},[139,83022,83023],{"class":145},"const arr=new Array(3,5)\n",[139,83025,83026],{"class":141,"line":210},[139,83027,83028],{"class":145},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83030,83031],{},"Array的实例方法，这个方法是实例成员",[19,83033,83034],{},[3760,83035],{"alt":135,"src":83036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25177,83038,83040],{"id":83039},"_410521-reduce","4.10.5.2.1 reduce",[19,83042,83043],{},[3760,83044],{"alt":135,"src":83045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[130,83047,83049],{"className":55302,"code":83048,"language":55304,"meta":135,"style":135},"\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",[50,83050,83051,83059,83067,83072,83077,83082,83087,83091,83096,83101,83106,83110,83115,83120,83124,83129,83134,83139,83147],{"__ignoreMap":135},[139,83052,83053,83055,83057],{"class":141,"line":142},[139,83054,796],{"class":145},[139,83056,54037],{"class":53538},[139,83058,53545],{"class":145},[139,83060,83061,83063,83065],{"class":141,"line":210},[139,83062,54380],{"class":145},[139,83064,54050],{"class":53538},[139,83066,53545],{"class":145},[139,83068,83069],{"class":141,"line":254},[139,83070,83071],{"class":145},"    const arr = [1, 5, 8]\n",[139,83073,83074],{"class":141,"line":262},[139,83075,83076],{"class":145},"    \u002F\u002F 1.没有初始值\n",[139,83078,83079],{"class":141,"line":313},[139,83080,83081],{"class":145},"    const total = arr.reduce(function (prev, current) {\n",[139,83083,83084],{"class":141,"line":462},[139,83085,83086],{"class":145},"      return prev + current\n",[139,83088,83089],{"class":141,"line":474},[139,83090,35706],{"class":145},[139,83092,83093],{"class":141,"line":484},[139,83094,83095],{"class":145},"    console.log(total)   \u002F\u002F14\n",[139,83097,83098],{"class":141,"line":989},[139,83099,83100],{"class":145},"    \u002F\u002F 2.有初始值\n",[139,83102,83103],{"class":141,"line":994},[139,83104,83105],{"class":145},"    const total1 = arr.reduce(function (prev, current) {\n",[139,83107,83108],{"class":141,"line":999},[139,83109,83086],{"class":145},[139,83111,83112],{"class":141,"line":1006},[139,83113,83114],{"class":145},"    }, 10)\n",[139,83116,83117],{"class":141,"line":1027},[139,83118,83119],{"class":145},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[139,83121,83122],{"class":141,"line":1040},[139,83123,843],{"emptyLinePlaceholder":842},[139,83125,83126],{"class":141,"line":2160},[139,83127,83128],{"class":145},"    \u002F\u002F 3.箭头函数写法\n",[139,83130,83131],{"class":141,"line":2188},[139,83132,83133],{"class":145},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[139,83135,83136],{"class":141,"line":3944},[139,83137,83138],{"class":145},"    console.log(total2)   \u002F\u002F24\n",[139,83140,83141,83143,83145],{"class":141,"line":3963},[139,83142,54652],{"class":145},[139,83144,54050],{"class":53538},[139,83146,53545],{"class":145},[139,83148,83149,83151,83153],{"class":141,"line":3968},[139,83150,54022],{"class":145},[139,83152,54037],{"class":53538},[139,83154,53545],{"class":145},[19,83156,83157],{},"执行过程：",[1760,83159,83160,83163,83166],{},[1763,83161,83162],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1763,83164,83165],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1763,83167,83168],{},"如果有起始值，则起始值作为上一次值",[130,83170,83172],{"className":55302,"code":83171,"language":55304,"meta":135,"style":135},"\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",[50,83173,83174,83182,83190,83194,83198,83202,83206,83210,83214,83219,83224,83229,83234,83239,83243,83247,83251,83255,83259,83263,83268,83272,83277,83281,83286,83291,83295,83299,83303,83311],{"__ignoreMap":135},[139,83175,83176,83178,83180],{"class":141,"line":142},[139,83177,796],{"class":145},[139,83179,54037],{"class":53538},[139,83181,53545],{"class":145},[139,83183,83184,83186,83188],{"class":141,"line":210},[139,83185,54380],{"class":145},[139,83187,54050],{"class":53538},[139,83189,53545],{"class":145},[139,83191,83192],{"class":141,"line":254},[139,83193,83071],{"class":145},[139,83195,83196],{"class":141,"line":262},[139,83197,83076],{"class":145},[139,83199,83200],{"class":141,"line":313},[139,83201,83081],{"class":145},[139,83203,83204],{"class":141,"line":462},[139,83205,83086],{"class":145},[139,83207,83208],{"class":141,"line":474},[139,83209,35706],{"class":145},[139,83211,83212],{"class":141,"line":484},[139,83213,83095],{"class":145},[139,83215,83216],{"class":141,"line":989},[139,83217,83218],{"class":145},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[139,83220,83221],{"class":141,"line":994},[139,83222,83223],{"class":145},"    \u002F\u002F     1              5                    6\n",[139,83225,83226],{"class":141,"line":999},[139,83227,83228],{"class":145},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[139,83230,83231],{"class":141,"line":1006},[139,83232,83233],{"class":145},"    \u002F\u002F     6              8                    14\n",[139,83235,83236],{"class":141,"line":1027},[139,83237,83238],{"class":145},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[139,83240,83241],{"class":141,"line":1040},[139,83242,83100],{"class":145},[139,83244,83245],{"class":141,"line":2160},[139,83246,83105],{"class":145},[139,83248,83249],{"class":141,"line":2188},[139,83250,83086],{"class":145},[139,83252,83253],{"class":141,"line":3944},[139,83254,83114],{"class":145},[139,83256,83257],{"class":141,"line":3963},[139,83258,83119],{"class":145},[139,83260,83261],{"class":141,"line":3968},[139,83262,83218],{"class":145},[139,83264,83265],{"class":141,"line":3982},[139,83266,83267],{"class":145},"    \u002F\u002F     10             1                     11\n",[139,83269,83270],{"class":141,"line":3987},[139,83271,83228],{"class":145},[139,83273,83274],{"class":141,"line":4014},[139,83275,83276],{"class":145},"    \u002F\u002F     11             5                    16\n",[139,83278,83279],{"class":141,"line":4019},[139,83280,83228],{"class":145},[139,83282,83283],{"class":141,"line":4036},[139,83284,83285],{"class":145},"    \u002F\u002F     16             8                    24\n",[139,83287,83288],{"class":141,"line":4041},[139,83289,83290],{"class":145},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[139,83292,83293],{"class":141,"line":4046},[139,83294,83128],{"class":145},[139,83296,83297],{"class":141,"line":4051},[139,83298,83133],{"class":145},[139,83300,83301],{"class":141,"line":4065},[139,83302,83138],{"class":145},[139,83304,83305,83307,83309],{"class":141,"line":4070},[139,83306,54652],{"class":145},[139,83308,54050],{"class":53538},[139,83310,53545],{"class":145},[139,83312,83313,83315,83317],{"class":141,"line":4860},[139,83314,54022],{"class":145},[139,83316,54037],{"class":53538},[139,83318,53545],{"class":145},[25177,83320,83322],{"id":83321},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83324,83325],{},[3760,83326],{"alt":135,"src":83327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[130,83329,83331],{"className":55302,"code":83330,"language":55304,"meta":135,"style":135},"\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",[50,83332,83333,83341,83349,83354,83359,83364,83369,83373,83378,83383,83388,83393,83398,83403,83407,83412,83416,83421,83429],{"__ignoreMap":135},[139,83334,83335,83337,83339],{"class":141,"line":142},[139,83336,796],{"class":145},[139,83338,54037],{"class":53538},[139,83340,53545],{"class":145},[139,83342,83343,83345,83347],{"class":141,"line":210},[139,83344,54380],{"class":145},[139,83346,54050],{"class":53538},[139,83348,53545],{"class":145},[139,83350,83351],{"class":141,"line":254},[139,83352,83353],{"class":145},"    const arr = [\n",[139,83355,83356],{"class":141,"line":262},[139,83357,83358],{"class":145},"      { name: '张三', salary: 10000 },\n",[139,83360,83361],{"class":141,"line":313},[139,83362,83363],{"class":145},"      { name: '李四', salary: 10000 },\n",[139,83365,83366],{"class":141,"line":462},[139,83367,83368],{"class":145},"      { name: '王五', salary: 10000 }\n",[139,83370,83371],{"class":141,"line":474},[139,83372,55344],{"class":145},[139,83374,83375],{"class":141,"line":484},[139,83376,83377],{"class":145},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[139,83379,83380],{"class":141,"line":989},[139,83381,83382],{"class":145},"    \u002F\u002F prev是累计值\n",[139,83384,83385],{"class":141,"line":994},[139,83386,83387],{"class":145},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[139,83389,83390],{"class":141,"line":999},[139,83391,83392],{"class":145},"    console.log(total)\n",[139,83394,83395],{"class":141,"line":1006},[139,83396,83397],{"class":145},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[139,83399,83400],{"class":141,"line":1027},[139,83401,83402],{"class":145},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[139,83404,83405],{"class":141,"line":1040},[139,83406,83397],{"class":145},[139,83408,83409],{"class":141,"line":2160},[139,83410,83411],{"class":145},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[139,83413,83414],{"class":141,"line":2188},[139,83415,83397],{"class":145},[139,83417,83418],{"class":141,"line":3944},[139,83419,83420],{"class":145},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[139,83422,83423,83425,83427],{"class":141,"line":3963},[139,83424,54652],{"class":145},[139,83426,54050],{"class":53538},[139,83428,53545],{"class":145},[139,83430,83431,83433,83435],{"class":141,"line":3968},[139,83432,54022],{"class":145},[139,83434,54037],{"class":53538},[139,83436,53545],{"class":145},[25177,83438,83440],{"id":83439},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83442,83443],{},[3760,83444],{"alt":135,"src":83445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83447,83448],{},[3760,83449],{"alt":135,"src":83450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1760,83452,83453],{},[1763,83454,83455],{},"find()",[19,83457,83458],{},"循环查找，找到第一个就ok",[19,83460,83461],{},[2680,83462,83465],{"href":83463,"rel":83464},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[130,83467,83469],{"className":52871,"code":83468,"language":52873,"meta":135,"style":135},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[50,83470,83471,83476,83481],{"__ignoreMap":135},[139,83472,83473],{"class":141,"line":142},[139,83474,83475],{"class":145},"const array1 = [5, 12, 8, 130, 44]\n",[139,83477,83478],{"class":141,"line":210},[139,83479,83480],{"class":145},"const found = array1.find((element) => element > 10)\n",[139,83482,83483],{"class":141,"line":254},[139,83484,83485],{"class":145},"console.log(found)  \u002F\u002F12\n",[19,83487,83488,83490,83491,83496,83497,83500,83501,83503,83504,83509,83510,83512,83513,83515,83516,83518,83519],{},[50,83489,83455],{}," 方法是一个",[2680,83492,83495],{"href":83493,"rel":83494},"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",[26128],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[50,83498,83499],{},"callbackFn"," 函数，直到 ",[50,83502,83499],{}," 返回一个",[2680,83505,83508],{"href":83506,"rel":83507},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26128],"真值","。然后 ",[50,83511,83455],{}," 返回该元素并停止迭代数组。如果 ",[50,83514,83499],{}," 从未返回真值，则 ",[50,83517,83455],{}," 返回 ",[50,83520,83521],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[130,83523,83525],{"className":55302,"code":83524,"language":55304,"meta":135,"style":135},"\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",[50,83526,83527,83535,83543,83548,83553,83558,83562,83567,83572,83576,83581,83586,83590,83594,83599,83604,83608,83612,83617,83622,83627,83632,83637,83641,83646,83651,83656,83661,83665,83670,83678],{"__ignoreMap":135},[139,83528,83529,83531,83533],{"class":141,"line":142},[139,83530,796],{"class":145},[139,83532,54037],{"class":53538},[139,83534,53545],{"class":145},[139,83536,83537,83539,83541],{"class":141,"line":210},[139,83538,54380],{"class":145},[139,83540,54050],{"class":53538},[139,83542,53545],{"class":145},[139,83544,83545],{"class":141,"line":254},[139,83546,83547],{"class":145},"    const arr = ['red', 'blue', 'green']\n",[139,83549,83550],{"class":141,"line":262},[139,83551,83552],{"class":145},"    const found = arr.find(item => item === 'pink')\n",[139,83554,83555],{"class":141,"line":313},[139,83556,83557],{"class":145},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[139,83559,83560],{"class":141,"line":462},[139,83561,843],{"emptyLinePlaceholder":842},[139,83563,83564],{"class":141,"line":474},[139,83565,83566],{"class":145},"    \u002F\u002F 使用场景，用于查找数据\n",[139,83568,83569],{"class":141,"line":484},[139,83570,83571],{"class":145},"    const arr1 = [\n",[139,83573,83574],{"class":141,"line":989},[139,83575,81615],{"class":145},[139,83577,83578],{"class":141,"line":994},[139,83579,83580],{"class":145},"        name: '小米',\n",[139,83582,83583],{"class":141,"line":999},[139,83584,83585],{"class":145},"        price: 1999\n",[139,83587,83588],{"class":141,"line":1006},[139,83589,80121],{"class":145},[139,83591,83592],{"class":141,"line":1027},[139,83593,81615],{"class":145},[139,83595,83596],{"class":141,"line":1040},[139,83597,83598],{"class":145},"        name: '华为',\n",[139,83600,83601],{"class":141,"line":2160},[139,83602,83603],{"class":145},"        price: 3999\n",[139,83605,83606],{"class":141,"line":2188},[139,83607,54633],{"class":145},[139,83609,83610],{"class":141,"line":3944},[139,83611,55344],{"class":145},[139,83613,83614],{"class":141,"line":3963},[139,83615,83616],{"class":145},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[139,83618,83619],{"class":141,"line":3968},[139,83620,83621],{"class":145},"    \u002F\u002F const found1 = arr1.find(item => {\n",[139,83623,83624],{"class":141,"line":3982},[139,83625,83626],{"class":145},"    \u002F\u002F   if (item.name === '小米') {\n",[139,83628,83629],{"class":141,"line":3987},[139,83630,83631],{"class":145},"    \u002F\u002F     return item\n",[139,83633,83634],{"class":141,"line":4014},[139,83635,83636],{"class":145},"    \u002F\u002F   }\n",[139,83638,83639],{"class":141,"line":4019},[139,83640,65522],{"class":145},[139,83642,83643],{"class":141,"line":4036},[139,83644,83645],{"class":145},"    \u002F\u002F 另一种写法\n",[139,83647,83648],{"class":141,"line":4041},[139,83649,83650],{"class":145},"    const found1 = arr1.find(item => {\n",[139,83652,83653],{"class":141,"line":4046},[139,83654,83655],{"class":145},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[139,83657,83658],{"class":141,"line":4051},[139,83659,83660],{"class":145},"      return item.name = '小米'\n",[139,83662,83663],{"class":141,"line":4065},[139,83664,35706],{"class":145},[139,83666,83667],{"class":141,"line":4070},[139,83668,83669],{"class":145},"    console.log(found1)\n",[139,83671,83672,83674,83676],{"class":141,"line":4860},[139,83673,54652],{"class":145},[139,83675,54050],{"class":53538},[139,83677,53545],{"class":145},[139,83679,83680,83682,83684],{"class":141,"line":4874},[139,83681,54022],{"class":145},[139,83683,54037],{"class":53538},[139,83685,53545],{"class":145},[19,83687,83688],{},[3760,83689],{"alt":135,"src":83690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83692,83693],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1760,83695,83696],{"start":210},[1763,83697,83698],{},"every()返回的是布尔值",[19,83700,83701],{},[2680,83702,83705],{"href":83703,"rel":83704},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83707,83708],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83710,83711],{},"some是只有有一个就没问题",[19,83713,83714],{},"every是必须全是才行",[130,83716,83720],{"className":83717,"code":83718,"language":83719,"meta":135,"style":135},"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",[50,83721,83722,83738,83752,83756,83765],{"__ignoreMap":135},[139,83723,83724,83726,83729,83731,83733,83736],{"class":141,"line":142},[139,83725,56683],{"class":149},[139,83727,83728],{"class":145}," isBigEnough(element, ",[139,83730,76287],{"class":149},[139,83732,413],{"class":145},[139,83734,83735],{"class":149},"array",[139,83737,14714],{"class":145},[139,83739,83740,83743,83746,83748,83750],{"class":141,"line":210},[139,83741,83742],{"class":149},"  return",[139,83744,83745],{"class":145}," element ",[139,83747,3998],{"class":149},[139,83749,4323],{"class":153},[139,83751,3591],{"class":145},[139,83753,83754],{"class":141,"line":254},[139,83755,3862],{"class":145},[139,83757,83758,83761,83763],{"class":141,"line":262},[139,83759,83760],{"class":145},"[12, 5, 8, 130, 44].every(isBigEnough); ",[139,83762,35574],{"class":149},[139,83764,56750],{"class":145},[139,83766,83767,83770,83772],{"class":141,"line":313},[139,83768,83769],{"class":145},"[12, 54, 18, 130, 44].every(isBigEnough); ",[139,83771,35574],{"class":149},[139,83773,60173],{"class":145},[130,83775,83777],{"className":55302,"code":83776,"language":55304,"meta":135,"style":135},"\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",[50,83778,83779,83787,83795,83800,83804,83809,83814,83822],{"__ignoreMap":135},[139,83780,83781,83783,83785],{"class":141,"line":142},[139,83782,796],{"class":145},[139,83784,54037],{"class":53538},[139,83786,53545],{"class":145},[139,83788,83789,83791,83793],{"class":141,"line":210},[139,83790,54380],{"class":145},[139,83792,54050],{"class":53538},[139,83794,53545],{"class":145},[139,83796,83797],{"class":141,"line":254},[139,83798,83799],{"class":145},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[139,83801,83802],{"class":141,"line":262},[139,83803,80551],{"class":145},[139,83805,83806],{"class":141,"line":313},[139,83807,83808],{"class":145},"    const flag = arr.every(item => item >= 10)\n",[139,83810,83811],{"class":141,"line":462},[139,83812,83813],{"class":145},"    console.log(flag)    \u002F\u002Ftrue\n",[139,83815,83816,83818,83820],{"class":141,"line":474},[139,83817,54652],{"class":145},[139,83819,54050],{"class":53538},[139,83821,53545],{"class":145},[139,83823,83824,83826,83828],{"class":141,"line":484},[139,83825,54022],{"class":145},[139,83827,54037],{"class":53538},[139,83829,53545],{"class":145},[130,83831,83833],{"className":55302,"code":83832,"language":55304,"meta":135,"style":135},"\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",[50,83834,83835,83843,83851,83855,83860,83865,83870,83878],{"__ignoreMap":135},[139,83836,83837,83839,83841],{"class":141,"line":142},[139,83838,796],{"class":145},[139,83840,54037],{"class":53538},[139,83842,53545],{"class":145},[139,83844,83845,83847,83849],{"class":141,"line":210},[139,83846,54380],{"class":145},[139,83848,54050],{"class":53538},[139,83850,53545],{"class":145},[139,83852,83853],{"class":141,"line":254},[139,83854,83799],{"class":145},[139,83856,83857],{"class":141,"line":262},[139,83858,83859],{"class":145},"    const arr = [10, 0, 5]\n",[139,83861,83862],{"class":141,"line":313},[139,83863,83864],{"class":145},"    const flag = arr.some(item => item >= 10)\n",[139,83866,83867],{"class":141,"line":462},[139,83868,83869],{"class":145},"    console.log(flag)   \u002F\u002Ftrue\n",[139,83871,83872,83874,83876],{"class":141,"line":474},[139,83873,54652],{"class":145},[139,83875,54050],{"class":53538},[139,83877,53545],{"class":145},[139,83879,83880,83882,83884],{"class":141,"line":484},[139,83881,54022],{"class":145},[139,83883,54037],{"class":53538},[139,83885,53545],{"class":145},[25177,83887,83889],{"id":83888},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83891,83892],{},[3760,83893],{"alt":135,"src":83894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[130,83896,83898],{"className":52871,"code":83897,"language":52873,"meta":135,"style":135},"\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",[50,83899,83900,83910,83924,83928,83936,83950,83970,83982,83990,83997,84009,84021,84033,84045,84055,84065,84069,84077,84085,84089,84097,84109,84117,84139,84144,84149,84182,84190,84198,84202],{"__ignoreMap":135},[139,83901,83902,83904,83906,83908],{"class":141,"line":142},[139,83903,53535],{"class":145},[139,83905,53539],{"class":53538},[139,83907,53542],{"class":781},[139,83909,53545],{"class":145},[139,83911,83912,83914,83916,83918,83920,83922],{"class":141,"line":210},[139,83913,796],{"class":145},[139,83915,52873],{"class":53538},[139,83917,53554],{"class":781},[139,83919,150],{"class":145},[139,83921,53559],{"class":160},[139,83923,53545],{"class":145},[139,83925,83926],{"class":141,"line":254},[139,83927,843],{"emptyLinePlaceholder":842},[139,83929,83930,83932,83934],{"class":141,"line":262},[139,83931,796],{"class":145},[139,83933,53572],{"class":53538},[139,83935,53545],{"class":145},[139,83937,83938,83940,83942,83944,83946,83948],{"class":141,"line":313},[139,83939,54380],{"class":145},[139,83941,53582],{"class":53538},[139,83943,53585],{"class":781},[139,83945,150],{"class":145},[139,83947,53590],{"class":160},[139,83949,53545],{"class":145},[139,83951,83952,83954,83956,83958,83960,83962,83964,83966,83968],{"class":141,"line":462},[139,83953,54380],{"class":145},[139,83955,53582],{"class":53538},[139,83957,17189],{"class":781},[139,83959,150],{"class":145},[139,83961,53629],{"class":160},[139,83963,53609],{"class":781},[139,83965,150],{"class":145},[139,83967,53636],{"class":160},[139,83969,53545],{"class":145},[139,83971,83972,83974,83976,83978,83980],{"class":141,"line":474},[139,83973,54380],{"class":145},[139,83975,53645],{"class":53538},[139,83977,53648],{"class":145},[139,83979,53645],{"class":53538},[139,83981,53545],{"class":145},[139,83983,83984,83986,83988],{"class":141,"line":484},[139,83985,54380],{"class":145},[139,83987,2348],{"class":53538},[139,83989,53545],{"class":145},[139,83991,83992,83995],{"class":141,"line":989},[139,83993,83994],{"class":53538},"    div",[139,83996,17840],{"class":145},[139,83998,83999,84001,84003,84005,84007],{"class":141,"line":994},[139,84000,57005],{"class":153},[139,84002,2265],{"class":145},[139,84004,1022],{"class":153},[139,84006,53729],{"class":149},[139,84008,3591],{"class":145},[139,84010,84011,84013,84015,84017,84019],{"class":141,"line":999},[139,84012,57019],{"class":153},[139,84014,2265],{"class":145},[139,84016,2839],{"class":153},[139,84018,53729],{"class":149},[139,84020,3591],{"class":145},[139,84022,84023,84025,84027,84029,84031],{"class":141,"line":1006},[139,84024,59593],{"class":153},[139,84026,2265],{"class":145},[139,84028,2839],{"class":153},[139,84030,53729],{"class":149},[139,84032,3591],{"class":145},[139,84034,84035,84037,84039,84041,84043],{"class":141,"line":1027},[139,84036,67364],{"class":153},[139,84038,2265],{"class":145},[139,84040,2934],{"class":153},[139,84042,53729],{"class":149},[139,84044,3591],{"class":145},[139,84046,84047,84049,84051,84053],{"class":141,"line":1040},[139,84048,59520],{"class":153},[139,84050,2265],{"class":145},[139,84052,53829],{"class":153},[139,84054,3591],{"class":145},[139,84056,84057,84059,84061,84063],{"class":141,"line":2160},[139,84058,57118],{"class":153},[139,84060,2265],{"class":145},[139,84062,53882],{"class":153},[139,84064,3591],{"class":145},[139,84066,84067],{"class":141,"line":2188},[139,84068,4472],{"class":145},[139,84070,84071,84073,84075],{"class":141,"line":3944},[139,84072,54652],{"class":145},[139,84074,2348],{"class":53538},[139,84076,53545],{"class":145},[139,84078,84079,84081,84083],{"class":141,"line":3963},[139,84080,54022],{"class":145},[139,84082,53572],{"class":53538},[139,84084,53545],{"class":145},[139,84086,84087],{"class":141,"line":3968},[139,84088,843],{"emptyLinePlaceholder":842},[139,84090,84091,84093,84095],{"class":141,"line":3982},[139,84092,796],{"class":145},[139,84094,54037],{"class":53538},[139,84096,53545],{"class":145},[139,84098,84099,84101,84103,84105,84107],{"class":141,"line":3987},[139,84100,54380],{"class":145},[139,84102,53848],{"class":53538},[139,84104,57548],{"class":145},[139,84106,53848],{"class":53538},[139,84108,53545],{"class":145},[139,84110,84111,84113,84115],{"class":141,"line":4014},[139,84112,54380],{"class":145},[139,84114,54050],{"class":53538},[139,84116,53545],{"class":145},[139,84118,84119,84121,84124,84126,84129,84132,84134,84137],{"class":141,"line":4019},[139,84120,13494],{"class":149},[139,84122,84123],{"class":153}," spec",[139,84125,15836],{"class":149},[139,84127,84128],{"class":145}," { size: ",[139,84130,84131],{"class":160},"'40cm*40cm'",[139,84133,57698],{"class":145},[139,84135,84136],{"class":160},"'黑色'",[139,84138,57838],{"class":145},[139,84140,84141],{"class":141,"line":4036},[139,84142,84143],{"class":2512},"    \u002F\u002F const arr = Object.values(spec)\n",[139,84145,84146],{"class":141,"line":4041},[139,84147,84148],{"class":2512},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[139,84150,84151,84153,84155,84157,84160,84162,84164,84167,84170,84173,84175,84177,84180],{"class":141,"line":4046},[139,84152,54642],{"class":145},[139,84154,56633],{"class":781},[139,84156,157],{"class":145},[139,84158,84159],{"class":160},"'div'",[139,84161,76478],{"class":145},[139,84163,150],{"class":149},[139,84165,84166],{"class":145}," Object.",[139,84168,84169],{"class":781},"values",[139,84171,84172],{"class":145},"(spec).",[139,84174,76452],{"class":781},[139,84176,157],{"class":145},[139,84178,84179],{"class":160},"'\u002F'",[139,84181,164],{"class":145},[139,84183,84184,84186,84188],{"class":141,"line":4051},[139,84185,54652],{"class":145},[139,84187,54050],{"class":53538},[139,84189,53545],{"class":145},[139,84191,84192,84194,84196],{"class":141,"line":4065},[139,84193,54022],{"class":145},[139,84195,54037],{"class":53538},[139,84197,53545],{"class":145},[139,84199,84200],{"class":141,"line":4070},[139,84201,843],{"emptyLinePlaceholder":842},[139,84203,84204,84206,84208],{"class":141,"line":4860},[139,84205,54022],{"class":145},[139,84207,52873],{"class":53538},[139,84209,53545],{"class":145},[19,84211,84212],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25177,84214,84216],{"id":84215},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84218,84219],{},"静态方法，将伪数组转换为真数组",[19,84221,84222],{},[3760,84223],{"alt":135,"src":84224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[130,84226,84228],{"className":55302,"code":84227,"language":55304,"meta":135,"style":135},"\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",[50,84229,84230,84238,84246,84258,84270,84282,84290,84298,84303,84308,84313,84318,84326],{"__ignoreMap":135},[139,84231,84232,84234,84236],{"class":141,"line":142},[139,84233,796],{"class":145},[139,84235,54037],{"class":53538},[139,84237,53545],{"class":145},[139,84239,84240,84242,84244],{"class":141,"line":210},[139,84241,54380],{"class":145},[139,84243,3437],{"class":53538},[139,84245,53545],{"class":145},[139,84247,84248,84250,84252,84254,84256],{"class":141,"line":254},[139,84249,53579],{"class":145},[139,84251,1763],{"class":53538},[139,84253,57548],{"class":145},[139,84255,1763],{"class":53538},[139,84257,53545],{"class":145},[139,84259,84260,84262,84264,84266,84268],{"class":141,"line":262},[139,84261,53579],{"class":145},[139,84263,1763],{"class":53538},[139,84265,57548],{"class":145},[139,84267,1763],{"class":53538},[139,84269,53545],{"class":145},[139,84271,84272,84274,84276,84278,84280],{"class":141,"line":313},[139,84273,53579],{"class":145},[139,84275,1763],{"class":53538},[139,84277,57548],{"class":145},[139,84279,1763],{"class":53538},[139,84281,53545],{"class":145},[139,84283,84284,84286,84288],{"class":141,"line":462},[139,84285,54652],{"class":145},[139,84287,3437],{"class":53538},[139,84289,53545],{"class":145},[139,84291,84292,84294,84296],{"class":141,"line":474},[139,84293,54380],{"class":145},[139,84295,54050],{"class":53538},[139,84297,53545],{"class":145},[139,84299,84300],{"class":141,"line":484},[139,84301,84302],{"class":145},"    const lis = document.querySelectorAll('li')\n",[139,84304,84305],{"class":141,"line":989},[139,84306,84307],{"class":145},"    const liss = Array.from(lis)\n",[139,84309,84310],{"class":141,"line":994},[139,84311,84312],{"class":145},"    liss.pop()\n",[139,84314,84315],{"class":141,"line":999},[139,84316,84317],{"class":145},"    console.log(liss)\n",[139,84319,84320,84322,84324],{"class":141,"line":1006},[139,84321,54652],{"class":145},[139,84323,54050],{"class":53538},[139,84325,53545],{"class":145},[139,84327,84328,84330,84332],{"class":141,"line":1027},[139,84329,54022],{"class":145},[139,84331,54037],{"class":53538},[139,84333,53545],{"class":145},[19,84335,84336],{},[3760,84337],{"alt":135,"src":84338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24265,84340,84342],{"id":84341},"_41053-string","4.10.5.3 String",[19,84344,84345],{},[3760,84346],{"alt":135,"src":84347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25177,84349,84351],{"id":84350},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[130,84353,84355],{"className":55302,"code":84354,"language":55304,"meta":135,"style":135},"\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",[50,84356,84357,84365,84373,84378,84383,84388,84392,84397,84402,84407,84415],{"__ignoreMap":135},[139,84358,84359,84361,84363],{"class":141,"line":142},[139,84360,796],{"class":145},[139,84362,54037],{"class":53538},[139,84364,53545],{"class":145},[139,84366,84367,84369,84371],{"class":141,"line":210},[139,84368,54380],{"class":145},[139,84370,54050],{"class":53538},[139,84372,53545],{"class":145},[139,84374,84375],{"class":141,"line":254},[139,84376,84377],{"class":145},"    \u002F\u002F 把字符串转化为数组\n",[139,84379,84380],{"class":141,"line":262},[139,84381,84382],{"class":145},"    const str = 'pink,red'\n",[139,84384,84385],{"class":141,"line":313},[139,84386,84387],{"class":145},"    const arr = str.split(',')\n",[139,84389,84390],{"class":141,"line":462},[139,84391,82866],{"class":145},[139,84393,84394],{"class":141,"line":474},[139,84395,84396],{"class":145},"    const str1 = '2025-8-25'\n",[139,84398,84399],{"class":141,"line":484},[139,84400,84401],{"class":145},"    const arr1 = str1.split('-')\n",[139,84403,84404],{"class":141,"line":989},[139,84405,84406],{"class":145},"    console.log(arr1)\n",[139,84408,84409,84411,84413],{"class":141,"line":994},[139,84410,54652],{"class":145},[139,84412,54050],{"class":53538},[139,84414,53545],{"class":145},[139,84416,84417,84419,84421],{"class":141,"line":999},[139,84418,54022],{"class":145},[139,84420,54037],{"class":53538},[139,84422,53545],{"class":145},[25177,84424,84426],{"id":84425},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84428,7459],{},[19,84430,84431],{},"substring(indexStart)",[19,84433,84434],{},"substring(indexStart, indexEnd)",[3437,84436,84437,84448,84460,84470],{},[1763,84438,84439,84440,84443,84444,84447],{},"如果省略了 ",[50,84441,84442],{},"indexEnd","，则 ",[50,84445,84446],{},"substring()"," 提取字符直到字符串的末尾",[1763,84449,84450,84451,84454,84455,84443,84457,84459],{},"如果 ",[50,84452,84453],{},"indexStart"," 等于 ",[50,84456,84442],{},[50,84458,84446],{}," 返回一个空字符串",[1763,84461,84450,84462,84464,84465,84443,84467,84469],{},[50,84463,84453],{}," 大于 ",[50,84466,84442],{},[50,84468,84446],{}," 的效果就像交换了这两个参数一样",[1763,84471,84472],{},"结束的索引号不包含想要截取的部分",[130,84474,84476],{"className":83717,"code":84475,"language":83719,"meta":135,"style":135},"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",[50,84477,84478,84490,84494,84528,84558,84562,84593,84597,84624,84654,84684,84688,84719],{"__ignoreMap":135},[139,84479,84480,84483,84485,84488],{"class":141,"line":142},[139,84481,84482],{"class":145},"const anyString ",[139,84484,150],{"class":149},[139,84486,84487],{"class":160}," \"Mozilla\"",[139,84489,3591],{"class":145},[139,84491,84492],{"class":141,"line":210},[139,84493,843],{"emptyLinePlaceholder":842},[139,84495,84496,84499,84501,84503,84505,84508,84510,84513,84515,84517,84519,84521,84523,84525],{"class":141,"line":254},[139,84497,84498],{"class":153},"console",[139,84500,2993],{"class":145},[139,84502,60480],{"class":153},[139,84504,157],{"class":145},[139,84506,84507],{"class":153},"anyString",[139,84509,2993],{"class":145},[139,84511,84512],{"class":153},"substring",[139,84514,157],{"class":145},[139,84516,2634],{"class":153},[139,84518,413],{"class":145},[139,84520,410],{"class":153},[139,84522,77482],{"class":145},[139,84524,35574],{"class":149},[139,84526,84527],{"class":160}," 'M'\n",[139,84529,84530,84532,84534,84536,84538,84540,84542,84544,84546,84548,84550,84552,84554,84556],{"class":141,"line":262},[139,84531,84498],{"class":153},[139,84533,2993],{"class":145},[139,84535,60480],{"class":153},[139,84537,157],{"class":145},[139,84539,84507],{"class":153},[139,84541,2993],{"class":145},[139,84543,84512],{"class":153},[139,84545,157],{"class":145},[139,84547,410],{"class":153},[139,84549,413],{"class":145},[139,84551,2634],{"class":153},[139,84553,77482],{"class":145},[139,84555,35574],{"class":149},[139,84557,84527],{"class":160},[139,84559,84560],{"class":141,"line":313},[139,84561,843],{"emptyLinePlaceholder":842},[139,84563,84564,84566,84568,84570,84572,84574,84576,84578,84580,84582,84584,84586,84588,84590],{"class":141,"line":462},[139,84565,84498],{"class":153},[139,84567,2993],{"class":145},[139,84569,60480],{"class":153},[139,84571,157],{"class":145},[139,84573,84507],{"class":153},[139,84575,2993],{"class":145},[139,84577,84512],{"class":153},[139,84579,157],{"class":145},[139,84581,2634],{"class":153},[139,84583,413],{"class":145},[139,84585,2782],{"class":153},[139,84587,77482],{"class":145},[139,84589,35574],{"class":149},[139,84591,84592],{"class":160}," 'Mozill'\n",[139,84594,84595],{"class":141,"line":474},[139,84596,843],{"emptyLinePlaceholder":842},[139,84598,84599,84601,84603,84605,84607,84609,84611,84613,84615,84617,84619,84621],{"class":141,"line":484},[139,84600,84498],{"class":153},[139,84602,2993],{"class":145},[139,84604,60480],{"class":153},[139,84606,157],{"class":145},[139,84608,84507],{"class":153},[139,84610,2993],{"class":145},[139,84612,84512],{"class":153},[139,84614,157],{"class":145},[139,84616,1476],{"class":153},[139,84618,77482],{"class":145},[139,84620,35574],{"class":149},[139,84622,84623],{"class":160}," 'lla'\n",[139,84625,84626,84628,84630,84632,84634,84636,84638,84640,84642,84644,84646,84648,84650,84652],{"class":141,"line":989},[139,84627,84498],{"class":153},[139,84629,2993],{"class":145},[139,84631,60480],{"class":153},[139,84633,157],{"class":145},[139,84635,84507],{"class":153},[139,84637,2993],{"class":145},[139,84639,84512],{"class":153},[139,84641,157],{"class":145},[139,84643,1476],{"class":153},[139,84645,413],{"class":145},[139,84647,2807],{"class":153},[139,84649,77538],{"class":145},[139,84651,35574],{"class":149},[139,84653,84623],{"class":160},[139,84655,84656,84658,84660,84662,84664,84666,84668,84670,84672,84674,84676,84678,84680,84682],{"class":141,"line":994},[139,84657,84498],{"class":153},[139,84659,2993],{"class":145},[139,84661,60480],{"class":153},[139,84663,157],{"class":145},[139,84665,84507],{"class":153},[139,84667,2993],{"class":145},[139,84669,84512],{"class":153},[139,84671,157],{"class":145},[139,84673,2807],{"class":153},[139,84675,413],{"class":145},[139,84677,1476],{"class":153},[139,84679,77482],{"class":145},[139,84681,35574],{"class":149},[139,84683,84623],{"class":160},[139,84685,84686],{"class":141,"line":999},[139,84687,843],{"emptyLinePlaceholder":842},[139,84689,84690,84692,84694,84696,84698,84700,84702,84704,84706,84708,84710,84712,84714,84716],{"class":141,"line":1006},[139,84691,84498],{"class":153},[139,84693,2993],{"class":145},[139,84695,60480],{"class":153},[139,84697,157],{"class":145},[139,84699,84507],{"class":153},[139,84701,2993],{"class":145},[139,84703,84512],{"class":153},[139,84705,157],{"class":145},[139,84707,2634],{"class":153},[139,84709,413],{"class":145},[139,84711,2807],{"class":153},[139,84713,77482],{"class":145},[139,84715,35574],{"class":149},[139,84717,84718],{"class":160}," 'Mozilla'\n",[139,84720,84721,84723,84725,84727,84729,84731,84733,84735,84737,84739,84741,84743,84745,84747],{"class":141,"line":1027},[139,84722,84498],{"class":153},[139,84724,2993],{"class":145},[139,84726,60480],{"class":153},[139,84728,157],{"class":145},[139,84730,84507],{"class":153},[139,84732,2993],{"class":145},[139,84734,84512],{"class":153},[139,84736,157],{"class":145},[139,84738,2634],{"class":153},[139,84740,413],{"class":145},[139,84742,536],{"class":153},[139,84744,77482],{"class":145},[139,84746,35574],{"class":149},[139,84748,84718],{"class":160},[25177,84750,84752],{"id":84751},"_410533-startswith","4.10.5.3.3 startsWith",[19,84754,84755,84758,84759,84764,84765,84767,84768],{},[50,84756,84757],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1674,84760,84761],{},[50,84762,84763],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[50,84766,3660],{}," 或 ",[50,84769,68251],{},[130,84771,84773],{"className":79724,"code":84772,"language":79726,"meta":135,"style":135},"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",[50,84774,84775,84787,84806,84811,84831],{"__ignoreMap":135},[139,84776,84777,84779,84782,84784],{"class":141,"line":142},[139,84778,9066],{"class":149},[139,84780,84781],{"class":145}," str1 ",[139,84783,150],{"class":149},[139,84785,84786],{"class":160}," \"Saturday night plans\"\n",[139,84788,84789,84791,84793,84796,84799,84801,84804],{"class":141,"line":210},[139,84790,79761],{"class":145},[139,84792,60480],{"class":781},[139,84794,84795],{"class":145},"(str1.",[139,84797,84798],{"class":781},"startsWith",[139,84800,157],{"class":145},[139,84802,84803],{"class":160},"\"Sat\"",[139,84805,207],{"class":145},[139,84807,84808],{"class":141,"line":254},[139,84809,84810],{"class":2512},"\u002F\u002F Expected output: true\n",[139,84812,84813,84815,84817,84819,84821,84823,84825,84827,84829],{"class":141,"line":262},[139,84814,79761],{"class":145},[139,84816,60480],{"class":781},[139,84818,84795],{"class":145},[139,84820,84798],{"class":781},[139,84822,157],{"class":145},[139,84824,84803],{"class":160},[139,84826,413],{"class":145},[139,84828,421],{"class":153},[139,84830,207],{"class":145},[139,84832,84833],{"class":141,"line":313},[139,84834,84835],{"class":2512},"\u002F\u002F Expected output: false\n",[130,84837,84839],{"className":52871,"code":84838,"language":52873,"meta":135,"style":135},"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",[50,84840,84841,84846,84851,84855,84860,84865],{"__ignoreMap":135},[139,84842,84843],{"class":141,"line":142},[139,84844,84845],{"class":145},"startsWith(searchString)\n",[139,84847,84848],{"class":141,"line":210},[139,84849,84850],{"class":145},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[139,84852,84853],{"class":141,"line":254},[139,84854,843],{"emptyLinePlaceholder":842},[139,84856,84857],{"class":141,"line":262},[139,84858,84859],{"class":145},"const str3 = 'pink老师上课中'\n",[139,84861,84862],{"class":141,"line":313},[139,84863,84864],{"class":145},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[139,84866,84867],{"class":141,"line":462},[139,84868,84869],{"class":145},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25177,84871,84873],{"id":84872},"_410534-includes","4.10.5.3.4 includes",[19,84875,84876],{},"includes(searchString) includes(searchString, position)",[1760,84878,84879],{},[1763,84880,84881],{},"searchString:",[19,84883,84884,84885,84887,84888,84893,84894,84899,84900,23767,84903,84906,84907,84910],{},"一个要在 ",[50,84886,3600],{}," 中查找的字符串。",[2680,84889,84892],{"href":84890,"rel":84891},"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",[26128],"不能是正则表达式","。所有非正则表达式的值都会被",[2680,84895,84898],{"href":84896,"rel":84897},"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",[26128],"强制转换为字符串","，因此如果该参数被省略或传入 ",[50,84901,84902],{},"undefined",[50,84904,84905],{},"includes()"," 方法会在字符串中搜索 ",[50,84908,84909],{},"\"undefined\"","，这通常不是你想要的",[1760,84912,84913],{"start":210},[1763,84914,84915,3294],{},[50,84916,84917],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84919,84920,84921,84924,84925],{},"在字符串中开始搜索 ",[50,84922,84923],{},"searchString"," 的位置。默认值为 ",[50,84926,2634],{},[1760,84928,84929],{"start":254},[1763,84930,84931],{},"返回值：",[19,84933,84934,84935,84937,84938,84942,84943],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[50,84936,84923],{}," 为空字符串的情况），则返回 ",[1674,84939,84940],{},[50,84941,3660],{}," ，否则返回 ",[1674,84944,84945],{},[50,84946,68251],{},[1760,84948,84949],{"start":262},[1763,84950,84951],{},"异常：",[19,84953,84450,84954,16066,84956,84960],{},[50,84955,84923],{},[2680,84957,84959],{"href":84890,"rel":84958},[26128],"是一个正则表达式","，则会抛出",[19,84962,84963],{},"只要是有就是true，不需要非得以谁开头结尾",[130,84965,84967],{"className":79724,"code":84966,"language":79726,"meta":135,"style":135},"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",[50,84968,84969,84980,85003,85022,85042,85064,85083],{"__ignoreMap":135},[139,84970,84971,84973,84975,84977],{"class":141,"line":142},[139,84972,9066],{"class":149},[139,84974,82004],{"class":145},[139,84976,150],{"class":149},[139,84978,84979],{"class":160}," \"To be, or not to be, that is the question.\"\n",[139,84981,84982,84984,84986,84989,84992,84994,84997,85000],{"class":141,"line":210},[139,84983,79761],{"class":145},[139,84985,60480],{"class":781},[139,84987,84988],{"class":145},"(str.",[139,84990,84991],{"class":781},"includes",[139,84993,157],{"class":145},[139,84995,84996],{"class":160},"\"To be\"",[139,84998,84999],{"class":145},"))",[139,85001,85002],{"class":2512},"  \u002F\u002F true\n",[139,85004,85005,85007,85009,85011,85013,85015,85018,85020],{"class":141,"line":254},[139,85006,79761],{"class":145},[139,85008,60480],{"class":781},[139,85010,84988],{"class":145},[139,85012,84991],{"class":781},[139,85014,157],{"class":145},[139,85016,85017],{"class":160},"\"question\"",[139,85019,84999],{"class":145},[139,85021,85002],{"class":2512},[139,85023,85024,85026,85028,85030,85032,85034,85037,85039],{"class":141,"line":262},[139,85025,79761],{"class":145},[139,85027,60480],{"class":781},[139,85029,84988],{"class":145},[139,85031,84991],{"class":781},[139,85033,157],{"class":145},[139,85035,85036],{"class":160},"\"nonexistent\"",[139,85038,84999],{"class":145},[139,85040,85041],{"class":2512},"  \u002F\u002F false\n",[139,85043,85044,85046,85048,85050,85052,85054,85056,85058,85060,85062],{"class":141,"line":313},[139,85045,79761],{"class":145},[139,85047,60480],{"class":781},[139,85049,84988],{"class":145},[139,85051,84991],{"class":781},[139,85053,157],{"class":145},[139,85055,84996],{"class":160},[139,85057,413],{"class":145},[139,85059,410],{"class":153},[139,85061,84999],{"class":145},[139,85063,85041],{"class":2512},[139,85065,85066,85068,85070,85072,85074,85076,85079,85081],{"class":141,"line":462},[139,85067,79761],{"class":145},[139,85069,60480],{"class":781},[139,85071,84988],{"class":145},[139,85073,84991],{"class":781},[139,85075,157],{"class":145},[139,85077,85078],{"class":160},"\"TO BE\"",[139,85080,84999],{"class":145},[139,85082,85041],{"class":2512},[139,85084,85085,85087,85089,85091,85093,85095,85097,85099],{"class":141,"line":474},[139,85086,79761],{"class":145},[139,85088,60480],{"class":781},[139,85090,84988],{"class":145},[139,85092,84991],{"class":781},[139,85094,157],{"class":145},[139,85096,9926],{"class":160},[139,85098,84999],{"class":145},[139,85100,85002],{"class":2512},[25177,85102,85104],{"id":85103},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[130,85106,85108],{"className":55302,"code":85107,"language":55304,"meta":135,"style":135},"\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",[50,85109,85110,85118,85126,85131,85136,85141,85146,85151,85159],{"__ignoreMap":135},[139,85111,85112,85114,85116],{"class":141,"line":142},[139,85113,796],{"class":145},[139,85115,54037],{"class":53538},[139,85117,53545],{"class":145},[139,85119,85120,85122,85124],{"class":141,"line":210},[139,85121,54380],{"class":145},[139,85123,54050],{"class":53538},[139,85125,53545],{"class":145},[139,85127,85128],{"class":141,"line":254},[139,85129,85130],{"class":145},"    const num = 10\n",[139,85132,85133],{"class":141,"line":262},[139,85134,85135],{"class":145},"    \u002F\u002F 强制转换\n",[139,85137,85138],{"class":141,"line":313},[139,85139,85140],{"class":145},"    console.log(String(num))\n",[139,85142,85143],{"class":141,"line":462},[139,85144,85145],{"class":145},"    \u002F\u002F toString()方法转换\n",[139,85147,85148],{"class":141,"line":474},[139,85149,85150],{"class":145},"    console.log(num.toString())\n",[139,85152,85153,85155,85157],{"class":141,"line":484},[139,85154,54652],{"class":145},[139,85156,54050],{"class":53538},[139,85158,53545],{"class":145},[139,85160,85161,85163,85165],{"class":141,"line":989},[139,85162,54022],{"class":145},[139,85164,54037],{"class":53538},[139,85166,53545],{"class":145},[25177,85168,85170],{"id":85169},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85172,85173],{},[3760,85174],{"alt":135,"src":85175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[130,85177,85179],{"className":52871,"code":85178,"language":52873,"meta":135,"style":135},"\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",[50,85180,85181,85191,85205,85209,85217,85231,85251,85263,85271,85275,85283,85295,85303,85315,85320,85325,85330,85377,85393,85401,85409,85413],{"__ignoreMap":135},[139,85182,85183,85185,85187,85189],{"class":141,"line":142},[139,85184,53535],{"class":145},[139,85186,53539],{"class":53538},[139,85188,53542],{"class":781},[139,85190,53545],{"class":145},[139,85192,85193,85195,85197,85199,85201,85203],{"class":141,"line":210},[139,85194,796],{"class":145},[139,85196,52873],{"class":53538},[139,85198,53554],{"class":781},[139,85200,150],{"class":145},[139,85202,53559],{"class":160},[139,85204,53545],{"class":145},[139,85206,85207],{"class":141,"line":254},[139,85208,843],{"emptyLinePlaceholder":842},[139,85210,85211,85213,85215],{"class":141,"line":262},[139,85212,796],{"class":145},[139,85214,53572],{"class":53538},[139,85216,53545],{"class":145},[139,85218,85219,85221,85223,85225,85227,85229],{"class":141,"line":313},[139,85220,54380],{"class":145},[139,85222,53582],{"class":53538},[139,85224,53585],{"class":781},[139,85226,150],{"class":145},[139,85228,53590],{"class":160},[139,85230,53545],{"class":145},[139,85232,85233,85235,85237,85239,85241,85243,85245,85247,85249],{"class":141,"line":462},[139,85234,54380],{"class":145},[139,85236,53582],{"class":53538},[139,85238,17189],{"class":781},[139,85240,150],{"class":145},[139,85242,53629],{"class":160},[139,85244,53609],{"class":781},[139,85246,150],{"class":145},[139,85248,53636],{"class":160},[139,85250,53545],{"class":145},[139,85252,85253,85255,85257,85259,85261],{"class":141,"line":474},[139,85254,54380],{"class":145},[139,85256,53645],{"class":53538},[139,85258,53648],{"class":145},[139,85260,53645],{"class":53538},[139,85262,53545],{"class":145},[139,85264,85265,85267,85269],{"class":141,"line":484},[139,85266,54022],{"class":145},[139,85268,53572],{"class":53538},[139,85270,53545],{"class":145},[139,85272,85273],{"class":141,"line":989},[139,85274,843],{"emptyLinePlaceholder":842},[139,85276,85277,85279,85281],{"class":141,"line":994},[139,85278,796],{"class":145},[139,85280,54037],{"class":53538},[139,85282,53545],{"class":145},[139,85284,85285,85287,85289,85291,85293],{"class":141,"line":999},[139,85286,54380],{"class":145},[139,85288,53848],{"class":53538},[139,85290,57548],{"class":145},[139,85292,53848],{"class":53538},[139,85294,53545],{"class":145},[139,85296,85297,85299,85301],{"class":141,"line":1006},[139,85298,54380],{"class":145},[139,85300,54050],{"class":53538},[139,85302,53545],{"class":145},[139,85304,85305,85307,85310,85312],{"class":141,"line":1027},[139,85306,13494],{"class":149},[139,85308,85309],{"class":153}," gift",[139,85311,15836],{"class":149},[139,85313,85314],{"class":160}," '50g的茶叶，清洗球'\n",[139,85316,85317],{"class":141,"line":1040},[139,85318,85319],{"class":2512},"    \u002F\u002F 1.把字符串拆分为数组\n",[139,85321,85322],{"class":141,"line":2160},[139,85323,85324],{"class":2512},"    \u002F\u002F console.log(gift.split(','))\n",[139,85326,85327],{"class":141,"line":2188},[139,85328,85329],{"class":2512},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[139,85331,85332,85334,85336,85338,85341,85344,85346,85349,85351,85353,85355,85357,85359,85362,85364,85367,85369,85371,85373,85375],{"class":141,"line":3944},[139,85333,13494],{"class":149},[139,85335,76148],{"class":153},[139,85337,15836],{"class":149},[139,85339,85340],{"class":145}," gift.",[139,85342,85343],{"class":781},"split",[139,85345,157],{"class":145},[139,85347,85348],{"class":160},"'，'",[139,85350,33078],{"class":145},[139,85352,76273],{"class":781},[139,85354,157],{"class":145},[139,85356,82024],{"class":2111},[139,85358,82027],{"class":149},[139,85360,85361],{"class":160}," `\u003Cspan>【赠品】${",[139,85363,82024],{"class":145},[139,85365,85366],{"class":160},"}\u003C\u002Fspan>\u003Cbr>`",[139,85368,33078],{"class":145},[139,85370,76452],{"class":781},[139,85372,157],{"class":145},[139,85374,76457],{"class":160},[139,85376,164],{"class":145},[139,85378,85379,85381,85383,85385,85387,85389,85391],{"class":141,"line":3963},[139,85380,54642],{"class":145},[139,85382,56633],{"class":781},[139,85384,157],{"class":145},[139,85386,84159],{"class":160},[139,85388,76478],{"class":145},[139,85390,150],{"class":149},[139,85392,76214],{"class":145},[139,85394,85395,85397,85399],{"class":141,"line":3968},[139,85396,54652],{"class":145},[139,85398,54050],{"class":53538},[139,85400,53545],{"class":145},[139,85402,85403,85405,85407],{"class":141,"line":3982},[139,85404,54022],{"class":145},[139,85406,54037],{"class":53538},[139,85408,53545],{"class":145},[139,85410,85411],{"class":141,"line":3987},[139,85412,843],{"emptyLinePlaceholder":842},[139,85414,85415,85417,85419],{"class":141,"line":4014},[139,85416,54022],{"class":145},[139,85418,52873],{"class":53538},[139,85420,53545],{"class":145},[24265,85422,85424],{"id":85423},"_41054-number","4.10.5.4 Number",[19,85426,85427],{},[3760,85428],{"alt":135,"src":85429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85431,85432],{},"整数也可以进行toFixed来保留小数",[19,85434,85435],{},"比如：",[19,85437,85438],{},"const price=10",[19,85440,85441],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24265,85443,85445],{"id":85444},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85447,85448],{},[3760,85449],{"alt":135,"src":85450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[130,85452,85454],{"className":52871,"code":85453,"language":52873,"meta":135,"style":135},"\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",[50,85455,85456,85466,85480,85484,85492,85506,85526,85538,85546,85552,85562,85572,85582,85586,85590,85596,85608,85622,85626,85630,85636,85648,85664,85674,85690,85694,85698,85704,85714,85724,85728,85732,85740,85752,85764,85776,85780,85784,85792,85804,85808,85812,85823,85833,85845,85857,85867,85871,85875,85883,85892,85904,85914,85924,85928,85932,85940,85949,85956,85966,85978,85982,85986,85995,86005,86016,86028,86040,86044,86048,86057,86067,86078,86082,86086,86092,86104,86116,86126,86136,86154,86166,86170,86174,86183,86195,86205,86215,86227,86231,86239,86247,86251,86259,86273,86281,86295,86323,86331,86339,86349,86353,86361,86369,86378,86386,86395,86405,86409,86413,86421,86429,86438,86446,86454,86467,86471,86475,86483,86491,86500,86508,86516,86531,86535,86539,86547,86555,86564,86572,86580,86594,86602,86606,86610,86615,86641,86646,86683,86688,86711,86716,86770,86775,86811,86815,86821,86826,86835,86849,86858,86877,86886,86896,86901,86906,86919,86924,86978,87004,87012,87020,87024],{"__ignoreMap":135},[139,85457,85458,85460,85462,85464],{"class":141,"line":142},[139,85459,53535],{"class":145},[139,85461,53539],{"class":53538},[139,85463,53542],{"class":781},[139,85465,53545],{"class":145},[139,85467,85468,85470,85472,85474,85476,85478],{"class":141,"line":210},[139,85469,796],{"class":145},[139,85471,52873],{"class":53538},[139,85473,53554],{"class":781},[139,85475,150],{"class":145},[139,85477,53559],{"class":160},[139,85479,53545],{"class":145},[139,85481,85482],{"class":141,"line":254},[139,85483,843],{"emptyLinePlaceholder":842},[139,85485,85486,85488,85490],{"class":141,"line":262},[139,85487,796],{"class":145},[139,85489,53572],{"class":53538},[139,85491,53545],{"class":145},[139,85493,85494,85496,85498,85500,85502,85504],{"class":141,"line":313},[139,85495,54380],{"class":145},[139,85497,53582],{"class":53538},[139,85499,53585],{"class":781},[139,85501,150],{"class":145},[139,85503,53590],{"class":160},[139,85505,53545],{"class":145},[139,85507,85508,85510,85512,85514,85516,85518,85520,85522,85524],{"class":141,"line":462},[139,85509,54380],{"class":145},[139,85511,53582],{"class":53538},[139,85513,17189],{"class":781},[139,85515,150],{"class":145},[139,85517,53629],{"class":160},[139,85519,53609],{"class":781},[139,85521,150],{"class":145},[139,85523,53636],{"class":160},[139,85525,53545],{"class":145},[139,85527,85528,85530,85532,85534,85536],{"class":141,"line":474},[139,85529,54380],{"class":145},[139,85531,53645],{"class":53538},[139,85533,53648],{"class":145},[139,85535,53645],{"class":53538},[139,85537,53545],{"class":145},[139,85539,85540,85542,85544],{"class":141,"line":484},[139,85541,54380],{"class":145},[139,85543,2348],{"class":53538},[139,85545,53545],{"class":145},[139,85547,85548,85550],{"class":141,"line":989},[139,85549,8677],{"class":53538},[139,85551,17840],{"class":145},[139,85553,85554,85556,85558,85560],{"class":141,"line":994},[139,85555,56929],{"class":153},[139,85557,2265],{"class":145},[139,85559,2634],{"class":153},[139,85561,3591],{"class":145},[139,85563,85564,85566,85568,85570],{"class":141,"line":999},[139,85565,56940],{"class":153},[139,85567,2265],{"class":145},[139,85569,2634],{"class":153},[139,85571,3591],{"class":145},[139,85573,85574,85576,85578,85580],{"class":141,"line":1006},[139,85575,74825],{"class":153},[139,85577,2265],{"class":145},[139,85579,62738],{"class":153},[139,85581,3591],{"class":145},[139,85583,85584],{"class":141,"line":1027},[139,85585,4472],{"class":145},[139,85587,85588],{"class":141,"line":1040},[139,85589,843],{"emptyLinePlaceholder":842},[139,85591,85592,85594],{"class":141,"line":2160},[139,85593,64356],{"class":781},[139,85595,17840],{"class":145},[139,85597,85598,85600,85602,85604,85606],{"class":141,"line":2188},[139,85599,57005],{"class":153},[139,85601,2265],{"class":145},[139,85603,80803],{"class":153},[139,85605,53729],{"class":149},[139,85607,3591],{"class":145},[139,85609,85610,85612,85614,85616,85618,85620],{"class":141,"line":3944},[139,85611,56940],{"class":153},[139,85613,2265],{"class":145},[139,85615,1017],{"class":153},[139,85617,53729],{"class":149},[139,85619,53793],{"class":153},[139,85621,3591],{"class":145},[139,85623,85624],{"class":141,"line":3963},[139,85625,4472],{"class":145},[139,85627,85628],{"class":141,"line":3968},[139,85629,843],{"emptyLinePlaceholder":842},[139,85631,85632,85634],{"class":141,"line":3982},[139,85633,80854],{"class":781},[139,85635,17840],{"class":145},[139,85637,85638,85640,85642,85644,85646],{"class":141,"line":3987},[139,85639,56929],{"class":153},[139,85641,2265],{"class":145},[139,85643,3010],{"class":153},[139,85645,53729],{"class":149},[139,85647,3591],{"class":145},[139,85649,85650,85652,85654,85656,85658,85660,85662],{"class":141,"line":4014},[139,85651,64093],{"class":153},[139,85653,2265],{"class":145},[139,85655,30381],{"class":153},[139,85657,80909],{"class":153},[139,85659,80912],{"class":153},[139,85661,3130],{"class":149},[139,85663,3591],{"class":145},[139,85665,85666,85668,85670,85672],{"class":141,"line":4019},[139,85667,57243],{"class":153},[139,85669,2265],{"class":145},[139,85671,53714],{"class":153},[139,85673,3591],{"class":145},[139,85675,85676,85678,85680,85682,85684,85686,85688],{"class":141,"line":4036},[139,85677,64210],{"class":153},[139,85679,2265],{"class":145},[139,85681,410],{"class":153},[139,85683,53729],{"class":149},[139,85685,53758],{"class":153},[139,85687,64477],{"class":153},[139,85689,3591],{"class":145},[139,85691,85692],{"class":141,"line":4041},[139,85693,4472],{"class":145},[139,85695,85696],{"class":141,"line":4046},[139,85697,843],{"emptyLinePlaceholder":842},[139,85699,85700,85702],{"class":141,"line":4051},[139,85701,80972],{"class":781},[139,85703,17840],{"class":145},[139,85705,85706,85708,85710,85712],{"class":141,"line":4065},[139,85707,64258],{"class":153},[139,85709,2265],{"class":145},[139,85711,64263],{"class":153},[139,85713,3591],{"class":145},[139,85715,85716,85718,85720,85722],{"class":141,"line":4070},[139,85717,57118],{"class":153},[139,85719,2265],{"class":145},[139,85721,64051],{"class":153},[139,85723,3591],{"class":145},[139,85725,85726],{"class":141,"line":4860},[139,85727,4472],{"class":145},[139,85729,85730],{"class":141,"line":4874},[139,85731,843],{"emptyLinePlaceholder":842},[139,85733,85734,85736,85738],{"class":141,"line":4882},[139,85735,80854],{"class":781},[139,85737,57849],{"class":53538},[139,85739,17840],{"class":145},[139,85741,85742,85744,85746,85748,85750],{"class":141,"line":4887},[139,85743,57005],{"class":153},[139,85745,2265],{"class":145},[139,85747,3047],{"class":153},[139,85749,53729],{"class":149},[139,85751,3591],{"class":145},[139,85753,85754,85756,85758,85760,85762],{"class":141,"line":4893},[139,85755,57019],{"class":153},[139,85757,2265],{"class":145},[139,85759,3047],{"class":153},[139,85761,53729],{"class":149},[139,85763,3591],{"class":145},[139,85765,85766,85768,85770,85772,85774],{"class":141,"line":4899},[139,85767,63983],{"class":153},[139,85769,2265],{"class":145},[139,85771,1481],{"class":153},[139,85773,53729],{"class":149},[139,85775,3591],{"class":145},[139,85777,85778],{"class":141,"line":4904},[139,85779,4472],{"class":145},[139,85781,85782],{"class":141,"line":10222},[139,85783,843],{"emptyLinePlaceholder":842},[139,85785,85786,85788,85790],{"class":141,"line":10246},[139,85787,80854],{"class":781},[139,85789,64537],{"class":781},[139,85791,17840],{"class":145},[139,85793,85794,85796,85798,85800,85802],{"class":141,"line":10251},[139,85795,57005],{"class":153},[139,85797,2265],{"class":145},[139,85799,1022],{"class":153},[139,85801,53729],{"class":149},[139,85803,3591],{"class":145},[139,85805,85806],{"class":141,"line":10257},[139,85807,4472],{"class":145},[139,85809,85810],{"class":141,"line":10284},[139,85811,843],{"emptyLinePlaceholder":842},[139,85813,85814,85816,85818,85821],{"class":141,"line":10289},[139,85815,80854],{"class":781},[139,85817,64537],{"class":781},[139,85819,85820],{"class":781}," .tag",[139,85822,17840],{"class":145},[139,85824,85825,85827,85829,85831],{"class":141,"line":10295},[139,85826,57243],{"class":153},[139,85828,2265],{"class":145},[139,85830,63102],{"class":153},[139,85832,3591],{"class":145},[139,85834,85835,85837,85839,85841,85843],{"class":141,"line":10307},[139,85836,56929],{"class":153},[139,85838,2265],{"class":145},[139,85840,416],{"class":153},[139,85842,53729],{"class":149},[139,85844,3591],{"class":145},[139,85846,85847,85849,85851,85853,85855],{"class":141,"line":10319},[139,85848,57156],{"class":153},[139,85850,2265],{"class":145},[139,85852,2934],{"class":153},[139,85854,53729],{"class":149},[139,85856,3591],{"class":145},[139,85858,85859,85861,85863,85865],{"class":141,"line":10331},[139,85860,59650],{"class":153},[139,85862,2265],{"class":145},[139,85864,64303],{"class":153},[139,85866,3591],{"class":145},[139,85868,85869],{"class":141,"line":11990},[139,85870,4472],{"class":145},[139,85872,85873],{"class":141,"line":12015},[139,85874,843],{"emptyLinePlaceholder":842},[139,85876,85877,85879,85881],{"class":141,"line":12038},[139,85878,80854],{"class":781},[139,85880,81146],{"class":781},[139,85882,33715],{"class":145},[139,85884,85885,85887,85890],{"class":141,"line":12062},[139,85886,80854],{"class":781},[139,85888,85889],{"class":781}," .sub-total",[139,85891,17840],{"class":145},[139,85893,85894,85896,85898,85900,85902],{"class":141,"line":12067},[139,85895,57156],{"class":153},[139,85897,2265],{"class":145},[139,85899,3085],{"class":153},[139,85901,53729],{"class":149},[139,85903,3591],{"class":145},[139,85905,85906,85908,85910,85912],{"class":141,"line":12072},[139,85907,59650],{"class":153},[139,85909,2265],{"class":145},[139,85911,81169],{"class":153},[139,85913,3591],{"class":145},[139,85915,85916,85918,85920,85922],{"class":141,"line":12077},[139,85917,64070],{"class":153},[139,85919,2265],{"class":145},[139,85921,410],{"class":153},[139,85923,3591],{"class":145},[139,85925,85926],{"class":141,"line":12086},[139,85927,4472],{"class":145},[139,85929,85930],{"class":141,"line":12091},[139,85931,843],{"emptyLinePlaceholder":842},[139,85933,85934,85936,85938],{"class":141,"line":12097},[139,85935,80854],{"class":781},[139,85937,81186],{"class":781},[139,85939,33715],{"class":145},[139,85941,85942,85944,85947],{"class":141,"line":12118},[139,85943,80854],{"class":781},[139,85945,85946],{"class":781}," .sub-total::before",[139,85948,33715],{"class":145},[139,85950,85951,85954],{"class":141,"line":12124},[139,85952,85953],{"class":781},"    .amount::before",[139,85955,17840],{"class":145},[139,85957,85958,85960,85962,85964],{"class":141,"line":12138},[139,85959,81193],{"class":153},[139,85961,2265],{"class":145},[139,85963,81198],{"class":160},[139,85965,3591],{"class":145},[139,85967,85968,85970,85972,85974,85976],{"class":141,"line":12144},[139,85969,57156],{"class":153},[139,85971,2265],{"class":145},[139,85973,2934],{"class":153},[139,85975,53729],{"class":149},[139,85977,3591],{"class":145},[139,85979,85980],{"class":141,"line":12171},[139,85981,4472],{"class":145},[139,85983,85984],{"class":141,"line":12180},[139,85985,843],{"emptyLinePlaceholder":842},[139,85987,85988,85990,85993],{"class":141,"line":12186},[139,85989,80854],{"class":781},[139,85991,85992],{"class":781}," .spec",[139,85994,17840],{"class":145},[139,85996,85997,85999,86001,86003],{"class":141,"line":12194},[139,85998,64070],{"class":153},[139,86000,2265],{"class":145},[139,86002,416],{"class":153},[139,86004,3591],{"class":145},[139,86006,86007,86009,86011,86014],{"class":141,"line":12199},[139,86008,59650],{"class":153},[139,86010,2265],{"class":145},[139,86012,86013],{"class":153},"#888",[139,86015,3591],{"class":145},[139,86017,86018,86020,86022,86024,86026],{"class":141,"line":18871},[139,86019,57156],{"class":153},[139,86021,2265],{"class":145},[139,86023,2984],{"class":153},[139,86025,53729],{"class":149},[139,86027,3591],{"class":145},[139,86029,86030,86032,86034,86036,86038],{"class":141,"line":18877},[139,86031,64233],{"class":153},[139,86033,2265],{"class":145},[139,86035,3135],{"class":153},[139,86037,53729],{"class":149},[139,86039,3591],{"class":145},[139,86041,86042],{"class":141,"line":18900},[139,86043,4472],{"class":145},[139,86045,86046],{"class":141,"line":18906},[139,86047,843],{"emptyLinePlaceholder":842},[139,86049,86050,86052,86055],{"class":141,"line":18929},[139,86051,80854],{"class":781},[139,86053,86054],{"class":781}," .count",[139,86056,17840],{"class":145},[139,86058,86059,86061,86063,86065],{"class":141,"line":18943},[139,86060,64070],{"class":153},[139,86062,2265],{"class":145},[139,86064,410],{"class":153},[139,86066,3591],{"class":145},[139,86068,86069,86071,86073,86076],{"class":141,"line":18963},[139,86070,59650],{"class":153},[139,86072,2265],{"class":145},[139,86074,86075],{"class":153},"#aaa",[139,86077,3591],{"class":145},[139,86079,86080],{"class":141,"line":18969},[139,86081,4472],{"class":145},[139,86083,86084],{"class":141,"line":18980},[139,86085,843],{"emptyLinePlaceholder":842},[139,86087,86088,86090],{"class":141,"line":19003},[139,86089,74704],{"class":781},[139,86091,17840],{"class":145},[139,86093,86094,86096,86098,86100,86102],{"class":141,"line":19025},[139,86095,57005],{"class":153},[139,86097,2265],{"class":145},[139,86099,80803],{"class":153},[139,86101,53729],{"class":149},[139,86103,3591],{"class":145},[139,86105,86106,86108,86110,86112,86114],{"class":141,"line":19030},[139,86107,56940],{"class":153},[139,86109,2265],{"class":145},[139,86111,2634],{"class":153},[139,86113,53793],{"class":153},[139,86115,3591],{"class":145},[139,86117,86118,86120,86122,86124],{"class":141,"line":19036},[139,86119,57243],{"class":153},[139,86121,2265],{"class":145},[139,86123,53714],{"class":153},[139,86125,3591],{"class":145},[139,86127,86128,86130,86132,86134],{"class":141,"line":19050},[139,86129,57254],{"class":153},[139,86131,2265],{"class":145},[139,86133,53817],{"class":153},[139,86135,3591],{"class":145},[139,86137,86138,86141,86143,86145,86147,86149,86152],{"class":141,"line":19063},[139,86139,86140],{"class":153},"      border-top",[139,86142,2265],{"class":145},[139,86144,410],{"class":153},[139,86146,53729],{"class":149},[139,86148,53758],{"class":153},[139,86150,86151],{"class":153}," #4e4e4e",[139,86153,3591],{"class":145},[139,86155,86156,86158,86160,86162,86164],{"class":141,"line":19068},[139,86157,56929],{"class":153},[139,86159,2265],{"class":145},[139,86161,3135],{"class":153},[139,86163,53729],{"class":149},[139,86165,3591],{"class":145},[139,86167,86168],{"class":141,"line":19082},[139,86169,4472],{"class":145},[139,86171,86172],{"class":141,"line":19087},[139,86173,843],{"emptyLinePlaceholder":842},[139,86175,86176,86178,86181],{"class":141,"line":19093},[139,86177,74704],{"class":781},[139,86179,86180],{"class":781}," .amount",[139,86182,17840],{"class":145},[139,86184,86185,86187,86189,86191,86193],{"class":141,"line":19098},[139,86186,57156],{"class":153},[139,86188,2265],{"class":145},[139,86190,3085],{"class":153},[139,86192,53729],{"class":149},[139,86194,3591],{"class":145},[139,86196,86197,86199,86201,86203],{"class":141,"line":19112},[139,86198,59650],{"class":153},[139,86200,2265],{"class":145},[139,86202,81169],{"class":153},[139,86204,3591],{"class":145},[139,86206,86207,86209,86211,86213],{"class":141,"line":19117},[139,86208,64567],{"class":153},[139,86210,2265],{"class":145},[139,86212,53726],{"class":153},[139,86214,3591],{"class":145},[139,86216,86217,86219,86221,86223,86225],{"class":141,"line":19122},[139,86218,63983],{"class":153},[139,86220,2265],{"class":145},[139,86222,3091],{"class":153},[139,86224,53729],{"class":149},[139,86226,3591],{"class":145},[139,86228,86229],{"class":141,"line":19136},[139,86230,4472],{"class":145},[139,86232,86233,86235,86237],{"class":141,"line":19148},[139,86234,54652],{"class":145},[139,86236,2348],{"class":53538},[139,86238,53545],{"class":145},[139,86240,86241,86243,86245],{"class":141,"line":19153},[139,86242,54022],{"class":145},[139,86244,53572],{"class":53538},[139,86246,53545],{"class":145},[139,86248,86249],{"class":141,"line":19166},[139,86250,843],{"emptyLinePlaceholder":842},[139,86252,86253,86255,86257],{"class":141,"line":19171},[139,86254,796],{"class":145},[139,86256,54037],{"class":53538},[139,86258,53545],{"class":145},[139,86260,86261,86263,86265,86267,86269,86271],{"class":141,"line":19176},[139,86262,54380],{"class":145},[139,86264,53848],{"class":53538},[139,86266,55721],{"class":781},[139,86268,150],{"class":145},[139,86270,64841],{"class":160},[139,86272,53545],{"class":145},[139,86274,86275,86277,86279],{"class":141,"line":19181},[139,86276,54652],{"class":145},[139,86278,53848],{"class":53538},[139,86280,53545],{"class":145},[139,86282,86283,86285,86287,86289,86291,86293],{"class":141,"line":19194},[139,86284,54380],{"class":145},[139,86286,53848],{"class":53538},[139,86288,55721],{"class":781},[139,86290,150],{"class":145},[139,86292,64813],{"class":160},[139,86294,53545],{"class":145},[139,86296,86297,86299,86301,86304,86306,86308,86310,86313,86315,86317,86319,86321],{"class":141,"line":19199},[139,86298,53579],{"class":145},[139,86300,53848],{"class":53538},[139,86302,86303],{"class":145},">合计：\u003C",[139,86305,139],{"class":53538},[139,86307,55721],{"class":781},[139,86309,150],{"class":145},[139,86311,86312],{"class":160},"\"amount\"",[139,86314,57548],{"class":145},[139,86316,139],{"class":53538},[139,86318,57548],{"class":145},[139,86320,53848],{"class":53538},[139,86322,53545],{"class":145},[139,86324,86325,86327,86329],{"class":141,"line":34880},[139,86326,54652],{"class":145},[139,86328,53848],{"class":53538},[139,86330,53545],{"class":145},[139,86332,86333,86335,86337],{"class":141,"line":34886},[139,86334,54380],{"class":145},[139,86336,54050],{"class":53538},[139,86338,53545],{"class":145},[139,86340,86341,86343,86345,86347],{"class":141,"line":34892},[139,86342,13494],{"class":149},[139,86344,81606],{"class":153},[139,86346,15836],{"class":149},[139,86348,57681],{"class":145},[139,86350,86351],{"class":141,"line":34898},[139,86352,81615],{"class":145},[139,86354,86355,86357,86359],{"class":141,"line":34904},[139,86356,81620],{"class":145},[139,86358,81623],{"class":160},[139,86360,33715],{"class":145},[139,86362,86363,86365,86367],{"class":141,"line":34915},[139,86364,81630],{"class":145},[139,86366,81633],{"class":160},[139,86368,33715],{"class":145},[139,86370,86371,86373,86376],{"class":141,"line":34921},[139,86372,81640],{"class":145},[139,86374,86375],{"class":153},"289.9",[139,86377,33715],{"class":145},[139,86379,86380,86382,86384],{"class":141,"line":34941},[139,86381,81650],{"class":145},[139,86383,81653],{"class":160},[139,86385,33715],{"class":145},[139,86387,86388,86391,86393],{"class":141,"line":34947},[139,86389,86390],{"class":145},"        count: ",[139,86392,416],{"class":153},[139,86394,33715],{"class":145},[139,86396,86397,86400,86403],{"class":141,"line":34958},[139,86398,86399],{"class":145},"        spec: { color: ",[139,86401,86402],{"class":160},"'白色'",[139,86404,57838],{"class":145},[139,86406,86407],{"class":141,"line":34964},[139,86408,80121],{"class":145},[139,86410,86411],{"class":141,"line":34970},[139,86412,81615],{"class":145},[139,86414,86415,86417,86419],{"class":141,"line":34976},[139,86416,81620],{"class":145},[139,86418,81714],{"class":160},[139,86420,33715],{"class":145},[139,86422,86423,86425,86427],{"class":141,"line":34982},[139,86424,81630],{"class":145},[139,86426,81723],{"class":160},[139,86428,33715],{"class":145},[139,86430,86431,86433,86436],{"class":141,"line":34988},[139,86432,81640],{"class":145},[139,86434,86435],{"class":153},"109.8",[139,86437,33715],{"class":145},[139,86439,86440,86442,86444],{"class":141,"line":34994},[139,86441,81650],{"class":145},[139,86443,81741],{"class":160},[139,86445,33715],{"class":145},[139,86447,86448,86450,86452],{"class":141,"line":35000},[139,86449,86390],{"class":145},[139,86451,421],{"class":153},[139,86453,33715],{"class":145},[139,86455,86456,86459,86461,86463,86465],{"class":141,"line":35020},[139,86457,86458],{"class":145},"        spec: { size: ",[139,86460,84131],{"class":160},[139,86462,57698],{"class":145},[139,86464,84136],{"class":160},[139,86466,57838],{"class":145},[139,86468,86469],{"class":141,"line":35026},[139,86470,80121],{"class":145},[139,86472,86473],{"class":141,"line":35042},[139,86474,81615],{"class":145},[139,86476,86477,86479,86481],{"class":141,"line":35048},[139,86478,81620],{"class":145},[139,86480,81758],{"class":160},[139,86482,33715],{"class":145},[139,86484,86485,86487,86489],{"class":141,"line":35062},[139,86486,81630],{"class":145},[139,86488,81767],{"class":160},[139,86490,33715],{"class":145},[139,86492,86493,86495,86498],{"class":141,"line":35068},[139,86494,81640],{"class":145},[139,86496,86497],{"class":153},"488",[139,86499,33715],{"class":145},[139,86501,86502,86504,86506],{"class":141,"line":35083},[139,86503,81650],{"class":145},[139,86505,81785],{"class":160},[139,86507,33715],{"class":145},[139,86509,86510,86512,86514],{"class":141,"line":35089},[139,86511,86390],{"class":145},[139,86513,410],{"class":153},[139,86515,33715],{"class":145},[139,86517,86518,86520,86523,86526,86529],{"class":141,"line":35098},[139,86519,86399],{"class":145},[139,86521,86522],{"class":160},"'青色'",[139,86524,86525],{"class":145},", sum: ",[139,86527,86528],{"class":160},"'一大四小'",[139,86530,57838],{"class":145},[139,86532,86533],{"class":141,"line":35104},[139,86534,80121],{"class":145},[139,86536,86537],{"class":141,"line":35113},[139,86538,81615],{"class":145},[139,86540,86541,86543,86545],{"class":141,"line":35119},[139,86542,81620],{"class":145},[139,86544,81802],{"class":160},[139,86546,33715],{"class":145},[139,86548,86549,86551,86553],{"class":141,"line":35125},[139,86550,81630],{"class":145},[139,86552,81811],{"class":160},[139,86554,33715],{"class":145},[139,86556,86557,86559,86562],{"class":141,"line":35134},[139,86558,81640],{"class":145},[139,86560,86561],{"class":153},"139",[139,86563,33715],{"class":145},[139,86565,86566,86568,86570],{"class":141,"line":35140},[139,86567,81650],{"class":145},[139,86569,81829],{"class":160},[139,86571,33715],{"class":145},[139,86573,86574,86576,86578],{"class":141,"line":35151},[139,86575,86390],{"class":145},[139,86577,410],{"class":153},[139,86579,33715],{"class":145},[139,86581,86582,86584,86587,86589,86592],{"class":141,"line":35157},[139,86583,86458],{"class":145},[139,86585,86586],{"class":160},"'小号'",[139,86588,57698],{"class":145},[139,86590,86591],{"class":160},"'紫色'",[139,86593,57704],{"class":145},[139,86595,86596,86599],{"class":141,"line":35176},[139,86597,86598],{"class":145},"        gift: ",[139,86600,86601],{"class":160},"'50g茶叶,清洗球'\n",[139,86603,86604],{"class":141,"line":35182},[139,86605,54633],{"class":145},[139,86607,86608],{"class":141,"line":35193},[139,86609,55344],{"class":145},[139,86611,86612],{"class":141,"line":35199},[139,86613,86614],{"class":2512},"    \u002F\u002F  1.根据数据渲染页面\n",[139,86616,86617,86619,86621,86623,86625,86627,86629,86631,86633,86635,86637,86639],{"class":141,"line":35219},[139,86618,54642],{"class":145},[139,86620,56633],{"class":781},[139,86622,157],{"class":145},[139,86624,82129],{"class":160},[139,86626,76478],{"class":145},[139,86628,150],{"class":149},[139,86630,82276],{"class":145},[139,86632,76273],{"class":781},[139,86634,157],{"class":145},[139,86636,82024],{"class":2111},[139,86638,82027],{"class":149},[139,86640,17840],{"class":145},[139,86642,86643],{"class":141,"line":35235},[139,86644,86645],{"class":2512},"      \u002F\u002F 对象解构\n",[139,86647,86648,86650,86652,86654,86656,86658,86660,86663,86665,86667,86669,86672,86674,86677,86679,86681],{"class":141,"line":35241},[139,86649,60461],{"class":149},[139,86651,82036],{"class":145},[139,86653,82048],{"class":153},[139,86655,413],{"class":145},[139,86657,1676],{"class":153},[139,86659,413],{"class":145},[139,86661,86662],{"class":153},"count",[139,86664,413],{"class":145},[139,86666,82043],{"class":153},[139,86668,413],{"class":145},[139,86670,86671],{"class":153},"spec",[139,86673,413],{"class":145},[139,86675,86676],{"class":153},"gift",[139,86678,82051],{"class":145},[139,86680,150],{"class":149},[139,86682,82056],{"class":145},[139,86684,86685],{"class":141,"line":35255},[139,86686,86687],{"class":2512},"      \u002F\u002F 规格文字模块处理\n",[139,86689,86690,86692,86695,86697,86699,86701,86703,86705,86707,86709],{"class":141,"line":35261},[139,86691,60461],{"class":149},[139,86693,86694],{"class":153}," text",[139,86696,15836],{"class":149},[139,86698,84166],{"class":145},[139,86700,84169],{"class":781},[139,86702,84172],{"class":145},[139,86704,76452],{"class":781},[139,86706,157],{"class":145},[139,86708,84179],{"class":160},[139,86710,164],{"class":145},[139,86712,86713],{"class":141,"line":35267},[139,86714,86715],{"class":2512},"      \u002F\u002F 处理赠品模块\n",[139,86717,86718,86720,86722,86724,86727,86729,86731,86733,86735,86738,86740,86742,86744,86746,86748,86751,86753,86756,86758,86760,86762,86764,86766,86768],{"class":141,"line":35278},[139,86719,60461],{"class":149},[139,86721,76148],{"class":153},[139,86723,15836],{"class":149},[139,86725,86726],{"class":145}," gift ",[139,86728,3417],{"class":149},[139,86730,85340],{"class":145},[139,86732,85343],{"class":781},[139,86734,157],{"class":145},[139,86736,86737],{"class":160},"','",[139,86739,33078],{"class":145},[139,86741,76273],{"class":781},[139,86743,157],{"class":145},[139,86745,82024],{"class":2111},[139,86747,82027],{"class":149},[139,86749,86750],{"class":160}," `\u003Cspan class=\"tag\">【赠品】${",[139,86752,82024],{"class":145},[139,86754,86755],{"class":160},"}\u003C\u002Fspan>`",[139,86757,33078],{"class":145},[139,86759,76452],{"class":781},[139,86761,157],{"class":145},[139,86763,76457],{"class":160},[139,86765,2120],{"class":145},[139,86767,3294],{"class":149},[139,86769,72334],{"class":160},[139,86771,86772],{"class":141,"line":35284},[139,86773,86774],{"class":2512},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[139,86776,86777,86779,86782,86784,86787,86789,86791,86793,86796,86798,86800,86802,86805,86807,86809],{"class":141,"line":35290},[139,86778,60461],{"class":149},[139,86780,86781],{"class":153}," subtotal",[139,86783,15836],{"class":149},[139,86785,86786],{"class":145}," ((price ",[139,86788,2892],{"class":149},[139,86790,8028],{"class":153},[139,86792,8792],{"class":149},[139,86794,86795],{"class":145}," count) ",[139,86797,3019],{"class":149},[139,86799,8028],{"class":153},[139,86801,33078],{"class":145},[139,86803,86804],{"class":781},"toFixed",[139,86806,157],{"class":145},[139,86808,416],{"class":153},[139,86810,164],{"class":145},[139,86812,86813],{"class":141,"line":35300},[139,86814,843],{"emptyLinePlaceholder":842},[139,86816,86817,86819],{"class":141,"line":35306},[139,86818,76211],{"class":149},[139,86820,72398],{"class":160},[139,86822,86823],{"class":141,"line":35317},[139,86824,86825],{"class":160},"        \u003Cdiv class=\"item\">\n",[139,86827,86828,86831,86833],{"class":141,"line":35323},[139,86829,86830],{"class":160},"          \u003Cimg src=\"${",[139,86832,82048],{"class":145},[139,86834,82080],{"class":160},[139,86836,86837,86840,86842,86845,86847],{"class":141,"line":35333},[139,86838,86839],{"class":160},"          \u003Cp class=\"name\">${",[139,86841,1676],{"class":145},[139,86843,86844],{"class":160},"}${",[139,86846,3600],{"class":145},[139,86848,82090],{"class":160},[139,86850,86851,86854,86856],{"class":141,"line":35338},[139,86852,86853],{"class":160},"          \u003Cp class=\"spec\">${",[139,86855,645],{"class":145},[139,86857,82090],{"class":160},[139,86859,86860,86863,86865,86867,86869,86871,86873,86875],{"class":141,"line":35344},[139,86861,86862],{"class":160},"          \u003Cp class=\"price\">${",[139,86864,82043],{"class":145},[139,86866,2993],{"class":160},[139,86868,86804],{"class":781},[139,86870,157],{"class":160},[139,86872,416],{"class":153},[139,86874,2867],{"class":160},[139,86876,82090],{"class":160},[139,86878,86879,86882,86884],{"class":141,"line":35392},[139,86880,86881],{"class":160},"          \u003Cp class=\"count\">x${",[139,86883,86662],{"class":145},[139,86885,82090],{"class":160},[139,86887,86888,86891,86894],{"class":141,"line":35439},[139,86889,86890],{"class":160},"          \u003Cp class=\"sub-total\">${",[139,86892,86893],{"class":145},"subtotal",[139,86895,82090],{"class":160},[139,86897,86898],{"class":141,"line":35444},[139,86899,86900],{"class":160},"        \u003C\u002Fdiv> \n",[139,86902,86903],{"class":141,"line":35450},[139,86904,86905],{"class":160},"             `\n",[139,86907,86908,86911,86913,86915,86917],{"class":141,"line":35469},[139,86909,86910],{"class":145},"    }).",[139,86912,76452],{"class":781},[139,86914,157],{"class":145},[139,86916,76457],{"class":160},[139,86918,164],{"class":145},[139,86920,86921],{"class":141,"line":35475},[139,86922,86923],{"class":2512},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[139,86925,86926,86928,86930,86932,86934,86937,86939,86942,86944,86946,86948,86951,86954,86956,86959,86961,86963,86965,86968,86970,86972,86974,86976],{"class":141,"line":35494},[139,86927,13494],{"class":149},[139,86929,65017],{"class":153},[139,86931,15836],{"class":149},[139,86933,82276],{"class":145},[139,86935,86936],{"class":781},"reduce",[139,86938,4661],{"class":145},[139,86940,86941],{"class":2111},"prev",[139,86943,413],{"class":145},[139,86945,82024],{"class":2111},[139,86947,2120],{"class":145},[139,86949,86950],{"class":149},"=>",[139,86952,86953],{"class":145}," prev ",[139,86955,1147],{"class":149},[139,86957,86958],{"class":145}," (item.price ",[139,86960,2892],{"class":149},[139,86962,8028],{"class":153},[139,86964,8792],{"class":149},[139,86966,86967],{"class":145}," item.count) ",[139,86969,3019],{"class":149},[139,86971,8028],{"class":153},[139,86973,413],{"class":145},[139,86975,2634],{"class":153},[139,86977,164],{"class":145},[139,86979,86980,86982,86984,86986,86989,86991,86993,86996,86998,87000,87002],{"class":141,"line":35500},[139,86981,54642],{"class":145},[139,86983,56633],{"class":781},[139,86985,157],{"class":145},[139,86987,86988],{"class":160},"'.amount'",[139,86990,76478],{"class":145},[139,86992,150],{"class":149},[139,86994,86995],{"class":145}," total.",[139,86997,86804],{"class":781},[139,86999,157],{"class":145},[139,87001,416],{"class":153},[139,87003,164],{"class":145},[139,87005,87006,87008,87010],{"class":141,"line":35506},[139,87007,54652],{"class":145},[139,87009,54050],{"class":53538},[139,87011,53545],{"class":145},[139,87013,87014,87016,87018],{"class":141,"line":35516},[139,87015,54022],{"class":145},[139,87017,54037],{"class":53538},[139,87019,53545],{"class":145},[139,87021,87022],{"class":141,"line":35521},[139,87023,843],{"emptyLinePlaceholder":842},[139,87025,87026,87028,87030],{"class":141,"line":35527},[139,87027,54022],{"class":145},[139,87029,52873],{"class":53538},[139,87031,53545],{"class":145},[14,87033,87035],{"id":87034},"_411-编程思想","4.11 编程思想",[1217,87037,87039],{"id":87038},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87041,87042,87045],{},[1674,87043,87044],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87047,87048],{},"调用就可以了",[19,87050,87051],{},[3760,87052],{"alt":135,"src":87053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1217,87055,87057],{"id":87056},"_4112-面向对象","4.11.2 面向对象",[19,87059,87060],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87062,87063],{},[3760,87064],{"alt":135,"src":87065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87067,87068],{},"面向对象的特性：",[3437,87070,87071,87074,87077],{},[1763,87072,87073],{},"封装性",[1763,87075,87076],{},"继承性",[1763,87078,87079],{},"多态性",[1217,87081,87083],{"id":87082},"_4113-两者比较","4.11.3 两者比较",[19,87085,87086],{},[3760,87087],{"alt":135,"src":87088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87090,87092],{"id":87091},"_412-构造函数回顾","4.12 构造函数回顾",[19,87094,87095],{},[3760,87096],{"alt":135,"src":87097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87099,87100],{},[3760,87101],{"alt":135,"src":87102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87104,87105],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87107,87108],{},[3760,87109],{"alt":135,"src":87110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87112,87114],{"id":87113},"_413-原型","4.13 原型",[1217,87116,87118],{"id":87117},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87120,87121],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87123,87124],{},[3760,87125],{"alt":135,"src":87126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87128,87129],{},[3760,87130],{"alt":135,"src":87131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87133,87134],{},"原型是构造函数的属性，它也是一个对象",[19,87136,87137],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87139,87140],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[130,87142,87144],{"className":55302,"code":87143,"language":55304,"meta":135,"style":135},"\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",[50,87145,87146,87154,87159,87167,87172,87177,87182,87187,87192,87196,87200,87204,87209,87214,87218,87223,87228,87233,87238,87243,87247,87255],{"__ignoreMap":135},[139,87147,87148,87150,87152],{"class":141,"line":142},[139,87149,796],{"class":145},[139,87151,54037],{"class":53538},[139,87153,53545],{"class":145},[139,87155,87156],{"class":141,"line":210},[139,87157,87158],{"class":2512},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[139,87160,87161,87163,87165],{"class":141,"line":254},[139,87162,54380],{"class":145},[139,87164,54050],{"class":53538},[139,87166,53545],{"class":145},[139,87168,87169],{"class":141,"line":262},[139,87170,87171],{"class":145},"    function Star(uname, age) {\n",[139,87173,87174],{"class":141,"line":313},[139,87175,87176],{"class":145},"      this.uname = uname,\n",[139,87178,87179],{"class":141,"line":462},[139,87180,87181],{"class":145},"        this.age = age\n",[139,87183,87184],{"class":141,"line":474},[139,87185,87186],{"class":145},"      \u002F\u002F this.sing = function () {\n",[139,87188,87189],{"class":141,"line":484},[139,87190,87191],{"class":145},"      \u002F\u002F   console.log('唱歌')\n",[139,87193,87194],{"class":141,"line":989},[139,87195,843],{"emptyLinePlaceholder":842},[139,87197,87198],{"class":141,"line":994},[139,87199,62270],{"class":145},[139,87201,87202],{"class":141,"line":999},[139,87203,4472],{"class":145},[139,87205,87206],{"class":141,"line":1006},[139,87207,87208],{"class":145},"    Star.prototype.sing = function () {\n",[139,87210,87211],{"class":141,"line":1027},[139,87212,87213],{"class":145},"      console.log('唱歌')\n",[139,87215,87216],{"class":141,"line":1040},[139,87217,4472],{"class":145},[139,87219,87220],{"class":141,"line":2160},[139,87221,87222],{"class":145},"    \u002F\u002F console.dir(Star.prototype)\n",[139,87224,87225],{"class":141,"line":2188},[139,87226,87227],{"class":145},"    const pink = new Star('pink', 18)\n",[139,87229,87230],{"class":141,"line":3944},[139,87231,87232],{"class":145},"    const red = new Star('red', 20)\n",[139,87234,87235],{"class":141,"line":3963},[139,87236,87237],{"class":145},"    pink.sing()\n",[139,87239,87240],{"class":141,"line":3968},[139,87241,87242],{"class":145},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[139,87244,87245],{"class":141,"line":3982},[139,87246,843],{"emptyLinePlaceholder":842},[139,87248,87249,87251,87253],{"class":141,"line":3987},[139,87250,54652],{"class":145},[139,87252,54050],{"class":53538},[139,87254,53545],{"class":145},[139,87256,87257,87259,87261],{"class":141,"line":4014},[139,87258,54022],{"class":145},[139,87260,54037],{"class":53538},[139,87262,53545],{"class":145},[19,87264,87265],{},[3760,87266],{"alt":135,"src":87267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[130,87269,87271],{"className":55302,"code":87270,"language":55304,"meta":135,"style":135},"\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",[50,87272,87273,87281,87289,87294,87299,87304,87309,87313,87318,87323,87328,87332,87337,87341,87345,87350,87354,87362],{"__ignoreMap":135},[139,87274,87275,87277,87279],{"class":141,"line":142},[139,87276,796],{"class":145},[139,87278,54037],{"class":53538},[139,87280,53545],{"class":145},[139,87282,87283,87285,87287],{"class":141,"line":210},[139,87284,54380],{"class":145},[139,87286,54050],{"class":53538},[139,87288,53545],{"class":145},[139,87290,87291],{"class":141,"line":254},[139,87292,87293],{"class":145},"    let that\n",[139,87295,87296],{"class":141,"line":262},[139,87297,87298],{"class":145},"    function Star(uname) {\n",[139,87300,87301],{"class":141,"line":313},[139,87302,87303],{"class":145},"      this.uname = uname\n",[139,87305,87306],{"class":141,"line":462},[139,87307,87308],{"class":145},"      that = this\n",[139,87310,87311],{"class":141,"line":474},[139,87312,4472],{"class":145},[139,87314,87315],{"class":141,"line":484},[139,87316,87317],{"class":145},"    \u002F\u002F 实例对象是 ldh\n",[139,87319,87320],{"class":141,"line":989},[139,87321,87322],{"class":145},"    const ldh = new Star('刘德华')\n",[139,87324,87325],{"class":141,"line":994},[139,87326,87327],{"class":145},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[139,87329,87330],{"class":141,"line":999},[139,87331,843],{"emptyLinePlaceholder":842},[139,87333,87334],{"class":141,"line":1006},[139,87335,87336],{"class":145},"    Star.sing = function () {\n",[139,87338,87339],{"class":141,"line":1027},[139,87340,87213],{"class":145},[139,87342,87343],{"class":141,"line":1040},[139,87344,4472],{"class":145},[139,87346,87347],{"class":141,"line":2160},[139,87348,87349],{"class":145},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[139,87351,87352],{"class":141,"line":2188},[139,87353,843],{"emptyLinePlaceholder":842},[139,87355,87356,87358,87360],{"class":141,"line":3944},[139,87357,54652],{"class":145},[139,87359,54050],{"class":53538},[139,87361,53545],{"class":145},[139,87363,87364,87366,87368],{"class":141,"line":3963},[139,87365,54022],{"class":145},[139,87367,54037],{"class":53538},[139,87369,53545],{"class":145},[19,87371,87372],{},"构造函数的this指向的是实例对象；",[19,87374,87375],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1217,87377,87379],{"id":87378},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87381,87382],{},[3760,87383],{"alt":135,"src":87384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[130,87386,87388],{"className":55302,"code":87387,"language":55304,"meta":135,"style":135},"\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",[50,87389,87390,87398,87406,87411,87416,87421,87426,87431,87436,87441,87446,87451,87456,87460,87465,87470,87475,87480,87484,87489,87494,87499,87504,87508,87513,87518,87523,87528,87532,87537,87541,87549],{"__ignoreMap":135},[139,87391,87392,87394,87396],{"class":141,"line":142},[139,87393,796],{"class":145},[139,87395,54037],{"class":53538},[139,87397,53545],{"class":145},[139,87399,87400,87402,87404],{"class":141,"line":210},[139,87401,54380],{"class":145},[139,87403,54050],{"class":53538},[139,87405,53545],{"class":145},[139,87407,87408],{"class":141,"line":254},[139,87409,87410],{"class":145},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[139,87412,87413],{"class":141,"line":262},[139,87414,87415],{"class":145},"    const arr = [1, 2, 3]\n",[139,87417,87418],{"class":141,"line":313},[139,87419,87420],{"class":145},"    \u002F\u002F 自己定义数组的扩展方法\n",[139,87422,87423],{"class":141,"line":462},[139,87424,87425],{"class":145},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[139,87427,87428],{"class":141,"line":474},[139,87429,87430],{"class":145},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[139,87432,87433],{"class":141,"line":484},[139,87434,87435],{"class":145},"    \u002F\u002F ①.最大值\n",[139,87437,87438],{"class":141,"line":989},[139,87439,87440],{"class":145},"    Array.prototype.max = function () {\n",[139,87442,87443],{"class":141,"line":994},[139,87444,87445],{"class":145},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[139,87447,87448],{"class":141,"line":999},[139,87449,87450],{"class":145},"      return Math.max(...this)\n",[139,87452,87453],{"class":141,"line":1006},[139,87454,87455],{"class":145},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[139,87457,87458],{"class":141,"line":1027},[139,87459,4472],{"class":145},[139,87461,87462],{"class":141,"line":1040},[139,87463,87464],{"class":145},"    console.log(arr.max())\n",[139,87466,87467],{"class":141,"line":2160},[139,87468,87469],{"class":145},"    \u002F\u002F ②最小值\n",[139,87471,87472],{"class":141,"line":2188},[139,87473,87474],{"class":145},"    Array.prototype.min = function () {\n",[139,87476,87477],{"class":141,"line":3944},[139,87478,87479],{"class":145},"      return Math.min(...this)\n",[139,87481,87482],{"class":141,"line":3963},[139,87483,4472],{"class":145},[139,87485,87486],{"class":141,"line":3968},[139,87487,87488],{"class":145},"    console.log(arr.min())\n",[139,87490,87491],{"class":141,"line":3982},[139,87492,87493],{"class":145},"    \u002F\u002F③求和\n",[139,87495,87496],{"class":141,"line":3987},[139,87497,87498],{"class":145},"    Array.prototype.sum = function () {\n",[139,87500,87501],{"class":141,"line":4014},[139,87502,87503],{"class":145},"      return this.reduce((prev, current) => prev + current, 0)\n",[139,87505,87506],{"class":141,"line":4019},[139,87507,4472],{"class":145},[139,87509,87510],{"class":141,"line":4036},[139,87511,87512],{"class":145},"    console.log(arr.sum())\n",[139,87514,87515],{"class":141,"line":4041},[139,87516,87517],{"class":145},"    \u002F\u002F ③排序\n",[139,87519,87520],{"class":141,"line":4046},[139,87521,87522],{"class":145},"    Array.prototype.rever = function () {\n",[139,87524,87525],{"class":141,"line":4051},[139,87526,87527],{"class":145},"      return this.reverse()\n",[139,87529,87530],{"class":141,"line":4065},[139,87531,4472],{"class":145},[139,87533,87534],{"class":141,"line":4070},[139,87535,87536],{"class":145},"    console.log(arr.rever())\n",[139,87538,87539],{"class":141,"line":4860},[139,87540,843],{"emptyLinePlaceholder":842},[139,87542,87543,87545,87547],{"class":141,"line":4874},[139,87544,54652],{"class":145},[139,87546,54050],{"class":53538},[139,87548,53545],{"class":145},[139,87550,87551,87553,87555],{"class":141,"line":4882},[139,87552,54022],{"class":145},[139,87554,54037],{"class":53538},[139,87556,53545],{"class":145},[19,87558,87559],{},[3760,87560],{"alt":135,"src":87561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1217,87563,87565],{"id":87564},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87567,87568],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87570,87571],{},[3760,87572],{"alt":135,"src":87573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[130,87575,87577],{"className":55302,"code":87576,"language":55304,"meta":135,"style":135},"\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",[50,87578,87579,87587,87595,87600,87605,87609,87614,87619,87624,87632],{"__ignoreMap":135},[139,87580,87581,87583,87585],{"class":141,"line":142},[139,87582,796],{"class":145},[139,87584,54037],{"class":53538},[139,87586,53545],{"class":145},[139,87588,87589,87591,87593],{"class":141,"line":210},[139,87590,54380],{"class":145},[139,87592,54050],{"class":53538},[139,87594,53545],{"class":145},[139,87596,87597],{"class":141,"line":254},[139,87598,87599],{"class":145},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[139,87601,87602],{"class":141,"line":262},[139,87603,87604],{"class":145},"    function Star() {\n",[139,87606,87607],{"class":141,"line":313},[139,87608,4472],{"class":145},[139,87610,87611],{"class":141,"line":462},[139,87612,87613],{"class":145},"    const ldh = new Star()\n",[139,87615,87616],{"class":141,"line":474},[139,87617,87618],{"class":145},"    console.log(Star.prototype)\n",[139,87620,87621],{"class":141,"line":484},[139,87622,87623],{"class":145},"    console.log(Star.prototype.constructor === Star)\n",[139,87625,87626,87628,87630],{"class":141,"line":989},[139,87627,54652],{"class":145},[139,87629,54050],{"class":53538},[139,87631,53545],{"class":145},[139,87633,87634,87636,87638],{"class":141,"line":994},[139,87635,54022],{"class":145},[139,87637,54037],{"class":53538},[139,87639,53545],{"class":145},[19,87641,87642],{},[3760,87643],{"alt":135,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87646,87647],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[130,87649,87651],{"className":55302,"code":87650,"language":55304,"meta":135,"style":135},"  \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",[50,87652,87653,87661,87665,87669,87673,87678,87683,87688,87692,87697,87702,87707,87712,87717,87722,87726,87730,87735,87740,87745,87749,87754,87759,87763,87767,87771],{"__ignoreMap":135},[139,87654,87655,87657,87659],{"class":141,"line":142},[139,87656,54380],{"class":145},[139,87658,54050],{"class":53538},[139,87660,53545],{"class":145},[139,87662,87663],{"class":141,"line":210},[139,87664,87599],{"class":145},[139,87666,87667],{"class":141,"line":254},[139,87668,87604],{"class":145},[139,87670,87671],{"class":141,"line":262},[139,87672,4472],{"class":145},[139,87674,87675],{"class":141,"line":313},[139,87676,87677],{"class":145},"    \u002F\u002F const ldh = new Star()\n",[139,87679,87680],{"class":141,"line":462},[139,87681,87682],{"class":145},"    \u002F\u002F console.log(Star.prototype)\n",[139,87684,87685],{"class":141,"line":474},[139,87686,87687],{"class":145},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[139,87689,87690],{"class":141,"line":484},[139,87691,843],{"emptyLinePlaceholder":842},[139,87693,87694],{"class":141,"line":989},[139,87695,87696],{"class":145},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[139,87698,87699],{"class":141,"line":994},[139,87700,87701],{"class":145},"    \u002F\u002F Star.prototype.sing = function () {\n",[139,87703,87704],{"class":141,"line":999},[139,87705,87706],{"class":145},"    \u002F\u002F   console.log('唱歌')\n",[139,87708,87709],{"class":141,"line":1006},[139,87710,87711],{"class":145},"    \u002F\u002F }\n",[139,87713,87714],{"class":141,"line":1027},[139,87715,87716],{"class":145},"    \u002F\u002F Star.prototype.dance = function () {\n",[139,87718,87719],{"class":141,"line":1040},[139,87720,87721],{"class":145},"    \u002F\u002F   console.log('跳舞')\n",[139,87723,87724],{"class":141,"line":2160},[139,87725,87711],{"class":145},[139,87727,87728],{"class":141,"line":2188},[139,87729,87618],{"class":145},[139,87731,87732],{"class":141,"line":3944},[139,87733,87734],{"class":145},"    Star.prototype = {\n",[139,87736,87737],{"class":141,"line":3963},[139,87738,87739],{"class":145},"      sing: function () {\n",[139,87741,87742],{"class":141,"line":3968},[139,87743,87744],{"class":145},"        console.log('唱歌')\n",[139,87746,87747],{"class":141,"line":3982},[139,87748,80121],{"class":145},[139,87750,87751],{"class":141,"line":3987},[139,87752,87753],{"class":145},"      dance: function () {\n",[139,87755,87756],{"class":141,"line":4014},[139,87757,87758],{"class":145},"        console.log('跳舞')\n",[139,87760,87761],{"class":141,"line":4019},[139,87762,54633],{"class":145},[139,87764,87765],{"class":141,"line":4036},[139,87766,4472],{"class":145},[139,87768,87769],{"class":141,"line":4041},[139,87770,87618],{"class":145},[139,87772,87773,87775,87777],{"class":141,"line":4046},[139,87774,54652],{"class":145},[139,87776,54050],{"class":53538},[139,87778,53545],{"class":145},[19,87780,87781],{},"进行输出结果后会发现：",[19,87783,87784],{},[3760,87785],{"alt":135,"src":87786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87788,87789],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87791,87792],{},"所以，要重新指回创造这个原型对象的构造函数",[130,87794,87796],{"className":73442,"code":87795,"language":73444,"meta":135,"style":135},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[50,87797,87798,87812,87817,87822,87833,87846,87851,87862,87876,87880],{"__ignoreMap":135},[139,87799,87800,87803,87805,87808,87810],{"class":141,"line":142},[139,87801,87802],{"class":153},"Star",[139,87804,2993],{"class":145},[139,87806,87807],{"class":153},"prototype",[139,87809,15836],{"class":149},[139,87811,17840],{"class":145},[139,87813,87814],{"class":141,"line":210},[139,87815,87816],{"class":2512},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[139,87818,87819],{"class":141,"line":254},[139,87820,87821],{"class":145},"  constructor: Star,\n",[139,87823,87824,87827,87829,87831],{"class":141,"line":262},[139,87825,87826],{"class":781},"  sing",[139,87828,2265],{"class":145},[139,87830,56683],{"class":149},[139,87832,56686],{"class":145},[139,87834,87835,87837,87839,87841,87844],{"class":141,"line":313},[139,87836,75982],{"class":145},[139,87838,60480],{"class":781},[139,87840,157],{"class":145},[139,87842,87843],{"class":160},"'唱歌'",[139,87845,164],{"class":145},[139,87847,87848],{"class":141,"line":462},[139,87849,87850],{"class":145},"   },\n",[139,87852,87853,87856,87858,87860],{"class":141,"line":474},[139,87854,87855],{"class":781},"   dance",[139,87857,2265],{"class":145},[139,87859,56683],{"class":149},[139,87861,56686],{"class":145},[139,87863,87864,87867,87869,87871,87874],{"class":141,"line":484},[139,87865,87866],{"class":145},"     console.",[139,87868,60480],{"class":781},[139,87870,157],{"class":145},[139,87872,87873],{"class":160},"'跳舞'",[139,87875,164],{"class":145},[139,87877,87878],{"class":141,"line":989},[139,87879,6587],{"class":145},[139,87881,87882],{"class":141,"line":994},[139,87883,3862],{"class":145},[19,87885,87886],{},[3760,87887],{"alt":135,"src":87888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87890,87891],{},"总结1：",[19,87893,87894],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87896,87897],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87899,87900],{},"constructor指的是他的来源",[19,87902,87903],{},[3760,87904],{"alt":135,"src":87905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87907,87908],{},[3760,87909],{"alt":135,"src":87910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87912,87913],{},"总结2：",[19,87915,87916],{},[3760,87917],{"alt":135,"src":87918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87920,87921],{},[3760,87922],{"alt":135,"src":87923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87925,87926],{},[3760,87927],{"alt":135,"src":87928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1217,87930,87932],{"id":87931},"_4134-对象原型","4.13.4 对象原型",[19,87934,87935],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87937,87938],{},"对象原型就是__proto__这个属性",[19,87940,87941],{},[3760,87942],{"alt":135,"src":87943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87945,87946],{},[3760,87947],{"alt":135,"src":87948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87950,87951],{},[3760,87952],{"alt":135,"src":87953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87955,87956],{},[3760,87957],{"alt":135,"src":87958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[130,87960,87962],{"className":55302,"code":87961,"language":55304,"meta":135,"style":135},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[50,87963,87964,87972,87980,87984,87988,87992,87997,88005],{"__ignoreMap":135},[139,87965,87966,87968,87970],{"class":141,"line":142},[139,87967,796],{"class":145},[139,87969,54037],{"class":53538},[139,87971,53545],{"class":145},[139,87973,87974,87976,87978],{"class":141,"line":210},[139,87975,54380],{"class":145},[139,87977,54050],{"class":53538},[139,87979,53545],{"class":145},[139,87981,87982],{"class":141,"line":254},[139,87983,87604],{"class":145},[139,87985,87986],{"class":141,"line":262},[139,87987,4472],{"class":145},[139,87989,87990],{"class":141,"line":313},[139,87991,87613],{"class":145},[139,87993,87994],{"class":141,"line":462},[139,87995,87996],{"class":145},"    console.log(ldh)\n",[139,87998,87999,88001,88003],{"class":141,"line":474},[139,88000,54652],{"class":145},[139,88002,54050],{"class":53538},[139,88004,53545],{"class":145},[139,88006,88007,88009,88011],{"class":141,"line":484},[139,88008,54022],{"class":145},[139,88010,54037],{"class":53538},[139,88012,53545],{"class":145},[19,88014,88015],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88017,88018],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88020,88021],{},[3760,88022],{"alt":135,"src":88023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88025,88026],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88028,88029],{},"对象原型指向原型对象",[19,88031,88032],{},[3760,88033],{"alt":135,"src":88034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88036,88037],{},[3760,88038],{"alt":135,"src":88039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88041,88042],{},[3760,88043],{"alt":135,"src":88044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1217,88046,88048],{"id":88047},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88050,88051],{},[3760,88052],{"alt":135,"src":88053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1760,88055,88056,88059,88062,88065],{},[1763,88057,88058],{},"构造函数通过new的形式实例化得到实例对象",[1763,88060,88061],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1763,88063,88064],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1763,88066,88067],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88069,88070],{},[3760,88071],{"alt":135,"src":88072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88074,88075],{},"题目梳理：",[19,88077,88078],{},[3760,88079],{"alt":135,"src":88080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1217,88082,88084],{"id":88083},"_4136-原型继承","4.13.6 原型继承",[19,88086,88087],{},[3760,88088],{"alt":135,"src":88089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88091,88092],{},[3760,88093],{"alt":135,"src":88094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88096,88097],{},[3760,88098],{"alt":135,"src":88099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88101,88102],{},[3760,88103],{"alt":135,"src":88104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88106,88107],{},[3760,88108],{"alt":135,"src":88109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88111,88112],{},[3760,88113],{"alt":135,"src":88114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88116,88117],{},[3760,88118],{"alt":135,"src":88119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88121,88122],{},[3760,88123],{"alt":135,"src":88124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88126,88127],{},"回顾：构造函数每次new得到对象都是不同的",[1217,88129,88131],{"id":88130},"_4137-原型链","4.13.7 原型链",[19,88133,88134],{},[3760,88135],{"alt":135,"src":88136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88138,88139],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88141,88142],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88144,88145],{},"大哥是Object",[19,88147,88148],{},[3760,88149],{"alt":135,"src":88150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88152,88153],{},[3760,88154],{"alt":135,"src":88155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88157,88158],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88160,88161],{},"万物皆对象",[1217,88163,88165],{"id":88164},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88167,88168],{},"模态框",[19,88170,88171],{},"以后遇见这个效果直接使用这个就行",[19,88173,88174],{},[3760,88175],{"alt":135,"src":88176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88178,88179],{},[3760,88180],{"alt":135,"src":88181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88183,88184],{},[3760,88185],{"alt":135,"src":88186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88188,88189],{},[3760,88190],{"alt":135,"src":88191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88193,88194],{},"补充知识点：",[1760,88196,88197],{},[1763,88198,88199],{},"append()",[19,88201,88202],{},[3760,88203],{"alt":135,"src":88204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[130,88206,88208],{"className":52871,"code":88207,"language":52873,"meta":135,"style":135},"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",[50,88209,88210,88215,88220,88225,88229,88233,88237,88242,88247,88252,88256],{"__ignoreMap":135},[139,88211,88212],{"class":141,"line":142},[139,88213,88214],{"class":145},"append(param1)\n",[139,88216,88217],{"class":141,"line":210},[139,88218,88219],{"class":145},"append(param1, param2)\n",[139,88221,88222],{"class":141,"line":254},[139,88223,88224],{"class":145},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[139,88226,88227],{"class":141,"line":262},[139,88228,843],{"emptyLinePlaceholder":842},[139,88230,88231],{"class":141,"line":313},[139,88232,843],{"emptyLinePlaceholder":842},[139,88234,88235],{"class":141,"line":462},[139,88236,843],{"emptyLinePlaceholder":842},[139,88238,88239],{"class":141,"line":474},[139,88240,88241],{"class":145},"let div = document.createElement(\"div\");\n",[139,88243,88244],{"class":141,"line":484},[139,88245,88246],{"class":145},"let p = document.createElement(\"p\");\n",[139,88248,88249],{"class":141,"line":989},[139,88250,88251],{"class":145},"div.append(p);\n",[139,88253,88254],{"class":141,"line":994},[139,88255,843],{"emptyLinePlaceholder":842},[139,88257,88258,88261,88263],{"class":141,"line":999},[139,88259,88260],{"class":145},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[139,88262,19],{"class":53538},[139,88264,88265],{"class":145},"> ]\n",[1760,88267,88268],{"start":210},[1763,88269,88270],{},"remove()",[19,88272,88273],{},"自己删自己",[19,88275,88276],{},[3760,88277],{"alt":135,"src":88278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[130,88280,88282],{"className":52871,"code":88281,"language":52873,"meta":135,"style":135},"\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",[50,88283,88284,88294,88308,88312,88320,88334,88354,88366,88374,88381,88393,88406,88441,88453,88464,88476,88488,88500,88527,88537,88541,88545,88554,88566,88580,88590,88602,88606,88610,88620,88631,88641,88651,88664,88677,88687,88691,88695,88704,88714,88726,88730,88734,88743,88753,88763,88775,88779,88783,88793,88809,88820,88830,88840,88852,88864,88876,88880,88884,88897,88908,88912,88920,88928,88932,88940,88960,88980,88988,88993,89019,89024,89029,89048,89053,89065,89070,89081,89091,89101,89106,89111,89115,89120,89125,89130,89150,89155,89175,89180,89194,89199,89204,89209,89225,89229,89234,89263,89268,89273,89278,89289,89293,89297,89301,89306,89331,89336,89361,89366,89375,89379,89384,89409,89413,89438,89442,89451,89455,89460,89478,89488,89492,89500,89508,89512],{"__ignoreMap":135},[139,88285,88286,88288,88290,88292],{"class":141,"line":142},[139,88287,53535],{"class":145},[139,88289,53539],{"class":53538},[139,88291,53542],{"class":781},[139,88293,53545],{"class":145},[139,88295,88296,88298,88300,88302,88304,88306],{"class":141,"line":210},[139,88297,796],{"class":145},[139,88299,52873],{"class":53538},[139,88301,53554],{"class":781},[139,88303,150],{"class":145},[139,88305,53559],{"class":160},[139,88307,53545],{"class":145},[139,88309,88310],{"class":141,"line":254},[139,88311,843],{"emptyLinePlaceholder":842},[139,88313,88314,88316,88318],{"class":141,"line":262},[139,88315,796],{"class":145},[139,88317,53572],{"class":53538},[139,88319,53545],{"class":145},[139,88321,88322,88324,88326,88328,88330,88332],{"class":141,"line":313},[139,88323,54380],{"class":145},[139,88325,53582],{"class":53538},[139,88327,53585],{"class":781},[139,88329,150],{"class":145},[139,88331,53590],{"class":160},[139,88333,53545],{"class":145},[139,88335,88336,88338,88340,88342,88344,88346,88348,88350,88352],{"class":141,"line":462},[139,88337,54380],{"class":145},[139,88339,53582],{"class":53538},[139,88341,17189],{"class":781},[139,88343,150],{"class":145},[139,88345,53629],{"class":160},[139,88347,53609],{"class":781},[139,88349,150],{"class":145},[139,88351,53636],{"class":160},[139,88353,53545],{"class":145},[139,88355,88356,88358,88360,88362,88364],{"class":141,"line":474},[139,88357,54380],{"class":145},[139,88359,53645],{"class":53538},[139,88361,53648],{"class":145},[139,88363,53645],{"class":53538},[139,88365,53545],{"class":145},[139,88367,88368,88370,88372],{"class":141,"line":484},[139,88369,54380],{"class":145},[139,88371,2348],{"class":53538},[139,88373,53545],{"class":145},[139,88375,88376,88379],{"class":141,"line":989},[139,88377,88378],{"class":781},"    .modal",[139,88380,17840],{"class":145},[139,88382,88383,88385,88387,88389,88391],{"class":141,"line":994},[139,88384,57005],{"class":153},[139,88386,2265],{"class":145},[139,88388,6253],{"class":153},[139,88390,53729],{"class":149},[139,88392,3591],{"class":145},[139,88394,88395,88398,88400,88402,88404],{"class":141,"line":999},[139,88396,88397],{"class":153},"      min-height",[139,88399,2265],{"class":145},[139,88401,1017],{"class":153},[139,88403,53729],{"class":149},[139,88405,3591],{"class":145},[139,88407,88408,88410,88412,88414,88416,88418,88420,88422,88424,88426,88428,88430,88432,88434,88436,88439],{"class":141,"line":1006},[139,88409,80979],{"class":153},[139,88411,2265],{"class":145},[139,88413,2634],{"class":153},[139,88415,799],{"class":153},[139,88417,4323],{"class":153},[139,88419,53729],{"class":149},[139,88421,80996],{"class":153},[139,88423,157],{"class":145},[139,88425,2634],{"class":153},[139,88427,413],{"class":145},[139,88429,2634],{"class":153},[139,88431,413],{"class":145},[139,88433,2634],{"class":153},[139,88435,413],{"class":145},[139,88437,88438],{"class":153},"0.1",[139,88440,5002],{"class":145},[139,88442,88443,88445,88447,88449,88451],{"class":141,"line":1027},[139,88444,57368],{"class":153},[139,88446,2265],{"class":145},[139,88448,1476],{"class":153},[139,88450,53729],{"class":149},[139,88452,3591],{"class":145},[139,88454,88455,88457,88459,88462],{"class":141,"line":1040},[139,88456,56993],{"class":153},[139,88458,2265],{"class":145},[139,88460,88461],{"class":153},"fixed",[139,88463,3591],{"class":145},[139,88465,88466,88469,88471,88474],{"class":141,"line":2160},[139,88467,88468],{"class":153},"      z-index",[139,88470,2265],{"class":145},[139,88472,88473],{"class":153},"999",[139,88475,3591],{"class":145},[139,88477,88478,88480,88482,88484,88486],{"class":141,"line":2188},[139,88479,57072],{"class":153},[139,88481,2265],{"class":145},[139,88483,3091],{"class":153},[139,88485,2766],{"class":149},[139,88487,3591],{"class":145},[139,88489,88490,88492,88494,88496,88498],{"class":141,"line":3944},[139,88491,57181],{"class":153},[139,88493,2265],{"class":145},[139,88495,3091],{"class":153},[139,88497,2766],{"class":149},[139,88499,3591],{"class":145},[139,88501,88502,88504,88506,88508,88510,88513,88515,88517,88519,88521,88523,88525],{"class":141,"line":3963},[139,88503,81020],{"class":153},[139,88505,2265],{"class":145},[139,88507,81025],{"class":153},[139,88509,157],{"class":145},[139,88511,88512],{"class":153},"-50",[139,88514,2766],{"class":149},[139,88516,413],{"class":145},[139,88518,88512],{"class":153},[139,88520,2766],{"class":149},[139,88522,413],{"class":145},[139,88524,2634],{"class":153},[139,88526,5002],{"class":145},[139,88528,88529,88531,88533,88535],{"class":141,"line":3968},[139,88530,57118],{"class":153},[139,88532,2265],{"class":145},[139,88534,63075],{"class":153},[139,88536,3591],{"class":145},[139,88538,88539],{"class":141,"line":3982},[139,88540,4472],{"class":145},[139,88542,88543],{"class":141,"line":3987},[139,88544,843],{"emptyLinePlaceholder":842},[139,88546,88547,88549,88552],{"class":141,"line":4014},[139,88548,88378],{"class":781},[139,88550,88551],{"class":781}," .header",[139,88553,17840],{"class":145},[139,88555,88556,88558,88560,88562,88564],{"class":141,"line":4019},[139,88557,59593],{"class":153},[139,88559,2265],{"class":145},[139,88561,2839],{"class":153},[139,88563,53729],{"class":149},[139,88565,3591],{"class":145},[139,88567,88568,88570,88572,88574,88576,88578],{"class":141,"line":4036},[139,88569,56929],{"class":153},[139,88571,2265],{"class":145},[139,88573,2634],{"class":153},[139,88575,4323],{"class":153},[139,88577,53729],{"class":149},[139,88579,3591],{"class":145},[139,88581,88582,88584,88586,88588],{"class":141,"line":4041},[139,88583,56993],{"class":153},[139,88585,2265],{"class":145},[139,88587,56998],{"class":153},[139,88589,3591],{"class":145},[139,88591,88592,88594,88596,88598,88600],{"class":141,"line":4046},[139,88593,57156],{"class":153},[139,88595,2265],{"class":145},[139,88597,3135],{"class":153},[139,88599,53729],{"class":149},[139,88601,3591],{"class":145},[139,88603,88604],{"class":141,"line":4051},[139,88605,4472],{"class":145},[139,88607,88608],{"class":141,"line":4065},[139,88609,843],{"emptyLinePlaceholder":842},[139,88611,88612,88614,88616,88618],{"class":141,"line":4070},[139,88613,88378],{"class":781},[139,88615,88551],{"class":781},[139,88617,5314],{"class":53538},[139,88619,17840],{"class":145},[139,88621,88622,88625,88627,88629],{"class":141,"line":4860},[139,88623,88624],{"class":153},"      font-style",[139,88626,2265],{"class":145},[139,88628,66073],{"class":153},[139,88630,3591],{"class":145},[139,88632,88633,88635,88637,88639],{"class":141,"line":4874},[139,88634,59650],{"class":153},[139,88636,2265],{"class":145},[139,88638,64303],{"class":153},[139,88640,3591],{"class":145},[139,88642,88643,88645,88647,88649],{"class":141,"line":4882},[139,88644,56993],{"class":153},[139,88646,2265],{"class":145},[139,88648,57065],{"class":153},[139,88650,3591],{"class":145},[139,88652,88653,88656,88658,88660,88662],{"class":141,"line":4887},[139,88654,88655],{"class":153},"      right",[139,88657,2265],{"class":145},[139,88659,3010],{"class":153},[139,88661,53729],{"class":149},[139,88663,3591],{"class":145},[139,88665,88666,88668,88670,88673,88675],{"class":141,"line":4893},[139,88667,57181],{"class":153},[139,88669,2265],{"class":145},[139,88671,88672],{"class":153},"-2",[139,88674,53729],{"class":149},[139,88676,3591],{"class":145},[139,88678,88679,88681,88683,88685],{"class":141,"line":4899},[139,88680,64258],{"class":153},[139,88682,2265],{"class":145},[139,88684,64263],{"class":153},[139,88686,3591],{"class":145},[139,88688,88689],{"class":141,"line":4904},[139,88690,4472],{"class":145},[139,88692,88693],{"class":141,"line":10222},[139,88694,843],{"emptyLinePlaceholder":842},[139,88696,88697,88699,88702],{"class":141,"line":10246},[139,88698,88378],{"class":781},[139,88700,88701],{"class":781}," .body",[139,88703,17840],{"class":145},[139,88705,88706,88708,88710,88712],{"class":141,"line":10251},[139,88707,59520],{"class":153},[139,88709,2265],{"class":145},[139,88711,53829],{"class":153},[139,88713,3591],{"class":145},[139,88715,88716,88718,88720,88722,88724],{"class":141,"line":10257},[139,88717,56929],{"class":153},[139,88719,2265],{"class":145},[139,88721,536],{"class":153},[139,88723,53729],{"class":149},[139,88725,3591],{"class":145},[139,88727,88728],{"class":141,"line":10284},[139,88729,4472],{"class":145},[139,88731,88732],{"class":141,"line":10289},[139,88733,843],{"emptyLinePlaceholder":842},[139,88735,88736,88738,88741],{"class":141,"line":10295},[139,88737,88378],{"class":781},[139,88739,88740],{"class":781}," .footer",[139,88742,17840],{"class":145},[139,88744,88745,88747,88749,88751],{"class":141,"line":10307},[139,88746,57243],{"class":153},[139,88748,2265],{"class":145},[139,88750,53714],{"class":153},[139,88752,3591],{"class":145},[139,88754,88755,88757,88759,88761],{"class":141,"line":10319},[139,88756,57254],{"class":153},[139,88758,2265],{"class":145},[139,88760,53817],{"class":153},[139,88762,3591],{"class":145},[139,88764,88765,88767,88769,88771,88773],{"class":141,"line":10331},[139,88766,56929],{"class":153},[139,88768,2265],{"class":145},[139,88770,536],{"class":153},[139,88772,53729],{"class":149},[139,88774,3591],{"class":145},[139,88776,88777],{"class":141,"line":11990},[139,88778,4472],{"class":145},[139,88780,88781],{"class":141,"line":12015},[139,88782,843],{"emptyLinePlaceholder":842},[139,88784,88785,88787,88789,88791],{"class":141,"line":12038},[139,88786,88378],{"class":781},[139,88788,88740],{"class":781},[139,88790,3696],{"class":53538},[139,88792,17840],{"class":145},[139,88794,88795,88797,88799,88801,88803,88805,88807],{"class":141,"line":12062},[139,88796,56929],{"class":153},[139,88798,2265],{"class":145},[139,88800,421],{"class":153},[139,88802,53729],{"class":149},[139,88804,4368],{"class":153},[139,88806,53729],{"class":149},[139,88808,3591],{"class":145},[139,88810,88811,88813,88815,88818],{"class":141,"line":12067},[139,88812,63954],{"class":153},[139,88814,2265],{"class":145},[139,88816,88817],{"class":153},"#ccc",[139,88819,3591],{"class":145},[139,88821,88822,88824,88826,88828],{"class":141,"line":12072},[139,88823,66202],{"class":153},[139,88825,2265],{"class":145},[139,88827,56971],{"class":153},[139,88829,3591],{"class":145},[139,88831,88832,88834,88836,88838],{"class":141,"line":12077},[139,88833,59650],{"class":153},[139,88835,2265],{"class":145},[139,88837,63075],{"class":153},[139,88839,3591],{"class":145},[139,88841,88842,88844,88846,88848,88850],{"class":141,"line":12086},[139,88843,57368],{"class":153},[139,88845,2265],{"class":145},[139,88847,416],{"class":153},[139,88849,53729],{"class":149},[139,88851,3591],{"class":145},[139,88853,88854,88856,88858,88860,88862],{"class":141,"line":12091},[139,88855,63983],{"class":153},[139,88857,2265],{"class":145},[139,88859,536],{"class":153},[139,88861,53729],{"class":149},[139,88863,3591],{"class":145},[139,88865,88866,88868,88870,88872,88874],{"class":141,"line":12097},[139,88867,57156],{"class":153},[139,88869,2265],{"class":145},[139,88871,2984],{"class":153},[139,88873,53729],{"class":149},[139,88875,3591],{"class":145},[139,88877,88878],{"class":141,"line":12118},[139,88879,4472],{"class":145},[139,88881,88882],{"class":141,"line":12124},[139,88883,843],{"emptyLinePlaceholder":842},[139,88885,88886,88888,88890,88892,88895],{"class":141,"line":12138},[139,88887,88378],{"class":781},[139,88889,88740],{"class":781},[139,88891,3696],{"class":53538},[139,88893,88894],{"class":781},".submit",[139,88896,17840],{"class":145},[139,88898,88899,88901,88903,88906],{"class":141,"line":12144},[139,88900,57118],{"class":153},[139,88902,2265],{"class":145},[139,88904,88905],{"class":153},"#369",[139,88907,3591],{"class":145},[139,88909,88910],{"class":141,"line":12171},[139,88911,4472],{"class":145},[139,88913,88914,88916,88918],{"class":141,"line":12180},[139,88915,54652],{"class":145},[139,88917,2348],{"class":53538},[139,88919,53545],{"class":145},[139,88921,88922,88924,88926],{"class":141,"line":12186},[139,88923,54022],{"class":145},[139,88925,53572],{"class":53538},[139,88927,53545],{"class":145},[139,88929,88930],{"class":141,"line":12194},[139,88931,843],{"emptyLinePlaceholder":842},[139,88933,88934,88936,88938],{"class":141,"line":12199},[139,88935,796],{"class":145},[139,88937,54037],{"class":53538},[139,88939,53545],{"class":145},[139,88941,88942,88944,88946,88948,88950,88953,88956,88958],{"class":141,"line":18871},[139,88943,54380],{"class":145},[139,88945,56121],{"class":53538},[139,88947,17228],{"class":781},[139,88949,150],{"class":145},[139,88951,88952],{"class":160},"\"delete\"",[139,88954,88955],{"class":145},">删除\u003C\u002F",[139,88957,56121],{"class":53538},[139,88959,53545],{"class":145},[139,88961,88962,88964,88966,88968,88970,88973,88976,88978],{"class":141,"line":18877},[139,88963,54380],{"class":145},[139,88965,56121],{"class":53538},[139,88967,17228],{"class":781},[139,88969,150],{"class":145},[139,88971,88972],{"class":160},"\"login\"",[139,88974,88975],{"class":145},">登录\u003C\u002F",[139,88977,56121],{"class":53538},[139,88979,53545],{"class":145},[139,88981,88982,88984,88986],{"class":141,"line":18900},[139,88983,54380],{"class":145},[139,88985,54050],{"class":53538},[139,88987,53545],{"class":145},[139,88989,88990],{"class":141,"line":18906},[139,88991,88992],{"class":2512},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[139,88994,88995,88997,89000,89002,89004,89006,89008,89010,89013,89015,89017],{"class":141,"line":18929},[139,88996,72314],{"class":149},[139,88998,88999],{"class":781}," Modal",[139,89001,157],{"class":145},[139,89003,53645],{"class":2111},[139,89005,15836],{"class":149},[139,89007,72160],{"class":160},[139,89009,413],{"class":145},[139,89011,89012],{"class":2111},"message",[139,89014,15836],{"class":149},[139,89016,72160],{"class":160},[139,89018,14714],{"class":145},[139,89020,89021],{"class":141,"line":18943},[139,89022,89023],{"class":2512},"      \u002F\u002F 创建Model 模态框盒子\n",[139,89025,89026],{"class":141,"line":18963},[139,89027,89028],{"class":2512},"      \u002F\u002F 1.1 创建div标签\n",[139,89030,89031,89033,89036,89038,89040,89042,89044,89046],{"class":141,"line":18969},[139,89032,72281],{"class":153},[139,89034,89035],{"class":145},".modalBox ",[139,89037,150],{"class":149},[139,89039,56630],{"class":145},[139,89041,72381],{"class":781},[139,89043,157],{"class":145},[139,89045,84159],{"class":160},[139,89047,164],{"class":145},[139,89049,89050],{"class":141,"line":18980},[139,89051,89052],{"class":2512},"      \u002F\u002F 1.2 给div 添加类名为model\n",[139,89054,89055,89057,89060,89062],{"class":141,"line":19003},[139,89056,72281],{"class":153},[139,89058,89059],{"class":145},".modalBox.className ",[139,89061,150],{"class":149},[139,89063,89064],{"class":160}," 'modal'\n",[139,89066,89067],{"class":141,"line":19025},[139,89068,89069],{"class":2512},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[139,89071,89072,89074,89077,89079],{"class":141,"line":19030},[139,89073,72281],{"class":153},[139,89075,89076],{"class":145},".modalBox.innerHTML ",[139,89078,150],{"class":149},[139,89080,72398],{"class":160},[139,89082,89083,89086,89088],{"class":141,"line":19036},[139,89084,89085],{"class":160},"        \u003Cdiv class=\"header\">${",[139,89087,53645],{"class":145},[139,89089,89090],{"class":160},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[139,89092,89093,89096,89098],{"class":141,"line":19050},[139,89094,89095],{"class":160},"        \u003Cdiv class=\"body\">${",[139,89097,89012],{"class":145},[139,89099,89100],{"class":160},"}\u003C\u002Fdiv>\n",[139,89102,89103],{"class":141,"line":19063},[139,89104,89105],{"class":160},"      `\n",[139,89107,89108],{"class":141,"line":19068},[139,89109,89110],{"class":2512},"      \u002F\u002F console.log(this.modalBox)\n",[139,89112,89113],{"class":141,"line":19082},[139,89114,4472],{"class":145},[139,89116,89117],{"class":141,"line":19087},[139,89118,89119],{"class":2512},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[139,89121,89122],{"class":141,"line":19093},[139,89123,89124],{"class":2512},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[139,89126,89127],{"class":141,"line":19098},[139,89128,89129],{"class":2512},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[139,89131,89132,89135,89137,89139,89141,89144,89146,89148],{"class":141,"line":19112},[139,89133,89134],{"class":153},"    Modal",[139,89136,2993],{"class":145},[139,89138,87807],{"class":153},[139,89140,2993],{"class":145},[139,89142,89143],{"class":781},"open",[139,89145,15836],{"class":149},[139,89147,61151],{"class":149},[139,89149,56686],{"class":145},[139,89151,89152],{"class":141,"line":19117},[139,89153,89154],{"class":2512},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[139,89156,89157,89159,89162,89164,89166,89168,89170,89173],{"class":141,"line":19122},[139,89158,60461],{"class":149},[139,89160,89161],{"class":153}," box",[139,89163,15836],{"class":149},[139,89165,56630],{"class":145},[139,89167,56633],{"class":781},[139,89169,157],{"class":145},[139,89171,89172],{"class":160},"'.modal'",[139,89174,164],{"class":145},[139,89176,89177],{"class":141,"line":19136},[139,89178,89179],{"class":2512},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[139,89181,89182,89185,89187,89190,89192],{"class":141,"line":19148},[139,89183,89184],{"class":145},"      box ",[139,89186,4003],{"class":149},[139,89188,89189],{"class":145}," box.",[139,89191,59240],{"class":781},[139,89193,4262],{"class":145},[139,89195,89196],{"class":141,"line":19153},[139,89197,89198],{"class":2512},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[139,89200,89201],{"class":141,"line":19166},[139,89202,89203],{"class":2512},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[139,89205,89206],{"class":141,"line":19171},[139,89207,89208],{"class":2512},"      \u002F\u002F append可以增加对象\n",[139,89210,89211,89214,89217,89219,89222],{"class":141,"line":19176},[139,89212,89213],{"class":145},"      document.body.",[139,89215,89216],{"class":781},"append",[139,89218,157],{"class":145},[139,89220,89221],{"class":153},"this",[139,89223,89224],{"class":145},".modalBox)\n",[139,89226,89227],{"class":141,"line":19181},[139,89228,843],{"emptyLinePlaceholder":842},[139,89230,89231],{"class":141,"line":19194},[139,89232,89233],{"class":2512},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[139,89235,89236,89238,89241,89243,89245,89248,89250,89252,89254,89256,89259,89261],{"class":141,"line":19199},[139,89237,72281],{"class":153},[139,89239,89240],{"class":145},".modalBox.",[139,89242,56633],{"class":781},[139,89244,157],{"class":145},[139,89246,89247],{"class":160},"'i'",[139,89249,33078],{"class":145},[139,89251,60046],{"class":781},[139,89253,157],{"class":145},[139,89255,60051],{"class":160},[139,89257,89258],{"class":145},", () ",[139,89260,86950],{"class":149},[139,89262,17840],{"class":145},[139,89264,89265],{"class":141,"line":34880},[139,89266,89267],{"class":2512},"        \u002F\u002F 这个地方需要用到箭头函数\n",[139,89269,89270],{"class":141,"line":34886},[139,89271,89272],{"class":2512},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[139,89274,89275],{"class":141,"line":34892},[139,89276,89277],{"class":2512},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[139,89279,89280,89282,89284,89287],{"class":141,"line":34898},[139,89281,66957],{"class":153},[139,89283,2993],{"class":145},[139,89285,89286],{"class":781},"close",[139,89288,4262],{"class":145},[139,89290,89291],{"class":141,"line":34904},[139,89292,67046],{"class":145},[139,89294,89295],{"class":141,"line":34915},[139,89296,4472],{"class":145},[139,89298,89299],{"class":141,"line":34921},[139,89300,843],{"emptyLinePlaceholder":842},[139,89302,89303],{"class":141,"line":34941},[139,89304,89305],{"class":2512},"    \u002F\u002F 测试一下 点击 删除按钮\n",[139,89307,89308,89310,89312,89314,89317,89319,89321,89323,89325,89327,89329],{"class":141,"line":34947},[139,89309,54642],{"class":145},[139,89311,56633],{"class":781},[139,89313,157],{"class":145},[139,89315,89316],{"class":160},"'#delete'",[139,89318,33078],{"class":145},[139,89320,60046],{"class":781},[139,89322,157],{"class":145},[139,89324,60051],{"class":160},[139,89326,89258],{"class":145},[139,89328,86950],{"class":149},[139,89330,17840],{"class":145},[139,89332,89333],{"class":141,"line":34958},[139,89334,89335],{"class":2512},"      \u002F\u002F 先调用Model构造函数\n",[139,89337,89338,89340,89343,89345,89347,89349,89351,89354,89356,89359],{"class":141,"line":34964},[139,89339,60461],{"class":149},[139,89341,89342],{"class":153}," del",[139,89344,15836],{"class":149},[139,89346,13851],{"class":149},[139,89348,88999],{"class":781},[139,89350,157],{"class":145},[139,89352,89353],{"class":160},"'温馨的提示'",[139,89355,413],{"class":145},[139,89357,89358],{"class":160},"'您没有删除权限操作'",[139,89360,164],{"class":145},[139,89362,89363],{"class":141,"line":34970},[139,89364,89365],{"class":2512},"      \u002F\u002F 实例对象调用open方法\n",[139,89367,89368,89371,89373],{"class":141,"line":34976},[139,89369,89370],{"class":145},"      del.",[139,89372,89143],{"class":781},[139,89374,4262],{"class":145},[139,89376,89377],{"class":141,"line":34982},[139,89378,35706],{"class":145},[139,89380,89381],{"class":141,"line":34988},[139,89382,89383],{"class":2512},"    \u002F\u002F 测试一下 点击 登录按钮\n",[139,89385,89386,89388,89390,89392,89395,89397,89399,89401,89403,89405,89407],{"class":141,"line":34994},[139,89387,54642],{"class":145},[139,89389,56633],{"class":781},[139,89391,157],{"class":145},[139,89393,89394],{"class":160},"'#login'",[139,89396,33078],{"class":145},[139,89398,60046],{"class":781},[139,89400,157],{"class":145},[139,89402,60051],{"class":160},[139,89404,89258],{"class":145},[139,89406,86950],{"class":149},[139,89408,17840],{"class":145},[139,89410,89411],{"class":141,"line":35000},[139,89412,89335],{"class":2512},[139,89414,89415,89417,89420,89422,89424,89426,89428,89431,89433,89436],{"class":141,"line":35020},[139,89416,60461],{"class":149},[139,89418,89419],{"class":153}," log",[139,89421,15836],{"class":149},[139,89423,13851],{"class":149},[139,89425,88999],{"class":781},[139,89427,157],{"class":145},[139,89429,89430],{"class":160},"'友情提示'",[139,89432,413],{"class":145},[139,89434,89435],{"class":160},"'您还没有登录呢'",[139,89437,164],{"class":145},[139,89439,89440],{"class":141,"line":35026},[139,89441,89365],{"class":2512},[139,89443,89444,89447,89449],{"class":141,"line":35042},[139,89445,89446],{"class":145},"      log.",[139,89448,89143],{"class":781},[139,89450,4262],{"class":145},[139,89452,89453],{"class":141,"line":35048},[139,89454,35706],{"class":145},[139,89456,89457],{"class":141,"line":35062},[139,89458,89459],{"class":2512},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[139,89461,89462,89464,89466,89468,89470,89472,89474,89476],{"class":141,"line":35068},[139,89463,89134],{"class":153},[139,89465,2993],{"class":145},[139,89467,87807],{"class":153},[139,89469,2993],{"class":145},[139,89471,89286],{"class":781},[139,89473,15836],{"class":149},[139,89475,61151],{"class":149},[139,89477,56686],{"class":145},[139,89479,89480,89482,89484,89486],{"class":141,"line":35083},[139,89481,72281],{"class":153},[139,89483,89240],{"class":145},[139,89485,59240],{"class":781},[139,89487,4262],{"class":145},[139,89489,89490],{"class":141,"line":35089},[139,89491,4472],{"class":145},[139,89493,89494,89496,89498],{"class":141,"line":35098},[139,89495,54652],{"class":145},[139,89497,54050],{"class":53538},[139,89499,53545],{"class":145},[139,89501,89502,89504,89506],{"class":141,"line":35104},[139,89503,54022],{"class":145},[139,89505,54037],{"class":53538},[139,89507,53545],{"class":145},[139,89509,89510],{"class":141,"line":35113},[139,89511,843],{"emptyLinePlaceholder":842},[139,89513,89514,89516,89518],{"class":141,"line":35119},[139,89515,54022],{"class":145},[139,89517,52873],{"class":53538},[139,89519,53545],{"class":145},[19,89521,89522],{},[3760,89523],{"alt":135,"src":89524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89526,89528],{"id":89527},"_414-深浅拷贝","4.14 深浅拷贝",[1217,89530,89532],{"id":89531},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89534,89535],{},[3760,89536],{"alt":135,"src":89537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89539,89540],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89542,89543],{},[3760,89544],{"alt":135,"src":89545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89547,89548],{},[3760,89549],{"alt":135,"src":89550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89552,89553],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89555,89556],{},[3760,89557],{"alt":135,"src":89558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89560,13605],{},[19,89562,89563],{},[3760,89564],{"alt":135,"src":89565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1217,89567,89569],{"id":89568},"_4142-深拷贝","4.14.2 深拷贝",[19,89571,89572],{},"深拷贝：拷贝的是对象，不是地址",[19,89574,89575],{},"常用的三种方法：",[1760,89577,89578,89581,89584],{},[1763,89579,89580],{},"通过递归实现深拷贝",[1763,89582,89583],{},"lodash\u002FcloneDeep",[1763,89585,89586],{},"通过JSON.stringify()实现",[24265,89588,89590],{"id":89589},"_41421-递归函数","4.14.2.1 递归函数",[19,89592,89593],{},[3760,89594],{"alt":135,"src":89595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1760,89597,89598],{},[1763,89599,89600],{},"死递归占溢出：",[130,89602,89604],{"className":55302,"code":89603,"language":55304,"meta":135,"style":135},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[50,89605,89606,89614,89622,89626,89631,89635,89640,89648],{"__ignoreMap":135},[139,89607,89608,89610,89612],{"class":141,"line":142},[139,89609,796],{"class":145},[139,89611,54037],{"class":53538},[139,89613,53545],{"class":145},[139,89615,89616,89618,89620],{"class":141,"line":210},[139,89617,54380],{"class":145},[139,89619,54050],{"class":53538},[139,89621,53545],{"class":145},[139,89623,89624],{"class":141,"line":254},[139,89625,79372],{"class":145},[139,89627,89628],{"class":141,"line":262},[139,89629,89630],{"class":145},"      fn()\n",[139,89632,89633],{"class":141,"line":313},[139,89634,4472],{"class":145},[139,89636,89637],{"class":141,"line":462},[139,89638,89639],{"class":145},"    fn()\n",[139,89641,89642,89644,89646],{"class":141,"line":474},[139,89643,54652],{"class":145},[139,89645,54050],{"class":53538},[139,89647,53545],{"class":145},[139,89649,89650,89652,89654],{"class":141,"line":484},[139,89651,54022],{"class":145},[139,89653,54037],{"class":53538},[139,89655,53545],{"class":145},[1760,89657,89658],{"start":210},[1763,89659,89660],{},"递归函数要加判断条件：",[19,89662,89663],{},[3760,89664],{"alt":135,"src":89665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1760,89667,89668],{"start":254},[1763,89669,89670],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[130,89672,89674],{"className":52871,"code":89673,"language":52873,"meta":135,"style":135},"\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",[50,89675,89676,89686,89700,89704,89712,89726,89746,89758,89766,89770,89778,89790,89798,89806,89831,89843,89847,89854,89862,89870,89874],{"__ignoreMap":135},[139,89677,89678,89680,89682,89684],{"class":141,"line":142},[139,89679,53535],{"class":145},[139,89681,53539],{"class":53538},[139,89683,53542],{"class":781},[139,89685,53545],{"class":145},[139,89687,89688,89690,89692,89694,89696,89698],{"class":141,"line":210},[139,89689,796],{"class":145},[139,89691,52873],{"class":53538},[139,89693,53554],{"class":781},[139,89695,150],{"class":145},[139,89697,53559],{"class":160},[139,89699,53545],{"class":145},[139,89701,89702],{"class":141,"line":254},[139,89703,843],{"emptyLinePlaceholder":842},[139,89705,89706,89708,89710],{"class":141,"line":262},[139,89707,796],{"class":145},[139,89709,53572],{"class":53538},[139,89711,53545],{"class":145},[139,89713,89714,89716,89718,89720,89722,89724],{"class":141,"line":313},[139,89715,54380],{"class":145},[139,89717,53582],{"class":53538},[139,89719,53585],{"class":781},[139,89721,150],{"class":145},[139,89723,53590],{"class":160},[139,89725,53545],{"class":145},[139,89727,89728,89730,89732,89734,89736,89738,89740,89742,89744],{"class":141,"line":462},[139,89729,54380],{"class":145},[139,89731,53582],{"class":53538},[139,89733,17189],{"class":781},[139,89735,150],{"class":145},[139,89737,53629],{"class":160},[139,89739,53609],{"class":781},[139,89741,150],{"class":145},[139,89743,53636],{"class":160},[139,89745,53545],{"class":145},[139,89747,89748,89750,89752,89754,89756],{"class":141,"line":474},[139,89749,54380],{"class":145},[139,89751,53645],{"class":53538},[139,89753,53648],{"class":145},[139,89755,53645],{"class":53538},[139,89757,53545],{"class":145},[139,89759,89760,89762,89764],{"class":141,"line":484},[139,89761,54022],{"class":145},[139,89763,53572],{"class":53538},[139,89765,53545],{"class":145},[139,89767,89768],{"class":141,"line":989},[139,89769,843],{"emptyLinePlaceholder":842},[139,89771,89772,89774,89776],{"class":141,"line":994},[139,89773,796],{"class":145},[139,89775,54037],{"class":53538},[139,89777,53545],{"class":145},[139,89779,89780,89782,89784,89786,89788],{"class":141,"line":999},[139,89781,54380],{"class":145},[139,89783,53848],{"class":53538},[139,89785,57548],{"class":145},[139,89787,53848],{"class":53538},[139,89789,53545],{"class":145},[139,89791,89792,89794,89796],{"class":141,"line":1006},[139,89793,54380],{"class":145},[139,89795,54050],{"class":53538},[139,89797,53545],{"class":145},[139,89799,89800,89802,89804],{"class":141,"line":1027},[139,89801,72314],{"class":149},[139,89803,76002],{"class":781},[139,89805,13127],{"class":145},[139,89807,89808,89810,89812,89814,89816,89818,89820,89822,89824,89826,89829],{"class":141,"line":1040},[139,89809,58005],{"class":145},[139,89811,56633],{"class":781},[139,89813,157],{"class":145},[139,89815,84159],{"class":160},[139,89817,76478],{"class":145},[139,89819,150],{"class":149},[139,89821,13851],{"class":149},[139,89823,76018],{"class":781},[139,89825,19528],{"class":145},[139,89827,89828],{"class":781},"toLocaleString",[139,89830,4262],{"class":145},[139,89832,89833,89836,89839,89841],{"class":141,"line":2160},[139,89834,89835],{"class":781},"      setTimeout",[139,89837,89838],{"class":145},"(getTime, ",[139,89840,8684],{"class":153},[139,89842,164],{"class":145},[139,89844,89845],{"class":141,"line":2188},[139,89846,4472],{"class":145},[139,89848,89849,89852],{"class":141,"line":3944},[139,89850,89851],{"class":781},"    getTime",[139,89853,4262],{"class":145},[139,89855,89856,89858,89860],{"class":141,"line":3963},[139,89857,54652],{"class":145},[139,89859,54050],{"class":53538},[139,89861,53545],{"class":145},[139,89863,89864,89866,89868],{"class":141,"line":3968},[139,89865,54022],{"class":145},[139,89867,54037],{"class":53538},[139,89869,53545],{"class":145},[139,89871,89872],{"class":141,"line":3982},[139,89873,843],{"emptyLinePlaceholder":842},[139,89875,89876,89878,89880],{"class":141,"line":3987},[139,89877,54022],{"class":145},[139,89879,52873],{"class":53538},[139,89881,53545],{"class":145},[19,89883,89884],{},[3760,89885],{"alt":135,"src":89886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1760,89888,89889],{"start":262},[1763,89890,89580],{},[19,89892,89893],{},[3760,89894],{"alt":135,"src":89895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89897,89898],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89900,41431],{},[19,89902,89903],{},"这个是简易版的递归函数深拷贝",[19,89905,89906],{},"一定要注意先数组再对象，因为万物皆可对象",[130,89908,89910],{"className":52871,"code":89909,"language":52873,"meta":135,"style":135},"\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",[50,89911,89912,89922,89936,89940,89948,89962,89982,89994,90002,90006,90014,90022,90032,90041,90049,90065,90069,90077,90081,90085,90097,90102,90121,90137,90142,90147,90152,90167,90172,90177,90186,90194,90211,90219,90225,90233,90238,90243,90252,90256,90260,90264,90275,90284,90294,90308,90318,90326,90334,90342,90346],{"__ignoreMap":135},[139,89913,89914,89916,89918,89920],{"class":141,"line":142},[139,89915,53535],{"class":145},[139,89917,53539],{"class":53538},[139,89919,53542],{"class":781},[139,89921,53545],{"class":145},[139,89923,89924,89926,89928,89930,89932,89934],{"class":141,"line":210},[139,89925,796],{"class":145},[139,89927,52873],{"class":53538},[139,89929,53554],{"class":781},[139,89931,150],{"class":145},[139,89933,53559],{"class":160},[139,89935,53545],{"class":145},[139,89937,89938],{"class":141,"line":254},[139,89939,843],{"emptyLinePlaceholder":842},[139,89941,89942,89944,89946],{"class":141,"line":262},[139,89943,796],{"class":145},[139,89945,53572],{"class":53538},[139,89947,53545],{"class":145},[139,89949,89950,89952,89954,89956,89958,89960],{"class":141,"line":313},[139,89951,54380],{"class":145},[139,89953,53582],{"class":53538},[139,89955,53585],{"class":781},[139,89957,150],{"class":145},[139,89959,53590],{"class":160},[139,89961,53545],{"class":145},[139,89963,89964,89966,89968,89970,89972,89974,89976,89978,89980],{"class":141,"line":462},[139,89965,54380],{"class":145},[139,89967,53582],{"class":53538},[139,89969,17189],{"class":781},[139,89971,150],{"class":145},[139,89973,53629],{"class":160},[139,89975,53609],{"class":781},[139,89977,150],{"class":145},[139,89979,53636],{"class":160},[139,89981,53545],{"class":145},[139,89983,89984,89986,89988,89990,89992],{"class":141,"line":474},[139,89985,54380],{"class":145},[139,89987,53645],{"class":53538},[139,89989,53648],{"class":145},[139,89991,53645],{"class":53538},[139,89993,53545],{"class":145},[139,89995,89996,89998,90000],{"class":141,"line":484},[139,89997,54022],{"class":145},[139,89999,53572],{"class":53538},[139,90001,53545],{"class":145},[139,90003,90004],{"class":141,"line":989},[139,90005,843],{"emptyLinePlaceholder":842},[139,90007,90008,90010,90012],{"class":141,"line":994},[139,90009,796],{"class":145},[139,90011,54037],{"class":53538},[139,90013,53545],{"class":145},[139,90015,90016,90018,90020],{"class":141,"line":999},[139,90017,54380],{"class":145},[139,90019,54050],{"class":53538},[139,90021,53545],{"class":145},[139,90023,90024,90026,90028,90030],{"class":141,"line":1006},[139,90025,13494],{"class":149},[139,90027,72201],{"class":153},[139,90029,15836],{"class":149},[139,90031,17840],{"class":145},[139,90033,90034,90036,90039],{"class":141,"line":1027},[139,90035,73845],{"class":145},[139,90037,90038],{"class":160},"'pink'",[139,90040,33715],{"class":145},[139,90042,90043,90045,90047],{"class":141,"line":1040},[139,90044,73855],{"class":145},[139,90046,3085],{"class":153},[139,90048,33715],{"class":145},[139,90050,90051,90054,90057,90059,90062],{"class":141,"line":2160},[139,90052,90053],{"class":145},"      hobby: [",[139,90055,90056],{"class":160},"'乒乓球'",[139,90058,413],{"class":145},[139,90060,90061],{"class":160},"'足球'",[139,90063,90064],{"class":145},"],\n",[139,90066,90067],{"class":141,"line":2188},[139,90068,80101],{"class":145},[139,90070,90071,90074],{"class":141,"line":3944},[139,90072,90073],{"class":145},"        baby: ",[139,90075,90076],{"class":160},"'小pink'\n",[139,90078,90079],{"class":141,"line":3963},[139,90080,54633],{"class":145},[139,90082,90083],{"class":141,"line":3968},[139,90084,4472],{"class":145},[139,90086,90087,90089,90092,90094],{"class":141,"line":3982},[139,90088,13494],{"class":149},[139,90090,90091],{"class":153}," o",[139,90093,15836],{"class":149},[139,90095,90096],{"class":145}," {}\n",[139,90098,90099],{"class":141,"line":3987},[139,90100,90101],{"class":2512},"    \u002F\u002F 拷贝函数\n",[139,90103,90104,90106,90109,90111,90114,90116,90119],{"class":141,"line":4014},[139,90105,72314],{"class":149},[139,90107,90108],{"class":781}," deepCopy",[139,90110,157],{"class":145},[139,90112,90113],{"class":2111},"newObj",[139,90115,413],{"class":145},[139,90117,90118],{"class":2111},"oldObj",[139,90120,14714],{"class":145},[139,90122,90123,90125,90127,90129,90132,90134],{"class":141,"line":4019},[139,90124,54519],{"class":149},[139,90126,549],{"class":145},[139,90128,54083],{"class":149},[139,90130,90131],{"class":145}," k ",[139,90133,1976],{"class":149},[139,90135,90136],{"class":145}," oldObj) {\n",[139,90138,90139],{"class":141,"line":4036},[139,90140,90141],{"class":2512},"        \u002F\u002F 处理数组的问题\n",[139,90143,90144],{"class":141,"line":4041},[139,90145,90146],{"class":2512},"        \u002F\u002F 判断是否属于数组\n",[139,90148,90149],{"class":141,"line":4046},[139,90150,90151],{"class":2512},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[139,90153,90154,90156,90159,90162,90165],{"class":141,"line":4051},[139,90155,4780],{"class":149},[139,90157,90158],{"class":145}," (oldObj[k] ",[139,90160,90161],{"class":149},"instanceof",[139,90163,90164],{"class":781}," Array",[139,90166,14714],{"class":145},[139,90168,90169],{"class":141,"line":4065},[139,90170,90171],{"class":2512},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[139,90173,90174],{"class":141,"line":4070},[139,90175,90176],{"class":2512},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[139,90178,90179,90182,90184],{"class":141,"line":4860},[139,90180,90181],{"class":145},"          newObj[k] ",[139,90183,150],{"class":149},[139,90185,2088],{"class":145},[139,90187,90188,90191],{"class":141,"line":4874},[139,90189,90190],{"class":781},"          deepCopy",[139,90192,90193],{"class":145},"(newObj[k], oldObj[k])\n",[139,90195,90196,90198,90200,90202,90204,90206,90209],{"class":141,"line":4882},[139,90197,82308],{"class":145},[139,90199,656],{"class":149},[139,90201,3992],{"class":149},[139,90203,90158],{"class":145},[139,90205,90161],{"class":149},[139,90207,90208],{"class":781}," Object",[139,90210,14714],{"class":145},[139,90212,90213,90215,90217],{"class":141,"line":4887},[139,90214,90181],{"class":145},[139,90216,150],{"class":149},[139,90218,90096],{"class":145},[139,90220,90221,90223],{"class":141,"line":4893},[139,90222,90190],{"class":781},[139,90224,90193],{"class":145},[139,90226,90227,90229,90231],{"class":141,"line":4899},[139,90228,82308],{"class":145},[139,90230,656],{"class":149},[139,90232,17840],{"class":145},[139,90234,90235],{"class":141,"line":4904},[139,90236,90237],{"class":2512},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[139,90239,90240],{"class":141,"line":10222},[139,90241,90242],{"class":2512},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[139,90244,90245,90247,90249],{"class":141,"line":10246},[139,90246,90181],{"class":145},[139,90248,150],{"class":149},[139,90250,90251],{"class":145}," oldObj[k]\n",[139,90253,90254],{"class":141,"line":10251},[139,90255,4812],{"class":145},[139,90257,90258],{"class":141,"line":10257},[139,90259,54633],{"class":145},[139,90261,90262],{"class":141,"line":10284},[139,90263,4472],{"class":145},[139,90265,90266,90269,90272],{"class":141,"line":10289},[139,90267,90268],{"class":781},"    deepCopy",[139,90270,90271],{"class":145},"(o, obj) ",[139,90273,90274],{"class":2512},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[139,90276,90277,90279,90281],{"class":141,"line":10295},[139,90278,75982],{"class":145},[139,90280,60480],{"class":781},[139,90282,90283],{"class":145},"(o)\n",[139,90285,90286,90289,90291],{"class":141,"line":10307},[139,90287,90288],{"class":145},"    o.age ",[139,90290,150],{"class":149},[139,90292,90293],{"class":153}," 20\n",[139,90295,90296,90299,90301,90303,90305],{"class":141,"line":10319},[139,90297,90298],{"class":145},"    o.hobby[",[139,90300,2634],{"class":153},[139,90302,6721],{"class":145},[139,90304,150],{"class":149},[139,90306,90307],{"class":160}," '篮球'\n",[139,90309,90310,90313,90315],{"class":141,"line":10331},[139,90311,90312],{"class":145},"    o.family ",[139,90314,150],{"class":149},[139,90316,90317],{"class":160}," '老pink'\n",[139,90319,90320,90322,90324],{"class":141,"line":11990},[139,90321,75982],{"class":145},[139,90323,60480],{"class":781},[139,90325,72266],{"class":145},[139,90327,90328,90330,90332],{"class":141,"line":12015},[139,90329,54652],{"class":145},[139,90331,54050],{"class":53538},[139,90333,53545],{"class":145},[139,90335,90336,90338,90340],{"class":141,"line":12038},[139,90337,54022],{"class":145},[139,90339,54037],{"class":53538},[139,90341,53545],{"class":145},[139,90343,90344],{"class":141,"line":12062},[139,90345,843],{"emptyLinePlaceholder":842},[139,90347,90348,90350,90352],{"class":141,"line":12067},[139,90349,54022],{"class":145},[139,90351,52873],{"class":53538},[139,90353,53545],{"class":145},[19,90355,90356],{},[3760,90357],{"alt":135,"src":90358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24265,90360,90362,90363],{"id":90361},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1674,90364,90365],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90367,90368],{},[2680,90369,90370],{"href":90370,"rel":90371},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26128],[19,90373,90374],{},"lodash里边的方法都要加上一个下划线_",[19,90376,90377],{},"_.cloneDeep()",[130,90379,90381],{"className":52871,"code":90380,"language":52873,"meta":135,"style":135},"\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",[50,90382,90383,90393,90407,90411,90419,90433,90453,90465,90473,90477,90485,90490,90509,90517,90527,90535,90543,90555,90559,90565,90569,90573,90589,90597,90606,90614,90622,90630,90634],{"__ignoreMap":135},[139,90384,90385,90387,90389,90391],{"class":141,"line":142},[139,90386,53535],{"class":145},[139,90388,53539],{"class":53538},[139,90390,53542],{"class":781},[139,90392,53545],{"class":145},[139,90394,90395,90397,90399,90401,90403,90405],{"class":141,"line":210},[139,90396,796],{"class":145},[139,90398,52873],{"class":53538},[139,90400,53554],{"class":781},[139,90402,150],{"class":145},[139,90404,53559],{"class":160},[139,90406,53545],{"class":145},[139,90408,90409],{"class":141,"line":254},[139,90410,843],{"emptyLinePlaceholder":842},[139,90412,90413,90415,90417],{"class":141,"line":262},[139,90414,796],{"class":145},[139,90416,53572],{"class":53538},[139,90418,53545],{"class":145},[139,90420,90421,90423,90425,90427,90429,90431],{"class":141,"line":313},[139,90422,54380],{"class":145},[139,90424,53582],{"class":53538},[139,90426,53585],{"class":781},[139,90428,150],{"class":145},[139,90430,53590],{"class":160},[139,90432,53545],{"class":145},[139,90434,90435,90437,90439,90441,90443,90445,90447,90449,90451],{"class":141,"line":462},[139,90436,54380],{"class":145},[139,90438,53582],{"class":53538},[139,90440,17189],{"class":781},[139,90442,150],{"class":145},[139,90444,53629],{"class":160},[139,90446,53609],{"class":781},[139,90448,150],{"class":145},[139,90450,53636],{"class":160},[139,90452,53545],{"class":145},[139,90454,90455,90457,90459,90461,90463],{"class":141,"line":474},[139,90456,54380],{"class":145},[139,90458,53645],{"class":53538},[139,90460,53648],{"class":145},[139,90462,53645],{"class":53538},[139,90464,53545],{"class":145},[139,90466,90467,90469,90471],{"class":141,"line":484},[139,90468,54022],{"class":145},[139,90470,53572],{"class":53538},[139,90472,53545],{"class":145},[139,90474,90475],{"class":141,"line":989},[139,90476,843],{"emptyLinePlaceholder":842},[139,90478,90479,90481,90483],{"class":141,"line":994},[139,90480,796],{"class":145},[139,90482,54037],{"class":53538},[139,90484,53545],{"class":145},[139,90486,90487],{"class":141,"line":999},[139,90488,90489],{"class":2512},"  \u003C!-- 先引用这个库 -->\n",[139,90491,90492,90494,90496,90498,90500,90503,90505,90507],{"class":141,"line":1006},[139,90493,54380],{"class":145},[139,90495,54050],{"class":53538},[139,90497,57473],{"class":781},[139,90499,150],{"class":145},[139,90501,90502],{"class":160},"\"lodash.min.js\"",[139,90504,57548],{"class":145},[139,90506,54050],{"class":53538},[139,90508,53545],{"class":145},[139,90510,90511,90513,90515],{"class":141,"line":1027},[139,90512,54380],{"class":145},[139,90514,54050],{"class":53538},[139,90516,53545],{"class":145},[139,90518,90519,90521,90523,90525],{"class":141,"line":1040},[139,90520,13494],{"class":149},[139,90522,72201],{"class":153},[139,90524,15836],{"class":149},[139,90526,17840],{"class":145},[139,90528,90529,90531,90533],{"class":141,"line":2160},[139,90530,73845],{"class":145},[139,90532,90038],{"class":160},[139,90534,33715],{"class":145},[139,90536,90537,90539,90541],{"class":141,"line":2188},[139,90538,73855],{"class":145},[139,90540,3085],{"class":153},[139,90542,33715],{"class":145},[139,90544,90545,90547,90549,90551,90553],{"class":141,"line":3944},[139,90546,90053],{"class":145},[139,90548,90056],{"class":160},[139,90550,413],{"class":145},[139,90552,90061],{"class":160},[139,90554,90064],{"class":145},[139,90556,90557],{"class":141,"line":3963},[139,90558,80101],{"class":145},[139,90560,90561,90563],{"class":141,"line":3968},[139,90562,90073],{"class":145},[139,90564,90076],{"class":160},[139,90566,90567],{"class":141,"line":3982},[139,90568,54633],{"class":145},[139,90570,90571],{"class":141,"line":3987},[139,90572,4472],{"class":145},[139,90574,90575,90577,90579,90581,90584,90587],{"class":141,"line":4014},[139,90576,13494],{"class":149},[139,90578,90091],{"class":153},[139,90580,15836],{"class":149},[139,90582,90583],{"class":145}," _.",[139,90585,90586],{"class":781},"cloneDeep",[139,90588,72266],{"class":145},[139,90590,90591,90593,90595],{"class":141,"line":4019},[139,90592,75982],{"class":145},[139,90594,60480],{"class":781},[139,90596,90283],{"class":145},[139,90598,90599,90602,90604],{"class":141,"line":4036},[139,90600,90601],{"class":145},"    o.family.baby ",[139,90603,150],{"class":149},[139,90605,90317],{"class":160},[139,90607,90608,90610,90612],{"class":141,"line":4041},[139,90609,75982],{"class":145},[139,90611,60480],{"class":781},[139,90613,72266],{"class":145},[139,90615,90616,90618,90620],{"class":141,"line":4046},[139,90617,54652],{"class":145},[139,90619,54050],{"class":53538},[139,90621,53545],{"class":145},[139,90623,90624,90626,90628],{"class":141,"line":4051},[139,90625,54022],{"class":145},[139,90627,54037],{"class":53538},[139,90629,53545],{"class":145},[139,90631,90632],{"class":141,"line":4065},[139,90633,843],{"emptyLinePlaceholder":842},[139,90635,90636,90638,90640],{"class":141,"line":4070},[139,90637,54022],{"class":145},[139,90639,52873],{"class":53538},[139,90641,53545],{"class":145},[19,90643,90644],{},[3760,90645],{"alt":135,"src":90646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24265,90648,90650],{"id":90649},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[130,90652,90654],{"className":52871,"code":90653,"language":52873,"meta":135,"style":135},"\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",[50,90655,90656,90666,90680,90684,90692,90706,90726,90738,90746,90750,90758,90766,90776,90784,90792,90804,90808,90814,90818,90822,90827,90832,90837,90863,90871,90880,90888,90896,90904,90908],{"__ignoreMap":135},[139,90657,90658,90660,90662,90664],{"class":141,"line":142},[139,90659,53535],{"class":145},[139,90661,53539],{"class":53538},[139,90663,53542],{"class":781},[139,90665,53545],{"class":145},[139,90667,90668,90670,90672,90674,90676,90678],{"class":141,"line":210},[139,90669,796],{"class":145},[139,90671,52873],{"class":53538},[139,90673,53554],{"class":781},[139,90675,150],{"class":145},[139,90677,53559],{"class":160},[139,90679,53545],{"class":145},[139,90681,90682],{"class":141,"line":254},[139,90683,843],{"emptyLinePlaceholder":842},[139,90685,90686,90688,90690],{"class":141,"line":262},[139,90687,796],{"class":145},[139,90689,53572],{"class":53538},[139,90691,53545],{"class":145},[139,90693,90694,90696,90698,90700,90702,90704],{"class":141,"line":313},[139,90695,54380],{"class":145},[139,90697,53582],{"class":53538},[139,90699,53585],{"class":781},[139,90701,150],{"class":145},[139,90703,53590],{"class":160},[139,90705,53545],{"class":145},[139,90707,90708,90710,90712,90714,90716,90718,90720,90722,90724],{"class":141,"line":462},[139,90709,54380],{"class":145},[139,90711,53582],{"class":53538},[139,90713,17189],{"class":781},[139,90715,150],{"class":145},[139,90717,53629],{"class":160},[139,90719,53609],{"class":781},[139,90721,150],{"class":145},[139,90723,53636],{"class":160},[139,90725,53545],{"class":145},[139,90727,90728,90730,90732,90734,90736],{"class":141,"line":474},[139,90729,54380],{"class":145},[139,90731,53645],{"class":53538},[139,90733,53648],{"class":145},[139,90735,53645],{"class":53538},[139,90737,53545],{"class":145},[139,90739,90740,90742,90744],{"class":141,"line":484},[139,90741,54022],{"class":145},[139,90743,53572],{"class":53538},[139,90745,53545],{"class":145},[139,90747,90748],{"class":141,"line":989},[139,90749,843],{"emptyLinePlaceholder":842},[139,90751,90752,90754,90756],{"class":141,"line":994},[139,90753,796],{"class":145},[139,90755,54037],{"class":53538},[139,90757,53545],{"class":145},[139,90759,90760,90762,90764],{"class":141,"line":999},[139,90761,54380],{"class":145},[139,90763,54050],{"class":53538},[139,90765,53545],{"class":145},[139,90767,90768,90770,90772,90774],{"class":141,"line":1006},[139,90769,13494],{"class":149},[139,90771,72201],{"class":153},[139,90773,15836],{"class":149},[139,90775,17840],{"class":145},[139,90777,90778,90780,90782],{"class":141,"line":1027},[139,90779,73845],{"class":145},[139,90781,90038],{"class":160},[139,90783,33715],{"class":145},[139,90785,90786,90788,90790],{"class":141,"line":1040},[139,90787,73855],{"class":145},[139,90789,3085],{"class":153},[139,90791,33715],{"class":145},[139,90793,90794,90796,90798,90800,90802],{"class":141,"line":2160},[139,90795,90053],{"class":145},[139,90797,90056],{"class":160},[139,90799,413],{"class":145},[139,90801,90061],{"class":160},[139,90803,90064],{"class":145},[139,90805,90806],{"class":141,"line":2188},[139,90807,80101],{"class":145},[139,90809,90810,90812],{"class":141,"line":3944},[139,90811,90073],{"class":145},[139,90813,90076],{"class":160},[139,90815,90816],{"class":141,"line":3963},[139,90817,54633],{"class":145},[139,90819,90820],{"class":141,"line":3968},[139,90821,4472],{"class":145},[139,90823,90824],{"class":141,"line":3982},[139,90825,90826],{"class":2512},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[139,90828,90829],{"class":141,"line":3987},[139,90830,90831],{"class":2512},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[139,90833,90834],{"class":141,"line":4014},[139,90835,90836],{"class":2512},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[139,90838,90839,90841,90843,90845,90848,90850,90853,90855,90857,90859,90861],{"class":141,"line":4019},[139,90840,13494],{"class":149},[139,90842,90091],{"class":153},[139,90844,15836],{"class":149},[139,90846,90847],{"class":153}," JSON",[139,90849,2993],{"class":145},[139,90851,90852],{"class":781},"parse",[139,90854,157],{"class":145},[139,90856,73893],{"class":153},[139,90858,2993],{"class":145},[139,90860,73898],{"class":781},[139,90862,73901],{"class":145},[139,90864,90865,90867,90869],{"class":141,"line":4036},[139,90866,75982],{"class":145},[139,90868,60480],{"class":781},[139,90870,90283],{"class":145},[139,90872,90873,90875,90877],{"class":141,"line":4041},[139,90874,90601],{"class":145},[139,90876,150],{"class":149},[139,90878,90879],{"class":160}," '123'\n",[139,90881,90882,90884,90886],{"class":141,"line":4046},[139,90883,75982],{"class":145},[139,90885,60480],{"class":781},[139,90887,72266],{"class":145},[139,90889,90890,90892,90894],{"class":141,"line":4051},[139,90891,54652],{"class":145},[139,90893,54050],{"class":53538},[139,90895,53545],{"class":145},[139,90897,90898,90900,90902],{"class":141,"line":4065},[139,90899,54022],{"class":145},[139,90901,54037],{"class":53538},[139,90903,53545],{"class":145},[139,90905,90906],{"class":141,"line":4070},[139,90907,843],{"emptyLinePlaceholder":842},[139,90909,90910,90912,90914],{"class":141,"line":4860},[139,90911,54022],{"class":145},[139,90913,52873],{"class":53538},[139,90915,53545],{"class":145},[19,90917,90918],{},[3760,90919],{"alt":135,"src":90920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90922,90924],{"id":90923},"_415-异常处理","4.15 异常处理",[1760,90926,90927],{},[1763,90928,90929],{},"throw抛异常",[19,90931,90932],{},[3760,90933],{"alt":135,"src":90934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1760,90936,90937],{"start":210},[1763,90938,90939],{},"try\u002Fcatch 捕获错误信息",[19,90941,90942],{},[3760,90943],{"alt":135,"src":90944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[130,90946,90948],{"className":52871,"code":90947,"language":52873,"meta":135,"style":135},"\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",[50,90949,90950,90960,90974,90978,90986,91000,91020,91032,91040,91044,91052,91064,91072,91081,91088,91093,91112,91121,91132,91137,91147,91152,91157,91162,91179,91183,91188,91195,91207,91211,91223,91227,91231,91236,91241,91248,91256,91264,91268],{"__ignoreMap":135},[139,90951,90952,90954,90956,90958],{"class":141,"line":142},[139,90953,53535],{"class":145},[139,90955,53539],{"class":53538},[139,90957,53542],{"class":781},[139,90959,53545],{"class":145},[139,90961,90962,90964,90966,90968,90970,90972],{"class":141,"line":210},[139,90963,796],{"class":145},[139,90965,52873],{"class":53538},[139,90967,53554],{"class":781},[139,90969,150],{"class":145},[139,90971,53559],{"class":160},[139,90973,53545],{"class":145},[139,90975,90976],{"class":141,"line":254},[139,90977,843],{"emptyLinePlaceholder":842},[139,90979,90980,90982,90984],{"class":141,"line":262},[139,90981,796],{"class":145},[139,90983,53572],{"class":53538},[139,90985,53545],{"class":145},[139,90987,90988,90990,90992,90994,90996,90998],{"class":141,"line":313},[139,90989,54380],{"class":145},[139,90991,53582],{"class":53538},[139,90993,53585],{"class":781},[139,90995,150],{"class":145},[139,90997,53590],{"class":160},[139,90999,53545],{"class":145},[139,91001,91002,91004,91006,91008,91010,91012,91014,91016,91018],{"class":141,"line":462},[139,91003,54380],{"class":145},[139,91005,53582],{"class":53538},[139,91007,17189],{"class":781},[139,91009,150],{"class":145},[139,91011,53629],{"class":160},[139,91013,53609],{"class":781},[139,91015,150],{"class":145},[139,91017,53636],{"class":160},[139,91019,53545],{"class":145},[139,91021,91022,91024,91026,91028,91030],{"class":141,"line":474},[139,91023,54380],{"class":145},[139,91025,53645],{"class":53538},[139,91027,53648],{"class":145},[139,91029,53645],{"class":53538},[139,91031,53545],{"class":145},[139,91033,91034,91036,91038],{"class":141,"line":484},[139,91035,54022],{"class":145},[139,91037,53572],{"class":53538},[139,91039,53545],{"class":145},[139,91041,91042],{"class":141,"line":989},[139,91043,843],{"emptyLinePlaceholder":842},[139,91045,91046,91048,91050],{"class":141,"line":994},[139,91047,796],{"class":145},[139,91049,54037],{"class":53538},[139,91051,53545],{"class":145},[139,91053,91054,91056,91058,91060,91062],{"class":141,"line":999},[139,91055,54380],{"class":145},[139,91057,19],{"class":53538},[139,91059,55729],{"class":145},[139,91061,19],{"class":53538},[139,91063,53545],{"class":145},[139,91065,91066,91068,91070],{"class":141,"line":1006},[139,91067,54380],{"class":145},[139,91069,54050],{"class":53538},[139,91071,53545],{"class":145},[139,91073,91074,91076,91079],{"class":141,"line":1027},[139,91075,72314],{"class":149},[139,91077,91078],{"class":781}," fn",[139,91080,13127],{"class":145},[139,91082,91083,91086],{"class":141,"line":1040},[139,91084,91085],{"class":149},"      try",[139,91087,17840],{"class":145},[139,91089,91090],{"class":141,"line":2160},[139,91091,91092],{"class":2512},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[139,91094,91095,91097,91099,91101,91103,91105,91107,91110],{"class":141,"line":2188},[139,91096,63503],{"class":149},[139,91098,9099],{"class":153},[139,91100,15836],{"class":149},[139,91102,56630],{"class":145},[139,91104,56633],{"class":781},[139,91106,157],{"class":145},[139,91108,91109],{"class":160},"'.p'",[139,91111,164],{"class":145},[139,91113,91114,91117,91119],{"class":141,"line":3944},[139,91115,91116],{"class":145},"        p.style.color ",[139,91118,150],{"class":149},[139,91120,69281],{"class":160},[139,91122,91123,91126,91129],{"class":141,"line":3963},[139,91124,91125],{"class":145},"      } ",[139,91127,91128],{"class":149},"catch",[139,91130,91131],{"class":145}," (err) {\n",[139,91133,91134],{"class":141,"line":3968},[139,91135,91136],{"class":2512},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[139,91138,91139,91142,91144],{"class":141,"line":3982},[139,91140,91141],{"class":145},"        console.",[139,91143,60480],{"class":781},[139,91145,91146],{"class":145},"(err.message)\n",[139,91148,91149],{"class":141,"line":3987},[139,91150,91151],{"class":2512},"        \u002F\u002F 想要中断程序，需要加return\n",[139,91153,91154],{"class":141,"line":4014},[139,91155,91156],{"class":2512},"        \u002F\u002F return\n",[139,91158,91159],{"class":141,"line":4019},[139,91160,91161],{"class":2512},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[139,91163,91164,91167,91169,91172,91174,91177],{"class":141,"line":4036},[139,91165,91166],{"class":149},"        throw",[139,91168,13851],{"class":149},[139,91170,91171],{"class":781}," Error",[139,91173,157],{"class":145},[139,91175,91176],{"class":160},"'你看看，选择器错误了吧'",[139,91178,164],{"class":145},[139,91180,91181],{"class":141,"line":4041},[139,91182,54633],{"class":145},[139,91184,91185],{"class":141,"line":4046},[139,91186,91187],{"class":2512},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[139,91189,91190,91193],{"class":141,"line":4051},[139,91191,91192],{"class":149},"      finally",[139,91194,17840],{"class":145},[139,91196,91197,91200,91202,91205],{"class":141,"line":4065},[139,91198,91199],{"class":781},"        alert",[139,91201,157],{"class":145},[139,91203,91204],{"class":160},"'弹出对话框'",[139,91206,164],{"class":145},[139,91208,91209],{"class":141,"line":4070},[139,91210,54633],{"class":145},[139,91212,91213,91215,91217,91219,91221],{"class":141,"line":4860},[139,91214,60477],{"class":145},[139,91216,60480],{"class":781},[139,91218,157],{"class":145},[139,91220,2909],{"class":153},[139,91222,164],{"class":145},[139,91224,91225],{"class":141,"line":4874},[139,91226,843],{"emptyLinePlaceholder":842},[139,91228,91229],{"class":141,"line":4882},[139,91230,4472],{"class":145},[139,91232,91233],{"class":141,"line":4887},[139,91234,91235],{"class":2512},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[139,91237,91238],{"class":141,"line":4893},[139,91239,91240],{"class":2512},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[139,91242,91243,91246],{"class":141,"line":4899},[139,91244,91245],{"class":781},"    fn",[139,91247,4262],{"class":145},[139,91249,91250,91252,91254],{"class":141,"line":4904},[139,91251,54652],{"class":145},[139,91253,54050],{"class":53538},[139,91255,53545],{"class":145},[139,91257,91258,91260,91262],{"class":141,"line":10222},[139,91259,54022],{"class":145},[139,91261,54037],{"class":53538},[139,91263,53545],{"class":145},[139,91265,91266],{"class":141,"line":10246},[139,91267,843],{"emptyLinePlaceholder":842},[139,91269,91270,91272,91274],{"class":141,"line":10251},[139,91271,54022],{"class":145},[139,91273,52873],{"class":53538},[139,91275,53545],{"class":145},[19,91277,91278],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1760,91280,91281],{"start":254},[1763,91282,91283],{},"debugger",[19,91285,91286],{},[3760,91287],{"alt":135,"src":91288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91290,91291],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91293,91295],{"id":91294},"_416-处理this","4.16 处理this",[1217,91297,91299],{"id":91298},"_4161-this的指向","4.16.1 this的指向",[1760,91301,91302],{},[1763,91303,91304],{},"普通函数的this",[19,91306,91307],{},[3760,91308],{"alt":135,"src":91309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1760,91311,91312],{"start":210},[1763,91313,91314],{},"箭头函数的this",[19,91316,91317],{},[3760,91318],{"alt":135,"src":91319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91321,91322],{},[3760,91323],{"alt":135,"src":91324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91326,91327],{},[3760,91328],{"alt":135,"src":91329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1217,91331,91333],{"id":91332},"_4162-this的改变","4.16.2 this的改变",[19,91335,91336],{},"call() apply() bind()",[1760,91338,91339],{},[1763,91340,91341],{},"call()",[19,91343,91344],{},[3760,91345],{"alt":135,"src":91346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91348,91349],{},"两个作用：①调用函数；②改变this指向",[130,91351,91353],{"className":55302,"code":91352,"language":55304,"meta":135,"style":135},"\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",[50,91354,91355,91363,91371,91375,91380,91384,91389,91394,91399,91403,91408,91416],{"__ignoreMap":135},[139,91356,91357,91359,91361],{"class":141,"line":142},[139,91358,796],{"class":145},[139,91360,54037],{"class":53538},[139,91362,53545],{"class":145},[139,91364,91365,91367,91369],{"class":141,"line":210},[139,91366,54380],{"class":145},[139,91368,54050],{"class":53538},[139,91370,53545],{"class":145},[139,91372,91373],{"class":141,"line":254},[139,91374,73752],{"class":145},[139,91376,91377],{"class":141,"line":262},[139,91378,91379],{"class":145},"      uname: 'pink'\n",[139,91381,91382],{"class":141,"line":313},[139,91383,4472],{"class":145},[139,91385,91386],{"class":141,"line":462},[139,91387,91388],{"class":145},"    function fn(x, y) {\n",[139,91390,91391],{"class":141,"line":474},[139,91392,91393],{"class":145},"      console.log(this)  \u002F\u002Fwindow\n",[139,91395,91396],{"class":141,"line":484},[139,91397,91398],{"class":145},"      console.log(x + y)\n",[139,91400,91401],{"class":141,"line":989},[139,91402,4472],{"class":145},[139,91404,91405],{"class":141,"line":994},[139,91406,91407],{"class":145},"    fn.call(obj, 1, 2)\n",[139,91409,91410,91412,91414],{"class":141,"line":999},[139,91411,54652],{"class":145},[139,91413,54050],{"class":53538},[139,91415,53545],{"class":145},[139,91417,91418,91420,91422],{"class":141,"line":1006},[139,91419,54022],{"class":145},[139,91421,54037],{"class":53538},[139,91423,53545],{"class":145},[19,91425,91426],{},[3760,91427],{"alt":135,"src":91428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1760,91430,91431],{"start":210},[1763,91432,91433],{},"apply()",[19,91435,91436],{},[3760,91437],{"alt":135,"src":91438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91440,91349],{},[19,91442,91443],{},"call传递的是普通参数，而apply必须传递的是数组",[130,91445,91447],{"className":52871,"code":91446,"language":52873,"meta":135,"style":135},"\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",[50,91448,91449,91459,91473,91477,91485,91499,91519,91531,91539,91543,91551,91559,91569,91576,91580,91585,91601,91613,91627,91631,91636,91655,91660,91664,91669,91674,91682,91687,91709,91714,91730,91746,91758,91762,91767,91786,91794,91802,91806],{"__ignoreMap":135},[139,91450,91451,91453,91455,91457],{"class":141,"line":142},[139,91452,53535],{"class":145},[139,91454,53539],{"class":53538},[139,91456,53542],{"class":781},[139,91458,53545],{"class":145},[139,91460,91461,91463,91465,91467,91469,91471],{"class":141,"line":210},[139,91462,796],{"class":145},[139,91464,52873],{"class":53538},[139,91466,53554],{"class":781},[139,91468,150],{"class":145},[139,91470,53559],{"class":160},[139,91472,53545],{"class":145},[139,91474,91475],{"class":141,"line":254},[139,91476,843],{"emptyLinePlaceholder":842},[139,91478,91479,91481,91483],{"class":141,"line":262},[139,91480,796],{"class":145},[139,91482,53572],{"class":53538},[139,91484,53545],{"class":145},[139,91486,91487,91489,91491,91493,91495,91497],{"class":141,"line":313},[139,91488,54380],{"class":145},[139,91490,53582],{"class":53538},[139,91492,53585],{"class":781},[139,91494,150],{"class":145},[139,91496,53590],{"class":160},[139,91498,53545],{"class":145},[139,91500,91501,91503,91505,91507,91509,91511,91513,91515,91517],{"class":141,"line":462},[139,91502,54380],{"class":145},[139,91504,53582],{"class":53538},[139,91506,17189],{"class":781},[139,91508,150],{"class":145},[139,91510,53629],{"class":160},[139,91512,53609],{"class":781},[139,91514,150],{"class":145},[139,91516,53636],{"class":160},[139,91518,53545],{"class":145},[139,91520,91521,91523,91525,91527,91529],{"class":141,"line":474},[139,91522,54380],{"class":145},[139,91524,53645],{"class":53538},[139,91526,53648],{"class":145},[139,91528,53645],{"class":53538},[139,91530,53545],{"class":145},[139,91532,91533,91535,91537],{"class":141,"line":484},[139,91534,54022],{"class":145},[139,91536,53572],{"class":53538},[139,91538,53545],{"class":145},[139,91540,91541],{"class":141,"line":989},[139,91542,843],{"emptyLinePlaceholder":842},[139,91544,91545,91547,91549],{"class":141,"line":994},[139,91546,796],{"class":145},[139,91548,54037],{"class":53538},[139,91550,53545],{"class":145},[139,91552,91553,91555,91557],{"class":141,"line":999},[139,91554,54380],{"class":145},[139,91556,54050],{"class":53538},[139,91558,53545],{"class":145},[139,91560,91561,91563,91565,91567],{"class":141,"line":1006},[139,91562,13494],{"class":149},[139,91564,72201],{"class":153},[139,91566,15836],{"class":149},[139,91568,17840],{"class":145},[139,91570,91571,91573],{"class":141,"line":1027},[139,91572,73855],{"class":145},[139,91574,91575],{"class":153},"18\n",[139,91577,91578],{"class":141,"line":1040},[139,91579,4472],{"class":145},[139,91581,91582],{"class":141,"line":2160},[139,91583,91584],{"class":2512},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[139,91586,91587,91589,91591,91593,91595,91597,91599],{"class":141,"line":2188},[139,91588,72314],{"class":149},[139,91590,91078],{"class":781},[139,91592,157],{"class":145},[139,91594,3255],{"class":2111},[139,91596,413],{"class":145},[139,91598,3280],{"class":2111},[139,91600,14714],{"class":145},[139,91602,91603,91605,91607,91609,91611],{"class":141,"line":3944},[139,91604,60477],{"class":145},[139,91606,60480],{"class":781},[139,91608,157],{"class":145},[139,91610,89221],{"class":153},[139,91612,164],{"class":145},[139,91614,91615,91617,91619,91622,91624],{"class":141,"line":3963},[139,91616,60477],{"class":145},[139,91618,60480],{"class":781},[139,91620,91621],{"class":145},"(x ",[139,91623,1147],{"class":149},[139,91625,91626],{"class":145}," y)\n",[139,91628,91629],{"class":141,"line":3968},[139,91630,4472],{"class":145},[139,91632,91633],{"class":141,"line":3982},[139,91634,91635],{"class":2512},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[139,91637,91638,91641,91644,91647,91649,91651,91653],{"class":141,"line":3987},[139,91639,91640],{"class":145},"    fn.",[139,91642,91643],{"class":781},"apply",[139,91645,91646],{"class":145},"(obj, [",[139,91648,410],{"class":153},[139,91650,413],{"class":145},[139,91652,416],{"class":153},[139,91654,6935],{"class":145},[139,91656,91657],{"class":141,"line":4014},[139,91658,91659],{"class":2512},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[139,91661,91662],{"class":141,"line":4019},[139,91663,843],{"emptyLinePlaceholder":842},[139,91665,91666],{"class":141,"line":4036},[139,91667,91668],{"class":2512},"    \u002F\u002F 使用场景：求数组最大值\n",[139,91670,91671],{"class":141,"line":4041},[139,91672,91673],{"class":2512},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[139,91675,91676,91679],{"class":141,"line":4046},[139,91677,91678],{"class":2512},"    \u002F\u002F console.log(max)",[139,91680,91681],{"class":2512},"   \u002F\u002F3\n",[139,91683,91684],{"class":141,"line":4051},[139,91685,91686],{"class":2512},"    \u002F\u002F 指向空或者Math都是可以的\n",[139,91688,91689,91691,91693,91695,91697,91699,91701,91703,91705,91707],{"class":141,"line":4065},[139,91690,13494],{"class":149},[139,91692,59929],{"class":153},[139,91694,15836],{"class":149},[139,91696,407],{"class":145},[139,91698,1017],{"class":153},[139,91700,413],{"class":145},[139,91702,2940],{"class":153},[139,91704,413],{"class":145},[139,91706,2970],{"class":153},[139,91708,424],{"class":145},[139,91710,91711],{"class":141,"line":4070},[139,91712,91713],{"class":2512},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[139,91715,91716,91718,91720,91722,91725,91727],{"class":141,"line":4860},[139,91717,13494],{"class":149},[139,91719,8225],{"class":153},[139,91721,15836],{"class":149},[139,91723,91724],{"class":145}," Math.max.",[139,91726,91643],{"class":781},[139,91728,91729],{"class":145},"(Math, arr)\n",[139,91731,91732,91734,91737,91739,91742,91744],{"class":141,"line":4874},[139,91733,13494],{"class":149},[139,91735,91736],{"class":153}," min",[139,91738,15836],{"class":149},[139,91740,91741],{"class":145}," Math.min.",[139,91743,91643],{"class":781},[139,91745,91729],{"class":145},[139,91747,91748,91750,91752,91755],{"class":141,"line":4882},[139,91749,75982],{"class":145},[139,91751,60480],{"class":781},[139,91753,91754],{"class":145},"(max, min)     ",[139,91756,91757],{"class":2512},"\u002F\u002F100,4\n",[139,91759,91760],{"class":141,"line":4887},[139,91761,843],{"emptyLinePlaceholder":842},[139,91763,91764],{"class":141,"line":4893},[139,91765,91766],{"class":2512},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[139,91768,91769,91771,91773,91776,91778,91780,91783],{"class":141,"line":4899},[139,91770,75982],{"class":145},[139,91772,60480],{"class":781},[139,91774,91775],{"class":145},"(Max.",[139,91777,8289],{"class":781},[139,91779,157],{"class":145},[139,91781,91782],{"class":149},"...",[139,91784,91785],{"class":145},"arr))\n",[139,91787,91788,91790,91792],{"class":141,"line":4904},[139,91789,54652],{"class":145},[139,91791,54050],{"class":53538},[139,91793,53545],{"class":145},[139,91795,91796,91798,91800],{"class":141,"line":10222},[139,91797,54022],{"class":145},[139,91799,54037],{"class":53538},[139,91801,53545],{"class":145},[139,91803,91804],{"class":141,"line":10246},[139,91805,843],{"emptyLinePlaceholder":842},[139,91807,91808,91810,91812],{"class":141,"line":10251},[139,91809,54022],{"class":145},[139,91811,52873],{"class":53538},[139,91813,53545],{"class":145},[19,91815,91816],{},[3760,91817],{"alt":135,"src":91818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1760,91820,91821],{"start":254},[1763,91822,91823],{},"bind()",[19,91825,91826],{},[3760,91827],{"alt":135,"src":91828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91830,91831],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91833,91834],{},"bind的语法跟call很相似",[130,91836,91838],{"className":55302,"code":91837,"language":55304,"meta":135,"style":135},"\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",[50,91839,91840,91848,91856,91860,91865,91869,91873,91878,91882,91887,91892,91897,91902,91907,91912,91917,91921,91929],{"__ignoreMap":135},[139,91841,91842,91844,91846],{"class":141,"line":142},[139,91843,796],{"class":145},[139,91845,54037],{"class":53538},[139,91847,53545],{"class":145},[139,91849,91850,91852,91854],{"class":141,"line":210},[139,91851,54380],{"class":145},[139,91853,54050],{"class":53538},[139,91855,53545],{"class":145},[139,91857,91858],{"class":141,"line":254},[139,91859,73752],{"class":145},[139,91861,91862],{"class":141,"line":262},[139,91863,91864],{"class":145},"      age: 18\n",[139,91866,91867],{"class":141,"line":313},[139,91868,4472],{"class":145},[139,91870,91871],{"class":141,"line":462},[139,91872,79372],{"class":145},[139,91874,91875],{"class":141,"line":474},[139,91876,91877],{"class":145},"      console.log(this)\n",[139,91879,91880],{"class":141,"line":484},[139,91881,4472],{"class":145},[139,91883,91884],{"class":141,"line":989},[139,91885,91886],{"class":145},"    \u002F\u002F 1.bind 不会调用函数\n",[139,91888,91889],{"class":141,"line":994},[139,91890,91891],{"class":145},"    \u002F\u002F 2.bind能改变this的指向\n",[139,91893,91894],{"class":141,"line":999},[139,91895,91896],{"class":145},"    fn.bind()\n",[139,91898,91899],{"class":141,"line":1006},[139,91900,91901],{"class":145},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[139,91903,91904],{"class":141,"line":1027},[139,91905,91906],{"class":145},"    const fun = fn.bind(obj)\n",[139,91908,91909],{"class":141,"line":1040},[139,91910,91911],{"class":145},"    \u002F\u002F console.log(fun)\n",[139,91913,91914],{"class":141,"line":2160},[139,91915,91916],{"class":145},"    \u002F\u002F 调用,查看this的指向\n",[139,91918,91919],{"class":141,"line":2188},[139,91920,54886],{"class":145},[139,91922,91923,91925,91927],{"class":141,"line":3944},[139,91924,54652],{"class":145},[139,91926,54050],{"class":53538},[139,91928,53545],{"class":145},[139,91930,91931,91933,91935],{"class":141,"line":3963},[139,91932,54022],{"class":145},[139,91934,54037],{"class":53538},[139,91936,53545],{"class":145},[19,91938,91939],{},[3760,91940],{"alt":135,"src":91941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1760,91943,91944],{"start":262},[1763,91945,91946],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[130,91948,91950],{"className":55302,"code":91949,"language":55304,"meta":135,"style":135},"\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",[50,91951,91952,91960,91973,91981,91986,91990,91995,92000,92005,92010,92015,92020,92025,92030,92034,92042],{"__ignoreMap":135},[139,91953,91954,91956,91958],{"class":141,"line":142},[139,91955,796],{"class":145},[139,91957,54037],{"class":53538},[139,91959,53545],{"class":145},[139,91961,91962,91964,91966,91969,91971],{"class":141,"line":210},[139,91963,54380],{"class":145},[139,91965,56121],{"class":53538},[139,91967,91968],{"class":145},">禁用\u003C\u002F",[139,91970,56121],{"class":53538},[139,91972,53545],{"class":145},[139,91974,91975,91977,91979],{"class":141,"line":254},[139,91976,54380],{"class":145},[139,91978,54050],{"class":53538},[139,91980,53545],{"class":145},[139,91982,91983],{"class":141,"line":262},[139,91984,91985],{"class":145},"    const btn = document.querySelector('button')\n",[139,91987,91988],{"class":141,"line":313},[139,91989,61249],{"class":145},[139,91991,91992],{"class":141,"line":462},[139,91993,91994],{"class":145},"      this.disabled = true\n",[139,91996,91997],{"class":141,"line":474},[139,91998,91999],{"class":145},"      \u002F\u002F 定时器是window进行调用的\n",[139,92001,92002],{"class":141,"line":484},[139,92003,92004],{"class":145},"      setTimeout(function () {\n",[139,92006,92007],{"class":141,"line":989},[139,92008,92009],{"class":145},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[139,92011,92012],{"class":141,"line":994},[139,92013,92014],{"class":145},"        this.disabled = false\n",[139,92016,92017],{"class":141,"line":999},[139,92018,92019],{"class":145},"      }.bind(this), 2000)\n",[139,92021,92022],{"class":141,"line":1006},[139,92023,92024],{"class":145},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[139,92026,92027],{"class":141,"line":1027},[139,92028,92029],{"class":145},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[139,92031,92032],{"class":141,"line":1040},[139,92033,35706],{"class":145},[139,92035,92036,92038,92040],{"class":141,"line":2160},[139,92037,54652],{"class":145},[139,92039,54050],{"class":53538},[139,92041,53545],{"class":145},[139,92043,92044,92046,92048],{"class":141,"line":2188},[139,92045,54022],{"class":145},[139,92047,54037],{"class":53538},[139,92049,53545],{"class":145},[1760,92051,92052],{"start":313},[1763,92053,24220],{},[19,92055,92056],{},[3760,92057],{"alt":135,"src":92058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92060,92062],{"id":92061},"_417-性能优化","4.17 性能优化",[1217,92064,92066],{"id":92065},"_4171-防抖","4.17.1 防抖",[19,92068,92069],{},[3760,92070],{"alt":135,"src":92071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92073,92074],{},[1674,92075,92076],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92078,92079],{},"防抖实现方式：",[3437,92081,92082],{},[1763,92083,92084],{},"lodash 提供了防抖处理",[19,92086,92087],{},"_.debounce(func,[wait=0],[options={}])",[19,92089,92090],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[130,92092,92094],{"className":52871,"code":92093,"language":52873,"meta":135,"style":135},"\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",[50,92095,92096,92106,92120,92124,92132,92146,92166,92178,92186,92192,92202,92214,92226,92237,92249,92259,92269,92282,92286,92294,92302,92306,92314,92332,92350,92358,92377,92387,92396,92407,92412,92416,92421,92426,92431,92456,92464,92472,92476],{"__ignoreMap":135},[139,92097,92098,92100,92102,92104],{"class":141,"line":142},[139,92099,53535],{"class":145},[139,92101,53539],{"class":53538},[139,92103,53542],{"class":781},[139,92105,53545],{"class":145},[139,92107,92108,92110,92112,92114,92116,92118],{"class":141,"line":210},[139,92109,796],{"class":145},[139,92111,52873],{"class":53538},[139,92113,53554],{"class":781},[139,92115,150],{"class":145},[139,92117,53559],{"class":160},[139,92119,53545],{"class":145},[139,92121,92122],{"class":141,"line":254},[139,92123,843],{"emptyLinePlaceholder":842},[139,92125,92126,92128,92130],{"class":141,"line":262},[139,92127,796],{"class":145},[139,92129,53572],{"class":53538},[139,92131,53545],{"class":145},[139,92133,92134,92136,92138,92140,92142,92144],{"class":141,"line":313},[139,92135,54380],{"class":145},[139,92137,53582],{"class":53538},[139,92139,53585],{"class":781},[139,92141,150],{"class":145},[139,92143,53590],{"class":160},[139,92145,53545],{"class":145},[139,92147,92148,92150,92152,92154,92156,92158,92160,92162,92164],{"class":141,"line":462},[139,92149,54380],{"class":145},[139,92151,53582],{"class":53538},[139,92153,17189],{"class":781},[139,92155,150],{"class":145},[139,92157,53629],{"class":160},[139,92159,53609],{"class":781},[139,92161,150],{"class":145},[139,92163,53636],{"class":160},[139,92165,53545],{"class":145},[139,92167,92168,92170,92172,92174,92176],{"class":141,"line":474},[139,92169,54380],{"class":145},[139,92171,53645],{"class":53538},[139,92173,53648],{"class":145},[139,92175,53645],{"class":53538},[139,92177,53545],{"class":145},[139,92179,92180,92182,92184],{"class":141,"line":484},[139,92181,54380],{"class":145},[139,92183,2348],{"class":53538},[139,92185,53545],{"class":145},[139,92187,92188,92190],{"class":141,"line":989},[139,92189,56986],{"class":781},[139,92191,17840],{"class":145},[139,92193,92194,92196,92198,92200],{"class":141,"line":994},[139,92195,74825],{"class":153},[139,92197,2265],{"class":145},[139,92199,62738],{"class":153},[139,92201,3591],{"class":145},[139,92203,92204,92206,92208,92210,92212],{"class":141,"line":999},[139,92205,57005],{"class":153},[139,92207,2265],{"class":145},[139,92209,1022],{"class":153},[139,92211,53729],{"class":149},[139,92213,3591],{"class":145},[139,92215,92216,92218,92220,92222,92224],{"class":141,"line":1006},[139,92217,57019],{"class":153},[139,92219,2265],{"class":145},[139,92221,1022],{"class":153},[139,92223,53729],{"class":149},[139,92225,3591],{"class":145},[139,92227,92228,92230,92232,92235],{"class":141,"line":1027},[139,92229,57118],{"class":153},[139,92231,2265],{"class":145},[139,92233,92234],{"class":153},"gray",[139,92236,3591],{"class":145},[139,92238,92239,92241,92243,92245,92247],{"class":141,"line":1040},[139,92240,57156],{"class":153},[139,92242,2265],{"class":145},[139,92244,3260],{"class":153},[139,92246,53729],{"class":149},[139,92248,3591],{"class":145},[139,92250,92251,92253,92255,92257],{"class":141,"line":2160},[139,92252,59650],{"class":153},[139,92254,2265],{"class":145},[139,92256,63075],{"class":153},[139,92258,3591],{"class":145},[139,92260,92261,92263,92265,92267],{"class":141,"line":2188},[139,92262,59520],{"class":153},[139,92264,2265],{"class":145},[139,92266,53829],{"class":153},[139,92268,3591],{"class":145},[139,92270,92271,92274,92276,92278,92280],{"class":141,"line":3944},[139,92272,92273],{"class":153},"      padding-top",[139,92275,2265],{"class":145},[139,92277,1481],{"class":153},[139,92279,53729],{"class":149},[139,92281,3591],{"class":145},[139,92283,92284],{"class":141,"line":3963},[139,92285,4472],{"class":145},[139,92287,92288,92290,92292],{"class":141,"line":3968},[139,92289,54652],{"class":145},[139,92291,2348],{"class":53538},[139,92293,53545],{"class":145},[139,92295,92296,92298,92300],{"class":141,"line":3982},[139,92297,54022],{"class":145},[139,92299,53572],{"class":53538},[139,92301,53545],{"class":145},[139,92303,92304],{"class":141,"line":3987},[139,92305,843],{"emptyLinePlaceholder":842},[139,92307,92308,92310,92312],{"class":141,"line":4014},[139,92309,796],{"class":145},[139,92311,54037],{"class":53538},[139,92313,53545],{"class":145},[139,92315,92316,92318,92320,92322,92324,92326,92328,92330],{"class":141,"line":4019},[139,92317,54380],{"class":145},[139,92319,53848],{"class":53538},[139,92321,55721],{"class":781},[139,92323,150],{"class":145},[139,92325,55726],{"class":160},[139,92327,57548],{"class":145},[139,92329,53848],{"class":53538},[139,92331,53545],{"class":145},[139,92333,92334,92336,92338,92340,92342,92344,92346,92348],{"class":141,"line":4036},[139,92335,54380],{"class":145},[139,92337,54050],{"class":53538},[139,92339,57473],{"class":781},[139,92341,150],{"class":145},[139,92343,90502],{"class":160},[139,92345,57548],{"class":145},[139,92347,54050],{"class":53538},[139,92349,53545],{"class":145},[139,92351,92352,92354,92356],{"class":141,"line":4041},[139,92353,54380],{"class":145},[139,92355,54050],{"class":53538},[139,92357,53545],{"class":145},[139,92359,92360,92362,92364,92366,92368,92370,92372,92375],{"class":141,"line":4046},[139,92361,13494],{"class":149},[139,92363,89161],{"class":153},[139,92365,15836],{"class":149},[139,92367,56630],{"class":145},[139,92369,56633],{"class":781},[139,92371,157],{"class":145},[139,92373,92374],{"class":160},"'.box'",[139,92376,164],{"class":145},[139,92378,92379,92381,92383,92385],{"class":141,"line":4051},[139,92380,54455],{"class":149},[139,92382,11712],{"class":145},[139,92384,150],{"class":149},[139,92386,49571],{"class":153},[139,92388,92389,92391,92394],{"class":141,"line":4065},[139,92390,72314],{"class":149},[139,92392,92393],{"class":781}," mouseMove",[139,92395,13127],{"class":145},[139,92397,92398,92401,92403,92405],{"class":141,"line":4070},[139,92399,92400],{"class":145},"      box.innerHTML ",[139,92402,150],{"class":149},[139,92404,5314],{"class":145},[139,92406,4985],{"class":149},[139,92408,92409],{"class":141,"line":4860},[139,92410,92411],{"class":2512},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[139,92413,92414],{"class":141,"line":4874},[139,92415,4472],{"class":145},[139,92417,92418],{"class":141,"line":4882},[139,92419,92420],{"class":2512},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[139,92422,92423],{"class":141,"line":4887},[139,92424,92425],{"class":2512},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[139,92427,92428],{"class":141,"line":4893},[139,92429,92430],{"class":2512},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[139,92432,92433,92436,92438,92440,92443,92446,92449,92452,92454],{"class":141,"line":4899},[139,92434,92435],{"class":145},"    box.",[139,92437,60046],{"class":781},[139,92439,157],{"class":145},[139,92441,92442],{"class":160},"'mousemove'",[139,92444,92445],{"class":145},", _.",[139,92447,92448],{"class":781},"debounce",[139,92450,92451],{"class":145},"(mouseMove, ",[139,92453,67305],{"class":153},[139,92455,207],{"class":145},[139,92457,92458,92460,92462],{"class":141,"line":4904},[139,92459,54652],{"class":145},[139,92461,54050],{"class":53538},[139,92463,53545],{"class":145},[139,92465,92466,92468,92470],{"class":141,"line":10222},[139,92467,54022],{"class":145},[139,92469,54037],{"class":53538},[139,92471,53545],{"class":145},[139,92473,92474],{"class":141,"line":10246},[139,92475,843],{"emptyLinePlaceholder":842},[139,92477,92478,92480,92482],{"class":141,"line":10251},[139,92479,54022],{"class":145},[139,92481,52873],{"class":53538},[139,92483,53545],{"class":145},[3437,92485,92486],{},[1763,92487,92488],{},"手写一个防抖函数来处理",[19,92490,92491],{},"防抖的核心就是利用定时器来实现的：",[19,92493,92494],{},"①声明一个定时器变量",[19,92496,92497],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92499,92500],{},"③如果没有定时器则开启定时器，记得存到变量里面",[130,92502,92504],{"className":52871,"code":92503,"language":52873,"meta":135,"style":135},"\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",[50,92505,92506,92516,92530,92534,92542,92556,92576,92588,92596,92602,92612,92624,92636,92646,92658,92668,92678,92690,92694,92702,92710,92714,92722,92740,92758,92766,92784,92794,92802,92812,92816,92820,92824,92829,92834,92839,92844,92849,92854,92872,92879,92884,92892,92897,92910,92926,92936,92941,92945,92949,92969,92973,92978,92983,92988,92993,93001,93009,93013],{"__ignoreMap":135},[139,92507,92508,92510,92512,92514],{"class":141,"line":142},[139,92509,53535],{"class":145},[139,92511,53539],{"class":53538},[139,92513,53542],{"class":781},[139,92515,53545],{"class":145},[139,92517,92518,92520,92522,92524,92526,92528],{"class":141,"line":210},[139,92519,796],{"class":145},[139,92521,52873],{"class":53538},[139,92523,53554],{"class":781},[139,92525,150],{"class":145},[139,92527,53559],{"class":160},[139,92529,53545],{"class":145},[139,92531,92532],{"class":141,"line":254},[139,92533,843],{"emptyLinePlaceholder":842},[139,92535,92536,92538,92540],{"class":141,"line":262},[139,92537,796],{"class":145},[139,92539,53572],{"class":53538},[139,92541,53545],{"class":145},[139,92543,92544,92546,92548,92550,92552,92554],{"class":141,"line":313},[139,92545,54380],{"class":145},[139,92547,53582],{"class":53538},[139,92549,53585],{"class":781},[139,92551,150],{"class":145},[139,92553,53590],{"class":160},[139,92555,53545],{"class":145},[139,92557,92558,92560,92562,92564,92566,92568,92570,92572,92574],{"class":141,"line":462},[139,92559,54380],{"class":145},[139,92561,53582],{"class":53538},[139,92563,17189],{"class":781},[139,92565,150],{"class":145},[139,92567,53629],{"class":160},[139,92569,53609],{"class":781},[139,92571,150],{"class":145},[139,92573,53636],{"class":160},[139,92575,53545],{"class":145},[139,92577,92578,92580,92582,92584,92586],{"class":141,"line":474},[139,92579,54380],{"class":145},[139,92581,53645],{"class":53538},[139,92583,53648],{"class":145},[139,92585,53645],{"class":53538},[139,92587,53545],{"class":145},[139,92589,92590,92592,92594],{"class":141,"line":484},[139,92591,54380],{"class":145},[139,92593,2348],{"class":53538},[139,92595,53545],{"class":145},[139,92597,92598,92600],{"class":141,"line":989},[139,92599,56986],{"class":781},[139,92601,17840],{"class":145},[139,92603,92604,92606,92608,92610],{"class":141,"line":994},[139,92605,74825],{"class":153},[139,92607,2265],{"class":145},[139,92609,62738],{"class":153},[139,92611,3591],{"class":145},[139,92613,92614,92616,92618,92620,92622],{"class":141,"line":999},[139,92615,57005],{"class":153},[139,92617,2265],{"class":145},[139,92619,1022],{"class":153},[139,92621,53729],{"class":149},[139,92623,3591],{"class":145},[139,92625,92626,92628,92630,92632,92634],{"class":141,"line":1006},[139,92627,57019],{"class":153},[139,92629,2265],{"class":145},[139,92631,1022],{"class":153},[139,92633,53729],{"class":149},[139,92635,3591],{"class":145},[139,92637,92638,92640,92642,92644],{"class":141,"line":1027},[139,92639,57118],{"class":153},[139,92641,2265],{"class":145},[139,92643,92234],{"class":153},[139,92645,3591],{"class":145},[139,92647,92648,92650,92652,92654,92656],{"class":141,"line":1040},[139,92649,57156],{"class":153},[139,92651,2265],{"class":145},[139,92653,3260],{"class":153},[139,92655,53729],{"class":149},[139,92657,3591],{"class":145},[139,92659,92660,92662,92664,92666],{"class":141,"line":2160},[139,92661,59650],{"class":153},[139,92663,2265],{"class":145},[139,92665,63075],{"class":153},[139,92667,3591],{"class":145},[139,92669,92670,92672,92674,92676],{"class":141,"line":2188},[139,92671,59520],{"class":153},[139,92673,2265],{"class":145},[139,92675,53829],{"class":153},[139,92677,3591],{"class":145},[139,92679,92680,92682,92684,92686,92688],{"class":141,"line":3944},[139,92681,92273],{"class":153},[139,92683,2265],{"class":145},[139,92685,1481],{"class":153},[139,92687,53729],{"class":149},[139,92689,3591],{"class":145},[139,92691,92692],{"class":141,"line":3963},[139,92693,4472],{"class":145},[139,92695,92696,92698,92700],{"class":141,"line":3968},[139,92697,54652],{"class":145},[139,92699,2348],{"class":53538},[139,92701,53545],{"class":145},[139,92703,92704,92706,92708],{"class":141,"line":3982},[139,92705,54022],{"class":145},[139,92707,53572],{"class":53538},[139,92709,53545],{"class":145},[139,92711,92712],{"class":141,"line":3987},[139,92713,843],{"emptyLinePlaceholder":842},[139,92715,92716,92718,92720],{"class":141,"line":4014},[139,92717,796],{"class":145},[139,92719,54037],{"class":53538},[139,92721,53545],{"class":145},[139,92723,92724,92726,92728,92730,92732,92734,92736,92738],{"class":141,"line":4019},[139,92725,54380],{"class":145},[139,92727,53848],{"class":53538},[139,92729,55721],{"class":781},[139,92731,150],{"class":145},[139,92733,55726],{"class":160},[139,92735,57548],{"class":145},[139,92737,53848],{"class":53538},[139,92739,53545],{"class":145},[139,92741,92742,92744,92746,92748,92750,92752,92754,92756],{"class":141,"line":4036},[139,92743,54380],{"class":145},[139,92745,54050],{"class":53538},[139,92747,57473],{"class":781},[139,92749,150],{"class":145},[139,92751,90502],{"class":160},[139,92753,57548],{"class":145},[139,92755,54050],{"class":53538},[139,92757,53545],{"class":145},[139,92759,92760,92762,92764],{"class":141,"line":4041},[139,92761,54380],{"class":145},[139,92763,54050],{"class":53538},[139,92765,53545],{"class":145},[139,92767,92768,92770,92772,92774,92776,92778,92780,92782],{"class":141,"line":4046},[139,92769,13494],{"class":149},[139,92771,89161],{"class":153},[139,92773,15836],{"class":149},[139,92775,56630],{"class":145},[139,92777,56633],{"class":781},[139,92779,157],{"class":145},[139,92781,92374],{"class":160},[139,92783,164],{"class":145},[139,92785,92786,92788,92790,92792],{"class":141,"line":4051},[139,92787,54455],{"class":149},[139,92789,11712],{"class":145},[139,92791,150],{"class":149},[139,92793,49571],{"class":153},[139,92795,92796,92798,92800],{"class":141,"line":4065},[139,92797,72314],{"class":149},[139,92799,92393],{"class":781},[139,92801,13127],{"class":145},[139,92803,92804,92806,92808,92810],{"class":141,"line":4070},[139,92805,92400],{"class":145},[139,92807,150],{"class":149},[139,92809,5314],{"class":145},[139,92811,4985],{"class":149},[139,92813,92814],{"class":141,"line":4860},[139,92815,92411],{"class":2512},[139,92817,92818],{"class":141,"line":4874},[139,92819,4472],{"class":145},[139,92821,92822],{"class":141,"line":4882},[139,92823,92420],{"class":2512},[139,92825,92826],{"class":141,"line":4887},[139,92827,92828],{"class":2512},"    \u002F\u002F 手写防抖函数\n",[139,92830,92831],{"class":141,"line":4893},[139,92832,92833],{"class":2512},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[139,92835,92836],{"class":141,"line":4899},[139,92837,92838],{"class":2512},"    \u002F\u002F 1.声明定时器变量\n",[139,92840,92841],{"class":141,"line":4904},[139,92842,92843],{"class":2512},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[139,92845,92846],{"class":141,"line":10222},[139,92847,92848],{"class":2512},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[139,92850,92851],{"class":141,"line":10246},[139,92852,92853],{"class":2512},"    \u002F\u002F 4.定时器里面写函数调用\n",[139,92855,92856,92858,92861,92863,92866,92868,92870],{"class":141,"line":10251},[139,92857,72314],{"class":149},[139,92859,92860],{"class":781}," debounce",[139,92862,157],{"class":145},[139,92864,92865],{"class":2111},"fn",[139,92867,413],{"class":145},[139,92869,3155],{"class":2111},[139,92871,14714],{"class":145},[139,92873,92874,92876],{"class":141,"line":10257},[139,92875,82001],{"class":149},[139,92877,92878],{"class":145}," timer\n",[139,92880,92881],{"class":141,"line":10284},[139,92882,92883],{"class":2512},"      \u002F\u002F return 返回一个匿名函数\n",[139,92885,92886,92888,92890],{"class":141,"line":10289},[139,92887,76211],{"class":149},[139,92889,61151],{"class":149},[139,92891,56686],{"class":145},[139,92893,92894],{"class":141,"line":10295},[139,92895,92896],{"class":2512},"        \u002F\u002F 这里边写第二三四步\n",[139,92898,92899,92901,92904,92907],{"class":141,"line":10307},[139,92900,4780],{"class":149},[139,92902,92903],{"class":145}," (timer) ",[139,92905,92906],{"class":781},"clearTimeout",[139,92908,92909],{"class":145},"(timer)\n",[139,92911,92912,92915,92917,92920,92922,92924],{"class":141,"line":10319},[139,92913,92914],{"class":145},"        timer ",[139,92916,150],{"class":149},[139,92918,92919],{"class":781}," setTimeout",[139,92921,157],{"class":145},[139,92923,56683],{"class":149},[139,92925,56686],{"class":145},[139,92927,92928,92931,92933],{"class":141,"line":10331},[139,92929,92930],{"class":781},"          fn",[139,92932,15322],{"class":145},[139,92934,92935],{"class":2512},"\u002F\u002F加小括号调用fn }, t)\n",[139,92937,92938],{"class":141,"line":11990},[139,92939,92940],{"class":145},"        }, t)\n",[139,92942,92943],{"class":141,"line":12015},[139,92944,54633],{"class":145},[139,92946,92947],{"class":141,"line":12038},[139,92948,4472],{"class":145},[139,92950,92951,92953,92955,92957,92959,92961,92963,92965,92967],{"class":141,"line":12062},[139,92952,92435],{"class":145},[139,92954,60046],{"class":781},[139,92956,157],{"class":145},[139,92958,92442],{"class":160},[139,92960,413],{"class":145},[139,92962,92448],{"class":781},[139,92964,92451],{"class":145},[139,92966,67305],{"class":153},[139,92968,207],{"class":145},[139,92970,92971],{"class":141,"line":12067},[139,92972,843],{"emptyLinePlaceholder":842},[139,92974,92975],{"class":141,"line":12072},[139,92976,92977],{"class":2512},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[139,92979,92980],{"class":141,"line":12077},[139,92981,92982],{"class":2512},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[139,92984,92985],{"class":141,"line":12086},[139,92986,92987],{"class":2512},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[139,92989,92990],{"class":141,"line":12091},[139,92991,92992],{"class":2512},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[139,92994,92995,92997,92999],{"class":141,"line":12097},[139,92996,54652],{"class":145},[139,92998,54050],{"class":53538},[139,93000,53545],{"class":145},[139,93002,93003,93005,93007],{"class":141,"line":12118},[139,93004,54022],{"class":145},[139,93006,54037],{"class":53538},[139,93008,53545],{"class":145},[139,93010,93011],{"class":141,"line":12124},[139,93012,843],{"emptyLinePlaceholder":842},[139,93014,93015,93017,93019],{"class":141,"line":12138},[139,93016,54022],{"class":145},[139,93018,52873],{"class":53538},[139,93020,53545],{"class":145},[1217,93022,93024],{"id":93023},"_4172-节流","4.17.2 节流",[19,93026,93027],{},[3760,93028],{"alt":135,"src":93029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93031,93032],{},[3760,93033],{"alt":135,"src":93034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93036,93037],{},[1674,93038,93039],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93041,93042],{},"实现方式：",[3437,93044,93045],{},[1763,93046,93047],{},"lodash 提供的节流函数来处理",[19,93049,93050],{},"_.throttle(func,[wait=0],[options=])",[19,93052,93053],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[130,93055,93057],{"className":52871,"code":93056,"language":52873,"meta":135,"style":135},"\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",[50,93058,93059,93069,93083,93087,93095,93109,93129,93141,93149,93155,93165,93177,93189,93199,93211,93221,93231,93243,93247,93255,93263,93267,93275,93293,93311,93319,93337,93347,93355,93365,93369,93373,93377,93382,93387,93408,93416,93424,93428],{"__ignoreMap":135},[139,93060,93061,93063,93065,93067],{"class":141,"line":142},[139,93062,53535],{"class":145},[139,93064,53539],{"class":53538},[139,93066,53542],{"class":781},[139,93068,53545],{"class":145},[139,93070,93071,93073,93075,93077,93079,93081],{"class":141,"line":210},[139,93072,796],{"class":145},[139,93074,52873],{"class":53538},[139,93076,53554],{"class":781},[139,93078,150],{"class":145},[139,93080,53559],{"class":160},[139,93082,53545],{"class":145},[139,93084,93085],{"class":141,"line":254},[139,93086,843],{"emptyLinePlaceholder":842},[139,93088,93089,93091,93093],{"class":141,"line":262},[139,93090,796],{"class":145},[139,93092,53572],{"class":53538},[139,93094,53545],{"class":145},[139,93096,93097,93099,93101,93103,93105,93107],{"class":141,"line":313},[139,93098,54380],{"class":145},[139,93100,53582],{"class":53538},[139,93102,53585],{"class":781},[139,93104,150],{"class":145},[139,93106,53590],{"class":160},[139,93108,53545],{"class":145},[139,93110,93111,93113,93115,93117,93119,93121,93123,93125,93127],{"class":141,"line":462},[139,93112,54380],{"class":145},[139,93114,53582],{"class":53538},[139,93116,17189],{"class":781},[139,93118,150],{"class":145},[139,93120,53629],{"class":160},[139,93122,53609],{"class":781},[139,93124,150],{"class":145},[139,93126,53636],{"class":160},[139,93128,53545],{"class":145},[139,93130,93131,93133,93135,93137,93139],{"class":141,"line":474},[139,93132,54380],{"class":145},[139,93134,53645],{"class":53538},[139,93136,53648],{"class":145},[139,93138,53645],{"class":53538},[139,93140,53545],{"class":145},[139,93142,93143,93145,93147],{"class":141,"line":484},[139,93144,54380],{"class":145},[139,93146,2348],{"class":53538},[139,93148,53545],{"class":145},[139,93150,93151,93153],{"class":141,"line":989},[139,93152,56986],{"class":781},[139,93154,17840],{"class":145},[139,93156,93157,93159,93161,93163],{"class":141,"line":994},[139,93158,74825],{"class":153},[139,93160,2265],{"class":145},[139,93162,62738],{"class":153},[139,93164,3591],{"class":145},[139,93166,93167,93169,93171,93173,93175],{"class":141,"line":999},[139,93168,57005],{"class":153},[139,93170,2265],{"class":145},[139,93172,1022],{"class":153},[139,93174,53729],{"class":149},[139,93176,3591],{"class":145},[139,93178,93179,93181,93183,93185,93187],{"class":141,"line":1006},[139,93180,57019],{"class":153},[139,93182,2265],{"class":145},[139,93184,1022],{"class":153},[139,93186,53729],{"class":149},[139,93188,3591],{"class":145},[139,93190,93191,93193,93195,93197],{"class":141,"line":1027},[139,93192,57118],{"class":153},[139,93194,2265],{"class":145},[139,93196,92234],{"class":153},[139,93198,3591],{"class":145},[139,93200,93201,93203,93205,93207,93209],{"class":141,"line":1040},[139,93202,57156],{"class":153},[139,93204,2265],{"class":145},[139,93206,3260],{"class":153},[139,93208,53729],{"class":149},[139,93210,3591],{"class":145},[139,93212,93213,93215,93217,93219],{"class":141,"line":2160},[139,93214,59650],{"class":153},[139,93216,2265],{"class":145},[139,93218,63075],{"class":153},[139,93220,3591],{"class":145},[139,93222,93223,93225,93227,93229],{"class":141,"line":2188},[139,93224,59520],{"class":153},[139,93226,2265],{"class":145},[139,93228,53829],{"class":153},[139,93230,3591],{"class":145},[139,93232,93233,93235,93237,93239,93241],{"class":141,"line":3944},[139,93234,92273],{"class":153},[139,93236,2265],{"class":145},[139,93238,1481],{"class":153},[139,93240,53729],{"class":149},[139,93242,3591],{"class":145},[139,93244,93245],{"class":141,"line":3963},[139,93246,4472],{"class":145},[139,93248,93249,93251,93253],{"class":141,"line":3968},[139,93250,54652],{"class":145},[139,93252,2348],{"class":53538},[139,93254,53545],{"class":145},[139,93256,93257,93259,93261],{"class":141,"line":3982},[139,93258,54022],{"class":145},[139,93260,53572],{"class":53538},[139,93262,53545],{"class":145},[139,93264,93265],{"class":141,"line":3987},[139,93266,843],{"emptyLinePlaceholder":842},[139,93268,93269,93271,93273],{"class":141,"line":4014},[139,93270,796],{"class":145},[139,93272,54037],{"class":53538},[139,93274,53545],{"class":145},[139,93276,93277,93279,93281,93283,93285,93287,93289,93291],{"class":141,"line":4019},[139,93278,54380],{"class":145},[139,93280,53848],{"class":53538},[139,93282,55721],{"class":781},[139,93284,150],{"class":145},[139,93286,55726],{"class":160},[139,93288,57548],{"class":145},[139,93290,53848],{"class":53538},[139,93292,53545],{"class":145},[139,93294,93295,93297,93299,93301,93303,93305,93307,93309],{"class":141,"line":4036},[139,93296,54380],{"class":145},[139,93298,54050],{"class":53538},[139,93300,57473],{"class":781},[139,93302,150],{"class":145},[139,93304,90502],{"class":160},[139,93306,57548],{"class":145},[139,93308,54050],{"class":53538},[139,93310,53545],{"class":145},[139,93312,93313,93315,93317],{"class":141,"line":4041},[139,93314,54380],{"class":145},[139,93316,54050],{"class":53538},[139,93318,53545],{"class":145},[139,93320,93321,93323,93325,93327,93329,93331,93333,93335],{"class":141,"line":4046},[139,93322,13494],{"class":149},[139,93324,89161],{"class":153},[139,93326,15836],{"class":149},[139,93328,56630],{"class":145},[139,93330,56633],{"class":781},[139,93332,157],{"class":145},[139,93334,92374],{"class":160},[139,93336,164],{"class":145},[139,93338,93339,93341,93343,93345],{"class":141,"line":4051},[139,93340,54455],{"class":149},[139,93342,11712],{"class":145},[139,93344,150],{"class":149},[139,93346,49571],{"class":153},[139,93348,93349,93351,93353],{"class":141,"line":4065},[139,93350,72314],{"class":149},[139,93352,92393],{"class":781},[139,93354,13127],{"class":145},[139,93356,93357,93359,93361,93363],{"class":141,"line":4070},[139,93358,92400],{"class":145},[139,93360,150],{"class":149},[139,93362,5314],{"class":145},[139,93364,4985],{"class":149},[139,93366,93367],{"class":141,"line":4860},[139,93368,92411],{"class":2512},[139,93370,93371],{"class":141,"line":4874},[139,93372,4472],{"class":145},[139,93374,93375],{"class":141,"line":4882},[139,93376,92420],{"class":2512},[139,93378,93379],{"class":141,"line":4887},[139,93380,93381],{"class":2512},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[139,93383,93384],{"class":141,"line":4893},[139,93385,93386],{"class":2512},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[139,93388,93389,93391,93393,93395,93397,93399,93402,93404,93406],{"class":141,"line":4899},[139,93390,92435],{"class":145},[139,93392,60046],{"class":781},[139,93394,157],{"class":145},[139,93396,92442],{"class":160},[139,93398,92445],{"class":145},[139,93400,93401],{"class":781},"throttle",[139,93403,92451],{"class":145},[139,93405,67305],{"class":153},[139,93407,207],{"class":145},[139,93409,93410,93412,93414],{"class":141,"line":4904},[139,93411,54652],{"class":145},[139,93413,54050],{"class":53538},[139,93415,53545],{"class":145},[139,93417,93418,93420,93422],{"class":141,"line":10222},[139,93419,54022],{"class":145},[139,93421,54037],{"class":53538},[139,93423,53545],{"class":145},[139,93425,93426],{"class":141,"line":10246},[139,93427,843],{"emptyLinePlaceholder":842},[139,93429,93430,93432,93434],{"class":141,"line":10251},[139,93431,54022],{"class":145},[139,93433,52873],{"class":53538},[139,93435,53545],{"class":145},[3437,93437,93438],{},[1763,93439,93440],{},"手写一个节流函数来处理",[19,93442,73181],{},[19,93444,92494],{},[19,93446,93447],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93449,93450],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[130,93452,93454],{"className":52871,"code":93453,"language":52873,"meta":135,"style":135},"\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",[50,93455,93456,93466,93480,93484,93492,93506,93526,93538,93546,93552,93562,93574,93586,93596,93608,93618,93628,93640,93644,93652,93660,93664,93672,93690,93708,93716,93734,93744,93752,93762,93766,93770,93774,93779,93784,93789,93794,93799,93804,93821,93827,93835,93846,93861,93868,93873,93878,93888,93893,93898,93903,93907,93911,93915,93935,93943,93951,93955],{"__ignoreMap":135},[139,93457,93458,93460,93462,93464],{"class":141,"line":142},[139,93459,53535],{"class":145},[139,93461,53539],{"class":53538},[139,93463,53542],{"class":781},[139,93465,53545],{"class":145},[139,93467,93468,93470,93472,93474,93476,93478],{"class":141,"line":210},[139,93469,796],{"class":145},[139,93471,52873],{"class":53538},[139,93473,53554],{"class":781},[139,93475,150],{"class":145},[139,93477,53559],{"class":160},[139,93479,53545],{"class":145},[139,93481,93482],{"class":141,"line":254},[139,93483,843],{"emptyLinePlaceholder":842},[139,93485,93486,93488,93490],{"class":141,"line":262},[139,93487,796],{"class":145},[139,93489,53572],{"class":53538},[139,93491,53545],{"class":145},[139,93493,93494,93496,93498,93500,93502,93504],{"class":141,"line":313},[139,93495,54380],{"class":145},[139,93497,53582],{"class":53538},[139,93499,53585],{"class":781},[139,93501,150],{"class":145},[139,93503,53590],{"class":160},[139,93505,53545],{"class":145},[139,93507,93508,93510,93512,93514,93516,93518,93520,93522,93524],{"class":141,"line":462},[139,93509,54380],{"class":145},[139,93511,53582],{"class":53538},[139,93513,17189],{"class":781},[139,93515,150],{"class":145},[139,93517,53629],{"class":160},[139,93519,53609],{"class":781},[139,93521,150],{"class":145},[139,93523,53636],{"class":160},[139,93525,53545],{"class":145},[139,93527,93528,93530,93532,93534,93536],{"class":141,"line":474},[139,93529,54380],{"class":145},[139,93531,53645],{"class":53538},[139,93533,53648],{"class":145},[139,93535,53645],{"class":53538},[139,93537,53545],{"class":145},[139,93539,93540,93542,93544],{"class":141,"line":484},[139,93541,54380],{"class":145},[139,93543,2348],{"class":53538},[139,93545,53545],{"class":145},[139,93547,93548,93550],{"class":141,"line":989},[139,93549,56986],{"class":781},[139,93551,17840],{"class":145},[139,93553,93554,93556,93558,93560],{"class":141,"line":994},[139,93555,74825],{"class":153},[139,93557,2265],{"class":145},[139,93559,62738],{"class":153},[139,93561,3591],{"class":145},[139,93563,93564,93566,93568,93570,93572],{"class":141,"line":999},[139,93565,57005],{"class":153},[139,93567,2265],{"class":145},[139,93569,1022],{"class":153},[139,93571,53729],{"class":149},[139,93573,3591],{"class":145},[139,93575,93576,93578,93580,93582,93584],{"class":141,"line":1006},[139,93577,57019],{"class":153},[139,93579,2265],{"class":145},[139,93581,1022],{"class":153},[139,93583,53729],{"class":149},[139,93585,3591],{"class":145},[139,93587,93588,93590,93592,93594],{"class":141,"line":1027},[139,93589,57118],{"class":153},[139,93591,2265],{"class":145},[139,93593,92234],{"class":153},[139,93595,3591],{"class":145},[139,93597,93598,93600,93602,93604,93606],{"class":141,"line":1040},[139,93599,57156],{"class":153},[139,93601,2265],{"class":145},[139,93603,3260],{"class":153},[139,93605,53729],{"class":149},[139,93607,3591],{"class":145},[139,93609,93610,93612,93614,93616],{"class":141,"line":2160},[139,93611,59650],{"class":153},[139,93613,2265],{"class":145},[139,93615,63075],{"class":153},[139,93617,3591],{"class":145},[139,93619,93620,93622,93624,93626],{"class":141,"line":2188},[139,93621,59520],{"class":153},[139,93623,2265],{"class":145},[139,93625,53829],{"class":153},[139,93627,3591],{"class":145},[139,93629,93630,93632,93634,93636,93638],{"class":141,"line":3944},[139,93631,92273],{"class":153},[139,93633,2265],{"class":145},[139,93635,1481],{"class":153},[139,93637,53729],{"class":149},[139,93639,3591],{"class":145},[139,93641,93642],{"class":141,"line":3963},[139,93643,4472],{"class":145},[139,93645,93646,93648,93650],{"class":141,"line":3968},[139,93647,54652],{"class":145},[139,93649,2348],{"class":53538},[139,93651,53545],{"class":145},[139,93653,93654,93656,93658],{"class":141,"line":3982},[139,93655,54022],{"class":145},[139,93657,53572],{"class":53538},[139,93659,53545],{"class":145},[139,93661,93662],{"class":141,"line":3987},[139,93663,843],{"emptyLinePlaceholder":842},[139,93665,93666,93668,93670],{"class":141,"line":4014},[139,93667,796],{"class":145},[139,93669,54037],{"class":53538},[139,93671,53545],{"class":145},[139,93673,93674,93676,93678,93680,93682,93684,93686,93688],{"class":141,"line":4019},[139,93675,54380],{"class":145},[139,93677,53848],{"class":53538},[139,93679,55721],{"class":781},[139,93681,150],{"class":145},[139,93683,55726],{"class":160},[139,93685,57548],{"class":145},[139,93687,53848],{"class":53538},[139,93689,53545],{"class":145},[139,93691,93692,93694,93696,93698,93700,93702,93704,93706],{"class":141,"line":4036},[139,93693,54380],{"class":145},[139,93695,54050],{"class":53538},[139,93697,57473],{"class":781},[139,93699,150],{"class":145},[139,93701,90502],{"class":160},[139,93703,57548],{"class":145},[139,93705,54050],{"class":53538},[139,93707,53545],{"class":145},[139,93709,93710,93712,93714],{"class":141,"line":4041},[139,93711,54380],{"class":145},[139,93713,54050],{"class":53538},[139,93715,53545],{"class":145},[139,93717,93718,93720,93722,93724,93726,93728,93730,93732],{"class":141,"line":4046},[139,93719,13494],{"class":149},[139,93721,89161],{"class":153},[139,93723,15836],{"class":149},[139,93725,56630],{"class":145},[139,93727,56633],{"class":781},[139,93729,157],{"class":145},[139,93731,92374],{"class":160},[139,93733,164],{"class":145},[139,93735,93736,93738,93740,93742],{"class":141,"line":4051},[139,93737,54455],{"class":149},[139,93739,11712],{"class":145},[139,93741,150],{"class":149},[139,93743,49571],{"class":153},[139,93745,93746,93748,93750],{"class":141,"line":4065},[139,93747,72314],{"class":149},[139,93749,92393],{"class":781},[139,93751,13127],{"class":145},[139,93753,93754,93756,93758,93760],{"class":141,"line":4070},[139,93755,92400],{"class":145},[139,93757,150],{"class":149},[139,93759,5314],{"class":145},[139,93761,4985],{"class":149},[139,93763,93764],{"class":141,"line":4860},[139,93765,92411],{"class":2512},[139,93767,93768],{"class":141,"line":4874},[139,93769,4472],{"class":145},[139,93771,93772],{"class":141,"line":4882},[139,93773,92420],{"class":2512},[139,93775,93776],{"class":141,"line":4887},[139,93777,93778],{"class":2512},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[139,93780,93781],{"class":141,"line":4893},[139,93782,93783],{"class":2512},"    \u002F\u002F 1.声明一个定时器变量\n",[139,93785,93786],{"class":141,"line":4899},[139,93787,93788],{"class":2512},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[139,93790,93791],{"class":141,"line":4904},[139,93792,93793],{"class":2512},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[139,93795,93796],{"class":141,"line":10222},[139,93797,93798],{"class":2512},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[139,93800,93801],{"class":141,"line":10246},[139,93802,93803],{"class":2512},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[139,93805,93806,93808,93811,93813,93815,93817,93819],{"class":141,"line":10251},[139,93807,72314],{"class":149},[139,93809,93810],{"class":781}," throttle",[139,93812,157],{"class":145},[139,93814,92865],{"class":2111},[139,93816,413],{"class":145},[139,93818,3155],{"class":2111},[139,93820,14714],{"class":145},[139,93822,93823,93825],{"class":141,"line":10257},[139,93824,82001],{"class":149},[139,93826,92878],{"class":145},[139,93828,93829,93831,93833],{"class":141,"line":10284},[139,93830,76211],{"class":149},[139,93832,61151],{"class":149},[139,93834,56686],{"class":145},[139,93836,93837,93839,93841,93843],{"class":141,"line":10289},[139,93838,4780],{"class":149},[139,93840,549],{"class":145},[139,93842,2668],{"class":149},[139,93844,93845],{"class":145},"timer) {\n",[139,93847,93848,93851,93853,93855,93857,93859],{"class":141,"line":10295},[139,93849,93850],{"class":145},"          timer ",[139,93852,150],{"class":149},[139,93854,92919],{"class":781},[139,93856,157],{"class":145},[139,93858,56683],{"class":149},[139,93860,56686],{"class":145},[139,93862,93863,93866],{"class":141,"line":10307},[139,93864,93865],{"class":781},"            fn",[139,93867,4262],{"class":145},[139,93869,93870],{"class":141,"line":10319},[139,93871,93872],{"class":2512},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[139,93874,93875],{"class":141,"line":10331},[139,93876,93877],{"class":2512},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[139,93879,93880,93883,93885],{"class":141,"line":11990},[139,93881,93882],{"class":145},"            timer ",[139,93884,150],{"class":149},[139,93886,93887],{"class":153}," null\n",[139,93889,93890],{"class":141,"line":12015},[139,93891,93892],{"class":2512},"            \u002F\u002F 不能用clearTimeout(timer)\n",[139,93894,93895],{"class":141,"line":12038},[139,93896,93897],{"class":2512},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[139,93899,93900],{"class":141,"line":12062},[139,93901,93902],{"class":145},"          }, t)\n",[139,93904,93905],{"class":141,"line":12067},[139,93906,4812],{"class":145},[139,93908,93909],{"class":141,"line":12072},[139,93910,54633],{"class":145},[139,93912,93913],{"class":141,"line":12077},[139,93914,4472],{"class":145},[139,93916,93917,93919,93921,93923,93925,93927,93929,93931,93933],{"class":141,"line":12086},[139,93918,92435],{"class":145},[139,93920,60046],{"class":781},[139,93922,157],{"class":145},[139,93924,92442],{"class":160},[139,93926,413],{"class":145},[139,93928,93401],{"class":781},[139,93930,92451],{"class":145},[139,93932,67305],{"class":153},[139,93934,207],{"class":145},[139,93936,93937,93939,93941],{"class":141,"line":12091},[139,93938,54652],{"class":145},[139,93940,54050],{"class":53538},[139,93942,53545],{"class":145},[139,93944,93945,93947,93949],{"class":141,"line":12097},[139,93946,54022],{"class":145},[139,93948,54037],{"class":53538},[139,93950,53545],{"class":145},[139,93952,93953],{"class":141,"line":12118},[139,93954,843],{"emptyLinePlaceholder":842},[139,93956,93957,93959,93961],{"class":141,"line":12124},[139,93958,54022],{"class":145},[139,93960,52873],{"class":53538},[139,93962,53545],{"class":145},[1217,93964,93966],{"id":93965},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[130,93968,93970],{"className":55302,"code":93969,"language":55304,"meta":135,"style":135},"\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",[50,93971,93972,93980,93988,93993,93998,94003,94008,94012,94020],{"__ignoreMap":135},[139,93973,93974,93976,93978],{"class":141,"line":142},[139,93975,796],{"class":145},[139,93977,54037],{"class":53538},[139,93979,53545],{"class":145},[139,93981,93982,93984,93986],{"class":141,"line":210},[139,93983,54380],{"class":145},[139,93985,54050],{"class":53538},[139,93987,53545],{"class":145},[139,93989,93990],{"class":141,"line":254},[139,93991,93992],{"class":145},"    let timer = null\n",[139,93994,93995],{"class":141,"line":262},[139,93996,93997],{"class":145},"    timer = setTimeout(() => {\n",[139,93999,94000],{"class":141,"line":313},[139,94001,94002],{"class":145},"      clearTimeout(timer)\n",[139,94004,94005],{"class":141,"line":462},[139,94006,94007],{"class":145},"      console.log(timer)\n",[139,94009,94010],{"class":141,"line":474},[139,94011,62458],{"class":145},[139,94013,94014,94016,94018],{"class":141,"line":484},[139,94015,54652],{"class":145},[139,94017,54050],{"class":53538},[139,94019,53545],{"class":145},[139,94021,94022,94024,94026],{"class":141,"line":989},[139,94023,54022],{"class":145},[139,94025,54037],{"class":53538},[139,94027,53545],{"class":145},[19,94029,94030],{},"输出为1",[19,94032,94033],{},"在开启的定时器里边写清除定时器",[19,94035,94036],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1217,94038,94040],{"id":94039},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94042,94043],{},"页面打开，可以记录上一次的视频播放位置",[19,94045,94046],{},[3760,94047],{"alt":135,"src":94048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94050,94051],{},[3760,94052],{"alt":135,"src":94053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[130,94055,94057],{"className":52871,"code":94056,"language":52873,"meta":135,"style":135},"\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",[50,94058,94059,94069,94083,94087,94095,94109,94129,94149,94171,94184,94192,94198,94208,94218,94228,94232,94236,94243,94256,94268,94272,94276,94286,94298,94312,94316,94320,94327,94337,94350,94362,94372,94382,94398,94410,94414,94418,94426,94436,94448,94458,94468,94478,94482,94486,94496,94507,94511,94519,94527,94531,94539,94554,94569,94584,94605,94613,94621,94636,94658,94666,94681,94707,94733,94759,94767,94775,94794,94802,94807,94826,94831,94849,94854,94859,94867,94872,94886,94894,94899,94916,94920,94925,94947,94951,94959,94967,94971],{"__ignoreMap":135},[139,94060,94061,94063,94065,94067],{"class":141,"line":142},[139,94062,53535],{"class":145},[139,94064,53539],{"class":53538},[139,94066,53542],{"class":781},[139,94068,53545],{"class":145},[139,94070,94071,94073,94075,94077,94079,94081],{"class":141,"line":210},[139,94072,796],{"class":145},[139,94074,52873],{"class":53538},[139,94076,53554],{"class":781},[139,94078,150],{"class":145},[139,94080,53559],{"class":160},[139,94082,53545],{"class":145},[139,94084,94085],{"class":141,"line":254},[139,94086,843],{"emptyLinePlaceholder":842},[139,94088,94089,94091,94093],{"class":141,"line":262},[139,94090,796],{"class":145},[139,94092,53572],{"class":53538},[139,94094,53545],{"class":145},[139,94096,94097,94099,94101,94103,94105,94107],{"class":141,"line":313},[139,94098,54380],{"class":145},[139,94100,53582],{"class":53538},[139,94102,53585],{"class":781},[139,94104,150],{"class":145},[139,94106,53590],{"class":160},[139,94108,61360],{"class":145},[139,94110,94111,94113,94115,94117,94119,94121,94123,94125,94127],{"class":141,"line":462},[139,94112,54380],{"class":145},[139,94114,53582],{"class":53538},[139,94116,53601],{"class":781},[139,94118,150],{"class":145},[139,94120,53606],{"class":160},[139,94122,53609],{"class":781},[139,94124,150],{"class":145},[139,94126,53614],{"class":160},[139,94128,61360],{"class":145},[139,94130,94131,94133,94135,94137,94139,94141,94143,94145,94147],{"class":141,"line":474},[139,94132,54380],{"class":145},[139,94134,53582],{"class":53538},[139,94136,17189],{"class":781},[139,94138,150],{"class":145},[139,94140,53629],{"class":160},[139,94142,53609],{"class":781},[139,94144,150],{"class":145},[139,94146,53636],{"class":160},[139,94148,61360],{"class":145},[139,94150,94151,94153,94155,94157,94159,94162,94164,94166,94169],{"class":141,"line":484},[139,94152,54380],{"class":145},[139,94154,53582],{"class":53538},[139,94156,17189],{"class":781},[139,94158,150],{"class":145},[139,94160,94161],{"class":160},"\"referrer\"",[139,94163,53609],{"class":781},[139,94165,150],{"class":145},[139,94167,94168],{"class":160},"\"never\"",[139,94170,61360],{"class":145},[139,94172,94173,94175,94177,94180,94182],{"class":141,"line":989},[139,94174,54380],{"class":145},[139,94176,53645],{"class":53538},[139,94178,94179],{"class":145},">综合案例\u003C\u002F",[139,94181,53645],{"class":53538},[139,94183,53545],{"class":145},[139,94185,94186,94188,94190],{"class":141,"line":994},[139,94187,54380],{"class":145},[139,94189,2348],{"class":53538},[139,94191,53545],{"class":145},[139,94193,94194,94196],{"class":141,"line":999},[139,94195,8677],{"class":53538},[139,94197,17840],{"class":145},[139,94199,94200,94202,94204,94206],{"class":141,"line":1006},[139,94201,56929],{"class":153},[139,94203,2265],{"class":145},[139,94205,2634],{"class":153},[139,94207,3591],{"class":145},[139,94209,94210,94212,94214,94216],{"class":141,"line":1027},[139,94211,56940],{"class":153},[139,94213,2265],{"class":145},[139,94215,2634],{"class":153},[139,94217,3591],{"class":145},[139,94219,94220,94222,94224,94226],{"class":141,"line":1040},[139,94221,74825],{"class":153},[139,94223,2265],{"class":145},[139,94225,62738],{"class":153},[139,94227,3591],{"class":145},[139,94229,94230],{"class":141,"line":2160},[139,94231,4472],{"class":145},[139,94233,94234],{"class":141,"line":2188},[139,94235,843],{"emptyLinePlaceholder":842},[139,94237,94238,94241],{"class":141,"line":3944},[139,94239,94240],{"class":781},"    .container",[139,94242,17840],{"class":145},[139,94244,94245,94247,94249,94252,94254],{"class":141,"line":3963},[139,94246,57005],{"class":153},[139,94248,2265],{"class":145},[139,94250,94251],{"class":153},"1200",[139,94253,53729],{"class":149},[139,94255,3591],{"class":145},[139,94257,94258,94260,94262,94264,94266],{"class":141,"line":3968},[139,94259,56940],{"class":153},[139,94261,2265],{"class":145},[139,94263,2634],{"class":153},[139,94265,53793],{"class":153},[139,94267,3591],{"class":145},[139,94269,94270],{"class":141,"line":3982},[139,94271,4472],{"class":145},[139,94273,94274],{"class":141,"line":3987},[139,94275,843],{"emptyLinePlaceholder":842},[139,94277,94278,94281,94284],{"class":141,"line":4014},[139,94279,94280],{"class":781},"    .video",[139,94282,94283],{"class":53538}," video",[139,94285,17840],{"class":145},[139,94287,94288,94290,94292,94294,94296],{"class":141,"line":4019},[139,94289,57005],{"class":153},[139,94291,2265],{"class":145},[139,94293,1017],{"class":153},[139,94295,2766],{"class":149},[139,94297,3591],{"class":145},[139,94299,94300,94302,94304,94306,94308,94310],{"class":141,"line":4036},[139,94301,56929],{"class":153},[139,94303,2265],{"class":145},[139,94305,3135],{"class":153},[139,94307,53729],{"class":149},[139,94309,799],{"class":153},[139,94311,3591],{"class":145},[139,94313,94314],{"class":141,"line":4041},[139,94315,4472],{"class":145},[139,94317,94318],{"class":141,"line":4046},[139,94319,843],{"emptyLinePlaceholder":842},[139,94321,94322,94325],{"class":141,"line":4051},[139,94323,94324],{"class":781},"    .elevator",[139,94326,17840],{"class":145},[139,94328,94329,94331,94333,94335],{"class":141,"line":4065},[139,94330,56993],{"class":153},[139,94332,2265],{"class":145},[139,94334,88461],{"class":153},[139,94336,3591],{"class":145},[139,94338,94339,94341,94343,94346,94348],{"class":141,"line":4070},[139,94340,57181],{"class":153},[139,94342,2265],{"class":145},[139,94344,94345],{"class":153},"280",[139,94347,53729],{"class":149},[139,94349,3591],{"class":145},[139,94351,94352,94354,94356,94358,94360],{"class":141,"line":4860},[139,94353,88655],{"class":153},[139,94355,2265],{"class":145},[139,94357,3135],{"class":153},[139,94359,53729],{"class":149},[139,94361,3591],{"class":145},[139,94363,94364,94366,94368,94370],{"class":141,"line":4874},[139,94365,88468],{"class":153},[139,94367,2265],{"class":145},[139,94369,88473],{"class":153},[139,94371,3591],{"class":145},[139,94373,94374,94376,94378,94380],{"class":141,"line":4882},[139,94375,63954],{"class":153},[139,94377,2265],{"class":145},[139,94379,63075],{"class":153},[139,94381,3591],{"class":145},[139,94383,94384,94386,94388,94390,94392,94394,94396],{"class":141,"line":4887},[139,94385,64210],{"class":153},[139,94387,2265],{"class":145},[139,94389,410],{"class":153},[139,94391,53729],{"class":149},[139,94393,53758],{"class":153},[139,94395,64477],{"class":153},[139,94397,3591],{"class":145},[139,94399,94400,94402,94404,94406,94408],{"class":141,"line":4893},[139,94401,57005],{"class":153},[139,94403,2265],{"class":145},[139,94405,3341],{"class":153},[139,94407,53729],{"class":149},[139,94409,3591],{"class":145},[139,94411,94412],{"class":141,"line":4899},[139,94413,4472],{"class":145},[139,94415,94416],{"class":141,"line":4904},[139,94417,843],{"emptyLinePlaceholder":842},[139,94419,94420,94422,94424],{"class":141,"line":10222},[139,94421,94324],{"class":781},[139,94423,3696],{"class":53538},[139,94425,17840],{"class":145},[139,94427,94428,94430,94432,94434],{"class":141,"line":10246},[139,94429,57243],{"class":153},[139,94431,2265],{"class":145},[139,94433,63102],{"class":153},[139,94435,3591],{"class":145},[139,94437,94438,94440,94442,94444,94446],{"class":141,"line":10251},[139,94439,56929],{"class":153},[139,94441,2265],{"class":145},[139,94443,536],{"class":153},[139,94445,53729],{"class":149},[139,94447,3591],{"class":145},[139,94449,94450,94452,94454,94456],{"class":141,"line":10257},[139,94451,66202],{"class":153},[139,94453,2265],{"class":145},[139,94455,56971],{"class":153},[139,94457,3591],{"class":145},[139,94459,94460,94462,94464,94466],{"class":141,"line":10284},[139,94461,59520],{"class":153},[139,94463,2265],{"class":145},[139,94465,53829],{"class":153},[139,94467,3591],{"class":145},[139,94469,94470,94472,94474,94476],{"class":141,"line":10289},[139,94471,59650],{"class":153},[139,94473,2265],{"class":145},[139,94475,64303],{"class":153},[139,94477,3591],{"class":145},[139,94479,94480],{"class":141,"line":10295},[139,94481,4472],{"class":145},[139,94483,94484],{"class":141,"line":10307},[139,94485,843],{"emptyLinePlaceholder":842},[139,94487,94488,94490,94492,94494],{"class":141,"line":10319},[139,94489,94324],{"class":781},[139,94491,3696],{"class":53538},[139,94493,66256],{"class":781},[139,94495,17840],{"class":145},[139,94497,94498,94500,94502,94505],{"class":141,"line":10331},[139,94499,59650],{"class":153},[139,94501,2265],{"class":145},[139,94503,94504],{"class":153},"#1286ff",[139,94506,3591],{"class":145},[139,94508,94509],{"class":141,"line":11990},[139,94510,4472],{"class":145},[139,94512,94513,94515,94517],{"class":141,"line":12015},[139,94514,54652],{"class":145},[139,94516,2348],{"class":53538},[139,94518,53545],{"class":145},[139,94520,94521,94523,94525],{"class":141,"line":12038},[139,94522,54022],{"class":145},[139,94524,53572],{"class":53538},[139,94526,53545],{"class":145},[139,94528,94529],{"class":141,"line":12062},[139,94530,843],{"emptyLinePlaceholder":842},[139,94532,94533,94535,94537],{"class":141,"line":12067},[139,94534,796],{"class":145},[139,94536,54037],{"class":53538},[139,94538,53545],{"class":145},[139,94540,94541,94543,94545,94547,94549,94552],{"class":141,"line":12072},[139,94542,54380],{"class":145},[139,94544,53848],{"class":53538},[139,94546,55721],{"class":781},[139,94548,150],{"class":145},[139,94550,94551],{"class":160},"\"container\"",[139,94553,53545],{"class":145},[139,94555,94556,94558,94560,94562,94564,94567],{"class":141,"line":12077},[139,94557,53579],{"class":145},[139,94559,53848],{"class":53538},[139,94561,55721],{"class":781},[139,94563,150],{"class":145},[139,94565,94566],{"class":160},"\"header\"",[139,94568,53545],{"class":145},[139,94570,94571,94573,94575,94577,94579,94582],{"class":141,"line":12086},[139,94572,57468],{"class":145},[139,94574,2680],{"class":53538},[139,94576,63290],{"class":781},[139,94578,150],{"class":145},[139,94580,94581],{"class":160},"\"http:\u002F\u002Fpip.itcast.cn\"",[139,94583,53545],{"class":145},[139,94585,94586,94588,94590,94592,94594,94597,94599,94601,94603],{"class":141,"line":12091},[139,94587,57536],{"class":145},[139,94589,3760],{"class":53538},[139,94591,57473],{"class":781},[139,94593,150],{"class":145},[139,94595,94596],{"class":160},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[139,94598,57481],{"class":781},[139,94600,150],{"class":145},[139,94602,9926],{"class":160},[139,94604,61360],{"class":145},[139,94606,94607,94609,94611],{"class":141,"line":12097},[139,94608,57641],{"class":145},[139,94610,2680],{"class":53538},[139,94612,53545],{"class":145},[139,94614,94615,94617,94619],{"class":141,"line":12118},[139,94616,54013],{"class":145},[139,94618,53848],{"class":53538},[139,94620,53545],{"class":145},[139,94622,94623,94625,94627,94629,94631,94634],{"class":141,"line":12124},[139,94624,53579],{"class":145},[139,94626,53848],{"class":53538},[139,94628,55721],{"class":781},[139,94630,150],{"class":145},[139,94632,94633],{"class":160},"\"video\"",[139,94635,53545],{"class":145},[139,94637,94638,94640,94642,94644,94646,94649,94652,94654,94656],{"class":141,"line":12138},[139,94639,57468],{"class":145},[139,94641,30443],{"class":53538},[139,94643,57473],{"class":781},[139,94645,150],{"class":145},[139,94647,94648],{"class":160},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[139,94650,94651],{"class":781}," controls",[139,94653,57548],{"class":145},[139,94655,30443],{"class":53538},[139,94657,53545],{"class":145},[139,94659,94660,94662,94664],{"class":141,"line":12144},[139,94661,54013],{"class":145},[139,94663,53848],{"class":53538},[139,94665,53545],{"class":145},[139,94667,94668,94670,94672,94674,94676,94679],{"class":141,"line":12171},[139,94669,53579],{"class":145},[139,94671,53848],{"class":53538},[139,94673,55721],{"class":781},[139,94675,150],{"class":145},[139,94677,94678],{"class":160},"\"elevator\"",[139,94680,53545],{"class":145},[139,94682,94683,94685,94687,94689,94691,94693,94696,94698,94700,94703,94705],{"class":141,"line":12180},[139,94684,57468],{"class":145},[139,94686,2680],{"class":53538},[139,94688,63290],{"class":781},[139,94690,150],{"class":145},[139,94692,66468],{"class":160},[139,94694,94695],{"class":781}," data-ref",[139,94697,150],{"class":145},[139,94699,94633],{"class":160},[139,94701,94702],{"class":145},">视频介绍\u003C\u002F",[139,94704,2680],{"class":53538},[139,94706,53545],{"class":145},[139,94708,94709,94711,94713,94715,94717,94719,94721,94723,94726,94729,94731],{"class":141,"line":12186},[139,94710,57468],{"class":145},[139,94712,2680],{"class":53538},[139,94714,63290],{"class":781},[139,94716,150],{"class":145},[139,94718,66468],{"class":160},[139,94720,94695],{"class":781},[139,94722,150],{"class":145},[139,94724,94725],{"class":160},"\"intro\"",[139,94727,94728],{"class":145},">课程简介\u003C\u002F",[139,94730,2680],{"class":53538},[139,94732,53545],{"class":145},[139,94734,94735,94737,94739,94741,94743,94745,94747,94749,94752,94755,94757],{"class":141,"line":12194},[139,94736,57468],{"class":145},[139,94738,2680],{"class":53538},[139,94740,63290],{"class":781},[139,94742,150],{"class":145},[139,94744,66468],{"class":160},[139,94746,94695],{"class":781},[139,94748,150],{"class":145},[139,94750,94751],{"class":160},"\"outline\"",[139,94753,94754],{"class":145},">评论列表\u003C\u002F",[139,94756,2680],{"class":53538},[139,94758,53545],{"class":145},[139,94760,94761,94763,94765],{"class":141,"line":12199},[139,94762,54013],{"class":145},[139,94764,53848],{"class":53538},[139,94766,53545],{"class":145},[139,94768,94769,94771,94773],{"class":141,"line":18871},[139,94770,54652],{"class":145},[139,94772,53848],{"class":53538},[139,94774,53545],{"class":145},[139,94776,94777,94779,94781,94783,94785,94788,94790,94792],{"class":141,"line":18877},[139,94778,54380],{"class":145},[139,94780,54050],{"class":53538},[139,94782,57473],{"class":781},[139,94784,150],{"class":145},[139,94786,94787],{"class":160},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[139,94789,57548],{"class":145},[139,94791,54050],{"class":53538},[139,94793,53545],{"class":145},[139,94795,94796,94798,94800],{"class":141,"line":18900},[139,94797,54380],{"class":145},[139,94799,54050],{"class":53538},[139,94801,53545],{"class":145},[139,94803,94804],{"class":141,"line":18906},[139,94805,94806],{"class":2512},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[139,94808,94809,94811,94813,94815,94817,94819,94821,94824],{"class":141,"line":18929},[139,94810,13494],{"class":149},[139,94812,94283],{"class":153},[139,94814,15836],{"class":149},[139,94816,56630],{"class":145},[139,94818,56633],{"class":781},[139,94820,157],{"class":145},[139,94822,94823],{"class":160},"'video'",[139,94825,164],{"class":145},[139,94827,94828],{"class":141,"line":18943},[139,94829,94830],{"class":2512},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[139,94832,94833,94836,94838,94840,94842,94845,94847],{"class":141,"line":18963},[139,94834,94835],{"class":145},"    video.ontimeupdate ",[139,94837,150],{"class":149},[139,94839,90583],{"class":145},[139,94841,93401],{"class":781},[139,94843,94844],{"class":145},"(() ",[139,94846,86950],{"class":149},[139,94848,17840],{"class":145},[139,94850,94851],{"class":141,"line":18969},[139,94852,94853],{"class":2512},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[139,94855,94856],{"class":141,"line":18980},[139,94857,94858],{"class":2512},"      \u002F\u002F 控制台输出当前的时间\n",[139,94860,94861,94864],{"class":141,"line":19003},[139,94862,94863],{"class":2512},"      \u002F\u002F console.log(video.currentTime)",[139,94865,94866],{"class":2512},"  \u002F\u002F获得当前的视频时间\n",[139,94868,94869],{"class":141,"line":19025},[139,94870,94871],{"class":2512},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[139,94873,94874,94876,94878,94880,94883],{"class":141,"line":19030},[139,94875,76912],{"class":145},[139,94877,73883],{"class":781},[139,94879,157],{"class":145},[139,94881,94882],{"class":160},"'currentTime'",[139,94884,94885],{"class":145},", video.currentTime)\n",[139,94887,94888,94890,94892],{"class":141,"line":19036},[139,94889,56769],{"class":145},[139,94891,8684],{"class":153},[139,94893,164],{"class":145},[139,94895,94896],{"class":141,"line":19050},[139,94897,94898],{"class":2512},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[139,94900,94901,94904,94907,94909,94912,94914],{"class":141,"line":19063},[139,94902,94903],{"class":145},"    video.",[139,94905,94906],{"class":781},"onloadeddata",[139,94908,15836],{"class":149},[139,94910,94911],{"class":145}," () ",[139,94913,86950],{"class":149},[139,94915,17840],{"class":145},[139,94917,94918],{"class":141,"line":19068},[139,94919,62245],{"class":2512},[139,94921,94922],{"class":141,"line":19082},[139,94923,94924],{"class":2512},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[139,94926,94927,94930,94932,94935,94937,94939,94941,94943,94945],{"class":141,"line":19087},[139,94928,94929],{"class":145},"      video.currentTime ",[139,94931,150],{"class":149},[139,94933,94934],{"class":145}," localStorage.",[139,94936,73914],{"class":781},[139,94938,157],{"class":145},[139,94940,94882],{"class":160},[139,94942,2120],{"class":145},[139,94944,73586],{"class":149},[139,94946,49571],{"class":153},[139,94948,94949],{"class":141,"line":19093},[139,94950,4472],{"class":145},[139,94952,94953,94955,94957],{"class":141,"line":19098},[139,94954,54652],{"class":145},[139,94956,54050],{"class":53538},[139,94958,53545],{"class":145},[139,94960,94961,94963,94965],{"class":141,"line":19112},[139,94962,54022],{"class":145},[139,94964,54037],{"class":53538},[139,94966,53545],{"class":145},[139,94968,94969],{"class":141,"line":19117},[139,94970,843],{"emptyLinePlaceholder":842},[139,94972,94973,94975,94977],{"class":141,"line":19122},[139,94974,54022],{"class":145},[139,94976,52873],{"class":53538},[139,94978,53545],{"class":145},[2348,94980,94981],{},"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":135,"searchDepth":210,"depth":210,"links":94983},[94984,94989,94993,94994,94995,95000,95005,95006,95007,95008,95015,95020,95021,95031,95035,95036,95040],{"id":78920,"depth":210,"text":78921,"children":94985},[94986,94987,94988],{"id":78924,"depth":254,"text":78925},{"id":78949,"depth":254,"text":78950},{"id":78961,"depth":254,"text":78962},{"id":78973,"depth":210,"text":78974,"children":94990},[94991,94992],{"id":78977,"depth":254,"text":78978},{"id":78992,"depth":254,"text":78993},{"id":79044,"depth":210,"text":79045},{"id":79088,"depth":210,"text":79089},{"id":79105,"depth":210,"text":79106,"children":94996},[94997,94998,94999],{"id":79109,"depth":254,"text":79110},{"id":79122,"depth":254,"text":79123},{"id":79227,"depth":254,"text":79228},{"id":79516,"depth":210,"text":79517,"children":95001},[95002,95003,95004],{"id":79520,"depth":254,"text":79521},{"id":79963,"depth":254,"text":79964},{"id":80374,"depth":254,"text":80375},{"id":80437,"depth":210,"text":80438},{"id":80516,"depth":210,"text":80517},{"id":80609,"depth":210,"text":80610},{"id":82453,"depth":210,"text":82454,"children":95009},[95010,95011,95012,95013,95014],{"id":82457,"depth":254,"text":82458},{"id":82469,"depth":254,"text":82470},{"id":82688,"depth":254,"text":82689},{"id":82706,"depth":254,"text":82707},{"id":82766,"depth":254,"text":82767},{"id":87034,"depth":210,"text":87035,"children":95016},[95017,95018,95019],{"id":87038,"depth":254,"text":87039},{"id":87056,"depth":254,"text":87057},{"id":87082,"depth":254,"text":87083},{"id":87091,"depth":210,"text":87092},{"id":87113,"depth":210,"text":87114,"children":95022},[95023,95024,95025,95026,95027,95028,95029,95030],{"id":87117,"depth":254,"text":87118},{"id":87378,"depth":254,"text":87379},{"id":87564,"depth":254,"text":87565},{"id":87931,"depth":254,"text":87932},{"id":88047,"depth":254,"text":88048},{"id":88083,"depth":254,"text":88084},{"id":88130,"depth":254,"text":88131},{"id":88164,"depth":254,"text":88165},{"id":89527,"depth":210,"text":89528,"children":95032},[95033,95034],{"id":89531,"depth":254,"text":89532},{"id":89568,"depth":254,"text":89569},{"id":90923,"depth":210,"text":90924},{"id":91294,"depth":210,"text":91295,"children":95037},[95038,95039],{"id":91298,"depth":254,"text":91299},{"id":91332,"depth":254,"text":91333},{"id":92061,"depth":210,"text":92062,"children":95041},[95042,95043,95044,95045],{"id":92065,"depth":254,"text":92066},{"id":93023,"depth":254,"text":93024},{"id":93965,"depth":254,"text":93966},{"id":94039,"depth":254,"text":94040},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78909,"description":2384},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95052,"title":95053,"body":95054,"description":95065,"extension":2385,"meta":95066,"navigation":842,"path":95068,"seo":95069,"stem":95070,"__hash__":95071},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95055,"toc":95063},[95056],[19,95057,95058,95059],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2680,95060,95061],{"href":95061,"rel":95062},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26128],{"title":135,"searchDepth":210,"depth":210,"links":95064},[],"三件套第三套学习",{"category":95067},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95053,"description":95065},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95073,"title":95074,"body":95075,"description":2384,"extension":2385,"meta":95180,"navigation":842,"path":95181,"seo":95182,"stem":95183,"__hash__":95184},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95076,"toc":95175},[95077,95084,95087,95090,95093,95097,95106,95109,95112,95116,95125,95128,95132,95135,95155,95158,95172],[19,95078,95079],{},[2680,95080,95083],{"href":95081,"rel":95082},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26128],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95085,95074],{"id":95086},"_1安装",[19,95088,95089],{},"numpy是科学计算基础库,底层是C语言",[19,95091,95092],{},"三种方式：",[14,95094,95096],{"id":95095},"_11-通过pip安装","1.1 通过pip安装",[130,95098,95100],{"className":132,"code":95099,"language":134,"meta":135,"style":135},"pip install numpy\n",[50,95101,95102],{"__ignoreMap":135},[139,95103,95104],{"class":141,"line":142},[139,95105,95099],{"class":145},[19,95107,95108],{},"首选方式，自动处理依赖项",[19,95110,95111],{},"在提示系统命令符中使用cmd",[14,95113,95115],{"id":95114},"_12-通过anaconda安装","1.2 通过Anaconda安装",[130,95117,95119],{"className":132,"code":95118,"language":134,"meta":135,"style":135},"conda install numpy\n",[50,95120,95121],{"__ignoreMap":135},[139,95122,95123],{"class":141,"line":142},[139,95124,95118],{"class":145},[19,95126,95127],{},"自动解决环境依赖",[14,95129,95131],{"id":95130},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95133,95134],{},"对于Debian\u002FUbuntu",[130,95136,95138],{"className":132,"code":95137,"language":134,"meta":135,"style":135},"sudo apt-get install python3-numpy\n",[50,95139,95140],{"__ignoreMap":135},[139,95141,95142,95145,95147,95150,95152],{"class":141,"line":142},[139,95143,95144],{"class":145},"sudo apt",[139,95146,855],{"class":149},[139,95148,95149],{"class":145},"get install python3",[139,95151,855],{"class":149},[139,95153,95154],{"class":145},"numpy\n",[19,95156,95157],{},"对于Fedora:",[130,95159,95161],{"className":132,"code":95160,"language":134,"meta":135,"style":135},"sudo dnf install python3-numpy\n",[50,95162,95163],{"__ignoreMap":135},[139,95164,95165,95168,95170],{"class":141,"line":142},[139,95166,95167],{"class":145},"sudo dnf install python3",[139,95169,855],{"class":149},[139,95171,95154],{"class":145},[2348,95173,95174],{},"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":135,"searchDepth":210,"depth":210,"links":95176},[95177,95178,95179],{"id":95095,"depth":210,"text":95096},{"id":95114,"depth":210,"text":95115},{"id":95130,"depth":210,"text":95131},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95074,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95186,"title":95187,"body":95188,"description":2384,"extension":2385,"meta":95301,"navigation":842,"path":95302,"seo":95303,"stem":95304,"__hash__":95305},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95189,"toc":95299},[95190,95193,95196,95199,95202,95205,95208,95211,95214,95217,95293,95296],[10,95191,95187],{"id":95192},"_10算数函数",[19,95194,95195],{},"加减乘除运算跟python基础语法没区别",[19,95197,95198],{},"除了python那种方法外还可以使用函数",[19,95200,95201],{},"加：np.add(a,b)",[19,95203,95204],{},"减：np.subtract(a,b)",[19,95206,95207],{},"乘：np.multiply(a,b)",[19,95209,95210],{},"除：np.divide(a,b) == a\u002Fb",[19,95212,95213],{},"取余：np.mod(a,b) == a%b",[19,95215,95216],{},"必须会的用法：",[130,95218,95220],{"className":132,"code":95219,"language":134,"meta":135,"style":135},"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",[50,95221,95222,95244,95265,95275,95288],{"__ignoreMap":135},[139,95223,95224,95226,95228,95231,95233,95236,95238,95240,95242],{"class":141,"line":142},[139,95225,2680],{"class":145},[139,95227,150],{"class":149},[139,95229,95230],{"class":145},"np.arange(",[139,95232,2858],{"class":153},[139,95234,95235],{"class":145},").reshape(",[139,95237,421],{"class":153},[139,95239,2816],{"class":145},[139,95241,421],{"class":153},[139,95243,164],{"class":145},[139,95245,95246,95248,95250,95253,95255,95257,95259,95261,95263],{"class":141,"line":210},[139,95247,2704],{"class":145},[139,95249,150],{"class":149},[139,95251,95252],{"class":145},"np.array([",[139,95254,536],{"class":153},[139,95256,2816],{"class":145},[139,95258,536],{"class":153},[139,95260,2816],{"class":145},[139,95262,536],{"class":153},[139,95264,6935],{"class":145},[139,95266,95267,95270,95272],{"class":141,"line":254},[139,95268,95269],{"class":145},"result",[139,95271,150],{"class":149},[139,95273,95274],{"class":145},"np.empty_like(a)\n",[139,95276,95277,95280,95283,95285],{"class":141,"line":262},[139,95278,95279],{"class":145},"np.add(a,b,",[139,95281,95282],{"class":2111},"out",[139,95284,150],{"class":149},[139,95286,95287],{"class":145},"result)\n",[139,95289,95290],{"class":141,"line":313},[139,95291,95292],{"class":145},"result\n",[19,95294,95295],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2348,95297,95298],{},"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":135,"searchDepth":210,"depth":210,"links":95300},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95187,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95307,"title":95308,"body":95309,"description":2384,"extension":2385,"meta":96071,"navigation":842,"path":96072,"seo":96073,"stem":96074,"__hash__":96075},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95310,"toc":96058},[95311,95314,95317,95320,95324,95363,95367,95411,95471,95475,95478,95517,95520,95565,95569,95605,95609,95678,95682,95746,95750,95753,95756,95759,95762,95798,95802,95842,95846,95918,95921,95925,95988,95992,96055],[10,95312,95308],{"id":95313},"_11统计函数",[19,95315,95316],{},"sum max min mean",[19,95318,95319],{},"这些有axis参数，可以指定方向",[14,95321,95323],{"id":95322},"_111-sum求和函数","11.1 sum()求和函数",[130,95325,95327],{"className":132,"code":95326,"language":134,"meta":135,"style":135},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[50,95328,95329,95334,95355],{"__ignoreMap":135},[139,95330,95331],{"class":141,"line":142},[139,95332,95333],{"class":2512},"#创建一维数组\n",[139,95335,95336,95338,95340,95343,95345,95347,95349,95351,95353],{"class":141,"line":210},[139,95337,2680],{"class":145},[139,95339,150],{"class":149},[139,95341,95342],{"class":145},"np.random.randint(",[139,95344,410],{"class":153},[139,95346,2816],{"class":145},[139,95348,1017],{"class":153},[139,95350,2816],{"class":145},[139,95352,3135],{"class":153},[139,95354,164],{"class":145},[139,95356,95357,95360],{"class":141,"line":254},[139,95358,95359],{"class":145},"np.sum(a)",[139,95361,95362],{"class":2512},"#求和\n",[14,95364,95366],{"id":95365},"_112-max求最大值函数","11.2 max()求最大值函数",[130,95368,95370],{"className":132,"code":95369,"language":134,"meta":135,"style":135},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[50,95371,95372,95376,95396,95401,95406],{"__ignoreMap":135},[139,95373,95374],{"class":141,"line":142},[139,95375,95333],{"class":2512},[139,95377,95378,95380,95382,95384,95386,95388,95390,95392,95394],{"class":141,"line":210},[139,95379,2680],{"class":145},[139,95381,150],{"class":149},[139,95383,95342],{"class":145},[139,95385,410],{"class":153},[139,95387,2816],{"class":145},[139,95389,1017],{"class":153},[139,95391,2816],{"class":145},[139,95393,3135],{"class":153},[139,95395,164],{"class":145},[139,95397,95398],{"class":141,"line":254},[139,95399,95400],{"class":145},"np.max(a)\n",[139,95402,95403],{"class":141,"line":262},[139,95404,95405],{"class":2512},"#最大索引(求最大元素的索引)arg\n",[139,95407,95408],{"class":141,"line":313},[139,95409,95410],{"class":145},"np.argmax(a)\n",[130,95412,95414],{"className":132,"code":95413,"language":134,"meta":135,"style":135},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[50,95415,95416,95437,95457,95461],{"__ignoreMap":135},[139,95417,95418,95420,95422,95425,95427,95429,95431,95433,95435],{"class":141,"line":142},[139,95419,13192],{"class":145},[139,95421,150],{"class":149},[139,95423,95424],{"class":145}," np.array([",[139,95426,410],{"class":153},[139,95428,413],{"class":145},[139,95430,1481],{"class":153},[139,95432,413],{"class":145},[139,95434,421],{"class":153},[139,95436,6935],{"class":145},[139,95438,95439,95441,95443,95445,95447,95449,95451,95453,95455],{"class":141,"line":210},[139,95440,13218],{"class":145},[139,95442,150],{"class":149},[139,95444,95424],{"class":145},[139,95446,421],{"class":153},[139,95448,413],{"class":145},[139,95450,416],{"class":153},[139,95452,413],{"class":145},[139,95454,1476],{"class":153},[139,95456,6935],{"class":145},[139,95458,95459],{"class":141,"line":254},[139,95460,843],{"emptyLinePlaceholder":842},[139,95462,95463,95465,95468],{"class":141,"line":262},[139,95464,213],{"class":153},[139,95466,95467],{"class":145},"(np.maximum(a, b))   ",[139,95469,95470],{"class":2512},"# [3 5 4]，每个位置上取较大值\n",[14,95472,95474],{"id":95473},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95476,95477],{},"①一维数组：",[130,95479,95481],{"className":132,"code":95480,"language":134,"meta":135,"style":135},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[50,95482,95483,95487,95507,95512],{"__ignoreMap":135},[139,95484,95485],{"class":141,"line":142},[139,95486,95333],{"class":2512},[139,95488,95489,95491,95493,95495,95497,95499,95501,95503,95505],{"class":141,"line":210},[139,95490,2680],{"class":145},[139,95492,150],{"class":149},[139,95494,95342],{"class":145},[139,95496,410],{"class":153},[139,95498,2816],{"class":145},[139,95500,1017],{"class":153},[139,95502,2816],{"class":145},[139,95504,3135],{"class":153},[139,95506,164],{"class":145},[139,95508,95509],{"class":141,"line":254},[139,95510,95511],{"class":2512},"#求平均值\n",[139,95513,95514],{"class":141,"line":262},[139,95515,95516],{"class":145},"np.mean(a)\n",[19,95518,95519],{},"②二维数组",[130,95521,95523],{"className":132,"code":95522,"language":134,"meta":135,"style":135},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[50,95524,95525,95530,95555,95560],{"__ignoreMap":135},[139,95526,95527],{"class":141,"line":142},[139,95528,95529],{"class":2512},"#二维数组\n",[139,95531,95532,95535,95537,95539,95541,95543,95545,95547,95549,95551,95553],{"class":141,"line":210},[139,95533,95534],{"class":145},"aa",[139,95536,150],{"class":149},[139,95538,95230],{"class":145},[139,95540,410],{"class":153},[139,95542,2816],{"class":145},[139,95544,2959],{"class":153},[139,95546,95235],{"class":145},[139,95548,421],{"class":153},[139,95550,2816],{"class":145},[139,95552,1476],{"class":153},[139,95554,164],{"class":145},[139,95556,95557],{"class":141,"line":254},[139,95558,95559],{"class":2512},"#对数组中的所有数求平均\n",[139,95561,95562],{"class":141,"line":262},[139,95563,95564],{"class":145},"np.mean(aa)\n",[14,95566,95568],{"id":95567},"_114-median求中位数函数","11.4 median()求中位数函数",[130,95570,95572],{"className":132,"code":95571,"language":134,"meta":135,"style":135},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[50,95573,95574,95579,95595,95600],{"__ignoreMap":135},[139,95575,95576],{"class":141,"line":142},[139,95577,95578],{"class":2512},"#求中位数\n",[139,95580,95581,95583,95585,95587,95589,95591,95593],{"class":141,"line":210},[139,95582,2704],{"class":145},[139,95584,150],{"class":149},[139,95586,95230],{"class":145},[139,95588,410],{"class":153},[139,95590,2816],{"class":145},[139,95592,536],{"class":153},[139,95594,164],{"class":145},[139,95596,95597],{"class":141,"line":254},[139,95598,95599],{"class":145},"np.median(b)\n",[139,95601,95602],{"class":141,"line":262},[139,95603,95604],{"class":2512},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95606,95608],{"id":95607},"_115-power求幂运算函数","11.5 power()求幂运算函数",[130,95610,95612],{"className":132,"code":95611,"language":134,"meta":135,"style":135},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[50,95613,95614,95630,95635,95640,95649,95654,95663],{"__ignoreMap":135},[139,95615,95616,95618,95620,95622,95624,95626,95628],{"class":141,"line":142},[139,95617,2704],{"class":145},[139,95619,150],{"class":149},[139,95621,95230],{"class":145},[139,95623,410],{"class":153},[139,95625,2816],{"class":145},[139,95627,536],{"class":153},[139,95629,164],{"class":145},[139,95631,95632],{"class":141,"line":210},[139,95633,95634],{"class":2512},"#幂运算\n",[139,95636,95637],{"class":141,"line":254},[139,95638,95639],{"class":2512},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[139,95641,95642,95645,95647],{"class":141,"line":262},[139,95643,95644],{"class":145},"np.power(b,",[139,95646,416],{"class":153},[139,95648,164],{"class":145},[139,95650,95651],{"class":141,"line":313},[139,95652,95653],{"class":2512},"#或者以下代码，将数据存储起来\n",[139,95655,95656,95658,95660],{"class":141,"line":462},[139,95657,3280],{"class":145},[139,95659,150],{"class":149},[139,95661,95662],{"class":145},"np.empty_like(b)\n",[139,95664,95665,95667,95669,95671,95673,95675],{"class":141,"line":474},[139,95666,95644],{"class":145},[139,95668,416],{"class":153},[139,95670,2816],{"class":145},[139,95672,95282],{"class":2111},[139,95674,150],{"class":149},[139,95676,95677],{"class":145},"y)\n",[14,95679,95681],{"id":95680},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[130,95683,95685],{"className":132,"code":95684,"language":134,"meta":135,"style":135},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[50,95686,95687,95703,95708,95713,95717,95735],{"__ignoreMap":135},[139,95688,95689,95691,95693,95695,95697,95699,95701],{"class":141,"line":142},[139,95690,2704],{"class":145},[139,95692,150],{"class":149},[139,95694,95230],{"class":145},[139,95696,410],{"class":153},[139,95698,2816],{"class":145},[139,95700,536],{"class":153},[139,95702,164],{"class":145},[139,95704,95705],{"class":141,"line":210},[139,95706,95707],{"class":2512},"#开方\n",[139,95709,95710],{"class":141,"line":254},[139,95711,95712],{"class":145},"np.sqrt(b)\n",[139,95714,95715],{"class":141,"line":262},[139,95716,95653],{"class":2512},[139,95718,95719,95721,95723,95726,95729,95731,95733],{"class":141,"line":313},[139,95720,3280],{"class":145},[139,95722,150],{"class":149},[139,95724,95725],{"class":145},"np.empty_like(b,",[139,95727,95728],{"class":2111},"dtype",[139,95730,150],{"class":149},[139,95732,2496],{"class":153},[139,95734,164],{"class":145},[139,95736,95737,95740,95742,95744],{"class":141,"line":462},[139,95738,95739],{"class":145},"np.sqrt(b,",[139,95741,95282],{"class":2111},[139,95743,150],{"class":149},[139,95745,95677],{"class":145},[14,95747,95749],{"id":95748},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95751,95752],{},"对数组中的元素累计求和，可指定轴",[19,95754,95755],{},"#累计求和的意思是：",[19,95757,95758],{},"a = np.array([1, 2, 3, 4])",[19,95760,95761],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[130,95763,95765],{"className":132,"code":95764,"language":134,"meta":135,"style":135},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[50,95766,95767,95783,95788,95793],{"__ignoreMap":135},[139,95768,95769,95771,95773,95775,95777,95779,95781],{"class":141,"line":142},[139,95770,2704],{"class":145},[139,95772,150],{"class":149},[139,95774,95230],{"class":145},[139,95776,410],{"class":153},[139,95778,2816],{"class":145},[139,95780,536],{"class":153},[139,95782,164],{"class":145},[139,95784,95785],{"class":141,"line":210},[139,95786,95787],{"class":145},"np.cumsum(b)\n",[139,95789,95790],{"class":141,"line":254},[139,95791,95792],{"class":2512},"#结果：\n",[139,95794,95795],{"class":141,"line":262},[139,95796,95797],{"class":2512},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95799,95801],{"id":95800},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[130,95803,95805],{"className":132,"code":95804,"language":134,"meta":135,"style":135},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[50,95806,95807,95823,95828,95833,95837],{"__ignoreMap":135},[139,95808,95809,95811,95813,95815,95817,95819,95821],{"class":141,"line":142},[139,95810,2704],{"class":145},[139,95812,150],{"class":149},[139,95814,95230],{"class":145},[139,95816,410],{"class":153},[139,95818,2816],{"class":145},[139,95820,536],{"class":153},[139,95822,164],{"class":145},[139,95824,95825],{"class":141,"line":210},[139,95826,95827],{"class":2512},"#对数组中的元素累计求积，可指定轴\n",[139,95829,95830],{"class":141,"line":254},[139,95831,95832],{"class":145},"np.cumprod(b)\n",[139,95834,95835],{"class":141,"line":262},[139,95836,95792],{"class":2512},[139,95838,95839],{"class":141,"line":313},[139,95840,95841],{"class":2512},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95843,95845],{"id":95844},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[130,95847,95849],{"className":132,"code":95848,"language":134,"meta":135,"style":135},"#删除数组中的重复数据，并对数据进行排序\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",[50,95850,95851,95856,95904,95909,95913],{"__ignoreMap":135},[139,95852,95853],{"class":141,"line":142},[139,95854,95855],{"class":2512},"#删除数组中的重复数据，并对数据进行排序\n",[139,95857,95858,95860,95862,95864,95866,95868,95870,95872,95874,95876,95878,95880,95882,95884,95886,95888,95890,95892,95894,95896,95898,95900,95902],{"class":141,"line":210},[139,95859,2680],{"class":145},[139,95861,150],{"class":149},[139,95863,95252],{"class":145},[139,95865,410],{"class":153},[139,95867,2816],{"class":145},[139,95869,416],{"class":153},[139,95871,2816],{"class":145},[139,95873,421],{"class":153},[139,95875,2816],{"class":145},[139,95877,2934],{"class":153},[139,95879,2816],{"class":145},[139,95881,421],{"class":153},[139,95883,2816],{"class":145},[139,95885,536],{"class":153},[139,95887,2816],{"class":145},[139,95889,2640],{"class":153},[139,95891,2816],{"class":145},[139,95893,2634],{"class":153},[139,95895,2816],{"class":145},[139,95897,3210],{"class":153},[139,95899,2816],{"class":145},[139,95901,1476],{"class":153},[139,95903,6935],{"class":145},[139,95905,95906],{"class":141,"line":254},[139,95907,95908],{"class":145},"np.unique(a)\n",[139,95910,95911],{"class":141,"line":262},[139,95912,95792],{"class":2512},[139,95914,95915],{"class":141,"line":313},[139,95916,95917],{"class":2512},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95919,95920],{},"升序形式排序",[14,95922,95924],{"id":95923},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[130,95926,95928],{"className":132,"code":95927,"language":134,"meta":135,"style":135},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[50,95929,95930,95978,95983],{"__ignoreMap":135},[139,95931,95932,95934,95936,95938,95940,95942,95944,95946,95948,95950,95952,95954,95956,95958,95960,95962,95964,95966,95968,95970,95972,95974,95976],{"class":141,"line":142},[139,95933,2680],{"class":145},[139,95935,150],{"class":149},[139,95937,95252],{"class":145},[139,95939,410],{"class":153},[139,95941,2816],{"class":145},[139,95943,416],{"class":153},[139,95945,2816],{"class":145},[139,95947,421],{"class":153},[139,95949,2816],{"class":145},[139,95951,2934],{"class":153},[139,95953,2816],{"class":145},[139,95955,421],{"class":153},[139,95957,2816],{"class":145},[139,95959,536],{"class":153},[139,95961,2816],{"class":145},[139,95963,2640],{"class":153},[139,95965,2816],{"class":145},[139,95967,2634],{"class":153},[139,95969,2816],{"class":145},[139,95971,3210],{"class":153},[139,95973,2816],{"class":145},[139,95975,1476],{"class":153},[139,95977,6935],{"class":145},[139,95979,95980],{"class":141,"line":210},[139,95981,95982],{"class":2512},"#返回数组中非零元素的索引\n",[139,95984,95985],{"class":141,"line":254},[139,95986,95987],{"class":145},"np.nonzero(a)\n",[14,95989,95991],{"id":95990},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[130,95993,95995],{"className":132,"code":95994,"language":134,"meta":135,"style":135},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[50,95996,95997,96045,96050],{"__ignoreMap":135},[139,95998,95999,96001,96003,96005,96007,96009,96011,96013,96015,96017,96019,96021,96023,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043],{"class":141,"line":142},[139,96000,2680],{"class":145},[139,96002,150],{"class":149},[139,96004,95252],{"class":145},[139,96006,410],{"class":153},[139,96008,2816],{"class":145},[139,96010,416],{"class":153},[139,96012,2816],{"class":145},[139,96014,421],{"class":153},[139,96016,2816],{"class":145},[139,96018,2934],{"class":153},[139,96020,2816],{"class":145},[139,96022,421],{"class":153},[139,96024,2816],{"class":145},[139,96026,536],{"class":153},[139,96028,2816],{"class":145},[139,96030,2640],{"class":153},[139,96032,2816],{"class":145},[139,96034,2634],{"class":153},[139,96036,2816],{"class":145},[139,96038,3210],{"class":153},[139,96040,2816],{"class":145},[139,96042,1476],{"class":153},[139,96044,6935],{"class":145},[139,96046,96047],{"class":141,"line":210},[139,96048,96049],{"class":2512},"#计算一组数中最大值与最小值的差，可指定轴\n",[139,96051,96052],{"class":141,"line":254},[139,96053,96054],{"class":145},"np.ptp(a)\n",[2348,96056,96057],{},"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":135,"searchDepth":210,"depth":210,"links":96059},[96060,96061,96062,96063,96064,96065,96066,96067,96068,96069,96070],{"id":95322,"depth":210,"text":95323},{"id":95365,"depth":210,"text":95366},{"id":95473,"depth":210,"text":95474},{"id":95567,"depth":210,"text":95568},{"id":95607,"depth":210,"text":95608},{"id":95680,"depth":210,"text":95681},{"id":95748,"depth":210,"text":95749},{"id":95800,"depth":210,"text":95801},{"id":95844,"depth":210,"text":95845},{"id":95923,"depth":210,"text":95924},{"id":95990,"depth":210,"text":95991},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95308,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96077,"title":96078,"body":96079,"description":2384,"extension":2385,"meta":96734,"navigation":842,"path":96735,"seo":96736,"stem":96737,"__hash__":96738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96080,"toc":96722},[96081,96084,96088,96091,96307,96311,96314,96523,96527,96593,96598,96602,96605,96608,96646,96650,96653,96658,96662,96665,96668,96673,96677,96680,96684,96687,96690,96695,96699,96702,96705,96710,96714,96719],[10,96082,96078],{"id":96083},"_12其他常用函数",[14,96085,96087],{"id":96086},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96089,96090],{},"将数组的数据按照行列复制扩展",[130,96092,96094],{"className":132,"code":96093,"language":134,"meta":135,"style":135},"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",[50,96095,96096,96112,96121,96125,96130,96135,96148,96152,96157,96162,96167,96171,96176,96200,96212,96216,96220,96225,96230,96235,96240,96244,96257,96261,96265,96270,96275,96280,96285,96290,96294,96298,96303],{"__ignoreMap":135},[139,96097,96098,96100,96102,96104,96106,96108,96110],{"class":141,"line":142},[139,96099,2680],{"class":145},[139,96101,150],{"class":149},[139,96103,95230],{"class":145},[139,96105,410],{"class":153},[139,96107,2816],{"class":145},[139,96109,1481],{"class":153},[139,96111,164],{"class":145},[139,96113,96114,96117,96119],{"class":141,"line":210},[139,96115,96116],{"class":145},"np.tile(a,",[139,96118,416],{"class":153},[139,96120,164],{"class":145},[139,96122,96123],{"class":141,"line":254},[139,96124,95792],{"class":2512},[139,96126,96127],{"class":141,"line":262},[139,96128,96129],{"class":2512},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[139,96131,96132],{"class":141,"line":313},[139,96133,96134],{"class":2512},"#行复制两次，列复制三次\n",[139,96136,96137,96140,96142,96144,96146],{"class":141,"line":462},[139,96138,96139],{"class":145},"np.tile(a,(",[139,96141,416],{"class":153},[139,96143,2816],{"class":145},[139,96145,421],{"class":153},[139,96147,207],{"class":145},[139,96149,96150],{"class":141,"line":474},[139,96151,95792],{"class":2512},[139,96153,96154],{"class":141,"line":484},[139,96155,96156],{"class":160},"'''\n",[139,96158,96159],{"class":141,"line":989},[139,96160,96161],{"class":160},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[139,96163,96164],{"class":141,"line":994},[139,96165,96166],{"class":160},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[139,96168,96169],{"class":141,"line":999},[139,96170,96156],{"class":160},[139,96172,96173],{"class":141,"line":1006},[139,96174,96175],{"class":2512},"#创建二维数组\n",[139,96177,96178,96180,96182,96184,96186,96188,96190,96192,96194,96196,96198],{"class":141,"line":1027},[139,96179,95534],{"class":145},[139,96181,150],{"class":149},[139,96183,95230],{"class":145},[139,96185,410],{"class":153},[139,96187,2816],{"class":145},[139,96189,2959],{"class":153},[139,96191,95235],{"class":145},[139,96193,1476],{"class":153},[139,96195,2816],{"class":145},[139,96197,421],{"class":153},[139,96199,164],{"class":145},[139,96201,96202,96205,96207,96209],{"class":141,"line":1040},[139,96203,96204],{"class":145},"np.tile(aa,",[139,96206,416],{"class":153},[139,96208,2867],{"class":145},[139,96210,96211],{"class":2512},"#一个数的时候就是行\n",[139,96213,96214],{"class":141,"line":2160},[139,96215,95792],{"class":2512},[139,96217,96218],{"class":141,"line":2188},[139,96219,96156],{"class":160},[139,96221,96222],{"class":141,"line":3944},[139,96223,96224],{"class":160},"array([[ 1,  2,  3,  1,  2,  3],\n",[139,96226,96227],{"class":141,"line":3963},[139,96228,96229],{"class":160},"       [ 4,  5,  6,  4,  5,  6],\n",[139,96231,96232],{"class":141,"line":3968},[139,96233,96234],{"class":160},"       [ 7,  8,  9,  7,  8,  9],\n",[139,96236,96237],{"class":141,"line":3982},[139,96238,96239],{"class":160},"       [10, 11, 12, 10, 11, 12]])\n",[139,96241,96242],{"class":141,"line":3987},[139,96243,96156],{"class":160},[139,96245,96246,96249,96251,96253,96255],{"class":141,"line":4014},[139,96247,96248],{"class":145},"np.tile(aa,(",[139,96250,416],{"class":153},[139,96252,2816],{"class":145},[139,96254,421],{"class":153},[139,96256,207],{"class":145},[139,96258,96259],{"class":141,"line":4019},[139,96260,95792],{"class":2512},[139,96262,96263],{"class":141,"line":4036},[139,96264,96156],{"class":160},[139,96266,96267],{"class":141,"line":4041},[139,96268,96269],{"class":160},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[139,96271,96272],{"class":141,"line":4046},[139,96273,96274],{"class":160},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[139,96276,96277],{"class":141,"line":4051},[139,96278,96279],{"class":160},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[139,96281,96282],{"class":141,"line":4065},[139,96283,96284],{"class":160},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[139,96286,96287],{"class":141,"line":4070},[139,96288,96289],{"class":160},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[139,96291,96292],{"class":141,"line":4860},[139,96293,96274],{"class":160},[139,96295,96296],{"class":141,"line":4874},[139,96297,96279],{"class":160},[139,96299,96300],{"class":141,"line":4882},[139,96301,96302],{"class":160},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[139,96304,96305],{"class":141,"line":4887},[139,96306,96156],{"class":160},[14,96308,96310],{"id":96309},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96312,96313],{},"repeat()将数组中的每个元素重复若干次",[130,96315,96317],{"className":132,"code":96316,"language":134,"meta":135,"style":135},"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",[50,96318,96319,96335,96344,96348,96353,96377,96382,96391,96395,96400,96404,96409,96425,96429,96433,96438,96443,96448,96452,96457,96461,96466,96471,96475,96491,96495,96499,96504,96509,96514,96519],{"__ignoreMap":135},[139,96320,96321,96323,96325,96327,96329,96331,96333],{"class":141,"line":142},[139,96322,2680],{"class":145},[139,96324,150],{"class":149},[139,96326,95230],{"class":145},[139,96328,410],{"class":153},[139,96330,2816],{"class":145},[139,96332,1481],{"class":153},[139,96334,164],{"class":145},[139,96336,96337,96340,96342],{"class":141,"line":210},[139,96338,96339],{"class":145},"np.repeat(a,",[139,96341,421],{"class":153},[139,96343,164],{"class":145},[139,96345,96346],{"class":141,"line":254},[139,96347,95792],{"class":2512},[139,96349,96350],{"class":141,"line":262},[139,96351,96352],{"class":2512},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[139,96354,96355,96357,96359,96361,96363,96365,96367,96369,96371,96373,96375],{"class":141,"line":313},[139,96356,95534],{"class":145},[139,96358,150],{"class":149},[139,96360,95230],{"class":145},[139,96362,410],{"class":153},[139,96364,2816],{"class":145},[139,96366,2959],{"class":153},[139,96368,95235],{"class":145},[139,96370,1476],{"class":153},[139,96372,2816],{"class":145},[139,96374,421],{"class":153},[139,96376,164],{"class":145},[139,96378,96379],{"class":141,"line":462},[139,96380,96381],{"class":2512},"#这个重复之后二维变成一维\n",[139,96383,96384,96387,96389],{"class":141,"line":474},[139,96385,96386],{"class":145},"np.repeat(aa,",[139,96388,416],{"class":153},[139,96390,164],{"class":145},[139,96392,96393],{"class":141,"line":484},[139,96394,96156],{"class":160},[139,96396,96397],{"class":141,"line":989},[139,96398,96399],{"class":160},"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",[139,96401,96402],{"class":141,"line":994},[139,96403,96156],{"class":160},[139,96405,96406],{"class":141,"line":999},[139,96407,96408],{"class":2512},"#指定axis\n",[139,96410,96411,96413,96415,96417,96419,96421,96423],{"class":141,"line":1006},[139,96412,96386],{"class":145},[139,96414,416],{"class":153},[139,96416,2816],{"class":145},[139,96418,49752],{"class":2111},[139,96420,150],{"class":149},[139,96422,2634],{"class":153},[139,96424,164],{"class":145},[139,96426,96427],{"class":141,"line":1027},[139,96428,95792],{"class":2512},[139,96430,96431],{"class":141,"line":1040},[139,96432,96156],{"class":160},[139,96434,96435],{"class":141,"line":2160},[139,96436,96437],{"class":160},"array([[ 1,  2,  3],\n",[139,96439,96440],{"class":141,"line":2188},[139,96441,96442],{"class":160},"       [ 1,  2,  3],\n",[139,96444,96445],{"class":141,"line":3944},[139,96446,96447],{"class":160},"       [ 4,  5,  6],\n",[139,96449,96450],{"class":141,"line":3963},[139,96451,96447],{"class":160},[139,96453,96454],{"class":141,"line":3968},[139,96455,96456],{"class":160},"       [ 7,  8,  9],\n",[139,96458,96459],{"class":141,"line":3982},[139,96460,96456],{"class":160},[139,96462,96463],{"class":141,"line":3987},[139,96464,96465],{"class":160},"       [10, 11, 12],\n",[139,96467,96468],{"class":141,"line":4014},[139,96469,96470],{"class":160},"       [10, 11, 12]])\n",[139,96472,96473],{"class":141,"line":4019},[139,96474,96156],{"class":160},[139,96476,96477,96479,96481,96483,96485,96487,96489],{"class":141,"line":4036},[139,96478,96386],{"class":145},[139,96480,416],{"class":153},[139,96482,2816],{"class":145},[139,96484,49752],{"class":2111},[139,96486,150],{"class":149},[139,96488,410],{"class":153},[139,96490,164],{"class":145},[139,96492,96493],{"class":141,"line":4041},[139,96494,95792],{"class":2512},[139,96496,96497],{"class":141,"line":4046},[139,96498,96156],{"class":160},[139,96500,96501],{"class":141,"line":4051},[139,96502,96503],{"class":160},"array([[ 1,  1,  2,  2,  3,  3],\n",[139,96505,96506],{"class":141,"line":4065},[139,96507,96508],{"class":160},"       [ 4,  4,  5,  5,  6,  6],\n",[139,96510,96511],{"class":141,"line":4070},[139,96512,96513],{"class":160},"       [ 7,  7,  8,  8,  9,  9],\n",[139,96515,96516],{"class":141,"line":4860},[139,96517,96518],{"class":160},"       [10, 10, 11, 11, 12, 12]])\n",[139,96520,96521],{"class":141,"line":4874},[139,96522,96156],{"class":160},[14,96524,96526],{"id":96525},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[130,96528,96530],{"className":132,"code":96529,"language":134,"meta":135,"style":135},"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",[50,96531,96532,96548,96553,96565,96569,96574,96584,96588],{"__ignoreMap":135},[139,96533,96534,96536,96538,96540,96542,96544,96546],{"class":141,"line":142},[139,96535,2680],{"class":145},[139,96537,150],{"class":149},[139,96539,95230],{"class":145},[139,96541,410],{"class":153},[139,96543,2816],{"class":145},[139,96545,1481],{"class":153},[139,96547,164],{"class":145},[139,96549,96550],{"class":141,"line":210},[139,96551,96552],{"class":2512},"#array([，2，3，4])\n",[139,96554,96555,96558,96560,96562],{"class":141,"line":254},[139,96556,96557],{"class":145},"np.roll(a,",[139,96559,416],{"class":153},[139,96561,2867],{"class":145},[139,96563,96564],{"class":2512},"#传正数向后调多少位，传负数向前调多少位\n",[139,96566,96567],{"class":141,"line":262},[139,96568,95792],{"class":2512},[139,96570,96571],{"class":141,"line":313},[139,96572,96573],{"class":2512},"#array([3, 4, 1, 2])\n",[139,96575,96576,96578,96580,96582],{"class":141,"line":462},[139,96577,96557],{"class":145},[139,96579,855],{"class":149},[139,96581,410],{"class":153},[139,96583,164],{"class":145},[139,96585,96586],{"class":141,"line":474},[139,96587,95792],{"class":2512},[139,96589,96590],{"class":141,"line":484},[139,96591,96592],{"class":2512},"#array([2, 3, 4, 1])\n",[19,96594,96595],{},[3760,96596],{"alt":135,"src":96597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96599,96601],{"id":96600},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96603,96604],{},"resize()重新调整数组的大小",[19,96606,96607],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[130,96609,96611],{"className":132,"code":96610,"language":134,"meta":135,"style":135},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[50,96612,96613,96618,96631],{"__ignoreMap":135},[139,96614,96615],{"class":141,"line":142},[139,96616,96617],{"class":2512},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[139,96619,96620,96623,96625,96627,96629],{"class":141,"line":210},[139,96621,96622],{"class":145},"np.resize(aa,(",[139,96624,416],{"class":153},[139,96626,2816],{"class":145},[139,96628,2782],{"class":153},[139,96630,207],{"class":145},[139,96632,96633,96635,96637,96639,96641,96643],{"class":141,"line":254},[139,96634,96622],{"class":145},[139,96636,416],{"class":153},[139,96638,2816],{"class":145},[139,96640,2858],{"class":153},[139,96642,84999],{"class":145},[139,96644,96645],{"class":2512},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96647,96649],{"id":96648},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96651,96652],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96654,96655],{},[3760,96656],{"alt":135,"src":96657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96659,96661],{"id":96660},"_126-保存加载文件","12.6 保存加载文件",[19,96663,96664],{},"savetxt():将数据保存到txt文件中",[19,96666,96667],{},"loadtxt():从文件加载数据",[19,96669,96670],{},[3760,96671],{"alt":135,"src":96672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96674,96676],{"id":96675},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96678,96679],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96681,96683],{"id":96682},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96685,96686],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96688,96689],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96691,96692],{},[3760,96693],{"alt":135,"src":96694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96696,96698],{"id":96697},"_129-where语句","12.9 where语句",[19,96700,96701],{},"np.where(条件,x,y)",[19,96703,96704],{},"如果条件为True,对应值为x,否则对应值为y",[19,96706,96707],{},[3760,96708],{"alt":135,"src":96709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96711,96713],{"id":96712},"_1210-dot矩阵","12.10 dot()矩阵",[19,96715,96716],{},[3760,96717],{"alt":135,"src":96718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2348,96720,96721],{},"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":135,"searchDepth":210,"depth":210,"links":96723},[96724,96725,96726,96727,96728,96729,96730,96731,96732,96733],{"id":96086,"depth":210,"text":96087},{"id":96309,"depth":210,"text":96310},{"id":96525,"depth":210,"text":96526},{"id":96600,"depth":210,"text":96601},{"id":96648,"depth":210,"text":96649},{"id":96660,"depth":210,"text":96661},{"id":96675,"depth":210,"text":96676},{"id":96682,"depth":210,"text":96683},{"id":96697,"depth":210,"text":96698},{"id":96712,"depth":210,"text":96713},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96078,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96740,"title":96741,"body":96742,"description":2384,"extension":2385,"meta":97095,"navigation":842,"path":97096,"seo":97097,"stem":97098,"__hash__":97099},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96743,"toc":97093},[96744,96747,96750,96753,96756,96759,96824,96826,97090],[10,96745,96741],{"id":96746},"_13数组排序",[19,96748,96749],{},"排序主要用到的方法是np.sort和np.argsort",[19,96751,96752],{},"其中np.sort()对数组直接排序",[19,96754,96755],{},"而np.argsort()是返回排序后的原始索引",[19,96757,96758],{},"①一维数组",[130,96760,96762],{"className":132,"code":96761,"language":134,"meta":135,"style":135},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[50,96763,96764,96768,96808,96816],{"__ignoreMap":135},[139,96765,96766],{"class":141,"line":142},[139,96767,95333],{"class":2512},[139,96769,96770,96772,96774,96776,96778,96780,96782,96784,96786,96788,96790,96792,96794,96796,96798,96800,96802,96804,96806],{"class":141,"line":210},[139,96771,2680],{"class":145},[139,96773,150],{"class":149},[139,96775,95252],{"class":145},[139,96777,421],{"class":153},[139,96779,2816],{"class":145},[139,96781,2934],{"class":153},[139,96783,2816],{"class":145},[139,96785,2833],{"class":153},[139,96787,2816],{"class":145},[139,96789,3210],{"class":153},[139,96791,2816],{"class":145},[139,96793,2720],{"class":153},[139,96795,2816],{"class":145},[139,96797,3328],{"class":153},[139,96799,2816],{"class":145},[139,96801,2782],{"class":153},[139,96803,2816],{"class":145},[139,96805,536],{"class":153},[139,96807,6935],{"class":145},[139,96809,96810,96813],{"class":141,"line":254},[139,96811,96812],{"class":145},"np.sort(a)",[139,96814,96815],{"class":2512},"#升序排序\n",[139,96817,96818,96821],{"class":141,"line":262},[139,96819,96820],{"class":145},"np.argsort(a)",[139,96822,96823],{"class":2512},"#按照元素大小来索引排序\n",[19,96825,95519],{},[130,96827,96829],{"className":132,"code":96828,"language":134,"meta":135,"style":135},"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",[50,96830,96831,96843,96869,96874,96878,96883,96888,96893,96898,96902,96910,96914,96919,96924,96929,96934,96938,96943,96956,96960,96965,96970,96975,96980,96984,96989,97001,97005,97009,97013,97017,97021,97025,97030,97045,97050,97059,97064,97068,97072,97077,97081,97086],{"__ignoreMap":135},[139,96832,96833,96836,96838,96840],{"class":141,"line":142},[139,96834,96835],{"class":145},"np.random.seed(",[139,96837,2634],{"class":153},[139,96839,2867],{"class":145},[139,96841,96842],{"class":2512},"#保证每次值一样\n",[139,96844,96845,96847,96849,96851,96853,96855,96857,96859,96861,96863,96865,96867],{"class":141,"line":210},[139,96846,95534],{"class":145},[139,96848,150],{"class":149},[139,96850,95342],{"class":145},[139,96852,1017],{"class":153},[139,96854,2816],{"class":145},[139,96856,33745],{"class":2111},[139,96858,150],{"class":149},[139,96860,157],{"class":145},[139,96862,1476],{"class":153},[139,96864,2816],{"class":145},[139,96866,2782],{"class":153},[139,96868,207],{"class":145},[139,96870,96871],{"class":141,"line":254},[139,96872,96873],{"class":2512},"#原数组：\n",[139,96875,96876],{"class":141,"line":262},[139,96877,96156],{"class":160},[139,96879,96880],{"class":141,"line":313},[139,96881,96882],{"class":160},"array([[44, 47, 64, 67, 67,  9],\n",[139,96884,96885],{"class":141,"line":462},[139,96886,96887],{"class":160},"       [83, 21, 36, 87, 70, 88],\n",[139,96889,96890],{"class":141,"line":474},[139,96891,96892],{"class":160},"       [88, 12, 58, 65, 39, 87],\n",[139,96894,96895],{"class":141,"line":484},[139,96896,96897],{"class":160},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[139,96899,96900],{"class":141,"line":989},[139,96901,96156],{"class":160},[139,96903,96904,96907],{"class":141,"line":994},[139,96905,96906],{"class":145},"np.sort(aa)",[139,96908,96909],{"class":2512},"#每行进行了排序\n",[139,96911,96912],{"class":141,"line":999},[139,96913,96156],{"class":160},[139,96915,96916],{"class":141,"line":1006},[139,96917,96918],{"class":160},"array([[ 9, 44, 47, 64, 67, 67],\n",[139,96920,96921],{"class":141,"line":1027},[139,96922,96923],{"class":160},"       [21, 36, 70, 83, 87, 88],\n",[139,96925,96926],{"class":141,"line":1040},[139,96927,96928],{"class":160},"       [12, 39, 58, 65, 87, 88],\n",[139,96930,96931],{"class":141,"line":2160},[139,96932,96933],{"class":160},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[139,96935,96936],{"class":141,"line":2188},[139,96937,96156],{"class":160},[139,96939,96940],{"class":141,"line":3944},[139,96941,96942],{"class":2512},"#axis=0时\n",[139,96944,96945,96948,96950,96952,96954],{"class":141,"line":3963},[139,96946,96947],{"class":145},"np.sort(aa,",[139,96949,49752],{"class":2111},[139,96951,150],{"class":149},[139,96953,2634],{"class":153},[139,96955,164],{"class":145},[139,96957,96958],{"class":141,"line":3968},[139,96959,96156],{"class":160},[139,96961,96962],{"class":141,"line":3982},[139,96963,96964],{"class":160},"array([[44, 12, 36, 37, 25,  9],\n",[139,96966,96967],{"class":141,"line":3987},[139,96968,96969],{"class":160},"       [46, 21, 58, 65, 39, 77],\n",[139,96971,96972],{"class":141,"line":4014},[139,96973,96974],{"class":160},"       [83, 47, 64, 67, 67, 87],\n",[139,96976,96977],{"class":141,"line":4019},[139,96978,96979],{"class":160},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[139,96981,96982],{"class":141,"line":4036},[139,96983,96156],{"class":160},[139,96985,96986],{"class":141,"line":4041},[139,96987,96988],{"class":2512},"#axis=1时,为默认值\n",[139,96990,96991,96993,96995,96997,96999],{"class":141,"line":4046},[139,96992,96947],{"class":145},[139,96994,49752],{"class":2111},[139,96996,150],{"class":149},[139,96998,410],{"class":153},[139,97000,164],{"class":145},[139,97002,97003],{"class":141,"line":4051},[139,97004,96156],{"class":160},[139,97006,97007],{"class":141,"line":4065},[139,97008,96918],{"class":160},[139,97010,97011],{"class":141,"line":4070},[139,97012,96923],{"class":160},[139,97014,97015],{"class":141,"line":4860},[139,97016,96928],{"class":160},[139,97018,97019],{"class":141,"line":4874},[139,97020,96933],{"class":160},[139,97022,97023],{"class":141,"line":4882},[139,97024,96156],{"class":160},[139,97026,97027],{"class":141,"line":4887},[139,97028,97029],{"class":2512},"#按最后一列排序\n",[139,97031,97032,97034,97036,97039,97041,97043],{"class":141,"line":4893},[139,97033,2704],{"class":145},[139,97035,150],{"class":149},[139,97037,97038],{"class":145},"aa[:,",[139,97040,855],{"class":149},[139,97042,410],{"class":153},[139,97044,424],{"class":145},[139,97046,97047],{"class":141,"line":4899},[139,97048,97049],{"class":2512},"#获取最后一列排好序的索引\n",[139,97051,97052,97054,97056],{"class":141,"line":4904},[139,97053,76287],{"class":145},[139,97055,150],{"class":149},[139,97057,97058],{"class":145},"np.argsort(b)\n",[139,97060,97061],{"class":141,"line":10222},[139,97062,97063],{"class":145},"aa[index]\n",[139,97065,97066],{"class":141,"line":10246},[139,97067,96156],{"class":160},[139,97069,97070],{"class":141,"line":10251},[139,97071,96882],{"class":160},[139,97073,97074],{"class":141,"line":10257},[139,97075,97076],{"class":160},"       [46, 88, 81, 37, 25, 77],\n",[139,97078,97079],{"class":141,"line":10284},[139,97080,96892],{"class":160},[139,97082,97083],{"class":141,"line":10289},[139,97084,97085],{"class":160},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[139,97087,97088],{"class":141,"line":10295},[139,97089,96156],{"class":160},[2348,97091,97092],{},"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":135,"searchDepth":210,"depth":210,"links":97094},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96741,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97101,"title":97102,"body":97103,"description":2384,"extension":2385,"meta":97133,"navigation":842,"path":97134,"seo":97135,"stem":97136,"__hash__":97137},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97104,"toc":97131},[97105,97108,97111,97114,97117,97120,97123,97126],[10,97106,97102],{"id":97107},"_14广播机制",[19,97109,97110],{},"广播的规则：",[19,97112,97113],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97115,97116],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97118,97119],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97121,97122],{},"3.如果没有维度形状为1，则会引发异常",[19,97124,97125],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97127,97128],{},[3760,97129],{"alt":135,"src":97130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":135,"searchDepth":210,"depth":210,"links":97132},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97102,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97139,"title":97140,"body":97141,"description":2384,"extension":2385,"meta":97239,"navigation":842,"path":97240,"seo":97241,"stem":97242,"__hash__":97243},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97142,"toc":97237},[97143,97146,97149,97234],[10,97144,97140],{"id":97145},"_15比较掩码",[19,97147,97148],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[130,97150,97152],{"className":132,"code":97151,"language":134,"meta":135,"style":135},"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",[50,97153,97154,97200,97211,97225,97229],{"__ignoreMap":135},[139,97155,97156,97158,97160,97163,97165,97167,97169,97171,97173,97175,97177,97179,97181,97183,97185,97187,97189,97191,97193,97195,97197],{"class":141,"line":142},[139,97157,2680],{"class":145},[139,97159,150],{"class":149},[139,97161,97162],{"class":145},"np.array([[",[139,97164,410],{"class":153},[139,97166,2816],{"class":145},[139,97168,416],{"class":153},[139,97170,2816],{"class":145},[139,97172,421],{"class":153},[139,97174,50268],{"class":145},[139,97176,2909],{"class":153},[139,97178,2816],{"class":145},[139,97180,2934],{"class":153},[139,97182,2816],{"class":145},[139,97184,2959],{"class":153},[139,97186,50268],{"class":145},[139,97188,3160],{"class":153},[139,97190,2816],{"class":145},[139,97192,3185],{"class":153},[139,97194,2816],{"class":145},[139,97196,3210],{"class":153},[139,97198,97199],{"class":145},"]])\n",[139,97201,97202,97204,97206,97208],{"class":141,"line":210},[139,97203,2680],{"class":145},[139,97205,796],{"class":149},[139,97207,3135],{"class":153},[139,97209,97210],{"class":2512},"#结果是一个由True,False组成的数组\n",[139,97212,97213,97216,97218,97220,97222],{"class":141,"line":254},[139,97214,97215],{"class":145},"a[a",[139,97217,796],{"class":149},[139,97219,3135],{"class":153},[139,97221,3373],{"class":145},[139,97223,97224],{"class":2512},"#小于20的元素会存到这个数组中\n",[139,97226,97227],{"class":141,"line":262},[139,97228,95792],{"class":2512},[139,97230,97231],{"class":141,"line":313},[139,97232,97233],{"class":2512},"#array([ 1,  2,  3, 11, 12, 13])\n",[2348,97235,97236],{},"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":135,"searchDepth":210,"depth":210,"links":97238},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97140,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97245,"title":97246,"body":97247,"description":2384,"extension":2385,"meta":97338,"navigation":842,"path":97339,"seo":97340,"stem":97341,"__hash__":97342},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97248,"toc":97336},[97249,97252,97255,97258,97261,97264,97328,97333],[10,97250,97246],{"id":97251},"_16魔法命令time",[19,97253,97254],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97256,97257],{},"%:行模式",[19,97259,97260],{},"%%:单元格模式",[19,97262,97263],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[130,97265,97267],{"className":132,"code":97266,"language":134,"meta":135,"style":135},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[50,97268,97269,97274,97281,97286,97295,97307,97311,97319],{"__ignoreMap":135},[139,97270,97271],{"class":141,"line":142},[139,97272,97273],{"class":2512},"#程序执行时间\n",[139,97275,97276,97278],{"class":141,"line":210},[139,97277,1064],{"class":149},[139,97279,97280],{"class":145}," time \n",[139,97282,97283],{"class":141,"line":254},[139,97284,97285],{"class":2512},"#获取时间\n",[139,97287,97288,97291,97293],{"class":141,"line":262},[139,97289,97290],{"class":145},"start",[139,97292,150],{"class":149},[139,97294,34665],{"class":145},[139,97296,97297,97299,97302,97304],{"class":141,"line":313},[139,97298,1520],{"class":145},[139,97300,97301],{"class":153},"0.4",[139,97303,2867],{"class":145},[139,97305,97306],{"class":2512},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[139,97308,97309],{"class":141,"line":462},[139,97310,97285],{"class":2512},[139,97312,97313,97315,97317],{"class":141,"line":474},[139,97314,48039],{"class":145},[139,97316,150],{"class":149},[139,97318,34665],{"class":145},[139,97320,97321,97323,97325],{"class":141,"line":484},[139,97322,48039],{"class":145},[139,97324,855],{"class":149},[139,97326,97327],{"class":145},"start\n",[19,97329,97330],{},[3760,97331],{"alt":135,"src":97332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2348,97334,97335],{},"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":135,"searchDepth":210,"depth":210,"links":97337},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97246,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97344,"title":97345,"body":97346,"description":2384,"extension":2385,"meta":97381,"navigation":842,"path":97382,"seo":97383,"stem":97384,"__hash__":97385},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97347,"toc":97379},[97348,97351,97354,97357,97360,97363,97366,97369,97374],[10,97349,97345],{"id":97350},"_17魔法命令timeit",[19,97352,97353],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97355,97356],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97358,97359],{},"单元格模式：",[19,97361,97362],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97364,97365],{},"初始化语句执行次数由轮数来决定",[19,97367,97368],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97370,97371],{},[3760,97372],{"alt":135,"src":97373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97375,97376],{},[3760,97377],{"alt":135,"src":97378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":135,"searchDepth":210,"depth":210,"links":97380},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97345,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97387,"title":97388,"body":97389,"description":2384,"extension":2385,"meta":97407,"navigation":842,"path":97408,"seo":97409,"stem":97410,"__hash__":97411},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97390,"toc":97405},[97391,97394,97397,97400],[10,97392,97388],{"id":97393},"_18魔法命令writefile和run",[19,97395,97396],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97398,97399],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97401,97402],{},[3760,97403],{"alt":135,"src":97404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":135,"searchDepth":210,"depth":210,"links":97406},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97388,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97413,"title":97414,"body":97415,"description":2384,"extension":2385,"meta":97468,"navigation":842,"path":97469,"seo":97470,"stem":97471,"__hash__":97472},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97416,"toc":97466},[97417,97420,97423,97425,97428,97431,97436,97439,97442,97445,97448,97451,97454,97457,97460,97463],[10,97418,97414],{"id":97419},"_19魔法命令memit",[19,97421,97422],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97424,26863],{},[19,97426,97427],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97429,97430],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97432,97433],{},[3760,97434],{"alt":135,"src":97435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97437,97438],{},"补充：",[19,97440,97441],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97443,97444],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97446,97447],{},"解决方法：",[19,97449,97450],{},"1.cmd",[19,97452,97453],{},"2.依次输入以下代码：",[19,97455,97456],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97458,97459],{},"pip install --upgrade ipython",[19,97461,97462],{},"#升级 memory_profiler 和 setuptools",[19,97464,97465],{},"pip install --upgrade memory_profiler setuptools",{"title":135,"searchDepth":210,"depth":210,"links":97467},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97414,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97474,"title":97475,"body":97476,"description":2384,"extension":2385,"meta":99122,"navigation":842,"path":99123,"seo":99124,"stem":99125,"__hash__":99126},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97477,"toc":99092},[97478,97481,97485,97489,97550,97553,97558,97562,97567,97572,97577,97582,97585,97590,97594,97598,97631,97634,97637,97640,97692,97695,97731,97734,97776,97780,97801,97803,97840,97842,97847,97849,97854,97858,97861,97889,97893,97897,97950,97954,98046,98050,98054,98057,98062,98066,98091,98096,98100,98103,98106,98109,98112,98115,98118,98121,98133,98137,98141,98144,98176,98179,98202,98205,98231,98234,98260,98263,98297,98300,98362,98366,98369,98373,98376,98402,98405,98408,98413,98416,98485,98487,98492,98553,98556,98567,98573,98578,98582,98585,98598,98602,98617,98619,98642,98644,98670,98673,98676,98679,98727,98729,98734,98738,98742,98769,98773,98800,98803,98808,98813,98903,98907,98965,98970,98973,98976,99018,99022,99078,99083,99086,99089],[10,97479,97475],{"id":97480},"_2创建数组",[14,97482,97484],{"id":97483},"_21-array函数创建数组","2.1 array()函数创建数组",[1217,97486,97488],{"id":97487},"_221-函数语句","2.2.1 函数语句",[130,97490,97492],{"className":132,"code":97491,"language":134,"meta":135,"style":135},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[50,97493,97494],{"__ignoreMap":135},[139,97495,97496,97499,97502,97504,97506,97508,97510,97512,97515,97517,97520,97522,97525,97527,97529,97531,97534,97536,97539,97541,97544,97546,97548],{"class":141,"line":142},[139,97497,97498],{"class":145},"numpy.array(",[139,97500,97501],{"class":153},"object",[139,97503,413],{"class":145},[139,97505,95728],{"class":2111},[139,97507,15836],{"class":149},[139,97509,41175],{"class":153},[139,97511,413],{"class":145},[139,97513,97514],{"class":2111},"copy",[139,97516,15836],{"class":149},[139,97518,97519],{"class":153}," True",[139,97521,413],{"class":145},[139,97523,97524],{"class":2111},"order",[139,97526,15836],{"class":149},[139,97528,41175],{"class":153},[139,97530,413],{"class":145},[139,97532,97533],{"class":2111},"subok",[139,97535,15836],{"class":149},[139,97537,97538],{"class":153}," False",[139,97540,413],{"class":145},[139,97542,97543],{"class":2111},"ndmin",[139,97545,15836],{"class":149},[139,97547,799],{"class":153},[139,97549,164],{"class":145},[19,97551,97552],{},"参数：",[19,97554,97555],{},[3760,97556],{"alt":135,"src":97557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1217,97559,97561],{"id":97560},"_222-实例","2.2.2 实例",[19,97563,97564],{},[3760,97565],{"alt":135,"src":97566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97568,97569],{},[3760,97570],{"alt":135,"src":97571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97573,97574],{},[3760,97575],{"alt":135,"src":97576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97578,97579],{},[3760,97580],{"alt":135,"src":97581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97583,97584],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97586,97587],{},[3760,97588],{"alt":135,"src":97589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97591,97593],{"id":97592},"_22-随机数创建数组","2.2 随机数创建数组",[1217,97595,97597],{"id":97596},"_221-random语句","2.2.1 random语句",[130,97599,97601],{"className":132,"code":97600,"language":134,"meta":135,"style":135},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[50,97602,97603,97608,97613,97621,97626],{"__ignoreMap":135},[139,97604,97605],{"class":141,"line":142},[139,97606,97607],{"class":2512},"#random.random()\n",[139,97609,97610],{"class":141,"line":210},[139,97611,97612],{"class":2512},"#确定随机种子,就是每次运行结果是相同的\n",[139,97614,97615,97617,97619],{"class":141,"line":254},[139,97616,96835],{"class":145},[139,97618,2634],{"class":153},[139,97620,164],{"class":145},[139,97622,97623],{"class":141,"line":262},[139,97624,97625],{"class":145},"np.random.random()\n",[139,97627,97628],{"class":141,"line":313},[139,97629,97630],{"class":2512},"#生成一个随机的数目\n",[19,97632,97633],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97635,97636],{},"可以指定数组形状 size",[19,97638,97639],{},"①生成一维数组",[130,97641,97643],{"className":132,"code":97642,"language":134,"meta":135,"style":135},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[50,97644,97645,97650,97663,97668,97684],{"__ignoreMap":135},[139,97646,97647],{"class":141,"line":142},[139,97648,97649],{"class":2512},"#random.random(size())\n",[139,97651,97652,97655,97657,97659,97661],{"class":141,"line":210},[139,97653,97654],{"class":145},"np.random.random(",[139,97656,33745],{"class":2111},[139,97658,150],{"class":149},[139,97660,1481],{"class":153},[139,97662,164],{"class":145},[139,97664,97665],{"class":141,"line":254},[139,97666,97667],{"class":2512},"#生成一位的五个元素\n",[139,97669,97670,97672,97674,97676,97678,97680,97682],{"class":141,"line":262},[139,97671,2680],{"class":145},[139,97673,150],{"class":149},[139,97675,97654],{"class":145},[139,97677,33745],{"class":2111},[139,97679,150],{"class":149},[139,97681,1476],{"class":153},[139,97683,164],{"class":145},[139,97685,97686,97689],{"class":141,"line":313},[139,97687,97688],{"class":145},"a.shape ",[139,97690,97691],{"class":2512},"#输出数组形状\n",[19,97693,97694],{},"②生成二维数组",[130,97696,97698],{"className":132,"code":97697,"language":134,"meta":135,"style":135},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[50,97699,97700,97704,97726],{"__ignoreMap":135},[139,97701,97702],{"class":141,"line":142},[139,97703,95529],{"class":2512},[139,97705,97706,97708,97710,97712,97714,97716,97718,97720,97722,97724],{"class":141,"line":210},[139,97707,95534],{"class":145},[139,97709,150],{"class":149},[139,97711,97654],{"class":145},[139,97713,33745],{"class":2111},[139,97715,150],{"class":149},[139,97717,157],{"class":145},[139,97719,1476],{"class":153},[139,97721,2816],{"class":145},[139,97723,1481],{"class":153},[139,97725,207],{"class":145},[139,97727,97728],{"class":141,"line":254},[139,97729,97730],{"class":2512},"#生成四行五列的数组\n",[19,97732,97733],{},"③生成三维数组",[130,97735,97737],{"className":132,"code":97736,"language":134,"meta":135,"style":135},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[50,97738,97739,97744,97771],{"__ignoreMap":135},[139,97740,97741],{"class":141,"line":142},[139,97742,97743],{"class":2512},"#三维数组\n",[139,97745,97746,97749,97751,97753,97755,97757,97759,97761,97763,97765,97767,97769],{"class":141,"line":210},[139,97747,97748],{"class":145},"aaa",[139,97750,150],{"class":149},[139,97752,97654],{"class":145},[139,97754,33745],{"class":2111},[139,97756,150],{"class":149},[139,97758,157],{"class":145},[139,97760,416],{"class":153},[139,97762,2816],{"class":145},[139,97764,421],{"class":153},[139,97766,2816],{"class":145},[139,97768,1476],{"class":153},[139,97770,207],{"class":145},[139,97772,97773],{"class":141,"line":254},[139,97774,97775],{"class":145},"aaa.shape\n",[1217,97777,97779],{"id":97778},"_222-randint语句","2.2.2 randint语句",[130,97781,97783],{"className":132,"code":97782,"language":134,"meta":135,"style":135},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[50,97784,97785,97790],{"__ignoreMap":135},[139,97786,97787],{"class":141,"line":142},[139,97788,97789],{"class":2512},"#生成随机的整数 random.randint(low,high,size)\n",[139,97791,97792,97794,97796,97798],{"class":141,"line":210},[139,97793,95342],{"class":145},[139,97795,1481],{"class":153},[139,97797,2120],{"class":145},[139,97799,97800],{"class":2512},"#0~5中的随机一个数\n",[19,97802,97639],{},[130,97804,97806],{"className":132,"code":97805,"language":134,"meta":135,"style":135},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[50,97807,97808,97813,97835],{"__ignoreMap":135},[139,97809,97810],{"class":141,"line":142},[139,97811,97812],{"class":2512},"#一维\n",[139,97814,97815,97817,97819,97821,97823,97825,97827,97829,97831,97833],{"class":141,"line":210},[139,97816,95342],{"class":145},[139,97818,410],{"class":153},[139,97820,2816],{"class":145},[139,97822,2909],{"class":153},[139,97824,2816],{"class":145},[139,97826,33745],{"class":2111},[139,97828,150],{"class":149},[139,97830,157],{"class":145},[139,97832,536],{"class":153},[139,97834,207],{"class":145},[139,97836,97837],{"class":141,"line":254},[139,97838,97839],{"class":2512},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97841,97694],{},[19,97843,97844],{},[3760,97845],{"alt":135,"src":97846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97848,97733],{},[19,97850,97851],{},[3760,97852],{"alt":135,"src":97853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1217,97855,97857],{"id":97856},"_222-rand语句","2.2.2 rand语句",[19,97859,97860],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[130,97862,97864],{"className":132,"code":97863,"language":134,"meta":135,"style":135},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[50,97865,97866,97879,97884],{"__ignoreMap":135},[139,97867,97868,97871,97873,97875,97877],{"class":141,"line":142},[139,97869,97870],{"class":145},"np.random.rand(",[139,97872,1017],{"class":153},[139,97874,2816],{"class":145},[139,97876,536],{"class":153},[139,97878,164],{"class":145},[139,97880,97881],{"class":141,"line":210},[139,97882,97883],{"class":2512},"#第一个参数100：行数，表示有100个样本\n",[139,97885,97886],{"class":141,"line":254},[139,97887,97888],{"class":2512},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97890,97892],{"id":97891},"_23-arange创建数组","2.3 arange()创建数组",[1217,97894,97896],{"id":97895},"_231-函数语句","2.3.1 函数语句",[130,97898,97900],{"className":132,"code":97899,"language":134,"meta":135,"style":135},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[50,97901,97902,97916,97921,97926,97931,97936,97941,97946],{"__ignoreMap":135},[139,97903,97904,97907,97909,97911,97914],{"class":141,"line":142},[139,97905,97906],{"class":145},"numpy.arange([start,] stop[, step], ",[139,97908,95728],{"class":2111},[139,97910,150],{"class":149},[139,97912,97913],{"class":153},"None",[139,97915,164],{"class":145},[139,97917,97918],{"class":141,"line":210},[139,97919,97920],{"class":2512},"#参数\n",[139,97922,97923],{"class":141,"line":254},[139,97924,97925],{"class":160},"\"\"\"\n",[139,97927,97928],{"class":141,"line":262},[139,97929,97930],{"class":160},"start:起始值，可选，默认从 0 开始。\n",[139,97932,97933],{"class":141,"line":313},[139,97934,97935],{"class":160},"stop:结束值（不包含该值）。\n",[139,97937,97938],{"class":141,"line":462},[139,97939,97940],{"class":160},"step:步长，可选，默认是 1。可以为浮点数。\n",[139,97942,97943],{"class":141,"line":474},[139,97944,97945],{"class":160},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[139,97947,97948],{"class":141,"line":484},[139,97949,97925],{"class":160},[1217,97951,97953],{"id":97952},"_232-实例","2.3.2 实例",[130,97955,97957],{"className":132,"code":97956,"language":134,"meta":135,"style":135},"#创建一维数组\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",[50,97958,97959,97963,97987,97992,97997,98001,98024,98028,98032,98037,98042],{"__ignoreMap":135},[139,97960,97961],{"class":141,"line":142},[139,97962,95333],{"class":2512},[139,97964,97965,97967,97969,97971,97973,97975,97977,97979,97981,97983,97985],{"class":141,"line":210},[139,97966,95230],{"class":145},[139,97968,410],{"class":153},[139,97970,2816],{"class":145},[139,97972,3160],{"class":153},[139,97974,2816],{"class":145},[139,97976,410],{"class":153},[139,97978,2816],{"class":145},[139,97980,95728],{"class":2111},[139,97982,150],{"class":149},[139,97984,2461],{"class":153},[139,97986,164],{"class":145},[139,97988,97989],{"class":141,"line":254},[139,97990,97991],{"class":2512},"#输出结果：\n",[139,97993,97994],{"class":141,"line":262},[139,97995,97996],{"class":2512},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[139,97998,97999],{"class":141,"line":313},[139,98000,96175],{"class":2512},[139,98002,98003,98006,98008,98010,98012,98015,98017,98019,98021],{"class":141,"line":462},[139,98004,98005],{"class":145},"np.array([np.arange(",[139,98007,410],{"class":153},[139,98009,2816],{"class":145},[139,98011,1476],{"class":153},[139,98013,98014],{"class":145},"),np.arange(",[139,98016,1476],{"class":153},[139,98018,2816],{"class":145},[139,98020,2807],{"class":153},[139,98022,98023],{"class":145},")])\n",[139,98025,98026],{"class":141,"line":474},[139,98027,95792],{"class":2512},[139,98029,98030],{"class":141,"line":484},[139,98031,97925],{"class":160},[139,98033,98034],{"class":141,"line":989},[139,98035,98036],{"class":160},"array([[1, 2, 3],\n",[139,98038,98039],{"class":141,"line":994},[139,98040,98041],{"class":160},"       [4, 5, 6]])\n",[139,98043,98044],{"class":141,"line":999},[139,98045,97925],{"class":160},[14,98047,98049],{"id":98048},"_24-生态分布","2.4 生态分布",[1217,98051,98053],{"id":98052},"_241-标准正态分布","2.4.1 标准正态分布",[19,98055,98056],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98058,98059],{},[3760,98060],{"alt":135,"src":98061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1217,98063,98065],{"id":98064},"_242-常规正态分布","2.4.2 常规正态分布",[130,98067,98069],{"className":132,"code":98068,"language":134,"meta":135,"style":135},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[50,98070,98071,98076,98081,98086],{"__ignoreMap":135},[139,98072,98073],{"class":141,"line":142},[139,98074,98075],{"class":145},"random.normal(loc,scale,size)也可以生成正态分布\n",[139,98077,98078],{"class":141,"line":210},[139,98079,98080],{"class":2512},"#loc:期望\n",[139,98082,98083],{"class":141,"line":254},[139,98084,98085],{"class":2512},"#scale:方差\n",[139,98087,98088],{"class":141,"line":262},[139,98089,98090],{"class":2512},"#size:用于确定是几维的数列\n",[19,98092,98093],{},[3760,98094],{"alt":135,"src":98095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98097,98099],{"id":98098},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98101,98102],{},"ndim:秩，维度个数",[19,98104,98105],{},"size:数组元素的个数",[19,98107,98108],{},"shape:数组的形状",[19,98110,98111],{},"dtype:数组元素的类型",[19,98113,98114],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98116,98117],{},"他们都是属性，通过数组.属性的形式来确定",[19,98119,98120],{},"如果需要输出多个可以通过以下方式：",[130,98122,98124],{"className":132,"code":98123,"language":134,"meta":135,"style":135},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[50,98125,98126],{"__ignoreMap":135},[139,98127,98128,98130],{"class":141,"line":142},[139,98129,213],{"class":153},[139,98131,98132],{"class":145},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98134,98136],{"id":98135},"_26-其他方式创建数组","2.6 其他方式创建数组",[1217,98138,98140],{"id":98139},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98142,98143],{},"①创建一维数组",[130,98145,98147],{"className":132,"code":98146,"language":134,"meta":135,"style":135},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[50,98148,98149,98158,98162,98167,98172],{"__ignoreMap":135},[139,98150,98151,98154,98156],{"class":141,"line":142},[139,98152,98153],{"class":145},"np.zeros(",[139,98155,536],{"class":153},[139,98157,164],{"class":145},[139,98159,98160],{"class":141,"line":210},[139,98161,97925],{"class":160},[139,98163,98164],{"class":141,"line":254},[139,98165,98166],{"class":160},"输出结果：\n",[139,98168,98169],{"class":141,"line":262},[139,98170,98171],{"class":160},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[139,98173,98174],{"class":141,"line":313},[139,98175,97925],{"class":160},[19,98177,98178],{},"上方代码等价于：",[130,98180,98182],{"className":132,"code":98181,"language":134,"meta":135,"style":135},"np.zeros(shape=(10))#创建10个元素的0数组\n",[50,98183,98184],{"__ignoreMap":135},[139,98185,98186,98188,98191,98193,98195,98197,98199],{"class":141,"line":142},[139,98187,98153],{"class":145},[139,98189,98190],{"class":2111},"shape",[139,98192,150],{"class":149},[139,98194,157],{"class":145},[139,98196,536],{"class":153},[139,98198,84999],{"class":145},[139,98200,98201],{"class":2512},"#创建10个元素的0数组\n",[19,98203,98204],{},"也可以指定类型",[130,98206,98208],{"className":132,"code":98207,"language":134,"meta":135,"style":135},"#指定类型\nnp.zeros(5,dtype=int)\n",[50,98209,98210,98215],{"__ignoreMap":135},[139,98211,98212],{"class":141,"line":142},[139,98213,98214],{"class":2512},"#指定类型\n",[139,98216,98217,98219,98221,98223,98225,98227,98229],{"class":141,"line":210},[139,98218,98153],{"class":145},[139,98220,1481],{"class":153},[139,98222,2816],{"class":145},[139,98224,95728],{"class":2111},[139,98226,150],{"class":149},[139,98228,2461],{"class":153},[139,98230,164],{"class":145},[19,98232,98233],{},"②创建二维数组",[130,98235,98237],{"className":132,"code":98236,"language":134,"meta":135,"style":135},"np.zeros((3,4),dtype=int)\n",[50,98238,98239],{"__ignoreMap":135},[139,98240,98241,98244,98246,98248,98250,98252,98254,98256,98258],{"class":141,"line":142},[139,98242,98243],{"class":145},"np.zeros((",[139,98245,421],{"class":153},[139,98247,2816],{"class":145},[139,98249,1476],{"class":153},[139,98251,44498],{"class":145},[139,98253,95728],{"class":2111},[139,98255,150],{"class":149},[139,98257,2461],{"class":153},[139,98259,164],{"class":145},[19,98261,98262],{},"③创建三维数组",[130,98264,98266],{"className":132,"code":98265,"language":134,"meta":135,"style":135},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[50,98267,98268,98273],{"__ignoreMap":135},[139,98269,98270],{"class":141,"line":142},[139,98271,98272],{"class":2512},"#创建三维数组\n",[139,98274,98275,98277,98279,98281,98283,98285,98287,98289,98291,98293,98295],{"class":141,"line":210},[139,98276,98243],{"class":145},[139,98278,421],{"class":153},[139,98280,2816],{"class":145},[139,98282,1476],{"class":153},[139,98284,2816],{"class":145},[139,98286,1481],{"class":153},[139,98288,44498],{"class":145},[139,98290,95728],{"class":2111},[139,98292,150],{"class":149},[139,98294,2461],{"class":153},[139,98296,164],{"class":145},[19,98298,98299],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[130,98301,98303],{"className":132,"code":98302,"language":134,"meta":135,"style":135},"#使用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",[50,98304,98305,98310,98325,98330,98335,98357],{"__ignoreMap":135},[139,98306,98307],{"class":141,"line":142},[139,98308,98309],{"class":2512},"#使用zeros_like将创建的一维数组变成全0的数组\n",[139,98311,98312,98314,98316,98318,98320,98322],{"class":141,"line":210},[139,98313,2680],{"class":145},[139,98315,150],{"class":149},[139,98317,95230],{"class":145},[139,98319,1476],{"class":153},[139,98321,2867],{"class":145},[139,98323,98324],{"class":2512},"#这个得到的结果：一维数组0，1，2，3\n",[139,98326,98327],{"class":141,"line":254},[139,98328,98329],{"class":145},"np.zeros_like(a)\n",[139,98331,98332],{"class":141,"line":262},[139,98333,98334],{"class":2512},"#使用zeros_like将创建的二维数组变成全0的数组\n",[139,98336,98337,98339,98341,98343,98345,98347,98349,98351,98353,98355],{"class":141,"line":313},[139,98338,95534],{"class":145},[139,98340,150],{"class":149},[139,98342,97654],{"class":145},[139,98344,33745],{"class":2111},[139,98346,150],{"class":149},[139,98348,157],{"class":145},[139,98350,1476],{"class":153},[139,98352,2816],{"class":145},[139,98354,1481],{"class":153},[139,98356,207],{"class":145},[139,98358,98359],{"class":141,"line":462},[139,98360,98361],{"class":145},"np.zeros_like(aa)\n",[1217,98363,98365],{"id":98364},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98367,98368],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1217,98370,98372],{"id":98371},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98374,98375],{},"①empty()用法",[130,98377,98379],{"className":132,"code":98378,"language":134,"meta":135,"style":135},"numpy.empty(shape,dtype=float,order='c')\n",[50,98380,98381],{"__ignoreMap":135},[139,98382,98383,98386,98388,98390,98392,98394,98396,98398,98400],{"class":141,"line":142},[139,98384,98385],{"class":145},"numpy.empty(shape,",[139,98387,95728],{"class":2111},[139,98389,150],{"class":149},[139,98391,2496],{"class":153},[139,98393,2816],{"class":145},[139,98395,97524],{"class":2111},[139,98397,150],{"class":149},[139,98399,78257],{"class":160},[139,98401,164],{"class":145},[19,98403,98404],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98406,98407],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98409,98410],{},[3760,98411],{"alt":135,"src":98412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98414,98415],{},"②empty()用法",[130,98417,98419],{"className":132,"code":98418,"language":134,"meta":135,"style":135},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[50,98420,98421,98442,98454,98475,98480],{"__ignoreMap":135},[139,98422,98423,98425,98427,98430,98432,98434,98436,98438,98440],{"class":141,"line":142},[139,98424,3280],{"class":145},[139,98426,150],{"class":149},[139,98428,98429],{"class":145},"np.empty(",[139,98431,536],{"class":153},[139,98433,2816],{"class":145},[139,98435,95728],{"class":2111},[139,98437,150],{"class":149},[139,98439,2461],{"class":153},[139,98441,164],{"class":145},[139,98443,98444,98446,98448,98450,98452],{"class":141,"line":210},[139,98445,3255],{"class":145},[139,98447,150],{"class":149},[139,98449,95230],{"class":145},[139,98451,1481],{"class":153},[139,98453,164],{"class":145},[139,98455,98456,98459,98461,98464,98466,98468,98471,98473],{"class":141,"line":254},[139,98457,98458],{"class":145},"np.add(",[139,98460,416],{"class":153},[139,98462,98463],{"class":145},",x,",[139,98465,95282],{"class":2111},[139,98467,150],{"class":149},[139,98469,98470],{"class":145},"y[:",[139,98472,1481],{"class":153},[139,98474,6935],{"class":145},[139,98476,98477],{"class":141,"line":262},[139,98478,98479],{"class":2512},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[139,98481,98482],{"class":141,"line":313},[139,98483,98484],{"class":145},"y\n",[19,98486,13787],{},[19,98488,98489],{},[3760,98490],{"alt":135,"src":98491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[130,98493,98495],{"className":132,"code":98494,"language":134,"meta":135,"style":135},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[50,98496,98497,98513,98533,98548],{"__ignoreMap":135},[139,98498,98499,98501,98503,98505,98507,98509,98511],{"class":141,"line":142},[139,98500,3255],{"class":145},[139,98502,150],{"class":149},[139,98504,95230],{"class":145},[139,98506,410],{"class":153},[139,98508,2816],{"class":145},[139,98510,2782],{"class":153},[139,98512,164],{"class":145},[139,98514,98515,98517,98519,98521,98523,98525,98527,98529,98531],{"class":141,"line":210},[139,98516,3280],{"class":145},[139,98518,150],{"class":149},[139,98520,98429],{"class":145},[139,98522,1481],{"class":153},[139,98524,2816],{"class":145},[139,98526,95728],{"class":2111},[139,98528,150],{"class":149},[139,98530,2461],{"class":153},[139,98532,164],{"class":145},[139,98534,98535,98538,98540,98542,98544,98546],{"class":141,"line":254},[139,98536,98537],{"class":145},"np.add(x,",[139,98539,416],{"class":153},[139,98541,2816],{"class":145},[139,98543,95282],{"class":2111},[139,98545,150],{"class":149},[139,98547,95677],{"class":145},[139,98549,98550],{"class":141,"line":262},[139,98551,98552],{"class":2512},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98554,98555],{},"③empty_like()",[19,98557,98558],{},[1674,98559,98560,98561,98566],{},"创建一个",[1674,98562,98563],{},[1674,98564,98565],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98568,98569,98572],{},[50,98570,98571],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98574,98575],{},[3760,98576],{"alt":135,"src":98577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1217,98579,98581],{"id":98580},"_264-用法","2.6.4 ？？用法",[19,98583,98584],{},"当想查看一个函数的参数时，可以通过？？来实现",[130,98586,98588],{"className":132,"code":98587,"language":134,"meta":135,"style":135},"np.full??\n",[50,98589,98590],{"__ignoreMap":135},[139,98591,98592,98595],{"class":141,"line":142},[139,98593,98594],{"class":145},"np.full",[139,98596,98597],{"class":79632},"??\n",[1217,98599,98601],{"id":98600},"_265-full创建数组","2.6.5 full()创建数组",[130,98603,98605],{"className":132,"code":98604,"language":134,"meta":135,"style":135},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[50,98606,98607,98612],{"__ignoreMap":135},[139,98608,98609],{"class":141,"line":142},[139,98610,98611],{"class":145},"full(shape,fill_value)\n",[139,98613,98614],{"class":141,"line":210},[139,98615,98616],{"class":145},"创建全为某个指定值的数组\n",[19,98618,96758],{},[130,98620,98622],{"className":132,"code":98621,"language":134,"meta":135,"style":135},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[50,98623,98624,98629],{"__ignoreMap":135},[139,98625,98626],{"class":141,"line":142},[139,98627,98628],{"class":2512},"#创建一个一维数组,以20进行填充\n",[139,98630,98631,98634,98636,98638,98640],{"class":141,"line":210},[139,98632,98633],{"class":145},"np.full(",[139,98635,536],{"class":153},[139,98637,2816],{"class":145},[139,98639,3135],{"class":153},[139,98641,164],{"class":145},[19,98643,95519],{},[130,98645,98647],{"className":132,"code":98646,"language":134,"meta":135,"style":135},"#创建二维数组\nnp.full((3,5),11)\n",[50,98648,98649,98653],{"__ignoreMap":135},[139,98650,98651],{"class":141,"line":142},[139,98652,96175],{"class":2512},[139,98654,98655,98658,98660,98662,98664,98666,98668],{"class":141,"line":210},[139,98656,98657],{"class":145},"np.full((",[139,98659,421],{"class":153},[139,98661,2816],{"class":145},[139,98663,1481],{"class":153},[139,98665,44498],{"class":145},[139,98667,2909],{"class":153},[139,98669,164],{"class":145},[19,98671,98672],{},"③full_like用法",[19,98674,98675],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98677,98678],{},"这里是指定填充而已",[130,98680,98682],{"className":132,"code":98681,"language":134,"meta":135,"style":135},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[50,98683,98684,98689,98713,98718],{"__ignoreMap":135},[139,98685,98686],{"class":141,"line":142},[139,98687,98688],{"class":2512},"#创建一个指定形状数组\n",[139,98690,98691,98693,98695,98697,98699,98701,98703,98705,98707,98709,98711],{"class":141,"line":210},[139,98692,2680],{"class":145},[139,98694,150],{"class":149},[139,98696,95230],{"class":145},[139,98698,410],{"class":153},[139,98700,2816],{"class":145},[139,98702,2763],{"class":153},[139,98704,95235],{"class":145},[139,98706,1476],{"class":153},[139,98708,2816],{"class":145},[139,98710,2858],{"class":153},[139,98712,164],{"class":145},[139,98714,98715],{"class":141,"line":254},[139,98716,98717],{"class":2512},"#进行指定填充\n",[139,98719,98720,98723,98725],{"class":141,"line":262},[139,98721,98722],{"class":145},"np.full_like(a,",[139,98724,536],{"class":153},[139,98726,164],{"class":145},[19,98728,13787],{},[19,98730,98731],{},[3760,98732],{"alt":135,"src":98733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1217,98735,98737],{"id":98736},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24265,98739,98741],{"id":98740},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[130,98743,98745],{"className":132,"code":98744,"language":134,"meta":135,"style":135},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[50,98746,98747,98764],{"__ignoreMap":135},[139,98748,98749,98752,98754,98756,98758,98760,98762],{"class":141,"line":142},[139,98750,98751],{"class":145},"np.eye(",[139,98753,1476],{"class":153},[139,98755,2816],{"class":145},[139,98757,95728],{"class":2111},[139,98759,150],{"class":149},[139,98761,2461],{"class":153},[139,98763,164],{"class":145},[139,98765,98766],{"class":141,"line":210},[139,98767,98768],{"class":2512},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24265,98770,98772],{"id":98771},"_2662-法2identity","2.6.6.2 法2：identity()",[130,98774,98776],{"className":132,"code":98775,"language":134,"meta":135,"style":135},"#identity()\nnp.identity(5,dtype=int)\n",[50,98777,98778,98783],{"__ignoreMap":135},[139,98779,98780],{"class":141,"line":142},[139,98781,98782],{"class":2512},"#identity()\n",[139,98784,98785,98788,98790,98792,98794,98796,98798],{"class":141,"line":210},[139,98786,98787],{"class":145},"np.identity(",[139,98789,1481],{"class":153},[139,98791,2816],{"class":145},[139,98793,95728],{"class":2111},[139,98795,150],{"class":149},[139,98797,2461],{"class":153},[139,98799,164],{"class":145},[19,98801,98802],{},"两个函数是有区别的",[19,98804,98805],{},[3760,98806],{"alt":135,"src":98807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98809,98810],{},[3760,98811],{"alt":135,"src":98812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[130,98814,98816],{"className":132,"code":98815,"language":134,"meta":135,"style":135},"# 创建一个 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",[50,98817,98818,98823,98835,98840,98845,98850,98855,98859,98864,98884,98888,98893,98898],{"__ignoreMap":135},[139,98819,98820],{"class":141,"line":142},[139,98821,98822],{"class":2512},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[139,98824,98825,98827,98829,98831,98833],{"class":141,"line":210},[139,98826,98751],{"class":145},[139,98828,421],{"class":153},[139,98830,413],{"class":145},[139,98832,1476],{"class":153},[139,98834,164],{"class":145},[139,98836,98837],{"class":141,"line":254},[139,98838,98839],{"class":2512},"# 输出:\n",[139,98841,98842],{"class":141,"line":262},[139,98843,98844],{"class":2512},"# [[1. 0. 0. 0.]\n",[139,98846,98847],{"class":141,"line":313},[139,98848,98849],{"class":2512},"#  [0. 1. 0. 0.]\n",[139,98851,98852],{"class":141,"line":462},[139,98853,98854],{"class":2512},"#  [0. 0. 1. 0.]]\n",[139,98856,98857],{"class":141,"line":474},[139,98858,843],{"emptyLinePlaceholder":842},[139,98860,98861],{"class":141,"line":484},[139,98862,98863],{"class":2512},"# 对角线向上偏移1\n",[139,98865,98866,98868,98870,98872,98874,98876,98878,98880,98882],{"class":141,"line":989},[139,98867,98751],{"class":145},[139,98869,421],{"class":153},[139,98871,413],{"class":145},[139,98873,1476],{"class":153},[139,98875,413],{"class":145},[139,98877,2929],{"class":2111},[139,98879,150],{"class":149},[139,98881,410],{"class":153},[139,98883,164],{"class":145},[139,98885,98886],{"class":141,"line":994},[139,98887,98839],{"class":2512},[139,98889,98890],{"class":141,"line":999},[139,98891,98892],{"class":2512},"# [[0. 1. 0. 0.]\n",[139,98894,98895],{"class":141,"line":1006},[139,98896,98897],{"class":2512},"#  [0. 0. 1. 0.]\n",[139,98899,98900],{"class":141,"line":1027},[139,98901,98902],{"class":2512},"#  [0. 0. 0. 1.]]\n",[1217,98904,98906],{"id":98905},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[130,98908,98910],{"className":132,"code":98909,"language":134,"meta":135,"style":135},"#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",[50,98911,98912,98917,98921,98926,98931,98936,98941,98946,98951,98956,98961],{"__ignoreMap":135},[139,98913,98914],{"class":141,"line":142},[139,98915,98916],{"class":2512},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[139,98918,98919],{"class":141,"line":210},[139,98920,97925],{"class":160},[139,98922,98923],{"class":141,"line":254},[139,98924,98925],{"class":160},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[139,98927,98928],{"class":141,"line":262},[139,98929,98930],{"class":160},"参数介绍：\n",[139,98932,98933],{"class":141,"line":313},[139,98934,98935],{"class":160},"start：序列的起始值\n",[139,98937,98938],{"class":141,"line":462},[139,98939,98940],{"class":160},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[139,98942,98943],{"class":141,"line":474},[139,98944,98945],{"class":160},"num：要生长的等步长的样本数量，默认为50\n",[139,98947,98948],{"class":141,"line":484},[139,98949,98950],{"class":160},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[139,98952,98953],{"class":141,"line":989},[139,98954,98955],{"class":160},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[139,98957,98958],{"class":141,"line":994},[139,98959,98960],{"class":160},"dtype：ndarry的数据类型\n",[139,98962,98963],{"class":141,"line":999},[139,98964,97925],{"class":160},[19,98966,98967],{},[3760,98968],{"alt":135,"src":98969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98971,98972],{},"这里num=是可以省略的",[19,98974,98975],{},"也就是下方两行代码结果是一模一样的",[130,98977,98979],{"className":132,"code":98978,"language":134,"meta":135,"style":135},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[50,98980,98981,98998],{"__ignoreMap":135},[139,98982,98983,98986,98988,98990,98992,98994,98996],{"class":141,"line":142},[139,98984,98985],{"class":145},"np.linspace(",[139,98987,410],{"class":153},[139,98989,2816],{"class":145},[139,98991,1481],{"class":153},[139,98993,2816],{"class":145},[139,98995,1481],{"class":153},[139,98997,164],{"class":145},[139,98999,99000,99002,99004,99006,99008,99010,99012,99014,99016],{"class":141,"line":210},[139,99001,98985],{"class":145},[139,99003,410],{"class":153},[139,99005,2816],{"class":145},[139,99007,1481],{"class":153},[139,99009,2816],{"class":145},[139,99011,733],{"class":2111},[139,99013,150],{"class":149},[139,99015,1481],{"class":153},[139,99017,164],{"class":145},[1217,99019,99021],{"id":99020},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[130,99023,99025],{"className":132,"code":99024,"language":134,"meta":135,"style":135},"#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",[50,99026,99027,99032,99036,99041,99046,99051,99056,99060,99065,99070,99074],{"__ignoreMap":135},[139,99028,99029],{"class":141,"line":142},[139,99030,99031],{"class":2512},"#logspace函数用于创建一个等比数列，格式如下：\n",[139,99033,99034],{"class":141,"line":210},[139,99035,97925],{"class":160},[139,99037,99038],{"class":141,"line":254},[139,99039,99040],{"class":160},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[139,99042,99043],{"class":141,"line":262},[139,99044,99045],{"class":160},"参数为：\n",[139,99047,99048],{"class":141,"line":313},[139,99049,99050],{"class":160},"start:序列的起始位置为：base**start\n",[139,99052,99053],{"class":141,"line":462},[139,99054,99055],{"class":160},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[139,99057,99058],{"class":141,"line":474},[139,99059,98945],{"class":160},[139,99061,99062],{"class":141,"line":484},[139,99063,99064],{"class":160},"endpoint：是否包含 stop 这个值，默认是 True\n",[139,99066,99067],{"class":141,"line":989},[139,99068,99069],{"class":160},"base：对数的底数，默认是 10（常见对数）\n",[139,99071,99072],{"class":141,"line":994},[139,99073,98960],{"class":160},[139,99075,99076],{"class":141,"line":999},[139,99077,97925],{"class":160},[19,99079,99080],{},[3760,99081],{"alt":135,"src":99082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99084,99085],{},"logspace()函数中的num参数也是可以不写num=的",[19,99087,99088],{},"endpoint是不可以省略的",[2348,99090,99091],{},"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":135,"searchDepth":210,"depth":210,"links":99093},[99094,99098,99103,99107,99111,99112],{"id":97483,"depth":210,"text":97484,"children":99095},[99096,99097],{"id":97487,"depth":254,"text":97488},{"id":97560,"depth":254,"text":97561},{"id":97592,"depth":210,"text":97593,"children":99099},[99100,99101,99102],{"id":97596,"depth":254,"text":97597},{"id":97778,"depth":254,"text":97779},{"id":97856,"depth":254,"text":97857},{"id":97891,"depth":210,"text":97892,"children":99104},[99105,99106],{"id":97895,"depth":254,"text":97896},{"id":97952,"depth":254,"text":97953},{"id":98048,"depth":210,"text":98049,"children":99108},[99109,99110],{"id":98052,"depth":254,"text":98053},{"id":98064,"depth":254,"text":98065},{"id":98098,"depth":210,"text":98099},{"id":98135,"depth":210,"text":98136,"children":99113},[99114,99115,99116,99117,99118,99119,99120,99121],{"id":98139,"depth":254,"text":98140},{"id":98364,"depth":254,"text":98365},{"id":98371,"depth":254,"text":98372},{"id":98580,"depth":254,"text":98581},{"id":98600,"depth":254,"text":98601},{"id":98736,"depth":254,"text":98737},{"id":98905,"depth":254,"text":98906},{"id":99020,"depth":254,"text":99021},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97475,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99128,"title":99129,"body":99130,"description":2384,"extension":2385,"meta":99223,"navigation":842,"path":99224,"seo":99225,"stem":99226,"__hash__":99227},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99131,"toc":99221},[99132,99135,99138,99141,99144,99147,99150,99153,99156,99159,99162,99165,99167,99170,99173,99178,99181,99184,99218],[10,99133,99129],{"id":99134},"_20魔法命令mprun",[19,99136,99137],{},"逐行分析数据内存的使用情况",[19,99139,99140],{},"语法格式：",[19,99142,99143],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99145,99146],{},"分析结果列如下：",[19,99148,99149],{},"Line行号",[19,99151,99152],{},"Mem usage内存使用大小",[19,99154,99155],{},"increment内存增量",[19,99157,99158],{},"Line content代码内容",[19,99160,99161],{},"补充说明：",[19,99163,99164],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99166,97430],{},[19,99168,99169],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99171,99172],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99174,99175],{},[3760,99176],{"alt":135,"src":99177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99179,99180],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99182,99183],{},"这时候需要重新加载模块",[130,99185,99187],{"className":132,"code":99186,"language":134,"meta":135,"style":135},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[50,99188,99189,99194,99201,99206],{"__ignoreMap":135},[139,99190,99191],{"class":141,"line":142},[139,99192,99193],{"class":2512},"#重新加载模块\n",[139,99195,99196,99198],{"class":141,"line":210},[139,99197,1064],{"class":149},[139,99199,99200],{"class":145}," importlib\n",[139,99202,99203],{"class":141,"line":254},[139,99204,99205],{"class":145},"importlib.reload(mprun_test)\n",[139,99207,99208,99210,99213,99215],{"class":141,"line":262},[139,99209,2766],{"class":149},[139,99211,99212],{"class":145},"mprun ",[139,99214,855],{"class":149},[139,99216,99217],{"class":145},"f mprun_test.fun_test mprun_test.fun_test()\n",[2348,99219,99220],{},"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":135,"searchDepth":210,"depth":210,"links":99222},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99129,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99229,"title":99230,"body":99231,"description":2384,"extension":2385,"meta":99248,"navigation":842,"path":99249,"seo":99250,"stem":99251,"__hash__":99252},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99232,"toc":99246},[99233,99236,99241],[10,99234,99230],{"id":99235},"_3一维数组的索引和切片",[19,99237,99238],{},[3760,99239],{"alt":135,"src":99240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99242,99243],{},[3760,99244],{"alt":135,"src":99245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":135,"searchDepth":210,"depth":210,"links":99247},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99230,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99254,"title":99255,"body":99256,"description":2384,"extension":2385,"meta":99739,"navigation":842,"path":99740,"seo":99741,"stem":99742,"__hash__":99743},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99257,"toc":99737},[99258,99261,99264,99269,99302,99305,99343,99346,99380,99383,99488,99491,99528,99531,99632,99635,99686,99689,99731,99734],[10,99259,99255],{"id":99260},"_4二维数组的索引与切片",[19,99262,99263],{},"①获取指定单个元素",[19,99265,99266],{},[3760,99267],{"alt":135,"src":99268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[130,99270,99272],{"className":132,"code":99271,"language":134,"meta":135,"style":135},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[50,99273,99274,99279,99284,99289],{"__ignoreMap":135},[139,99275,99276],{"class":141,"line":142},[139,99277,99278],{"class":2512},"#获取元素9\n",[139,99280,99281],{"class":141,"line":210},[139,99282,99283],{"class":2512},"#先获取所在行，再获取所在列\n",[139,99285,99286],{"class":141,"line":254},[139,99287,99288],{"class":2512},"#数组[行索引号，列索引号]\n",[139,99290,99291,99294,99296,99298,99300],{"class":141,"line":262},[139,99292,99293],{"class":145},"a[",[139,99295,410],{"class":153},[139,99297,2816],{"class":145},[139,99299,416],{"class":153},[139,99301,424],{"class":145},[19,99303,99304],{},"②获取整行元素",[130,99306,99308],{"className":132,"code":99307,"language":134,"meta":135,"style":135},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[50,99309,99310,99315,99320,99328,99333],{"__ignoreMap":135},[139,99311,99312],{"class":141,"line":142},[139,99313,99314],{"class":2512},"#获取整行 数组[行索引号]\n",[139,99316,99317],{"class":141,"line":210},[139,99318,99319],{"class":2512},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[139,99321,99322,99324,99326],{"class":141,"line":254},[139,99323,99293],{"class":145},[139,99325,416],{"class":153},[139,99327,424],{"class":145},[139,99329,99330],{"class":141,"line":262},[139,99331,99332],{"class":2512},"#也可以负索引获取一行\n",[139,99334,99335,99337,99339,99341],{"class":141,"line":313},[139,99336,99293],{"class":145},[139,99338,855],{"class":149},[139,99340,410],{"class":153},[139,99342,424],{"class":145},[19,99344,99345],{},"③获取整列元素",[130,99347,99349],{"className":132,"code":99348,"language":134,"meta":135,"style":135},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[50,99350,99351,99356,99365,99370],{"__ignoreMap":135},[139,99352,99353],{"class":141,"line":142},[139,99354,99355],{"class":2512},"#获取整列 数组名[:,列索引]\n",[139,99357,99358,99361,99363],{"class":141,"line":210},[139,99359,99360],{"class":145},"a[:,",[139,99362,416],{"class":153},[139,99364,424],{"class":145},[139,99366,99367],{"class":141,"line":254},[139,99368,99369],{"class":2512},"#也可以负索引获取一列\n",[139,99371,99372,99374,99376,99378],{"class":141,"line":262},[139,99373,99360],{"class":145},[139,99375,855],{"class":149},[139,99377,410],{"class":153},[139,99379,424],{"class":145},[19,99381,99382],{},"④部分行部分列的元素",[130,99384,99386],{"className":132,"code":99385,"language":134,"meta":135,"style":135},"#部分行部分列 数组名[行切片，列切片]\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",[50,99387,99388,99393,99403,99407,99411,99416,99421,99425,99437,99441,99445,99450,99455,99460,99465,99469,99474],{"__ignoreMap":135},[139,99389,99390],{"class":141,"line":142},[139,99391,99392],{"class":2512},"#部分行部分列 数组名[行切片，列切片]\n",[139,99394,99395,99398,99400],{"class":141,"line":210},[139,99396,99397],{"class":145},"a[:",[139,99399,416],{"class":153},[139,99401,99402],{"class":145},",:]\n",[139,99404,99405],{"class":141,"line":254},[139,99406,95792],{"class":2512},[139,99408,99409],{"class":141,"line":262},[139,99410,96156],{"class":160},[139,99412,99413],{"class":141,"line":313},[139,99414,99415],{"class":160},"array([[ 1,  2,  3,  4,  5,  6],\n",[139,99417,99418],{"class":141,"line":462},[139,99419,99420],{"class":160},"       [ 7,  8,  9, 10, 11, 12]])\n",[139,99422,99423],{"class":141,"line":474},[139,99424,96156],{"class":160},[139,99426,99427,99429,99431,99433,99435],{"class":141,"line":484},[139,99428,99360],{"class":145},[139,99430,410],{"class":153},[139,99432,3294],{"class":145},[139,99434,1476],{"class":153},[139,99436,424],{"class":145},[139,99438,99439],{"class":141,"line":989},[139,99440,95792],{"class":2512},[139,99442,99443],{"class":141,"line":994},[139,99444,96156],{"class":160},[139,99446,99447],{"class":141,"line":999},[139,99448,99449],{"class":160},"array([[ 2,  3,  4],\n",[139,99451,99452],{"class":141,"line":1006},[139,99453,99454],{"class":160},"       [ 8,  9, 10],\n",[139,99456,99457],{"class":141,"line":1027},[139,99458,99459],{"class":160},"       [14, 15, 16],\n",[139,99461,99462],{"class":141,"line":1040},[139,99463,99464],{"class":160},"       [20, 21, 22]])\n",[139,99466,99467],{"class":141,"line":2160},[139,99468,96156],{"class":160},[139,99470,99471],{"class":141,"line":2188},[139,99472,99473],{"class":2512},"#对列行同时进行切片，使用了step参数\n",[139,99475,99476,99479,99481,99484,99486],{"class":141,"line":3944},[139,99477,99478],{"class":145},"a[::",[139,99480,416],{"class":153},[139,99482,99483],{"class":145},",::",[139,99485,416],{"class":153},[139,99487,424],{"class":145},[19,99489,99490],{},"⑤同时获取两个元素",[130,99492,99494],{"className":132,"code":99493,"language":134,"meta":135,"style":135},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[50,99495,99496,99501,99506],{"__ignoreMap":135},[139,99497,99498],{"class":141,"line":142},[139,99499,99500],{"class":2512},"#同时获取第三行第二列，第四行第一列\n",[139,99502,99503],{"class":141,"line":210},[139,99504,99505],{"class":2512},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[139,99507,99508,99511,99513,99515,99517,99519,99521,99523,99525],{"class":141,"line":254},[139,99509,99510],{"class":145},"a[(",[139,99512,416],{"class":153},[139,99514,2816],{"class":145},[139,99516,421],{"class":153},[139,99518,44489],{"class":145},[139,99520,410],{"class":153},[139,99522,2816],{"class":145},[139,99524,2634],{"class":153},[139,99526,99527],{"class":145},")]\n",[19,99529,99530],{},"⑥切片，对行进行反向获取",[130,99532,99534],{"className":132,"code":99533,"language":134,"meta":135,"style":135},"#切片 对所有行进行反向获取\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",[50,99535,99536,99541,99551,99555,99559,99564,99569,99574,99579,99583,99588,99604,99608,99613,99618,99623,99628],{"__ignoreMap":135},[139,99537,99538],{"class":141,"line":142},[139,99539,99540],{"class":2512},"#切片 对所有行进行反向获取\n",[139,99542,99543,99545,99547,99549],{"class":141,"line":210},[139,99544,99478],{"class":145},[139,99546,855],{"class":149},[139,99548,410],{"class":153},[139,99550,424],{"class":145},[139,99552,99553],{"class":141,"line":254},[139,99554,95792],{"class":2512},[139,99556,99557],{"class":141,"line":262},[139,99558,96156],{"class":160},[139,99560,99561],{"class":141,"line":313},[139,99562,99563],{"class":160},"array([[19, 20, 21, 22, 23, 24],\n",[139,99565,99566],{"class":141,"line":462},[139,99567,99568],{"class":160},"       [13, 14, 15, 16, 17, 18],\n",[139,99570,99571],{"class":141,"line":474},[139,99572,99573],{"class":160},"       [ 7,  8,  9, 10, 11, 12],\n",[139,99575,99576],{"class":141,"line":484},[139,99577,99578],{"class":160},"       [ 1,  2,  3,  4,  5,  6]])\n",[139,99580,99581],{"class":141,"line":989},[139,99582,96156],{"class":160},[139,99584,99585],{"class":141,"line":994},[139,99586,99587],{"class":2512},"#对行列都进行反向切片获取\n",[139,99589,99590,99592,99594,99596,99598,99600,99602],{"class":141,"line":999},[139,99591,99478],{"class":145},[139,99593,855],{"class":149},[139,99595,410],{"class":153},[139,99597,99483],{"class":145},[139,99599,855],{"class":149},[139,99601,410],{"class":153},[139,99603,424],{"class":145},[139,99605,99606],{"class":141,"line":1006},[139,99607,96156],{"class":160},[139,99609,99610],{"class":141,"line":1027},[139,99611,99612],{"class":160},"array([[24, 23, 22, 21, 20, 19],\n",[139,99614,99615],{"class":141,"line":1040},[139,99616,99617],{"class":160},"       [18, 17, 16, 15, 14, 13],\n",[139,99619,99620],{"class":141,"line":2160},[139,99621,99622],{"class":160},"       [12, 11, 10,  9,  8,  7],\n",[139,99624,99625],{"class":141,"line":2188},[139,99626,99627],{"class":160},"       [ 6,  5,  4,  3,  2,  1]])\n",[139,99629,99630],{"class":141,"line":3944},[139,99631,96156],{"class":160},[19,99633,99634],{},"⑦修改元素",[130,99636,99638],{"className":132,"code":99637,"language":134,"meta":135,"style":135},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[50,99639,99640,99645,99663,99668],{"__ignoreMap":135},[139,99641,99642],{"class":141,"line":142},[139,99643,99644],{"class":2512},"#获取前两行和前两列\n",[139,99646,99647,99650,99652,99654,99656,99659,99661],{"class":141,"line":210},[139,99648,99649],{"class":145},"sub_a",[139,99651,150],{"class":149},[139,99653,99397],{"class":145},[139,99655,416],{"class":153},[139,99657,99658],{"class":145},",:",[139,99660,416],{"class":153},[139,99662,424],{"class":145},[139,99664,99665],{"class":141,"line":254},[139,99666,99667],{"class":2512},"#修改sub_a第一个元素的值\n",[139,99669,99670,99673,99675,99677,99679,99681,99683],{"class":141,"line":262},[139,99671,99672],{"class":145},"sub_a[",[139,99674,2634],{"class":153},[139,99676,2816],{"class":145},[139,99678,2634],{"class":153},[139,99680,3373],{"class":145},[139,99682,150],{"class":149},[139,99684,99685],{"class":153},"100\n",[19,99687,99688],{},"⑧数组复制copy()",[130,99690,99692],{"className":132,"code":99691,"language":134,"meta":135,"style":135},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[50,99693,99694,99699,99709,99714],{"__ignoreMap":135},[139,99695,99696],{"class":141,"line":142},[139,99697,99698],{"class":2512},"#数组复制\n",[139,99700,99701,99704,99706],{"class":141,"line":210},[139,99702,99703],{"class":145},"copy_a",[139,99705,150],{"class":149},[139,99707,99708],{"class":145},"np.copy(sub_a)\n",[139,99710,99711],{"class":141,"line":254},[139,99712,99713],{"class":2512},"#修改copy_a后不影响原数组\n",[139,99715,99716,99719,99721,99723,99725,99727,99729],{"class":141,"line":262},[139,99717,99718],{"class":145},"copy_a[",[139,99720,2634],{"class":153},[139,99722,2816],{"class":145},[139,99724,2634],{"class":153},[139,99726,3373],{"class":145},[139,99728,150],{"class":149},[139,99730,99685],{"class":153},[19,99732,99733],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2348,99735,99736],{},"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":135,"searchDepth":210,"depth":210,"links":99738},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99255,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99745,"title":99746,"body":99747,"description":2384,"extension":2385,"meta":100239,"navigation":842,"path":100240,"seo":100241,"stem":100242,"__hash__":100243},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99748,"toc":100231},[99749,99752,99756,99759,99762,99815,99818,99843,99846,99865,99885,99888,99904,99908,99954,99958,100000,100004,100007,100010,100013,100016,100019,100081,100141,100145,100148,100205,100209,100214,100223,100228],[10,99750,99746],{"id":99751},"_5改变数组的维度",[14,99753,99755],{"id":99754},"_51-使用reshape","5.1 使用reshape()",[19,99757,99758],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99760,99761],{},"①一维数组转换为二维数组",[130,99763,99765],{"className":132,"code":99764,"language":134,"meta":135,"style":135},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[50,99766,99767,99783,99788,99793,99798],{"__ignoreMap":135},[139,99768,99769,99771,99773,99775,99777,99779,99781],{"class":141,"line":142},[139,99770,2680],{"class":145},[139,99772,150],{"class":149},[139,99774,95230],{"class":145},[139,99776,410],{"class":153},[139,99778,2816],{"class":145},[139,99780,2959],{"class":153},[139,99782,164],{"class":145},[139,99784,99785],{"class":141,"line":210},[139,99786,99787],{"class":2512},"#将一维数组进行转换\n",[139,99789,99790],{"class":141,"line":254},[139,99791,99792],{"class":2512},"#注意点：元素个数不可以变\n",[139,99794,99795],{"class":141,"line":262},[139,99796,99797],{"class":2512},"#转换维度要保持一致，不一致就异常！！！\n",[139,99799,99800,99802,99804,99807,99809,99811,99813],{"class":141,"line":313},[139,99801,95534],{"class":145},[139,99803,150],{"class":149},[139,99805,99806],{"class":145},"a.reshape(",[139,99808,416],{"class":153},[139,99810,2816],{"class":145},[139,99812,2782],{"class":153},[139,99814,164],{"class":145},[19,99816,99817],{},"②一维数组转换为三维数组",[130,99819,99821],{"className":132,"code":99820,"language":134,"meta":135,"style":135},"aaa=a.reshape(2,3,2)\n",[50,99822,99823],{"__ignoreMap":135},[139,99824,99825,99827,99829,99831,99833,99835,99837,99839,99841],{"class":141,"line":142},[139,99826,97748],{"class":145},[139,99828,150],{"class":149},[139,99830,99806],{"class":145},[139,99832,416],{"class":153},[139,99834,2816],{"class":145},[139,99836,421],{"class":153},[139,99838,2816],{"class":145},[139,99840,416],{"class":153},[139,99842,164],{"class":145},[19,99844,99845],{},"③二维数组转化为一维数组",[130,99847,99849],{"className":132,"code":99848,"language":134,"meta":135,"style":135},"#知道元素个数：\naa.reshape(12)\n",[50,99850,99851,99856],{"__ignoreMap":135},[139,99852,99853],{"class":141,"line":142},[139,99854,99855],{"class":2512},"#知道元素个数：\n",[139,99857,99858,99861,99863],{"class":141,"line":210},[139,99859,99860],{"class":145},"aa.reshape(",[139,99862,2934],{"class":153},[139,99864,164],{"class":145},[130,99866,99868],{"className":132,"code":99867,"language":134,"meta":135,"style":135},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[50,99869,99870,99875],{"__ignoreMap":135},[139,99871,99872],{"class":141,"line":142},[139,99873,99874],{"class":2512},"#不知道元素个数，参数传递-1\n",[139,99876,99877,99879,99881,99883],{"class":141,"line":210},[139,99878,99860],{"class":145},[139,99880,855],{"class":149},[139,99882,410],{"class":153},[139,99884,164],{"class":145},[19,99886,99887],{},"④三维数组转换为一维数组",[130,99889,99891],{"className":132,"code":99890,"language":134,"meta":135,"style":135},"aaa.reshape(-1)\n",[50,99892,99893],{"__ignoreMap":135},[139,99894,99895,99898,99900,99902],{"class":141,"line":142},[139,99896,99897],{"class":145},"aaa.reshape(",[139,99899,855],{"class":149},[139,99901,410],{"class":153},[139,99903,164],{"class":145},[14,99905,99907],{"id":99906},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[130,99909,99911],{"className":132,"code":99910,"language":134,"meta":135,"style":135},"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",[50,99912,99913,99940,99945,99949],{"__ignoreMap":135},[139,99914,99915,99917,99919,99921,99923,99925,99927,99929,99931,99933,99935,99937],{"class":141,"line":142},[139,99916,95534],{"class":145},[139,99918,150],{"class":149},[139,99920,95230],{"class":145},[139,99922,410],{"class":153},[139,99924,2816],{"class":145},[139,99926,2959],{"class":153},[139,99928,95235],{"class":145},[139,99930,416],{"class":153},[139,99932,2816],{"class":145},[139,99934,2782],{"class":153},[139,99936,2867],{"class":145},[139,99938,99939],{"class":2512},"#转换为2行6列的数组\n",[139,99941,99942],{"class":141,"line":210},[139,99943,99944],{"class":145},"aa.revel()\n",[139,99946,99947],{"class":141,"line":254},[139,99948,95792],{"class":2512},[139,99950,99951],{"class":141,"line":262},[139,99952,99953],{"class":2512},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99955,99957],{"id":99956},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[130,99959,99961],{"className":132,"code":99960,"language":134,"meta":135,"style":135},"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",[50,99962,99963,99987,99992,99996],{"__ignoreMap":135},[139,99964,99965,99967,99969,99971,99973,99975,99977,99979,99981,99983,99985],{"class":141,"line":142},[139,99966,95534],{"class":145},[139,99968,150],{"class":149},[139,99970,95230],{"class":145},[139,99972,410],{"class":153},[139,99974,2816],{"class":145},[139,99976,2959],{"class":153},[139,99978,95235],{"class":145},[139,99980,416],{"class":153},[139,99982,2816],{"class":145},[139,99984,2782],{"class":153},[139,99986,164],{"class":145},[139,99988,99989],{"class":141,"line":210},[139,99990,99991],{"class":145},"aa.flatten()\n",[139,99993,99994],{"class":141,"line":254},[139,99995,95792],{"class":2512},[139,99997,99998],{"class":141,"line":262},[139,99999,99953],{"class":2512},[14,100001,100003],{"id":100002},"_54-使用resize","5.4 使用resize()",[19,100005,100006],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100008,100009],{},"通过resize方法可以改变数组的维度",[19,100011,100012],{},"#resize修改数组维度",[19,100014,100015],{},"#以元组的形式指定形状",[19,100017,100018],{},"#改变的是原数组",[130,100020,100022],{"className":132,"code":100021,"language":134,"meta":135,"style":135},"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",[50,100023,100024,100040,100060,100073,100077],{"__ignoreMap":135},[139,100025,100026,100028,100030,100032,100034,100036,100038],{"class":141,"line":142},[139,100027,2680],{"class":145},[139,100029,150],{"class":149},[139,100031,95230],{"class":145},[139,100033,410],{"class":153},[139,100035,2816],{"class":145},[139,100037,2959],{"class":153},[139,100039,164],{"class":145},[139,100041,100042,100045,100047,100049,100051,100053,100055,100057],{"class":141,"line":210},[139,100043,100044],{"class":145},"a.shape",[139,100046,150],{"class":149},[139,100048,157],{"class":145},[139,100050,416],{"class":153},[139,100052,2816],{"class":145},[139,100054,2782],{"class":153},[139,100056,2867],{"class":145},[139,100058,100059],{"class":2512},"#改变了原数组\n",[139,100061,100062,100064,100066,100069,100071],{"class":141,"line":254},[139,100063,2680],{"class":145},[139,100065,150],{"class":149},[139,100067,100068],{"class":145},"resize((",[139,100070,2934],{"class":153},[139,100072,207],{"class":145},[139,100074,100075],{"class":141,"line":262},[139,100076,95792],{"class":2512},[139,100078,100079],{"class":141,"line":313},[139,100080,99953],{"class":2512},[130,100082,100084],{"className":132,"code":100083,"language":134,"meta":135,"style":135},"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",[50,100085,100086,100099,100103,100107,100112,100117,100122,100127,100132,100137],{"__ignoreMap":135},[139,100087,100088,100091,100093,100095,100097],{"class":141,"line":142},[139,100089,100090],{"class":145},"a.resize((",[139,100092,2782],{"class":153},[139,100094,2816],{"class":145},[139,100096,416],{"class":153},[139,100098,207],{"class":145},[139,100100,100101],{"class":141,"line":210},[139,100102,95792],{"class":2512},[139,100104,100105],{"class":141,"line":254},[139,100106,96156],{"class":160},[139,100108,100109],{"class":141,"line":262},[139,100110,100111],{"class":160},"array([[ 1,  2],\n",[139,100113,100114],{"class":141,"line":313},[139,100115,100116],{"class":160},"       [ 3,  4],\n",[139,100118,100119],{"class":141,"line":462},[139,100120,100121],{"class":160},"       [ 5,  6],\n",[139,100123,100124],{"class":141,"line":474},[139,100125,100126],{"class":160},"       [ 7,  8],\n",[139,100128,100129],{"class":141,"line":484},[139,100130,100131],{"class":160},"       [ 9, 10],\n",[139,100133,100134],{"class":141,"line":989},[139,100135,100136],{"class":160},"       [11, 12]])\n",[139,100138,100139],{"class":141,"line":994},[139,100140,96156],{"class":160},[14,100142,100144],{"id":100143},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100146,100147],{},"改变了原数组",[130,100149,100151],{"className":132,"code":100150,"language":134,"meta":135,"style":135},"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",[50,100152,100153,100169,100185,100189,100193,100197,100201],{"__ignoreMap":135},[139,100154,100155,100157,100159,100161,100163,100165,100167],{"class":141,"line":142},[139,100156,2680],{"class":145},[139,100158,150],{"class":149},[139,100160,95230],{"class":145},[139,100162,410],{"class":153},[139,100164,2816],{"class":145},[139,100166,2959],{"class":153},[139,100168,164],{"class":145},[139,100170,100171,100173,100175,100177,100179,100181,100183],{"class":141,"line":210},[139,100172,100044],{"class":145},[139,100174,150],{"class":149},[139,100176,157],{"class":145},[139,100178,416],{"class":153},[139,100180,2816],{"class":145},[139,100182,2782],{"class":153},[139,100184,164],{"class":145},[139,100186,100187],{"class":141,"line":254},[139,100188,95792],{"class":2512},[139,100190,100191],{"class":141,"line":262},[139,100192,96156],{"class":160},[139,100194,100195],{"class":141,"line":313},[139,100196,99415],{"class":160},[139,100198,100199],{"class":141,"line":462},[139,100200,99420],{"class":160},[139,100202,100203],{"class":141,"line":474},[139,100204,96156],{"class":160},[14,100206,100208],{"id":100207},"_56-重要比较","5.6 重要比较：",[19,100210,100211],{},[3760,100212],{"alt":135,"src":100213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100215,100216,100217,100219,100220,100222],{},"口诀：NumPy 函数要么用 ",[50,100218,98190],{},"，要么用 ",[50,100221,33745],{},"，创建结构用 shape，造数据用 size",[19,100224,100225],{},[3760,100226],{"alt":135,"src":100227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2348,100229,100230],{},"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":135,"searchDepth":210,"depth":210,"links":100232},[100233,100234,100235,100236,100237,100238],{"id":99754,"depth":210,"text":99755},{"id":99906,"depth":210,"text":99907},{"id":99956,"depth":210,"text":99957},{"id":100002,"depth":210,"text":100003},{"id":100143,"depth":210,"text":100144},{"id":100207,"depth":210,"text":100208},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99746,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100245,"title":100246,"body":100247,"description":2384,"extension":2385,"meta":101319,"navigation":842,"path":101320,"seo":101321,"stem":101322,"__hash__":101323},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100248,"toc":101313},[100249,100252,100256,100259,100262,100265,100330,100333,100373,100376,100458,100461,100466,100488,100490,100495,100500,100503,100506,100661,100664,100866,100870,100873,100876,100944,100946,100951,100954,100957,101037,101041,101044,101046,101119,101121,101126,101128,101208,101212,101215,101218,101221,101224,101227,101230,101310],[10,100250,100246],{"id":100251},"_6数组的拼接",[14,100253,100255],{"id":100254},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100257,100258],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100260,100261],{},"函数内部传两个数列构成的数列或者元组",[19,100263,100264],{},"①一维数组的拼接",[130,100266,100268],{"className":132,"code":100267,"language":134,"meta":135,"style":135},"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",[50,100269,100270,100290,100310,100315,100320,100325],{"__ignoreMap":135},[139,100271,100272,100274,100276,100278,100280,100282,100284,100286,100288],{"class":141,"line":142},[139,100273,2680],{"class":145},[139,100275,150],{"class":149},[139,100277,95252],{"class":145},[139,100279,410],{"class":153},[139,100281,2816],{"class":145},[139,100283,416],{"class":153},[139,100285,2816],{"class":145},[139,100287,421],{"class":153},[139,100289,6935],{"class":145},[139,100291,100292,100294,100296,100298,100300,100302,100304,100306,100308],{"class":141,"line":210},[139,100293,2704],{"class":145},[139,100295,150],{"class":149},[139,100297,95252],{"class":145},[139,100299,1476],{"class":153},[139,100301,2816],{"class":145},[139,100303,1481],{"class":153},[139,100305,2816],{"class":145},[139,100307,2782],{"class":153},[139,100309,6935],{"class":145},[139,100311,100312],{"class":141,"line":254},[139,100313,100314],{"class":2512},"#调用concatenate进行数组拼接\n",[139,100316,100317],{"class":141,"line":262},[139,100318,100319],{"class":145},"np.concatenate((a,b))\n",[139,100321,100322],{"class":141,"line":313},[139,100323,100324],{"class":2512},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[139,100326,100327],{"class":141,"line":462},[139,100328,100329],{"class":2512},"#np.concatenate([a,b])\n",[19,100331,100332],{},"②一维多个数组拼接",[130,100334,100336],{"className":132,"code":100335,"language":134,"meta":135,"style":135},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[50,100337,100338,100343,100363,100368],{"__ignoreMap":135},[139,100339,100340],{"class":141,"line":142},[139,100341,100342],{"class":2512},"#也可以多个数组进行拼接\n",[139,100344,100345,100347,100349,100351,100353,100355,100357,100359,100361],{"class":141,"line":210},[139,100346,2729],{"class":145},[139,100348,150],{"class":149},[139,100350,95252],{"class":145},[139,100352,536],{"class":153},[139,100354,2816],{"class":145},[139,100356,2909],{"class":153},[139,100358,2816],{"class":145},[139,100360,2959],{"class":153},[139,100362,6935],{"class":145},[139,100364,100365],{"class":141,"line":254},[139,100366,100367],{"class":145},"c\n",[139,100369,100370],{"class":141,"line":262},[139,100371,100372],{"class":145},"np.concatenate((a,b,c))\n",[19,100374,100375],{},"③二维数组拼接",[130,100377,100379],{"className":132,"code":100378,"language":134,"meta":135,"style":135},"#二维数组使用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",[50,100380,100381,100386,100410,100435,100440,100445],{"__ignoreMap":135},[139,100382,100383],{"class":141,"line":142},[139,100384,100385],{"class":2512},"#二维数组使用concatenate进行拼接\n",[139,100387,100388,100390,100392,100394,100396,100398,100400,100402,100404,100406,100408],{"class":141,"line":210},[139,100389,95534],{"class":145},[139,100391,150],{"class":149},[139,100393,95230],{"class":145},[139,100395,410],{"class":153},[139,100397,2816],{"class":145},[139,100399,2959],{"class":153},[139,100401,95235],{"class":145},[139,100403,421],{"class":153},[139,100405,2816],{"class":145},[139,100407,1476],{"class":153},[139,100409,164],{"class":145},[139,100411,100412,100415,100417,100419,100421,100423,100425,100427,100429,100431,100433],{"class":141,"line":254},[139,100413,100414],{"class":145},"bb",[139,100416,150],{"class":149},[139,100418,95230],{"class":145},[139,100420,2775],{"class":153},[139,100422,2816],{"class":145},[139,100424,3077],{"class":153},[139,100426,95235],{"class":145},[139,100428,421],{"class":153},[139,100430,2816],{"class":145},[139,100432,1476],{"class":153},[139,100434,164],{"class":145},[139,100436,100437],{"class":141,"line":262},[139,100438,100439],{"class":2512},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[139,100441,100442],{"class":141,"line":313},[139,100443,100444],{"class":2512},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[139,100446,100447,100450,100452,100454,100456],{"class":141,"line":462},[139,100448,100449],{"class":145},"np.concatenate((aa,bb),",[139,100451,49752],{"class":2111},[139,100453,150],{"class":149},[139,100455,2634],{"class":153},[139,100457,164],{"class":145},[19,100459,100460],{},"结果：",[19,100462,100463],{},[3760,100464],{"alt":135,"src":100465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[130,100467,100469],{"className":132,"code":100468,"language":134,"meta":135,"style":135},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[50,100470,100471,100476],{"__ignoreMap":135},[139,100472,100473],{"class":141,"line":142},[139,100474,100475],{"class":2512},"#指定axis为1进行拼接\n",[139,100477,100478,100480,100482,100484,100486],{"class":141,"line":210},[139,100479,100449],{"class":145},[139,100481,49752],{"class":2111},[139,100483,150],{"class":149},[139,100485,410],{"class":153},[139,100487,164],{"class":145},[19,100489,100460],{},[19,100491,100492],{},[3760,100493],{"alt":135,"src":100494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100496,100497],{},[1674,100498,100499],{},"二维数组总结：0竖着方向，1横着方向",[19,100501,100502],{},"④三维数组拼接",[19,100504,100505],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[130,100507,100509],{"className":132,"code":100508,"language":134,"meta":135,"style":135},"#两个三行六列\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",[50,100510,100511,100516,100544,100574,100579,100596,100601,100606,100611,100628,100633,100638,100643,100656],{"__ignoreMap":135},[139,100512,100513],{"class":141,"line":142},[139,100514,100515],{"class":2512},"#两个三行六列\n",[139,100517,100518,100520,100522,100524,100526,100528,100530,100532,100534,100536,100538,100540,100542],{"class":141,"line":210},[139,100519,97748],{"class":145},[139,100521,150],{"class":149},[139,100523,95230],{"class":145},[139,100525,410],{"class":153},[139,100527,2816],{"class":145},[139,100529,2763],{"class":153},[139,100531,95235],{"class":145},[139,100533,416],{"class":153},[139,100535,2816],{"class":145},[139,100537,421],{"class":153},[139,100539,2816],{"class":145},[139,100541,2782],{"class":153},[139,100543,164],{"class":145},[139,100545,100546,100549,100551,100553,100555,100557,100560,100562,100564,100566,100568,100570,100572],{"class":141,"line":254},[139,100547,100548],{"class":145},"bbb",[139,100550,150],{"class":149},[139,100552,95230],{"class":145},[139,100554,2775],{"class":153},[139,100556,2816],{"class":145},[139,100558,100559],{"class":153},"137",[139,100561,95235],{"class":145},[139,100563,416],{"class":153},[139,100565,2816],{"class":145},[139,100567,421],{"class":153},[139,100569,2816],{"class":145},[139,100571,2782],{"class":153},[139,100573,164],{"class":145},[139,100575,100576],{"class":141,"line":262},[139,100577,100578],{"class":2512},"#axis=0\n",[139,100580,100581,100583,100585,100588,100590,100592,100594],{"class":141,"line":313},[139,100582,3130],{"class":145},[139,100584,150],{"class":149},[139,100586,100587],{"class":145},"np.concatenate((aaa,bbb),",[139,100589,49752],{"class":2111},[139,100591,150],{"class":149},[139,100593,2634],{"class":153},[139,100595,164],{"class":145},[139,100597,100598],{"class":141,"line":462},[139,100599,100600],{"class":145},"s.shape\n",[139,100602,100603],{"class":141,"line":474},[139,100604,100605],{"class":2512},"#输出：(4,3,6)\n",[139,100607,100608],{"class":141,"line":484},[139,100609,100610],{"class":2512},"#axis=1\n",[139,100612,100613,100616,100618,100620,100622,100624,100626],{"class":141,"line":989},[139,100614,100615],{"class":145},"ss",[139,100617,150],{"class":149},[139,100619,100587],{"class":145},[139,100621,49752],{"class":2111},[139,100623,150],{"class":149},[139,100625,410],{"class":153},[139,100627,164],{"class":145},[139,100629,100630],{"class":141,"line":994},[139,100631,100632],{"class":145},"ss.shape\n",[139,100634,100635],{"class":141,"line":999},[139,100636,100637],{"class":2512},"#输出：(2,6,6)\n",[139,100639,100640],{"class":141,"line":1006},[139,100641,100642],{"class":2512},"#axis=2\n",[139,100644,100645,100647,100649,100651,100653],{"class":141,"line":1027},[139,100646,100587],{"class":145},[139,100648,49752],{"class":2111},[139,100650,150],{"class":149},[139,100652,416],{"class":153},[139,100654,100655],{"class":145},").shape\n",[139,100657,100658],{"class":141,"line":1040},[139,100659,100660],{"class":2512},"#输出：（2，3，12）\n",[19,100662,100663],{},"⑤四维数组拼接",[130,100665,100667],{"className":132,"code":100666,"language":134,"meta":135,"style":135},"#两个三行六列\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",[50,100668,100669,100673,100701,100729,100754,100780,100784,100797,100802,100806,100818,100823,100827,100839,100844,100849,100861],{"__ignoreMap":135},[139,100670,100671],{"class":141,"line":142},[139,100672,100515],{"class":2512},[139,100674,100675,100677,100679,100681,100683,100685,100687,100689,100691,100693,100695,100697,100699],{"class":141,"line":210},[139,100676,97748],{"class":145},[139,100678,150],{"class":149},[139,100680,95230],{"class":145},[139,100682,410],{"class":153},[139,100684,2816],{"class":145},[139,100686,2763],{"class":153},[139,100688,95235],{"class":145},[139,100690,416],{"class":153},[139,100692,2816],{"class":145},[139,100694,421],{"class":153},[139,100696,2816],{"class":145},[139,100698,2782],{"class":153},[139,100700,164],{"class":145},[139,100702,100703,100705,100707,100709,100711,100713,100715,100717,100719,100721,100723,100725,100727],{"class":141,"line":254},[139,100704,100548],{"class":145},[139,100706,150],{"class":149},[139,100708,95230],{"class":145},[139,100710,2775],{"class":153},[139,100712,2816],{"class":145},[139,100714,100559],{"class":153},[139,100716,95235],{"class":145},[139,100718,416],{"class":153},[139,100720,2816],{"class":145},[139,100722,421],{"class":153},[139,100724,2816],{"class":145},[139,100726,2782],{"class":153},[139,100728,164],{"class":145},[139,100730,100731,100734,100736,100738,100740,100742,100744,100746,100748,100750,100752],{"class":141,"line":262},[139,100732,100733],{"class":145},"aaaa",[139,100735,150],{"class":149},[139,100737,99897],{"class":145},[139,100739,416],{"class":153},[139,100741,2816],{"class":145},[139,100743,421],{"class":153},[139,100745,2816],{"class":145},[139,100747,421],{"class":153},[139,100749,2816],{"class":145},[139,100751,416],{"class":153},[139,100753,164],{"class":145},[139,100755,100756,100759,100761,100764,100766,100768,100770,100772,100774,100776,100778],{"class":141,"line":313},[139,100757,100758],{"class":145},"bbbb",[139,100760,150],{"class":149},[139,100762,100763],{"class":145},"bbb.reshape(",[139,100765,416],{"class":153},[139,100767,2816],{"class":145},[139,100769,421],{"class":153},[139,100771,2816],{"class":145},[139,100773,421],{"class":153},[139,100775,2816],{"class":145},[139,100777,416],{"class":153},[139,100779,164],{"class":145},[139,100781,100782],{"class":141,"line":462},[139,100783,100578],{"class":2512},[139,100785,100786,100789,100791,100793,100795],{"class":141,"line":474},[139,100787,100788],{"class":145},"np.concatenate((aaaa,bbbb),",[139,100790,49752],{"class":2111},[139,100792,150],{"class":149},[139,100794,2634],{"class":153},[139,100796,100655],{"class":145},[139,100798,100799],{"class":141,"line":484},[139,100800,100801],{"class":2512},"#结果：（4，3，3，2）\n",[139,100803,100804],{"class":141,"line":989},[139,100805,100610],{"class":2512},[139,100807,100808,100810,100812,100814,100816],{"class":141,"line":994},[139,100809,100788],{"class":145},[139,100811,49752],{"class":2111},[139,100813,150],{"class":149},[139,100815,410],{"class":153},[139,100817,100655],{"class":145},[139,100819,100820],{"class":141,"line":999},[139,100821,100822],{"class":2512},"#结果：（2，6，3，2）\n",[139,100824,100825],{"class":141,"line":1006},[139,100826,100642],{"class":2512},[139,100828,100829,100831,100833,100835,100837],{"class":141,"line":1027},[139,100830,100788],{"class":145},[139,100832,49752],{"class":2111},[139,100834,150],{"class":149},[139,100836,416],{"class":153},[139,100838,100655],{"class":145},[139,100840,100841],{"class":141,"line":1040},[139,100842,100843],{"class":2512},"#结果：（2，3，6，2）\n",[139,100845,100846],{"class":141,"line":2160},[139,100847,100848],{"class":2512},"#axis=3\n",[139,100850,100851,100853,100855,100857,100859],{"class":141,"line":2188},[139,100852,100788],{"class":145},[139,100854,49752],{"class":2111},[139,100856,150],{"class":149},[139,100858,421],{"class":153},[139,100860,100655],{"class":145},[139,100862,100863],{"class":141,"line":3944},[139,100864,100865],{"class":2512},"#结果：（2，3，3，4）\n",[14,100867,100869],{"id":100868},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100871,100872],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100874,100875],{},"①二维数组",[130,100877,100879],{"className":132,"code":100878,"language":134,"meta":135,"style":135},"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",[50,100880,100881,100905,100929,100934,100939],{"__ignoreMap":135},[139,100882,100883,100885,100887,100889,100891,100893,100895,100897,100899,100901,100903],{"class":141,"line":142},[139,100884,95534],{"class":145},[139,100886,150],{"class":149},[139,100888,95230],{"class":145},[139,100890,410],{"class":153},[139,100892,2816],{"class":145},[139,100894,2959],{"class":153},[139,100896,95235],{"class":145},[139,100898,421],{"class":153},[139,100900,2816],{"class":145},[139,100902,1476],{"class":153},[139,100904,164],{"class":145},[139,100906,100907,100909,100911,100913,100915,100917,100919,100921,100923,100925,100927],{"class":141,"line":210},[139,100908,100414],{"class":145},[139,100910,150],{"class":149},[139,100912,95230],{"class":145},[139,100914,2775],{"class":153},[139,100916,2816],{"class":145},[139,100918,3077],{"class":153},[139,100920,95235],{"class":145},[139,100922,421],{"class":153},[139,100924,2816],{"class":145},[139,100926,1476],{"class":153},[139,100928,164],{"class":145},[139,100930,100931],{"class":141,"line":254},[139,100932,100933],{"class":145},"np.hstack((aa,bb))\n",[139,100935,100936],{"class":141,"line":262},[139,100937,100938],{"class":2512},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[139,100940,100941],{"class":141,"line":313},[139,100942,100943],{"class":2512},"#np.hstack([aa,bb])\n",[19,100945,100460],{},[19,100947,100948],{},[3760,100949],{"alt":135,"src":100950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100952,100953],{},"等效于concatenate()函数中axis=1时的情况",[19,100955,100956],{},"②三维数组",[130,100958,100960],{"className":132,"code":100959,"language":134,"meta":135,"style":135},"#两个三行六列\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",[50,100961,100962,100966,100994,101022,101027,101032],{"__ignoreMap":135},[139,100963,100964],{"class":141,"line":142},[139,100965,100515],{"class":2512},[139,100967,100968,100970,100972,100974,100976,100978,100980,100982,100984,100986,100988,100990,100992],{"class":141,"line":210},[139,100969,97748],{"class":145},[139,100971,150],{"class":149},[139,100973,95230],{"class":145},[139,100975,410],{"class":153},[139,100977,2816],{"class":145},[139,100979,2763],{"class":153},[139,100981,95235],{"class":145},[139,100983,416],{"class":153},[139,100985,2816],{"class":145},[139,100987,421],{"class":153},[139,100989,2816],{"class":145},[139,100991,2782],{"class":153},[139,100993,164],{"class":145},[139,100995,100996,100998,101000,101002,101004,101006,101008,101010,101012,101014,101016,101018,101020],{"class":141,"line":254},[139,100997,100548],{"class":145},[139,100999,150],{"class":149},[139,101001,95230],{"class":145},[139,101003,2775],{"class":153},[139,101005,2816],{"class":145},[139,101007,100559],{"class":153},[139,101009,95235],{"class":145},[139,101011,416],{"class":153},[139,101013,2816],{"class":145},[139,101015,421],{"class":153},[139,101017,2816],{"class":145},[139,101019,2782],{"class":153},[139,101021,164],{"class":145},[139,101023,101024],{"class":141,"line":262},[139,101025,101026],{"class":2512},"#使用hstack\n",[139,101028,101029],{"class":141,"line":313},[139,101030,101031],{"class":145},"np.hstack((aaa,bbb)).shape\n",[139,101033,101034],{"class":141,"line":462},[139,101035,101036],{"class":2512},"#输出：（2，6，6）\n",[14,101038,101040],{"id":101039},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101042,101043],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101045,100875],{},[130,101047,101049],{"className":132,"code":101048,"language":134,"meta":135,"style":135},"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",[50,101050,101051,101075,101099,101104,101109,101114],{"__ignoreMap":135},[139,101052,101053,101055,101057,101059,101061,101063,101065,101067,101069,101071,101073],{"class":141,"line":142},[139,101054,95534],{"class":145},[139,101056,150],{"class":149},[139,101058,95230],{"class":145},[139,101060,410],{"class":153},[139,101062,2816],{"class":145},[139,101064,2959],{"class":153},[139,101066,95235],{"class":145},[139,101068,421],{"class":153},[139,101070,2816],{"class":145},[139,101072,1476],{"class":153},[139,101074,164],{"class":145},[139,101076,101077,101079,101081,101083,101085,101087,101089,101091,101093,101095,101097],{"class":141,"line":210},[139,101078,100414],{"class":145},[139,101080,150],{"class":149},[139,101082,95230],{"class":145},[139,101084,2775],{"class":153},[139,101086,2816],{"class":145},[139,101088,3077],{"class":153},[139,101090,95235],{"class":145},[139,101092,421],{"class":153},[139,101094,2816],{"class":145},[139,101096,1476],{"class":153},[139,101098,164],{"class":145},[139,101100,101101],{"class":141,"line":254},[139,101102,101103],{"class":2512},"#vstack 垂直方向进行堆叠\n",[139,101105,101106],{"class":141,"line":262},[139,101107,101108],{"class":145},"np.vstack((aa,bb))\n",[139,101110,101111],{"class":141,"line":313},[139,101112,101113],{"class":2512},"#与hstack传的参数类似，等价于：\n",[139,101115,101116],{"class":141,"line":462},[139,101117,101118],{"class":145},"np.vstack([aa,bb])\n",[19,101120,100460],{},[19,101122,101123],{},[3760,101124],{"alt":135,"src":101125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101127,100956],{},[130,101129,101131],{"className":132,"code":101130,"language":134,"meta":135,"style":135},"#两个三行六列\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",[50,101132,101133,101137,101165,101193,101198,101203],{"__ignoreMap":135},[139,101134,101135],{"class":141,"line":142},[139,101136,100515],{"class":2512},[139,101138,101139,101141,101143,101145,101147,101149,101151,101153,101155,101157,101159,101161,101163],{"class":141,"line":210},[139,101140,97748],{"class":145},[139,101142,150],{"class":149},[139,101144,95230],{"class":145},[139,101146,410],{"class":153},[139,101148,2816],{"class":145},[139,101150,2763],{"class":153},[139,101152,95235],{"class":145},[139,101154,416],{"class":153},[139,101156,2816],{"class":145},[139,101158,421],{"class":153},[139,101160,2816],{"class":145},[139,101162,2782],{"class":153},[139,101164,164],{"class":145},[139,101166,101167,101169,101171,101173,101175,101177,101179,101181,101183,101185,101187,101189,101191],{"class":141,"line":254},[139,101168,100548],{"class":145},[139,101170,150],{"class":149},[139,101172,95230],{"class":145},[139,101174,2775],{"class":153},[139,101176,2816],{"class":145},[139,101178,100559],{"class":153},[139,101180,95235],{"class":145},[139,101182,416],{"class":153},[139,101184,2816],{"class":145},[139,101186,421],{"class":153},[139,101188,2816],{"class":145},[139,101190,2782],{"class":153},[139,101192,164],{"class":145},[139,101194,101195],{"class":141,"line":262},[139,101196,101197],{"class":2512},"#使用vstack\n",[139,101199,101200],{"class":141,"line":313},[139,101201,101202],{"class":145},"np.vstack((aaa,bbb)).shape\n",[139,101204,101205],{"class":141,"line":462},[139,101206,101207],{"class":2512},"#输出：（4，3，6）\n",[14,101209,101211],{"id":101210},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101213,101214],{},"该方法是三维数组特有的方法",[19,101216,101217],{},"也就是说",[19,101219,101220],{},"一维数组拼接方法用：concatenate()",[19,101222,101223],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101225,101226],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101228,101229],{},"四维数组及多维数组只能用concatenate进行拼接",[130,101231,101233],{"className":132,"code":101232,"language":134,"meta":135,"style":135},"#两个三行六列\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",[50,101234,101235,101239,101267,101295,101300,101305],{"__ignoreMap":135},[139,101236,101237],{"class":141,"line":142},[139,101238,100515],{"class":2512},[139,101240,101241,101243,101245,101247,101249,101251,101253,101255,101257,101259,101261,101263,101265],{"class":141,"line":210},[139,101242,97748],{"class":145},[139,101244,150],{"class":149},[139,101246,95230],{"class":145},[139,101248,410],{"class":153},[139,101250,2816],{"class":145},[139,101252,2763],{"class":153},[139,101254,95235],{"class":145},[139,101256,416],{"class":153},[139,101258,2816],{"class":145},[139,101260,421],{"class":153},[139,101262,2816],{"class":145},[139,101264,2782],{"class":153},[139,101266,164],{"class":145},[139,101268,101269,101271,101273,101275,101277,101279,101281,101283,101285,101287,101289,101291,101293],{"class":141,"line":254},[139,101270,100548],{"class":145},[139,101272,150],{"class":149},[139,101274,95230],{"class":145},[139,101276,2775],{"class":153},[139,101278,2816],{"class":145},[139,101280,100559],{"class":153},[139,101282,95235],{"class":145},[139,101284,416],{"class":153},[139,101286,2816],{"class":145},[139,101288,421],{"class":153},[139,101290,2816],{"class":145},[139,101292,2782],{"class":153},[139,101294,164],{"class":145},[139,101296,101297],{"class":141,"line":262},[139,101298,101299],{"class":2512},"#使用dstack\n",[139,101301,101302],{"class":141,"line":313},[139,101303,101304],{"class":145},"np.dstack((aaa,bbb)).shape\n",[139,101306,101307],{"class":141,"line":462},[139,101308,101309],{"class":2512},"#结果：（2，3，12）\n",[2348,101311,101312],{},"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":135,"searchDepth":210,"depth":210,"links":101314},[101315,101316,101317,101318],{"id":100254,"depth":210,"text":100255},{"id":100868,"depth":210,"text":100869},{"id":101039,"depth":210,"text":101040},{"id":101210,"depth":210,"text":101211},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100246,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101325,"title":101326,"body":101327,"description":2384,"extension":2385,"meta":101602,"navigation":842,"path":101603,"seo":101604,"stem":101605,"__hash__":101606},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101328,"toc":101600},[101329,101332,101335,101429,101432,101435,101438,101441,101444,101447,101450,101453,101597],[10,101330,101326],{"id":101331},"_7数组转置",[19,101333,101334],{},"使用transpose()函数",[130,101336,101338],{"className":132,"code":101337,"language":134,"meta":135,"style":135},"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",[50,101339,101340,101350,101374,101379,101384,101389,101394,101402,101406,101410,101415,101420,101425],{"__ignoreMap":135},[139,101341,101342,101344,101346,101348],{"class":141,"line":142},[139,101343,1064],{"class":149},[139,101345,33630],{"class":145},[139,101347,1035],{"class":149},[139,101349,33635],{"class":145},[139,101351,101352,101354,101356,101358,101360,101362,101364,101366,101368,101370,101372],{"class":141,"line":210},[139,101353,2680],{"class":145},[139,101355,150],{"class":149},[139,101357,33966],{"class":145},[139,101359,410],{"class":153},[139,101361,2816],{"class":145},[139,101363,2959],{"class":153},[139,101365,95235],{"class":145},[139,101367,1476],{"class":153},[139,101369,2816],{"class":145},[139,101371,421],{"class":153},[139,101373,164],{"class":145},[139,101375,101376],{"class":141,"line":254},[139,101377,101378],{"class":2512},"#二维数组转置\n",[139,101380,101381],{"class":141,"line":262},[139,101382,101383],{"class":2512},"#调用transpose()函数\n",[139,101385,101386],{"class":141,"line":313},[139,101387,101388],{"class":145},"a.transpose()\n",[139,101390,101391],{"class":141,"line":462},[139,101392,101393],{"class":2512},"#对于二维数组也可以采用.T来实现\n",[139,101395,101396,101399],{"class":141,"line":474},[139,101397,101398],{"class":145},"a.T",[139,101400,101401],{"class":2512},"#与上述代码一样\n",[139,101403,101404],{"class":141,"line":484},[139,101405,95792],{"class":2512},[139,101407,101408],{"class":141,"line":989},[139,101409,96156],{"class":160},[139,101411,101412],{"class":141,"line":994},[139,101413,101414],{"class":160},"array([[ 1,  4,  7, 10],\n",[139,101416,101417],{"class":141,"line":999},[139,101418,101419],{"class":160},"       [ 2,  5,  8, 11],\n",[139,101421,101422],{"class":141,"line":1006},[139,101423,101424],{"class":160},"       [ 3,  6,  9, 12]])\n",[139,101426,101427],{"class":141,"line":1027},[139,101428,96156],{"class":160},[19,101430,101431],{},"也可以使用np.transpose()的形式",[19,101433,101434],{},"#多维数组进行转置 np.transpose()",[19,101436,101437],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101439,101440],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101442,101443],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101445,101446],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101448,101449],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101451,101452],{},"四维及以上的数组也是一样的道理",[130,101454,101456],{"className":132,"code":101455,"language":134,"meta":135,"style":135},"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",[50,101457,101458,101486,101491,101496,101501,101519,101524,101556,101561,101566,101571,101592],{"__ignoreMap":135},[139,101459,101460,101462,101464,101466,101468,101470,101472,101474,101476,101478,101480,101482,101484],{"class":141,"line":142},[139,101461,3255],{"class":145},[139,101463,150],{"class":149},[139,101465,95230],{"class":145},[139,101467,410],{"class":153},[139,101469,2816],{"class":145},[139,101471,2763],{"class":153},[139,101473,95235],{"class":145},[139,101475,421],{"class":153},[139,101477,2816],{"class":145},[139,101479,2782],{"class":153},[139,101481,2816],{"class":145},[139,101483,416],{"class":153},[139,101485,164],{"class":145},[139,101487,101488],{"class":141,"line":210},[139,101489,101490],{"class":145},"x.shape\n",[139,101492,101493],{"class":141,"line":254},[139,101494,101495],{"class":2512},"#结果：（3,6,2）\n",[139,101497,101498],{"class":141,"line":262},[139,101499,101500],{"class":2512},"#使用np.transpose()进行转置 变为(2,6,3)\n",[139,101502,101503,101506,101508,101510,101512,101514,101516],{"class":141,"line":313},[139,101504,101505],{"class":145},"np.transpose(x,(",[139,101507,416],{"class":153},[139,101509,2816],{"class":145},[139,101511,410],{"class":153},[139,101513,2816],{"class":145},[139,101515,2634],{"class":153},[139,101517,101518],{"class":145},")).shape\n",[139,101520,101521],{"class":141,"line":462},[139,101522,101523],{"class":2512},"#结果：(2,6,3)\n",[139,101525,101526,101528,101530,101532,101534,101536,101538,101540,101542,101544,101546,101548,101550,101552,101554],{"class":141,"line":474},[139,101527,100733],{"class":145},[139,101529,150],{"class":149},[139,101531,95230],{"class":145},[139,101533,410],{"class":153},[139,101535,2816],{"class":145},[139,101537,2763],{"class":153},[139,101539,95235],{"class":145},[139,101541,421],{"class":153},[139,101543,2816],{"class":145},[139,101545,416],{"class":153},[139,101547,2816],{"class":145},[139,101549,410],{"class":153},[139,101551,2816],{"class":145},[139,101553,2782],{"class":153},[139,101555,164],{"class":145},[139,101557,101558],{"class":141,"line":484},[139,101559,101560],{"class":145},"aaaa.shape\n",[139,101562,101563],{"class":141,"line":989},[139,101564,101565],{"class":2512},"#结果：（3，2，1，6）\n",[139,101567,101568],{"class":141,"line":994},[139,101569,101570],{"class":2512},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[139,101572,101573,101576,101578,101580,101582,101584,101586,101588,101590],{"class":141,"line":999},[139,101574,101575],{"class":145},"np.transpose(aaaa,(",[139,101577,410],{"class":153},[139,101579,2816],{"class":145},[139,101581,416],{"class":153},[139,101583,2816],{"class":145},[139,101585,2634],{"class":153},[139,101587,2816],{"class":145},[139,101589,421],{"class":153},[139,101591,101518],{"class":145},[139,101593,101594],{"class":141,"line":1006},[139,101595,101596],{"class":2512},"#结果：(2,1,3,6)\n",[2348,101598,101599],{},"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":135,"searchDepth":210,"depth":210,"links":101601},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101326,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101608,"title":101609,"body":101610,"description":2384,"extension":2385,"meta":102344,"navigation":842,"path":102345,"seo":102346,"stem":102347,"__hash__":102348},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101611,"toc":102342},[101612,101615,101618,101621,101624,101627,101630,101633,101636,101745,101748,101751,102339],[10,101613,101609],{"id":101614},"_8数组分割",[19,101616,101617],{},"split分割",[19,101619,101620],{},"numpy.split(ary,indics_or_sections,axis)",[19,101622,101623],{},"解释：",[19,101625,101626],{},"ary:被分割的数组",[19,101628,101629],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101631,101632],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101634,101635],{},"①一维数组的分割",[130,101637,101639],{"className":132,"code":101638,"language":134,"meta":135,"style":135},"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",[50,101640,101641,101657,101662,101671,101675,101680,101688,101692,101697,101702,101715,101719,101724,101736,101740],{"__ignoreMap":135},[139,101642,101643,101645,101647,101649,101651,101653,101655],{"class":141,"line":142},[139,101644,2680],{"class":145},[139,101646,150],{"class":149},[139,101648,95230],{"class":145},[139,101650,410],{"class":153},[139,101652,2816],{"class":145},[139,101654,2858],{"class":153},[139,101656,164],{"class":145},[139,101658,101659],{"class":141,"line":210},[139,101660,101661],{"class":2512},"#如果传入整数，必须能够平分，否则会报错\n",[139,101663,101664,101667,101669],{"class":141,"line":254},[139,101665,101666],{"class":145},"np.split(a,",[139,101668,416],{"class":153},[139,101670,164],{"class":145},[139,101672,101673],{"class":141,"line":262},[139,101674,95792],{"class":2512},[139,101676,101677],{"class":141,"line":313},[139,101678,101679],{"class":2512},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[139,101681,101682,101684,101686],{"class":141,"line":462},[139,101683,101666],{"class":145},[139,101685,1476],{"class":153},[139,101687,164],{"class":145},[139,101689,101690],{"class":141,"line":474},[139,101691,95792],{"class":2512},[139,101693,101694],{"class":141,"line":484},[139,101695,101696],{"class":2512},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[139,101698,101699],{"class":141,"line":989},[139,101700,101701],{"class":2512},"#传入数组\n",[139,101703,101704,101707,101709,101711,101713],{"class":141,"line":994},[139,101705,101706],{"class":145},"np.split(a,[",[139,101708,421],{"class":153},[139,101710,2816],{"class":145},[139,101712,1481],{"class":153},[139,101714,6935],{"class":145},[139,101716,101717],{"class":141,"line":999},[139,101718,95792],{"class":2512},[139,101720,101721],{"class":141,"line":1006},[139,101722,101723],{"class":2512},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[139,101725,101726,101728,101730,101732,101734],{"class":141,"line":1027},[139,101727,101706],{"class":145},[139,101729,1481],{"class":153},[139,101731,2816],{"class":145},[139,101733,2807],{"class":153},[139,101735,6935],{"class":145},[139,101737,101738],{"class":141,"line":1040},[139,101739,95792],{"class":2512},[139,101741,101742],{"class":141,"line":2160},[139,101743,101744],{"class":2512},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101746,101747],{},"②二维数组的分割",[19,101749,101750],{},"使用split()",[130,101752,101754],{"className":132,"code":101753,"language":134,"meta":135,"style":135},"#二维数组分割\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",[50,101755,101756,101761,101785,101790,101799,101803,101807,101812,101817,101822,101827,101832,101837,101842,101846,101859,101863,101867,101871,101875,101879,101884,101889,101894,101898,101903,101919,101923,101927,101932,101937,101942,101947,101952,101957,101962,101967,101972,101977,101982,101987,101992,101997,102002,102007,102012,102017,102021,102025,102045,102049,102053,102058,102063,102068,102073,102078,102083,102088,102093,102098,102103,102108,102113,102118,102123,102128,102133,102138,102143,102147,102152,102161,102165,102169,102173,102177,102181,102185,102189,102193,102197,102206,102210,102214,102218,102222,102226,102230,102234,102238,102242,102246,102250,102254,102258,102262,102266,102270,102274,102278,102282,102286,102290,102303,102307,102311,102315,102319,102323,102327,102331,102335],{"__ignoreMap":135},[139,101757,101758],{"class":141,"line":142},[139,101759,101760],{"class":2512},"#二维数组分割\n",[139,101762,101763,101765,101767,101769,101771,101773,101775,101777,101779,101781,101783],{"class":141,"line":210},[139,101764,95534],{"class":145},[139,101766,150],{"class":149},[139,101768,95230],{"class":145},[139,101770,410],{"class":153},[139,101772,2816],{"class":145},[139,101774,2763],{"class":153},[139,101776,95235],{"class":145},[139,101778,2782],{"class":153},[139,101780,2816],{"class":145},[139,101782,2782],{"class":153},[139,101784,164],{"class":145},[139,101786,101787],{"class":141,"line":254},[139,101788,101789],{"class":2512},"#默认axis=0  传入整数平均分,按行来的\n",[139,101791,101792,101795,101797],{"class":141,"line":262},[139,101793,101794],{"class":145},"np.split(aa,",[139,101796,421],{"class":153},[139,101798,164],{"class":145},[139,101800,101801],{"class":141,"line":313},[139,101802,97991],{"class":2512},[139,101804,101805],{"class":141,"line":462},[139,101806,96156],{"class":160},[139,101808,101809],{"class":141,"line":474},[139,101810,101811],{"class":160},"[array([[ 1,  2,  3,  4,  5,  6],\n",[139,101813,101814],{"class":141,"line":484},[139,101815,101816],{"class":160},"        [ 7,  8,  9, 10, 11, 12]]),\n",[139,101818,101819],{"class":141,"line":989},[139,101820,101821],{"class":160}," array([[13, 14, 15, 16, 17, 18],\n",[139,101823,101824],{"class":141,"line":994},[139,101825,101826],{"class":160},"        [19, 20, 21, 22, 23, 24]]),\n",[139,101828,101829],{"class":141,"line":999},[139,101830,101831],{"class":160}," array([[25, 26, 27, 28, 29, 30],\n",[139,101833,101834],{"class":141,"line":1006},[139,101835,101836],{"class":160},"        [31, 32, 33, 34, 35, 36]])]\n",[139,101838,101839],{"class":141,"line":1027},[139,101840,101841],{"class":160}," '''\n",[139,101843,101844],{"class":141,"line":1040},[139,101845,101701],{"class":2512},[139,101847,101848,101851,101853,101855,101857],{"class":141,"line":2160},[139,101849,101850],{"class":145},"np.split(aa,[",[139,101852,416],{"class":153},[139,101854,2816],{"class":145},[139,101856,1481],{"class":153},[139,101858,6935],{"class":145},[139,101860,101861],{"class":141,"line":2188},[139,101862,97991],{"class":2512},[139,101864,101865],{"class":141,"line":3944},[139,101866,96156],{"class":160},[139,101868,101869],{"class":141,"line":3963},[139,101870,101811],{"class":160},[139,101872,101873],{"class":141,"line":3968},[139,101874,101816],{"class":160},[139,101876,101877],{"class":141,"line":3982},[139,101878,101821],{"class":160},[139,101880,101881],{"class":141,"line":3987},[139,101882,101883],{"class":160},"        [19, 20, 21, 22, 23, 24],\n",[139,101885,101886],{"class":141,"line":4014},[139,101887,101888],{"class":160},"        [25, 26, 27, 28, 29, 30]]),\n",[139,101890,101891],{"class":141,"line":4019},[139,101892,101893],{"class":160}," array([[31, 32, 33, 34, 35, 36]])]\n",[139,101895,101896],{"class":141,"line":4036},[139,101897,96156],{"class":160},[139,101899,101900],{"class":141,"line":4041},[139,101901,101902],{"class":2512},"#axis=1 按照列来分\n",[139,101904,101905,101907,101909,101911,101913,101915,101917],{"class":141,"line":4046},[139,101906,101794],{"class":145},[139,101908,421],{"class":153},[139,101910,2816],{"class":145},[139,101912,49752],{"class":2111},[139,101914,150],{"class":149},[139,101916,410],{"class":153},[139,101918,164],{"class":145},[139,101920,101921],{"class":141,"line":4051},[139,101922,97991],{"class":2512},[139,101924,101925],{"class":141,"line":4065},[139,101926,96156],{"class":160},[139,101928,101929],{"class":141,"line":4070},[139,101930,101931],{"class":160},"[array([[ 1,  2],\n",[139,101933,101934],{"class":141,"line":4860},[139,101935,101936],{"class":160},"        [ 7,  8],\n",[139,101938,101939],{"class":141,"line":4874},[139,101940,101941],{"class":160},"        [13, 14],\n",[139,101943,101944],{"class":141,"line":4882},[139,101945,101946],{"class":160},"        [19, 20],\n",[139,101948,101949],{"class":141,"line":4887},[139,101950,101951],{"class":160},"        [25, 26],\n",[139,101953,101954],{"class":141,"line":4893},[139,101955,101956],{"class":160},"        [31, 32]]),\n",[139,101958,101959],{"class":141,"line":4899},[139,101960,101961],{"class":160}," array([[ 3,  4],\n",[139,101963,101964],{"class":141,"line":4904},[139,101965,101966],{"class":160},"        [ 9, 10],\n",[139,101968,101969],{"class":141,"line":10222},[139,101970,101971],{"class":160},"        [15, 16],\n",[139,101973,101974],{"class":141,"line":10246},[139,101975,101976],{"class":160},"        [21, 22],\n",[139,101978,101979],{"class":141,"line":10251},[139,101980,101981],{"class":160},"        [27, 28],\n",[139,101983,101984],{"class":141,"line":10257},[139,101985,101986],{"class":160},"        [33, 34]]),\n",[139,101988,101989],{"class":141,"line":10284},[139,101990,101991],{"class":160}," array([[ 5,  6],\n",[139,101993,101994],{"class":141,"line":10289},[139,101995,101996],{"class":160},"        [11, 12],\n",[139,101998,101999],{"class":141,"line":10295},[139,102000,102001],{"class":160},"        [17, 18],\n",[139,102003,102004],{"class":141,"line":10307},[139,102005,102006],{"class":160},"        [23, 24],\n",[139,102008,102009],{"class":141,"line":10319},[139,102010,102011],{"class":160},"        [29, 30],\n",[139,102013,102014],{"class":141,"line":10331},[139,102015,102016],{"class":160},"        [35, 36]])]\n",[139,102018,102019],{"class":141,"line":11990},[139,102020,101841],{"class":160},[139,102022,102023],{"class":141,"line":12015},[139,102024,101701],{"class":2512},[139,102026,102027,102029,102031,102033,102035,102037,102039,102041,102043],{"class":141,"line":12038},[139,102028,101850],{"class":145},[139,102030,410],{"class":153},[139,102032,2816],{"class":145},[139,102034,416],{"class":153},[139,102036,43851],{"class":145},[139,102038,49752],{"class":2111},[139,102040,150],{"class":149},[139,102042,410],{"class":153},[139,102044,164],{"class":145},[139,102046,102047],{"class":141,"line":12062},[139,102048,95792],{"class":2512},[139,102050,102051],{"class":141,"line":12067},[139,102052,96156],{"class":160},[139,102054,102055],{"class":141,"line":12072},[139,102056,102057],{"class":160},"[array([[ 1],\n",[139,102059,102060],{"class":141,"line":12077},[139,102061,102062],{"class":160},"        [ 7],\n",[139,102064,102065],{"class":141,"line":12086},[139,102066,102067],{"class":160},"        [13],\n",[139,102069,102070],{"class":141,"line":12091},[139,102071,102072],{"class":160},"        [19],\n",[139,102074,102075],{"class":141,"line":12097},[139,102076,102077],{"class":160},"        [25],\n",[139,102079,102080],{"class":141,"line":12118},[139,102081,102082],{"class":160},"        [31]]),\n",[139,102084,102085],{"class":141,"line":12124},[139,102086,102087],{"class":160}," array([[ 2],\n",[139,102089,102090],{"class":141,"line":12138},[139,102091,102092],{"class":160},"        [ 8],\n",[139,102094,102095],{"class":141,"line":12144},[139,102096,102097],{"class":160},"        [14],\n",[139,102099,102100],{"class":141,"line":12171},[139,102101,102102],{"class":160},"        [20],\n",[139,102104,102105],{"class":141,"line":12180},[139,102106,102107],{"class":160},"        [26],\n",[139,102109,102110],{"class":141,"line":12186},[139,102111,102112],{"class":160},"        [32]]),\n",[139,102114,102115],{"class":141,"line":12194},[139,102116,102117],{"class":160}," array([[ 3,  4,  5,  6],\n",[139,102119,102120],{"class":141,"line":12199},[139,102121,102122],{"class":160},"        [ 9, 10, 11, 12],\n",[139,102124,102125],{"class":141,"line":18871},[139,102126,102127],{"class":160},"        [15, 16, 17, 18],\n",[139,102129,102130],{"class":141,"line":18877},[139,102131,102132],{"class":160},"        [21, 22, 23, 24],\n",[139,102134,102135],{"class":141,"line":18900},[139,102136,102137],{"class":160},"        [27, 28, 29, 30],\n",[139,102139,102140],{"class":141,"line":18906},[139,102141,102142],{"class":160},"        [33, 34, 35, 36]])]\n",[139,102144,102145],{"class":141,"line":18929},[139,102146,96156],{"class":160},[139,102148,102149],{"class":141,"line":18943},[139,102150,102151],{"class":2512},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[139,102153,102154,102157,102159],{"class":141,"line":18963},[139,102155,102156],{"class":145},"np.vsplit(aa,",[139,102158,421],{"class":153},[139,102160,164],{"class":145},[139,102162,102163],{"class":141,"line":18969},[139,102164,95792],{"class":2512},[139,102166,102167],{"class":141,"line":18980},[139,102168,96156],{"class":160},[139,102170,102171],{"class":141,"line":19003},[139,102172,101811],{"class":160},[139,102174,102175],{"class":141,"line":19025},[139,102176,101816],{"class":160},[139,102178,102179],{"class":141,"line":19030},[139,102180,101821],{"class":160},[139,102182,102183],{"class":141,"line":19036},[139,102184,101826],{"class":160},[139,102186,102187],{"class":141,"line":19050},[139,102188,101831],{"class":160},[139,102190,102191],{"class":141,"line":19063},[139,102192,101836],{"class":160},[139,102194,102195],{"class":141,"line":19068},[139,102196,96156],{"class":160},[139,102198,102199,102202,102204],{"class":141,"line":19082},[139,102200,102201],{"class":145},"np.hsplit(aa,",[139,102203,421],{"class":153},[139,102205,164],{"class":145},[139,102207,102208],{"class":141,"line":19087},[139,102209,95792],{"class":2512},[139,102211,102212],{"class":141,"line":19093},[139,102213,96156],{"class":160},[139,102215,102216],{"class":141,"line":19098},[139,102217,101931],{"class":160},[139,102219,102220],{"class":141,"line":19112},[139,102221,101936],{"class":160},[139,102223,102224],{"class":141,"line":19117},[139,102225,101941],{"class":160},[139,102227,102228],{"class":141,"line":19122},[139,102229,101946],{"class":160},[139,102231,102232],{"class":141,"line":19136},[139,102233,101951],{"class":160},[139,102235,102236],{"class":141,"line":19148},[139,102237,101956],{"class":160},[139,102239,102240],{"class":141,"line":19153},[139,102241,101961],{"class":160},[139,102243,102244],{"class":141,"line":19166},[139,102245,101966],{"class":160},[139,102247,102248],{"class":141,"line":19171},[139,102249,101971],{"class":160},[139,102251,102252],{"class":141,"line":19176},[139,102253,101976],{"class":160},[139,102255,102256],{"class":141,"line":19181},[139,102257,101981],{"class":160},[139,102259,102260],{"class":141,"line":19194},[139,102261,101986],{"class":160},[139,102263,102264],{"class":141,"line":19199},[139,102265,101991],{"class":160},[139,102267,102268],{"class":141,"line":34880},[139,102269,101996],{"class":160},[139,102271,102272],{"class":141,"line":34886},[139,102273,102001],{"class":160},[139,102275,102276],{"class":141,"line":34892},[139,102277,102006],{"class":160},[139,102279,102280],{"class":141,"line":34898},[139,102281,102011],{"class":160},[139,102283,102284],{"class":141,"line":34904},[139,102285,102016],{"class":160},[139,102287,102288],{"class":141,"line":34915},[139,102289,96156],{"class":160},[139,102291,102292,102295,102297,102299,102301],{"class":141,"line":34921},[139,102293,102294],{"class":145},"np.vsplit(aa,[",[139,102296,416],{"class":153},[139,102298,2816],{"class":145},[139,102300,1481],{"class":153},[139,102302,6935],{"class":145},[139,102304,102305],{"class":141,"line":34941},[139,102306,95792],{"class":2512},[139,102308,102309],{"class":141,"line":34947},[139,102310,96156],{"class":160},[139,102312,102313],{"class":141,"line":34958},[139,102314,101811],{"class":160},[139,102316,102317],{"class":141,"line":34964},[139,102318,101816],{"class":160},[139,102320,102321],{"class":141,"line":34970},[139,102322,101821],{"class":160},[139,102324,102325],{"class":141,"line":34976},[139,102326,101883],{"class":160},[139,102328,102329],{"class":141,"line":34982},[139,102330,101888],{"class":160},[139,102332,102333],{"class":141,"line":34988},[139,102334,101893],{"class":160},[139,102336,102337],{"class":141,"line":34994},[139,102338,101841],{"class":160},[2348,102340,102341],{},"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":135,"searchDepth":210,"depth":210,"links":102343},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101609,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102350,"title":102351,"body":102352,"description":2384,"extension":2385,"meta":102846,"navigation":842,"path":102847,"seo":102848,"stem":102849,"__hash__":102850},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102353,"toc":102837},[102354,102357,102360,102385,102389,102448,102500,102504,102506,102542,102596,102598,102636,102707,102711,102716,102720,102723,102756,102759,102763,102766,102769,102772,102775,102780,102784,102787,102790,102793,102796,102801,102805,102810,102813,102834],[10,102355,102351],{"id":102356},"_9数学函数",[19,102358,102359],{},"补充回顾：python的列表推导式",[130,102361,102363],{"className":132,"code":102362,"language":134,"meta":135,"style":135},"[1\u002Fi for i in a]\n",[50,102364,102365],{"__ignoreMap":135},[139,102366,102367,102369,102371,102373,102376,102378,102380,102382],{"class":141,"line":142},[139,102368,3325],{"class":145},[139,102370,410],{"class":153},[139,102372,3019],{"class":149},[139,102374,102375],{"class":145},"i ",[139,102377,1970],{"class":149},[139,102379,11712],{"class":145},[139,102381,1976],{"class":149},[139,102383,102384],{"class":145}," a]\n",[14,102386,102388],{"id":102387},"_91-求倒数","9.1 求倒数",[130,102390,102392],{"className":132,"code":102391,"language":134,"meta":135,"style":135},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[50,102393,102394,102399,102427,102439],{"__ignoreMap":135},[139,102395,102396],{"class":141,"line":142},[139,102397,102398],{"class":2512},"#数组求倒数\n",[139,102400,102401,102403,102405,102407,102409,102411,102413,102415,102417,102419,102421,102423,102425],{"class":141,"line":210},[139,102402,2680],{"class":145},[139,102404,150],{"class":149},[139,102406,3325],{"class":145},[139,102408,410],{"class":153},[139,102410,2816],{"class":145},[139,102412,416],{"class":153},[139,102414,2816],{"class":145},[139,102416,421],{"class":153},[139,102418,2816],{"class":145},[139,102420,1476],{"class":153},[139,102422,2816],{"class":145},[139,102424,1481],{"class":153},[139,102426,424],{"class":145},[139,102428,102429,102431,102433,102436],{"class":141,"line":254},[139,102430,2704],{"class":145},[139,102432,150],{"class":149},[139,102434,102435],{"class":145},"np.array(a)",[139,102437,102438],{"class":2512},"#将列表转换为数组\n",[139,102440,102441,102443,102445],{"class":141,"line":262},[139,102442,410],{"class":153},[139,102444,3019],{"class":149},[139,102446,102447],{"class":145},"b\n",[130,102449,102451],{"className":132,"code":102450,"language":134,"meta":135,"style":135},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[50,102452,102453,102481,102490,102495],{"__ignoreMap":135},[139,102454,102455,102457,102459,102461,102463,102465,102467,102469,102471,102473,102475,102477,102479],{"class":141,"line":142},[139,102456,2680],{"class":145},[139,102458,150],{"class":149},[139,102460,3325],{"class":145},[139,102462,410],{"class":153},[139,102464,2816],{"class":145},[139,102466,416],{"class":153},[139,102468,2816],{"class":145},[139,102470,421],{"class":153},[139,102472,2816],{"class":145},[139,102474,1476],{"class":153},[139,102476,2816],{"class":145},[139,102478,1481],{"class":153},[139,102480,424],{"class":145},[139,102482,102483,102485,102487],{"class":141,"line":210},[139,102484,2704],{"class":145},[139,102486,150],{"class":149},[139,102488,102489],{"class":145},"np.array(a)\n",[139,102491,102492],{"class":141,"line":254},[139,102493,102494],{"class":2512},"#调用numpy中的函数reciprocal()\n",[139,102496,102497],{"class":141,"line":262},[139,102498,102499],{"class":145},"np.reciprocal(b)\n",[14,102501,102503],{"id":102502},"_92-求平方","9.2 求平方",[19,102505,96758],{},[130,102507,102509],{"className":132,"code":102508,"language":134,"meta":135,"style":135},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[50,102510,102511,102516,102521,102537],{"__ignoreMap":135},[139,102512,102513],{"class":141,"line":142},[139,102514,102515],{"class":2512},"#square()，求平方\n",[139,102517,102518],{"class":141,"line":210},[139,102519,102520],{"class":2512},"#一维数组\n",[139,102522,102523,102525,102527,102529,102531,102533,102535],{"class":141,"line":254},[139,102524,2680],{"class":145},[139,102526,150],{"class":149},[139,102528,95230],{"class":145},[139,102530,410],{"class":153},[139,102532,2816],{"class":145},[139,102534,536],{"class":153},[139,102536,164],{"class":145},[139,102538,102539],{"class":141,"line":262},[139,102540,102541],{"class":145},"np.square(a)\n",[130,102543,102545],{"className":132,"code":102544,"language":134,"meta":135,"style":135},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[50,102546,102547,102552,102557,102578],{"__ignoreMap":135},[139,102548,102549],{"class":141,"line":142},[139,102550,102551],{"class":2512},"#或者通过循环遍历的形式来计算\n",[139,102553,102554],{"class":141,"line":210},[139,102555,102556],{"class":2512},"#这是一个列表\n",[139,102558,102559,102562,102564,102566,102568,102570,102572,102575],{"class":141,"line":254},[139,102560,102561],{"class":145},"[i",[139,102563,2892],{"class":149},[139,102565,102375],{"class":145},[139,102567,1970],{"class":149},[139,102569,11712],{"class":145},[139,102571,1976],{"class":149},[139,102573,102574],{"class":145}," a]",[139,102576,102577],{"class":2512},"#这个求完之后在数列当中\n",[139,102579,102580,102583,102585,102587,102589,102591,102593],{"class":141,"line":262},[139,102581,102582],{"class":145},"np.array([i",[139,102584,2892],{"class":149},[139,102586,102375],{"class":145},[139,102588,1970],{"class":149},[139,102590,11712],{"class":145},[139,102592,1976],{"class":149},[139,102594,102595],{"class":145}," a])\n",[19,102597,95519],{},[130,102599,102601],{"className":132,"code":102600,"language":134,"meta":135,"style":135},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[50,102602,102603,102607,102631],{"__ignoreMap":135},[139,102604,102605],{"class":141,"line":142},[139,102606,95529],{"class":2512},[139,102608,102609,102611,102613,102615,102617,102619,102621,102623,102625,102627,102629],{"class":141,"line":210},[139,102610,95534],{"class":145},[139,102612,150],{"class":149},[139,102614,95230],{"class":145},[139,102616,410],{"class":153},[139,102618,2816],{"class":145},[139,102620,2959],{"class":153},[139,102622,95235],{"class":145},[139,102624,1476],{"class":153},[139,102626,2816],{"class":145},[139,102628,421],{"class":153},[139,102630,164],{"class":145},[139,102632,102633],{"class":141,"line":254},[139,102634,102635],{"class":145},"np.square(aa)\n",[130,102637,102639],{"className":132,"code":102638,"language":134,"meta":135,"style":135},"#传统的方式\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",[50,102640,102641,102646,102655,102671,102687,102702],{"__ignoreMap":135},[139,102642,102643],{"class":141,"line":142},[139,102644,102645],{"class":2512},"#传统的方式\n",[139,102647,102648,102650,102652],{"class":141,"line":210},[139,102649,100414],{"class":145},[139,102651,150],{"class":149},[139,102653,102654],{"class":145},"np.empty_like(aa)\n",[139,102656,102657,102659,102661,102663,102665,102667,102669],{"class":141,"line":254},[139,102658,1970],{"class":149},[139,102660,11712],{"class":145},[139,102662,1976],{"class":149},[139,102664,34690],{"class":153},[139,102666,157],{"class":145},[139,102668,1476],{"class":153},[139,102670,558],{"class":145},[139,102672,102673,102675,102677,102679,102681,102683,102685],{"class":141,"line":262},[139,102674,5482],{"class":149},[139,102676,11774],{"class":145},[139,102678,1976],{"class":149},[139,102680,34690],{"class":153},[139,102682,157],{"class":145},[139,102684,421],{"class":153},[139,102686,558],{"class":145},[139,102688,102689,102692,102694,102697,102699],{"class":141,"line":313},[139,102690,102691],{"class":145},"        bb[i,j]",[139,102693,150],{"class":149},[139,102695,102696],{"class":145},"aa[i,j]",[139,102698,2892],{"class":149},[139,102700,102701],{"class":145},"aa[i,j]\n",[139,102703,102704],{"class":141,"line":462},[139,102705,102706],{"class":145},"bb\n",[14,102708,102710],{"id":102709},"_93-求各元素的符号","9.3 求各元素的符号",[19,102712,102713],{},[3760,102714],{"alt":135,"src":102715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102717,102719],{"id":102718},"_94-modf函数","9.4 modf函数",[19,102721,102722],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[130,102724,102726],{"className":132,"code":102725,"language":134,"meta":135,"style":135},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[50,102727,102728,102751],{"__ignoreMap":135},[139,102729,102730,102732,102734,102736,102738,102740,102742,102744,102746,102749],{"class":141,"line":142},[139,102731,2680],{"class":145},[139,102733,150],{"class":149},[139,102735,95230],{"class":145},[139,102737,855],{"class":149},[139,102739,536],{"class":153},[139,102741,2816],{"class":145},[139,102743,536],{"class":153},[139,102745,2816],{"class":145},[139,102747,102748],{"class":153},"0.3",[139,102750,164],{"class":145},[139,102752,102753],{"class":141,"line":210},[139,102754,102755],{"class":145},"np.modf(a)\n",[19,102757,102758],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102760,102762],{"id":102761},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102764,102765],{},"np.cell()",[19,102767,102768],{},"np.floor()",[19,102770,102771],{},"np.rint()",[19,102773,102774],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102776,102777],{},[3760,102778],{"alt":135,"src":102779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102781,102783],{"id":102782},"_96-around函数","9.6 around()函数",[19,102785,102786],{},"around()函数也可以实现对数的小数位数进行操作",[19,102788,102789],{},"其中的参数：",[19,102791,102792],{},"1.要传的数组",[19,102794,102795],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102797,102798],{},[3760,102799],{"alt":135,"src":102800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102802,102804],{"id":102803},"_97-三角函数","9.7 三角函数",[19,102806,102807],{},[3760,102808],{"alt":135,"src":102809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102811,102812],{},"引入图像模块非常重要",[130,102814,102816],{"className":132,"code":102815,"language":134,"meta":135,"style":135},"from matplotlib import pyplot as plt\n",[50,102817,102818],{"__ignoreMap":135},[139,102819,102820,102822,102825,102827,102830,102832],{"class":141,"line":142},[139,102821,1265],{"class":149},[139,102823,102824],{"class":145}," matplotlib ",[139,102826,1064],{"class":149},[139,102828,102829],{"class":145}," pyplot ",[139,102831,1035],{"class":149},[139,102833,33686],{"class":145},[2348,102835,102836],{},"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":135,"searchDepth":210,"depth":210,"links":102838},[102839,102840,102841,102842,102843,102844,102845],{"id":102387,"depth":210,"text":102388},{"id":102502,"depth":210,"text":102503},{"id":102709,"depth":210,"text":102710},{"id":102718,"depth":210,"text":102719},{"id":102761,"depth":210,"text":102762},{"id":102782,"depth":210,"text":102783},{"id":102803,"depth":210,"text":102804},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102351,"description":2384},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102852,"title":102853,"body":102854,"description":2384,"extension":2385,"meta":102858,"navigation":842,"path":102859,"seo":102860,"stem":102861,"__hash__":102862},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102855,"toc":102856},[],{"title":135,"searchDepth":210,"depth":210,"links":102857},[],{"category":52658},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102853,"description":2384},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102864,"title":102865,"body":102866,"description":135,"extension":2385,"meta":104871,"navigation":842,"path":104872,"seo":104873,"stem":104874,"__hash__":104875},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102867,"toc":104847},[102868,102871,102875,102878,102881,102887,102890,102913,102916,102950,102953,102994,102998,103001,103094,103097,103141,103144,103161,103164,103178,103181,103184,103229,103232,103269,103273,103276,103282,103287,103307,103311,103314,103380,103383,103401,103405,103408,103437,103447,103453,103457,103460,103466,103477,103481,103484,103514,103517,103795,103798,103801,103812,103815,103818,103840,103847,103850,103868,103871,103874,103888,103896,103899,103925,103931,103934,103937,103947,103959,103979,103988,104008,104018,104042,104055,104069,104074,104115,104132,104157,104169,104189,104195,104240,104259,104276,104288,104304,104311,104323,104332,104367,104388,104413,104426,104450,104465,104490,104493,104514,104523,104526,104537,104541,104544,104550,104562,104569,104573,104576,104588,104591,104605,104608,104618,104628,104631,104671,104674,104678,104684,104687,104701,104705,104708,104741,104745,104748,104771,104779,104782,104788,104794,104797,104800,104828,104832,104835,104841,104844],[10,102869,102865],{"id":102870},"_1环境安装与第一个-mujoco-程序",[14,102872,102874],{"id":102873},"_1目标说明","1.目标说明",[19,102876,102877],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102879,102880],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[130,102882,102885],{"className":102883,"code":102884,"language":645,"meta":135},[643],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[50,102886,102884],{"__ignoreMap":135},[19,102888,102889],{},"需要掌握:",[1760,102891,102892,102895,102898,102903,102908],{},[1763,102893,102894],{},"Fedora 44 下 MuJoCo 的系统依赖",[1763,102896,102897],{},"Python 虚拟环境创建",[1763,102899,102900],{},[50,102901,102902],{},"mujoco.MjModel",[1763,102904,102905],{},[50,102906,102907],{},"mujoco.MjData",[1763,102909,102910],{},[50,102911,102912],{},"mujoco.mj_step(model, data)",[19,102914,102915],{},"MuJoCo 中最重要的两个对象:",[26,102917,102918,102928],{},[29,102919,102920],{},[32,102921,102922,102925],{},[35,102923,102924],{"align":26003},"对象",[35,102926,102927],{"align":26003},"含义",[42,102929,102930,102940],{},[32,102931,102932,102937],{},[47,102933,102934],{"align":26003},[50,102935,102936],{},"MjModel",[47,102938,102939],{"align":26003},"模型结构，来自 XML，基本不随时间变化",[32,102941,102942,102947],{},[47,102943,102944],{"align":26003},[50,102945,102946],{},"MjData",[47,102948,102949],{"align":26003},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102951,102952],{},"可以先用一个类比理解：",[26,102954,102955,102965],{},[29,102956,102957],{},[32,102958,102959,102962],{},[35,102960,102961],{"align":26003},"类比",[35,102963,102964],{"align":26003},"MuJoCo 对象",[42,102966,102967,102976,102985],{},[32,102968,102969,102972],{},[47,102970,102971],{"align":26003},"游戏地图和角色配置",[47,102973,102974],{"align":26003},[50,102975,102936],{},[32,102977,102978,102981],{},[47,102979,102980],{"align":26003},"游戏运行到当前帧的状态",[47,102982,102983],{"align":26003},[50,102984,102946],{},[32,102986,102987,102990],{},[47,102988,102989],{"align":26003},"前进一帧",[47,102991,102992],{"align":26003},[50,102993,102912],{},[14,102995,102997],{"id":102996},"_2环境与依赖安装","2.环境与依赖安装",[19,102999,103000],{},"Fedora 44 系统依赖:",[130,103002,103004],{"className":1830,"code":103003,"language":1832,"meta":135,"style":135},"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",[50,103005,103006,103018,103031,103044,103054,103064,103083],{"__ignoreMap":135},[139,103007,103008,103010,103012,103014,103016],{"class":141,"line":142},[139,103009,26840],{"class":781},[139,103011,28575],{"class":160},[139,103013,1841],{"class":160},[139,103015,28660],{"class":153},[139,103017,26941],{"class":153},[139,103019,103020,103023,103026,103029],{"class":141,"line":210},[139,103021,103022],{"class":160},"  python3",[139,103024,103025],{"class":160}," python3-pip",[139,103027,103028],{"class":160}," python3-virtualenv",[139,103030,26941],{"class":153},[139,103032,103033,103036,103039,103042],{"class":141,"line":254},[139,103034,103035],{"class":160},"  mesa-libGL",[139,103037,103038],{"class":160}," mesa-libGLU",[139,103040,103041],{"class":160}," mesa-dri-drivers",[139,103043,26941],{"class":153},[139,103045,103046,103049,103052],{"class":141,"line":262},[139,103047,103048],{"class":160},"  libglvnd-glx",[139,103050,103051],{"class":160}," libglvnd-opengl",[139,103053,26941],{"class":153},[139,103055,103056,103059,103062],{"class":141,"line":313},[139,103057,103058],{"class":160},"  glfw",[139,103060,103061],{"class":160}," glfw-devel",[139,103063,26941],{"class":153},[139,103065,103066,103069,103072,103075,103078,103081],{"class":141,"line":462},[139,103067,103068],{"class":160},"  libX11",[139,103070,103071],{"class":160}," libXcursor",[139,103073,103074],{"class":160}," libXi",[139,103076,103077],{"class":160}," libXinerama",[139,103079,103080],{"class":160}," libXrandr",[139,103082,26941],{"class":153},[139,103084,103085,103088,103091],{"class":141,"line":474},[139,103086,103087],{"class":160},"  gcc",[139,103089,103090],{"class":160}," gcc-c++",[139,103092,103093],{"class":160}," make\n",[19,103095,103096],{},"创建 Python 环境:",[130,103098,103100],{"className":1830,"code":103099,"language":1832,"meta":135,"style":135},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[50,103101,103102,103116,103124],{"__ignoreMap":135},[139,103103,103104,103107,103110,103113],{"class":141,"line":142},[139,103105,103106],{"class":781},"python3",[139,103108,103109],{"class":153}," -m",[139,103111,103112],{"class":160}," venv",[139,103114,103115],{"class":160}," .venv\n",[139,103117,103118,103121],{"class":141,"line":210},[139,103119,103120],{"class":153},"source",[139,103122,103123],{"class":160}," .venv\u002Fbin\u002Factivate\n",[139,103125,103126,103128,103130,103133,103135,103138],{"class":141,"line":254},[139,103127,134],{"class":781},[139,103129,103109],{"class":153},[139,103131,103132],{"class":160}," pip",[139,103134,1841],{"class":160},[139,103136,103137],{"class":153}," --upgrade",[139,103139,103140],{"class":160}," pip\n",[19,103142,103143],{},"pip 安装:",[130,103145,103147],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},"pip install \"mujoco>=2.3\" numpy\n",[50,103148,103149],{"__ignoreMap":135},[139,103150,103151,103153,103155,103158],{"class":141,"line":142},[139,103152,1826],{"class":781},[139,103154,1841],{"class":160},[139,103156,103157],{"class":160}," \"mujoco>=2.3\"",[139,103159,103160],{"class":160}," numpy\n",[19,103162,103163],{},"安装完成后，先做最小检查：",[130,103165,103167],{"className":1830,"code":103166,"language":1832,"meta":135,"style":135},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[50,103168,103169],{"__ignoreMap":135},[139,103170,103171,103173,103175],{"class":141,"line":142},[139,103172,134],{"class":781},[139,103174,32617],{"class":153},[139,103176,103177],{"class":160}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103179,103180],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103182,103183],{},"conda 安装:",[130,103185,103187],{"className":1830,"code":103186,"language":1832,"meta":135,"style":135},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[50,103188,103189,103209,103219],{"__ignoreMap":135},[139,103190,103191,103193,103195,103197,103200,103203,103206],{"class":141,"line":142},[139,103192,32589],{"class":781},[139,103194,31435],{"class":160},[139,103196,27378],{"class":153},[139,103198,103199],{"class":160}," mujoco-study",[139,103201,103202],{"class":160}," python=",[139,103204,103205],{"class":153},"3.10",[139,103207,103208],{"class":153}," -y\n",[139,103210,103211,103213,103216],{"class":141,"line":210},[139,103212,32589],{"class":781},[139,103214,103215],{"class":160}," activate",[139,103217,103218],{"class":160}," mujoco-study\n",[139,103220,103221,103223,103225,103227],{"class":141,"line":254},[139,103222,1826],{"class":781},[139,103224,1841],{"class":160},[139,103226,103157],{"class":160},[139,103228,103160],{"class":160},[19,103230,103231],{},"版本冲突说明:",[1760,103233,103234,103240,103250,103259],{},[1763,103235,103236,103237,170],{},"不要安装 ",[50,103238,103239],{},"mujoco-py",[1763,103241,103242,103243,103245,103246,103249],{},"如果旧项目里同时安装了 ",[50,103244,103239],{}," 和 ",[50,103247,103248],{},"mujoco","，建议新建干净虚拟环境。",[1763,103251,103252,103255,103256,170],{},[50,103253,103254],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[50,103257,103258],{},"~\u002F.mujoco\u002Fmujoco210",[1763,103260,103261,103262,84767,103265,103268],{},"离屏渲染可能涉及 OpenGL 后端，",[50,103263,103264],{},"MUJOCO_GL=egl",[50,103266,103267],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103270,103272],{"id":103271},"_3核心概念解释","3.核心概念解释",[19,103274,103275],{},"MuJoCo 的基本执行流程:",[130,103277,103280],{"className":103278,"code":103279,"language":645,"meta":135},[643],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[50,103281,103279],{"__ignoreMap":135},[19,103283,103284,103286],{},[50,103285,102936],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103288,103289,103291,103292,2655,103295,2655,103298,2655,103301,2655,103304,170],{},[50,103290,102946],{}," 存放仿真运行时状态，例如 ",[50,103293,103294],{},"data.time",[50,103296,103297],{},"data.qpos",[50,103299,103300],{},"data.qvel",[50,103302,103303],{},"data.ctrl",[50,103305,103306],{},"data.xpos",[1217,103308,103310],{"id":103309},"xml-是什么","XML 是什么",[19,103312,103313],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[130,103315,103317],{"className":55302,"code":103316,"language":55304,"meta":135,"style":135},"\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",[50,103318,103319,103341,103372],{"__ignoreMap":135},[139,103320,103321,103323,103325,103327,103329,103331,103334,103336,103339],{"class":141,"line":142},[139,103322,796],{"class":145},[139,103324,54037],{"class":53538},[139,103326,17189],{"class":781},[139,103328,150],{"class":145},[139,103330,55726],{"class":160},[139,103332,103333],{"class":781}," pos",[139,103335,150],{"class":145},[139,103337,103338],{"class":160},"\"0 0 1\"",[139,103340,53545],{"class":145},[139,103342,103343,103345,103348,103350,103352,103355,103357,103359,103361,103364,103366,103369],{"class":141,"line":210},[139,103344,54380],{"class":145},[139,103346,103347],{"class":53538},"geom",[139,103349,17189],{"class":781},[139,103351,150],{"class":145},[139,103353,103354],{"class":160},"\"box_geom\"",[139,103356,56058],{"class":781},[139,103358,150],{"class":145},[139,103360,55726],{"class":160},[139,103362,103363],{"class":781}," size",[139,103365,150],{"class":145},[139,103367,103368],{"class":160},"\"0.1 0.1 0.1\"",[139,103370,103371],{"class":145},"\u002F>\n",[139,103373,103374,103376,103378],{"class":141,"line":254},[139,103375,54022],{"class":145},[139,103377,54037],{"class":53538},[139,103379,53545],{"class":145},[19,103381,103382],{},"这段意思是：",[1760,103384,103385,103391,103398],{},[1763,103386,103387,103388,103390],{},"创建一个叫 ",[50,103389,55949],{}," 的刚体。",[1763,103392,103393,103394,103397],{},"它初始放在 ",[50,103395,103396],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1763,103399,103400],{},"它里面有一个盒子形状的几何体。",[1217,103402,103404],{"id":103403},"timestep-是什么","timestep 是什么",[19,103406,103407],{},"XML 里的：",[130,103409,103411],{"className":55302,"code":103410,"language":55304,"meta":135,"style":135},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[50,103412,103413],{"__ignoreMap":135},[139,103414,103415,103417,103419,103422,103424,103427,103430,103432,103435],{"class":141,"line":142},[139,103416,796],{"class":145},[139,103418,71396],{"class":53538},[139,103420,103421],{"class":781}," timestep",[139,103423,150],{"class":145},[139,103425,103426],{"class":160},"\"0.01\"",[139,103428,103429],{"class":781}," gravity",[139,103431,150],{"class":145},[139,103433,103434],{"class":160},"\"0 0 -9.81\"",[139,103436,103371],{"class":145},[19,103438,103439,103440,103443,103444,103446],{},"表示每调用一次 ",[50,103441,103442],{},"mj_step","，仿真时间前进 ",[50,103445,41228],{}," 秒。循环 100 次，大约就是 1 秒：",[130,103448,103451],{"className":103449,"code":103450,"language":645,"meta":135},[643],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[50,103452,103450],{"__ignoreMap":135},[1217,103454,103456],{"id":103455},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103458,103459],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[130,103461,103464],{"className":103462,"code":103463,"language":645,"meta":135},[643],"x y z qw qx qy qz\n",[50,103465,103463],{"__ignoreMap":135},[19,103467,103468,103469,103472,103473,103476],{},"表示一个自由刚体的位置和姿态。其中 ",[50,103470,103471],{},"x y z"," 是位置，",[50,103474,103475],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103478,103480],{"id":103479},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103482,103483],{},"新建文件:",[130,103485,103487],{"className":1830,"code":103486,"language":1832,"meta":135,"style":135},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[50,103488,103489,103499,103506],{"__ignoreMap":135},[139,103490,103491,103494,103496],{"class":141,"line":142},[139,103492,103493],{"class":781},"mkdir",[139,103495,31475],{"class":153},[139,103497,103498],{"class":160}," mujoco_tutorial\n",[139,103500,103501,103504],{"class":141,"line":210},[139,103502,103503],{"class":153},"cd",[139,103505,103498],{"class":160},[139,103507,103508,103511],{"class":141,"line":254},[139,103509,103510],{"class":781},"touch",[139,103512,103513],{"class":160}," ch1_first_sim.py\n",[19,103515,103516],{},"写入:",[130,103518,103520],{"className":132,"code":103519,"language":134,"meta":135,"style":135},"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",[50,103521,103522,103529,103533,103537,103547,103552,103557,103561,103566,103571,103575,103580,103585,103590,103595,103600,103605,103609,103613,103617,103630,103644,103654,103658,103670,103682,103694,103706,103718,103722,103739,103744,103748,103759,103770,103774,103778,103790],{"__ignoreMap":135},[139,103523,103524,103526],{"class":141,"line":142},[139,103525,1064],{"class":149},[139,103527,103528],{"class":145}," mujoco\n",[139,103530,103531],{"class":141,"line":210},[139,103532,843],{"emptyLinePlaceholder":842},[139,103534,103535],{"class":141,"line":254},[139,103536,843],{"emptyLinePlaceholder":842},[139,103538,103539,103542,103544],{"class":141,"line":262},[139,103540,103541],{"class":153},"XML",[139,103543,15836],{"class":149},[139,103545,103546],{"class":160}," \"\"\"\n",[139,103548,103549],{"class":141,"line":313},[139,103550,103551],{"class":160},"\u003Cmujoco model=\"first_sim\">\n",[139,103553,103554],{"class":141,"line":462},[139,103555,103556],{"class":160},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[139,103558,103559],{"class":141,"line":474},[139,103560,843],{"emptyLinePlaceholder":842},[139,103562,103563],{"class":141,"line":484},[139,103564,103565],{"class":160},"  \u003Cworldbody>\n",[139,103567,103568],{"class":141,"line":989},[139,103569,103570],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[139,103572,103573],{"class":141,"line":994},[139,103574,843],{"emptyLinePlaceholder":842},[139,103576,103577],{"class":141,"line":999},[139,103578,103579],{"class":160},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[139,103581,103582],{"class":141,"line":1006},[139,103583,103584],{"class":160},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[139,103586,103587],{"class":141,"line":1027},[139,103588,103589],{"class":160},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[139,103591,103592],{"class":141,"line":1040},[139,103593,103594],{"class":160},"    \u003C\u002Fbody>\n",[139,103596,103597],{"class":141,"line":2160},[139,103598,103599],{"class":160},"  \u003C\u002Fworldbody>\n",[139,103601,103602],{"class":141,"line":2188},[139,103603,103604],{"class":160},"\u003C\u002Fmujoco>\n",[139,103606,103607],{"class":141,"line":3944},[139,103608,97925],{"class":160},[139,103610,103611],{"class":141,"line":3963},[139,103612,843],{"emptyLinePlaceholder":842},[139,103614,103615],{"class":141,"line":3968},[139,103616,843],{"emptyLinePlaceholder":842},[139,103618,103619,103621,103623,103626,103628],{"class":141,"line":3982},[139,103620,778],{"class":149},[139,103622,4259],{"class":781},[139,103624,103625],{"class":145},"() -> ",[139,103627,97913],{"class":153},[139,103629,246],{"class":145},[139,103631,103632,103635,103637,103640,103642],{"class":141,"line":3987},[139,103633,103634],{"class":145},"    model ",[139,103636,150],{"class":149},[139,103638,103639],{"class":145}," mujoco.MjModel.from_xml_string(",[139,103641,103541],{"class":153},[139,103643,164],{"class":145},[139,103645,103646,103649,103651],{"class":141,"line":4014},[139,103647,103648],{"class":145},"    data ",[139,103650,150],{"class":149},[139,103652,103653],{"class":145}," mujoco.MjData(model)\n",[139,103655,103656],{"class":141,"line":4019},[139,103657,843],{"emptyLinePlaceholder":842},[139,103659,103660,103662,103664,103667],{"class":141,"line":4036},[139,103661,302],{"class":153},[139,103663,157],{"class":145},[139,103665,103666],{"class":160},"\"nq:\"",[139,103668,103669],{"class":145},", model.nq)\n",[139,103671,103672,103674,103676,103679],{"class":141,"line":4041},[139,103673,302],{"class":153},[139,103675,157],{"class":145},[139,103677,103678],{"class":160},"\"nv:\"",[139,103680,103681],{"class":145},", model.nv)\n",[139,103683,103684,103686,103688,103691],{"class":141,"line":4046},[139,103685,302],{"class":153},[139,103687,157],{"class":145},[139,103689,103690],{"class":160},"\"nu:\"",[139,103692,103693],{"class":145},", model.nu)\n",[139,103695,103696,103698,103700,103703],{"class":141,"line":4051},[139,103697,302],{"class":153},[139,103699,157],{"class":145},[139,103701,103702],{"class":160},"\"initial time:\"",[139,103704,103705],{"class":145},", data.time)\n",[139,103707,103708,103710,103712,103715],{"class":141,"line":4065},[139,103709,302],{"class":153},[139,103711,157],{"class":145},[139,103713,103714],{"class":160},"\"initial qpos:\"",[139,103716,103717],{"class":145},", data.qpos.copy())\n",[139,103719,103720],{"class":141,"line":4070},[139,103721,843],{"emptyLinePlaceholder":842},[139,103723,103724,103726,103729,103731,103733,103735,103737],{"class":141,"line":4860},[139,103725,5482],{"class":149},[139,103727,103728],{"class":145}," _ ",[139,103730,1976],{"class":149},[139,103732,34690],{"class":153},[139,103734,157],{"class":145},[139,103736,1017],{"class":153},[139,103738,558],{"class":145},[139,103740,103741],{"class":141,"line":4874},[139,103742,103743],{"class":145},"        mujoco.mj_step(model, data)\n",[139,103745,103746],{"class":141,"line":4882},[139,103747,843],{"emptyLinePlaceholder":842},[139,103749,103750,103752,103754,103757],{"class":141,"line":4887},[139,103751,302],{"class":153},[139,103753,157],{"class":145},[139,103755,103756],{"class":160},"\"final time:\"",[139,103758,103705],{"class":145},[139,103760,103761,103763,103765,103768],{"class":141,"line":4893},[139,103762,302],{"class":153},[139,103764,157],{"class":145},[139,103766,103767],{"class":160},"\"final qpos:\"",[139,103769,103717],{"class":145},[139,103771,103772],{"class":141,"line":4899},[139,103773,843],{"emptyLinePlaceholder":842},[139,103775,103776],{"class":141,"line":4904},[139,103777,843],{"emptyLinePlaceholder":842},[139,103779,103780,103782,103784,103786,103788],{"class":141,"line":10222},[139,103781,1729],{"class":149},[139,103783,1732],{"class":153},[139,103785,1735],{"class":149},[139,103787,1738],{"class":160},[139,103789,246],{"class":145},[139,103791,103792],{"class":141,"line":10246},[139,103793,103794],{"class":145},"    main()\n",[1217,103796,103797],{"id":103797},"代码逐段解释",[19,103799,103800],{},"导入库：",[130,103802,103804],{"className":132,"code":103803,"language":134,"meta":135,"style":135},"import mujoco\n",[50,103805,103806],{"__ignoreMap":135},[139,103807,103808,103810],{"class":141,"line":142},[139,103809,1064],{"class":149},[139,103811,103528],{"class":145},[19,103813,103814],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103816,103817],{},"定义 XML：",[130,103819,103821],{"className":132,"code":103820,"language":134,"meta":135,"style":135},"XML = \"\"\"\n...\n\"\"\"\n",[50,103822,103823,103831,103836],{"__ignoreMap":135},[139,103824,103825,103827,103829],{"class":141,"line":142},[139,103826,103541],{"class":153},[139,103828,15836],{"class":149},[139,103830,103546],{"class":160},[139,103832,103833],{"class":141,"line":210},[139,103834,103835],{"class":160},"...\n",[139,103837,103838],{"class":141,"line":254},[139,103839,97925],{"class":160},[19,103841,103842,103843,103846],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[50,103844,103845],{},"freejoint"," 的方块。",[19,103848,103849],{},"编译模型：",[130,103851,103853],{"className":132,"code":103852,"language":134,"meta":135,"style":135},"model = mujoco.MjModel.from_xml_string(XML)\n",[50,103854,103855],{"__ignoreMap":135},[139,103856,103857,103860,103862,103864,103866],{"class":141,"line":142},[139,103858,103859],{"class":145},"model ",[139,103861,150],{"class":149},[139,103863,103639],{"class":145},[139,103865,103541],{"class":153},[139,103867,164],{"class":145},[19,103869,103870],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103872,103873],{},"创建数据：",[130,103875,103877],{"className":132,"code":103876,"language":134,"meta":135,"style":135},"data = mujoco.MjData(model)\n",[50,103878,103879],{"__ignoreMap":135},[139,103880,103881,103884,103886],{"class":141,"line":142},[139,103882,103883],{"class":145},"data ",[139,103885,150],{"class":149},[139,103887,103653],{"class":145},[19,103889,103890,103892,103893,103895],{},[50,103891,35646],{}," 会保存仿真当前状态。刚创建时，时间是 ",[50,103894,2634],{},"，方块还在初始位置。",[19,103897,103898],{},"推进仿真：",[130,103900,103902],{"className":132,"code":103901,"language":134,"meta":135,"style":135},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[50,103903,103904,103920],{"__ignoreMap":135},[139,103905,103906,103908,103910,103912,103914,103916,103918],{"class":141,"line":142},[139,103907,1970],{"class":149},[139,103909,103728],{"class":145},[139,103911,1976],{"class":149},[139,103913,34690],{"class":153},[139,103915,157],{"class":145},[139,103917,1017],{"class":153},[139,103919,558],{"class":145},[139,103921,103922],{"class":141,"line":210},[139,103923,103924],{"class":145},"    mujoco.mj_step(model, data)\n",[19,103926,103927,103928,103930],{},"每次 ",[50,103929,103442],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1217,103932,103933],{"id":103933},"代码逐行细讲",[19,103935,103936],{},"下面把完整代码按新手视角拆开讲。",[130,103938,103939],{"className":132,"code":103803,"language":134,"meta":135,"style":135},[50,103940,103941],{"__ignoreMap":135},[139,103942,103943,103945],{"class":141,"line":142},[139,103944,1064],{"class":149},[139,103946,103528],{"class":145},[19,103948,103949,103951,103952,2655,103954,2655,103956,170],{},[50,103950,1064],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[50,103953,102902],{},[50,103955,102907],{},[50,103957,103958],{},"mujoco.mj_step",[130,103960,103961],{"className":132,"code":103820,"language":134,"meta":135,"style":135},[50,103962,103963,103971,103975],{"__ignoreMap":135},[139,103964,103965,103967,103969],{"class":141,"line":142},[139,103966,103541],{"class":153},[139,103968,15836],{"class":149},[139,103970,103546],{"class":160},[139,103972,103973],{"class":141,"line":210},[139,103974,103835],{"class":160},[139,103976,103977],{"class":141,"line":254},[139,103978,97925],{"class":160},[19,103980,103981,103983,103984,103987],{},[50,103982,103541],{}," 是一个变量名。右边的三引号 ",[50,103985,103986],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[130,103989,103990],{"className":55302,"code":103551,"language":55304,"meta":135,"style":135},[50,103991,103992],{"__ignoreMap":135},[139,103993,103994,103996,103998,104001,104003,104006],{"class":141,"line":142},[139,103995,796],{"class":145},[139,103997,103248],{"class":53538},[139,103999,104000],{"class":781}," model",[139,104002,150],{"class":145},[139,104004,104005],{"class":160},"\"first_sim\"",[139,104007,53545],{"class":145},[19,104009,104010,104011,104014,104015,170],{},"这是 XML 的根标签。",[50,104012,104013],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[50,104016,104017],{},"first_sim",[130,104019,104020],{"className":55302,"code":103410,"language":55304,"meta":135,"style":135},[50,104021,104022],{"__ignoreMap":135},[139,104023,104024,104026,104028,104030,104032,104034,104036,104038,104040],{"class":141,"line":142},[139,104025,796],{"class":145},[139,104027,71396],{"class":53538},[139,104029,103421],{"class":781},[139,104031,150],{"class":145},[139,104033,103426],{"class":160},[139,104035,103429],{"class":781},[139,104037,150],{"class":145},[139,104039,103434],{"class":160},[139,104041,103371],{"class":145},[19,104043,104044,104046,104047,104050,104051,104054],{},[50,104045,71396],{}," 用来设置仿真参数。",[50,104048,104049],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[50,104052,104053],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[130,104056,104058],{"className":55302,"code":104057,"language":55304,"meta":135,"style":135},"\u003Cworldbody>\n",[50,104059,104060],{"__ignoreMap":135},[139,104061,104062,104064,104067],{"class":141,"line":142},[139,104063,796],{"class":145},[139,104065,104066],{"class":53538},"worldbody",[139,104068,53545],{"class":145},[19,104070,104071,104073],{},[50,104072,104066],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[130,104075,104077],{"className":55302,"code":104076,"language":55304,"meta":135,"style":135},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[50,104078,104079],{"__ignoreMap":135},[139,104080,104081,104083,104085,104087,104089,104092,104094,104096,104099,104101,104103,104106,104108,104110,104113],{"class":141,"line":142},[139,104082,796],{"class":145},[139,104084,103347],{"class":53538},[139,104086,17189],{"class":781},[139,104088,150],{"class":145},[139,104090,104091],{"class":160},"\"floor\"",[139,104093,56058],{"class":781},[139,104095,150],{"class":145},[139,104097,104098],{"class":160},"\"plane\"",[139,104100,103363],{"class":781},[139,104102,150],{"class":145},[139,104104,104105],{"class":160},"\"2 2 0.1\"",[139,104107,80996],{"class":781},[139,104109,150],{"class":145},[139,104111,104112],{"class":160},"\"0.8 0.8 0.8 1\"",[139,104114,103371],{"class":145},[19,104116,104117,104118,104120,104121,104124,104125,104128,104129,104131],{},"这行创建地面。",[50,104119,103347],{}," 是几何体。",[50,104122,104123],{},"name=\"floor\""," 是名字。",[50,104126,104127],{},"type=\"plane\""," 表示平面。",[50,104130,57344],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[130,104133,104135],{"className":55302,"code":104134,"language":55304,"meta":135,"style":135},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[50,104136,104137],{"__ignoreMap":135},[139,104138,104139,104141,104143,104145,104147,104149,104151,104153,104155],{"class":141,"line":142},[139,104140,796],{"class":145},[139,104142,54037],{"class":53538},[139,104144,17189],{"class":781},[139,104146,150],{"class":145},[139,104148,55726],{"class":160},[139,104150,103333],{"class":781},[139,104152,150],{"class":145},[139,104154,103338],{"class":160},[139,104156,53545],{"class":145},[19,104158,104159,104160,170,104162,104165,104166,104168],{},"这行创建一个刚体，名字叫 ",[50,104161,55949],{},[50,104163,104164],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[50,104167,103396],{},"，也就是离地面 1 米高。",[130,104170,104172],{"className":55302,"code":104171,"language":55304,"meta":135,"style":135},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[50,104173,104174],{"__ignoreMap":135},[139,104175,104176,104178,104180,104182,104184,104187],{"class":141,"line":142},[139,104177,796],{"class":145},[139,104179,103845],{"class":53538},[139,104181,17189],{"class":781},[139,104183,150],{"class":145},[139,104185,104186],{"class":160},"\"box_free\"",[139,104188,103371],{"class":145},[19,104190,104191,104192,104194],{},"这行很重要。",[50,104193,103845],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[130,104196,104198],{"className":55302,"code":104197,"language":55304,"meta":135,"style":135},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[50,104199,104200],{"__ignoreMap":135},[139,104201,104202,104204,104206,104208,104210,104212,104214,104216,104218,104220,104222,104224,104227,104229,104231,104233,104235,104238],{"class":141,"line":142},[139,104203,796],{"class":145},[139,104205,103347],{"class":53538},[139,104207,17189],{"class":781},[139,104209,150],{"class":145},[139,104211,103354],{"class":160},[139,104213,56058],{"class":781},[139,104215,150],{"class":145},[139,104217,55726],{"class":160},[139,104219,103363],{"class":781},[139,104221,150],{"class":145},[139,104223,103368],{"class":160},[139,104225,104226],{"class":781}," mass",[139,104228,150],{"class":145},[139,104230,5959],{"class":160},[139,104232,80996],{"class":781},[139,104234,150],{"class":145},[139,104236,104237],{"class":160},"\"1 0 0 1\"",[139,104239,103371],{"class":145},[19,104241,104242,104243,104246,104247,104250,104251,104254,104255,104258],{},"这行给 box body 添加一个盒子形状。",[50,104244,104245],{},"type=\"box\""," 表示形状是盒子。",[50,104248,104249],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[50,104252,104253],{},"mass=\"1\""," 表示质量是 1。",[50,104256,104257],{},"rgba=\"1 0 0 1\""," 表示红色。",[130,104260,104262],{"className":132,"code":104261,"language":134,"meta":135,"style":135},"def main() -> None:\n",[50,104263,104264],{"__ignoreMap":135},[139,104265,104266,104268,104270,104272,104274],{"class":141,"line":142},[139,104267,778],{"class":149},[139,104269,4259],{"class":781},[139,104271,103625],{"class":145},[139,104273,97913],{"class":153},[139,104275,246],{"class":145},[19,104277,104278,104280,104281,104283,104284,104287],{},[50,104279,778],{}," 用来定义函数。这里定义了一个叫 ",[50,104282,1680],{}," 的函数。",[50,104285,104286],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[130,104289,104290],{"className":132,"code":103852,"language":134,"meta":135,"style":135},[50,104291,104292],{"__ignoreMap":135},[139,104293,104294,104296,104298,104300,104302],{"class":141,"line":142},[139,104295,103859],{"class":145},[139,104297,150],{"class":149},[139,104299,103639],{"class":145},[139,104301,103541],{"class":153},[139,104303,164],{"class":145},[19,104305,104306,104307,104310],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[50,104308,104309],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[130,104312,104313],{"className":132,"code":103876,"language":134,"meta":135,"style":135},[50,104314,104315],{"__ignoreMap":135},[139,104316,104317,104319,104321],{"class":141,"line":142},[139,104318,103883],{"class":145},[139,104320,150],{"class":149},[139,104322,103653],{"class":145},[19,104324,104325,104326,104328,104329,104331],{},"这行创建仿真数据。",[50,104327,35646],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[50,104330,35646],{}," 都会变化。",[130,104333,104335],{"className":132,"code":104334,"language":134,"meta":135,"style":135},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[50,104336,104337,104347,104357],{"__ignoreMap":135},[139,104338,104339,104341,104343,104345],{"class":141,"line":142},[139,104340,213],{"class":153},[139,104342,157],{"class":145},[139,104344,103666],{"class":160},[139,104346,103669],{"class":145},[139,104348,104349,104351,104353,104355],{"class":141,"line":210},[139,104350,213],{"class":153},[139,104352,157],{"class":145},[139,104354,103678],{"class":160},[139,104356,103681],{"class":145},[139,104358,104359,104361,104363,104365],{"class":141,"line":254},[139,104360,213],{"class":153},[139,104362,157],{"class":145},[139,104364,103690],{"class":160},[139,104366,103693],{"class":145},[19,104368,104369,104371,104372,104375,104376,104379,104380,104383,104384,104387],{},[50,104370,213],{}," 用来输出信息。",[50,104373,104374],{},"model.nq"," 是位置变量数量，",[50,104377,104378],{},"model.nv"," 是速度变量数量，",[50,104381,104382],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[50,104385,104386],{},"nu"," 是 0。",[130,104389,104391],{"className":132,"code":104390,"language":134,"meta":135,"style":135},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[50,104392,104393,104403],{"__ignoreMap":135},[139,104394,104395,104397,104399,104401],{"class":141,"line":142},[139,104396,213],{"class":153},[139,104398,157],{"class":145},[139,104400,103702],{"class":160},[139,104402,103705],{"class":145},[139,104404,104405,104407,104409,104411],{"class":141,"line":210},[139,104406,213],{"class":153},[139,104408,157],{"class":145},[139,104410,103714],{"class":160},[139,104412,103717],{"class":145},[19,104414,104415,104416,104418,104419,104421,104422,104425],{},"这里打印初始时间和初始位置。",[50,104417,103294],{}," 一开始是 0。",[50,104420,103297],{}," 是位置数组。",[50,104423,104424],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[130,104427,104428],{"className":132,"code":103901,"language":134,"meta":135,"style":135},[50,104429,104430,104446],{"__ignoreMap":135},[139,104431,104432,104434,104436,104438,104440,104442,104444],{"class":141,"line":142},[139,104433,1970],{"class":149},[139,104435,103728],{"class":145},[139,104437,1976],{"class":149},[139,104439,34690],{"class":153},[139,104441,157],{"class":145},[139,104443,1017],{"class":153},[139,104445,558],{"class":145},[139,104447,104448],{"class":141,"line":210},[139,104449,103924],{"class":145},[19,104451,104452,104454,104455,104458,104459,104461,104462,104464],{},[50,104453,1970],{}," 是循环。",[50,104456,104457],{},"range(100)"," 表示循环 100 次。",[50,104460,3422],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[50,104463,103442],{},"，仿真就前进一步。",[130,104466,104468],{"className":132,"code":104467,"language":134,"meta":135,"style":135},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[50,104469,104470,104480],{"__ignoreMap":135},[139,104471,104472,104474,104476,104478],{"class":141,"line":142},[139,104473,213],{"class":153},[139,104475,157],{"class":145},[139,104477,103756],{"class":160},[139,104479,103705],{"class":145},[139,104481,104482,104484,104486,104488],{"class":141,"line":210},[139,104483,213],{"class":153},[139,104485,157],{"class":145},[139,104487,103767],{"class":160},[139,104489,103717],{"class":145},[19,104491,104492],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[130,104494,104496],{"className":132,"code":104495,"language":134,"meta":135,"style":135},"if __name__ == \"__main__\":\n    main()\n",[50,104497,104498,104510],{"__ignoreMap":135},[139,104499,104500,104502,104504,104506,104508],{"class":141,"line":142},[139,104501,1729],{"class":149},[139,104503,1732],{"class":153},[139,104505,1735],{"class":149},[139,104507,1738],{"class":160},[139,104509,246],{"class":145},[139,104511,104512],{"class":141,"line":210},[139,104513,103794],{"class":145},[19,104515,104516,104517,104520,104521,170],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[50,104518,104519],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[50,104522,104519],{},[19,104524,104525],{},"运行:",[130,104527,104529],{"className":1830,"code":104528,"language":1832,"meta":135,"style":135},"python ch1_first_sim.py\n",[50,104530,104531],{"__ignoreMap":135},[139,104532,104533,104535],{"class":141,"line":142},[139,104534,134],{"class":781},[139,104536,103513],{"class":160},[14,104538,104540],{"id":104539},"_5运行结果说明","5.运行结果说明",[19,104542,104543],{},"你应该看到类似输出:",[130,104545,104548],{"className":104546,"code":104547,"language":645,"meta":135},[643],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[50,104549,104547],{"__ignoreMap":135},[19,104551,104552,104554,104555,104558,104559,170],{},[50,104553,103845],{}," 有 7 个位置变量: ",[50,104556,104557],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[50,104560,104561],{},"vx vy vz wx wy wz",[19,104563,104564,104565,104568],{},"你还会看到 ",[50,104566,104567],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104570,104572],{"id":104571},"_6验证步骤","6.验证步骤",[19,104574,104575],{},"确认版本:",[130,104577,104578],{"className":1830,"code":103166,"language":1832,"meta":135,"style":135},[50,104579,104580],{"__ignoreMap":135},[139,104581,104582,104584,104586],{"class":141,"line":142},[139,104583,134],{"class":781},[139,104585,32617],{"class":153},[139,104587,103177],{"class":160},[19,104589,104590],{},"确认导入的是官方 bindings:",[130,104592,104594],{"className":1830,"code":104593,"language":1832,"meta":135,"style":135},"python -c \"import mujoco; print(mujoco)\"\n",[50,104595,104596],{"__ignoreMap":135},[139,104597,104598,104600,104602],{"class":141,"line":142},[139,104599,134],{"class":781},[139,104601,32617],{"class":153},[139,104603,104604],{"class":160}," \"import mujoco; print(mujoco)\"\n",[19,104606,104607],{},"运行程序:",[130,104609,104610],{"className":1830,"code":104528,"language":1832,"meta":135,"style":135},[50,104611,104612],{"__ignoreMap":135},[139,104613,104614,104616],{"class":141,"line":142},[139,104615,134],{"class":781},[139,104617,103513],{"class":160},[19,104619,104620,104621,104624,104625,170],{},"检查 ",[50,104622,104623],{},"final time"," 是否约等于 ",[50,104626,104627],{},"1.0",[19,104629,104630],{},"再做几个小实验：",[1760,104632,104633,104643,104651,104664],{},[1763,104634,104635,104636,104638,104639,104642],{},"把 ",[50,104637,104164],{}," 改成 ",[50,104640,104641],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1763,104644,104635,104645,104638,104647,104650],{},[50,104646,104053],{},[50,104648,104649],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1763,104652,104635,104653,104638,104655,104658,104659,104661,104662,170],{},[50,104654,104049],{},[50,104656,104657],{},"timestep=\"0.005\"","，观察 100 步后的 ",[50,104660,104623],{}," 是否变成约 ",[50,104663,37572],{},[1763,104665,104666,104667,104670],{},"删除 ",[50,104668,104669],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104672,104673],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104675,104677],{"id":104676},"_7常见错误与解决方案","7.常见错误与解决方案",[1217,104679,104681],{"id":104680},"modulenotfounderror-no-module-named-mujoco",[50,104682,104683],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104685,104686],{},"解决:",[130,104688,104690],{"className":1830,"code":104689,"language":1832,"meta":135,"style":135},"pip install \"mujoco>=2.3\"\n",[50,104691,104692],{"__ignoreMap":135},[139,104693,104694,104696,104698],{"class":141,"line":142},[139,104695,1826],{"class":781},[139,104697,1841],{"class":160},[139,104699,104700],{"class":160}," \"mujoco>=2.3\"\n",[1217,104702,104704],{"id":104703},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104706,104707],{},"先安装系统依赖:",[130,104709,104711],{"className":1830,"code":104710,"language":1832,"meta":135,"style":135},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[50,104712,104713],{"__ignoreMap":135},[139,104714,104715,104717,104719,104721,104723,104726,104728,104731,104733,104736,104738],{"class":141,"line":142},[139,104716,26840],{"class":781},[139,104718,28575],{"class":160},[139,104720,1841],{"class":160},[139,104722,28660],{"class":153},[139,104724,104725],{"class":160}," mesa-libGL",[139,104727,103041],{"class":160},[139,104729,104730],{"class":160}," glfw",[139,104732,103061],{"class":160},[139,104734,104735],{"class":160}," libX11",[139,104737,103074],{"class":160},[139,104739,104740],{"class":160}," libXrandr\n",[1217,104742,104744],{"id":104743},"xml-解析失败","XML 解析失败",[19,104746,104747],{},"检查:",[1760,104749,104750,104753,104756,104762],{},[1763,104751,104752],{},"标签是否闭合",[1763,104754,104755],{},"属性是否带引号",[1763,104757,104758,104759],{},"根节点是否是 ",[50,104760,104761],{},"\u003Cmujoco>",[1763,104763,104764,104766,104767,104770],{},[50,104765,54037],{}," 是否放在 ",[50,104768,104769],{},"\u003Cworldbody>"," 内部",[1217,104772,104774,104776,104777],{"id":104773},"final-time-不是严格等于-10",[50,104775,104623],{}," 不是严格等于 ",[50,104778,104627],{},[19,104780,104781],{},"这通常不是错误。浮点数计算可能得到：",[130,104783,104786],{"className":104784,"code":104785,"language":645,"meta":135},[643],"1.0000000000000007\n",[50,104787,104785],{"__ignoreMap":135},[19,104789,104790,104791,104793],{},"只要接近 ",[50,104792,104627],{}," 就正常。",[1217,104795,104796],{"id":104796},"方块没有掉下来",[19,104798,104799],{},"检查：",[1760,104801,104802,104808,104814,104819],{},[1763,104803,104804,104805],{},"方块 body 里是否有 ",[50,104806,104807],{},"\u003Cfreejoint\u002F>",[1763,104809,104810,104811],{},"重力是否是 ",[50,104812,104813],{},"0 0 -9.81",[1763,104815,104816,104817],{},"是否真的调用了 ",[50,104818,102912],{},[1763,104820,104821,104822,104824,104825],{},"你看的是否是 ",[50,104823,104567],{},"，不是 ",[50,104826,104827],{},"initial qpos",[14,104829,104831],{"id":104830},"_8本章小结","8.本章小结",[19,104833,104834],{},"本章你已经完成了 MuJoCo 的最小闭环：",[130,104836,104839],{"className":104837,"code":104838,"language":645,"meta":135},[643],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[50,104840,104838],{"__ignoreMap":135},[19,104842,104843],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2348,104845,104846],{},"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":135,"searchDepth":210,"depth":210,"links":104848},[104849,104850,104851,104856,104860,104861,104862,104870],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":104852},[104853,104854,104855],{"id":103309,"depth":254,"text":103310},{"id":103403,"depth":254,"text":103404},{"id":103455,"depth":254,"text":103456},{"id":103479,"depth":210,"text":103480,"children":104857},[104858,104859],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":104863},[104864,104865,104866,104867,104869],{"id":104680,"depth":254,"text":104683},{"id":104703,"depth":254,"text":104704},{"id":104743,"depth":254,"text":104744},{"id":104773,"depth":254,"text":104868},"final time 不是严格等于 1.0",{"id":104796,"depth":254,"text":104796},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102865,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104877,"title":104878,"body":104879,"description":135,"extension":2385,"meta":106534,"navigation":842,"path":106535,"seo":106536,"stem":106537,"__hash__":106538},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104880,"toc":106510},[104881,104884,104886,104889,104892,104909,105004,105007,105013,105015,105017,105041,105044,105058,105061,105102,105104,105117,105119,105122,105170,105182,105185,105188,105194,105207,105274,105277,105296,105299,105302,105308,105310,105319,105322,105326,105335,105417,105426,105430,105436,105450,105460,105462,105791,105794,105806,105808,105819,105821,105824,105842,105845,105848,105866,105877,105880,105895,105905,105907,105928,105945,105965,105971,106011,106027,106043,106049,106052,106076,106092,106097,106127,106144,106169,106172,106187,106196,106211,106220,106235,106242,106244,106254,106267,106274,106277,106316,106323,106325,106377,106379,106385,106388,106395,106402,106405,106407,106425,106428,106431,106465,106477,106479,106482,106504,106507],[10,104882,104878],{"id":104883},"_2xml-与-mjcf-物理建模基础",[14,104885,102874],{"id":102873},[19,104887,104888],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104890,104891],{},"本章结束后，你应该能看懂一个简单模型里：",[1760,104893,104894,104897,104900,104903,104906],{},[1763,104895,104896],{},"地面在哪里。",[1763,104898,104899],{},"物体初始位置在哪里。",[1763,104901,104902],{},"几何体是什么形状。",[1763,104904,104905],{},"哪些 body 可以自由运动。",[1763,104907,104908],{},"如何用名字在 Python 里找到 XML 中的对象。",[26,104910,104911,104921],{},[29,104912,104913],{},[32,104914,104915,104918],{},[35,104916,104917],{"align":26003},"标签",[35,104919,104920],{"align":26003},"作用",[42,104922,104923,104932,104942,104951,104961,104971,104984,104994],{},[32,104924,104925,104929],{},[47,104926,104927],{"align":26003},[50,104928,104761],{},[47,104930,104931],{"align":26003},"根节点",[32,104933,104934,104939],{},[47,104935,104936],{"align":26003},[50,104937,104938],{},"\u003Coption>",[47,104940,104941],{"align":26003},"仿真参数",[32,104943,104944,104948],{},[47,104945,104946],{"align":26003},[50,104947,104769],{},[47,104949,104950],{"align":26003},"世界中的物体",[32,104952,104953,104958],{},[47,104954,104955],{"align":26003},[50,104956,104957],{},"\u003Cbody>",[47,104959,104960],{"align":26003},"刚体",[32,104962,104963,104968],{},[47,104964,104965],{"align":26003},[50,104966,104967],{},"\u003Cgeom>",[47,104969,104970],{"align":26003},"几何体、碰撞体、可视体",[32,104972,104973,104981],{},[47,104974,104975,27241,104978],{"align":26003},[50,104976,104977],{},"\u003Cjoint>",[50,104979,104980],{},"\u003Cfreejoint>",[47,104982,104983],{"align":26003},"关节",[32,104985,104986,104991],{},[47,104987,104988],{"align":26003},[50,104989,104990],{},"\u003Csite>",[47,104992,104993],{"align":26003},"标记点",[32,104995,104996,105001],{},[47,104997,104998],{"align":26003},[50,104999,105000],{},"\u003Cactuator>",[47,105002,105003],{"align":26003},"控制器",[19,105005,105006],{},"初学时可以先记住：",[130,105008,105011],{"className":105009,"code":105010,"language":645,"meta":135},[643],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[50,105012,105010],{"__ignoreMap":135},[14,105014,102997],{"id":102996},[19,105016,103000],{},[130,105018,105020],{"className":1830,"code":105019,"language":1832,"meta":135,"style":135},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[50,105021,105022],{"__ignoreMap":135},[139,105023,105024,105026,105028,105030,105032,105034,105036,105038],{"class":141,"line":142},[139,105025,26840],{"class":781},[139,105027,28575],{"class":160},[139,105029,1841],{"class":160},[139,105031,28660],{"class":153},[139,105033,104725],{"class":160},[139,105035,103041],{"class":160},[139,105037,104730],{"class":160},[139,105039,105040],{"class":160}," glfw-devel\n",[19,105042,105043],{},"pip:",[130,105045,105046],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},[50,105047,105048],{"__ignoreMap":135},[139,105049,105050,105052,105054,105056],{"class":141,"line":142},[139,105051,1826],{"class":781},[139,105053,1841],{"class":160},[139,105055,103157],{"class":160},[139,105057,103160],{"class":160},[19,105059,105060],{},"conda:",[130,105062,105064],{"className":1830,"code":105063,"language":1832,"meta":135,"style":135},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[50,105065,105066,105083,105092],{"__ignoreMap":135},[139,105067,105068,105070,105072,105074,105077,105079,105081],{"class":141,"line":142},[139,105069,32589],{"class":781},[139,105071,31435],{"class":160},[139,105073,27378],{"class":153},[139,105075,105076],{"class":160}," mujoco-xml",[139,105078,103202],{"class":160},[139,105080,103205],{"class":153},[139,105082,103208],{"class":153},[139,105084,105085,105087,105089],{"class":141,"line":210},[139,105086,32589],{"class":781},[139,105088,103215],{"class":160},[139,105090,105091],{"class":160}," mujoco-xml\n",[139,105093,105094,105096,105098,105100],{"class":141,"line":254},[139,105095,1826],{"class":781},[139,105097,1841],{"class":160},[139,105099,103157],{"class":160},[139,105101,103160],{"class":160},[19,105103,103231],{},[1760,105105,105106,105109,105114],{},[1763,105107,105108],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1763,105110,105111,105112,170],{},"本章使用基础标签，适用于 ",[50,105113,103254],{},[1763,105115,105116],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105118,103272],{"id":103271},[19,105120,105121],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[130,105123,105125],{"className":55302,"code":105124,"language":55304,"meta":135,"style":135},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[50,105126,105127,105141,105149,105154,105162],{"__ignoreMap":135},[139,105128,105129,105131,105133,105135,105137,105139],{"class":141,"line":142},[139,105130,796],{"class":145},[139,105132,103248],{"class":53538},[139,105134,104000],{"class":781},[139,105136,150],{"class":145},[139,105138,2262],{"class":160},[139,105140,53545],{"class":145},[139,105142,105143,105145,105147],{"class":141,"line":210},[139,105144,54380],{"class":145},[139,105146,104066],{"class":53538},[139,105148,53545],{"class":145},[139,105150,105151],{"class":141,"line":254},[139,105152,105153],{"class":145},"    ...\n",[139,105155,105156,105158,105160],{"class":141,"line":262},[139,105157,54652],{"class":145},[139,105159,104066],{"class":53538},[139,105161,53545],{"class":145},[139,105163,105164,105166,105168],{"class":141,"line":313},[139,105165,54022],{"class":145},[139,105167,103248],{"class":53538},[139,105169,53545],{"class":145},[19,105171,105172,105174,105175,105177,105178,105181],{},[50,105173,54037],{}," 表示刚体。",[50,105176,103347],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[50,105179,105180],{},"joint"," 表示刚体相对父刚体如何运动。",[1217,105183,105184],{"id":105184},"层级结构非常重要",[19,105186,105187],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[130,105189,105192],{"className":105190,"code":105191,"language":645,"meta":135},[643],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[50,105193,105191],{"__ignoreMap":135},[19,105195,105196,103245,105199,105202,105203,105206],{},[50,105197,105198],{},"red_box_geom",[50,105200,105201],{},"box_center"," 都属于 ",[50,105204,105205],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[130,105208,105210],{"className":55302,"code":105209,"language":55304,"meta":135,"style":135},"\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",[50,105211,105212,105232,105246,105266],{"__ignoreMap":135},[139,105213,105214,105216,105218,105220,105222,105224,105226,105228,105230],{"class":141,"line":142},[139,105215,796],{"class":145},[139,105217,54037],{"class":53538},[139,105219,17189],{"class":781},[139,105221,150],{"class":145},[139,105223,55726],{"class":160},[139,105225,103333],{"class":781},[139,105227,150],{"class":145},[139,105229,103338],{"class":160},[139,105231,53545],{"class":145},[139,105233,105234,105236,105238,105240,105242,105244],{"class":141,"line":210},[139,105235,54380],{"class":145},[139,105237,103845],{"class":53538},[139,105239,17189],{"class":781},[139,105241,150],{"class":145},[139,105243,104186],{"class":160},[139,105245,103371],{"class":145},[139,105247,105248,105250,105252,105254,105256,105258,105260,105262,105264],{"class":141,"line":254},[139,105249,54380],{"class":145},[139,105251,103347],{"class":53538},[139,105253,56058],{"class":781},[139,105255,150],{"class":145},[139,105257,55726],{"class":160},[139,105259,103363],{"class":781},[139,105261,150],{"class":145},[139,105263,103368],{"class":160},[139,105265,103371],{"class":145},[139,105267,105268,105270,105272],{"class":141,"line":262},[139,105269,54022],{"class":145},[139,105271,54037],{"class":53538},[139,105273,53545],{"class":145},[19,105275,105276],{},"含义:",[1760,105278,105279,105285,105290,105293],{},[1763,105280,105281,105282,105284],{},"创建名为 ",[50,105283,55949],{}," 的刚体",[1763,105286,105287,105288],{},"初始位置在世界坐标 ",[50,105289,103396],{},[1763,105291,105292],{},"它有一个自由关节",[1763,105294,105295],{},"它有一个盒子几何体",[1217,105297,105298],{"id":105298},"坐标怎么理解",[19,105300,105301],{},"MuJoCo 默认使用三维坐标：",[130,105303,105306],{"className":105304,"code":105305,"language":645,"meta":135},[643],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[50,105307,105305],{"__ignoreMap":135},[19,105309,16904],{},[130,105311,105313],{"className":55302,"code":105312,"language":55304,"meta":135,"style":135},"pos=\"0 0 1\"\n",[50,105314,105315],{"__ignoreMap":135},[139,105316,105317],{"class":141,"line":142},[139,105318,105312],{"class":145},[19,105320,105321],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1217,105323,105325],{"id":105324},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105327,105328,105329,84758,105332,105334],{},"不同 ",[50,105330,105331],{},"type",[50,105333,33745],{}," 含义不同：",[26,105336,105337,105352],{},[29,105338,105339],{},[32,105340,105341,105345,105350],{},[35,105342,105343],{"align":26003},[50,105344,105331],{},[35,105346,105347,105349],{"align":26003},[50,105348,33745],{}," 示例",[35,105351,102927],{"align":26003},[42,105353,105354,105368,105383,105402],{},[32,105355,105356,105360,105365],{},[47,105357,105358],{"align":26003},[50,105359,55949],{},[47,105361,105362],{"align":26003},[50,105363,105364],{},"size=\"0.1 0.2 0.3\"",[47,105366,105367],{"align":26003},"x\u002Fy\u002Fz 半边长，不是完整长度",[32,105369,105370,105375,105380],{},[47,105371,105372],{"align":26003},[50,105373,105374],{},"sphere",[47,105376,105377],{"align":26003},[50,105378,105379],{},"size=\"0.1\"",[47,105381,105382],{"align":26003},"球半径",[32,105384,105385,105390,105395],{},[47,105386,105387],{"align":26003},[50,105388,105389],{},"capsule",[47,105391,105392],{"align":26003},[50,105393,105394],{},"size=\"0.03\"",[47,105396,105397,105398,105401],{"align":26003},"胶囊半径，长度常用 ",[50,105399,105400],{},"fromto"," 指定",[32,105403,105404,105409,105414],{},[47,105405,105406],{"align":26003},[50,105407,105408],{},"plane",[47,105410,105411],{"align":26003},[50,105412,105413],{},"size=\"3 3 0.1\"",[47,105415,105416],{"align":26003},"可视平面大小，通常当地面",[19,105418,105419,105420,105422,105423,105425],{},"最容易踩坑的是 box：",[50,105421,104249],{}," 表示边长大约是 ",[50,105424,34284],{},"，因为 MuJoCo 用的是半边长。",[1217,105427,105429],{"id":105428},"site-是什么","site 是什么",[19,105431,105432,105435],{},[50,105433,105434],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1760,105437,105438,105441,105444,105447],{},[1763,105439,105440],{},"标记机械臂末端。",[1763,105442,105443],{},"标记目标位置。",[1763,105445,105446],{},"放传感器或相机参考点。",[1763,105448,105449],{},"在 Python 中读取某个关键点的世界坐标。",[19,105451,105452,105453,103245,105456,105459],{},"在后面的 Reacher 任务中，",[50,105454,105455],{},"tip",[50,105457,105458],{},"target"," 就会用 site 表示。",[14,105461,103480],{"id":103479},[130,105463,105465],{"className":132,"code":105464,"language":134,"meta":135,"style":135},"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",[50,105466,105467,105473,105483,105487,105491,105499,105504,105508,105512,105516,105521,105525,105530,105535,105540,105545,105549,105553,105557,105561,105565,105569,105581,105593,105601,105605,105620,105635,105639,105652,105666,105679,105692,105696,105712,105716,105720,105731,105743,105755,105767,105771,105775,105787],{"__ignoreMap":135},[139,105468,105469,105471],{"class":141,"line":142},[139,105470,1064],{"class":149},[139,105472,103528],{"class":145},[139,105474,105475,105477,105479,105481],{"class":141,"line":210},[139,105476,1064],{"class":149},[139,105478,33630],{"class":145},[139,105480,1035],{"class":149},[139,105482,33635],{"class":145},[139,105484,105485],{"class":141,"line":254},[139,105486,843],{"emptyLinePlaceholder":842},[139,105488,105489],{"class":141,"line":262},[139,105490,843],{"emptyLinePlaceholder":842},[139,105492,105493,105495,105497],{"class":141,"line":313},[139,105494,103541],{"class":153},[139,105496,15836],{"class":149},[139,105498,103546],{"class":160},[139,105500,105501],{"class":141,"line":462},[139,105502,105503],{"class":160},"\u003Cmujoco model=\"xml_basic\">\n",[139,105505,105506],{"class":141,"line":474},[139,105507,103556],{"class":160},[139,105509,105510],{"class":141,"line":484},[139,105511,843],{"emptyLinePlaceholder":842},[139,105513,105514],{"class":141,"line":989},[139,105515,103565],{"class":160},[139,105517,105518],{"class":141,"line":994},[139,105519,105520],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[139,105522,105523],{"class":141,"line":999},[139,105524,843],{"emptyLinePlaceholder":842},[139,105526,105527],{"class":141,"line":1006},[139,105528,105529],{"class":160},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[139,105531,105532],{"class":141,"line":1027},[139,105533,105534],{"class":160},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[139,105536,105537],{"class":141,"line":1040},[139,105538,105539],{"class":160},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[139,105541,105542],{"class":141,"line":2160},[139,105543,105544],{"class":160},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[139,105546,105547],{"class":141,"line":2188},[139,105548,103594],{"class":160},[139,105550,105551],{"class":141,"line":3944},[139,105552,103599],{"class":160},[139,105554,105555],{"class":141,"line":3963},[139,105556,103604],{"class":160},[139,105558,105559],{"class":141,"line":3968},[139,105560,97925],{"class":160},[139,105562,105563],{"class":141,"line":3982},[139,105564,843],{"emptyLinePlaceholder":842},[139,105566,105567],{"class":141,"line":3987},[139,105568,843],{"emptyLinePlaceholder":842},[139,105570,105571,105573,105575,105577,105579],{"class":141,"line":4014},[139,105572,778],{"class":149},[139,105574,4259],{"class":781},[139,105576,103625],{"class":145},[139,105578,97913],{"class":153},[139,105580,246],{"class":145},[139,105582,105583,105585,105587,105589,105591],{"class":141,"line":4019},[139,105584,103634],{"class":145},[139,105586,150],{"class":149},[139,105588,103639],{"class":145},[139,105590,103541],{"class":153},[139,105592,164],{"class":145},[139,105594,105595,105597,105599],{"class":141,"line":4036},[139,105596,103648],{"class":145},[139,105598,150],{"class":149},[139,105600,103653],{"class":145},[139,105602,105603],{"class":141,"line":4041},[139,105604,843],{"emptyLinePlaceholder":842},[139,105606,105607,105610,105612,105615,105618],{"class":141,"line":4046},[139,105608,105609],{"class":145},"    box_body_id ",[139,105611,150],{"class":149},[139,105613,105614],{"class":145}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[139,105616,105617],{"class":160},"\"red_box\"",[139,105619,164],{"class":145},[139,105621,105622,105625,105627,105630,105633],{"class":141,"line":4051},[139,105623,105624],{"class":145},"    site_id ",[139,105626,150],{"class":149},[139,105628,105629],{"class":145}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[139,105631,105632],{"class":160},"\"box_center\"",[139,105634,164],{"class":145},[139,105636,105637],{"class":141,"line":4065},[139,105638,843],{"emptyLinePlaceholder":842},[139,105640,105641,105643,105646,105648,105650],{"class":141,"line":4070},[139,105642,790],{"class":149},[139,105644,105645],{"class":145}," box_body_id ",[139,105647,796],{"class":149},[139,105649,799],{"class":153},[139,105651,246],{"class":145},[139,105653,105654,105656,105659,105661,105664],{"class":141,"line":4860},[139,105655,806],{"class":149},[139,105657,105658],{"class":153}," RuntimeError",[139,105660,157],{"class":145},[139,105662,105663],{"class":160},"\"body red_box not found\"",[139,105665,164],{"class":145},[139,105667,105668,105670,105673,105675,105677],{"class":141,"line":4874},[139,105669,790],{"class":149},[139,105671,105672],{"class":145}," site_id ",[139,105674,796],{"class":149},[139,105676,799],{"class":153},[139,105678,246],{"class":145},[139,105680,105681,105683,105685,105687,105690],{"class":141,"line":4882},[139,105682,806],{"class":149},[139,105684,105658],{"class":153},[139,105686,157],{"class":145},[139,105688,105689],{"class":160},"\"site box_center not found\"",[139,105691,164],{"class":145},[139,105693,105694],{"class":141,"line":4887},[139,105695,843],{"emptyLinePlaceholder":842},[139,105697,105698,105700,105702,105704,105706,105708,105710],{"class":141,"line":4893},[139,105699,5482],{"class":149},[139,105701,103728],{"class":145},[139,105703,1976],{"class":149},[139,105705,34690],{"class":153},[139,105707,157],{"class":145},[139,105709,1022],{"class":153},[139,105711,558],{"class":145},[139,105713,105714],{"class":141,"line":4899},[139,105715,103743],{"class":145},[139,105717,105718],{"class":141,"line":4904},[139,105719,843],{"emptyLinePlaceholder":842},[139,105721,105722,105724,105726,105729],{"class":141,"line":10222},[139,105723,302],{"class":153},[139,105725,157],{"class":145},[139,105727,105728],{"class":160},"\"simulation time:\"",[139,105730,103705],{"class":145},[139,105732,105733,105735,105737,105740],{"class":141,"line":10246},[139,105734,302],{"class":153},[139,105736,157],{"class":145},[139,105738,105739],{"class":160},"\"box body position:\"",[139,105741,105742],{"class":145},", data.xpos[box_body_id].copy())\n",[139,105744,105745,105747,105749,105752],{"class":141,"line":10251},[139,105746,302],{"class":153},[139,105748,157],{"class":145},[139,105750,105751],{"class":160},"\"site position:\"",[139,105753,105754],{"class":145},", data.site_xpos[site_id].copy())\n",[139,105756,105757,105759,105761,105764],{"class":141,"line":10257},[139,105758,302],{"class":153},[139,105760,157],{"class":145},[139,105762,105763],{"class":160},"\"box qpos:\"",[139,105765,105766],{"class":145},", np.array(data.qpos))\n",[139,105768,105769],{"class":141,"line":10284},[139,105770,843],{"emptyLinePlaceholder":842},[139,105772,105773],{"class":141,"line":10289},[139,105774,843],{"emptyLinePlaceholder":842},[139,105776,105777,105779,105781,105783,105785],{"class":141,"line":10295},[139,105778,1729],{"class":149},[139,105780,1732],{"class":153},[139,105782,1735],{"class":149},[139,105784,1738],{"class":160},[139,105786,246],{"class":145},[139,105788,105789],{"class":141,"line":10307},[139,105790,103794],{"class":145},[19,105792,105793],{},"保存为：",[130,105795,105797],{"className":1830,"code":105796,"language":1832,"meta":135,"style":135},"touch ch2_xml_basic.py\n",[50,105798,105799],{"__ignoreMap":135},[139,105800,105801,105803],{"class":141,"line":142},[139,105802,103510],{"class":781},[139,105804,105805],{"class":160}," ch2_xml_basic.py\n",[19,105807,104525],{},[130,105809,105811],{"className":1830,"code":105810,"language":1832,"meta":135,"style":135},"python ch2_xml_basic.py\n",[50,105812,105813],{"__ignoreMap":135},[139,105814,105815,105817],{"class":141,"line":142},[139,105816,134],{"class":781},[139,105818,105805],{"class":160},[1217,105820,103797],{"id":103797},[19,105822,105823],{},"用名字查找 body：",[130,105825,105827],{"className":132,"code":105826,"language":134,"meta":135,"style":135},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[50,105828,105829],{"__ignoreMap":135},[139,105830,105831,105834,105836,105838,105840],{"class":141,"line":142},[139,105832,105833],{"class":145},"box_body_id ",[139,105835,150],{"class":149},[139,105837,105614],{"class":145},[139,105839,105617],{"class":160},[139,105841,164],{"class":145},[19,105843,105844],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105846,105847],{},"用名字查找 site：",[130,105849,105851],{"className":132,"code":105850,"language":134,"meta":135,"style":135},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[50,105852,105853],{"__ignoreMap":135},[139,105854,105855,105858,105860,105862,105864],{"class":141,"line":142},[139,105856,105857],{"class":145},"site_id ",[139,105859,150],{"class":149},[139,105861,105629],{"class":145},[139,105863,105632],{"class":160},[139,105865,164],{"class":145},[19,105867,105868,105869,105872,105873,105876],{},"注意第二个参数是对象类型。查 body 就用 ",[50,105870,105871],{},"mjOBJ_BODY","，查 site 就用 ",[50,105874,105875],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105878,105879],{},"读取世界坐标：",[130,105881,105883],{"className":132,"code":105882,"language":134,"meta":135,"style":135},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[50,105884,105885,105890],{"__ignoreMap":135},[139,105886,105887],{"class":141,"line":142},[139,105888,105889],{"class":145},"data.xpos[box_body_id]\n",[139,105891,105892],{"class":141,"line":210},[139,105893,105894],{"class":145},"data.site_xpos[site_id]\n",[19,105896,105897,105900,105901,105904],{},[50,105898,105899],{},"xpos"," 是 body 的世界坐标，",[50,105902,105903],{},"site_xpos"," 是 site 的世界坐标。",[1217,105906,103933],{"id":103933},[130,105908,105910],{"className":132,"code":105909,"language":134,"meta":135,"style":135},"import mujoco\nimport numpy as np\n",[50,105911,105912,105918],{"__ignoreMap":135},[139,105913,105914,105916],{"class":141,"line":142},[139,105915,1064],{"class":149},[139,105917,103528],{"class":145},[139,105919,105920,105922,105924,105926],{"class":141,"line":210},[139,105921,1064],{"class":149},[139,105923,33630],{"class":145},[139,105925,1035],{"class":149},[139,105927,33635],{"class":145},[19,105929,105930,105931,105934,105935,105938,105939,2655,105942,170],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[50,105932,105933],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[50,105936,105937],{},"as np"," 是习惯写法，后面就可以写 ",[50,105940,105941],{},"np.array(...)",[50,105943,105944],{},"np.round(...)",[130,105946,105947],{"className":132,"code":103820,"language":134,"meta":135,"style":135},[50,105948,105949,105957,105961],{"__ignoreMap":135},[139,105950,105951,105953,105955],{"class":141,"line":142},[139,105952,103541],{"class":153},[139,105954,15836],{"class":149},[139,105956,103546],{"class":160},[139,105958,105959],{"class":141,"line":210},[139,105960,103835],{"class":160},[139,105962,105963],{"class":141,"line":254},[139,105964,97925],{"class":160},[19,105966,105967,105968,170],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[50,105969,105970],{},"mujoco.MjModel.from_xml_string(XML)",[130,105972,105974],{"className":55302,"code":105973,"language":55304,"meta":135,"style":135},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[50,105975,105976],{"__ignoreMap":135},[139,105977,105978,105980,105982,105984,105986,105988,105990,105992,105995,105997,105999,106002,106004,106006,106009],{"class":141,"line":142},[139,105979,796],{"class":145},[139,105981,105434],{"class":53538},[139,105983,17189],{"class":781},[139,105985,150],{"class":145},[139,105987,105632],{"class":160},[139,105989,103333],{"class":781},[139,105991,150],{"class":145},[139,105993,105994],{"class":160},"\"0 0 0\"",[139,105996,103363],{"class":781},[139,105998,150],{"class":145},[139,106000,106001],{"class":160},"\"0.03\"",[139,106003,80996],{"class":781},[139,106005,150],{"class":145},[139,106007,106008],{"class":160},"\"0 1 0 1\"",[139,106010,103371],{"class":145},[19,106012,106013,106015,106016,106019,106020,106022,106023,106026],{},[50,106014,105434],{}," 是标记点。",[50,106017,106018],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[50,106021,105394],{}," 表示显示出来的小球大小。",[50,106024,106025],{},"rgba=\"0 1 0 1\""," 表示绿色。",[130,106028,106029],{"className":132,"code":105826,"language":134,"meta":135,"style":135},[50,106030,106031],{"__ignoreMap":135},[139,106032,106033,106035,106037,106039,106041],{"class":141,"line":142},[139,106034,105833],{"class":145},[139,106036,150],{"class":149},[139,106038,105614],{"class":145},[139,106040,105617],{"class":160},[139,106042,164],{"class":145},[19,106044,106045,106046,106048],{},"这行的作用是：根据名字 ",[50,106047,105617],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106050,106051],{},"拆开看：",[1760,106053,106054,106060,106065,106071],{},[1763,106055,106056,106059],{},[50,106057,106058],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1763,106061,106062,106064],{},[50,106063,104309],{}," 是被查询的模型。",[1763,106066,106067,106070],{},[50,106068,106069],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1763,106072,106073,106075],{},[50,106074,105617],{}," 是 XML 里写的名字。",[130,106077,106078],{"className":132,"code":105850,"language":134,"meta":135,"style":135},[50,106079,106080],{"__ignoreMap":135},[139,106081,106082,106084,106086,106088,106090],{"class":141,"line":142},[139,106083,105857],{"class":145},[139,106085,150],{"class":149},[139,106087,105629],{"class":145},[139,106089,105632],{"class":160},[139,106091,164],{"class":145},[19,106093,106094,106095,170],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[50,106096,105632],{},[130,106098,106100],{"className":132,"code":106099,"language":134,"meta":135,"style":135},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[50,106101,106102,106114],{"__ignoreMap":135},[139,106103,106104,106106,106108,106110,106112],{"class":141,"line":142},[139,106105,1729],{"class":149},[139,106107,105645],{"class":145},[139,106109,796],{"class":149},[139,106111,799],{"class":153},[139,106113,246],{"class":145},[139,106115,106116,106119,106121,106123,106125],{"class":141,"line":210},[139,106117,106118],{"class":149},"    raise",[139,106120,105658],{"class":153},[139,106122,157],{"class":145},[139,106124,105663],{"class":160},[139,106126,164],{"class":145},[19,106128,106129,106131,106132,106135,106136,106139,106140,106143],{},[50,106130,1729],{}," 是条件判断。",[50,106133,106134],{},"mj_name2id"," 找不到对象时会返回 ",[50,106137,106138],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[50,106141,106142],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[130,106145,106147],{"className":132,"code":106146,"language":134,"meta":135,"style":135},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[50,106148,106149,106165],{"__ignoreMap":135},[139,106150,106151,106153,106155,106157,106159,106161,106163],{"class":141,"line":142},[139,106152,1970],{"class":149},[139,106154,103728],{"class":145},[139,106156,1976],{"class":149},[139,106158,34690],{"class":153},[139,106160,157],{"class":145},[139,106162,1022],{"class":153},[139,106164,558],{"class":145},[139,106166,106167],{"class":141,"line":210},[139,106168,103924],{"class":145},[19,106170,106171],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[130,106173,106175],{"className":132,"code":106174,"language":134,"meta":135,"style":135},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[50,106176,106177],{"__ignoreMap":135},[139,106178,106179,106181,106183,106185],{"class":141,"line":142},[139,106180,213],{"class":153},[139,106182,157],{"class":145},[139,106184,105739],{"class":160},[139,106186,105742],{"class":145},[19,106188,106189,106191,106192,106195],{},[50,106190,103306],{}," 保存所有 body 的世界坐标。",[50,106193,106194],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[130,106197,106199],{"className":132,"code":106198,"language":134,"meta":135,"style":135},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[50,106200,106201],{"__ignoreMap":135},[139,106202,106203,106205,106207,106209],{"class":141,"line":142},[139,106204,213],{"class":153},[139,106206,157],{"class":145},[139,106208,105751],{"class":160},[139,106210,105754],{"class":145},[19,106212,106213,106216,106217,106219],{},[50,106214,106215],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[50,106218,105201],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[130,106221,106223],{"className":132,"code":106222,"language":134,"meta":135,"style":135},"print(\"box qpos:\", np.array(data.qpos))\n",[50,106224,106225],{"__ignoreMap":135},[139,106226,106227,106229,106231,106233],{"class":141,"line":142},[139,106228,213],{"class":153},[139,106230,157],{"class":145},[139,106232,105763],{"class":160},[139,106234,105766],{"class":145},[19,106236,106237,106238,106241],{},"这里打印广义位置数组。",[50,106239,106240],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106243,104540],{"id":104539},[19,106245,106246,106247,106250,106251,170],{},"程序会输出 ",[50,106248,106249],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[50,106252,106253],{},"qpos",[19,106255,106256,106258,106259,106262,106263,106266],{},[50,106257,106194],{}," 是 body 的世界坐标位置。",[50,106260,106261],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[50,106264,106265],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106268,84450,106269,84758,106271,106273],{},[50,106270,105201],{},[50,106272,106018],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106275,106276],{},"如果你把 site 改成：",[130,106278,106280],{"className":55302,"code":106279,"language":55304,"meta":135,"style":135},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[50,106281,106282],{"__ignoreMap":135},[139,106283,106284,106286,106288,106290,106292,106295,106297,106299,106302,106304,106306,106308,106310,106312,106314],{"class":141,"line":142},[139,106285,796],{"class":145},[139,106287,105434],{"class":53538},[139,106289,17189],{"class":781},[139,106291,150],{"class":145},[139,106293,106294],{"class":160},"\"box_top\"",[139,106296,103333],{"class":781},[139,106298,150],{"class":145},[139,106300,106301],{"class":160},"\"0 0 0.15\"",[139,106303,103363],{"class":781},[139,106305,150],{"class":145},[139,106307,106001],{"class":160},[139,106309,80996],{"class":781},[139,106311,150],{"class":145},[139,106313,106008],{"class":160},[139,106315,103371],{"class":145},[19,106317,106318,106319,106322],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[50,106320,106321],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106324,104572],{"id":104571},[1760,106326,106327,106336,106339,106346,106352,106363],{},[1763,106328,104635,106329,106331,106332,104638,106334,170],{},[50,106330,105205],{}," 的初始高度从 ",[50,106333,410],{},[50,106335,416],{},[1763,106337,106338],{},"重新运行程序。",[1763,106340,106341,106342,106345],{},"观察 ",[50,106343,106344],{},"box qpos"," 和最终位置是否变化。",[1763,106347,106348,106349,106351],{},"故意把 ",[50,106350,105434],{}," 名称改错，确认程序能报错。",[1763,106353,104635,106354,106356,106357,104638,106359,106362],{},[50,106355,103347],{}," 的颜色 ",[50,106358,104257],{},[50,106360,106361],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1763,106364,104635,106365,84758,106367,104638,106370,106373,106374,106376],{},[50,106366,105201],{},[50,106368,106369],{},"pos",[50,106371,106372],{},"0 0 0.2","，观察 ",[50,106375,106321],{}," 如何变化。",[14,106378,104677],{"id":104676},[1217,106380,106382],{"id":106381},"xml-error-schema-violation",[50,106383,106384],{},"XML Error: Schema violation",[19,106386,106387],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1217,106389,106391,83518,106393],{"id":106390},"mj_name2id-返回-1",[50,106392,106134],{},[50,106394,106138],{},[19,106396,106397,106398,106401],{},"说明名字没有找到。检查 XML 中 ",[50,106399,106400],{},"name=\"...\"","，并确认对象类型正确。",[1217,106403,106404],{"id":106404},"物体不下落",[19,106406,104747],{},[1760,106408,106409,106414,106419],{},[1763,106410,106411,106412],{},"body 是否有 ",[50,106413,103845],{},[1763,106415,106416,106417],{},"gravity 是否为 ",[50,106418,104813],{},[1763,106420,106421,106422,106424],{},"body 是否被固定在 ",[50,106423,104066],{}," 中",[1217,106426,106427],{"id":106427},"坐标看起来不符合预期",[19,106429,106430],{},"先区分两种坐标：",[26,106432,106433,106442],{},[29,106434,106435],{},[32,106436,106437,106440],{},[35,106438,106439],{"align":26003},"坐标",[35,106441,102927],{"align":26003},[42,106443,106444,106454],{},[32,106445,106446,106451],{},[47,106447,106448,106449],{"align":26003},"XML 里的 ",[50,106450,106369],{},[47,106452,106453],{"align":26003},"相对父 body 的局部坐标",[32,106455,106456,106462],{},[47,106457,106458,27241,106460],{"align":26003},[50,106459,103306],{},[50,106461,106215],{},[47,106463,106464],{"align":26003},"仿真更新后的世界坐标",[19,106466,106467,106468,106470,106471,84767,106474,106476],{},"如果你修改了 ",[50,106469,103297],{},"，但还没调用 ",[50,106472,106473],{},"mj_forward",[50,106475,103442],{},"，世界坐标可能还没有更新。",[14,106478,104831],{"id":104830},[19,106480,106481],{},"MJCF 建模先掌握四件事：",[1760,106483,106484,106489,106494,106499],{},[1763,106485,106486,106488],{},[50,106487,54037],{}," 表示刚体层级。",[1763,106490,106491,106493],{},[50,106492,103347],{}," 表示形状、碰撞和质量。",[1763,106495,106496,106498],{},[50,106497,105180],{}," 决定 body 能不能动、怎么动。",[1763,106500,106501,106503],{},[50,106502,105434],{}," 用来标记关键点，方便 Python 读取位置。",[19,106505,106506],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2348,106508,106509],{},"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":135,"searchDepth":210,"depth":210,"links":106511},[106512,106513,106514,106520,106524,106525,106526,106533],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":106515},[106516,106517,106518,106519],{"id":105184,"depth":254,"text":105184},{"id":105298,"depth":254,"text":105298},{"id":105324,"depth":254,"text":105325},{"id":105428,"depth":254,"text":105429},{"id":103479,"depth":210,"text":103480,"children":106521},[106522,106523],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":106527},[106528,106529,106531,106532],{"id":106381,"depth":254,"text":106384},{"id":106390,"depth":254,"text":106530},"mj_name2id 返回 -1",{"id":106404,"depth":254,"text":106404},{"id":106427,"depth":254,"text":106427},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104878,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106540,"title":106541,"body":106542,"description":135,"extension":2385,"meta":108037,"navigation":842,"path":108038,"seo":108039,"stem":108040,"__hash__":108041},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106543,"toc":108009},[106544,106547,106549,106552,106555,106593,106596,106602,106605,106607,106609,106636,106638,106652,106654,106695,106697,106721,106723,106726,106735,106744,106747,106756,106764,106773,106776,106786,106789,106841,106848,106854,106862,106910,106913,106932,106935,106943,106947,106956,106989,106991,107339,107341,107353,107355,107366,107368,107371,107392,107398,107401,107426,107436,107439,107447,107450,107453,107474,107485,107487,107507,107510,107531,107540,107559,107565,107590,107593,107607,107614,107638,107641,107649,107658,107674,107686,107694,107703,107705,107708,107732,107737,107740,107762,107764,107803,107805,107812,107814,107822,107825,107828,107840,107881,107888,107899,107906,107909,107958,107961,107964,107970,107972,107977,108003,108006],[10,106545,106541],{"id":106546},"_3python-控制接口读取状态与推进仿真",[14,106548,102874],{"id":102873},[19,106550,106551],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106553,106554],{},"你将学习:",[1760,106556,106557,106562,106567,106571,106576,106587],{},[1763,106558,106559],{},[50,106560,106561],{},"MjModel.from_xml_string",[1763,106563,106564],{},[50,106565,106566],{},"MjData(model)",[1763,106568,106569],{},[50,106570,103442],{},[1763,106572,106573],{},[50,106574,106575],{},"mj_resetData",[1763,106577,106578,106579,2655,106581,2655,106584],{},"读取 ",[50,106580,106253],{},[50,106582,106583],{},"qvel",[50,106585,106586],{},"ctrl",[1763,106588,106589,106590],{},"使用 ",[50,106591,106592],{},"model.opt.timestep",[19,106594,106595],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[130,106597,106600],{"className":106598,"code":106599,"language":645,"meta":135},[643],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[50,106601,106599],{"__ignoreMap":135},[19,106603,106604],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106606,102997],{"id":102996},[19,106608,103000],{},[130,106610,106612],{"className":1830,"code":106611,"language":1832,"meta":135,"style":135},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[50,106613,106614],{"__ignoreMap":135},[139,106615,106616,106618,106620,106622,106624,106627,106629,106631,106633],{"class":141,"line":142},[139,106617,26840],{"class":781},[139,106619,28575],{"class":160},[139,106621,1841],{"class":160},[139,106623,28660],{"class":153},[139,106625,106626],{"class":160}," python3",[139,106628,103025],{"class":160},[139,106630,104725],{"class":160},[139,106632,103041],{"class":160},[139,106634,106635],{"class":160}," glfw\n",[19,106637,105043],{},[130,106639,106640],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},[50,106641,106642],{"__ignoreMap":135},[139,106643,106644,106646,106648,106650],{"class":141,"line":142},[139,106645,1826],{"class":781},[139,106647,1841],{"class":160},[139,106649,103157],{"class":160},[139,106651,103160],{"class":160},[19,106653,105060],{},[130,106655,106657],{"className":1830,"code":106656,"language":1832,"meta":135,"style":135},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[50,106658,106659,106676,106685],{"__ignoreMap":135},[139,106660,106661,106663,106665,106667,106670,106672,106674],{"class":141,"line":142},[139,106662,32589],{"class":781},[139,106664,31435],{"class":160},[139,106666,27378],{"class":153},[139,106668,106669],{"class":160}," mujoco-python-api",[139,106671,103202],{"class":160},[139,106673,103205],{"class":153},[139,106675,103208],{"class":153},[139,106677,106678,106680,106682],{"class":141,"line":210},[139,106679,32589],{"class":781},[139,106681,103215],{"class":160},[139,106683,106684],{"class":160}," mujoco-python-api\n",[139,106686,106687,106689,106691,106693],{"class":141,"line":254},[139,106688,1826],{"class":781},[139,106690,1841],{"class":160},[139,106692,103157],{"class":160},[139,106694,103160],{"class":160},[19,106696,103231],{},[1760,106698,106699,106706,106715],{},[1763,106700,106701,103245,106703,106705],{},[50,106702,102902],{},[50,106704,102907],{}," 是官方 Python bindings 的类名。",[1763,106707,106708,106709,106712,106713,170],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[50,106710,106711],{},"mjModel"," 在 Python 中是 ",[50,106714,102936],{},[1763,106716,106717,106718,170],{},"不要使用 ",[50,106719,106720],{},"sim = mujoco_py.MjSim(...)",[14,106722,103272],{"id":103271},[19,106724,106725],{},"仿真推进核心代码:",[130,106727,106729],{"className":132,"code":106728,"language":134,"meta":135,"style":135},"mujoco.mj_step(model, data)\n",[50,106730,106731],{"__ignoreMap":135},[139,106732,106733],{"class":141,"line":142},[139,106734,106728],{"class":145},[19,106736,106737,106738,2655,106740,2655,106742,170],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[50,106739,103297],{},[50,106741,103300],{},[50,106743,103294],{},[19,106745,106746],{},"重置仿真:",[130,106748,106750],{"className":132,"code":106749,"language":134,"meta":135,"style":135},"mujoco.mj_resetData(model, data)\n",[50,106751,106752],{"__ignoreMap":135},[139,106753,106754],{"class":141,"line":142},[139,106755,106749],{"class":145},[19,106757,106758,106759,84767,106761,106763],{},"如果手动修改了 ",[50,106760,103297],{},[50,106762,103300],{},"，通常应调用:",[130,106765,106767],{"className":132,"code":106766,"language":134,"meta":135,"style":135},"mujoco.mj_forward(model, data)\n",[50,106768,106769],{"__ignoreMap":135},[139,106770,106771],{"class":141,"line":142},[139,106772,106766],{"class":145},[19,106774,106775],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1217,106777,106779,2655,106781,2655,106783,106785],{"id":106778},"qposqvelctrl-是什么",[50,106780,106253],{},[50,106782,106583],{},[50,106784,106586],{}," 是什么",[19,106787,106788],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[26,106790,106791,106803],{},[29,106792,106793],{},[32,106794,106795,106798,106800],{},[35,106796,106797],{"align":26003},"字段",[35,106799,102927],{"align":26003},[35,106801,106802],{"align":26003},"谁来修改",[42,106804,106805,106817,106829],{},[32,106806,106807,106811,106814],{},[47,106808,106809],{"align":26003},[50,106810,103297],{},[47,106812,106813],{"align":26003},"广义位置，例如小车位置、关节角、自由物体位置姿态",[47,106815,106816],{"align":26003},"MuJoCo 更新，也可以手动设置初始状态",[32,106818,106819,106823,106826],{},[47,106820,106821],{"align":26003},[50,106822,103300],{},[47,106824,106825],{"align":26003},"广义速度，例如小车速度、关节角速度",[47,106827,106828],{"align":26003},"MuJoCo 更新，也可以手动清零",[32,106830,106831,106835,106838],{},[47,106832,106833],{"align":26003},[50,106834,103303],{},[47,106836,106837],{"align":26003},"actuator 的控制输入",[47,106839,106840],{"align":26003},"主要由你的控制代码写入",[19,106842,11299,106843,103245,106845,106847],{},[50,106844,106253],{},[50,106846,106583],{}," 不一定同维。自由刚体就是典型例子：",[130,106849,106852],{"className":106850,"code":106851,"language":645,"meta":135},[643],"freejoint: qpos 7 维，qvel 6 维\n",[50,106853,106851],{"__ignoreMap":135},[1217,106855,106857,103245,106859,106861],{"id":106856},"mj_step-和-mj_forward-的区别",[50,106858,103442],{},[50,106860,106473],{}," 的区别",[26,106863,106864,106877],{},[29,106865,106866],{},[32,106867,106868,106871,106874],{},[35,106869,106870],{"align":26003},"函数",[35,106872,106873],{"align":26003},"是否推进时间",[35,106875,106876],{"align":26003},"什么时候用",[42,106878,106879,106892],{},[32,106880,106881,106886,106889],{},[47,106882,106883],{"align":26003},[50,106884,106885],{},"mj_step(model, data)",[47,106887,106888],{"align":26003},"是",[47,106890,106891],{"align":26003},"正常仿真循环，每调用一次前进一步",[32,106893,106894,106899,106902],{},[47,106895,106896],{"align":26003},[50,106897,106898],{},"mj_forward(model, data)",[47,106900,106901],{"align":26003},"否",[47,106903,106904,106905,2655,106907,106909],{"align":26003},"手动改了 ",[50,106906,106253],{},[50,106908,106583],{}," 后，刷新派生量",[19,106911,106912],{},"例如你写：",[130,106914,106916],{"className":132,"code":106915,"language":134,"meta":135,"style":135},"data.qpos[2] = 2.0\n",[50,106917,106918],{"__ignoreMap":135},[139,106919,106920,106923,106925,106927,106929],{"class":141,"line":142},[139,106921,106922],{"class":145},"data.qpos[",[139,106924,416],{"class":153},[139,106926,6721],{"class":145},[139,106928,150],{"class":149},[139,106930,106931],{"class":153}," 2.0\n",[19,106933,106934],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[130,106936,106937],{"className":132,"code":106766,"language":134,"meta":135,"style":135},[50,106938,106939],{"__ignoreMap":135},[139,106940,106941],{"class":141,"line":142},[139,106942,106766],{"class":145},[1217,106944,106946],{"id":106945},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106948,106949,106952,106953,106955],{},[50,106950,106951],{},"mujoco.mj_resetData(model, data)"," 会把 ",[50,106954,35646],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[130,106957,106959],{"className":132,"code":106958,"language":134,"meta":135,"style":135},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[50,106960,106961,106965,106975,106985],{"__ignoreMap":135},[139,106962,106963],{"class":141,"line":142},[139,106964,106749],{"class":145},[139,106966,106967,106970,106972],{"class":141,"line":210},[139,106968,106969],{"class":145},"data.qpos[:] ",[139,106971,150],{"class":149},[139,106973,106974],{"class":145}," random_qpos\n",[139,106976,106977,106980,106982],{"class":141,"line":254},[139,106978,106979],{"class":145},"data.qvel[:] ",[139,106981,150],{"class":149},[139,106983,106984],{"class":153}," 0.0\n",[139,106986,106987],{"class":141,"line":262},[139,106988,106766],{"class":145},[14,106990,103480],{"id":103479},[130,106992,106994],{"className":132,"code":106993,"language":134,"meta":135,"style":135},"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",[50,106995,106996,107002,107012,107016,107020,107028,107033,107037,107041,107045,107050,107054,107059,107064,107069,107073,107077,107081,107085,107089,107093,107112,107119,107131,107142,107158,107174,107178,107182,107194,107206,107214,107218,107229,107233,107249,107253,107257,107266,107270,107275,107284,107288,107301,107306,107315,107319,107323,107335],{"__ignoreMap":135},[139,106997,106998,107000],{"class":141,"line":142},[139,106999,1064],{"class":149},[139,107001,103528],{"class":145},[139,107003,107004,107006,107008,107010],{"class":141,"line":210},[139,107005,1064],{"class":149},[139,107007,33630],{"class":145},[139,107009,1035],{"class":149},[139,107011,33635],{"class":145},[139,107013,107014],{"class":141,"line":254},[139,107015,843],{"emptyLinePlaceholder":842},[139,107017,107018],{"class":141,"line":262},[139,107019,843],{"emptyLinePlaceholder":842},[139,107021,107022,107024,107026],{"class":141,"line":313},[139,107023,103541],{"class":153},[139,107025,15836],{"class":149},[139,107027,103546],{"class":160},[139,107029,107030],{"class":141,"line":462},[139,107031,107032],{"class":160},"\u003Cmujoco model=\"state_api\">\n",[139,107034,107035],{"class":141,"line":474},[139,107036,103556],{"class":160},[139,107038,107039],{"class":141,"line":484},[139,107040,843],{"emptyLinePlaceholder":842},[139,107042,107043],{"class":141,"line":989},[139,107044,103565],{"class":160},[139,107046,107047],{"class":141,"line":994},[139,107048,107049],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[139,107051,107052],{"class":141,"line":999},[139,107053,843],{"emptyLinePlaceholder":842},[139,107055,107056],{"class":141,"line":1006},[139,107057,107058],{"class":160},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[139,107060,107061],{"class":141,"line":1027},[139,107062,107063],{"class":160},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[139,107065,107066],{"class":141,"line":1040},[139,107067,107068],{"class":160},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[139,107070,107071],{"class":141,"line":2160},[139,107072,103594],{"class":160},[139,107074,107075],{"class":141,"line":2188},[139,107076,103599],{"class":160},[139,107078,107079],{"class":141,"line":3944},[139,107080,103604],{"class":160},[139,107082,107083],{"class":141,"line":3963},[139,107084,97925],{"class":160},[139,107086,107087],{"class":141,"line":3968},[139,107088,843],{"emptyLinePlaceholder":842},[139,107090,107091],{"class":141,"line":3982},[139,107092,843],{"emptyLinePlaceholder":842},[139,107094,107095,107097,107100,107103,107105,107108,107110],{"class":141,"line":3987},[139,107096,778],{"class":149},[139,107098,107099],{"class":781}," print_state",[139,107101,107102],{"class":145},"(prefix: ",[139,107104,3600],{"class":153},[139,107106,107107],{"class":145},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[139,107109,97913],{"class":153},[139,107111,246],{"class":145},[139,107113,107114,107116],{"class":141,"line":4014},[139,107115,302],{"class":153},[139,107117,107118],{"class":145},"(prefix)\n",[139,107120,107121,107123,107125,107128],{"class":141,"line":4019},[139,107122,302],{"class":153},[139,107124,157],{"class":145},[139,107126,107127],{"class":160},"\"  timestep:\"",[139,107129,107130],{"class":145},", model.opt.timestep)\n",[139,107132,107133,107135,107137,107140],{"class":141,"line":4036},[139,107134,302],{"class":153},[139,107136,157],{"class":145},[139,107138,107139],{"class":160},"\"  time:\"",[139,107141,103705],{"class":145},[139,107143,107144,107146,107148,107151,107154,107156],{"class":141,"line":4041},[139,107145,302],{"class":153},[139,107147,157],{"class":145},[139,107149,107150],{"class":160},"\"  qpos:\"",[139,107152,107153],{"class":145},", np.round(data.qpos.copy(), ",[139,107155,1476],{"class":153},[139,107157,207],{"class":145},[139,107159,107160,107162,107164,107167,107170,107172],{"class":141,"line":4046},[139,107161,302],{"class":153},[139,107163,157],{"class":145},[139,107165,107166],{"class":160},"\"  qvel:\"",[139,107168,107169],{"class":145},", np.round(data.qvel.copy(), ",[139,107171,1476],{"class":153},[139,107173,207],{"class":145},[139,107175,107176],{"class":141,"line":4051},[139,107177,843],{"emptyLinePlaceholder":842},[139,107179,107180],{"class":141,"line":4065},[139,107181,843],{"emptyLinePlaceholder":842},[139,107183,107184,107186,107188,107190,107192],{"class":141,"line":4070},[139,107185,778],{"class":149},[139,107187,4259],{"class":781},[139,107189,103625],{"class":145},[139,107191,97913],{"class":153},[139,107193,246],{"class":145},[139,107195,107196,107198,107200,107202,107204],{"class":141,"line":4860},[139,107197,103634],{"class":145},[139,107199,150],{"class":149},[139,107201,103639],{"class":145},[139,107203,103541],{"class":153},[139,107205,164],{"class":145},[139,107207,107208,107210,107212],{"class":141,"line":4874},[139,107209,103648],{"class":145},[139,107211,150],{"class":149},[139,107213,103653],{"class":145},[139,107215,107216],{"class":141,"line":4882},[139,107217,843],{"emptyLinePlaceholder":842},[139,107219,107220,107223,107226],{"class":141,"line":4887},[139,107221,107222],{"class":145},"    print_state(",[139,107224,107225],{"class":160},"\"initial\"",[139,107227,107228],{"class":145},", model, data)\n",[139,107230,107231],{"class":141,"line":4893},[139,107232,843],{"emptyLinePlaceholder":842},[139,107234,107235,107237,107239,107241,107243,107245,107247],{"class":141,"line":4899},[139,107236,5482],{"class":149},[139,107238,103728],{"class":145},[139,107240,1976],{"class":149},[139,107242,34690],{"class":153},[139,107244,157],{"class":145},[139,107246,3091],{"class":153},[139,107248,558],{"class":145},[139,107250,107251],{"class":141,"line":4904},[139,107252,103743],{"class":145},[139,107254,107255],{"class":141,"line":10222},[139,107256,843],{"emptyLinePlaceholder":842},[139,107258,107259,107261,107264],{"class":141,"line":10246},[139,107260,107222],{"class":145},[139,107262,107263],{"class":160},"\"after 50 steps\"",[139,107265,107228],{"class":145},[139,107267,107268],{"class":141,"line":10251},[139,107269,843],{"emptyLinePlaceholder":842},[139,107271,107272],{"class":141,"line":10257},[139,107273,107274],{"class":145},"    mujoco.mj_resetData(model, data)\n",[139,107276,107277,107279,107282],{"class":141,"line":10284},[139,107278,107222],{"class":145},[139,107280,107281],{"class":160},"\"after reset\"",[139,107283,107228],{"class":145},[139,107285,107286],{"class":141,"line":10289},[139,107287,843],{"emptyLinePlaceholder":842},[139,107289,107290,107293,107295,107297,107299],{"class":141,"line":10295},[139,107291,107292],{"class":145},"    data.qpos[",[139,107294,416],{"class":153},[139,107296,6721],{"class":145},[139,107298,150],{"class":149},[139,107300,106931],{"class":153},[139,107302,107303],{"class":141,"line":10307},[139,107304,107305],{"class":145},"    mujoco.mj_forward(model, data)\n",[139,107307,107308,107310,107313],{"class":141,"line":10319},[139,107309,107222],{"class":145},[139,107311,107312],{"class":160},"\"after manual qpos edit\"",[139,107314,107228],{"class":145},[139,107316,107317],{"class":141,"line":10331},[139,107318,843],{"emptyLinePlaceholder":842},[139,107320,107321],{"class":141,"line":11990},[139,107322,843],{"emptyLinePlaceholder":842},[139,107324,107325,107327,107329,107331,107333],{"class":141,"line":12015},[139,107326,1729],{"class":149},[139,107328,1732],{"class":153},[139,107330,1735],{"class":149},[139,107332,1738],{"class":160},[139,107334,246],{"class":145},[139,107336,107337],{"class":141,"line":12038},[139,107338,103794],{"class":145},[19,107340,105793],{},[130,107342,107344],{"className":1830,"code":107343,"language":1832,"meta":135,"style":135},"touch ch3_python_state.py\n",[50,107345,107346],{"__ignoreMap":135},[139,107347,107348,107350],{"class":141,"line":142},[139,107349,103510],{"class":781},[139,107351,107352],{"class":160}," ch3_python_state.py\n",[19,107354,104525],{},[130,107356,107358],{"className":1830,"code":107357,"language":1832,"meta":135,"style":135},"python ch3_python_state.py\n",[50,107359,107360],{"__ignoreMap":135},[139,107361,107362,107364],{"class":141,"line":142},[139,107363,134],{"class":781},[139,107365,107352],{"class":160},[1217,107367,103797],{"id":103797},[19,107369,107370],{},"打印状态的函数：",[130,107372,107374],{"className":132,"code":107373,"language":134,"meta":135,"style":135},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[50,107375,107376],{"__ignoreMap":135},[139,107377,107378,107380,107382,107384,107386,107388,107390],{"class":141,"line":142},[139,107379,778],{"class":149},[139,107381,107099],{"class":781},[139,107383,107102],{"class":145},[139,107385,3600],{"class":153},[139,107387,107107],{"class":145},[139,107389,97913],{"class":153},[139,107391,246],{"class":145},[19,107393,107394,107395,107397],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[50,107396,35646],{}," 里发生了什么。",[19,107399,107400],{},"推进 50 步：",[130,107402,107404],{"className":132,"code":107403,"language":134,"meta":135,"style":135},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[50,107405,107406,107422],{"__ignoreMap":135},[139,107407,107408,107410,107412,107414,107416,107418,107420],{"class":141,"line":142},[139,107409,1970],{"class":149},[139,107411,103728],{"class":145},[139,107413,1976],{"class":149},[139,107415,34690],{"class":153},[139,107417,157],{"class":145},[139,107419,3091],{"class":153},[139,107421,558],{"class":145},[139,107423,107424],{"class":141,"line":210},[139,107425,103924],{"class":145},[19,107427,107428,107429,107432,107433,107435],{},"由于 ",[50,107430,107431],{},"timestep=0.01","，所以 50 步后时间约为 ",[50,107434,37572],{}," 秒。",[19,107437,107438],{},"重置：",[130,107440,107441],{"className":132,"code":106749,"language":134,"meta":135,"style":135},[50,107442,107443],{"__ignoreMap":135},[139,107444,107445],{"class":141,"line":142},[139,107446,106749],{"class":145},[19,107448,107449],{},"这会把时间、位置、速度恢复到初始状态。",[19,107451,107452],{},"手动改高度：",[130,107454,107456],{"className":132,"code":107455,"language":134,"meta":135,"style":135},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[50,107457,107458,107470],{"__ignoreMap":135},[139,107459,107460,107462,107464,107466,107468],{"class":141,"line":142},[139,107461,106922],{"class":145},[139,107463,416],{"class":153},[139,107465,6721],{"class":145},[139,107467,150],{"class":149},[139,107469,106931],{"class":153},[139,107471,107472],{"class":141,"line":210},[139,107473,106766],{"class":145},[19,107475,107476,107477,107480,107481,107484],{},"这个例子里 ",[50,107478,107479],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[50,107482,107483],{},"2.0"," 表示把小球放到更高的位置。",[1217,107486,103933],{"id":103933},[130,107488,107489],{"className":132,"code":107373,"language":134,"meta":135,"style":135},[50,107490,107491],{"__ignoreMap":135},[139,107492,107493,107495,107497,107499,107501,107503,107505],{"class":141,"line":142},[139,107494,778],{"class":149},[139,107496,107099],{"class":781},[139,107498,107102],{"class":145},[139,107500,3600],{"class":153},[139,107502,107107],{"class":145},[139,107504,97913],{"class":153},[139,107506,246],{"class":145},[19,107508,107509],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1760,107511,107512,107521,107526],{},[1763,107513,107514,107517,107518,107520],{},[50,107515,107516],{},"prefix","：一段文字，比如 ",[50,107519,107225],{},"，用来说明现在打印的是哪个阶段。",[1763,107522,107523,107525],{},[50,107524,104309],{},"：MuJoCo 模型。",[1763,107527,107528,107530],{},[50,107529,35646],{},"：MuJoCo 当前状态。",[19,107532,107533,2655,107536,107539],{},[50,107534,107535],{},"prefix: str",[50,107537,107538],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[130,107541,107543],{"className":132,"code":107542,"language":134,"meta":135,"style":135},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[50,107544,107545],{"__ignoreMap":135},[139,107546,107547,107549,107551,107553,107555,107557],{"class":141,"line":142},[139,107548,213],{"class":153},[139,107550,157],{"class":145},[139,107552,107150],{"class":160},[139,107554,107153],{"class":145},[139,107556,1476],{"class":153},[139,107558,207],{"class":145},[19,107560,107561,107564],{},[50,107562,107563],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[130,107566,107568],{"className":132,"code":107567,"language":134,"meta":135,"style":135},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[50,107569,107570,107582],{"__ignoreMap":135},[139,107571,107572,107574,107576,107578,107580],{"class":141,"line":142},[139,107573,103859],{"class":145},[139,107575,150],{"class":149},[139,107577,103639],{"class":145},[139,107579,103541],{"class":153},[139,107581,164],{"class":145},[139,107583,107584,107586,107588],{"class":141,"line":210},[139,107585,103883],{"class":145},[139,107587,150],{"class":149},[139,107589,103653],{"class":145},[19,107591,107592],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[130,107594,107596],{"className":132,"code":107595,"language":134,"meta":135,"style":135},"print_state(\"initial\", model, data)\n",[50,107597,107598],{"__ignoreMap":135},[139,107599,107600,107603,107605],{"class":141,"line":142},[139,107601,107602],{"class":145},"print_state(",[139,107604,107225],{"class":160},[139,107606,107228],{"class":145},[19,107608,107609,107610,107613],{},"调用刚才定义的 ",[50,107611,107612],{},"print_state"," 函数，打印初始状态。",[130,107615,107616],{"className":132,"code":107403,"language":134,"meta":135,"style":135},[50,107617,107618,107634],{"__ignoreMap":135},[139,107619,107620,107622,107624,107626,107628,107630,107632],{"class":141,"line":142},[139,107621,1970],{"class":149},[139,107623,103728],{"class":145},[139,107625,1976],{"class":149},[139,107627,34690],{"class":153},[139,107629,157],{"class":145},[139,107631,3091],{"class":153},[139,107633,558],{"class":145},[139,107635,107636],{"class":141,"line":210},[139,107637,103924],{"class":145},[19,107639,107640],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[130,107642,107643],{"className":132,"code":106749,"language":134,"meta":135,"style":135},[50,107644,107645],{"__ignoreMap":135},[139,107646,107647],{"class":141,"line":142},[139,107648,106749],{"class":145},[19,107650,107651,107652,107654,107655,107657],{},"重置 ",[50,107653,35646],{},"。注意它不会重新创建 ",[50,107656,104309],{},"，因为模型结构没有变，只是状态回到初始值。",[130,107659,107660],{"className":132,"code":106915,"language":134,"meta":135,"style":135},[50,107661,107662],{"__ignoreMap":135},[139,107663,107664,107666,107668,107670,107672],{"class":141,"line":142},[139,107665,106922],{"class":145},[139,107667,416],{"class":153},[139,107669,6721],{"class":145},[139,107671,150],{"class":149},[139,107673,106931],{"class":153},[19,107675,107676,107677,2655,107680,2655,107683,107685],{},"这行是“手动改状态”。在 freejoint 中，",[50,107678,107679],{},"qpos[0]",[50,107681,107682],{},"qpos[1]",[50,107684,107479],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[130,107687,107688],{"className":132,"code":106766,"language":134,"meta":135,"style":135},[50,107689,107690],{"__ignoreMap":135},[139,107691,107692],{"class":141,"line":142},[139,107693,106766],{"class":145},[19,107695,107696,107697,107699,107700,107702],{},"手动改完 ",[50,107698,106253],{}," 后，调用 ",[50,107701,106473],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107704,104540],{"id":104539},[19,107706,107707],{},"你会看到:",[1760,107709,107710,107715,107720,107723],{},[1763,107711,107712,107713],{},"初始时间为 ",[50,107714,2634],{},[1763,107716,107717,107718],{},"50 步后时间约为 ",[50,107719,37572],{},[1763,107721,107722],{},"reset 后状态恢复",[1763,107724,107725,107726,107729,107730],{},"手动修改 ",[50,107727,107728],{},"data.qpos[2]"," 后，小球高度变为 ",[50,107731,107483],{},[19,107733,107734,107736],{},[50,107735,107479],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107738,107739],{},"输出里可以重点看三件事：",[1760,107741,107742,107750,107755],{},[1763,107743,107744,107746,107747,107749],{},[50,107745,4671],{}," 是否随着 ",[50,107748,103442],{}," 增加。",[1763,107751,107752,107754],{},[50,107753,106253],{}," 的 z 坐标是否因为下落而变化。",[1763,107756,107757,107759,107760,170],{},[50,107758,106575],{}," 后时间是否回到 ",[50,107761,2634],{},[14,107763,104572],{"id":104571},[1760,107765,107766,107772,107778,107784,107787,107796],{},[1763,107767,107768,107769,170],{},"修改 timestep 为 ",[50,107770,107771],{},"0.005",[1763,107773,107774,107775,170],{},"重新运行，检查 50 步后时间是否约为 ",[50,107776,107777],{},"0.25",[1763,107779,107780,107781,170],{},"修改重力为 ",[50,107782,107783],{},"0 0 -1.0",[1763,107785,107786],{},"观察小球下降速度是否变慢。",[1763,107788,104635,107789,104638,107792,107795],{},[50,107790,107791],{},"data.qpos[2] = 2.0",[50,107793,107794],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1763,107797,107798,107799,107802],{},"注释掉 ",[50,107800,107801],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107804,104677],{"id":104676},[1217,107806,107808,107809,107811],{"id":107807},"修改-dataqpos-后位置没有更新","修改 ",[50,107810,103297],{}," 后位置没有更新",[19,107813,104686],{},[130,107815,107816],{"className":132,"code":106766,"language":134,"meta":135,"style":135},[50,107817,107818],{"__ignoreMap":135},[139,107819,107820],{"class":141,"line":142},[139,107821,106766],{"class":145},[1217,107823,107824],{"id":107824},"数组维度看不懂",[19,107826,107827],{},"打印模型维度:",[130,107829,107831],{"className":132,"code":107830,"language":134,"meta":135,"style":135},"print(model.nq, model.nv, model.nu)\n",[50,107832,107833],{"__ignoreMap":135},[139,107834,107835,107837],{"class":141,"line":142},[139,107836,213],{"class":153},[139,107838,107839],{"class":145},"(model.nq, model.nv, model.nu)\n",[26,107841,107842,107850],{},[29,107843,107844],{},[32,107845,107846,107848],{},[35,107847,106797],{"align":26003},[35,107849,102927],{"align":26003},[42,107851,107852,107862,107872],{},[32,107853,107854,107859],{},[47,107855,107856],{"align":26003},[50,107857,107858],{},"nq",[47,107860,107861],{"align":26003},"位置变量数量",[32,107863,107864,107869],{},[47,107865,107866],{"align":26003},[50,107867,107868],{},"nv",[47,107870,107871],{"align":26003},"速度变量数量",[32,107873,107874,107878],{},[47,107875,107876],{"align":26003},[50,107877,104386],{},[47,107879,107880],{"align":26003},"控制输入数量",[1217,107882,107884,107885,107887],{"id":107883},"误以为-qpos-一定等于关节数","误以为 ",[50,107886,106253],{}," 一定等于关节数",[19,107889,107890,107891,84758,107893,107895,107896,107898],{},"不是。例如 ",[50,107892,103845],{},[50,107894,106253],{}," 是 7 维，但 ",[50,107897,106583],{}," 是 6 维。",[1217,107900,107902,107903,107905],{"id":107901},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[50,107904,106253],{}," 的第几位",[19,107907,107908],{},"初学时可以先打印：",[130,107910,107912],{"className":132,"code":107911,"language":134,"meta":135,"style":135},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[50,107913,107914,107924,107934,107946],{"__ignoreMap":135},[139,107915,107916,107918,107920,107922],{"class":141,"line":142},[139,107917,213],{"class":153},[139,107919,157],{"class":145},[139,107921,103666],{"class":160},[139,107923,103669],{"class":145},[139,107925,107926,107928,107930,107932],{"class":141,"line":210},[139,107927,213],{"class":153},[139,107929,157],{"class":145},[139,107931,103678],{"class":160},[139,107933,103681],{"class":145},[139,107935,107936,107938,107940,107943],{"class":141,"line":254},[139,107937,213],{"class":153},[139,107939,157],{"class":145},[139,107941,107942],{"class":160},"\"qpos:\"",[139,107944,107945],{"class":145},", data.qpos)\n",[139,107947,107948,107950,107952,107955],{"class":141,"line":262},[139,107949,213],{"class":153},[139,107951,157],{"class":145},[139,107953,107954],{"class":160},"\"qvel:\"",[139,107956,107957],{"class":145},", data.qvel)\n",[19,107959,107960],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1217,107962,107963],{"id":107963},"仿真结果每次都一样",[19,107965,107966,107967,107969],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[50,107968,106253],{},"、目标点或控制输入。",[14,107971,104831],{"id":104830},[19,107973,107974,107975,1122],{},"Python 控制 MuJoCo 的核心就是读写 ",[50,107976,35646],{},[1760,107978,107979,107987,107992,107997],{},[1763,107980,107981,107982,103245,107984,107986],{},"用 ",[50,107983,103297],{},[50,107985,103300],{}," 读取状态。",[1763,107988,107981,107989,107991],{},[50,107990,103303],{}," 写入控制。",[1763,107993,107981,107994,107996],{},[50,107995,103442],{}," 推进时间。",[1763,107998,107999,108000,108002],{},"手动改状态后用 ",[50,108001,106473],{}," 刷新派生量。",[19,108004,108005],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2348,108007,108008],{},"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":135,"searchDepth":210,"depth":210,"links":108010},[108011,108012,108013,108020,108024,108025,108026,108036],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":108014},[108015,108017,108019],{"id":106778,"depth":254,"text":108016},"qpos、qvel、ctrl 是什么",{"id":106856,"depth":254,"text":108018},"mj_step 和 mj_forward 的区别",{"id":106945,"depth":254,"text":106946},{"id":103479,"depth":210,"text":103480,"children":108021},[108022,108023],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":108027},[108028,108030,108031,108033,108035],{"id":107807,"depth":254,"text":108029},"修改 data.qpos 后位置没有更新",{"id":107824,"depth":254,"text":107824},{"id":107883,"depth":254,"text":108032},"误以为 qpos 一定等于关节数",{"id":107901,"depth":254,"text":108034},"不知道某个元素在 qpos 的第几位",{"id":107963,"depth":254,"text":107963},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106541,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108043,"title":108044,"body":108045,"description":135,"extension":2385,"meta":109735,"navigation":842,"path":109736,"seo":109737,"stem":109738,"__hash__":109739},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108046,"toc":109711},[108047,108050,108052,108055,108057,108082,108085,108104,108107,108109,108111,108135,108137,108151,108153,108194,108196,108220,108222,108225,108259,108261,108274,108277,108345,108354,108358,108361,108395,108401,108404,108408,108447,108450,108470,108474,108517,108519,108548,108551,108557,108560,108562,108956,108958,108970,108972,108983,108985,108988,109017,109025,109028,109063,109066,109068,109076,109079,109081,109092,109102,109122,109125,109161,109173,109221,109240,109282,109295,109323,109328,109349,109359,109377,109380,109414,109417,109437,109440,109459,109465,109467,109470,109476,109482,109492,109495,109501,109510,109512,109558,109560,109566,109572,109575,109578,109598,109601,109607,109613,109615,109638,109641,109644,109653,109656,109694,109696,109699,109705,109708],[10,108048,108044],{"id":108049},"_4关节actuator-与力控制",[14,108051,102874],{"id":102873},[19,108053,108054],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108056,106554],{},[1760,108058,108059,108065,108070,108074,108079],{},[1763,108060,108061,108064],{},[50,108062,108063],{},"hinge"," 关节",[1763,108066,108067],{},[50,108068,108069],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1763,108071,108072],{},[50,108073,103303],{},[1763,108075,108076],{},[50,108077,108078],{},"ctrlrange",[1763,108080,108081],{},"读取关节角和角速度",[19,108083,108084],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[130,108086,108088],{"className":132,"code":108087,"language":134,"meta":135,"style":135},"data.ctrl[0] = ...\n",[50,108089,108090],{"__ignoreMap":135},[139,108091,108092,108095,108097,108099,108101],{"class":141,"line":142},[139,108093,108094],{"class":145},"data.ctrl[",[139,108096,2634],{"class":153},[139,108098,6721],{"class":145},[139,108100,150],{"class":149},[139,108102,108103],{"class":153}," ...\n",[19,108105,108106],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108108,102997],{"id":102996},[19,108110,103000],{},[130,108112,108113],{"className":1830,"code":106611,"language":1832,"meta":135,"style":135},[50,108114,108115],{"__ignoreMap":135},[139,108116,108117,108119,108121,108123,108125,108127,108129,108131,108133],{"class":141,"line":142},[139,108118,26840],{"class":781},[139,108120,28575],{"class":160},[139,108122,1841],{"class":160},[139,108124,28660],{"class":153},[139,108126,106626],{"class":160},[139,108128,103025],{"class":160},[139,108130,104725],{"class":160},[139,108132,103041],{"class":160},[139,108134,106635],{"class":160},[19,108136,105043],{},[130,108138,108139],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},[50,108140,108141],{"__ignoreMap":135},[139,108142,108143,108145,108147,108149],{"class":141,"line":142},[139,108144,1826],{"class":781},[139,108146,1841],{"class":160},[139,108148,103157],{"class":160},[139,108150,103160],{"class":160},[19,108152,105060],{},[130,108154,108156],{"className":1830,"code":108155,"language":1832,"meta":135,"style":135},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[50,108157,108158,108175,108184],{"__ignoreMap":135},[139,108159,108160,108162,108164,108166,108169,108171,108173],{"class":141,"line":142},[139,108161,32589],{"class":781},[139,108163,31435],{"class":160},[139,108165,27378],{"class":153},[139,108167,108168],{"class":160}," mujoco-control",[139,108170,103202],{"class":160},[139,108172,103205],{"class":153},[139,108174,103208],{"class":153},[139,108176,108177,108179,108181],{"class":141,"line":210},[139,108178,32589],{"class":781},[139,108180,103215],{"class":160},[139,108182,108183],{"class":160}," mujoco-control\n",[139,108185,108186,108188,108190,108192],{"class":141,"line":254},[139,108187,1826],{"class":781},[139,108189,1841],{"class":160},[139,108191,103157],{"class":160},[139,108193,103160],{"class":160},[19,108195,103231],{},[1760,108197,108198,108204,108211,108217],{},[1763,108199,108200,108203],{},[50,108201,108202],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1763,108205,108206,108208,108209,170],{},[50,108207,103303],{}," 长度等于 ",[50,108210,104382],{},[1763,108212,84450,108213,108216],{},[50,108214,108215],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1763,108218,108219],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108221,103272],{"id":103271},[19,108223,108224],{},"关节决定 body 如何运动:",[130,108226,108228],{"className":55302,"code":108227,"language":55304,"meta":135,"style":135},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[50,108229,108230],{"__ignoreMap":135},[139,108231,108232,108234,108236,108238,108240,108243,108245,108247,108249,108252,108254,108257],{"class":141,"line":142},[139,108233,796],{"class":145},[139,108235,105180],{"class":53538},[139,108237,17189],{"class":781},[139,108239,150],{"class":145},[139,108241,108242],{"class":160},"\"hinge\"",[139,108244,56058],{"class":781},[139,108246,150],{"class":145},[139,108248,108242],{"class":160},[139,108250,108251],{"class":781}," axis",[139,108253,150],{"class":145},[139,108255,108256],{"class":160},"\"0 1 0\"",[139,108258,103371],{"class":145},[19,108260,105276],{},[1760,108262,108263,108268,108271],{},[1763,108264,108265,108266],{},"名字是 ",[50,108267,108063],{},[1763,108269,108270],{},"类型是旋转关节",[1763,108272,108273],{},"绕 y 轴旋转",[19,108275,108276],{},"actuator 决定如何施加控制:",[130,108278,108280],{"className":55302,"code":108279,"language":55304,"meta":135,"style":135},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[50,108281,108282,108291,108337],{"__ignoreMap":135},[139,108283,108284,108286,108289],{"class":141,"line":142},[139,108285,796],{"class":145},[139,108287,108288],{"class":53538},"actuator",[139,108290,53545],{"class":145},[139,108292,108293,108295,108298,108300,108302,108305,108308,108310,108312,108315,108317,108319,108322,108324,108327,108330,108332,108335],{"class":141,"line":210},[139,108294,54380],{"class":145},[139,108296,108297],{"class":53538},"motor",[139,108299,17189],{"class":781},[139,108301,150],{"class":145},[139,108303,108304],{"class":160},"\"hinge_motor\"",[139,108306,108307],{"class":781}," joint",[139,108309,150],{"class":145},[139,108311,108242],{"class":160},[139,108313,108314],{"class":781}," gear",[139,108316,150],{"class":145},[139,108318,5959],{"class":160},[139,108320,108321],{"class":781}," ctrlrange",[139,108323,150],{"class":145},[139,108325,108326],{"class":160},"\"-2 2\"",[139,108328,108329],{"class":781}," ctrllimited",[139,108331,150],{"class":145},[139,108333,108334],{"class":160},"\"true\"",[139,108336,103371],{"class":145},[139,108338,108339,108341,108343],{"class":141,"line":254},[139,108340,54022],{"class":145},[139,108342,108288],{"class":53538},[139,108344,53545],{"class":145},[19,108346,108347,108350,108351,170],{},[50,108348,108349],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[50,108352,108353],{},"[-2, 2]",[1217,108355,108357],{"id":108356},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108359,108360],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[26,108362,108363,108373],{},[29,108364,108365],{},[32,108366,108367,108369,108371],{},[35,108368,28016],{"align":26003},[35,108370,104920],{"align":26003},[35,108372,102961],{"align":26003},[42,108374,108375,108385],{},[32,108376,108377,108379,108382],{},[47,108378,105180],{"align":26003},[47,108380,108381],{"align":26003},"定义能怎么动",[47,108383,108384],{"align":26003},"门轴允许门旋转",[32,108386,108387,108389,108392],{},[47,108388,108288],{"align":26003},[47,108390,108391],{"align":26003},"定义怎么施力或控制",[47,108393,108394],{"align":26003},"人推门、马达带动门",[19,108396,108397,108398,108400],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[50,108399,103303],{}," 主动控制它。",[19,108402,108403],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1217,108405,108407],{"id":108406},"hinge-joint","hinge joint",[130,108409,108411],{"className":55302,"code":108410,"language":55304,"meta":135,"style":135},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[50,108412,108413],{"__ignoreMap":135},[139,108414,108415,108417,108419,108421,108423,108425,108427,108429,108431,108433,108435,108437,108440,108442,108445],{"class":141,"line":142},[139,108416,796],{"class":145},[139,108418,105180],{"class":53538},[139,108420,17189],{"class":781},[139,108422,150],{"class":145},[139,108424,108242],{"class":160},[139,108426,56058],{"class":781},[139,108428,150],{"class":145},[139,108430,108242],{"class":160},[139,108432,108251],{"class":781},[139,108434,150],{"class":145},[139,108436,108256],{"class":160},[139,108438,108439],{"class":781}," damping",[139,108441,150],{"class":145},[139,108443,108444],{"class":160},"\"0.1\"",[139,108446,103371],{"class":145},[19,108448,108449],{},"含义：",[1760,108451,108452,108458,108464],{},[1763,108453,108454,108457],{},[50,108455,108456],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1763,108459,108460,108463],{},[50,108461,108462],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1763,108465,108466,108469],{},[50,108467,108468],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1217,108471,108473],{"id":108472},"motor-actuator","motor actuator",[130,108475,108477],{"className":55302,"code":108476,"language":55304,"meta":135,"style":135},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[50,108478,108479],{"__ignoreMap":135},[139,108480,108481,108483,108485,108487,108489,108491,108493,108495,108497,108499,108501,108503,108505,108507,108509,108511,108513,108515],{"class":141,"line":142},[139,108482,796],{"class":145},[139,108484,108297],{"class":53538},[139,108486,17189],{"class":781},[139,108488,150],{"class":145},[139,108490,108304],{"class":160},[139,108492,108307],{"class":781},[139,108494,150],{"class":145},[139,108496,108242],{"class":160},[139,108498,108314],{"class":781},[139,108500,150],{"class":145},[139,108502,5959],{"class":160},[139,108504,108321],{"class":781},[139,108506,150],{"class":145},[139,108508,108326],{"class":160},[139,108510,108329],{"class":781},[139,108512,150],{"class":145},[139,108514,108334],{"class":160},[139,108516,103371],{"class":145},[19,108518,108449],{},[1760,108520,108521,108530,108536,108542],{},[1763,108522,108523,108526,108527,108529],{},[50,108524,108525],{},"joint=\"hinge\"","：这个电机作用在名为 ",[50,108528,108063],{}," 的关节上。",[1763,108531,108532,108535],{},[50,108533,108534],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1763,108537,108538,108541],{},[50,108539,108540],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1763,108543,108544,108547],{},[50,108545,108546],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108549,108550],{},"简单理解：",[130,108552,108555],{"className":108553,"code":108554,"language":645,"meta":135},[643],"实际施加效果 ≈ data.ctrl[0] * gear\n",[50,108556,108554],{"__ignoreMap":135},[19,108558,108559],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108561,103480],{"id":103479},[130,108563,108565],{"className":132,"code":108564,"language":134,"meta":135,"style":135},"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",[50,108566,108567,108574,108578,108584,108594,108598,108602,108610,108615,108620,108624,108628,108633,108638,108642,108647,108652,108657,108662,108666,108670,108674,108679,108684,108689,108693,108697,108701,108705,108717,108729,108737,108741,108751,108761,108771,108775,108788,108801,108805,108822,108836,108871,108875,108879,108890,108905,108920,108932,108936,108940,108952],{"__ignoreMap":135},[139,108568,108569,108571],{"class":141,"line":142},[139,108570,1064],{"class":149},[139,108572,108573],{"class":145}," math\n",[139,108575,108576],{"class":141,"line":210},[139,108577,843],{"emptyLinePlaceholder":842},[139,108579,108580,108582],{"class":141,"line":254},[139,108581,1064],{"class":149},[139,108583,103528],{"class":145},[139,108585,108586,108588,108590,108592],{"class":141,"line":262},[139,108587,1064],{"class":149},[139,108589,33630],{"class":145},[139,108591,1035],{"class":149},[139,108593,33635],{"class":145},[139,108595,108596],{"class":141,"line":313},[139,108597,843],{"emptyLinePlaceholder":842},[139,108599,108600],{"class":141,"line":462},[139,108601,843],{"emptyLinePlaceholder":842},[139,108603,108604,108606,108608],{"class":141,"line":474},[139,108605,103541],{"class":153},[139,108607,15836],{"class":149},[139,108609,103546],{"class":160},[139,108611,108612],{"class":141,"line":484},[139,108613,108614],{"class":160},"\u003Cmujoco model=\"one_link_motor\">\n",[139,108616,108617],{"class":141,"line":989},[139,108618,108619],{"class":160},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[139,108621,108622],{"class":141,"line":994},[139,108623,843],{"emptyLinePlaceholder":842},[139,108625,108626],{"class":141,"line":999},[139,108627,103565],{"class":160},[139,108629,108630],{"class":141,"line":1006},[139,108631,108632],{"class":160},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[139,108634,108635],{"class":141,"line":1027},[139,108636,108637],{"class":160},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[139,108639,108640],{"class":141,"line":1040},[139,108641,843],{"emptyLinePlaceholder":842},[139,108643,108644],{"class":141,"line":2160},[139,108645,108646],{"class":160},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[139,108648,108649],{"class":141,"line":2188},[139,108650,108651],{"class":160},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[139,108653,108654],{"class":141,"line":3944},[139,108655,108656],{"class":160},"        \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",[139,108658,108659],{"class":141,"line":3963},[139,108660,108661],{"class":160},"      \u003C\u002Fbody>\n",[139,108663,108664],{"class":141,"line":3968},[139,108665,103594],{"class":160},[139,108667,108668],{"class":141,"line":3982},[139,108669,103599],{"class":160},[139,108671,108672],{"class":141,"line":3987},[139,108673,843],{"emptyLinePlaceholder":842},[139,108675,108676],{"class":141,"line":4014},[139,108677,108678],{"class":160},"  \u003Cactuator>\n",[139,108680,108681],{"class":141,"line":4019},[139,108682,108683],{"class":160},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[139,108685,108686],{"class":141,"line":4036},[139,108687,108688],{"class":160},"  \u003C\u002Factuator>\n",[139,108690,108691],{"class":141,"line":4041},[139,108692,103604],{"class":160},[139,108694,108695],{"class":141,"line":4046},[139,108696,97925],{"class":160},[139,108698,108699],{"class":141,"line":4051},[139,108700,843],{"emptyLinePlaceholder":842},[139,108702,108703],{"class":141,"line":4065},[139,108704,843],{"emptyLinePlaceholder":842},[139,108706,108707,108709,108711,108713,108715],{"class":141,"line":4070},[139,108708,778],{"class":149},[139,108710,4259],{"class":781},[139,108712,103625],{"class":145},[139,108714,97913],{"class":153},[139,108716,246],{"class":145},[139,108718,108719,108721,108723,108725,108727],{"class":141,"line":4860},[139,108720,103634],{"class":145},[139,108722,150],{"class":149},[139,108724,103639],{"class":145},[139,108726,103541],{"class":153},[139,108728,164],{"class":145},[139,108730,108731,108733,108735],{"class":141,"line":4874},[139,108732,103648],{"class":145},[139,108734,150],{"class":149},[139,108736,103653],{"class":145},[139,108738,108739],{"class":141,"line":4882},[139,108740,843],{"emptyLinePlaceholder":842},[139,108742,108743,108745,108747,108749],{"class":141,"line":4887},[139,108744,302],{"class":153},[139,108746,157],{"class":145},[139,108748,103666],{"class":160},[139,108750,103669],{"class":145},[139,108752,108753,108755,108757,108759],{"class":141,"line":4893},[139,108754,302],{"class":153},[139,108756,157],{"class":145},[139,108758,103678],{"class":160},[139,108760,103681],{"class":145},[139,108762,108763,108765,108767,108769],{"class":141,"line":4899},[139,108764,302],{"class":153},[139,108766,157],{"class":145},[139,108768,103690],{"class":160},[139,108770,103693],{"class":145},[139,108772,108773],{"class":141,"line":4904},[139,108774,843],{"emptyLinePlaceholder":842},[139,108776,108777,108779,108782,108784,108786],{"class":141,"line":10222},[139,108778,790],{"class":149},[139,108780,108781],{"class":145}," model.nu ",[139,108783,23215],{"class":149},[139,108785,27381],{"class":153},[139,108787,246],{"class":145},[139,108789,108790,108792,108794,108796,108799],{"class":141,"line":10246},[139,108791,806],{"class":149},[139,108793,105658],{"class":153},[139,108795,157],{"class":145},[139,108797,108798],{"class":160},"\"expected exactly one actuator\"",[139,108800,164],{"class":145},[139,108802,108803],{"class":141,"line":10251},[139,108804,843],{"emptyLinePlaceholder":842},[139,108806,108807,108809,108811,108813,108815,108817,108820],{"class":141,"line":10257},[139,108808,5482],{"class":149},[139,108810,33865],{"class":145},[139,108812,1976],{"class":149},[139,108814,34690],{"class":153},[139,108816,157],{"class":145},[139,108818,108819],{"class":153},"2000",[139,108821,558],{"class":145},[139,108823,108824,108827,108829,108831,108833],{"class":141,"line":10284},[139,108825,108826],{"class":145},"        t ",[139,108828,150],{"class":149},[139,108830,33865],{"class":145},[139,108832,2892],{"class":149},[139,108834,108835],{"class":145}," model.opt.timestep\n",[139,108837,108838,108841,108843,108845,108847,108850,108852,108855,108857,108859,108862,108864,108866,108868],{"class":141,"line":10289},[139,108839,108840],{"class":145},"        data.ctrl[",[139,108842,2634],{"class":153},[139,108844,6721],{"class":145},[139,108846,150],{"class":149},[139,108848,108849],{"class":153}," 1.5",[139,108851,8792],{"class":149},[139,108853,108854],{"class":145}," math.sin(",[139,108856,107483],{"class":153},[139,108858,8792],{"class":149},[139,108860,108861],{"class":145}," math.pi ",[139,108863,2892],{"class":149},[139,108865,64100],{"class":153},[139,108867,8792],{"class":149},[139,108869,108870],{"class":145}," t)\n",[139,108872,108873],{"class":141,"line":10295},[139,108874,103743],{"class":145},[139,108876,108877],{"class":141,"line":10307},[139,108878,843],{"emptyLinePlaceholder":842},[139,108880,108881,108883,108885,108888],{"class":141,"line":10319},[139,108882,302],{"class":153},[139,108884,157],{"class":145},[139,108886,108887],{"class":160},"\"time:\"",[139,108889,103705],{"class":145},[139,108891,108892,108894,108896,108899,108901,108903],{"class":141,"line":10331},[139,108893,302],{"class":153},[139,108895,157],{"class":145},[139,108897,108898],{"class":160},"\"joint qpos:\"",[139,108900,107153],{"class":145},[139,108902,1476],{"class":153},[139,108904,207],{"class":145},[139,108906,108907,108909,108911,108914,108916,108918],{"class":141,"line":11990},[139,108908,302],{"class":153},[139,108910,157],{"class":145},[139,108912,108913],{"class":160},"\"joint qvel:\"",[139,108915,107169],{"class":145},[139,108917,1476],{"class":153},[139,108919,207],{"class":145},[139,108921,108922,108924,108926,108929],{"class":141,"line":12015},[139,108923,302],{"class":153},[139,108925,157],{"class":145},[139,108927,108928],{"class":160},"\"last ctrl:\"",[139,108930,108931],{"class":145},", data.ctrl.copy())\n",[139,108933,108934],{"class":141,"line":12038},[139,108935,843],{"emptyLinePlaceholder":842},[139,108937,108938],{"class":141,"line":12062},[139,108939,843],{"emptyLinePlaceholder":842},[139,108941,108942,108944,108946,108948,108950],{"class":141,"line":12067},[139,108943,1729],{"class":149},[139,108945,1732],{"class":153},[139,108947,1735],{"class":149},[139,108949,1738],{"class":160},[139,108951,246],{"class":145},[139,108953,108954],{"class":141,"line":12072},[139,108955,103794],{"class":145},[19,108957,105793],{},[130,108959,108961],{"className":1830,"code":108960,"language":1832,"meta":135,"style":135},"touch ch4_joint_motor.py\n",[50,108962,108963],{"__ignoreMap":135},[139,108964,108965,108967],{"class":141,"line":142},[139,108966,103510],{"class":781},[139,108968,108969],{"class":160}," ch4_joint_motor.py\n",[19,108971,104525],{},[130,108973,108975],{"className":1830,"code":108974,"language":1832,"meta":135,"style":135},"python ch4_joint_motor.py\n",[50,108976,108977],{"__ignoreMap":135},[139,108978,108979,108981],{"class":141,"line":142},[139,108980,134],{"class":781},[139,108982,108969],{"class":160},[1217,108984,103797],{"id":103797},[19,108986,108987],{},"检查 actuator 数量：",[130,108989,108991],{"className":132,"code":108990,"language":134,"meta":135,"style":135},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[50,108992,108993,109005],{"__ignoreMap":135},[139,108994,108995,108997,108999,109001,109003],{"class":141,"line":142},[139,108996,1729],{"class":149},[139,108998,108781],{"class":145},[139,109000,23215],{"class":149},[139,109002,27381],{"class":153},[139,109004,246],{"class":145},[139,109006,109007,109009,109011,109013,109015],{"class":141,"line":210},[139,109008,106118],{"class":149},[139,109010,105658],{"class":153},[139,109012,157],{"class":145},[139,109014,108798],{"class":160},[139,109016,164],{"class":145},[19,109018,109019,109021,109022,109024],{},[50,109020,104382],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[50,109023,103303],{}," 长度应该是 1。",[19,109026,109027],{},"产生正弦控制信号：",[130,109029,109031],{"className":132,"code":109030,"language":134,"meta":135,"style":135},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[50,109032,109033],{"__ignoreMap":135},[139,109034,109035,109037,109039,109041,109043,109045,109047,109049,109051,109053,109055,109057,109059,109061],{"class":141,"line":142},[139,109036,108094],{"class":145},[139,109038,2634],{"class":153},[139,109040,6721],{"class":145},[139,109042,150],{"class":149},[139,109044,108849],{"class":153},[139,109046,8792],{"class":149},[139,109048,108854],{"class":145},[139,109050,107483],{"class":153},[139,109052,8792],{"class":149},[139,109054,108861],{"class":145},[139,109056,2892],{"class":149},[139,109058,64100],{"class":153},[139,109060,8792],{"class":149},[139,109062,108870],{"class":145},[19,109064,109065],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109067,103898],{},[130,109069,109070],{"className":132,"code":106728,"language":134,"meta":135,"style":135},[50,109071,109072],{"__ignoreMap":135},[139,109073,109074],{"class":141,"line":142},[139,109075,106728],{"class":145},[19,109077,109078],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1217,109080,103933],{"id":103933},[130,109082,109084],{"className":132,"code":109083,"language":134,"meta":135,"style":135},"import math\n",[50,109085,109086],{"__ignoreMap":135},[139,109087,109088,109090],{"class":141,"line":142},[139,109089,1064],{"class":149},[139,109091,108573],{"class":145},[19,109093,109094,109095,103245,109098,109101],{},"导入 Python 标准库里的数学模块。后面要用 ",[50,109096,109097],{},"math.sin",[50,109099,109100],{},"math.pi"," 生成周期变化的控制信号。",[130,109103,109104],{"className":132,"code":105909,"language":134,"meta":135,"style":135},[50,109105,109106,109112],{"__ignoreMap":135},[139,109107,109108,109110],{"class":141,"line":142},[139,109109,1064],{"class":149},[139,109111,103528],{"class":145},[139,109113,109114,109116,109118,109120],{"class":141,"line":210},[139,109115,1064],{"class":149},[139,109117,33630],{"class":145},[139,109119,1035],{"class":149},[139,109121,33635],{"class":145},[19,109123,109124],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[130,109126,109127],{"className":55302,"code":108410,"language":55304,"meta":135,"style":135},[50,109128,109129],{"__ignoreMap":135},[139,109130,109131,109133,109135,109137,109139,109141,109143,109145,109147,109149,109151,109153,109155,109157,109159],{"class":141,"line":142},[139,109132,796],{"class":145},[139,109134,105180],{"class":53538},[139,109136,17189],{"class":781},[139,109138,150],{"class":145},[139,109140,108242],{"class":160},[139,109142,56058],{"class":781},[139,109144,150],{"class":145},[139,109146,108242],{"class":160},[139,109148,108251],{"class":781},[139,109150,150],{"class":145},[139,109152,108256],{"class":160},[139,109154,108439],{"class":781},[139,109156,150],{"class":145},[139,109158,108444],{"class":160},[139,109160,103371],{"class":145},[19,109162,109163,109164,109166,109167,109169,109170,109172],{},"这行定义关节。",[50,109165,108063],{}," 表示旋转关节。",[50,109168,108462],{}," 表示绕 y 轴旋转。",[50,109171,108468],{}," 表示有一点阻尼，运动不会完全无损耗。",[130,109174,109176],{"className":55302,"code":109175,"language":55304,"meta":135,"style":135},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[50,109177,109178],{"__ignoreMap":135},[139,109179,109180,109182,109184,109186,109188,109191,109193,109195,109198,109201,109203,109206,109208,109210,109212,109214,109216,109219],{"class":141,"line":142},[139,109181,796],{"class":145},[139,109183,103347],{"class":53538},[139,109185,17189],{"class":781},[139,109187,150],{"class":145},[139,109189,109190],{"class":160},"\"link_geom\"",[139,109192,56058],{"class":781},[139,109194,150],{"class":145},[139,109196,109197],{"class":160},"\"capsule\"",[139,109199,109200],{"class":781}," fromto",[139,109202,150],{"class":145},[139,109204,109205],{"class":160},"\"0 0 0 0 0 0.5\"",[139,109207,103363],{"class":781},[139,109209,150],{"class":145},[139,109211,106001],{"class":160},[139,109213,104226],{"class":781},[139,109215,150],{"class":145},[139,109217,109218],{"class":160},"\"0.5\"",[139,109220,103371],{"class":145},[19,109222,109223,109224,109226,109227,109229,109230,109233,109234,170,109237,109239],{},"这行定义摆杆的形状。",[50,109225,105389],{}," 是胶囊体，适合表示杆子。",[50,109228,105400],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[50,109231,109232],{},"(0,0,0)"," 延伸到 ",[50,109235,109236],{},"(0,0,0.5)",[50,109238,105394],{}," 是半径。",[130,109241,109242],{"className":55302,"code":108476,"language":55304,"meta":135,"style":135},[50,109243,109244],{"__ignoreMap":135},[139,109245,109246,109248,109250,109252,109254,109256,109258,109260,109262,109264,109266,109268,109270,109272,109274,109276,109278,109280],{"class":141,"line":142},[139,109247,796],{"class":145},[139,109249,108297],{"class":53538},[139,109251,17189],{"class":781},[139,109253,150],{"class":145},[139,109255,108304],{"class":160},[139,109257,108307],{"class":781},[139,109259,150],{"class":145},[139,109261,108242],{"class":160},[139,109263,108314],{"class":781},[139,109265,150],{"class":145},[139,109267,5959],{"class":160},[139,109269,108321],{"class":781},[139,109271,150],{"class":145},[139,109273,108326],{"class":160},[139,109275,108329],{"class":781},[139,109277,150],{"class":145},[139,109279,108334],{"class":160},[139,109281,103371],{"class":145},[19,109283,109284,109285,109287,109288,109291,109292,109294],{},"这行定义电机。它作用在 ",[50,109286,108063],{}," 关节上。",[50,109289,109290],{},"gear"," 可以理解成放大倍数。",[50,109293,108078],{}," 限制控制输入范围。",[130,109296,109297],{"className":132,"code":108990,"language":134,"meta":135,"style":135},[50,109298,109299,109311],{"__ignoreMap":135},[139,109300,109301,109303,109305,109307,109309],{"class":141,"line":142},[139,109302,1729],{"class":149},[139,109304,108781],{"class":145},[139,109306,23215],{"class":149},[139,109308,27381],{"class":153},[139,109310,246],{"class":145},[139,109312,109313,109315,109317,109319,109321],{"class":141,"line":210},[139,109314,106118],{"class":149},[139,109316,105658],{"class":153},[139,109318,157],{"class":145},[139,109320,108798],{"class":160},[139,109322,164],{"class":145},[19,109324,109325,109327],{},[50,109326,104382],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[130,109329,109331],{"className":132,"code":109330,"language":134,"meta":135,"style":135},"for step in range(2000):\n",[50,109332,109333],{"__ignoreMap":135},[139,109334,109335,109337,109339,109341,109343,109345,109347],{"class":141,"line":142},[139,109336,1970],{"class":149},[139,109338,33865],{"class":145},[139,109340,1976],{"class":149},[139,109342,34690],{"class":153},[139,109344,157],{"class":145},[139,109346,108819],{"class":153},[139,109348,558],{"class":145},[19,109350,109351,109352,109354,109355,109358],{},"循环 2000 步。这里没有用 ",[50,109353,3422],{},"，而是用 ",[50,109356,109357],{},"step","，因为后面要用当前步数计算时间。",[130,109360,109362],{"className":132,"code":109361,"language":134,"meta":135,"style":135},"t = step * model.opt.timestep\n",[50,109363,109364],{"__ignoreMap":135},[139,109365,109366,109369,109371,109373,109375],{"class":141,"line":142},[139,109367,109368],{"class":145},"t ",[139,109370,150],{"class":149},[139,109372,33865],{"class":145},[139,109374,2892],{"class":149},[139,109376,108835],{"class":145},[19,109378,109379],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[130,109381,109382],{"className":132,"code":109030,"language":134,"meta":135,"style":135},[50,109383,109384],{"__ignoreMap":135},[139,109385,109386,109388,109390,109392,109394,109396,109398,109400,109402,109404,109406,109408,109410,109412],{"class":141,"line":142},[139,109387,108094],{"class":145},[139,109389,2634],{"class":153},[139,109391,6721],{"class":145},[139,109393,150],{"class":149},[139,109395,108849],{"class":153},[139,109397,8792],{"class":149},[139,109399,108854],{"class":145},[139,109401,107483],{"class":153},[139,109403,8792],{"class":149},[139,109405,108861],{"class":145},[139,109407,2892],{"class":149},[139,109409,64100],{"class":153},[139,109411,8792],{"class":149},[139,109413,108870],{"class":145},[19,109415,109416],{},"这行给电机输入一个正弦波。拆开看：",[1760,109418,109419,109425,109431],{},[1763,109420,109421,109424],{},[50,109422,109423],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1763,109426,109427,109430],{},[50,109428,109429],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1763,109432,109433,109436],{},[50,109434,109435],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109438,109439],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[130,109441,109443],{"className":132,"code":109442,"language":134,"meta":135,"style":135},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[50,109444,109445],{"__ignoreMap":135},[139,109446,109447,109449,109451,109453,109455,109457],{"class":141,"line":142},[139,109448,213],{"class":153},[139,109450,157],{"class":145},[139,109452,108898],{"class":160},[139,109454,107153],{"class":145},[139,109456,1476],{"class":153},[139,109458,207],{"class":145},[19,109460,109461,109462,109464],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[50,109463,103297],{}," 只有一个数。",[14,109466,104540],{"id":104539},[19,109468,109469],{},"输出类似:",[130,109471,109474],{"className":109472,"code":109473,"language":645,"meta":135},[643],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[50,109475,109473],{"__ignoreMap":135},[19,109477,109478,109479,109481],{},"这里 ",[50,109480,108349],{}," 是电机输入。",[19,109483,109484,109487,109488,109491],{},[50,109485,109486],{},"joint qpos"," 是关节角度，单位通常是弧度。",[50,109489,109490],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109493,109494],{},"角度单位提示：",[130,109496,109499],{"className":109497,"code":109498,"language":645,"meta":135},[643],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[50,109500,109498],{"__ignoreMap":135},[19,109502,109503,109504,109506,109507,109509],{},"如果你看到 ",[50,109505,106253],{}," 是 ",[50,109508,37572],{},"，大约就是 28.6 度。",[14,109511,104572],{"id":104571},[1760,109513,109514,109521,109524,109531,109534,109542,109550],{},[1763,109515,104635,109516,104638,109518,170],{},[50,109517,108534],{},[50,109519,109520],{},"gear=\"5\"",[1763,109522,109523],{},"重新运行，观察关节运动是否更剧烈。",[1763,109525,104635,109526,104638,109528,170],{},[50,109527,108078],{},[50,109529,109530],{},"-0.2 0.2",[1763,109532,109533],{},"重新运行，观察控制能力是否变弱。",[1763,109535,109536,109537,109539,109540,170],{},"去掉 actuator，确认 ",[50,109538,104382],{}," 变成 ",[50,109541,2634],{},[1763,109543,104635,109544,104638,109546,109549],{},[50,109545,108468],{},[50,109547,109548],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1763,109551,104635,109552,104638,109554,109557],{},[50,109553,108462],{},[50,109555,109556],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109559,104677],{"id":104676},[1217,109561,109563],{"id":109562},"indexerror-index-0-is-out-of-bounds",[50,109564,109565],{},"IndexError: index 0 is out of bounds",[19,109567,109568,109569,109571],{},"原因是 ",[50,109570,108215],{},"，没有 actuator。",[1217,109573,109574],{"id":109574},"关节几乎不动",[19,109576,109577],{},"可能原因:",[1760,109579,109580,109585,109589,109595],{},[1763,109581,109582,109584],{},[50,109583,109290],{}," 太小",[1763,109586,109587,109584],{},[50,109588,108078],{},[1763,109590,109591,109594],{},[50,109592,109593],{},"damping"," 太大",[1763,109596,109597],{},"重力方向导致运动不明显",[1217,109599,109600],{"id":109600},"模型编译失败",[19,109602,109603,109604,109606],{},"检查 actuator 引用的 ",[50,109605,108525],{}," 是否存在，joint 名称是否拼写一致。",[1217,109608,109610,109612],{"id":109609},"datactrl0-写了但没有效果",[50,109611,108349],{}," 写了但没有效果",[19,109614,104799],{},[1760,109616,109617,109622,109625,109630,109635],{},[1763,109618,109619,109621],{},[50,109620,104382],{}," 是否大于 0。",[1763,109623,109624],{},"motor 是否引用了正确 joint。",[1763,109626,109627,109629],{},[50,109628,109290],{}," 是否太小。",[1763,109631,109632,109634],{},[50,109633,108078],{}," 是否把输入限制得太小。",[1763,109636,109637],{},"body 是否真的有可动 joint。",[1217,109639,109640],{"id":109640},"控制输入超过范围会怎样",[19,109642,109643],{},"如果设置了：",[130,109645,109647],{"className":55302,"code":109646,"language":55304,"meta":135,"style":135},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[50,109648,109649],{"__ignoreMap":135},[139,109650,109651],{"class":141,"line":142},[139,109652,109646],{"class":145},[19,109654,109655],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[130,109657,109659],{"className":132,"code":109658,"language":134,"meta":135,"style":135},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[50,109660,109661,109681],{"__ignoreMap":135},[139,109662,109663,109666,109668,109671,109673,109675,109677,109679],{"class":141,"line":142},[139,109664,109665],{"class":145},"action ",[139,109667,150],{"class":149},[139,109669,109670],{"class":145}," np.clip(action, ",[139,109672,855],{"class":149},[139,109674,107483],{"class":153},[139,109676,413],{"class":145},[139,109678,107483],{"class":153},[139,109680,164],{"class":145},[139,109682,109683,109685,109687,109689,109691],{"class":141,"line":210},[139,109684,108094],{"class":145},[139,109686,2634],{"class":153},[139,109688,6721],{"class":145},[139,109690,150],{"class":149},[139,109692,109693],{"class":145}," action\n",[14,109695,104831],{"id":104830},[19,109697,109698],{},"这一章建立了控制任务的基本形式：",[130,109700,109703],{"className":109701,"code":109702,"language":645,"meta":135},[643],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[50,109704,109702],{"__ignoreMap":135},[19,109706,109707],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2348,109709,109710],{},"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":135,"searchDepth":210,"depth":210,"links":109712},[109713,109714,109715,109720,109724,109725,109726,109734],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":109716},[109717,109718,109719],{"id":108356,"depth":254,"text":108357},{"id":108406,"depth":254,"text":108407},{"id":108472,"depth":254,"text":108473},{"id":103479,"depth":210,"text":103480,"children":109721},[109722,109723],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":109727},[109728,109729,109730,109731,109733],{"id":109562,"depth":254,"text":109565},{"id":109574,"depth":254,"text":109574},{"id":109600,"depth":254,"text":109600},{"id":109609,"depth":254,"text":109732},"data.ctrl[0] 写了但没有效果",{"id":109640,"depth":254,"text":109640},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108044,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109741,"title":109742,"body":109743,"description":135,"extension":2385,"meta":111650,"navigation":842,"path":111651,"seo":111652,"stem":111653,"__hash__":111654},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109744,"toc":111626},[109745,109748,109750,109753,109761,109764,109781,109784,109809,109812,109858,109860,109862,109917,109919,109938,109940,109983,109986,110003,110006,110022,110032,110039,110041,110044,110047,110081,110084,110132,110136,110139,110153,110162,110166,110169,110194,110197,110201,110214,110217,110223,110226,110241,110243,110246,110506,110508,110520,110523,110833,110835,110847,110849,110852,110867,110872,110875,110897,110900,110903,110937,110940,110944,110955,110958,110975,110978,110992,110999,111019,111026,111040,111043,111055,111070,111090,111093,111115,111118,111122,111137,111148,111163,111166,111196,111212,111241,111249,111273,111276,111294,111304,111316,111323,111332,111338,111347,111350,111352,111361,111364,111379,111381,111384,111395,111398,111409,111412,111430,111432,111449,111452,111480,111482,111486,111489,111519,111525,111528,111532,111540,111543,111545,111566,111569,111572,111588,111591,111607,111609,111612,111623],[10,109746,109742],{"id":109747},"_5viewer-可视化与-renderer-离屏渲染",[14,109749,102874],{"id":102873},[19,109751,109752],{},"本章掌握两类可视化方式:",[1760,109754,109755,109758],{},[1763,109756,109757],{},"交互式 viewer: 适合人工观察仿真",[1763,109759,109760],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109762,109763],{},"使用官方接口:",[130,109765,109767],{"className":132,"code":109766,"language":134,"meta":135,"style":135},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[50,109768,109769,109776],{"__ignoreMap":135},[139,109770,109771,109773],{"class":141,"line":142},[139,109772,1064],{"class":149},[139,109774,109775],{"class":145}," mujoco.viewer\n",[139,109777,109778],{"class":141,"line":210},[139,109779,109780],{"class":145},"mujoco.viewer.launch_passive(model, data)\n",[19,109782,109783],{},"以及:",[130,109785,109787],{"className":132,"code":109786,"language":134,"meta":135,"style":135},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[50,109788,109789,109799],{"__ignoreMap":135},[139,109790,109791,109794,109796],{"class":141,"line":142},[139,109792,109793],{"class":145},"renderer ",[139,109795,150],{"class":149},[139,109797,109798],{"class":145}," mujoco.Renderer(model)\n",[139,109800,109801,109804,109806],{"class":141,"line":210},[139,109802,109803],{"class":145},"image ",[139,109805,150],{"class":149},[139,109807,109808],{"class":145}," renderer.render()\n",[19,109810,109811],{},"新手建议先理解二者区别：",[26,109813,109814,109830],{},[29,109815,109816],{},[32,109817,109818,109821,109824,109827],{},[35,109819,109820],{"align":26003},"工具",[35,109822,109823],{"align":26003},"用途",[35,109825,109826],{"align":26003},"是否打开窗口",[35,109828,109829],{"align":26003},"常见场景",[42,109831,109832,109845],{},[32,109833,109834,109837,109840,109842],{},[47,109835,109836],{"align":26003},"Viewer",[47,109838,109839],{"align":26003},"人眼实时观察仿真",[47,109841,106888],{"align":26003},[47,109843,109844],{"align":26003},"调试模型、看控制效果",[32,109846,109847,109850,109853,109855],{},[47,109848,109849],{"align":26003},"Renderer",[47,109851,109852],{"align":26003},"生成图像数组",[47,109854,106901],{"align":26003},[47,109856,109857],{"align":26003},"保存图片、训练视觉策略、服务器批量采集",[14,109859,102997],{"id":102996},[19,109861,103000],{},[130,109863,109865],{"className":1830,"code":109864,"language":1832,"meta":135,"style":135},"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",[50,109866,109867,109879,109889,109897,109905],{"__ignoreMap":135},[139,109868,109869,109871,109873,109875,109877],{"class":141,"line":142},[139,109870,26840],{"class":781},[139,109872,28575],{"class":160},[139,109874,1841],{"class":160},[139,109876,28660],{"class":153},[139,109878,26941],{"class":153},[139,109880,109881,109883,109885,109887],{"class":141,"line":210},[139,109882,103035],{"class":160},[139,109884,103038],{"class":160},[139,109886,103041],{"class":160},[139,109888,26941],{"class":153},[139,109890,109891,109893,109895],{"class":141,"line":254},[139,109892,103048],{"class":160},[139,109894,103051],{"class":160},[139,109896,26941],{"class":153},[139,109898,109899,109901,109903],{"class":141,"line":262},[139,109900,103058],{"class":160},[139,109902,103061],{"class":160},[139,109904,26941],{"class":153},[139,109906,109907,109909,109911,109913,109915],{"class":141,"line":313},[139,109908,103068],{"class":160},[139,109910,103071],{"class":160},[139,109912,103074],{"class":160},[139,109914,103077],{"class":160},[139,109916,104740],{"class":160},[19,109918,105043],{},[130,109920,109922],{"className":1830,"code":109921,"language":1832,"meta":135,"style":135},"pip install \"mujoco>=2.3\" numpy pillow\n",[50,109923,109924],{"__ignoreMap":135},[139,109925,109926,109928,109930,109932,109935],{"class":141,"line":142},[139,109927,1826],{"class":781},[139,109929,1841],{"class":160},[139,109931,103157],{"class":160},[139,109933,109934],{"class":160}," numpy",[139,109936,109937],{"class":160}," pillow\n",[19,109939,105060],{},[130,109941,109943],{"className":1830,"code":109942,"language":1832,"meta":135,"style":135},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[50,109944,109945,109962,109971],{"__ignoreMap":135},[139,109946,109947,109949,109951,109953,109956,109958,109960],{"class":141,"line":142},[139,109948,32589],{"class":781},[139,109950,31435],{"class":160},[139,109952,27378],{"class":153},[139,109954,109955],{"class":160}," mujoco-render",[139,109957,103202],{"class":160},[139,109959,103205],{"class":153},[139,109961,103208],{"class":153},[139,109963,109964,109966,109968],{"class":141,"line":210},[139,109965,32589],{"class":781},[139,109967,103215],{"class":160},[139,109969,109970],{"class":160}," mujoco-render\n",[139,109972,109973,109975,109977,109979,109981],{"class":141,"line":254},[139,109974,1826],{"class":781},[139,109976,1841],{"class":160},[139,109978,103157],{"class":160},[139,109980,109934],{"class":160},[139,109982,109937],{"class":160},[19,109984,109985],{},"离屏渲染后端:",[130,109987,109989],{"className":1830,"code":109988,"language":1832,"meta":135,"style":135},"export MUJOCO_GL=egl\n",[50,109990,109991],{"__ignoreMap":135},[139,109992,109993,109995,109998,110000],{"class":141,"line":142},[139,109994,27305],{"class":149},[139,109996,109997],{"class":145}," MUJOCO_GL",[139,109999,150],{"class":149},[139,110001,110002],{"class":145},"egl\n",[19,110004,110005],{},"或:",[130,110007,110009],{"className":1830,"code":110008,"language":1832,"meta":135,"style":135},"export MUJOCO_GL=osmesa\n",[50,110010,110011],{"__ignoreMap":135},[139,110012,110013,110015,110017,110019],{"class":141,"line":142},[139,110014,27305],{"class":149},[139,110016,109997],{"class":145},[139,110018,150],{"class":149},[139,110020,110021],{"class":145},"osmesa\n",[19,110023,110024,110025,110028,110029,170],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[50,110026,110027],{},"egl"," 失败，再尝试 ",[50,110030,110031],{},"osmesa",[19,110033,110034,110035,110038],{},"如果你在本机桌面环境运行，通常先不要设置 ",[50,110036,110037],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110040,103272],{"id":103271},[19,110042,110043],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110045,110046],{},"典型 viewer 流程:",[130,110048,110050],{"className":132,"code":110049,"language":134,"meta":135,"style":135},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[50,110051,110052,110065,110072,110076],{"__ignoreMap":135},[139,110053,110054,110057,110060,110062],{"class":141,"line":142},[139,110055,110056],{"class":149},"with",[139,110058,110059],{"class":145}," mujoco.viewer.launch_passive(model, data) ",[139,110061,1035],{"class":149},[139,110063,110064],{"class":145}," viewer:\n",[139,110066,110067,110069],{"class":141,"line":210},[139,110068,4536],{"class":149},[139,110070,110071],{"class":145}," viewer.is_running():\n",[139,110073,110074],{"class":141,"line":254},[139,110075,103743],{"class":145},[139,110077,110078],{"class":141,"line":262},[139,110079,110080],{"class":145},"        viewer.sync()\n",[19,110082,110083],{},"典型 renderer 流程:",[130,110085,110087],{"className":132,"code":110086,"language":134,"meta":135,"style":135},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[50,110088,110089,110115,110119,110124],{"__ignoreMap":135},[139,110090,110091,110093,110095,110098,110100,110102,110104,110106,110108,110110,110113],{"class":141,"line":142},[139,110092,109793],{"class":145},[139,110094,150],{"class":149},[139,110096,110097],{"class":145}," mujoco.Renderer(model, ",[139,110099,27244],{"class":2111},[139,110101,150],{"class":149},[139,110103,44584],{"class":153},[139,110105,413],{"class":145},[139,110107,27240],{"class":2111},[139,110109,150],{"class":149},[139,110111,110112],{"class":153},"640",[139,110114,164],{"class":145},[139,110116,110117],{"class":141,"line":210},[139,110118,106728],{"class":145},[139,110120,110121],{"class":141,"line":254},[139,110122,110123],{"class":145},"renderer.update_scene(data)\n",[139,110125,110126,110128,110130],{"class":141,"line":262},[139,110127,109803],{"class":145},[139,110129,150],{"class":149},[139,110131,109808],{"class":145},[1217,110133,110135],{"id":110134},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110137,110138],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[130,110140,110142],{"className":132,"code":110141,"language":134,"meta":135,"style":135},"mujoco.mj_step(model, data)\nviewer.sync()\n",[50,110143,110144,110148],{"__ignoreMap":135},[139,110145,110146],{"class":141,"line":142},[139,110147,106728],{"class":145},[139,110149,110150],{"class":141,"line":210},[139,110151,110152],{"class":145},"viewer.sync()\n",[19,110154,110155,110157,110158,110161],{},[50,110156,103442],{}," 负责算物理，",[50,110159,110160],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1217,110163,110165],{"id":110164},"为什么要-sleep","为什么要 sleep",[19,110167,110168],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[130,110170,110172],{"className":132,"code":110171,"language":134,"meta":135,"style":135},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[50,110173,110174],{"__ignoreMap":135},[139,110175,110176,110179,110181,110184,110186,110189,110191],{"class":141,"line":142},[139,110177,110178],{"class":145},"sleep_time ",[139,110180,150],{"class":149},[139,110182,110183],{"class":145}," model.opt.timestep ",[139,110185,855],{"class":149},[139,110187,110188],{"class":145}," (time.time() ",[139,110190,855],{"class":149},[139,110192,110193],{"class":145}," step_start)\n",[19,110195,110196],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1217,110198,110200],{"id":110199},"renderer-输出是什么","renderer 输出是什么",[130,110202,110204],{"className":132,"code":110203,"language":134,"meta":135,"style":135},"image = renderer.render()\n",[50,110205,110206],{"__ignoreMap":135},[139,110207,110208,110210,110212],{"class":141,"line":142},[139,110209,109803],{"class":145},[139,110211,150],{"class":149},[139,110213,109808],{"class":145},[19,110215,110216],{},"得到的是 NumPy 数组，形状通常是：",[130,110218,110221],{"className":110219,"code":110220,"language":645,"meta":135},[643],"(height, width, 3)\n",[50,110222,110220],{"__ignoreMap":135},[19,110224,110225],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[130,110227,110229],{"className":132,"code":110228,"language":134,"meta":135,"style":135},"Image.fromarray(image).save(\"render_output.png\")\n",[50,110230,110231],{"__ignoreMap":135},[139,110232,110233,110236,110239],{"class":141,"line":142},[139,110234,110235],{"class":145},"Image.fromarray(image).save(",[139,110237,110238],{"class":160},"\"render_output.png\"",[139,110240,164],{"class":145},[14,110242,103480],{"id":103479},[19,110244,110245],{},"交互式 Viewer:",[130,110247,110249],{"className":132,"code":110248,"language":134,"meta":135,"style":135},"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",[50,110250,110251,110257,110261,110267,110273,110277,110281,110289,110294,110298,110302,110306,110311,110316,110320,110324,110328,110333,110337,110341,110345,110349,110353,110357,110369,110381,110389,110393,110403,110423,110433,110438,110443,110447,110464,110477,110482,110486,110490,110502],{"__ignoreMap":135},[139,110252,110253,110255],{"class":141,"line":142},[139,110254,1064],{"class":149},[139,110256,1504],{"class":145},[139,110258,110259],{"class":141,"line":210},[139,110260,843],{"emptyLinePlaceholder":842},[139,110262,110263,110265],{"class":141,"line":254},[139,110264,1064],{"class":149},[139,110266,103528],{"class":145},[139,110268,110269,110271],{"class":141,"line":262},[139,110270,1064],{"class":149},[139,110272,109775],{"class":145},[139,110274,110275],{"class":141,"line":313},[139,110276,843],{"emptyLinePlaceholder":842},[139,110278,110279],{"class":141,"line":462},[139,110280,843],{"emptyLinePlaceholder":842},[139,110282,110283,110285,110287],{"class":141,"line":474},[139,110284,103541],{"class":153},[139,110286,15836],{"class":149},[139,110288,103546],{"class":160},[139,110290,110291],{"class":141,"line":484},[139,110292,110293],{"class":160},"\u003Cmujoco model=\"viewer_demo\">\n",[139,110295,110296],{"class":141,"line":989},[139,110297,103556],{"class":160},[139,110299,110300],{"class":141,"line":994},[139,110301,843],{"emptyLinePlaceholder":842},[139,110303,110304],{"class":141,"line":999},[139,110305,103565],{"class":160},[139,110307,110308],{"class":141,"line":1006},[139,110309,110310],{"class":160},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[139,110312,110313],{"class":141,"line":1027},[139,110314,110315],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[139,110317,110318],{"class":141,"line":1040},[139,110319,843],{"emptyLinePlaceholder":842},[139,110321,110322],{"class":141,"line":2160},[139,110323,103579],{"class":160},[139,110325,110326],{"class":141,"line":2188},[139,110327,103584],{"class":160},[139,110329,110330],{"class":141,"line":3944},[139,110331,110332],{"class":160},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[139,110334,110335],{"class":141,"line":3963},[139,110336,103594],{"class":160},[139,110338,110339],{"class":141,"line":3968},[139,110340,103599],{"class":160},[139,110342,110343],{"class":141,"line":3982},[139,110344,103604],{"class":160},[139,110346,110347],{"class":141,"line":3987},[139,110348,97925],{"class":160},[139,110350,110351],{"class":141,"line":4014},[139,110352,843],{"emptyLinePlaceholder":842},[139,110354,110355],{"class":141,"line":4019},[139,110356,843],{"emptyLinePlaceholder":842},[139,110358,110359,110361,110363,110365,110367],{"class":141,"line":4036},[139,110360,778],{"class":149},[139,110362,4259],{"class":781},[139,110364,103625],{"class":145},[139,110366,97913],{"class":153},[139,110368,246],{"class":145},[139,110370,110371,110373,110375,110377,110379],{"class":141,"line":4041},[139,110372,103634],{"class":145},[139,110374,150],{"class":149},[139,110376,103639],{"class":145},[139,110378,103541],{"class":153},[139,110380,164],{"class":145},[139,110382,110383,110385,110387],{"class":141,"line":4046},[139,110384,103648],{"class":145},[139,110386,150],{"class":149},[139,110388,103653],{"class":145},[139,110390,110391],{"class":141,"line":4051},[139,110392,843],{"emptyLinePlaceholder":842},[139,110394,110395,110397,110399,110401],{"class":141,"line":4065},[139,110396,2097],{"class":149},[139,110398,110059],{"class":145},[139,110400,1035],{"class":149},[139,110402,110064],{"class":145},[139,110404,110405,110408,110411,110413,110416,110418,110421],{"class":141,"line":4070},[139,110406,110407],{"class":149},"        while",[139,110409,110410],{"class":145}," viewer.is_running() ",[139,110412,32717],{"class":149},[139,110414,110415],{"class":145}," data.time ",[139,110417,796],{"class":149},[139,110419,110420],{"class":153}," 5.0",[139,110422,246],{"class":145},[139,110424,110425,110428,110430],{"class":141,"line":4860},[139,110426,110427],{"class":145},"            step_start ",[139,110429,150],{"class":149},[139,110431,110432],{"class":145}," time.time()\n",[139,110434,110435],{"class":141,"line":4874},[139,110436,110437],{"class":145},"            mujoco.mj_step(model, data)\n",[139,110439,110440],{"class":141,"line":4882},[139,110441,110442],{"class":145},"            viewer.sync()\n",[139,110444,110445],{"class":141,"line":4887},[139,110446,843],{"emptyLinePlaceholder":842},[139,110448,110449,110452,110454,110456,110458,110460,110462],{"class":141,"line":4893},[139,110450,110451],{"class":145},"            sleep_time ",[139,110453,150],{"class":149},[139,110455,110183],{"class":145},[139,110457,855],{"class":149},[139,110459,110188],{"class":145},[139,110461,855],{"class":149},[139,110463,110193],{"class":145},[139,110465,110466,110468,110471,110473,110475],{"class":141,"line":4899},[139,110467,6920],{"class":149},[139,110469,110470],{"class":145}," sleep_time ",[139,110472,958],{"class":149},[139,110474,799],{"class":153},[139,110476,246],{"class":145},[139,110478,110479],{"class":141,"line":4904},[139,110480,110481],{"class":145},"                time.sleep(sleep_time)\n",[139,110483,110484],{"class":141,"line":10222},[139,110485,843],{"emptyLinePlaceholder":842},[139,110487,110488],{"class":141,"line":10246},[139,110489,843],{"emptyLinePlaceholder":842},[139,110491,110492,110494,110496,110498,110500],{"class":141,"line":10251},[139,110493,1729],{"class":149},[139,110495,1732],{"class":153},[139,110497,1735],{"class":149},[139,110499,1738],{"class":160},[139,110501,246],{"class":145},[139,110503,110504],{"class":141,"line":10257},[139,110505,103794],{"class":145},[19,110507,105793],{},[130,110509,110511],{"className":1830,"code":110510,"language":1832,"meta":135,"style":135},"touch ch5_viewer.py\n",[50,110512,110513],{"__ignoreMap":135},[139,110514,110515,110517],{"class":141,"line":142},[139,110516,103510],{"class":781},[139,110518,110519],{"class":160}," ch5_viewer.py\n",[19,110521,110522],{},"离屏 Renderer 保存图片:",[130,110524,110526],{"className":132,"code":110525,"language":134,"meta":135,"style":135},"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",[50,110527,110528,110538,110542,110548,110558,110562,110566,110574,110579,110583,110587,110591,110595,110600,110604,110608,110612,110616,110620,110624,110628,110632,110636,110640,110644,110656,110668,110676,110701,110705,110721,110725,110729,110744,110753,110757,110771,110776,110781,110785,110797,110809,110813,110817,110829],{"__ignoreMap":135},[139,110529,110530,110532,110534,110536],{"class":141,"line":142},[139,110531,1265],{"class":149},[139,110533,2037],{"class":145},[139,110535,1064],{"class":149},[139,110537,2042],{"class":145},[139,110539,110540],{"class":141,"line":210},[139,110541,843],{"emptyLinePlaceholder":842},[139,110543,110544,110546],{"class":141,"line":254},[139,110545,1064],{"class":149},[139,110547,103528],{"class":145},[139,110549,110550,110552,110554,110556],{"class":141,"line":262},[139,110551,1265],{"class":149},[139,110553,49501],{"class":153},[139,110555,49504],{"class":149},[139,110557,49507],{"class":145},[139,110559,110560],{"class":141,"line":313},[139,110561,843],{"emptyLinePlaceholder":842},[139,110563,110564],{"class":141,"line":462},[139,110565,843],{"emptyLinePlaceholder":842},[139,110567,110568,110570,110572],{"class":141,"line":474},[139,110569,103541],{"class":153},[139,110571,15836],{"class":149},[139,110573,103546],{"class":160},[139,110575,110576],{"class":141,"line":484},[139,110577,110578],{"class":160},"\u003Cmujoco model=\"renderer_demo\">\n",[139,110580,110581],{"class":141,"line":989},[139,110582,103556],{"class":160},[139,110584,110585],{"class":141,"line":994},[139,110586,843],{"emptyLinePlaceholder":842},[139,110588,110589],{"class":141,"line":999},[139,110590,103565],{"class":160},[139,110592,110593],{"class":141,"line":1006},[139,110594,110310],{"class":160},[139,110596,110597],{"class":141,"line":1027},[139,110598,110599],{"class":160},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[139,110601,110602],{"class":141,"line":1040},[139,110603,110315],{"class":160},[139,110605,110606],{"class":141,"line":2160},[139,110607,843],{"emptyLinePlaceholder":842},[139,110609,110610],{"class":141,"line":2188},[139,110611,103579],{"class":160},[139,110613,110614],{"class":141,"line":3944},[139,110615,103584],{"class":160},[139,110617,110618],{"class":141,"line":3963},[139,110619,110332],{"class":160},[139,110621,110622],{"class":141,"line":3968},[139,110623,103594],{"class":160},[139,110625,110626],{"class":141,"line":3982},[139,110627,103599],{"class":160},[139,110629,110630],{"class":141,"line":3987},[139,110631,103604],{"class":160},[139,110633,110634],{"class":141,"line":4014},[139,110635,97925],{"class":160},[139,110637,110638],{"class":141,"line":4019},[139,110639,843],{"emptyLinePlaceholder":842},[139,110641,110642],{"class":141,"line":4036},[139,110643,843],{"emptyLinePlaceholder":842},[139,110645,110646,110648,110650,110652,110654],{"class":141,"line":4041},[139,110647,778],{"class":149},[139,110649,4259],{"class":781},[139,110651,103625],{"class":145},[139,110653,97913],{"class":153},[139,110655,246],{"class":145},[139,110657,110658,110660,110662,110664,110666],{"class":141,"line":4046},[139,110659,103634],{"class":145},[139,110661,150],{"class":149},[139,110663,103639],{"class":145},[139,110665,103541],{"class":153},[139,110667,164],{"class":145},[139,110669,110670,110672,110674],{"class":141,"line":4051},[139,110671,103648],{"class":145},[139,110673,150],{"class":149},[139,110675,103653],{"class":145},[139,110677,110678,110681,110683,110685,110687,110689,110691,110693,110695,110697,110699],{"class":141,"line":4065},[139,110679,110680],{"class":145},"    renderer ",[139,110682,150],{"class":149},[139,110684,110097],{"class":145},[139,110686,27244],{"class":2111},[139,110688,150],{"class":149},[139,110690,44584],{"class":153},[139,110692,413],{"class":145},[139,110694,27240],{"class":2111},[139,110696,150],{"class":149},[139,110698,110112],{"class":153},[139,110700,164],{"class":145},[139,110702,110703],{"class":141,"line":4070},[139,110704,843],{"emptyLinePlaceholder":842},[139,110706,110707,110709,110711,110713,110715,110717,110719],{"class":141,"line":4860},[139,110708,5482],{"class":149},[139,110710,103728],{"class":145},[139,110712,1976],{"class":149},[139,110714,34690],{"class":153},[139,110716,157],{"class":145},[139,110718,1017],{"class":153},[139,110720,558],{"class":145},[139,110722,110723],{"class":141,"line":4874},[139,110724,103743],{"class":145},[139,110726,110727],{"class":141,"line":4882},[139,110728,843],{"emptyLinePlaceholder":842},[139,110730,110731,110734,110737,110739,110742],{"class":141,"line":4887},[139,110732,110733],{"class":145},"    renderer.update_scene(data, ",[139,110735,110736],{"class":2111},"camera",[139,110738,150],{"class":149},[139,110740,110741],{"class":160},"\"fixed_camera\"",[139,110743,164],{"class":145},[139,110745,110746,110749,110751],{"class":141,"line":4893},[139,110747,110748],{"class":145},"    image ",[139,110750,150],{"class":149},[139,110752,109808],{"class":145},[139,110754,110755],{"class":141,"line":4899},[139,110756,843],{"emptyLinePlaceholder":842},[139,110758,110759,110762,110764,110767,110769],{"class":141,"line":4904},[139,110760,110761],{"class":145},"    output_path ",[139,110763,150],{"class":149},[139,110765,110766],{"class":145}," Path(",[139,110768,110238],{"class":160},[139,110770,164],{"class":145},[139,110772,110773],{"class":141,"line":10222},[139,110774,110775],{"class":145},"    Image.fromarray(image).save(output_path)\n",[139,110777,110778],{"class":141,"line":10246},[139,110779,110780],{"class":145},"    renderer.close()\n",[139,110782,110783],{"class":141,"line":10251},[139,110784,843],{"emptyLinePlaceholder":842},[139,110786,110787,110789,110791,110794],{"class":141,"line":10257},[139,110788,302],{"class":153},[139,110790,157],{"class":145},[139,110792,110793],{"class":160},"\"saved:\"",[139,110795,110796],{"class":145},", output_path.resolve())\n",[139,110798,110799,110801,110803,110806],{"class":141,"line":10284},[139,110800,302],{"class":153},[139,110802,157],{"class":145},[139,110804,110805],{"class":160},"\"image shape:\"",[139,110807,110808],{"class":145},", image.shape)\n",[139,110810,110811],{"class":141,"line":10289},[139,110812,843],{"emptyLinePlaceholder":842},[139,110814,110815],{"class":141,"line":10295},[139,110816,843],{"emptyLinePlaceholder":842},[139,110818,110819,110821,110823,110825,110827],{"class":141,"line":10307},[139,110820,1729],{"class":149},[139,110822,1732],{"class":153},[139,110824,1735],{"class":149},[139,110826,1738],{"class":160},[139,110828,246],{"class":145},[139,110830,110831],{"class":141,"line":10319},[139,110832,103794],{"class":145},[19,110834,105793],{},[130,110836,110838],{"className":1830,"code":110837,"language":1832,"meta":135,"style":135},"touch ch5_renderer.py\n",[50,110839,110840],{"__ignoreMap":135},[139,110841,110842,110844],{"class":141,"line":142},[139,110843,103510],{"class":781},[139,110845,110846],{"class":160}," ch5_renderer.py\n",[1217,110848,103797],{"id":103797},[19,110850,110851],{},"viewer 上下文：",[130,110853,110855],{"className":132,"code":110854,"language":134,"meta":135,"style":135},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[50,110856,110857],{"__ignoreMap":135},[139,110858,110859,110861,110863,110865],{"class":141,"line":142},[139,110860,110056],{"class":149},[139,110862,110059],{"class":145},[139,110864,1035],{"class":149},[139,110866,110064],{"class":145},[19,110868,110869,110871],{},[50,110870,110056],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110873,110874],{},"窗口循环：",[130,110876,110878],{"className":132,"code":110877,"language":134,"meta":135,"style":135},"while viewer.is_running() and data.time \u003C 5.0:\n",[50,110879,110880],{"__ignoreMap":135},[139,110881,110882,110885,110887,110889,110891,110893,110895],{"class":141,"line":142},[139,110883,110884],{"class":149},"while",[139,110886,110410],{"class":145},[139,110888,32717],{"class":149},[139,110890,110415],{"class":145},[139,110892,796],{"class":149},[139,110894,110420],{"class":153},[139,110896,246],{"class":145},[19,110898,110899],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110901,110902],{},"固定相机：",[130,110904,110906],{"className":55302,"code":110905,"language":55304,"meta":135,"style":135},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[50,110907,110908],{"__ignoreMap":135},[139,110909,110910,110912,110914,110916,110918,110920,110922,110924,110927,110930,110932,110935],{"class":141,"line":142},[139,110911,796],{"class":145},[139,110913,110736],{"class":53538},[139,110915,17189],{"class":781},[139,110917,150],{"class":145},[139,110919,110741],{"class":160},[139,110921,103333],{"class":781},[139,110923,150],{"class":145},[139,110925,110926],{"class":160},"\"1.5 -2.0 1.2\"",[139,110928,110929],{"class":781}," xyaxes",[139,110931,150],{"class":145},[139,110933,110934],{"class":160},"\"1 0.75 0 0 0 1\"",[139,110936,103371],{"class":145},[19,110938,110939],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1217,110941,110943],{"id":110942},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[130,110945,110947],{"className":132,"code":110946,"language":134,"meta":135,"style":135},"import time\n",[50,110948,110949],{"__ignoreMap":135},[139,110950,110951,110953],{"class":141,"line":142},[139,110952,1064],{"class":149},[139,110954,1504],{"class":145},[19,110956,110957],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[130,110959,110961],{"className":132,"code":110960,"language":134,"meta":135,"style":135},"import mujoco\nimport mujoco.viewer\n",[50,110962,110963,110969],{"__ignoreMap":135},[139,110964,110965,110967],{"class":141,"line":142},[139,110966,1064],{"class":149},[139,110968,103528],{"class":145},[139,110970,110971,110973],{"class":141,"line":210},[139,110972,1064],{"class":149},[139,110974,109775],{"class":145},[19,110976,110977],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[130,110979,110980],{"className":132,"code":110854,"language":134,"meta":135,"style":135},[50,110981,110982],{"__ignoreMap":135},[139,110983,110984,110986,110988,110990],{"class":141,"line":142},[139,110985,110056],{"class":149},[139,110987,110059],{"class":145},[139,110989,1035],{"class":149},[139,110991,110064],{"class":145},[19,110993,110994,110995,110998],{},"打开一个 viewer 窗口。",[50,110996,110997],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[130,111000,111001],{"className":132,"code":110877,"language":134,"meta":135,"style":135},[50,111002,111003],{"__ignoreMap":135},[139,111004,111005,111007,111009,111011,111013,111015,111017],{"class":141,"line":142},[139,111006,110884],{"class":149},[139,111008,110410],{"class":145},[139,111010,32717],{"class":149},[139,111012,110415],{"class":145},[139,111014,796],{"class":149},[139,111016,110420],{"class":153},[139,111018,246],{"class":145},[19,111020,111021,111022,111025],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[50,111023,111024],{},"viewer.is_running()"," 会变成 false，循环结束。",[130,111027,111029],{"className":132,"code":111028,"language":134,"meta":135,"style":135},"step_start = time.time()\n",[50,111030,111031],{"__ignoreMap":135},[139,111032,111033,111036,111038],{"class":141,"line":142},[139,111034,111035],{"class":145},"step_start ",[139,111037,150],{"class":149},[139,111039,110432],{"class":145},[19,111041,111042],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[130,111044,111045],{"className":132,"code":110141,"language":134,"meta":135,"style":135},[50,111046,111047,111051],{"__ignoreMap":135},[139,111048,111049],{"class":141,"line":142},[139,111050,106728],{"class":145},[139,111052,111053],{"class":141,"line":210},[139,111054,110152],{"class":145},[19,111056,111057,111059,111060,111062,111063,111065,111066,111069],{},[50,111058,103442],{}," 推进物理仿真。",[50,111061,110160],{}," 把最新的 ",[50,111064,35646],{}," 同步到窗口里显示。没有 ",[50,111067,111068],{},"sync()","，窗口可能看不到最新状态。",[130,111071,111072],{"className":132,"code":110171,"language":134,"meta":135,"style":135},[50,111073,111074],{"__ignoreMap":135},[139,111075,111076,111078,111080,111082,111084,111086,111088],{"class":141,"line":142},[139,111077,110178],{"class":145},[139,111079,150],{"class":149},[139,111081,110183],{"class":145},[139,111083,855],{"class":149},[139,111085,110188],{"class":145},[139,111087,855],{"class":149},[139,111089,110193],{"class":145},[19,111091,111092],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[130,111094,111096],{"className":132,"code":111095,"language":134,"meta":135,"style":135},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[50,111097,111098,111110],{"__ignoreMap":135},[139,111099,111100,111102,111104,111106,111108],{"class":141,"line":142},[139,111101,1729],{"class":149},[139,111103,110470],{"class":145},[139,111105,958],{"class":149},[139,111107,799],{"class":153},[139,111109,246],{"class":145},[139,111111,111112],{"class":141,"line":210},[139,111113,111114],{"class":145},"    time.sleep(sleep_time)\n",[19,111116,111117],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1217,111119,111121],{"id":111120},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[130,111123,111125],{"className":132,"code":111124,"language":134,"meta":135,"style":135},"from pathlib import Path\n",[50,111126,111127],{"__ignoreMap":135},[139,111128,111129,111131,111133,111135],{"class":141,"line":142},[139,111130,1265],{"class":149},[139,111132,2037],{"class":145},[139,111134,1064],{"class":149},[139,111136,2042],{"class":145},[19,111138,111139,111140,111143,111144,111147],{},"导入 ",[50,111141,111142],{},"Path","，用来处理文件路径。相比直接写字符串，",[50,111145,111146],{},"Path(\"render_output.png\")"," 更清晰。",[130,111149,111151],{"className":132,"code":111150,"language":134,"meta":135,"style":135},"from PIL import Image\n",[50,111152,111153],{"__ignoreMap":135},[139,111154,111155,111157,111159,111161],{"class":141,"line":142},[139,111156,1265],{"class":149},[139,111158,49501],{"class":153},[139,111160,49504],{"class":149},[139,111162,49507],{"class":145},[19,111164,111165],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[130,111167,111168],{"className":55302,"code":110905,"language":55304,"meta":135,"style":135},[50,111169,111170],{"__ignoreMap":135},[139,111171,111172,111174,111176,111178,111180,111182,111184,111186,111188,111190,111192,111194],{"class":141,"line":142},[139,111173,796],{"class":145},[139,111175,110736],{"class":53538},[139,111177,17189],{"class":781},[139,111179,150],{"class":145},[139,111181,110741],{"class":160},[139,111183,103333],{"class":781},[139,111185,150],{"class":145},[139,111187,110926],{"class":160},[139,111189,110929],{"class":781},[139,111191,150],{"class":145},[139,111193,110934],{"class":160},[139,111195,103371],{"class":145},[19,111197,111198,111199,111201,111202,111204,111205,111208,111209,111211],{},"定义一个相机。",[50,111200,1676],{}," 是相机名字。",[50,111203,106369],{}," 是相机在世界里的位置。",[50,111206,111207],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[50,111210,106369],{}," 来调视角。",[130,111213,111215],{"className":132,"code":111214,"language":134,"meta":135,"style":135},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[50,111216,111217],{"__ignoreMap":135},[139,111218,111219,111221,111223,111225,111227,111229,111231,111233,111235,111237,111239],{"class":141,"line":142},[139,111220,109793],{"class":145},[139,111222,150],{"class":149},[139,111224,110097],{"class":145},[139,111226,27244],{"class":2111},[139,111228,150],{"class":149},[139,111230,44584],{"class":153},[139,111232,413],{"class":145},[139,111234,27240],{"class":2111},[139,111236,150],{"class":149},[139,111238,110112],{"class":153},[139,111240,164],{"class":145},[19,111242,111243,111244,103245,111246,111248],{},"创建离屏渲染器。",[50,111245,27244],{},[50,111247,27240],{}," 决定输出图片大小。",[130,111250,111251],{"className":132,"code":103901,"language":134,"meta":135,"style":135},[50,111252,111253,111269],{"__ignoreMap":135},[139,111254,111255,111257,111259,111261,111263,111265,111267],{"class":141,"line":142},[139,111256,1970],{"class":149},[139,111258,103728],{"class":145},[139,111260,1976],{"class":149},[139,111262,34690],{"class":153},[139,111264,157],{"class":145},[139,111266,1017],{"class":153},[139,111268,558],{"class":145},[139,111270,111271],{"class":141,"line":210},[139,111272,103924],{"class":145},[19,111274,111275],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[130,111277,111279],{"className":132,"code":111278,"language":134,"meta":135,"style":135},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[50,111280,111281],{"__ignoreMap":135},[139,111282,111283,111286,111288,111290,111292],{"class":141,"line":142},[139,111284,111285],{"class":145},"renderer.update_scene(data, ",[139,111287,110736],{"class":2111},[139,111289,150],{"class":149},[139,111291,110741],{"class":160},[139,111293,164],{"class":145},[19,111295,111296,111297,111299,111300,111303],{},"告诉 renderer：用当前 ",[50,111298,35646],{}," 的状态更新画面，并使用名为 ",[50,111301,111302],{},"fixed_camera"," 的相机视角。",[130,111305,111306],{"className":132,"code":110203,"language":134,"meta":135,"style":135},[50,111307,111308],{"__ignoreMap":135},[139,111309,111310,111312,111314],{"class":141,"line":142},[139,111311,109803],{"class":145},[139,111313,150],{"class":149},[139,111315,109808],{"class":145},[19,111317,111318,111319,111322],{},"真正渲染出图像。",[50,111320,111321],{},"image"," 是一个 NumPy 数组，不是文件。",[130,111324,111326],{"className":132,"code":111325,"language":134,"meta":135,"style":135},"Image.fromarray(image).save(output_path)\n",[50,111327,111328],{"__ignoreMap":135},[139,111329,111330],{"class":141,"line":142},[139,111331,111325],{"class":145},[19,111333,111334,111335,170],{},"把数组转换成图片，并保存到 ",[50,111336,111337],{},"render_output.png",[130,111339,111341],{"className":132,"code":111340,"language":134,"meta":135,"style":135},"renderer.close()\n",[50,111342,111343],{"__ignoreMap":135},[139,111344,111345],{"class":141,"line":142},[139,111346,111340],{"class":145},[19,111348,111349],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111351,104540],{"id":104539},[19,111353,111354,111355,111357,111358,170],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[50,111356,111337],{},"，并输出图像数组形状，例如 ",[50,111359,111360],{},"(480, 640, 3)",[19,111362,111363],{},"如果图片里看不到方块，先检查：",[1760,111365,111366,111369,111372],{},[1763,111367,111368],{},"方块是否掉到相机视野外。",[1763,111370,111371],{},"camera 位置是否合理。",[1763,111373,111374,111375,111378],{},"是否在 ",[50,111376,111377],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111380,104572],{"id":104571},[19,111382,111383],{},"运行 viewer:",[130,111385,111387],{"className":1830,"code":111386,"language":1832,"meta":135,"style":135},"python ch5_viewer.py\n",[50,111388,111389],{"__ignoreMap":135},[139,111390,111391,111393],{"class":141,"line":142},[139,111392,134],{"class":781},[139,111394,110519],{"class":160},[19,111396,111397],{},"运行 renderer:",[130,111399,111401],{"className":1830,"code":111400,"language":1832,"meta":135,"style":135},"python ch5_renderer.py\n",[50,111402,111403],{"__ignoreMap":135},[139,111404,111405,111407],{"class":141,"line":142},[139,111406,134],{"class":781},[139,111408,110846],{"class":160},[19,111410,111411],{},"如果在服务器上运行:",[130,111413,111415],{"className":1830,"code":111414,"language":1832,"meta":135,"style":135},"MUJOCO_GL=egl python ch5_renderer.py\n",[50,111416,111417],{"__ignoreMap":135},[139,111418,111419,111421,111423,111425,111428],{"class":141,"line":142},[139,111420,110037],{"class":145},[139,111422,150],{"class":149},[139,111424,110027],{"class":160},[139,111426,111427],{"class":781}," python",[139,111429,110846],{"class":160},[19,111431,110005],{},[130,111433,111435],{"className":1830,"code":111434,"language":1832,"meta":135,"style":135},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[50,111436,111437],{"__ignoreMap":135},[139,111438,111439,111441,111443,111445,111447],{"class":141,"line":142},[139,111440,110037],{"class":145},[139,111442,150],{"class":149},[139,111444,110031],{"class":160},[139,111446,111427],{"class":781},[139,111448,110846],{"class":160},[19,111450,111451],{},"再做几个练习：",[1760,111453,111454,111461,111464,111470],{},[1763,111455,111456,111457,111460],{},"把 renderer 分辨率改成 ",[50,111458,111459],{},"height=240, width=320","，观察输出 shape。",[1763,111462,111463],{},"把方块颜色改成蓝色，重新保存图片。",[1763,111465,111466,111467,111469],{},"把相机 ",[50,111468,106369],{}," 改远一点，观察画面中物体是否变小。",[1763,111471,111472,111473,104638,111476,111479],{},"把 viewer 示例中的 ",[50,111474,111475],{},"data.time \u003C 5.0",[50,111477,111478],{},"data.time \u003C 20.0","，观察更长时间。",[14,111481,104677],{"id":104676},[1217,111483,111485],{"id":111484},"viewer-窗口打不开","viewer 窗口打不开",[19,111487,111488],{},"安装:",[130,111490,111492],{"className":1830,"code":111491,"language":1832,"meta":135,"style":135},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[50,111493,111494],{"__ignoreMap":135},[139,111495,111496,111498,111500,111502,111504,111506,111508,111510,111512,111514,111516],{"class":141,"line":142},[139,111497,26840],{"class":781},[139,111499,28575],{"class":160},[139,111501,1841],{"class":160},[139,111503,28660],{"class":153},[139,111505,104730],{"class":160},[139,111507,103061],{"class":160},[139,111509,104735],{"class":160},[139,111511,103074],{"class":160},[139,111513,103080],{"class":160},[139,111515,103071],{"class":160},[139,111517,111518],{"class":160}," libXinerama\n",[1217,111520,111522],{"id":111521},"glfwerror",[50,111523,111524],{},"GLFWError",[19,111526,111527],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1217,111529,111531],{"id":111530},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111533,111534,111535,84767,111537,111539],{},"尝试 ",[50,111536,103264],{},[50,111538,103267],{},"。可能存在版本差异。",[1217,111541,111542],{"id":111542},"保存图片是黑的",[19,111544,104799],{},[1760,111546,111547,111550,111553,111563],{},[1763,111548,111549],{},"XML 里是否有 light。",[1763,111551,111552],{},"相机是否对着模型。",[1763,111554,111555,111556,111559,111560,170],{},"是否先 ",[50,111557,111558],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[50,111561,111562],{},"renderer.render()",[1763,111564,111565],{},"物体是否已经掉出视野。",[1217,111567,111568],{"id":111568},"远程服务器没有显示器",[19,111570,111571],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[130,111573,111574],{"className":1830,"code":111414,"language":1832,"meta":135,"style":135},[50,111575,111576],{"__ignoreMap":135},[139,111577,111578,111580,111582,111584,111586],{"class":141,"line":142},[139,111579,110037],{"class":145},[139,111581,150],{"class":149},[139,111583,110027],{"class":160},[139,111585,111427],{"class":781},[139,111587,110846],{"class":160},[19,111589,111590],{},"如果 EGL 不可用，再尝试：",[130,111592,111593],{"className":1830,"code":111434,"language":1832,"meta":135,"style":135},[50,111594,111595],{"__ignoreMap":135},[139,111596,111597,111599,111601,111603,111605],{"class":141,"line":142},[139,111598,110037],{"class":145},[139,111600,150],{"class":149},[139,111602,110031],{"class":160},[139,111604,111427],{"class":781},[139,111606,110846],{"class":160},[14,111608,104831],{"id":104830},[19,111610,111611],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1760,111613,111614,111617,111620],{},[1763,111615,111616],{},"先用 viewer 看模型和控制是否正常。",[1763,111618,111619],{},"再用 renderer 保存图片或构造视觉观测。",[1763,111621,111622],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2348,111624,111625],{},"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":135,"searchDepth":210,"depth":210,"links":111627},[111628,111629,111630,111635,111640,111641,111642,111649],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":111631},[111632,111633,111634],{"id":110134,"depth":254,"text":110135},{"id":110164,"depth":254,"text":110165},{"id":110199,"depth":254,"text":110200},{"id":103479,"depth":210,"text":103480,"children":111636},[111637,111638,111639],{"id":103797,"depth":254,"text":103797},{"id":110942,"depth":254,"text":110943},{"id":111120,"depth":254,"text":111121},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":111643},[111644,111645,111646,111647,111648],{"id":111484,"depth":254,"text":111485},{"id":111521,"depth":254,"text":111524},{"id":111530,"depth":254,"text":111531},{"id":111542,"depth":254,"text":111542},{"id":111568,"depth":254,"text":111568},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109742,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111656,"title":111657,"body":111658,"description":135,"extension":2385,"meta":113569,"navigation":842,"path":113570,"seo":113571,"stem":113572,"__hash__":113573},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111659,"toc":113545},[111660,111663,111665,111668,111670,111689,111692,111698,111701,111703,111705,111729,111731,111745,111747,111788,111790,111801,111803,111806,111812,111815,111849,111852,111884,111887,111919,111923,111926,111966,111969,111975,111978,111984,111988,111991,111997,112000,112004,112007,112047,112049,112062,112065,112067,112649,112651,112663,112666,112677,112679,112682,112701,112713,112716,112737,112740,112743,112786,112789,112792,112812,112819,112821,112839,112854,112857,112863,112866,112872,112889,112896,112927,112938,112972,112983,113000,113009,113017,113022,113036,113039,113060,113066,113080,113085,113115,113125,113150,113158,113181,113184,113200,113203,113211,113217,113239,113252,113273,113282,113321,113332,113334,113337,113343,113346,113349,113355,113358,113378,113381,113383,113422,113424,113427,113435,113438,113441,113468,113471,113481,113487,113490,113496,113498,113504,113508,113511,113513,113516,113540,113543],[10,111661,111657],{"id":111662},"_6控制任务cartpole",[14,111664,102874],{"id":102873},[19,111666,111667],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111669,106554],{},[1760,111671,111672,111675,111677,111680,111683,111686],{},[1763,111673,111674],{},"slide joint",[1763,111676,108407],{},[1763,111678,111679],{},"cart force actuator",[1763,111681,111682],{},"状态观测",[1763,111684,111685],{},"简单控制循环",[1763,111687,111688],{},"reward 设计雏形",[19,111690,111691],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[130,111693,111696],{"className":111694,"code":111695,"language":645,"meta":135},[643],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[50,111697,111695],{"__ignoreMap":135},[19,111699,111700],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111702,102997],{"id":102996},[19,111704,103000],{},[130,111706,111707],{"className":1830,"code":106611,"language":1832,"meta":135,"style":135},[50,111708,111709],{"__ignoreMap":135},[139,111710,111711,111713,111715,111717,111719,111721,111723,111725,111727],{"class":141,"line":142},[139,111712,26840],{"class":781},[139,111714,28575],{"class":160},[139,111716,1841],{"class":160},[139,111718,28660],{"class":153},[139,111720,106626],{"class":160},[139,111722,103025],{"class":160},[139,111724,104725],{"class":160},[139,111726,103041],{"class":160},[139,111728,106635],{"class":160},[19,111730,105043],{},[130,111732,111733],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},[50,111734,111735],{"__ignoreMap":135},[139,111736,111737,111739,111741,111743],{"class":141,"line":142},[139,111738,1826],{"class":781},[139,111740,1841],{"class":160},[139,111742,103157],{"class":160},[139,111744,103160],{"class":160},[19,111746,105060],{},[130,111748,111750],{"className":1830,"code":111749,"language":1832,"meta":135,"style":135},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[50,111751,111752,111769,111778],{"__ignoreMap":135},[139,111753,111754,111756,111758,111760,111763,111765,111767],{"class":141,"line":142},[139,111755,32589],{"class":781},[139,111757,31435],{"class":160},[139,111759,27378],{"class":153},[139,111761,111762],{"class":160}," mujoco-cartpole",[139,111764,103202],{"class":160},[139,111766,103205],{"class":153},[139,111768,103208],{"class":153},[139,111770,111771,111773,111775],{"class":141,"line":210},[139,111772,32589],{"class":781},[139,111774,103215],{"class":160},[139,111776,111777],{"class":160}," mujoco-cartpole\n",[139,111779,111780,111782,111784,111786],{"class":141,"line":254},[139,111781,1826],{"class":781},[139,111783,1841],{"class":160},[139,111785,103157],{"class":160},[139,111787,103160],{"class":160},[19,111789,103231],{},[1760,111791,111792,111795,111798],{},[1763,111793,111794],{},"本章不依赖 Gymnasium。",[1763,111796,111797],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1763,111799,111800],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111802,103272],{"id":103271},[19,111804,111805],{},"Cartpole 的模型结构:",[130,111807,111810],{"className":111808,"code":111809,"language":645,"meta":135},[643],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[50,111811,111809],{"__ignoreMap":135},[19,111813,111814],{},"小车通过 slide joint 左右移动:",[130,111816,111818],{"className":55302,"code":111817,"language":55304,"meta":135,"style":135},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[50,111819,111820],{"__ignoreMap":135},[139,111821,111822,111824,111826,111828,111830,111833,111835,111837,111840,111842,111844,111847],{"class":141,"line":142},[139,111823,796],{"class":145},[139,111825,105180],{"class":53538},[139,111827,17189],{"class":781},[139,111829,150],{"class":145},[139,111831,111832],{"class":160},"\"cart_x\"",[139,111834,56058],{"class":781},[139,111836,150],{"class":145},[139,111838,111839],{"class":160},"\"slide\"",[139,111841,108251],{"class":781},[139,111843,150],{"class":145},[139,111845,111846],{"class":160},"\"1 0 0\"",[139,111848,103371],{"class":145},[19,111850,111851],{},"杆子通过 hinge joint 旋转:",[130,111853,111855],{"className":55302,"code":111854,"language":55304,"meta":135,"style":135},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[50,111856,111857],{"__ignoreMap":135},[139,111858,111859,111861,111863,111865,111867,111870,111872,111874,111876,111878,111880,111882],{"class":141,"line":142},[139,111860,796],{"class":145},[139,111862,105180],{"class":53538},[139,111864,17189],{"class":781},[139,111866,150],{"class":145},[139,111868,111869],{"class":160},"\"pole_hinge\"",[139,111871,56058],{"class":781},[139,111873,150],{"class":145},[139,111875,108242],{"class":160},[139,111877,108251],{"class":781},[139,111879,150],{"class":145},[139,111881,108256],{"class":160},[139,111883,103371],{"class":145},[19,111885,111886],{},"控制力作用在小车 slide joint 上:",[130,111888,111890],{"className":55302,"code":111889,"language":55304,"meta":135,"style":135},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[50,111891,111892],{"__ignoreMap":135},[139,111893,111894,111896,111898,111900,111902,111905,111907,111909,111911,111913,111915,111917],{"class":141,"line":142},[139,111895,796],{"class":145},[139,111897,108297],{"class":53538},[139,111899,17189],{"class":781},[139,111901,150],{"class":145},[139,111903,111904],{"class":160},"\"cart_motor\"",[139,111906,108307],{"class":781},[139,111908,150],{"class":145},[139,111910,111832],{"class":160},[139,111912,108314],{"class":781},[139,111914,150],{"class":145},[139,111916,56550],{"class":160},[139,111918,103371],{"class":145},[1217,111920,111922],{"id":111921},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111924,111925],{},"这个简化模型有两个关节：",[26,111927,111928,111939],{},[29,111929,111930],{},[32,111931,111932,111934,111936],{},[35,111933,104983],{"align":26003},[35,111935,26004],{"align":26003},[35,111937,111938],{"align":26003},"对应状态",[42,111940,111941,111954],{},[32,111942,111943,111948,111951],{},[47,111944,111945],{"align":26003},[50,111946,111947],{},"cart_x",[47,111949,111950],{"align":26003},"slide",[47,111952,111953],{"align":26003},"小车 x 位置",[32,111955,111956,111961,111963],{},[47,111957,111958],{"align":26003},[50,111959,111960],{},"pole_hinge",[47,111962,108063],{"align":26003},[47,111964,111965],{"align":26003},"杆子角度",[19,111967,111968],{},"所以：",[130,111970,111973],{"className":111971,"code":111972,"language":645,"meta":135},[643],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[50,111974,111972],{"__ignoreMap":135},[19,111976,111977],{},"把它们拼起来就是观测：",[130,111979,111982],{"className":111980,"code":111981,"language":645,"meta":135},[643],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[50,111983,111981],{"__ignoreMap":135},[1217,111985,111987],{"id":111986},"action-是什么","action 是什么",[19,111989,111990],{},"本章只有一个 actuator：",[130,111992,111995],{"className":111993,"code":111994,"language":645,"meta":135},[643],"data.ctrl[0] = action\n",[50,111996,111994],{"__ignoreMap":135},[19,111998,111999],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1217,112001,112003],{"id":112002},"reward-是什么","reward 是什么",[19,112005,112006],{},"奖励函数：",[130,112008,112010],{"className":132,"code":112009,"language":134,"meta":135,"style":135},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[50,112011,112012],{"__ignoreMap":135},[139,112013,112014,112016,112019,112021,112023,112025,112028,112030,112033,112035,112037,112039,112042,112044],{"class":141,"line":142},[139,112015,19313],{"class":149},[139,112017,112018],{"class":153}," float",[139,112020,157],{"class":145},[139,112022,104627],{"class":153},[139,112024,54506],{"class":149},[139,112026,112027],{"class":153}," 0.1",[139,112029,8792],{"class":149},[139,112031,112032],{"class":145}," cart_x ",[139,112034,2892],{"class":149},[139,112036,112032],{"class":145},[139,112038,855],{"class":149},[139,112040,112041],{"class":145}," pole_angle ",[139,112043,2892],{"class":149},[139,112045,112046],{"class":145}," pole_angle)\n",[19,112048,108449],{},[1760,112050,112051,112056,112059],{},[1763,112052,112053,112054,170],{},"基础奖励是 ",[50,112055,104627],{},[1763,112057,112058],{},"小车离中心越远，扣分越多。",[1763,112060,112061],{},"杆子角度越大，扣分越多。",[19,112063,112064],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112066,103480],{"id":103479},[130,112068,112070],{"className":132,"code":112069,"language":134,"meta":135,"style":135},"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",[50,112071,112072,112078,112088,112092,112096,112104,112109,112113,112117,112121,112126,112130,112135,112140,112145,112149,112154,112159,112164,112168,112172,112176,112180,112184,112189,112193,112197,112201,112205,112209,112219,112226,112230,112234,112248,112262,112275,112305,112309,112313,112325,112337,112345,112349,112362,112366,112370,112379,112383,112399,112409,112422,112435,112439,112462,112480,112484,112496,112500,112504,112514,112524,112528,112544,112585,112589,112609,112625,112629,112633,112645],{"__ignoreMap":135},[139,112073,112074,112076],{"class":141,"line":142},[139,112075,1064],{"class":149},[139,112077,103528],{"class":145},[139,112079,112080,112082,112084,112086],{"class":141,"line":210},[139,112081,1064],{"class":149},[139,112083,33630],{"class":145},[139,112085,1035],{"class":149},[139,112087,33635],{"class":145},[139,112089,112090],{"class":141,"line":254},[139,112091,843],{"emptyLinePlaceholder":842},[139,112093,112094],{"class":141,"line":262},[139,112095,843],{"emptyLinePlaceholder":842},[139,112097,112098,112100,112102],{"class":141,"line":313},[139,112099,103541],{"class":153},[139,112101,15836],{"class":149},[139,112103,103546],{"class":160},[139,112105,112106],{"class":141,"line":462},[139,112107,112108],{"class":160},"\u003Cmujoco model=\"cartpole\">\n",[139,112110,112111],{"class":141,"line":474},[139,112112,103556],{"class":160},[139,112114,112115],{"class":141,"line":484},[139,112116,843],{"emptyLinePlaceholder":842},[139,112118,112119],{"class":141,"line":989},[139,112120,103565],{"class":160},[139,112122,112123],{"class":141,"line":994},[139,112124,112125],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[139,112127,112128],{"class":141,"line":999},[139,112129,843],{"emptyLinePlaceholder":842},[139,112131,112132],{"class":141,"line":1006},[139,112133,112134],{"class":160},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[139,112136,112137],{"class":141,"line":1027},[139,112138,112139],{"class":160},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[139,112141,112142],{"class":141,"line":1040},[139,112143,112144],{"class":160},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[139,112146,112147],{"class":141,"line":2160},[139,112148,843],{"emptyLinePlaceholder":842},[139,112150,112151],{"class":141,"line":2188},[139,112152,112153],{"class":160},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[139,112155,112156],{"class":141,"line":3944},[139,112157,112158],{"class":160},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[139,112160,112161],{"class":141,"line":3963},[139,112162,112163],{"class":160},"        \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",[139,112165,112166],{"class":141,"line":3968},[139,112167,108661],{"class":160},[139,112169,112170],{"class":141,"line":3982},[139,112171,103594],{"class":160},[139,112173,112174],{"class":141,"line":3987},[139,112175,103599],{"class":160},[139,112177,112178],{"class":141,"line":4014},[139,112179,843],{"emptyLinePlaceholder":842},[139,112181,112182],{"class":141,"line":4019},[139,112183,108678],{"class":160},[139,112185,112186],{"class":141,"line":4036},[139,112187,112188],{"class":160},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[139,112190,112191],{"class":141,"line":4041},[139,112192,108688],{"class":160},[139,112194,112195],{"class":141,"line":4046},[139,112196,103604],{"class":160},[139,112198,112199],{"class":141,"line":4051},[139,112200,97925],{"class":160},[139,112202,112203],{"class":141,"line":4065},[139,112204,843],{"emptyLinePlaceholder":842},[139,112206,112207],{"class":141,"line":4070},[139,112208,843],{"emptyLinePlaceholder":842},[139,112210,112211,112213,112216],{"class":141,"line":4860},[139,112212,778],{"class":149},[139,112214,112215],{"class":781}," get_observation",[139,112217,112218],{"class":145},"(data: mujoco.MjData) -> np.ndarray:\n",[139,112220,112221,112223],{"class":141,"line":4874},[139,112222,978],{"class":149},[139,112224,112225],{"class":145}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[139,112227,112228],{"class":141,"line":4882},[139,112229,843],{"emptyLinePlaceholder":842},[139,112231,112232],{"class":141,"line":4887},[139,112233,843],{"emptyLinePlaceholder":842},[139,112235,112236,112238,112241,112244,112246],{"class":141,"line":4893},[139,112237,778],{"class":149},[139,112239,112240],{"class":781}," compute_reward",[139,112242,112243],{"class":145},"(obs: np.ndarray) -> ",[139,112245,2496],{"class":153},[139,112247,246],{"class":145},[139,112249,112250,112253,112255,112258,112260],{"class":141,"line":4899},[139,112251,112252],{"class":145},"    cart_x ",[139,112254,150],{"class":149},[139,112256,112257],{"class":145}," obs[",[139,112259,2634],{"class":153},[139,112261,424],{"class":145},[139,112263,112264,112267,112269,112271,112273],{"class":141,"line":4904},[139,112265,112266],{"class":145},"    pole_angle ",[139,112268,150],{"class":149},[139,112270,112257],{"class":145},[139,112272,410],{"class":153},[139,112274,424],{"class":145},[139,112276,112277,112279,112281,112283,112285,112287,112289,112291,112293,112295,112297,112299,112301,112303],{"class":141,"line":10222},[139,112278,978],{"class":149},[139,112280,112018],{"class":153},[139,112282,157],{"class":145},[139,112284,104627],{"class":153},[139,112286,54506],{"class":149},[139,112288,112027],{"class":153},[139,112290,8792],{"class":149},[139,112292,112032],{"class":145},[139,112294,2892],{"class":149},[139,112296,112032],{"class":145},[139,112298,855],{"class":149},[139,112300,112041],{"class":145},[139,112302,2892],{"class":149},[139,112304,112046],{"class":145},[139,112306,112307],{"class":141,"line":10246},[139,112308,843],{"emptyLinePlaceholder":842},[139,112310,112311],{"class":141,"line":10251},[139,112312,843],{"emptyLinePlaceholder":842},[139,112314,112315,112317,112319,112321,112323],{"class":141,"line":10257},[139,112316,778],{"class":149},[139,112318,4259],{"class":781},[139,112320,103625],{"class":145},[139,112322,97913],{"class":153},[139,112324,246],{"class":145},[139,112326,112327,112329,112331,112333,112335],{"class":141,"line":10284},[139,112328,103634],{"class":145},[139,112330,150],{"class":149},[139,112332,103639],{"class":145},[139,112334,103541],{"class":153},[139,112336,164],{"class":145},[139,112338,112339,112341,112343],{"class":141,"line":10289},[139,112340,103648],{"class":145},[139,112342,150],{"class":149},[139,112344,103653],{"class":145},[139,112346,112347],{"class":141,"line":10295},[139,112348,843],{"emptyLinePlaceholder":842},[139,112350,112351,112353,112355,112357,112359],{"class":141,"line":10307},[139,112352,107292],{"class":145},[139,112354,410],{"class":153},[139,112356,6721],{"class":145},[139,112358,150],{"class":149},[139,112360,112361],{"class":153}," 0.1\n",[139,112363,112364],{"class":141,"line":10319},[139,112365,107305],{"class":145},[139,112367,112368],{"class":141,"line":10331},[139,112369,843],{"emptyLinePlaceholder":842},[139,112371,112372,112375,112377],{"class":141,"line":11990},[139,112373,112374],{"class":145},"    total_reward ",[139,112376,150],{"class":149},[139,112378,106984],{"class":153},[139,112380,112381],{"class":141,"line":12015},[139,112382,843],{"emptyLinePlaceholder":842},[139,112384,112385,112387,112389,112391,112393,112395,112397],{"class":141,"line":12038},[139,112386,5482],{"class":149},[139,112388,33865],{"class":145},[139,112390,1976],{"class":149},[139,112392,34690],{"class":153},[139,112394,157],{"class":145},[139,112396,8684],{"class":153},[139,112398,558],{"class":145},[139,112400,112401,112404,112406],{"class":141,"line":12062},[139,112402,112403],{"class":145},"        obs ",[139,112405,150],{"class":149},[139,112407,112408],{"class":145}," get_observation(data)\n",[139,112410,112411,112414,112416,112418,112420],{"class":141,"line":12067},[139,112412,112413],{"class":145},"        pole_angle ",[139,112415,150],{"class":149},[139,112417,112257],{"class":145},[139,112419,410],{"class":153},[139,112421,424],{"class":145},[139,112423,112424,112427,112429,112431,112433],{"class":141,"line":12072},[139,112425,112426],{"class":145},"        pole_angular_velocity ",[139,112428,150],{"class":149},[139,112430,112257],{"class":145},[139,112432,421],{"class":153},[139,112434,424],{"class":145},[139,112436,112437],{"class":141,"line":12077},[139,112438,843],{"emptyLinePlaceholder":842},[139,112440,112441,112444,112446,112449,112451,112453,112455,112457,112459],{"class":141,"line":12086},[139,112442,112443],{"class":145},"        action ",[139,112445,150],{"class":149},[139,112447,112448],{"class":153}," 2.0",[139,112450,8792],{"class":149},[139,112452,112041],{"class":145},[139,112454,1147],{"class":149},[139,112456,64100],{"class":153},[139,112458,8792],{"class":149},[139,112460,112461],{"class":145}," pole_angular_velocity\n",[139,112463,112464,112466,112468,112470,112472,112474,112476,112478],{"class":141,"line":12091},[139,112465,112443],{"class":145},[139,112467,150],{"class":149},[139,112469,109670],{"class":145},[139,112471,855],{"class":149},[139,112473,104627],{"class":153},[139,112475,413],{"class":145},[139,112477,104627],{"class":153},[139,112479,164],{"class":145},[139,112481,112482],{"class":141,"line":12097},[139,112483,843],{"emptyLinePlaceholder":842},[139,112485,112486,112488,112490,112492,112494],{"class":141,"line":12118},[139,112487,108840],{"class":145},[139,112489,2634],{"class":153},[139,112491,6721],{"class":145},[139,112493,150],{"class":149},[139,112495,109693],{"class":145},[139,112497,112498],{"class":141,"line":12124},[139,112499,103743],{"class":145},[139,112501,112502],{"class":141,"line":12138},[139,112503,843],{"emptyLinePlaceholder":842},[139,112505,112506,112509,112511],{"class":141,"line":12144},[139,112507,112508],{"class":145},"        reward ",[139,112510,150],{"class":149},[139,112512,112513],{"class":145}," compute_reward(get_observation(data))\n",[139,112515,112516,112519,112521],{"class":141,"line":12171},[139,112517,112518],{"class":145},"        total_reward ",[139,112520,11751],{"class":149},[139,112522,112523],{"class":145}," reward\n",[139,112525,112526],{"class":141,"line":12180},[139,112527,843],{"emptyLinePlaceholder":842},[139,112529,112530,112532,112534,112536,112538,112540,112542],{"class":141,"line":12186},[139,112531,4780],{"class":149},[139,112533,33865],{"class":145},[139,112535,2766],{"class":149},[139,112537,8028],{"class":153},[139,112539,1735],{"class":149},[139,112541,799],{"class":153},[139,112543,246],{"class":145},[139,112545,112546,112548,112550,112553,112556,112559,112562,112564,112567,112570,112572,112574,112576,112578,112581,112583],{"class":141,"line":12194},[139,112547,36893],{"class":153},[139,112549,157],{"class":145},[139,112551,112552],{"class":160},"\"step:\"",[139,112554,112555],{"class":145},", step, ",[139,112557,112558],{"class":160},"\"obs:\"",[139,112560,112561],{"class":145},", np.round(obs, ",[139,112563,421],{"class":153},[139,112565,112566],{"class":145},"), ",[139,112568,112569],{"class":160},"\"action:\"",[139,112571,413],{"class":145},[139,112573,34265],{"class":153},[139,112575,157],{"class":145},[139,112577,2496],{"class":153},[139,112579,112580],{"class":145},"(action), ",[139,112582,421],{"class":153},[139,112584,207],{"class":145},[139,112586,112587],{"class":141,"line":12199},[139,112588,843],{"emptyLinePlaceholder":842},[139,112590,112591,112593,112595,112598,112600,112602,112605,112607],{"class":141,"line":18871},[139,112592,302],{"class":153},[139,112594,157],{"class":145},[139,112596,112597],{"class":160},"\"total_reward:\"",[139,112599,413],{"class":145},[139,112601,34265],{"class":153},[139,112603,112604],{"class":145},"(total_reward, ",[139,112606,421],{"class":153},[139,112608,207],{"class":145},[139,112610,112611,112613,112615,112618,112621,112623],{"class":141,"line":18877},[139,112612,302],{"class":153},[139,112614,157],{"class":145},[139,112616,112617],{"class":160},"\"final obs:\"",[139,112619,112620],{"class":145},", np.round(get_observation(data), ",[139,112622,421],{"class":153},[139,112624,207],{"class":145},[139,112626,112627],{"class":141,"line":18900},[139,112628,843],{"emptyLinePlaceholder":842},[139,112630,112631],{"class":141,"line":18906},[139,112632,843],{"emptyLinePlaceholder":842},[139,112634,112635,112637,112639,112641,112643],{"class":141,"line":18929},[139,112636,1729],{"class":149},[139,112638,1732],{"class":153},[139,112640,1735],{"class":149},[139,112642,1738],{"class":160},[139,112644,246],{"class":145},[139,112646,112647],{"class":141,"line":18943},[139,112648,103794],{"class":145},[19,112650,105793],{},[130,112652,112654],{"className":1830,"code":112653,"language":1832,"meta":135,"style":135},"touch ch6_cartpole.py\n",[50,112655,112656],{"__ignoreMap":135},[139,112657,112658,112660],{"class":141,"line":142},[139,112659,103510],{"class":781},[139,112661,112662],{"class":160}," ch6_cartpole.py\n",[19,112664,112665],{},"运行：",[130,112667,112669],{"className":1830,"code":112668,"language":1832,"meta":135,"style":135},"python ch6_cartpole.py\n",[50,112670,112671],{"__ignoreMap":135},[139,112672,112673,112675],{"class":141,"line":142},[139,112674,134],{"class":781},[139,112676,112662],{"class":160},[1217,112678,103797],{"id":103797},[19,112680,112681],{},"构造观测：",[130,112683,112685],{"className":132,"code":112684,"language":134,"meta":135,"style":135},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[50,112686,112687,112695],{"__ignoreMap":135},[139,112688,112689,112691,112693],{"class":141,"line":142},[139,112690,778],{"class":149},[139,112692,112215],{"class":781},[139,112694,112218],{"class":145},[139,112696,112697,112699],{"class":141,"line":210},[139,112698,978],{"class":149},[139,112700,112225],{"class":145},[19,112702,112703,112706,112707,112709,112710,112712],{},[50,112704,112705],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[50,112708,106253],{}," 2 维，",[50,112711,106583],{}," 2 维，所以 obs 是 4 维。",[19,112714,112715],{},"设置初始角度：",[130,112717,112719],{"className":132,"code":112718,"language":134,"meta":135,"style":135},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[50,112720,112721,112733],{"__ignoreMap":135},[139,112722,112723,112725,112727,112729,112731],{"class":141,"line":142},[139,112724,106922],{"class":145},[139,112726,410],{"class":153},[139,112728,6721],{"class":145},[139,112730,150],{"class":149},[139,112732,112361],{"class":153},[139,112734,112735],{"class":141,"line":210},[139,112736,106766],{"class":145},[19,112738,112739],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112741,112742],{},"简单反馈控制：",[130,112744,112746],{"className":132,"code":112745,"language":134,"meta":135,"style":135},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[50,112747,112748,112768],{"__ignoreMap":135},[139,112749,112750,112752,112754,112756,112758,112760,112762,112764,112766],{"class":141,"line":142},[139,112751,109665],{"class":145},[139,112753,150],{"class":149},[139,112755,112448],{"class":153},[139,112757,8792],{"class":149},[139,112759,112041],{"class":145},[139,112761,1147],{"class":149},[139,112763,64100],{"class":153},[139,112765,8792],{"class":149},[139,112767,112461],{"class":145},[139,112769,112770,112772,112774,112776,112778,112780,112782,112784],{"class":141,"line":210},[139,112771,109665],{"class":145},[139,112773,150],{"class":149},[139,112775,109670],{"class":145},[139,112777,855],{"class":149},[139,112779,104627],{"class":153},[139,112781,413],{"class":145},[139,112783,104627],{"class":153},[139,112785,164],{"class":145},[19,112787,112788],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112790,112791],{},"限制动作：",[130,112793,112795],{"className":132,"code":112794,"language":134,"meta":135,"style":135},"np.clip(action, -1.0, 1.0)\n",[50,112796,112797],{"__ignoreMap":135},[139,112798,112799,112802,112804,112806,112808,112810],{"class":141,"line":142},[139,112800,112801],{"class":145},"np.clip(action, ",[139,112803,855],{"class":149},[139,112805,104627],{"class":153},[139,112807,413],{"class":145},[139,112809,104627],{"class":153},[139,112811,164],{"class":145},[19,112813,112814,112815,112818],{},"因为 XML 里 ",[50,112816,112817],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1217,112820,103933],{"id":103933},[130,112822,112823],{"className":132,"code":112684,"language":134,"meta":135,"style":135},[50,112824,112825,112833],{"__ignoreMap":135},[139,112826,112827,112829,112831],{"class":141,"line":142},[139,112828,778],{"class":149},[139,112830,112215],{"class":781},[139,112832,112218],{"class":145},[139,112834,112835,112837],{"class":141,"line":210},[139,112836,978],{"class":149},[139,112838,112225],{"class":145},[19,112840,112841,112842,112845,112846,112849,112850,112853],{},"这段定义了一个函数，用来获取当前观测。",[50,112843,112844],{},"data.qpos.copy()"," 是位置数组副本，",[50,112847,112848],{},"data.qvel.copy()"," 是速度数组副本。",[50,112851,112852],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112855,112856],{},"在本章模型里：",[130,112858,112861],{"className":112859,"code":112860,"language":645,"meta":135},[643],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[50,112862,112860],{"__ignoreMap":135},[19,112864,112865],{},"所以返回的 obs 是：",[130,112867,112870],{"className":112868,"code":112869,"language":645,"meta":135},[643],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[50,112871,112869],{"__ignoreMap":135},[130,112873,112875],{"className":132,"code":112874,"language":134,"meta":135,"style":135},"def compute_reward(obs: np.ndarray) -> float:\n",[50,112876,112877],{"__ignoreMap":135},[139,112878,112879,112881,112883,112885,112887],{"class":141,"line":142},[139,112880,778],{"class":149},[139,112882,112240],{"class":781},[139,112884,112243],{"class":145},[139,112886,2496],{"class":153},[139,112888,246],{"class":145},[19,112890,112891,112892,112895],{},"这行定义奖励函数。输入是观测 ",[50,112893,112894],{},"obs","，输出是一个浮点数奖励。",[130,112897,112899],{"className":132,"code":112898,"language":134,"meta":135,"style":135},"cart_x = obs[0]\npole_angle = obs[1]\n",[50,112900,112901,112914],{"__ignoreMap":135},[139,112902,112903,112906,112908,112910,112912],{"class":141,"line":142},[139,112904,112905],{"class":145},"cart_x ",[139,112907,150],{"class":149},[139,112909,112257],{"class":145},[139,112911,2634],{"class":153},[139,112913,424],{"class":145},[139,112915,112916,112919,112921,112923,112925],{"class":141,"line":210},[139,112917,112918],{"class":145},"pole_angle ",[139,112920,150],{"class":149},[139,112922,112257],{"class":145},[139,112924,410],{"class":153},[139,112926,424],{"class":145},[19,112928,112929,112930,112933,112934,112937],{},"数组索引从 0 开始。",[50,112931,112932],{},"obs[0]"," 是第一个元素，也就是小车位置。",[50,112935,112936],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[130,112939,112940],{"className":132,"code":112009,"language":134,"meta":135,"style":135},[50,112941,112942],{"__ignoreMap":135},[139,112943,112944,112946,112948,112950,112952,112954,112956,112958,112960,112962,112964,112966,112968,112970],{"class":141,"line":142},[139,112945,19313],{"class":149},[139,112947,112018],{"class":153},[139,112949,157],{"class":145},[139,112951,104627],{"class":153},[139,112953,54506],{"class":149},[139,112955,112027],{"class":153},[139,112957,8792],{"class":149},[139,112959,112032],{"class":145},[139,112961,2892],{"class":149},[139,112963,112032],{"class":145},[139,112965,855],{"class":149},[139,112967,112041],{"class":145},[139,112969,2892],{"class":149},[139,112971,112046],{"class":145},[19,112973,112974,112975,112978,112979,112982],{},"这行计算奖励。",[50,112976,112977],{},"cart_x * cart_x"," 是小车位置的平方，",[50,112980,112981],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[130,112984,112986],{"className":132,"code":112985,"language":134,"meta":135,"style":135},"data.qpos[1] = 0.1\n",[50,112987,112988],{"__ignoreMap":135},[139,112989,112990,112992,112994,112996,112998],{"class":141,"line":142},[139,112991,106922],{"class":145},[139,112993,410],{"class":153},[139,112995,6721],{"class":145},[139,112997,150],{"class":149},[139,112999,112361],{"class":153},[19,113001,113002,113003,113005,113006,113008],{},"手动设置杆子的初始角度。因为 ",[50,113004,107679],{}," 是小车位置，",[50,113007,107682],{}," 是杆子角度，所以这里改的是杆子。",[130,113010,113011],{"className":132,"code":106766,"language":134,"meta":135,"style":135},[50,113012,113013],{"__ignoreMap":135},[139,113014,113015],{"class":141,"line":142},[139,113016,106766],{"class":145},[19,113018,107725,113019,113021],{},[50,113020,106253],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[130,113023,113025],{"className":132,"code":113024,"language":134,"meta":135,"style":135},"total_reward = 0.0\n",[50,113026,113027],{"__ignoreMap":135},[139,113028,113029,113032,113034],{"class":141,"line":142},[139,113030,113031],{"class":145},"total_reward ",[139,113033,150],{"class":149},[139,113035,106984],{"class":153},[19,113037,113038],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[130,113040,113042],{"className":132,"code":113041,"language":134,"meta":135,"style":135},"for step in range(1000):\n",[50,113043,113044],{"__ignoreMap":135},[139,113045,113046,113048,113050,113052,113054,113056,113058],{"class":141,"line":142},[139,113047,1970],{"class":149},[139,113049,33865],{"class":145},[139,113051,1976],{"class":149},[139,113053,34690],{"class":153},[139,113055,157],{"class":145},[139,113057,8684],{"class":153},[139,113059,558],{"class":145},[19,113061,113062,113063,113065],{},"循环 1000 步。",[50,113064,109357],{}," 是当前步数，从 0 到 999。",[130,113067,113069],{"className":132,"code":113068,"language":134,"meta":135,"style":135},"obs = get_observation(data)\n",[50,113070,113071],{"__ignoreMap":135},[139,113072,113073,113076,113078],{"class":141,"line":142},[139,113074,113075],{"class":145},"obs ",[139,113077,150],{"class":149},[139,113079,112408],{"class":145},[19,113081,113082,113083,170],{},"读取当前状态，保存到 ",[50,113084,112894],{},[130,113086,113088],{"className":132,"code":113087,"language":134,"meta":135,"style":135},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[50,113089,113090,113102],{"__ignoreMap":135},[139,113091,113092,113094,113096,113098,113100],{"class":141,"line":142},[139,113093,112918],{"class":145},[139,113095,150],{"class":149},[139,113097,112257],{"class":145},[139,113099,410],{"class":153},[139,113101,424],{"class":145},[139,113103,113104,113107,113109,113111,113113],{"class":141,"line":210},[139,113105,113106],{"class":145},"pole_angular_velocity ",[139,113108,150],{"class":149},[139,113110,112257],{"class":145},[139,113112,421],{"class":153},[139,113114,424],{"class":145},[19,113116,113117,113118,113121,113122,170],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[50,113119,113120],{},"obs[3]","？因为 obs 的顺序是 ",[50,113123,113124],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[130,113126,113128],{"className":132,"code":113127,"language":134,"meta":135,"style":135},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[50,113129,113130],{"__ignoreMap":135},[139,113131,113132,113134,113136,113138,113140,113142,113144,113146,113148],{"class":141,"line":142},[139,113133,109665],{"class":145},[139,113135,150],{"class":149},[139,113137,112448],{"class":153},[139,113139,8792],{"class":149},[139,113141,112041],{"class":145},[139,113143,1147],{"class":149},[139,113145,64100],{"class":153},[139,113147,8792],{"class":149},[139,113149,112461],{"class":145},[19,113151,113152,113153,103245,113155,113157],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[50,113154,107483],{},[50,113156,37572],{}," 是人为设置的系数，不是固定公式。",[130,113159,113161],{"className":132,"code":113160,"language":134,"meta":135,"style":135},"action = np.clip(action, -1.0, 1.0)\n",[50,113162,113163],{"__ignoreMap":135},[139,113164,113165,113167,113169,113171,113173,113175,113177,113179],{"class":141,"line":142},[139,113166,109665],{"class":145},[139,113168,150],{"class":149},[139,113170,109670],{"class":145},[139,113172,855],{"class":149},[139,113174,104627],{"class":153},[139,113176,413],{"class":145},[139,113178,104627],{"class":153},[139,113180,164],{"class":145},[19,113182,113183],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[130,113185,113186],{"className":132,"code":111994,"language":134,"meta":135,"style":135},[50,113187,113188],{"__ignoreMap":135},[139,113189,113190,113192,113194,113196,113198],{"class":141,"line":142},[139,113191,108094],{"class":145},[139,113193,2634],{"class":153},[139,113195,6721],{"class":145},[139,113197,150],{"class":149},[139,113199,109693],{"class":145},[19,113201,113202],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[130,113204,113205],{"className":132,"code":106728,"language":134,"meta":135,"style":135},[50,113206,113207],{"__ignoreMap":135},[139,113208,113209],{"class":141,"line":142},[139,113210,106728],{"class":145},[19,113212,113213,113214,113216],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[50,113215,108349],{}," 计算小车和杆子的下一刻状态。",[130,113218,113220],{"className":132,"code":113219,"language":134,"meta":135,"style":135},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[50,113221,113222,113231],{"__ignoreMap":135},[139,113223,113224,113227,113229],{"class":141,"line":142},[139,113225,113226],{"class":145},"reward ",[139,113228,150],{"class":149},[139,113230,112513],{"class":145},[139,113232,113233,113235,113237],{"class":141,"line":210},[139,113234,113031],{"class":145},[139,113236,11751],{"class":149},[139,113238,112523],{"class":145},[19,113240,113241,113242,113244,113245,113248,113249,170],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[50,113243,11751],{}," 是简写，",[50,113246,113247],{},"total_reward += reward"," 等价于 ",[50,113250,113251],{},"total_reward = total_reward + reward",[130,113253,113255],{"className":132,"code":113254,"language":134,"meta":135,"style":135},"if step % 100 == 0:\n",[50,113256,113257],{"__ignoreMap":135},[139,113258,113259,113261,113263,113265,113267,113269,113271],{"class":141,"line":142},[139,113260,1729],{"class":149},[139,113262,33865],{"class":145},[139,113264,2766],{"class":149},[139,113266,8028],{"class":153},[139,113268,1735],{"class":149},[139,113270,799],{"class":153},[139,113272,246],{"class":145},[19,113274,113275,113277,113278,113281],{},[50,113276,2766],{}," 是取余数。",[50,113279,113280],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[130,113283,113285],{"className":132,"code":113284,"language":134,"meta":135,"style":135},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[50,113286,113287],{"__ignoreMap":135},[139,113288,113289,113291,113293,113295,113297,113299,113301,113303,113305,113307,113309,113311,113313,113315,113317,113319],{"class":141,"line":142},[139,113290,213],{"class":153},[139,113292,157],{"class":145},[139,113294,112552],{"class":160},[139,113296,112555],{"class":145},[139,113298,112558],{"class":160},[139,113300,112561],{"class":145},[139,113302,421],{"class":153},[139,113304,112566],{"class":145},[139,113306,112569],{"class":160},[139,113308,413],{"class":145},[139,113310,34265],{"class":153},[139,113312,157],{"class":145},[139,113314,2496],{"class":153},[139,113316,112580],{"class":145},[139,113318,421],{"class":153},[139,113320,207],{"class":145},[19,113322,113323,113324,113327,113328,113331],{},"打印当前步数、观测和动作。",[50,113325,113326],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[50,113329,113330],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113333,104540],{"id":104539},[19,113335,113336],{},"观测向量:",[130,113338,113341],{"className":113339,"code":113340,"language":645,"meta":135},[643],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[50,113342,113340],{"__ignoreMap":135},[19,113344,113345],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113347,113348],{},"每隔 100 步会打印一次：",[130,113350,113353],{"className":113351,"code":113352,"language":645,"meta":135},[643],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[50,113354,113352],{"__ignoreMap":135},[19,113356,113357],{},"重点观察：",[1760,113359,113360,113366,113371],{},[1763,113361,113362,113365],{},[50,113363,113364],{},"pole_angle"," 是否越来越大。",[1763,113367,113368,113370],{},[50,113369,111947],{}," 是否跑得太远。",[1763,113372,113373,113374,84767,113376,170],{},"action 是否经常被 clip 到 ",[50,113375,106138],{},[50,113377,410],{},[19,113379,113380],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113382,104572],{"id":104571},[1760,113384,113385,113391,113394,113400,113410,113416,113419],{},[1763,113386,113387,113388,170],{},"把初始角度改为 ",[50,113389,113390],{},"data.qpos[1] = 0.3",[1763,113392,113393],{},"重新运行，观察控制是否变差。",[1763,113395,113396,113397,113399],{},"把 actuator ",[50,113398,109290],{}," 改小。",[1763,113401,113402,113403,113406,113407,170],{},"打印 ",[50,113404,113405],{},"model.nq, model.nv, model.nu","，应为 ",[50,113408,113409],{},"2 2 1",[1763,113411,113412,113413,113415],{},"把 reward 里的 ",[50,113414,112981],{}," 系数改大，观察总奖励变化。",[1763,113417,113418],{},"把控制器改成反号，观察杆子是否更容易倒。",[1763,113420,113421],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113423,104677],{"id":104676},[1217,113425,113426],{"id":113426},"杆子方向和预期不一致",[19,113428,104620,113429,113431,113432,113434],{},[50,113430,108462],{}," 和 capsule 的 ",[50,113433,105400],{},"，必要时用 viewer 可视化确认。",[1217,113436,113437],{"id":113437},"控制器越控越倒",[19,113439,113440],{},"说明反馈符号可能反了，尝试:",[130,113442,113444],{"className":132,"code":113443,"language":134,"meta":135,"style":135},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[50,113445,113446],{"__ignoreMap":135},[139,113447,113448,113450,113452,113454,113456,113458,113460,113462,113464,113466],{"class":141,"line":142},[139,113449,109665],{"class":145},[139,113451,150],{"class":149},[139,113453,54506],{"class":149},[139,113455,107483],{"class":153},[139,113457,8792],{"class":149},[139,113459,112041],{"class":145},[139,113461,855],{"class":149},[139,113463,64100],{"class":153},[139,113465,8792],{"class":149},[139,113467,112461],{"class":145},[1217,113469,113470],{"id":113470},"小车飞走",[19,113472,113473,113474,113476,113477,113480],{},"降低 ",[50,113475,109290],{}," 或缩小 ",[50,113478,113479],{},"action"," 的 clip 范围。",[1217,113482,113484,113486],{"id":113483},"obs3-为什么是杆子角速度",[50,113485,113120],{}," 为什么是杆子角速度",[19,113488,113489],{},"因为这个模型里：",[130,113491,113494],{"className":113492,"code":113493,"language":645,"meta":135},[643],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[50,113495,113493],{"__ignoreMap":135},[19,113497,111968],{},[130,113499,113502],{"className":113500,"code":113501,"language":645,"meta":135},[643],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[50,113503,113501],{"__ignoreMap":135},[1217,113505,113507],{"id":113506},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113509,113510],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113512,104831],{"id":104830},[19,113514,113515],{},"一个控制任务通常包含：",[1760,113517,113518,113521,113529,113534,113537],{},[1763,113519,113520],{},"模型：Cartpole 的 body、joint、actuator。",[1763,113522,113523,113524,2655,113526,113528],{},"观测：从 ",[50,113525,106253],{},[50,113527,106583],{}," 里取状态。",[1763,113530,113531,113532,170],{},"动作：写入 ",[50,113533,103303],{},[1763,113535,113536],{},"奖励：根据任务目标打分。",[1763,113538,113539],{},"循环：obs -> action -> step -> reward。",[19,113541,113542],{},"这就是后面 Gymnasium 环境的基本骨架。",[2348,113544,106509],{},{"title":135,"searchDepth":210,"depth":210,"links":113546},[113547,113548,113549,113554,113558,113559,113560,113568],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":113550},[113551,113552,113553],{"id":111921,"depth":254,"text":111922},{"id":111986,"depth":254,"text":111987},{"id":112002,"depth":254,"text":112003},{"id":103479,"depth":210,"text":103480,"children":113555},[113556,113557],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":113561},[113562,113563,113564,113565,113567],{"id":113426,"depth":254,"text":113426},{"id":113437,"depth":254,"text":113437},{"id":113470,"depth":254,"text":113470},{"id":113483,"depth":254,"text":113566},"obs[3] 为什么是杆子角速度",{"id":113506,"depth":254,"text":113507},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111657,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113575,"title":113576,"body":113577,"description":135,"extension":2385,"meta":115590,"navigation":842,"path":115591,"seo":115592,"stem":115593,"__hash__":115594},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113578,"toc":115566},[113579,113582,113584,113587,113589,113606,113609,113612,113618,113621,113623,113625,113649,113651,113665,113667,113708,113710,113728,113730,113733,113739,113742,113770,113774,113780,113805,113808,113839,113846,113849,113852,113858,113861,113867,113870,113876,113880,113883,113908,113911,113913,114672,114674,114686,114688,114699,114701,114704,114721,114724,114726,114737,114740,114742,114788,114791,114804,114807,114889,114892,114894,114910,114920,114933,114936,114975,114985,114996,115006,115019,115022,115051,115054,115064,115067,115073,115090,115101,115103,115109,115126,115137,115158,115161,115173,115176,115197,115200,115208,115216,115233,115236,115305,115312,115320,115323,115336,115343,115345,115348,115354,115357,115360,115366,115372,115374,115414,115416,115422,115431,115434,115436,115456,115459,115462,115468,115472,115474,115501,115504,115507,115534,115540,115543,115546,115548,115551,115554,115560,115563],[10,113580,113576],{"id":113581},"_7控制任务reacher-机械臂到达目标",[14,113583,102874],{"id":102873},[19,113585,113586],{},"本章搭建一个二维两关节 reacher 任务。",[19,113588,106554],{},[1760,113590,113591,113594,113597,113600,113603],{},[1763,113592,113593],{},"两个 hinge joint",[1763,113595,113596],{},"两个 motor actuator",[1763,113598,113599],{},"site 作为末端点和目标点",[1763,113601,113602],{},"根据末端和目标距离设计 reward",[1763,113604,113605],{},"构造机械臂任务的基本形式",[19,113607,113608],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113610,113611],{},"Reacher 任务可以理解为：",[130,113613,113616],{"className":113614,"code":113615,"language":645,"meta":135},[643],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[50,113617,113615],{"__ignoreMap":135},[19,113619,113620],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113622,102997],{"id":102996},[19,113624,103000],{},[130,113626,113627],{"className":1830,"code":106611,"language":1832,"meta":135,"style":135},[50,113628,113629],{"__ignoreMap":135},[139,113630,113631,113633,113635,113637,113639,113641,113643,113645,113647],{"class":141,"line":142},[139,113632,26840],{"class":781},[139,113634,28575],{"class":160},[139,113636,1841],{"class":160},[139,113638,28660],{"class":153},[139,113640,106626],{"class":160},[139,113642,103025],{"class":160},[139,113644,104725],{"class":160},[139,113646,103041],{"class":160},[139,113648,106635],{"class":160},[19,113650,105043],{},[130,113652,113653],{"className":1830,"code":103146,"language":1832,"meta":135,"style":135},[50,113654,113655],{"__ignoreMap":135},[139,113656,113657,113659,113661,113663],{"class":141,"line":142},[139,113658,1826],{"class":781},[139,113660,1841],{"class":160},[139,113662,103157],{"class":160},[139,113664,103160],{"class":160},[19,113666,105060],{},[130,113668,113670],{"className":1830,"code":113669,"language":1832,"meta":135,"style":135},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[50,113671,113672,113689,113698],{"__ignoreMap":135},[139,113673,113674,113676,113678,113680,113683,113685,113687],{"class":141,"line":142},[139,113675,32589],{"class":781},[139,113677,31435],{"class":160},[139,113679,27378],{"class":153},[139,113681,113682],{"class":160}," mujoco-reacher",[139,113684,103202],{"class":160},[139,113686,103205],{"class":153},[139,113688,103208],{"class":153},[139,113690,113691,113693,113695],{"class":141,"line":210},[139,113692,32589],{"class":781},[139,113694,103215],{"class":160},[139,113696,113697],{"class":160}," mujoco-reacher\n",[139,113699,113700,113702,113704,113706],{"class":141,"line":254},[139,113701,1826],{"class":781},[139,113703,1841],{"class":160},[139,113705,103157],{"class":160},[139,113707,103160],{"class":160},[19,113709,103231],{},[1760,113711,113712,113715,113718],{},[1763,113713,113714],{},"本章使用低维状态，不使用图像输入。",[1763,113716,113717],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1763,113719,113720,113721,2655,113723,2655,113725,113727],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[50,113722,106253],{},[50,113724,106583],{},[50,113726,105903],{}," 的方法一致。",[14,113729,103272],{"id":103271},[19,113731,113732],{},"Reacher 任务核心:",[130,113734,113737],{"className":113735,"code":113736,"language":645,"meta":135},[643],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[50,113738,113736],{"__ignoreMap":135},[19,113740,113741],{},"读取 site 世界坐标:",[130,113743,113745],{"className":132,"code":113744,"language":134,"meta":135,"style":135},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[50,113746,113747,113760],{"__ignoreMap":135},[139,113748,113749,113751,113753,113755,113758],{"class":141,"line":142},[139,113750,105857],{"class":145},[139,113752,150],{"class":149},[139,113754,105629],{"class":145},[139,113756,113757],{"class":160},"\"tip\"",[139,113759,164],{"class":145},[139,113761,113762,113765,113767],{"class":141,"line":210},[139,113763,113764],{"class":145},"tip_pos ",[139,113766,150],{"class":149},[139,113768,113769],{"class":145}," data.site_xpos[site_id]\n",[1217,113771,113773],{"id":113772},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113775,113776,113777,113779],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[50,113778,106253],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[130,113781,113783],{"className":132,"code":113782,"language":134,"meta":135,"style":135},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[50,113784,113785,113795],{"__ignoreMap":135},[139,113786,113787,113790,113792],{"class":141,"line":142},[139,113788,113789],{"class":145},"tip ",[139,113791,150],{"class":149},[139,113793,113794],{"class":145}," data.site_xpos[tip_site_id]\n",[139,113796,113797,113800,113802],{"class":141,"line":210},[139,113798,113799],{"class":145},"target ",[139,113801,150],{"class":149},[139,113803,113804],{"class":145}," data.site_xpos[target_site_id]\n",[19,113806,113807],{},"这样 reward 就很容易写：",[130,113809,113811],{"className":132,"code":113810,"language":134,"meta":135,"style":135},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[50,113812,113813,113828],{"__ignoreMap":135},[139,113814,113815,113818,113820,113823,113825],{"class":141,"line":142},[139,113816,113817],{"class":145},"dist ",[139,113819,150],{"class":149},[139,113821,113822],{"class":145}," np.linalg.norm(tip ",[139,113824,855],{"class":149},[139,113826,113827],{"class":145}," target)\n",[139,113829,113830,113832,113834,113836],{"class":141,"line":210},[139,113831,113226],{"class":145},[139,113833,150],{"class":149},[139,113835,54506],{"class":149},[139,113837,113838],{"class":145},"dist\n",[19,113840,113841,113842,113845],{},"距离越小，",[50,113843,113844],{},"-dist"," 越接近 0，奖励越高。",[1217,113847,113848],{"id":113848},"两关节机械臂的状态",[19,113850,113851],{},"这个模型有两个 hinge joint：",[130,113853,113856],{"className":113854,"code":113855,"language":645,"meta":135},[643],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[50,113857,113855],{"__ignoreMap":135},[19,113859,113860],{},"再加上末端和目标位置：",[130,113862,113865],{"className":113863,"code":113864,"language":645,"meta":135},[643],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[50,113866,113864],{"__ignoreMap":135},[19,113868,113869],{},"总维度：",[130,113871,113874],{"className":113872,"code":113873,"language":645,"meta":135},[643],"2 + 2 + 3 + 3 = 10\n",[50,113875,113873],{"__ignoreMap":135},[1217,113877,113879],{"id":113878},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113881,113882],{},"本章把重力设为：",[130,113884,113886],{"className":55302,"code":113885,"language":55304,"meta":135,"style":135},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[50,113887,113888],{"__ignoreMap":135},[139,113889,113890,113892,113894,113896,113898,113900,113902,113904,113906],{"class":141,"line":142},[139,113891,796],{"class":145},[139,113893,71396],{"class":53538},[139,113895,103421],{"class":781},[139,113897,150],{"class":145},[139,113899,103426],{"class":160},[139,113901,103429],{"class":781},[139,113903,150],{"class":145},[139,113905,105994],{"class":160},[139,113907,103371],{"class":145},[19,113909,113910],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113912,103480],{"id":103479},[130,113914,113916],{"className":132,"code":113915,"language":134,"meta":135,"style":135},"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",[50,113917,113918,113924,113934,113938,113942,113950,113955,113960,113964,113968,113973,113978,113982,113987,113992,113997,114001,114006,114011,114016,114021,114025,114029,114033,114037,114041,114046,114051,114055,114059,114063,114067,114071,114086,114095,114107,114130,114137,114141,114145,114155,114169,114183,114190,114194,114198,114212,114224,114236,114249,114264,114281,114285,114289,114301,114313,114321,114329,114333,114349,114354,114367,114380,114395,114399,114433,114465,114469,114473,114482,114486,114502,114512,114523,114539,114555,114571,114587,114591,114609,114629,114648,114652,114656,114668],{"__ignoreMap":135},[139,113919,113920,113922],{"class":141,"line":142},[139,113921,1064],{"class":149},[139,113923,103528],{"class":145},[139,113925,113926,113928,113930,113932],{"class":141,"line":210},[139,113927,1064],{"class":149},[139,113929,33630],{"class":145},[139,113931,1035],{"class":149},[139,113933,33635],{"class":145},[139,113935,113936],{"class":141,"line":254},[139,113937,843],{"emptyLinePlaceholder":842},[139,113939,113940],{"class":141,"line":262},[139,113941,843],{"emptyLinePlaceholder":842},[139,113943,113944,113946,113948],{"class":141,"line":313},[139,113945,103541],{"class":153},[139,113947,15836],{"class":149},[139,113949,103546],{"class":160},[139,113951,113952],{"class":141,"line":462},[139,113953,113954],{"class":160},"\u003Cmujoco model=\"two_link_reacher\">\n",[139,113956,113957],{"class":141,"line":474},[139,113958,113959],{"class":160},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[139,113961,113962],{"class":141,"line":484},[139,113963,843],{"emptyLinePlaceholder":842},[139,113965,113966],{"class":141,"line":989},[139,113967,103565],{"class":160},[139,113969,113970],{"class":141,"line":994},[139,113971,113972],{"class":160},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[139,113974,113975],{"class":141,"line":999},[139,113976,113977],{"class":160},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[139,113979,113980],{"class":141,"line":1006},[139,113981,843],{"emptyLinePlaceholder":842},[139,113983,113984],{"class":141,"line":1027},[139,113985,113986],{"class":160},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[139,113988,113989],{"class":141,"line":1040},[139,113990,113991],{"class":160},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[139,113993,113994],{"class":141,"line":2160},[139,113995,113996],{"class":160},"      \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",[139,113998,113999],{"class":141,"line":2188},[139,114000,843],{"emptyLinePlaceholder":842},[139,114002,114003],{"class":141,"line":3944},[139,114004,114005],{"class":160},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[139,114007,114008],{"class":141,"line":3963},[139,114009,114010],{"class":160},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[139,114012,114013],{"class":141,"line":3968},[139,114014,114015],{"class":160},"        \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",[139,114017,114018],{"class":141,"line":3982},[139,114019,114020],{"class":160},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[139,114022,114023],{"class":141,"line":3987},[139,114024,108661],{"class":160},[139,114026,114027],{"class":141,"line":4014},[139,114028,103594],{"class":160},[139,114030,114031],{"class":141,"line":4019},[139,114032,103599],{"class":160},[139,114034,114035],{"class":141,"line":4036},[139,114036,843],{"emptyLinePlaceholder":842},[139,114038,114039],{"class":141,"line":4041},[139,114040,108678],{"class":160},[139,114042,114043],{"class":141,"line":4046},[139,114044,114045],{"class":160},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[139,114047,114048],{"class":141,"line":4051},[139,114049,114050],{"class":160},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[139,114052,114053],{"class":141,"line":4065},[139,114054,108688],{"class":160},[139,114056,114057],{"class":141,"line":4070},[139,114058,103604],{"class":160},[139,114060,114061],{"class":141,"line":4860},[139,114062,97925],{"class":160},[139,114064,114065],{"class":141,"line":4874},[139,114066,843],{"emptyLinePlaceholder":842},[139,114068,114069],{"class":141,"line":4882},[139,114070,843],{"emptyLinePlaceholder":842},[139,114072,114073,114075,114078,114081,114083],{"class":141,"line":4887},[139,114074,778],{"class":149},[139,114076,114077],{"class":781}," site_position",[139,114079,114080],{"class":145},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[139,114082,3600],{"class":153},[139,114084,114085],{"class":145},") -> np.ndarray:\n",[139,114087,114088,114090,114092],{"class":141,"line":4893},[139,114089,105624],{"class":145},[139,114091,150],{"class":149},[139,114093,114094],{"class":145}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[139,114096,114097,114099,114101,114103,114105],{"class":141,"line":4899},[139,114098,790],{"class":149},[139,114100,105672],{"class":145},[139,114102,796],{"class":149},[139,114104,799],{"class":153},[139,114106,246],{"class":145},[139,114108,114109,114111,114113,114115,114117,114120,114122,114124,114126,114128],{"class":141,"line":4904},[139,114110,806],{"class":149},[139,114112,105658],{"class":153},[139,114114,157],{"class":145},[139,114116,619],{"class":149},[139,114118,114119],{"class":160},"\"site not found: ",[139,114121,625],{"class":153},[139,114123,1676],{"class":145},[139,114125,631],{"class":153},[139,114127,634],{"class":160},[139,114129,164],{"class":145},[139,114131,114132,114134],{"class":141,"line":10222},[139,114133,978],{"class":149},[139,114135,114136],{"class":145}," data.site_xpos[site_id].copy()\n",[139,114138,114139],{"class":141,"line":10246},[139,114140,843],{"emptyLinePlaceholder":842},[139,114142,114143],{"class":141,"line":10251},[139,114144,843],{"emptyLinePlaceholder":842},[139,114146,114147,114149,114152],{"class":141,"line":10257},[139,114148,778],{"class":149},[139,114150,114151],{"class":781}," get_obs",[139,114153,114154],{"class":145},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[139,114156,114157,114160,114162,114165,114167],{"class":141,"line":10284},[139,114158,114159],{"class":145},"    tip ",[139,114161,150],{"class":149},[139,114163,114164],{"class":145}," site_position(model, data, ",[139,114166,113757],{"class":160},[139,114168,164],{"class":145},[139,114170,114171,114174,114176,114178,114181],{"class":141,"line":10289},[139,114172,114173],{"class":145},"    target ",[139,114175,150],{"class":149},[139,114177,114164],{"class":145},[139,114179,114180],{"class":160},"\"target\"",[139,114182,164],{"class":145},[139,114184,114185,114187],{"class":141,"line":10295},[139,114186,978],{"class":149},[139,114188,114189],{"class":145}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[139,114191,114192],{"class":141,"line":10307},[139,114193,843],{"emptyLinePlaceholder":842},[139,114195,114196],{"class":141,"line":10319},[139,114197,843],{"emptyLinePlaceholder":842},[139,114199,114200,114202,114205,114208,114210],{"class":141,"line":10331},[139,114201,778],{"class":149},[139,114203,114204],{"class":781}," reward",[139,114206,114207],{"class":145},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[139,114209,2496],{"class":153},[139,114211,246],{"class":145},[139,114213,114214,114216,114218,114220,114222],{"class":141,"line":11990},[139,114215,114159],{"class":145},[139,114217,150],{"class":149},[139,114219,114164],{"class":145},[139,114221,113757],{"class":160},[139,114223,164],{"class":145},[139,114225,114226,114228,114230,114232,114234],{"class":141,"line":12015},[139,114227,114173],{"class":145},[139,114229,150],{"class":149},[139,114231,114164],{"class":145},[139,114233,114180],{"class":160},[139,114235,164],{"class":145},[139,114237,114238,114241,114243,114245,114247],{"class":141,"line":12038},[139,114239,114240],{"class":145},"    dist ",[139,114242,150],{"class":149},[139,114244,113822],{"class":145},[139,114246,855],{"class":149},[139,114248,113827],{"class":145},[139,114250,114251,114254,114256,114259,114261],{"class":141,"line":12062},[139,114252,114253],{"class":145},"    control_cost ",[139,114255,150],{"class":149},[139,114257,114258],{"class":153}," 0.01",[139,114260,8792],{"class":149},[139,114262,114263],{"class":145}," np.sum(np.square(data.ctrl))\n",[139,114265,114266,114268,114270,114272,114274,114276,114278],{"class":141,"line":12067},[139,114267,978],{"class":149},[139,114269,112018],{"class":153},[139,114271,157],{"class":145},[139,114273,855],{"class":149},[139,114275,113817],{"class":145},[139,114277,855],{"class":149},[139,114279,114280],{"class":145}," control_cost)\n",[139,114282,114283],{"class":141,"line":12072},[139,114284,843],{"emptyLinePlaceholder":842},[139,114286,114287],{"class":141,"line":12077},[139,114288,843],{"emptyLinePlaceholder":842},[139,114290,114291,114293,114295,114297,114299],{"class":141,"line":12086},[139,114292,778],{"class":149},[139,114294,4259],{"class":781},[139,114296,103625],{"class":145},[139,114298,97913],{"class":153},[139,114300,246],{"class":145},[139,114302,114303,114305,114307,114309,114311],{"class":141,"line":12091},[139,114304,103634],{"class":145},[139,114306,150],{"class":149},[139,114308,103639],{"class":145},[139,114310,103541],{"class":153},[139,114312,164],{"class":145},[139,114314,114315,114317,114319],{"class":141,"line":12097},[139,114316,103648],{"class":145},[139,114318,150],{"class":149},[139,114320,103653],{"class":145},[139,114322,114323,114325,114327],{"class":141,"line":12118},[139,114324,112374],{"class":145},[139,114326,150],{"class":149},[139,114328,106984],{"class":153},[139,114330,114331],{"class":141,"line":12124},[139,114332,843],{"emptyLinePlaceholder":842},[139,114334,114335,114337,114339,114341,114343,114345,114347],{"class":141,"line":12138},[139,114336,5482],{"class":149},[139,114338,33865],{"class":145},[139,114340,1976],{"class":149},[139,114342,34690],{"class":153},[139,114344,157],{"class":145},[139,114346,67305],{"class":153},[139,114348,558],{"class":145},[139,114350,114351],{"class":141,"line":12144},[139,114352,114353],{"class":145},"        mujoco.mj_forward(model, data)\n",[139,114355,114356,114359,114361,114363,114365],{"class":141,"line":12171},[139,114357,114358],{"class":145},"        tip ",[139,114360,150],{"class":149},[139,114362,114164],{"class":145},[139,114364,113757],{"class":160},[139,114366,164],{"class":145},[139,114368,114369,114372,114374,114376,114378],{"class":141,"line":12180},[139,114370,114371],{"class":145},"        target ",[139,114373,150],{"class":149},[139,114375,114164],{"class":145},[139,114377,114180],{"class":160},[139,114379,164],{"class":145},[139,114381,114382,114385,114387,114390,114392],{"class":141,"line":12186},[139,114383,114384],{"class":145},"        error ",[139,114386,150],{"class":149},[139,114388,114389],{"class":145}," target ",[139,114391,855],{"class":149},[139,114393,114394],{"class":145}," tip\n",[139,114396,114397],{"class":141,"line":12194},[139,114398,843],{"emptyLinePlaceholder":842},[139,114400,114401,114403,114405,114407,114409,114412,114414,114416,114419,114421,114423,114425,114427,114429,114431],{"class":141,"line":12199},[139,114402,108840],{"class":145},[139,114404,2634],{"class":153},[139,114406,6721],{"class":145},[139,114408,150],{"class":149},[139,114410,114411],{"class":145}," np.clip(",[139,114413,107483],{"class":153},[139,114415,8792],{"class":149},[139,114417,114418],{"class":145}," error[",[139,114420,416],{"class":153},[139,114422,1484],{"class":145},[139,114424,855],{"class":149},[139,114426,104627],{"class":153},[139,114428,413],{"class":145},[139,114430,104627],{"class":153},[139,114432,164],{"class":145},[139,114434,114435,114437,114439,114441,114443,114445,114447,114449,114451,114453,114455,114457,114459,114461,114463],{"class":141,"line":18871},[139,114436,108840],{"class":145},[139,114438,410],{"class":153},[139,114440,6721],{"class":145},[139,114442,150],{"class":149},[139,114444,114411],{"class":145},[139,114446,107483],{"class":153},[139,114448,8792],{"class":149},[139,114450,114418],{"class":145},[139,114452,2634],{"class":153},[139,114454,1484],{"class":145},[139,114456,855],{"class":149},[139,114458,104627],{"class":153},[139,114460,413],{"class":145},[139,114462,104627],{"class":153},[139,114464,164],{"class":145},[139,114466,114467],{"class":141,"line":18877},[139,114468,843],{"emptyLinePlaceholder":842},[139,114470,114471],{"class":141,"line":18900},[139,114472,103743],{"class":145},[139,114474,114475,114477,114479],{"class":141,"line":18906},[139,114476,112518],{"class":145},[139,114478,11751],{"class":149},[139,114480,114481],{"class":145}," reward(model, data)\n",[139,114483,114484],{"class":141,"line":18929},[139,114485,843],{"emptyLinePlaceholder":842},[139,114487,114488,114490,114492,114494,114496,114498,114500],{"class":141,"line":18943},[139,114489,4780],{"class":149},[139,114491,33865],{"class":145},[139,114493,2766],{"class":149},[139,114495,8028],{"class":153},[139,114497,1735],{"class":149},[139,114499,799],{"class":153},[139,114501,246],{"class":145},[139,114503,114504,114507,114509],{"class":141,"line":18963},[139,114505,114506],{"class":145},"            obs ",[139,114508,150],{"class":149},[139,114510,114511],{"class":145}," get_obs(model, data)\n",[139,114513,114514,114516,114518,114520],{"class":141,"line":18969},[139,114515,36893],{"class":153},[139,114517,157],{"class":145},[139,114519,112552],{"class":160},[139,114521,114522],{"class":145},", step)\n",[139,114524,114525,114527,114529,114532,114535,114537],{"class":141,"line":18980},[139,114526,36893],{"class":153},[139,114528,157],{"class":145},[139,114530,114531],{"class":160},"\"  tip:\"",[139,114533,114534],{"class":145},", np.round(tip, ",[139,114536,421],{"class":153},[139,114538,207],{"class":145},[139,114540,114541,114543,114545,114548,114551,114553],{"class":141,"line":19003},[139,114542,36893],{"class":153},[139,114544,157],{"class":145},[139,114546,114547],{"class":160},"\"  target:\"",[139,114549,114550],{"class":145},", np.round(target, ",[139,114552,421],{"class":153},[139,114554,207],{"class":145},[139,114556,114557,114559,114561,114564,114567,114569],{"class":141,"line":19025},[139,114558,36893],{"class":153},[139,114560,157],{"class":145},[139,114562,114563],{"class":160},"\"  ctrl:\"",[139,114565,114566],{"class":145},", np.round(data.ctrl.copy(), ",[139,114568,421],{"class":153},[139,114570,207],{"class":145},[139,114572,114573,114575,114577,114580,114583,114585],{"class":141,"line":19030},[139,114574,36893],{"class":153},[139,114576,157],{"class":145},[139,114578,114579],{"class":160},"\"  obs_dim:\"",[139,114581,114582],{"class":145},", obs.shape[",[139,114584,2634],{"class":153},[139,114586,6935],{"class":145},[139,114588,114589],{"class":141,"line":19036},[139,114590,843],{"emptyLinePlaceholder":842},[139,114592,114593,114595,114597,114599,114601,114603,114605,114607],{"class":141,"line":19050},[139,114594,302],{"class":153},[139,114596,157],{"class":145},[139,114598,112597],{"class":160},[139,114600,413],{"class":145},[139,114602,34265],{"class":153},[139,114604,112604],{"class":145},[139,114606,421],{"class":153},[139,114608,207],{"class":145},[139,114610,114611,114613,114615,114618,114621,114623,114625,114627],{"class":141,"line":19063},[139,114612,302],{"class":153},[139,114614,157],{"class":145},[139,114616,114617],{"class":160},"\"final tip:\"",[139,114619,114620],{"class":145},", np.round(site_position(model, data, ",[139,114622,113757],{"class":160},[139,114624,112566],{"class":145},[139,114626,421],{"class":153},[139,114628,207],{"class":145},[139,114630,114631,114633,114635,114638,114640,114642,114644,114646],{"class":141,"line":19068},[139,114632,302],{"class":153},[139,114634,157],{"class":145},[139,114636,114637],{"class":160},"\"target:\"",[139,114639,114620],{"class":145},[139,114641,114180],{"class":160},[139,114643,112566],{"class":145},[139,114645,421],{"class":153},[139,114647,207],{"class":145},[139,114649,114650],{"class":141,"line":19082},[139,114651,843],{"emptyLinePlaceholder":842},[139,114653,114654],{"class":141,"line":19087},[139,114655,843],{"emptyLinePlaceholder":842},[139,114657,114658,114660,114662,114664,114666],{"class":141,"line":19093},[139,114659,1729],{"class":149},[139,114661,1732],{"class":153},[139,114663,1735],{"class":149},[139,114665,1738],{"class":160},[139,114667,246],{"class":145},[139,114669,114670],{"class":141,"line":19098},[139,114671,103794],{"class":145},[19,114673,105793],{},[130,114675,114677],{"className":1830,"code":114676,"language":1832,"meta":135,"style":135},"touch ch7_reacher.py\n",[50,114678,114679],{"__ignoreMap":135},[139,114680,114681,114683],{"class":141,"line":142},[139,114682,103510],{"class":781},[139,114684,114685],{"class":160}," ch7_reacher.py\n",[19,114687,112665],{},[130,114689,114691],{"className":1830,"code":114690,"language":1832,"meta":135,"style":135},"python ch7_reacher.py\n",[50,114692,114693],{"__ignoreMap":135},[139,114694,114695,114697],{"class":141,"line":142},[139,114696,134],{"class":781},[139,114698,114685],{"class":160},[1217,114700,103797],{"id":103797},[19,114702,114703],{},"读取 site 坐标：",[130,114705,114707],{"className":132,"code":114706,"language":134,"meta":135,"style":135},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[50,114708,114709],{"__ignoreMap":135},[139,114710,114711,114713,114715,114717,114719],{"class":141,"line":142},[139,114712,778],{"class":149},[139,114714,114077],{"class":781},[139,114716,114080],{"class":145},[139,114718,3600],{"class":153},[139,114720,114085],{"class":145},[19,114722,114723],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114725,112681],{},[130,114727,114729],{"className":132,"code":114728,"language":134,"meta":135,"style":135},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[50,114730,114731],{"__ignoreMap":135},[139,114732,114733,114735],{"class":141,"line":142},[139,114734,19313],{"class":149},[139,114736,114189],{"class":145},[19,114738,114739],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114741,112006],{},[130,114743,114745],{"className":132,"code":114744,"language":134,"meta":135,"style":135},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[50,114746,114747,114759,114772],{"__ignoreMap":135},[139,114748,114749,114751,114753,114755,114757],{"class":141,"line":142},[139,114750,113817],{"class":145},[139,114752,150],{"class":149},[139,114754,113822],{"class":145},[139,114756,855],{"class":149},[139,114758,113827],{"class":145},[139,114760,114761,114764,114766,114768,114770],{"class":141,"line":210},[139,114762,114763],{"class":145},"control_cost ",[139,114765,150],{"class":149},[139,114767,114258],{"class":153},[139,114769,8792],{"class":149},[139,114771,114263],{"class":145},[139,114773,114774,114776,114778,114780,114782,114784,114786],{"class":141,"line":254},[139,114775,19313],{"class":149},[139,114777,112018],{"class":153},[139,114779,157],{"class":145},[139,114781,855],{"class":149},[139,114783,113817],{"class":145},[139,114785,855],{"class":149},[139,114787,114280],{"class":145},[19,114789,114790],{},"奖励由两部分组成：",[1760,114792,114793,114798],{},[1763,114794,114795,114797],{},[50,114796,113844],{},"：末端离目标越远，奖励越低。",[1763,114799,114800,114803],{},[50,114801,114802],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114805,114806],{},"简单控制器：",[130,114808,114810],{"className":132,"code":114809,"language":134,"meta":135,"style":135},"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",[50,114811,114812,114825,114857],{"__ignoreMap":135},[139,114813,114814,114817,114819,114821,114823],{"class":141,"line":142},[139,114815,114816],{"class":145},"error ",[139,114818,150],{"class":149},[139,114820,114389],{"class":145},[139,114822,855],{"class":149},[139,114824,114394],{"class":145},[139,114826,114827,114829,114831,114833,114835,114837,114839,114841,114843,114845,114847,114849,114851,114853,114855],{"class":141,"line":210},[139,114828,108094],{"class":145},[139,114830,2634],{"class":153},[139,114832,6721],{"class":145},[139,114834,150],{"class":149},[139,114836,114411],{"class":145},[139,114838,107483],{"class":153},[139,114840,8792],{"class":149},[139,114842,114418],{"class":145},[139,114844,416],{"class":153},[139,114846,1484],{"class":145},[139,114848,855],{"class":149},[139,114850,104627],{"class":153},[139,114852,413],{"class":145},[139,114854,104627],{"class":153},[139,114856,164],{"class":145},[139,114858,114859,114861,114863,114865,114867,114869,114871,114873,114875,114877,114879,114881,114883,114885,114887],{"class":141,"line":254},[139,114860,108094],{"class":145},[139,114862,410],{"class":153},[139,114864,6721],{"class":145},[139,114866,150],{"class":149},[139,114868,114411],{"class":145},[139,114870,107483],{"class":153},[139,114872,8792],{"class":149},[139,114874,114418],{"class":145},[139,114876,2634],{"class":153},[139,114878,1484],{"class":145},[139,114880,855],{"class":149},[139,114882,104627],{"class":153},[139,114884,413],{"class":145},[139,114886,104627],{"class":153},[139,114888,164],{"class":145},[19,114890,114891],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1217,114893,103933],{"id":103933},[130,114895,114896],{"className":132,"code":114706,"language":134,"meta":135,"style":135},[50,114897,114898],{"__ignoreMap":135},[139,114899,114900,114902,114904,114906,114908],{"class":141,"line":142},[139,114901,778],{"class":149},[139,114903,114077],{"class":781},[139,114905,114080],{"class":145},[139,114907,3600],{"class":153},[139,114909,114085],{"class":145},[19,114911,114912,114913,114915,114916,84767,114918,170],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[50,114914,1676],{}," 是 site 的名字，比如 ",[50,114917,113757],{},[50,114919,114180],{},[130,114921,114923],{"className":132,"code":114922,"language":134,"meta":135,"style":135},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[50,114924,114925],{"__ignoreMap":135},[139,114926,114927,114929,114931],{"class":141,"line":142},[139,114928,105857],{"class":145},[139,114930,150],{"class":149},[139,114932,114094],{"class":145},[19,114934,114935],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[130,114937,114939],{"className":132,"code":114938,"language":134,"meta":135,"style":135},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[50,114940,114941,114953],{"__ignoreMap":135},[139,114942,114943,114945,114947,114949,114951],{"class":141,"line":142},[139,114944,1729],{"class":149},[139,114946,105672],{"class":145},[139,114948,796],{"class":149},[139,114950,799],{"class":153},[139,114952,246],{"class":145},[139,114954,114955,114957,114959,114961,114963,114965,114967,114969,114971,114973],{"class":141,"line":210},[139,114956,106118],{"class":149},[139,114958,105658],{"class":153},[139,114960,157],{"class":145},[139,114962,619],{"class":149},[139,114964,114119],{"class":160},[139,114966,625],{"class":153},[139,114968,1676],{"class":145},[139,114970,631],{"class":153},[139,114972,634],{"class":160},[139,114974,164],{"class":145},[19,114976,114977,114978,114981,114982,114984],{},"如果 site 没找到，就主动报错。",[50,114979,114980],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[50,114983,1676],{}," 的值放进字符串里。",[130,114986,114988],{"className":132,"code":114987,"language":134,"meta":135,"style":135},"return data.site_xpos[site_id].copy()\n",[50,114989,114990],{"__ignoreMap":135},[139,114991,114992,114994],{"class":141,"line":142},[139,114993,19313],{"class":149},[139,114995,114136],{"class":145},[19,114997,114998,114999,115001,115002,115005],{},"返回这个 site 的世界坐标。",[50,115000,105903],{}," 里的每一行都是一个 site 的 ",[50,115003,115004],{},"(x, y, z)"," 坐标。",[130,115007,115009],{"className":132,"code":115008,"language":134,"meta":135,"style":135},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[50,115010,115011],{"__ignoreMap":135},[139,115012,115013,115015,115017],{"class":141,"line":142},[139,115014,778],{"class":149},[139,115016,114151],{"class":781},[139,115018,114154],{"class":145},[19,115020,115021],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[130,115023,115025],{"className":132,"code":115024,"language":134,"meta":135,"style":135},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[50,115026,115027,115039],{"__ignoreMap":135},[139,115028,115029,115031,115033,115035,115037],{"class":141,"line":142},[139,115030,113789],{"class":145},[139,115032,150],{"class":149},[139,115034,114164],{"class":145},[139,115036,113757],{"class":160},[139,115038,164],{"class":145},[139,115040,115041,115043,115045,115047,115049],{"class":141,"line":210},[139,115042,113799],{"class":145},[139,115044,150],{"class":149},[139,115046,114164],{"class":145},[139,115048,114180],{"class":160},[139,115050,164],{"class":145},[19,115052,115053],{},"分别读取末端点和目标点的世界坐标。",[130,115055,115056],{"className":132,"code":114728,"language":134,"meta":135,"style":135},[50,115057,115058],{"__ignoreMap":135},[139,115059,115060,115062],{"class":141,"line":142},[139,115061,19313],{"class":149},[139,115063,114189],{"class":145},[19,115065,115066],{},"把四部分拼成一个观测数组：",[130,115068,115071],{"className":115069,"code":115070,"language":645,"meta":135},[643],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[50,115072,115070],{"__ignoreMap":135},[130,115074,115076],{"className":132,"code":115075,"language":134,"meta":135,"style":135},"dist = np.linalg.norm(tip - target)\n",[50,115077,115078],{"__ignoreMap":135},[139,115079,115080,115082,115084,115086,115088],{"class":141,"line":142},[139,115081,113817],{"class":145},[139,115083,150],{"class":149},[139,115085,113822],{"class":145},[139,115087,855],{"class":149},[139,115089,113827],{"class":145},[19,115091,115092,115093,115096,115097,115100],{},"计算 tip 到 target 的距离。",[50,115094,115095],{},"tip - target"," 得到一个三维向量，",[50,115098,115099],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115102,16904],{},[130,115104,115107],{"className":115105,"code":115106,"language":645,"meta":135},[643],"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",[50,115108,115106],{"__ignoreMap":135},[130,115110,115112],{"className":132,"code":115111,"language":134,"meta":135,"style":135},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[50,115113,115114],{"__ignoreMap":135},[139,115115,115116,115118,115120,115122,115124],{"class":141,"line":142},[139,115117,114763],{"class":145},[139,115119,150],{"class":149},[139,115121,114258],{"class":153},[139,115123,8792],{"class":149},[139,115125,114263],{"class":145},[19,115127,115128,115129,115132,115133,115136],{},"计算动作惩罚。",[50,115130,115131],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[50,115134,115135],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[130,115138,115140],{"className":132,"code":115139,"language":134,"meta":135,"style":135},"return float(-dist - control_cost)\n",[50,115141,115142],{"__ignoreMap":135},[139,115143,115144,115146,115148,115150,115152,115154,115156],{"class":141,"line":142},[139,115145,19313],{"class":149},[139,115147,112018],{"class":153},[139,115149,157],{"class":145},[139,115151,855],{"class":149},[139,115153,113817],{"class":145},[139,115155,855],{"class":149},[139,115157,114280],{"class":145},[19,115159,115160],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[130,115162,115163],{"className":132,"code":113024,"language":134,"meta":135,"style":135},[50,115164,115165],{"__ignoreMap":135},[139,115166,115167,115169,115171],{"class":141,"line":142},[139,115168,113031],{"class":145},[139,115170,150],{"class":149},[139,115172,106984],{"class":153},[19,115174,115175],{},"累计奖励变量，记录整个运行过程的总分。",[130,115177,115179],{"className":132,"code":115178,"language":134,"meta":135,"style":135},"for step in range(500):\n",[50,115180,115181],{"__ignoreMap":135},[139,115182,115183,115185,115187,115189,115191,115193,115195],{"class":141,"line":142},[139,115184,1970],{"class":149},[139,115186,33865],{"class":145},[139,115188,1976],{"class":149},[139,115190,34690],{"class":153},[139,115192,157],{"class":145},[139,115194,67305],{"class":153},[139,115196,558],{"class":145},[19,115198,115199],{},"运行 500 个控制步。",[130,115201,115202],{"className":132,"code":106766,"language":134,"meta":135,"style":135},[50,115203,115204],{"__ignoreMap":135},[139,115205,115206],{"class":141,"line":142},[139,115207,106766],{"class":145},[19,115209,115210,115211,103245,115213,115215],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[50,115212,105455],{},[50,115214,105458],{}," 是当前状态下的坐标。",[130,115217,115219],{"className":132,"code":115218,"language":134,"meta":135,"style":135},"error = target - tip\n",[50,115220,115221],{"__ignoreMap":135},[139,115222,115223,115225,115227,115229,115231],{"class":141,"line":142},[139,115224,114816],{"class":145},[139,115226,150],{"class":149},[139,115228,114389],{"class":145},[139,115230,855],{"class":149},[139,115232,114394],{"class":145},[19,115234,115235],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[130,115237,115239],{"className":132,"code":115238,"language":134,"meta":135,"style":135},"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",[50,115240,115241,115273],{"__ignoreMap":135},[139,115242,115243,115245,115247,115249,115251,115253,115255,115257,115259,115261,115263,115265,115267,115269,115271],{"class":141,"line":142},[139,115244,108094],{"class":145},[139,115246,2634],{"class":153},[139,115248,6721],{"class":145},[139,115250,150],{"class":149},[139,115252,114411],{"class":145},[139,115254,107483],{"class":153},[139,115256,8792],{"class":149},[139,115258,114418],{"class":145},[139,115260,416],{"class":153},[139,115262,1484],{"class":145},[139,115264,855],{"class":149},[139,115266,104627],{"class":153},[139,115268,413],{"class":145},[139,115270,104627],{"class":153},[139,115272,164],{"class":145},[139,115274,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303],{"class":141,"line":210},[139,115276,108094],{"class":145},[139,115278,410],{"class":153},[139,115280,6721],{"class":145},[139,115282,150],{"class":149},[139,115284,114411],{"class":145},[139,115286,107483],{"class":153},[139,115288,8792],{"class":149},[139,115290,114418],{"class":145},[139,115292,2634],{"class":153},[139,115294,1484],{"class":145},[139,115296,855],{"class":149},[139,115298,104627],{"class":153},[139,115300,413],{"class":145},[139,115302,104627],{"class":153},[139,115304,164],{"class":145},[19,115306,115307,115308,115311],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[50,115309,115310],{},"error -> ctrl -> step"," 的流程。",[130,115313,115314],{"className":132,"code":106728,"language":134,"meta":135,"style":135},[50,115315,115316],{"__ignoreMap":135},[139,115317,115318],{"class":141,"line":142},[139,115319,106728],{"class":145},[19,115321,115322],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[130,115324,115326],{"className":132,"code":115325,"language":134,"meta":135,"style":135},"obs = get_obs(model, data)\n",[50,115327,115328],{"__ignoreMap":135},[139,115329,115330,115332,115334],{"class":141,"line":142},[139,115331,113075],{"class":145},[139,115333,150],{"class":149},[139,115335,114511],{"class":145},[19,115337,115338,115339,115342],{},"读取最新观测。后面打印 ",[50,115340,115341],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115344,104540],{"id":104539},[19,115346,115347],{},"观测维度为:",[130,115349,115352],{"className":115350,"code":115351,"language":645,"meta":135},[643],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[50,115353,115351],{"__ignoreMap":135},[19,115355,115356],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115358,115359],{},"程序每 100 步打印：",[130,115361,115364],{"className":115362,"code":115363,"language":645,"meta":135},[643],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[50,115365,115363],{"__ignoreMap":135},[19,115367,115368,115369,115371],{},"如果控制有效，你应该看到最终 ",[50,115370,105455],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115373,104572],{"id":104571},[1760,115375,115376,115379,115382,115388,115394,115401,115411],{},[1763,115377,115378],{},"修改目标点位置。",[1763,115380,115381],{},"重新运行，观察最终 tip 是否变化。",[1763,115383,115384,115385,115387],{},"把 gravity 改成 ",[50,115386,104813],{},"，观察控制是否变差。",[1763,115389,113402,115390,113406,115392,170],{},[50,115391,104382],{},[50,115393,416],{},[1763,115395,104635,115396,104638,115398,115400],{},[50,115397,112817],{},[50,115399,109530],{},"，观察机械臂是否更难移动。",[1763,115402,104635,115403,84758,115405,104638,115407,115410],{},[50,115404,105458],{},[50,115406,106369],{},[50,115408,115409],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1763,115412,115413],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115415,104677],{"id":104676},[1217,115417,115419],{"id":115418},"site-not-found",[50,115420,115421],{},"site not found",[19,115423,115424,115425,103245,115428,170],{},"检查 XML 中是否有 ",[50,115426,115427],{},"site name=\"tip\"",[50,115429,115430],{},"site name=\"target\"",[1217,115432,115433],{"id":115433},"机械臂完全不动",[19,115435,104747],{},[1760,115437,115438,115443,115446,115451],{},[1763,115439,115440,115442],{},[50,115441,104382],{}," 是否为 2",[1763,115444,115445],{},"actuator 是否引用正确 joint",[1763,115447,115448,115450],{},[50,115449,103303],{}," 是否被赋值",[1763,115452,115453,115454],{},"是否执行了 ",[50,115455,102912],{},[1217,115457,115458],{"id":115458},"控制效果不好",[19,115460,115461],{},"正常。本章重点不是控制器最优，而是任务结构:",[130,115463,115466],{"className":115464,"code":115465,"language":645,"meta":135},[643],"obs → action → mj_step → reward → next_obs\n",[50,115467,115465],{"__ignoreMap":135},[1217,115469,115471],{"id":115470},"tip-坐标不变化","tip 坐标不变化",[19,115473,104799],{},[1760,115475,115476,115481,115489,115498],{},[1763,115477,115478,115479,170],{},"是否每步调用了 ",[50,115480,102912],{},[1763,115482,115483,115484,103245,115486,170],{},"是否写入了 ",[50,115485,108349],{},[50,115487,115488],{},"data.ctrl[1]",[1763,115490,115491,115492,2655,115495,170],{},"actuator 是否正确引用 ",[50,115493,115494],{},"joint1",[50,115496,115497],{},"joint2",[1763,115499,115500],{},"控制输入是否太小。",[1217,115502,115503],{"id":115503},"目标点不会动",[19,115505,115506],{},"本章的 target 是固定 site：",[130,115508,115510],{"className":55302,"code":115509,"language":55304,"meta":135,"style":135},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[50,115511,115512],{"__ignoreMap":135},[139,115513,115514,115516,115518,115520,115522,115524,115526,115528,115531],{"class":141,"line":142},[139,115515,796],{"class":145},[139,115517,105434],{"class":53538},[139,115519,17189],{"class":781},[139,115521,150],{"class":145},[139,115523,114180],{"class":160},[139,115525,103333],{"class":781},[139,115527,150],{"class":145},[139,115529,115530],{"class":160},"\"0.5 0 0.4\"",[139,115532,115533],{"class":145}," ...\u002F>\n",[19,115535,115536,115537,115539],{},"它直接挂在 ",[50,115538,104066],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1217,115541,115542],{"id":115542},"机械臂不像真实机械臂",[19,115544,115545],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115547,104831],{"id":104830},[19,115549,115550],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115552,115553],{},"核心公式：",[130,115555,115558],{"className":115556,"code":115557,"language":645,"meta":135},[643],"distance = ||tip - target||\nreward = -distance - action_cost\n",[50,115559,115557],{"__ignoreMap":135},[19,115561,115562],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2348,115564,115565],{},"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":135,"searchDepth":210,"depth":210,"links":115567},[115568,115569,115570,115575,115579,115580,115581,115589],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":115571},[115572,115573,115574],{"id":113772,"depth":254,"text":113773},{"id":113848,"depth":254,"text":113848},{"id":113878,"depth":254,"text":113879},{"id":103479,"depth":210,"text":103480,"children":115576},[115577,115578],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":115582},[115583,115584,115585,115586,115587,115588],{"id":115418,"depth":254,"text":115421},{"id":115433,"depth":254,"text":115433},{"id":115458,"depth":254,"text":115458},{"id":115470,"depth":254,"text":115471},{"id":115503,"depth":254,"text":115503},{"id":115542,"depth":254,"text":115542},{"id":104830,"depth":210,"text":104831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113576,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115596,"title":115597,"body":115598,"description":135,"extension":2385,"meta":119060,"navigation":842,"path":119061,"seo":119062,"stem":119063,"__hash__":119064},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115599,"toc":119031},[115600,115603,115605,115608,115611,115636,115639,115645,115648,115654,115656,115658,115682,115684,115702,115704,115747,115749,115776,115778,115781,115833,115836,115842,115851,115854,115892,115895,115934,115937,115945,115952,115955,115961,115963,116017,116024,116069,116072,116076,116092,116102,116104,117365,117367,117379,117381,117392,117394,117397,117418,117421,117424,117457,117463,117466,117499,117502,117505,117546,117551,117565,117568,117581,117586,117609,117611,117626,117636,117651,117658,117678,117693,117711,117714,117731,117739,117755,117761,117793,117806,117838,117848,117883,117897,117943,117957,117999,118010,118023,118029,118062,118065,118092,118102,118142,118152,118169,118176,118194,118197,118238,118251,118266,118269,118292,118295,118307,118310,118329,118334,118355,118358,118373,118376,118410,118422,118437,118440,118465,118468,118487,118490,118522,118525,118549,118555,118585,118592,118605,118608,118610,118612,118618,118621,118624,118636,118639,118641,118695,118697,118701,118707,118716,118719,118726,118728,118751,118754,118758,118760,118778,118784,118786,118819,118822,118828,118832,118835,118855,118860,118864,118871,118891,118896,118900,118903,118923,118926,119012,119016,119019,119025,119028],[10,115601,115597],{"id":115602},"_8gymnasium-风格强化学习接口基础",[14,115604,102874],{"id":102873},[19,115606,115607],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115609,115610],{},"你将实现:",[130,115612,115614],{"className":132,"code":115613,"language":134,"meta":135,"style":135},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[50,115615,115616,115626],{"__ignoreMap":135},[139,115617,115618,115621,115623],{"class":141,"line":142},[139,115619,115620],{"class":145},"obs, info ",[139,115622,150],{"class":149},[139,115624,115625],{"class":145}," env.reset()\n",[139,115627,115628,115631,115633],{"class":141,"line":210},[139,115629,115630],{"class":145},"obs, reward, terminated, truncated, info ",[139,115632,150],{"class":149},[139,115634,115635],{"class":145}," env.step(action)\n",[19,115637,115638],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115640,115641,115642,115644],{},"前面章节的代码都是“脚本式”的：在 ",[50,115643,104519],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115646,115647],{},"可以先记住 Gymnasium 环境的核心交互：",[130,115649,115652],{"className":115650,"code":115651,"language":645,"meta":135},[643],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[50,115653,115651],{"__ignoreMap":135},[14,115655,102997],{"id":102996},[19,115657,103000],{},[130,115659,115660],{"className":1830,"code":106611,"language":1832,"meta":135,"style":135},[50,115661,115662],{"__ignoreMap":135},[139,115663,115664,115666,115668,115670,115672,115674,115676,115678,115680],{"class":141,"line":142},[139,115665,26840],{"class":781},[139,115667,28575],{"class":160},[139,115669,1841],{"class":160},[139,115671,28660],{"class":153},[139,115673,106626],{"class":160},[139,115675,103025],{"class":160},[139,115677,104725],{"class":160},[139,115679,103041],{"class":160},[139,115681,106635],{"class":160},[19,115683,105043],{},[130,115685,115687],{"className":1830,"code":115686,"language":1832,"meta":135,"style":135},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[50,115688,115689],{"__ignoreMap":135},[139,115690,115691,115693,115695,115697,115699],{"class":141,"line":142},[139,115692,1826],{"class":781},[139,115694,1841],{"class":160},[139,115696,103157],{"class":160},[139,115698,109934],{"class":160},[139,115700,115701],{"class":160}," gymnasium\n",[19,115703,105060],{},[130,115705,115707],{"className":1830,"code":115706,"language":1832,"meta":135,"style":135},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[50,115708,115709,115726,115735],{"__ignoreMap":135},[139,115710,115711,115713,115715,115717,115720,115722,115724],{"class":141,"line":142},[139,115712,32589],{"class":781},[139,115714,31435],{"class":160},[139,115716,27378],{"class":153},[139,115718,115719],{"class":160}," mujoco-gym-api",[139,115721,103202],{"class":160},[139,115723,103205],{"class":153},[139,115725,103208],{"class":153},[139,115727,115728,115730,115732],{"class":141,"line":210},[139,115729,32589],{"class":781},[139,115731,103215],{"class":160},[139,115733,115734],{"class":160}," mujoco-gym-api\n",[139,115736,115737,115739,115741,115743,115745],{"class":141,"line":254},[139,115738,1826],{"class":781},[139,115740,1841],{"class":160},[139,115742,103157],{"class":160},[139,115744,109934],{"class":160},[139,115746,115701],{"class":160},[19,115748,103231],{},[1760,115750,115751,115761,115764,115770],{},[1763,115752,115753,115754,115757,115758,170],{},"本章使用 ",[50,115755,115756],{},"gymnasium","，不是旧版 ",[50,115759,115760],{},"gym",[1763,115762,115763],{},"Gymnasium API 与旧 Gym API 有差异。",[1763,115765,115766,115767,170],{},"旧 Gym 常见返回值是 4 个: ",[50,115768,115769],{},"obs, reward, done, info",[1763,115771,115772,115773,170],{},"Gymnasium 返回值是 5 个: ",[50,115774,115775],{},"obs, reward, terminated, truncated, info",[14,115777,103272],{"id":103271},[19,115779,115780],{},"强化学习环境接口包含:",[26,115782,115783,115792],{},[29,115784,115785],{},[32,115786,115787,115790],{},[35,115788,115789],{"align":26003},"方法",[35,115791,104920],{"align":26003},[42,115793,115794,115804,115814,115824],{},[32,115795,115796,115801],{},[47,115797,115798],{"align":26003},[50,115799,115800],{},"reset()",[47,115802,115803],{"align":26003},"重置环境",[32,115805,115806,115811],{},[47,115807,115808],{"align":26003},[50,115809,115810],{},"step(action)",[47,115812,115813],{"align":26003},"执行动作",[32,115815,115816,115821],{},[47,115817,115818],{"align":26003},[50,115819,115820],{},"observation_space",[47,115822,115823],{"align":26003},"观测空间",[32,115825,115826,115831],{},[47,115827,115828],{"align":26003},[50,115829,115830],{},"action_space",[47,115832,25921],{"align":26003},[19,115834,115835],{},"一个最小环境需要完成:",[130,115837,115840],{"className":115838,"code":115839,"language":645,"meta":135},[643],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[50,115841,115839],{"__ignoreMap":135},[1217,115843,115845,103245,115848,106861],{"id":115844},"terminated-和-truncated-的区别",[50,115846,115847],{},"terminated",[50,115849,115850],{},"truncated",[19,115852,115853],{},"Gymnasium 把“结束”拆成两个概念：",[26,115855,115856,115866],{},[29,115857,115858],{},[32,115859,115860,115862,115864],{},[35,115861,106797],{"align":26003},[35,115863,102927],{"align":26003},[35,115865,23454],{"align":26003},[42,115867,115868,115880],{},[32,115869,115870,115874,115877],{},[47,115871,115872],{"align":26003},[50,115873,115847],{},[47,115875,115876],{"align":26003},"任务自然结束",[47,115878,115879],{"align":26003},"机械臂到达目标、机器人摔倒",[32,115881,115882,115886,115889],{},[47,115883,115884],{"align":26003},[50,115885,115850],{},[47,115887,115888],{"align":26003},"因外部限制截断",[47,115890,115891],{"align":26003},"达到最大步数、时间限制",[19,115893,115894],{},"本章中：",[130,115896,115898],{"className":132,"code":115897,"language":134,"meta":135,"style":135},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[50,115899,115900,115915],{"__ignoreMap":135},[139,115901,115902,115905,115907,115910,115912],{"class":141,"line":142},[139,115903,115904],{"class":145},"terminated ",[139,115906,150],{"class":149},[139,115908,115909],{"class":145}," dist ",[139,115911,796],{"class":149},[139,115913,115914],{"class":153}," 0.05\n",[139,115916,115917,115920,115922,115924,115927,115929,115931],{"class":141,"line":210},[139,115918,115919],{"class":145},"truncated ",[139,115921,150],{"class":149},[139,115923,41116],{"class":153},[139,115925,115926],{"class":145},".steps ",[139,115928,3998],{"class":149},[139,115930,41116],{"class":153},[139,115932,115933],{"class":145},".max_steps\n",[19,115935,115936],{},"也就是：",[1760,115938,115939,115942],{},[1763,115940,115941],{},"末端距离目标小于 0.05，任务成功结束。",[1763,115943,115944],{},"步数超过上限，episode 被截断。",[1217,115946,115948,103245,115950],{"id":115947},"observation_space-和-action_space",[50,115949,115820],{},[50,115951,115830],{},[19,115953,115954],{},"这两个对象告诉算法：",[130,115956,115959],{"className":115957,"code":115958,"language":645,"meta":135},[643],"观测长什么样\n动作允许多大\n",[50,115960,115958],{"__ignoreMap":135},[19,115962,16904],{},[130,115964,115966],{"className":132,"code":115965,"language":134,"meta":135,"style":135},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[50,115967,115968],{"__ignoreMap":135},[139,115969,115970,115972,115975,115977,115980,115983,115986,115988,115990,115993,115995,115997,115999,116001,116003,116005,116007,116010,116012,116014],{"class":141,"line":142},[139,115971,33075],{"class":153},[139,115973,115974],{"class":145},".action_space ",[139,115976,150],{"class":149},[139,115978,115979],{"class":145}," spaces.Box(",[139,115981,115982],{"class":2111},"low",[139,115984,115985],{"class":149},"=-",[139,115987,104627],{"class":153},[139,115989,413],{"class":145},[139,115991,115992],{"class":2111},"high",[139,115994,150],{"class":149},[139,115996,104627],{"class":153},[139,115998,413],{"class":145},[139,116000,98190],{"class":2111},[139,116002,150],{"class":149},[139,116004,157],{"class":145},[139,116006,416],{"class":153},[139,116008,116009],{"class":145},",), ",[139,116011,95728],{"class":2111},[139,116013,150],{"class":149},[139,116015,116016],{"class":145},"np.float32)\n",[19,116018,116019,116020,116023],{},"表示动作是 2 维数组，每个值都在 ",[50,116021,116022],{},"[-1, 1]"," 范围内。",[130,116025,116027],{"className":132,"code":116026,"language":134,"meta":135,"style":135},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[50,116028,116029],{"__ignoreMap":135},[139,116030,116031,116033,116036,116038,116040,116042,116044,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067],{"class":141,"line":142},[139,116032,33075],{"class":153},[139,116034,116035],{"class":145},".observation_space ",[139,116037,150],{"class":149},[139,116039,115979],{"class":145},[139,116041,115982],{"class":2111},[139,116043,115985],{"class":149},[139,116045,116046],{"class":145},"np.inf, ",[139,116048,115992],{"class":2111},[139,116050,150],{"class":149},[139,116052,116046],{"class":145},[139,116054,98190],{"class":2111},[139,116056,150],{"class":149},[139,116058,157],{"class":145},[139,116060,536],{"class":153},[139,116062,116009],{"class":145},[139,116064,95728],{"class":2111},[139,116066,150],{"class":149},[139,116068,116016],{"class":145},[19,116070,116071],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1217,116073,116075],{"id":116074},"frame_skip-是什么","frame_skip 是什么",[130,116077,116079],{"className":132,"code":116078,"language":134,"meta":135,"style":135},"self.frame_skip = 5\n",[50,116080,116081],{"__ignoreMap":135},[139,116082,116083,116085,116088,116090],{"class":141,"line":142},[139,116084,33075],{"class":153},[139,116086,116087],{"class":145},".frame_skip ",[139,116089,150],{"class":149},[139,116091,56661],{"class":153},[19,116093,116094,116095,116098,116099,116101],{},"表示外部调用一次 ",[50,116096,116097],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[50,116100,103442],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116103,103480],{"id":103479},[130,116105,116107],{"className":132,"code":116106,"language":134,"meta":135,"style":135},"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",[50,116108,116109,116121,116127,116137,116148,116152,116156,116164,116169,116173,116177,116181,116185,116189,116193,116197,116202,116206,116210,116214,116219,116223,116227,116231,116235,116239,116243,116247,116251,116255,116259,116263,116267,116271,116289,116304,116308,116321,116331,116346,116363,116367,116388,116407,116432,116446,116450,116460,116472,116482,116486,116528,116566,116570,116580,116596,116611,116630,116637,116641,116654,116669,116684,116697,116716,116732,116736,116777,116792,116807,116811,116850,116861,116874,116878,116888,116897,116901,116911,116926,116944,116948,116959,116976,116989,116993,117003,117007,117018,117029,117033,117047,117061,117077,117081,117094,117111,117126,117133,117137,117141,117153,117163,117181,117193,117205,117209,117217,117233,117242,117251,117259,117301,117314,117319,117323,117341,117345,117349,117361],{"__ignoreMap":135},[139,116110,116111,116113,116116,116118],{"class":141,"line":142},[139,116112,1064],{"class":149},[139,116114,116115],{"class":145}," gymnasium ",[139,116117,1035],{"class":149},[139,116119,116120],{"class":145}," gym\n",[139,116122,116123,116125],{"class":141,"line":210},[139,116124,1064],{"class":149},[139,116126,103528],{"class":145},[139,116128,116129,116131,116133,116135],{"class":141,"line":254},[139,116130,1064],{"class":149},[139,116132,33630],{"class":145},[139,116134,1035],{"class":149},[139,116136,33635],{"class":145},[139,116138,116139,116141,116143,116145],{"class":141,"line":262},[139,116140,1265],{"class":149},[139,116142,116115],{"class":145},[139,116144,1064],{"class":149},[139,116146,116147],{"class":145}," spaces\n",[139,116149,116150],{"class":141,"line":313},[139,116151,843],{"emptyLinePlaceholder":842},[139,116153,116154],{"class":141,"line":462},[139,116155,843],{"emptyLinePlaceholder":842},[139,116157,116158,116160,116162],{"class":141,"line":474},[139,116159,103541],{"class":153},[139,116161,15836],{"class":149},[139,116163,103546],{"class":160},[139,116165,116166],{"class":141,"line":484},[139,116167,116168],{"class":160},"\u003Cmujoco model=\"gym_reacher\">\n",[139,116170,116171],{"class":141,"line":989},[139,116172,113959],{"class":160},[139,116174,116175],{"class":141,"line":994},[139,116176,843],{"emptyLinePlaceholder":842},[139,116178,116179],{"class":141,"line":999},[139,116180,103565],{"class":160},[139,116182,116183],{"class":141,"line":1006},[139,116184,113977],{"class":160},[139,116186,116187],{"class":141,"line":1027},[139,116188,843],{"emptyLinePlaceholder":842},[139,116190,116191],{"class":141,"line":1040},[139,116192,113986],{"class":160},[139,116194,116195],{"class":141,"line":2160},[139,116196,113991],{"class":160},[139,116198,116199],{"class":141,"line":2188},[139,116200,116201],{"class":160},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[139,116203,116204],{"class":141,"line":3944},[139,116205,843],{"emptyLinePlaceholder":842},[139,116207,116208],{"class":141,"line":3963},[139,116209,114005],{"class":160},[139,116211,116212],{"class":141,"line":3968},[139,116213,114010],{"class":160},[139,116215,116216],{"class":141,"line":3982},[139,116217,116218],{"class":160},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[139,116220,116221],{"class":141,"line":3987},[139,116222,114020],{"class":160},[139,116224,116225],{"class":141,"line":4014},[139,116226,108661],{"class":160},[139,116228,116229],{"class":141,"line":4019},[139,116230,103594],{"class":160},[139,116232,116233],{"class":141,"line":4036},[139,116234,103599],{"class":160},[139,116236,116237],{"class":141,"line":4041},[139,116238,843],{"emptyLinePlaceholder":842},[139,116240,116241],{"class":141,"line":4046},[139,116242,108678],{"class":160},[139,116244,116245],{"class":141,"line":4051},[139,116246,114045],{"class":160},[139,116248,116249],{"class":141,"line":4065},[139,116250,114050],{"class":160},[139,116252,116253],{"class":141,"line":4070},[139,116254,108688],{"class":160},[139,116256,116257],{"class":141,"line":4860},[139,116258,103604],{"class":160},[139,116260,116261],{"class":141,"line":4874},[139,116262,97925],{"class":160},[139,116264,116265],{"class":141,"line":4882},[139,116266,843],{"emptyLinePlaceholder":842},[139,116268,116269],{"class":141,"line":4887},[139,116270,843],{"emptyLinePlaceholder":842},[139,116272,116273,116275,116278,116280,116282,116284,116287],{"class":141,"line":4893},[139,116274,915],{"class":149},[139,116276,116277],{"class":781}," ReacherEnv",[139,116279,157],{"class":145},[139,116281,115760],{"class":781},[139,116283,2993],{"class":145},[139,116285,116286],{"class":781},"Env",[139,116288,558],{"class":145},[139,116290,116291,116294,116296,116298,116301],{"class":141,"line":4899},[139,116292,116293],{"class":145},"    metadata ",[139,116295,150],{"class":149},[139,116297,6726],{"class":145},[139,116299,116300],{"class":160},"\"render_modes\"",[139,116302,116303],{"class":145},": []}\n",[139,116305,116306],{"class":141,"line":4904},[139,116307,843],{"emptyLinePlaceholder":842},[139,116309,116310,116312,116314,116317,116319],{"class":141,"line":10222},[139,116311,33053],{"class":149},[139,116313,33056],{"class":153},[139,116315,116316],{"class":145},"(self) -> ",[139,116318,97913],{"class":153},[139,116320,246],{"class":145},[139,116322,116323,116325,116327,116329],{"class":141,"line":10246},[139,116324,33069],{"class":153},[139,116326,19528],{"class":145},[139,116328,33081],{"class":153},[139,116330,4262],{"class":145},[139,116332,116333,116335,116338,116340,116342,116344],{"class":141,"line":10251},[139,116334,33097],{"class":153},[139,116336,116337],{"class":145},".model ",[139,116339,150],{"class":149},[139,116341,103639],{"class":145},[139,116343,103541],{"class":153},[139,116345,164],{"class":145},[139,116347,116348,116350,116353,116355,116358,116360],{"class":141,"line":10257},[139,116349,33097],{"class":153},[139,116351,116352],{"class":145},".data ",[139,116354,150],{"class":149},[139,116356,116357],{"class":145}," mujoco.MjData(",[139,116359,33075],{"class":153},[139,116361,116362],{"class":145},".model)\n",[139,116364,116365],{"class":141,"line":10284},[139,116366,843],{"emptyLinePlaceholder":842},[139,116368,116369,116371,116374,116376,116379,116381,116384,116386],{"class":141,"line":10289},[139,116370,33097],{"class":153},[139,116372,116373],{"class":145},".tip_site_id ",[139,116375,150],{"class":149},[139,116377,116378],{"class":145}," mujoco.mj_name2id(",[139,116380,33075],{"class":153},[139,116382,116383],{"class":145},".model, mujoco.mjtObj.mjOBJ_SITE, ",[139,116385,113757],{"class":160},[139,116387,164],{"class":145},[139,116389,116390,116392,116395,116397,116399,116401,116403,116405],{"class":141,"line":10295},[139,116391,33097],{"class":153},[139,116393,116394],{"class":145},".target_site_id ",[139,116396,150],{"class":149},[139,116398,116378],{"class":145},[139,116400,33075],{"class":153},[139,116402,116383],{"class":145},[139,116404,114180],{"class":160},[139,116406,164],{"class":145},[139,116408,116409,116411,116413,116415,116417,116419,116422,116424,116426,116428,116430],{"class":141,"line":10307},[139,116410,4780],{"class":149},[139,116412,41116],{"class":153},[139,116414,116373],{"class":145},[139,116416,796],{"class":149},[139,116418,799],{"class":153},[139,116420,116421],{"class":149}," or",[139,116423,41116],{"class":153},[139,116425,116394],{"class":145},[139,116427,796],{"class":149},[139,116429,799],{"class":153},[139,116431,246],{"class":145},[139,116433,116434,116437,116439,116441,116444],{"class":141,"line":10319},[139,116435,116436],{"class":149},"            raise",[139,116438,105658],{"class":153},[139,116440,157],{"class":145},[139,116442,116443],{"class":160},"\"required sites not found\"",[139,116445,164],{"class":145},[139,116447,116448],{"class":141,"line":10331},[139,116449,843],{"emptyLinePlaceholder":842},[139,116451,116452,116454,116456,116458],{"class":141,"line":11990},[139,116453,33097],{"class":153},[139,116455,116087],{"class":145},[139,116457,150],{"class":149},[139,116459,56661],{"class":153},[139,116461,116462,116464,116467,116469],{"class":141,"line":12015},[139,116463,33097],{"class":153},[139,116465,116466],{"class":145},".max_steps ",[139,116468,150],{"class":149},[139,116470,116471],{"class":153}," 200\n",[139,116473,116474,116476,116478,116480],{"class":141,"line":12038},[139,116475,33097],{"class":153},[139,116477,115926],{"class":145},[139,116479,150],{"class":149},[139,116481,49571],{"class":153},[139,116483,116484],{"class":141,"line":12062},[139,116485,843],{"emptyLinePlaceholder":842},[139,116487,116488,116490,116492,116494,116496,116498,116500,116502,116504,116506,116508,116510,116512,116514,116516,116518,116520,116522,116524,116526],{"class":141,"line":12067},[139,116489,33097],{"class":153},[139,116491,115974],{"class":145},[139,116493,150],{"class":149},[139,116495,115979],{"class":145},[139,116497,115982],{"class":2111},[139,116499,115985],{"class":149},[139,116501,104627],{"class":153},[139,116503,413],{"class":145},[139,116505,115992],{"class":2111},[139,116507,150],{"class":149},[139,116509,104627],{"class":153},[139,116511,413],{"class":145},[139,116513,98190],{"class":2111},[139,116515,150],{"class":149},[139,116517,157],{"class":145},[139,116519,416],{"class":153},[139,116521,116009],{"class":145},[139,116523,95728],{"class":2111},[139,116525,150],{"class":149},[139,116527,116016],{"class":145},[139,116529,116530,116532,116534,116536,116538,116540,116542,116544,116546,116548,116550,116552,116554,116556,116558,116560,116562,116564],{"class":141,"line":12072},[139,116531,33097],{"class":153},[139,116533,116035],{"class":145},[139,116535,150],{"class":149},[139,116537,115979],{"class":145},[139,116539,115982],{"class":2111},[139,116541,115985],{"class":149},[139,116543,116046],{"class":145},[139,116545,115992],{"class":2111},[139,116547,150],{"class":149},[139,116549,116046],{"class":145},[139,116551,98190],{"class":2111},[139,116553,150],{"class":149},[139,116555,157],{"class":145},[139,116557,536],{"class":153},[139,116559,116009],{"class":145},[139,116561,95728],{"class":2111},[139,116563,150],{"class":149},[139,116565,116016],{"class":145},[139,116567,116568],{"class":141,"line":12077},[139,116569,843],{"emptyLinePlaceholder":842},[139,116571,116572,116574,116577],{"class":141,"line":12086},[139,116573,33053],{"class":149},[139,116575,116576],{"class":781}," _get_obs",[139,116578,116579],{"class":145},"(self) -> np.ndarray:\n",[139,116581,116582,116584,116586,116588,116591,116593],{"class":141,"line":12091},[139,116583,114358],{"class":145},[139,116585,150],{"class":149},[139,116587,41116],{"class":153},[139,116589,116590],{"class":145},".data.site_xpos[",[139,116592,33075],{"class":153},[139,116594,116595],{"class":145},".tip_site_id].copy()\n",[139,116597,116598,116600,116602,116604,116606,116608],{"class":141,"line":12097},[139,116599,114371],{"class":145},[139,116601,150],{"class":149},[139,116603,41116],{"class":153},[139,116605,116590],{"class":145},[139,116607,33075],{"class":153},[139,116609,116610],{"class":145},".target_site_id].copy()\n",[139,116612,116613,116615,116617,116620,116622,116625,116627],{"class":141,"line":12118},[139,116614,112403],{"class":145},[139,116616,150],{"class":149},[139,116618,116619],{"class":145}," np.concatenate([",[139,116621,33075],{"class":153},[139,116623,116624],{"class":145},".data.qpos.copy(), ",[139,116626,33075],{"class":153},[139,116628,116629],{"class":145},".data.qvel.copy(), tip, target])\n",[139,116631,116632,116634],{"class":141,"line":12124},[139,116633,2085],{"class":149},[139,116635,116636],{"class":145}," obs.astype(np.float32)\n",[139,116638,116639],{"class":141,"line":12138},[139,116640,843],{"emptyLinePlaceholder":842},[139,116642,116643,116645,116648,116650,116652],{"class":141,"line":12144},[139,116644,33053],{"class":149},[139,116646,116647],{"class":781}," _get_reward",[139,116649,116316],{"class":145},[139,116651,2496],{"class":153},[139,116653,246],{"class":145},[139,116655,116656,116658,116660,116662,116664,116666],{"class":141,"line":12171},[139,116657,114358],{"class":145},[139,116659,150],{"class":149},[139,116661,41116],{"class":153},[139,116663,116590],{"class":145},[139,116665,33075],{"class":153},[139,116667,116668],{"class":145},".tip_site_id]\n",[139,116670,116671,116673,116675,116677,116679,116681],{"class":141,"line":12180},[139,116672,114371],{"class":145},[139,116674,150],{"class":149},[139,116676,41116],{"class":153},[139,116678,116590],{"class":145},[139,116680,33075],{"class":153},[139,116682,116683],{"class":145},".target_site_id]\n",[139,116685,116686,116689,116691,116693,116695],{"class":141,"line":12186},[139,116687,116688],{"class":145},"        dist ",[139,116690,150],{"class":149},[139,116692,113822],{"class":145},[139,116694,855],{"class":149},[139,116696,113827],{"class":145},[139,116698,116699,116702,116704,116706,116708,116711,116713],{"class":141,"line":12194},[139,116700,116701],{"class":145},"        control_cost ",[139,116703,150],{"class":149},[139,116705,114258],{"class":153},[139,116707,8792],{"class":149},[139,116709,116710],{"class":145}," np.sum(np.square(",[139,116712,33075],{"class":153},[139,116714,116715],{"class":145},".data.ctrl))\n",[139,116717,116718,116720,116722,116724,116726,116728,116730],{"class":141,"line":12199},[139,116719,2085],{"class":149},[139,116721,112018],{"class":153},[139,116723,157],{"class":145},[139,116725,855],{"class":149},[139,116727,113817],{"class":145},[139,116729,855],{"class":149},[139,116731,114280],{"class":145},[139,116733,116734],{"class":141,"line":18871},[139,116735,843],{"emptyLinePlaceholder":842},[139,116737,116738,116740,116743,116746,116748,116751,116753,116755,116757,116759,116761,116764,116767,116769,116771,116773,116775],{"class":141,"line":18877},[139,116739,33053],{"class":149},[139,116741,116742],{"class":781}," reset",[139,116744,116745],{"class":145},"(self, ",[139,116747,2892],{"class":149},[139,116749,116750],{"class":145},", seed: ",[139,116752,2461],{"class":153},[139,116754,27372],{"class":149},[139,116756,41175],{"class":153},[139,116758,15836],{"class":149},[139,116760,41175],{"class":153},[139,116762,116763],{"class":145},", options: ",[139,116765,116766],{"class":153},"dict",[139,116768,27372],{"class":149},[139,116770,41175],{"class":153},[139,116772,15836],{"class":149},[139,116774,41175],{"class":153},[139,116776,558],{"class":145},[139,116778,116779,116781,116784,116787,116789],{"class":141,"line":18900},[139,116780,33069],{"class":153},[139,116782,116783],{"class":145},"().reset(",[139,116785,116786],{"class":2111},"seed",[139,116788,150],{"class":149},[139,116790,116791],{"class":145},"seed)\n",[139,116793,116794,116797,116799,116802,116804],{"class":141,"line":18906},[139,116795,116796],{"class":145},"        mujoco.mj_resetData(",[139,116798,33075],{"class":153},[139,116800,116801],{"class":145},".model, ",[139,116803,33075],{"class":153},[139,116805,116806],{"class":145},".data)\n",[139,116808,116809],{"class":141,"line":18929},[139,116810,843],{"emptyLinePlaceholder":842},[139,116812,116813,116815,116818,116820,116822,116825,116827,116829,116831,116833,116835,116837,116839,116841,116843,116845,116847],{"class":141,"line":18943},[139,116814,33097],{"class":153},[139,116816,116817],{"class":145},".data.qpos[:] ",[139,116819,150],{"class":149},[139,116821,41116],{"class":153},[139,116823,116824],{"class":145},".np_random.uniform(",[139,116826,115982],{"class":2111},[139,116828,115985],{"class":149},[139,116830,88438],{"class":153},[139,116832,413],{"class":145},[139,116834,115992],{"class":2111},[139,116836,150],{"class":149},[139,116838,88438],{"class":153},[139,116840,413],{"class":145},[139,116842,33745],{"class":2111},[139,116844,150],{"class":149},[139,116846,33075],{"class":153},[139,116848,116849],{"class":145},".model.nq)\n",[139,116851,116852,116854,116857,116859],{"class":141,"line":18963},[139,116853,33097],{"class":153},[139,116855,116856],{"class":145},".data.qvel[:] ",[139,116858,150],{"class":149},[139,116860,106984],{"class":153},[139,116862,116863,116866,116868,116870,116872],{"class":141,"line":18969},[139,116864,116865],{"class":145},"        mujoco.mj_forward(",[139,116867,33075],{"class":153},[139,116869,116801],{"class":145},[139,116871,33075],{"class":153},[139,116873,116806],{"class":145},[139,116875,116876],{"class":141,"line":18980},[139,116877,843],{"emptyLinePlaceholder":842},[139,116879,116880,116882,116884,116886],{"class":141,"line":19003},[139,116881,33097],{"class":153},[139,116883,115926],{"class":145},[139,116885,150],{"class":149},[139,116887,49571],{"class":153},[139,116889,116890,116892,116894],{"class":141,"line":19025},[139,116891,2085],{"class":149},[139,116893,41116],{"class":153},[139,116895,116896],{"class":145},"._get_obs(), {}\n",[139,116898,116899],{"class":141,"line":19030},[139,116900,843],{"emptyLinePlaceholder":842},[139,116902,116903,116905,116908],{"class":141,"line":19036},[139,116904,33053],{"class":149},[139,116906,116907],{"class":781}," step",[139,116909,116910],{"class":145},"(self, action):\n",[139,116912,116913,116915,116917,116920,116922,116924],{"class":141,"line":19050},[139,116914,112443],{"class":145},[139,116916,150],{"class":149},[139,116918,116919],{"class":145}," np.asarray(action, ",[139,116921,95728],{"class":2111},[139,116923,150],{"class":149},[139,116925,116016],{"class":145},[139,116927,116928,116930,116932,116934,116936,116939,116941],{"class":141,"line":19063},[139,116929,112443],{"class":145},[139,116931,150],{"class":149},[139,116933,109670],{"class":145},[139,116935,33075],{"class":153},[139,116937,116938],{"class":145},".action_space.low, ",[139,116940,33075],{"class":153},[139,116942,116943],{"class":145},".action_space.high)\n",[139,116945,116946],{"class":141,"line":19068},[139,116947,843],{"emptyLinePlaceholder":842},[139,116949,116950,116952,116955,116957],{"class":141,"line":19082},[139,116951,33097],{"class":153},[139,116953,116954],{"class":145},".data.ctrl[:] ",[139,116956,150],{"class":149},[139,116958,109693],{"class":145},[139,116960,116961,116963,116965,116967,116969,116971,116973],{"class":141,"line":19087},[139,116962,5684],{"class":149},[139,116964,103728],{"class":145},[139,116966,1976],{"class":149},[139,116968,34690],{"class":153},[139,116970,157],{"class":145},[139,116972,33075],{"class":153},[139,116974,116975],{"class":145},".frame_skip):\n",[139,116977,116978,116981,116983,116985,116987],{"class":141,"line":19093},[139,116979,116980],{"class":145},"            mujoco.mj_step(",[139,116982,33075],{"class":153},[139,116984,116801],{"class":145},[139,116986,33075],{"class":153},[139,116988,116806],{"class":145},[139,116990,116991],{"class":141,"line":19098},[139,116992,843],{"emptyLinePlaceholder":842},[139,116994,116995,116997,116999,117001],{"class":141,"line":19112},[139,116996,33097],{"class":153},[139,116998,115926],{"class":145},[139,117000,11751],{"class":149},[139,117002,57933],{"class":153},[139,117004,117005],{"class":141,"line":19117},[139,117006,843],{"emptyLinePlaceholder":842},[139,117008,117009,117011,117013,117015],{"class":141,"line":19122},[139,117010,112403],{"class":145},[139,117012,150],{"class":149},[139,117014,41116],{"class":153},[139,117016,117017],{"class":145},"._get_obs()\n",[139,117019,117020,117022,117024,117026],{"class":141,"line":19136},[139,117021,112508],{"class":145},[139,117023,150],{"class":149},[139,117025,41116],{"class":153},[139,117027,117028],{"class":145},"._get_reward()\n",[139,117030,117031],{"class":141,"line":19148},[139,117032,843],{"emptyLinePlaceholder":842},[139,117034,117035,117037,117039,117041,117043,117045],{"class":141,"line":19153},[139,117036,114358],{"class":145},[139,117038,150],{"class":149},[139,117040,41116],{"class":153},[139,117042,116590],{"class":145},[139,117044,33075],{"class":153},[139,117046,116668],{"class":145},[139,117048,117049,117051,117053,117055,117057,117059],{"class":141,"line":19166},[139,117050,114371],{"class":145},[139,117052,150],{"class":149},[139,117054,41116],{"class":153},[139,117056,116590],{"class":145},[139,117058,33075],{"class":153},[139,117060,116683],{"class":145},[139,117062,117063,117065,117067,117069,117072,117074],{"class":141,"line":19171},[139,117064,116688],{"class":145},[139,117066,150],{"class":149},[139,117068,112018],{"class":153},[139,117070,117071],{"class":145},"(np.linalg.norm(tip ",[139,117073,855],{"class":149},[139,117075,117076],{"class":145}," target))\n",[139,117078,117079],{"class":141,"line":19176},[139,117080,843],{"emptyLinePlaceholder":842},[139,117082,117083,117086,117088,117090,117092],{"class":141,"line":19181},[139,117084,117085],{"class":145},"        terminated ",[139,117087,150],{"class":149},[139,117089,115909],{"class":145},[139,117091,796],{"class":149},[139,117093,115914],{"class":153},[139,117095,117096,117099,117101,117103,117105,117107,117109],{"class":141,"line":19194},[139,117097,117098],{"class":145},"        truncated ",[139,117100,150],{"class":149},[139,117102,41116],{"class":153},[139,117104,115926],{"class":145},[139,117106,3998],{"class":149},[139,117108,41116],{"class":153},[139,117110,115933],{"class":145},[139,117112,117113,117116,117118,117120,117123],{"class":141,"line":19199},[139,117114,117115],{"class":145},"        info ",[139,117117,150],{"class":149},[139,117119,6726],{"class":145},[139,117121,117122],{"class":160},"\"distance\"",[139,117124,117125],{"class":145},": dist}\n",[139,117127,117128,117130],{"class":141,"line":34880},[139,117129,2085],{"class":149},[139,117131,117132],{"class":145}," obs, reward, terminated, truncated, info\n",[139,117134,117135],{"class":141,"line":34886},[139,117136,843],{"emptyLinePlaceholder":842},[139,117138,117139],{"class":141,"line":34892},[139,117140,843],{"emptyLinePlaceholder":842},[139,117142,117143,117145,117147,117149,117151],{"class":141,"line":34898},[139,117144,778],{"class":149},[139,117146,4259],{"class":781},[139,117148,103625],{"class":145},[139,117150,97913],{"class":153},[139,117152,246],{"class":145},[139,117154,117155,117158,117160],{"class":141,"line":34904},[139,117156,117157],{"class":145},"    env ",[139,117159,150],{"class":149},[139,117161,117162],{"class":145}," ReacherEnv()\n",[139,117164,117165,117168,117170,117173,117175,117177,117179],{"class":141,"line":34915},[139,117166,117167],{"class":145},"    obs, info ",[139,117169,150],{"class":149},[139,117171,117172],{"class":145}," env.reset(",[139,117174,116786],{"class":2111},[139,117176,150],{"class":149},[139,117178,2634],{"class":153},[139,117180,164],{"class":145},[139,117182,117183,117185,117187,117190],{"class":141,"line":34921},[139,117184,302],{"class":153},[139,117186,157],{"class":145},[139,117188,117189],{"class":160},"\"initial obs shape:\"",[139,117191,117192],{"class":145},", obs.shape)\n",[139,117194,117195,117197,117199,117202],{"class":141,"line":34941},[139,117196,302],{"class":153},[139,117198,157],{"class":145},[139,117200,117201],{"class":160},"\"initial info:\"",[139,117203,117204],{"class":145},", info)\n",[139,117206,117207],{"class":141,"line":34947},[139,117208,843],{"emptyLinePlaceholder":842},[139,117210,117211,117213,117215],{"class":141,"line":34958},[139,117212,112374],{"class":145},[139,117214,150],{"class":149},[139,117216,106984],{"class":153},[139,117218,117219,117221,117223,117225,117227,117229,117231],{"class":141,"line":34964},[139,117220,5482],{"class":149},[139,117222,33865],{"class":145},[139,117224,1976],{"class":149},[139,117226,34690],{"class":153},[139,117228,157],{"class":145},[139,117230,3135],{"class":153},[139,117232,558],{"class":145},[139,117234,117235,117237,117239],{"class":141,"line":34970},[139,117236,112443],{"class":145},[139,117238,150],{"class":149},[139,117240,117241],{"class":145}," env.action_space.sample()\n",[139,117243,117244,117247,117249],{"class":141,"line":34976},[139,117245,117246],{"class":145},"        obs, reward, terminated, truncated, info ",[139,117248,150],{"class":149},[139,117250,115635],{"class":145},[139,117252,117253,117255,117257],{"class":141,"line":34982},[139,117254,112518],{"class":145},[139,117256,11751],{"class":149},[139,117258,112523],{"class":145},[139,117260,117261,117263,117265,117267,117269,117272,117274,117276,117279,117281,117283,117286,117288,117290,117293,117295,117297,117299],{"class":141,"line":34988},[139,117262,34698],{"class":153},[139,117264,157],{"class":145},[139,117266,112552],{"class":160},[139,117268,112555],{"class":145},[139,117270,117271],{"class":160},"\"reward:\"",[139,117273,413],{"class":145},[139,117275,34265],{"class":153},[139,117277,117278],{"class":145},"(reward, ",[139,117280,421],{"class":153},[139,117282,112566],{"class":145},[139,117284,117285],{"class":160},"\"distance:\"",[139,117287,413],{"class":145},[139,117289,34265],{"class":153},[139,117291,117292],{"class":145},"(info[",[139,117294,117122],{"class":160},[139,117296,1484],{"class":145},[139,117298,421],{"class":153},[139,117300,207],{"class":145},[139,117302,117303,117305,117308,117311],{"class":141,"line":34994},[139,117304,4780],{"class":149},[139,117306,117307],{"class":145}," terminated ",[139,117309,117310],{"class":149},"or",[139,117312,117313],{"class":145}," truncated:\n",[139,117315,117316],{"class":141,"line":35000},[139,117317,117318],{"class":149},"            break\n",[139,117320,117321],{"class":141,"line":35020},[139,117322,843],{"emptyLinePlaceholder":842},[139,117324,117325,117327,117329,117331,117333,117335,117337,117339],{"class":141,"line":35026},[139,117326,302],{"class":153},[139,117328,157],{"class":145},[139,117330,112597],{"class":160},[139,117332,413],{"class":145},[139,117334,34265],{"class":153},[139,117336,112604],{"class":145},[139,117338,421],{"class":153},[139,117340,207],{"class":145},[139,117342,117343],{"class":141,"line":35042},[139,117344,843],{"emptyLinePlaceholder":842},[139,117346,117347],{"class":141,"line":35048},[139,117348,843],{"emptyLinePlaceholder":842},[139,117350,117351,117353,117355,117357,117359],{"class":141,"line":35062},[139,117352,1729],{"class":149},[139,117354,1732],{"class":153},[139,117356,1735],{"class":149},[139,117358,1738],{"class":160},[139,117360,246],{"class":145},[139,117362,117363],{"class":141,"line":35068},[139,117364,103794],{"class":145},[19,117366,105793],{},[130,117368,117370],{"className":1830,"code":117369,"language":1832,"meta":135,"style":135},"touch ch8_gym_env.py\n",[50,117371,117372],{"__ignoreMap":135},[139,117373,117374,117376],{"class":141,"line":142},[139,117375,103510],{"class":781},[139,117377,117378],{"class":160}," ch8_gym_env.py\n",[19,117380,112665],{},[130,117382,117384],{"className":1830,"code":117383,"language":1832,"meta":135,"style":135},"python ch8_gym_env.py\n",[50,117385,117386],{"__ignoreMap":135},[139,117387,117388,117390],{"class":141,"line":142},[139,117389,134],{"class":781},[139,117391,117378],{"class":160},[1217,117393,103797],{"id":103797},[19,117395,117396],{},"继承 Gymnasium 环境：",[130,117398,117400],{"className":132,"code":117399,"language":134,"meta":135,"style":135},"class ReacherEnv(gym.Env):\n",[50,117401,117402],{"__ignoreMap":135},[139,117403,117404,117406,117408,117410,117412,117414,117416],{"class":141,"line":142},[139,117405,915],{"class":149},[139,117407,116277],{"class":781},[139,117409,157],{"class":145},[139,117411,115760],{"class":781},[139,117413,2993],{"class":145},[139,117415,116286],{"class":781},[139,117417,558],{"class":145},[19,117419,117420],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117422,117423],{},"初始化模型：",[130,117425,117427],{"className":132,"code":117426,"language":134,"meta":135,"style":135},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[50,117428,117429,117443],{"__ignoreMap":135},[139,117430,117431,117433,117435,117437,117439,117441],{"class":141,"line":142},[139,117432,33075],{"class":153},[139,117434,116337],{"class":145},[139,117436,150],{"class":149},[139,117438,103639],{"class":145},[139,117440,103541],{"class":153},[139,117442,164],{"class":145},[139,117444,117445,117447,117449,117451,117453,117455],{"class":141,"line":210},[139,117446,33075],{"class":153},[139,117448,116352],{"class":145},[139,117450,150],{"class":149},[139,117452,116357],{"class":145},[139,117454,33075],{"class":153},[139,117456,116362],{"class":145},[19,117458,117459,117460,117462],{},"这和前面章节一样，只是现在放到了类的 ",[50,117461,33081],{}," 里。",[19,117464,117465],{},"缓存 site ID：",[130,117467,117469],{"className":132,"code":117468,"language":134,"meta":135,"style":135},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[50,117470,117471,117485],{"__ignoreMap":135},[139,117472,117473,117475,117477,117479,117481,117483],{"class":141,"line":142},[139,117474,33075],{"class":153},[139,117476,116373],{"class":145},[139,117478,150],{"class":149},[139,117480,116378],{"class":145},[139,117482,91782],{"class":153},[139,117484,164],{"class":145},[139,117486,117487,117489,117491,117493,117495,117497],{"class":141,"line":210},[139,117488,33075],{"class":153},[139,117490,116394],{"class":145},[139,117492,150],{"class":149},[139,117494,116378],{"class":145},[139,117496,91782],{"class":153},[139,117498,164],{"class":145},[19,117500,117501],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117503,117504],{},"reset：",[130,117506,117508],{"className":132,"code":117507,"language":134,"meta":135,"style":135},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[50,117509,117510],{"__ignoreMap":135},[139,117511,117512,117514,117516,117518,117520,117522,117524,117526,117528,117530,117532,117534,117536,117538,117540,117542,117544],{"class":141,"line":142},[139,117513,778],{"class":149},[139,117515,116742],{"class":781},[139,117517,116745],{"class":145},[139,117519,2892],{"class":149},[139,117521,116750],{"class":145},[139,117523,2461],{"class":153},[139,117525,27372],{"class":149},[139,117527,41175],{"class":153},[139,117529,15836],{"class":149},[139,117531,41175],{"class":153},[139,117533,116763],{"class":145},[139,117535,116766],{"class":153},[139,117537,27372],{"class":149},[139,117539,41175],{"class":153},[139,117541,15836],{"class":149},[139,117543,41175],{"class":153},[139,117545,558],{"class":145},[19,117547,117548,117550],{},[50,117549,72286],{}," 做四件事：",[1760,117552,117553,117556,117559,117562],{},[1763,117554,117555],{},"设置随机种子。",[1763,117557,117558],{},"重置 MuJoCo data。",[1763,117560,117561],{},"随机初始化关节角。",[1763,117563,117564],{},"返回初始观测和 info。",[19,117566,117567],{},"step：",[130,117569,117571],{"className":132,"code":117570,"language":134,"meta":135,"style":135},"def step(self, action):\n",[50,117572,117573],{"__ignoreMap":135},[139,117574,117575,117577,117579],{"class":141,"line":142},[139,117576,778],{"class":149},[139,117578,116907],{"class":781},[139,117580,116910],{"class":145},[19,117582,117583,117585],{},[50,117584,109357],{}," 做六件事：",[1760,117587,117588,117591,117597,117600,117603,117606],{},[1763,117589,117590],{},"检查并裁剪 action。",[1763,117592,117593,117594,170],{},"写入 ",[50,117595,117596],{},"self.data.ctrl",[1763,117598,117599],{},"连续推进若干个 MuJoCo 物理步。",[1763,117601,117602],{},"计算新观测。",[1763,117604,117605],{},"计算奖励和结束条件。",[1763,117607,117608],{},"返回 Gymnasium 标准五元组。",[1217,117610,103933],{"id":103933},[130,117612,117614],{"className":132,"code":117613,"language":134,"meta":135,"style":135},"import gymnasium as gym\n",[50,117615,117616],{"__ignoreMap":135},[139,117617,117618,117620,117622,117624],{"class":141,"line":142},[139,117619,1064],{"class":149},[139,117621,116115],{"class":145},[139,117623,1035],{"class":149},[139,117625,116120],{"class":145},[19,117627,117628,117629,117631,117632,117635],{},"导入 Gymnasium，并起别名 ",[50,117630,115760],{},"。后面写 ",[50,117633,117634],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[130,117637,117639],{"className":132,"code":117638,"language":134,"meta":135,"style":135},"from gymnasium import spaces\n",[50,117640,117641],{"__ignoreMap":135},[139,117642,117643,117645,117647,117649],{"class":141,"line":142},[139,117644,1265],{"class":149},[139,117646,116115],{"class":145},[139,117648,1064],{"class":149},[139,117650,116147],{"class":145},[19,117652,117653,117654,117657],{},"导入空间定义工具。",[50,117655,117656],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[130,117659,117660],{"className":132,"code":117399,"language":134,"meta":135,"style":135},[50,117661,117662],{"__ignoreMap":135},[139,117663,117664,117666,117668,117670,117672,117674,117676],{"class":141,"line":142},[139,117665,915],{"class":149},[139,117667,116277],{"class":781},[139,117669,157],{"class":145},[139,117671,115760],{"class":781},[139,117673,2993],{"class":145},[139,117675,116286],{"class":781},[139,117677,558],{"class":145},[19,117679,117680,117681,117684,117685,117687,117688,103245,117690,117692],{},"定义一个类，名字叫 ",[50,117682,117683],{},"ReacherEnv","。括号里的 ",[50,117686,117634],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[50,117689,72286],{},[50,117691,109357],{}," 这两个核心方法。",[130,117694,117696],{"className":132,"code":117695,"language":134,"meta":135,"style":135},"metadata = {\"render_modes\": []}\n",[50,117697,117698],{"__ignoreMap":135},[139,117699,117700,117703,117705,117707,117709],{"class":141,"line":142},[139,117701,117702],{"class":145},"metadata ",[139,117704,150],{"class":149},[139,117706,6726],{"class":145},[139,117708,116300],{"class":160},[139,117710,116303],{"class":145},[19,117712,117713],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[130,117715,117717],{"className":132,"code":117716,"language":134,"meta":135,"style":135},"def __init__(self) -> None:\n",[50,117718,117719],{"__ignoreMap":135},[139,117720,117721,117723,117725,117727,117729],{"class":141,"line":142},[139,117722,778],{"class":149},[139,117724,33056],{"class":153},[139,117726,116316],{"class":145},[139,117728,97913],{"class":153},[139,117730,246],{"class":145},[19,117732,117733,117735,117736,170],{},[50,117734,33081],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[50,117737,117738],{},"env = ReacherEnv()",[130,117740,117742],{"className":132,"code":117741,"language":134,"meta":135,"style":135},"super().__init__()\n",[50,117743,117744],{"__ignoreMap":135},[139,117745,117746,117749,117751,117753],{"class":141,"line":142},[139,117747,117748],{"class":153},"super",[139,117750,19528],{"class":145},[139,117752,33081],{"class":153},[139,117754,4262],{"class":145},[19,117756,117757,117758,117760],{},"调用父类 ",[50,117759,117634],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[130,117762,117763],{"className":132,"code":117426,"language":134,"meta":135,"style":135},[50,117764,117765,117779],{"__ignoreMap":135},[139,117766,117767,117769,117771,117773,117775,117777],{"class":141,"line":142},[139,117768,33075],{"class":153},[139,117770,116337],{"class":145},[139,117772,150],{"class":149},[139,117774,103639],{"class":145},[139,117776,103541],{"class":153},[139,117778,164],{"class":145},[139,117780,117781,117783,117785,117787,117789,117791],{"class":141,"line":210},[139,117782,33075],{"class":153},[139,117784,116352],{"class":145},[139,117786,150],{"class":149},[139,117788,116357],{"class":145},[139,117790,33075],{"class":153},[139,117792,116362],{"class":145},[19,117794,117795,117796,117798,117799,103245,117802,117805],{},"把 MuJoCo 模型和状态保存到 ",[50,117797,33075],{}," 上。",[50,117800,117801],{},"self.model",[50,117803,117804],{},"self.data"," 表示这个环境对象自己的模型和状态。",[130,117807,117808],{"className":132,"code":117468,"language":134,"meta":135,"style":135},[50,117809,117810,117824],{"__ignoreMap":135},[139,117811,117812,117814,117816,117818,117820,117822],{"class":141,"line":142},[139,117813,33075],{"class":153},[139,117815,116373],{"class":145},[139,117817,150],{"class":149},[139,117819,116378],{"class":145},[139,117821,91782],{"class":153},[139,117823,164],{"class":145},[139,117825,117826,117828,117830,117832,117834,117836],{"class":141,"line":210},[139,117827,33075],{"class":153},[139,117829,116394],{"class":145},[139,117831,150],{"class":149},[139,117833,116378],{"class":145},[139,117835,91782],{"class":153},[139,117837,164],{"class":145},[19,117839,117840,117841,103245,117844,117847],{},"提前查好 tip 和 target 的 site ID。这样 ",[50,117842,117843],{},"_get_obs",[50,117845,117846],{},"_get_reward"," 里就不用每次按名字查找。",[130,117849,117851],{"className":132,"code":117850,"language":134,"meta":135,"style":135},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[50,117852,117853,117863,117873],{"__ignoreMap":135},[139,117854,117855,117857,117859,117861],{"class":141,"line":142},[139,117856,33075],{"class":153},[139,117858,116087],{"class":145},[139,117860,150],{"class":149},[139,117862,56661],{"class":153},[139,117864,117865,117867,117869,117871],{"class":141,"line":210},[139,117866,33075],{"class":153},[139,117868,116466],{"class":145},[139,117870,150],{"class":149},[139,117872,116471],{"class":153},[139,117874,117875,117877,117879,117881],{"class":141,"line":254},[139,117876,33075],{"class":153},[139,117878,115926],{"class":145},[139,117880,150],{"class":149},[139,117882,49571],{"class":153},[19,117884,117885,117888,117889,117892,117893,117896],{},[50,117886,117887],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[50,117890,117891],{},"max_steps"," 是一个 episode 最多运行多少步。",[50,117894,117895],{},"steps"," 记录当前 episode 已经走了多少步。",[130,117898,117899],{"className":132,"code":115965,"language":134,"meta":135,"style":135},[50,117900,117901],{"__ignoreMap":135},[139,117902,117903,117905,117907,117909,117911,117913,117915,117917,117919,117921,117923,117925,117927,117929,117931,117933,117935,117937,117939,117941],{"class":141,"line":142},[139,117904,33075],{"class":153},[139,117906,115974],{"class":145},[139,117908,150],{"class":149},[139,117910,115979],{"class":145},[139,117912,115982],{"class":2111},[139,117914,115985],{"class":149},[139,117916,104627],{"class":153},[139,117918,413],{"class":145},[139,117920,115992],{"class":2111},[139,117922,150],{"class":149},[139,117924,104627],{"class":153},[139,117926,413],{"class":145},[139,117928,98190],{"class":2111},[139,117930,150],{"class":149},[139,117932,157],{"class":145},[139,117934,416],{"class":153},[139,117936,116009],{"class":145},[139,117938,95728],{"class":2111},[139,117940,150],{"class":149},[139,117942,116016],{"class":145},[19,117944,117945,117946,117949,117950,103245,117953,117956],{},"定义动作空间。",[50,117947,117948],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[50,117951,117952],{},"low=-1.0",[50,117954,117955],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[130,117958,117959],{"className":132,"code":116026,"language":134,"meta":135,"style":135},[50,117960,117961],{"__ignoreMap":135},[139,117962,117963,117965,117967,117969,117971,117973,117975,117977,117979,117981,117983,117985,117987,117989,117991,117993,117995,117997],{"class":141,"line":142},[139,117964,33075],{"class":153},[139,117966,116035],{"class":145},[139,117968,150],{"class":149},[139,117970,115979],{"class":145},[139,117972,115982],{"class":2111},[139,117974,115985],{"class":149},[139,117976,116046],{"class":145},[139,117978,115992],{"class":2111},[139,117980,150],{"class":149},[139,117982,116046],{"class":145},[139,117984,98190],{"class":2111},[139,117986,150],{"class":149},[139,117988,157],{"class":145},[139,117990,536],{"class":153},[139,117992,116009],{"class":145},[139,117994,95728],{"class":2111},[139,117996,150],{"class":149},[139,117998,116016],{"class":145},[19,118000,118001,118002,118005,118006,118009],{},"定义观测空间。",[50,118003,118004],{},"shape=(10,)"," 表示观测是 10 个数。",[50,118007,118008],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[130,118011,118013],{"className":132,"code":118012,"language":134,"meta":135,"style":135},"def _get_obs(self) -> np.ndarray:\n",[50,118014,118015],{"__ignoreMap":135},[139,118016,118017,118019,118021],{"class":141,"line":142},[139,118018,778],{"class":149},[139,118020,116576],{"class":781},[139,118022,116579],{"class":145},[19,118024,118025,118026,118028],{},"定义内部函数，用来生成观测。函数名前面的 ",[50,118027,3422],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[130,118030,118032],{"className":132,"code":118031,"language":134,"meta":135,"style":135},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[50,118033,118034,118048],{"__ignoreMap":135},[139,118035,118036,118038,118040,118042,118044,118046],{"class":141,"line":142},[139,118037,113789],{"class":145},[139,118039,150],{"class":149},[139,118041,41116],{"class":153},[139,118043,116590],{"class":145},[139,118045,33075],{"class":153},[139,118047,116595],{"class":145},[139,118049,118050,118052,118054,118056,118058,118060],{"class":141,"line":210},[139,118051,113799],{"class":145},[139,118053,150],{"class":149},[139,118055,41116],{"class":153},[139,118057,116590],{"class":145},[139,118059,33075],{"class":153},[139,118061,116610],{"class":145},[19,118063,118064],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[130,118066,118068],{"className":132,"code":118067,"language":134,"meta":135,"style":135},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[50,118069,118070,118086],{"__ignoreMap":135},[139,118071,118072,118074,118076,118078,118080,118082,118084],{"class":141,"line":142},[139,118073,113075],{"class":145},[139,118075,150],{"class":149},[139,118077,116619],{"class":145},[139,118079,33075],{"class":153},[139,118081,116624],{"class":145},[139,118083,33075],{"class":153},[139,118085,116629],{"class":145},[139,118087,118088,118090],{"class":141,"line":210},[139,118089,19313],{"class":149},[139,118091,116636],{"class":145},[19,118093,118094,118095,118098,118099,118101],{},"拼接观测，并转换成 ",[50,118096,118097],{},"float32","。很多强化学习库默认使用 ",[50,118100,118097],{},"，所以这里主动转换。",[130,118103,118104],{"className":132,"code":117507,"language":134,"meta":135,"style":135},[50,118105,118106],{"__ignoreMap":135},[139,118107,118108,118110,118112,118114,118116,118118,118120,118122,118124,118126,118128,118130,118132,118134,118136,118138,118140],{"class":141,"line":142},[139,118109,778],{"class":149},[139,118111,116742],{"class":781},[139,118113,116745],{"class":145},[139,118115,2892],{"class":149},[139,118117,116750],{"class":145},[139,118119,2461],{"class":153},[139,118121,27372],{"class":149},[139,118123,41175],{"class":153},[139,118125,15836],{"class":149},[139,118127,41175],{"class":153},[139,118129,116763],{"class":145},[139,118131,116766],{"class":153},[139,118133,27372],{"class":149},[139,118135,41175],{"class":153},[139,118137,15836],{"class":149},[139,118139,41175],{"class":153},[139,118141,558],{"class":145},[19,118143,118144,118145,118147,118148,118151],{},"定义 reset。",[50,118146,116786],{}," 用来控制随机数，保证实验可以复现。",[50,118149,118150],{},"options"," 用来接收额外配置，本章暂时不用。",[130,118153,118155],{"className":132,"code":118154,"language":134,"meta":135,"style":135},"super().reset(seed=seed)\n",[50,118156,118157],{"__ignoreMap":135},[139,118158,118159,118161,118163,118165,118167],{"class":141,"line":142},[139,118160,117748],{"class":153},[139,118162,116783],{"class":145},[139,118164,116786],{"class":2111},[139,118166,150],{"class":149},[139,118168,116791],{"class":145},[19,118170,118171,118172,118175],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[50,118173,118174],{},"self.np_random"," 生成可复现的随机数。",[130,118177,118179],{"className":132,"code":118178,"language":134,"meta":135,"style":135},"mujoco.mj_resetData(self.model, self.data)\n",[50,118180,118181],{"__ignoreMap":135},[139,118182,118183,118186,118188,118190,118192],{"class":141,"line":142},[139,118184,118185],{"class":145},"mujoco.mj_resetData(",[139,118187,33075],{"class":153},[139,118189,116801],{"class":145},[139,118191,33075],{"class":153},[139,118193,116806],{"class":145},[19,118195,118196],{},"把 MuJoCo 状态重置到默认状态。",[130,118198,118200],{"className":132,"code":118199,"language":134,"meta":135,"style":135},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[50,118201,118202],{"__ignoreMap":135},[139,118203,118204,118206,118208,118210,118212,118214,118216,118218,118220,118222,118224,118226,118228,118230,118232,118234,118236],{"class":141,"line":142},[139,118205,33075],{"class":153},[139,118207,116817],{"class":145},[139,118209,150],{"class":149},[139,118211,41116],{"class":153},[139,118213,116824],{"class":145},[139,118215,115982],{"class":2111},[139,118217,115985],{"class":149},[139,118219,88438],{"class":153},[139,118221,413],{"class":145},[139,118223,115992],{"class":2111},[139,118225,150],{"class":149},[139,118227,88438],{"class":153},[139,118229,413],{"class":145},[139,118231,33745],{"class":2111},[139,118233,150],{"class":149},[139,118235,33075],{"class":153},[139,118237,116849],{"class":145},[19,118239,117561,118240,118243,118244,118247,118248,118250],{},[50,118241,118242],{},"[:]"," 表示修改整个数组。",[50,118245,118246],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[50,118249,104374],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[130,118252,118254],{"className":132,"code":118253,"language":134,"meta":135,"style":135},"self.data.qvel[:] = 0.0\n",[50,118255,118256],{"__ignoreMap":135},[139,118257,118258,118260,118262,118264],{"class":141,"line":142},[139,118259,33075],{"class":153},[139,118261,116856],{"class":145},[139,118263,150],{"class":149},[139,118265,106984],{"class":153},[19,118267,118268],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[130,118270,118272],{"className":132,"code":118271,"language":134,"meta":135,"style":135},"self.steps = 0\nreturn self._get_obs(), {}\n",[50,118273,118274,118284],{"__ignoreMap":135},[139,118275,118276,118278,118280,118282],{"class":141,"line":142},[139,118277,33075],{"class":153},[139,118279,115926],{"class":145},[139,118281,150],{"class":149},[139,118283,49571],{"class":153},[139,118285,118286,118288,118290],{"class":141,"line":210},[139,118287,19313],{"class":149},[139,118289,41116],{"class":153},[139,118291,116896],{"class":145},[19,118293,118294],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[130,118296,118297],{"className":132,"code":117570,"language":134,"meta":135,"style":135},[50,118298,118299],{"__ignoreMap":135},[139,118300,118301,118303,118305],{"class":141,"line":142},[139,118302,778],{"class":149},[139,118304,116907],{"class":781},[139,118306,116910],{"class":145},[19,118308,118309],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[130,118311,118313],{"className":132,"code":118312,"language":134,"meta":135,"style":135},"action = np.asarray(action, dtype=np.float32)\n",[50,118314,118315],{"__ignoreMap":135},[139,118316,118317,118319,118321,118323,118325,118327],{"class":141,"line":142},[139,118318,109665],{"class":145},[139,118320,150],{"class":149},[139,118322,116919],{"class":145},[139,118324,95728],{"class":2111},[139,118326,150],{"class":149},[139,118328,116016],{"class":145},[19,118330,118331,118332,170],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[50,118333,118097],{},[130,118335,118337],{"className":132,"code":118336,"language":134,"meta":135,"style":135},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[50,118338,118339],{"__ignoreMap":135},[139,118340,118341,118343,118345,118347,118349,118351,118353],{"class":141,"line":142},[139,118342,109665],{"class":145},[139,118344,150],{"class":149},[139,118346,109670],{"class":145},[139,118348,33075],{"class":153},[139,118350,116938],{"class":145},[139,118352,33075],{"class":153},[139,118354,116943],{"class":145},[19,118356,118357],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[130,118359,118361],{"className":132,"code":118360,"language":134,"meta":135,"style":135},"self.data.ctrl[:] = action\n",[50,118362,118363],{"__ignoreMap":135},[139,118364,118365,118367,118369,118371],{"class":141,"line":142},[139,118366,33075],{"class":153},[139,118368,116954],{"class":145},[139,118370,150],{"class":149},[139,118372,109693],{"class":145},[19,118374,118375],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[130,118377,118379],{"className":132,"code":118378,"language":134,"meta":135,"style":135},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[50,118380,118381,118397],{"__ignoreMap":135},[139,118382,118383,118385,118387,118389,118391,118393,118395],{"class":141,"line":142},[139,118384,1970],{"class":149},[139,118386,103728],{"class":145},[139,118388,1976],{"class":149},[139,118390,34690],{"class":153},[139,118392,157],{"class":145},[139,118394,33075],{"class":153},[139,118396,116975],{"class":145},[139,118398,118399,118402,118404,118406,118408],{"class":141,"line":210},[139,118400,118401],{"class":145},"    mujoco.mj_step(",[139,118403,33075],{"class":153},[139,118405,116801],{"class":145},[139,118407,33075],{"class":153},[139,118409,116806],{"class":145},[19,118411,118412,118413,118416,118417,118419,118420,170],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[50,118414,118415],{},"frame_skip=5","，所以外部调用一次 ",[50,118418,116097],{},"，内部实际执行 5 次 ",[50,118421,103442],{},[130,118423,118425],{"className":132,"code":118424,"language":134,"meta":135,"style":135},"self.steps += 1\n",[50,118426,118427],{"__ignoreMap":135},[139,118428,118429,118431,118433,118435],{"class":141,"line":142},[139,118430,33075],{"class":153},[139,118432,115926],{"class":145},[139,118434,11751],{"class":149},[139,118436,57933],{"class":153},[19,118438,118439],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[130,118441,118443],{"className":132,"code":118442,"language":134,"meta":135,"style":135},"obs = self._get_obs()\nreward = self._get_reward()\n",[50,118444,118445,118455],{"__ignoreMap":135},[139,118446,118447,118449,118451,118453],{"class":141,"line":142},[139,118448,113075],{"class":145},[139,118450,150],{"class":149},[139,118452,41116],{"class":153},[139,118454,117017],{"class":145},[139,118456,118457,118459,118461,118463],{"class":141,"line":210},[139,118458,113226],{"class":145},[139,118460,150],{"class":149},[139,118462,41116],{"class":153},[139,118464,117028],{"class":145},[19,118466,118467],{},"计算新的观测和奖励。",[130,118469,118471],{"className":132,"code":118470,"language":134,"meta":135,"style":135},"dist = float(np.linalg.norm(tip - target))\n",[50,118472,118473],{"__ignoreMap":135},[139,118474,118475,118477,118479,118481,118483,118485],{"class":141,"line":142},[139,118476,113817],{"class":145},[139,118478,150],{"class":149},[139,118480,112018],{"class":153},[139,118482,117071],{"class":145},[139,118484,855],{"class":149},[139,118486,117076],{"class":145},[19,118488,118489],{},"计算末端到目标的距离，并转换成 Python float。",[130,118491,118492],{"className":132,"code":115897,"language":134,"meta":135,"style":135},[50,118493,118494,118506],{"__ignoreMap":135},[139,118495,118496,118498,118500,118502,118504],{"class":141,"line":142},[139,118497,115904],{"class":145},[139,118499,150],{"class":149},[139,118501,115909],{"class":145},[139,118503,796],{"class":149},[139,118505,115914],{"class":153},[139,118507,118508,118510,118512,118514,118516,118518,118520],{"class":141,"line":210},[139,118509,115919],{"class":145},[139,118511,150],{"class":149},[139,118513,41116],{"class":153},[139,118515,115926],{"class":145},[139,118517,3998],{"class":149},[139,118519,41116],{"class":153},[139,118521,115933],{"class":145},[19,118523,118524],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[130,118526,118528],{"className":132,"code":118527,"language":134,"meta":135,"style":135},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[50,118529,118530,118543],{"__ignoreMap":135},[139,118531,118532,118535,118537,118539,118541],{"class":141,"line":142},[139,118533,118534],{"class":145},"info ",[139,118536,150],{"class":149},[139,118538,6726],{"class":145},[139,118540,117122],{"class":160},[139,118542,117125],{"class":145},[139,118544,118545,118547],{"class":141,"line":210},[139,118546,19313],{"class":149},[139,118548,117132],{"class":145},[19,118550,118551,118554],{},[50,118552,118553],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[130,118556,118558],{"className":132,"code":118557,"language":134,"meta":135,"style":135},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[50,118559,118560,118569],{"__ignoreMap":135},[139,118561,118562,118565,118567],{"class":141,"line":142},[139,118563,118564],{"class":145},"env ",[139,118566,150],{"class":149},[139,118568,117162],{"class":145},[139,118570,118571,118573,118575,118577,118579,118581,118583],{"class":141,"line":210},[139,118572,115620],{"class":145},[139,118574,150],{"class":149},[139,118576,117172],{"class":145},[139,118578,116786],{"class":2111},[139,118580,150],{"class":149},[139,118582,2634],{"class":153},[139,118584,164],{"class":145},[19,118586,118587,118588,118591],{},"创建环境并重置。",[50,118589,118590],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[130,118593,118595],{"className":132,"code":118594,"language":134,"meta":135,"style":135},"action = env.action_space.sample()\n",[50,118596,118597],{"__ignoreMap":135},[139,118598,118599,118601,118603],{"class":141,"line":142},[139,118600,109665],{"class":145},[139,118602,150],{"class":149},[139,118604,117241],{"class":145},[19,118606,118607],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118609,104540],{"id":104539},[19,118611,107707],{},[130,118613,118616],{"className":118614,"code":118615,"language":645,"meta":135},[643],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[50,118617,118615],{"__ignoreMap":135},[19,118619,118620],{},"这个环境已经具备强化学习环境的基本结构。",[19,118622,118623],{},"主函数里使用随机动作：",[130,118625,118626],{"className":132,"code":118594,"language":134,"meta":135,"style":135},[50,118627,118628],{"__ignoreMap":135},[139,118629,118630,118632,118634],{"class":141,"line":142},[139,118631,109665],{"class":145},[139,118633,150],{"class":149},[139,118635,117241],{"class":145},[19,118637,118638],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118640,104572],{"id":104571},[1760,118642,118643,118646,118652,118661,118670,118679,118685],{},[1763,118644,118645],{},"运行程序。",[1763,118647,118648,118649,170],{},"确认 ",[50,118650,118651],{},"obs.shape == (10,)",[1763,118653,113402,118654,118657,118658,170],{},[50,118655,118656],{},"env.action_space","，应类似 ",[50,118659,118660],{},"Box(-1.0, 1.0, (2,), float32)",[1763,118662,107808,118663,118666,118667,170],{},[50,118664,118665],{},"self.max_steps = 10","，确认环境会更快 ",[50,118668,118669],{},"truncated=True",[1763,118671,104635,118672,104638,118675,118678],{},[50,118673,118674],{},"terminated = dist \u003C 0.05",[50,118676,118677],{},"dist \u003C 0.2","，观察是否更容易结束。",[1763,118680,104635,118681,118684],{},[50,118682,118683],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1763,118686,118687,118688,118690,118691,118694],{},"在 ",[50,118689,118553],{}," 里加入 ",[50,118692,118693],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118696,104677],{"id":104676},[1217,118698,118700],{"id":118699},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118702,118703,118704,118706],{},"Gymnasium 的 ",[50,118705,109357],{}," 返回 5 个值:",[130,118708,118710],{"className":132,"code":118709,"language":134,"meta":135,"style":135},"obs, reward, terminated, truncated, info\n",[50,118711,118712],{"__ignoreMap":135},[139,118713,118714],{"class":141,"line":142},[139,118715,118709],{"class":145},[19,118717,118718],{},"不是旧 Gym 的 4 个值。",[1217,118720,118722,118725],{"id":118721},"datactrl-action-维度错误",[50,118723,118724],{},"data.ctrl[:] = action"," 维度错误",[19,118727,104747],{},[130,118729,118731],{"className":132,"code":118730,"language":134,"meta":135,"style":135},"print(self.model.nu)\nprint(action.shape)\n",[50,118732,118733,118744],{"__ignoreMap":135},[139,118734,118735,118737,118739,118741],{"class":141,"line":142},[139,118736,213],{"class":153},[139,118738,157],{"class":145},[139,118740,33075],{"class":153},[139,118742,118743],{"class":145},".model.nu)\n",[139,118745,118746,118748],{"class":141,"line":210},[139,118747,213],{"class":153},[139,118749,118750],{"class":145},"(action.shape)\n",[19,118752,118753],{},"两者必须匹配。",[1217,118755,118757],{"id":118756},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118759,104686],{},[130,118761,118763],{"className":132,"code":118762,"language":134,"meta":135,"style":135},"mujoco.mj_forward(self.model, self.data)\n",[50,118764,118765],{"__ignoreMap":135},[139,118766,118767,118770,118772,118774,118776],{"class":141,"line":142},[139,118768,118769],{"class":145},"mujoco.mj_forward(",[139,118771,33075],{"class":153},[139,118773,116801],{"class":145},[139,118775,33075],{"class":153},[139,118777,116806],{"class":145},[1217,118779,118781,118783],{"id":118780},"observation_space-维度和-obs-不一致",[50,118782,115820],{}," 维度和 obs 不一致",[19,118785,104799],{},[130,118787,118789],{"className":132,"code":118788,"language":134,"meta":135,"style":135},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[50,118790,118791,118801,118808],{"__ignoreMap":135},[139,118792,118793,118795,118797,118799],{"class":141,"line":142},[139,118794,113075],{"class":145},[139,118796,150],{"class":149},[139,118798,41116],{"class":153},[139,118800,117017],{"class":145},[139,118802,118803,118805],{"class":141,"line":210},[139,118804,213],{"class":153},[139,118806,118807],{"class":145},"(obs.shape)\n",[139,118809,118810,118812,118814,118816],{"class":141,"line":254},[139,118811,213],{"class":153},[139,118813,157],{"class":145},[139,118815,33075],{"class":153},[139,118817,118818],{"class":145},".observation_space.shape)\n",[19,118820,118821],{},"两者必须一致。本章观测是：",[130,118823,118826],{"className":118824,"code":118825,"language":645,"meta":135},[643],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[50,118827,118825],{"__ignoreMap":135},[1217,118829,118831],{"id":118830},"action-超过范围","action 超过范围",[19,118833,118834],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[130,118836,118837],{"className":132,"code":118336,"language":134,"meta":135,"style":135},[50,118838,118839],{"__ignoreMap":135},[139,118840,118841,118843,118845,118847,118849,118851,118853],{"class":141,"line":142},[139,118842,109665],{"class":145},[139,118844,150],{"class":149},[139,118846,109670],{"class":145},[139,118848,33075],{"class":153},[139,118850,116938],{"class":145},[139,118852,33075],{"class":153},[139,118854,116943],{"class":145},[19,118856,118857,118858,170],{},"这能避免无效动作直接写入 ",[50,118859,103303],{},[1217,118861,118863],{"id":118862},"忘记返回-info","忘记返回 info",[19,118865,118703,118866,103245,118868,118870],{},[50,118867,72286],{},[50,118869,109357],{}," 都会返回 info：",[130,118872,118873],{"className":132,"code":115613,"language":134,"meta":135,"style":135},[50,118874,118875,118883],{"__ignoreMap":135},[139,118876,118877,118879,118881],{"class":141,"line":142},[139,118878,115620],{"class":145},[139,118880,150],{"class":149},[139,118882,115625],{"class":145},[139,118884,118885,118887,118889],{"class":141,"line":210},[139,118886,115630],{"class":145},[139,118888,150],{"class":149},[139,118890,115635],{"class":145},[19,118892,118893,118894,170],{},"即使暂时没有额外信息，也返回 ",[50,118895,34706],{},[14,118897,118899],{"id":118898},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118901,118902],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1760,118904,118905,118908,118911,118914,118917,118920],{},[1763,118906,118907],{},"更稳定的 reward。",[1763,118909,118910],{},"合理的 episode 长度。",[1763,118912,118913],{},"可重复的随机目标采样。",[1763,118915,118916],{},"render 接口。",[1763,118918,118919],{},"环境注册代码。",[1763,118921,118922],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118924,118925],{},"如果只是自己写训练循环，最小形式是：",[130,118927,118929],{"className":132,"code":118928,"language":134,"meta":135,"style":135},"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",[50,118930,118931,118939,118955,118959,118975,118984,118993,119003],{"__ignoreMap":135},[139,118932,118933,118935,118937],{"class":141,"line":142},[139,118934,118564],{"class":145},[139,118936,150],{"class":149},[139,118938,117162],{"class":145},[139,118940,118941,118943,118945,118947,118949,118951,118953],{"class":141,"line":210},[139,118942,115620],{"class":145},[139,118944,150],{"class":149},[139,118946,117172],{"class":145},[139,118948,116786],{"class":2111},[139,118950,150],{"class":149},[139,118952,2634],{"class":153},[139,118954,164],{"class":145},[139,118956,118957],{"class":141,"line":254},[139,118958,843],{"emptyLinePlaceholder":842},[139,118960,118961,118963,118965,118967,118969,118971,118973],{"class":141,"line":262},[139,118962,1970],{"class":149},[139,118964,103728],{"class":145},[139,118966,1976],{"class":149},[139,118968,34690],{"class":153},[139,118970,157],{"class":145},[139,118972,8684],{"class":153},[139,118974,558],{"class":145},[139,118976,118977,118980,118982],{"class":141,"line":313},[139,118978,118979],{"class":145},"    action ",[139,118981,150],{"class":149},[139,118983,117241],{"class":145},[139,118985,118986,118989,118991],{"class":141,"line":462},[139,118987,118988],{"class":145},"    obs, reward, terminated, truncated, info ",[139,118990,150],{"class":149},[139,118992,115635],{"class":145},[139,118994,118995,118997,118999,119001],{"class":141,"line":474},[139,118996,790],{"class":149},[139,118998,117307],{"class":145},[139,119000,117310],{"class":149},[139,119002,117313],{"class":145},[139,119004,119005,119008,119010],{"class":141,"line":484},[139,119006,119007],{"class":145},"        obs, info ",[139,119009,150],{"class":149},[139,119011,115625],{"class":145},[14,119013,119015],{"id":119014},"_9本章小结","9.本章小结",[19,119017,119018],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[130,119020,119023],{"className":119021,"code":119022,"language":645,"meta":135},[643],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[50,119024,119022],{"__ignoreMap":135},[19,119026,119027],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2348,119029,119030],{},"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":135,"searchDepth":210,"depth":210,"links":119032},[119033,119034,119035,119042,119046,119047,119048,119058,119059],{"id":102873,"depth":210,"text":102874},{"id":102996,"depth":210,"text":102997},{"id":103271,"depth":210,"text":103272,"children":119036},[119037,119039,119041],{"id":115844,"depth":254,"text":119038},"terminated 和 truncated 的区别",{"id":115947,"depth":254,"text":119040},"observation_space 和 action_space",{"id":116074,"depth":254,"text":116075},{"id":103479,"depth":210,"text":103480,"children":119043},[119044,119045],{"id":103797,"depth":254,"text":103797},{"id":103933,"depth":254,"text":103933},{"id":104539,"depth":210,"text":104540},{"id":104571,"depth":210,"text":104572},{"id":104676,"depth":210,"text":104677,"children":119049},[119050,119051,119053,119054,119056,119057],{"id":118699,"depth":254,"text":118700},{"id":118721,"depth":254,"text":119052},"data.ctrl[:] = action 维度错误",{"id":118756,"depth":254,"text":118757},{"id":118780,"depth":254,"text":119055},"observation_space 维度和 obs 不一致",{"id":118830,"depth":254,"text":118831},{"id":118862,"depth":254,"text":118863},{"id":118898,"depth":210,"text":118899},{"id":119014,"depth":210,"text":119015},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115597,"description":135},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119066,"title":119067,"body":119068,"description":119491,"extension":2385,"meta":119492,"navigation":842,"path":119493,"seo":119494,"stem":119495,"__hash__":119496},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119069,"toc":119481},[119070,119074,119077,119080,119100,119106,119112,119122,119125,119128,119148,119151,119155,119158,119164,119167,119181,119184,119187,119261,119264,119270,119273,119296,119299,119349,119352,119358,119361,119364,119367,119386,119389,119395,119398,119401,119404,119424,119427,119430,119433,119478],[10,119071,119073],{"id":119072},"mujoco-学习","MuJoCo 学习",[19,119075,119076],{},"初版",[19,119078,119079],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1760,119081,119082,119085,119088,119097],{},[1763,119083,119084],{},"MuJoCo 模型文件在描述什么。",[1763,119086,119087],{},"Python 代码怎样读取和推进仿真。",[1763,119089,119090,2655,119092,2655,119094,119096],{},[50,119091,106253],{},[50,119093,106583],{},[50,119095,106586],{}," 这些数组为什么重要。",[1763,119098,119099],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119101,119102,119103,119105],{},"默认环境为 Fedora 44、Python >= 3.10、",[50,119104,103254],{}," 官方 Python bindings。",[19,119107,119108,119109,119111],{},"注意：本文禁止使用 ",[50,119110,103239],{},"。所有示例均使用：",[130,119113,119114],{"className":132,"code":103803,"language":134,"meta":135,"style":135},[50,119115,119116],{"__ignoreMap":135},[139,119117,119118,119120],{"class":141,"line":142},[139,119119,1064],{"class":149},[139,119121,103528],{"class":145},[14,119123,119124],{"id":119124},"适合谁阅读",[19,119126,119127],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1760,119129,119130,119133,119136,119139],{},[1763,119131,119132],{},"没学过 MuJoCo，只会一点 Python。",[1763,119134,119135],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1763,119137,119138],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1763,119140,119141,119142,119144,119145,119147],{},"以前接触过 ",[50,119143,103239],{},"，现在想迁移到官方 ",[50,119146,103248],{}," Python bindings。",[19,119149,119150],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119152,119154],{"id":119153},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119156,119157],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[130,119159,119162],{"className":119160,"code":119161,"language":645,"meta":135},[643],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[50,119163,119161],{"__ignoreMap":135},[19,119165,119166],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1760,119168,119169,119172,119175,119178],{},[1763,119170,119171],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1763,119173,119174],{},"快速测试控制算法，不必一开始就上真实机器人。",[1763,119176,119177],{},"生成强化学习环境。",[1763,119179,119180],{},"采集状态、动作、图像、奖励等训练数据。",[14,119182,119183],{"id":119183},"学习前的心智模型",[19,119185,119186],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[26,119188,119189,119201],{},[29,119190,119191],{},[32,119192,119193,119196,119199],{},[35,119194,119195],{"align":26003},"部分",[35,119197,119198],{"align":26003},"负责什么",[35,119200,23454],{"align":26003},[42,119202,119203,119214,119226,119238,119250],{},[32,119204,119205,119208,119211],{},[47,119206,119207],{"align":26003},"MJCF XML",[47,119209,119210],{"align":26003},"定义世界和机器人结构",[47,119212,119213],{"align":26003},"地面、盒子、关节、电机、摄像头",[32,119215,119216,119220,119223],{},[47,119217,119218],{"align":26003},[50,119219,102936],{},[47,119221,119222],{"align":26003},"编译后的静态模型",[47,119224,119225],{"align":26003},"有几个关节、有几个电机、时间步长是多少",[32,119227,119228,119232,119235],{},[47,119229,119230],{"align":26003},[50,119231,102946],{},[47,119233,119234],{"align":26003},"运行中的动态状态",[47,119236,119237],{"align":26003},"当前时间、位置、速度、电机输入",[32,119239,119240,119244,119247],{},[47,119241,119242],{"align":26003},[50,119243,103442],{},[47,119245,119246],{"align":26003},"推进一步物理仿真",[47,119248,119249],{"align":26003},"根据重力、力、碰撞更新状态",[32,119251,119252,119255,119258],{},[47,119253,119254],{"align":26003},"Viewer \u002F Renderer",[47,119256,119257],{"align":26003},"把仿真显示出来",[47,119259,119260],{"align":26003},"打开窗口或保存图片",[19,119262,119263],{},"一句话总结：",[130,119265,119268],{"className":119266,"code":119267,"language":645,"meta":135},[643],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[50,119269,119267],{"__ignoreMap":135},[19,119271,119272],{},"参考来源：",[3437,119274,119275,119282,119289],{},[1763,119276,119277,119278],{},"MuJoCo Python 官方文档：",[2680,119279,119280],{"href":119280,"rel":119281},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26128],[1763,119283,119284,119285],{},"MuJoCo XML Reference：",[2680,119286,119287],{"href":119287,"rel":119288},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26128],[1763,119290,119291,119292],{},"MuJoCo Overview：",[2680,119293,119294],{"href":119294,"rel":119295},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26128],[14,119297,119298],{"id":119298},"章节目录",[1760,119300,119301,119307,119313,119319,119325,119331,119337,119343],{},[1763,119302,119303],{},[2680,119304,119306],{"href":119305},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1763,119308,119309],{},[2680,119310,119312],{"href":119311},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1763,119314,119315],{},[2680,119316,119318],{"href":119317},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1763,119320,119321],{},[2680,119322,119324],{"href":119323},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1763,119326,119327],{},[2680,119328,119330],{"href":119329},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1763,119332,119333],{},[2680,119334,119336],{"href":119335},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1763,119338,119339],{},[2680,119340,119342],{"href":119341},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1763,119344,119345],{},[2680,119346,119348],{"href":119347},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119350,119351],{"id":119351},"推荐学习路线",[130,119353,119356],{"className":119354,"code":119355,"language":645,"meta":135},[643],"环境安装\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",[50,119357,119355],{"__ignoreMap":135},[19,119359,119360],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119362,119363],{"id":119363},"建议的目录结构",[19,119365,119366],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[130,119368,119370],{"className":1830,"code":119369,"language":1832,"meta":135,"style":135},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[50,119371,119372,119380],{"__ignoreMap":135},[139,119373,119374,119376,119378],{"class":141,"line":142},[139,119375,103493],{"class":781},[139,119377,31475],{"class":153},[139,119379,103498],{"class":160},[139,119381,119382,119384],{"class":141,"line":210},[139,119383,103503],{"class":153},[139,119385,103498],{"class":160},[19,119387,119388],{},"每一章的代码都单独保存：",[130,119390,119393],{"className":119391,"code":119392,"language":645,"meta":135},[643],"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",[50,119394,119392],{"__ignoreMap":135},[19,119396,119397],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119399,119400],{"id":119400},"学习方法",[19,119402,119403],{},"每章建议按这个顺序操作：",[1760,119405,119406,119409,119412,119415,119418,119421],{},[1763,119407,119408],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1763,119410,119411],{},"复制最小可运行代码，保存成指定文件。",[1763,119413,119414],{},"运行代码，确认没有报错。",[1763,119416,119417],{},"对照“运行结果说明”理解输出。",[1763,119419,119420],{},"做“验证步骤”，主动改一两个参数。",[1763,119422,119423],{},"遇到报错先看“常见错误与解决方案”。",[19,119425,119426],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119428,119429],{"id":119429},"全局排错顺序",[19,119431,119432],{},"遇到问题时，按下面顺序查：",[1760,119434,119435,119441,119447,119452,119455,119458,119465,119475],{},[1763,119436,119437,119438],{},"Python 环境是否激活：",[50,119439,119440],{},"which python",[1763,119442,119443,119444],{},"MuJoCo 是否能导入：",[50,119445,119446],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1763,119448,119449,119450],{},"是否误装了 ",[50,119451,103239],{},[1763,119453,119454],{},"XML 标签是否闭合、属性是否拼写正确",[1763,119456,119457],{},"actuator 引用的 joint 名字是否存在",[1763,119459,119460,119462,119463],{},[50,119461,103303],{}," 的长度是否等于 ",[50,119464,104382],{},[1763,119466,107808,119467,84767,119469,119471,119472],{},[50,119468,106253],{},[50,119470,106583],{}," 后是否调用了 ",[50,119473,119474],{},"mujoco.mj_forward",[1763,119476,119477],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2348,119479,119480],{},"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":135,"searchDepth":210,"depth":210,"links":119482},[119483,119484,119485,119486,119487,119488,119489,119490],{"id":119124,"depth":210,"text":119124},{"id":119153,"depth":210,"text":119154},{"id":119183,"depth":210,"text":119183},{"id":119298,"depth":210,"text":119298},{"id":119351,"depth":210,"text":119351},{"id":119363,"depth":210,"text":119363},{"id":119400,"depth":210,"text":119400},{"id":119429,"depth":210,"text":119429},"仿真搭建。",{"category":25645},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119067,"description":119491},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119498,"title":119499,"body":119500,"description":2384,"extension":2385,"meta":119955,"navigation":842,"path":119956,"seo":119957,"stem":119958,"__hash__":119959},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119501,"toc":119953},[119502,119505,119508,119514,119950],[10,119503,119499],{"id":119504},"_1-最常用的基本操作更新",[19,119506,119507],{},"装linux系统教程：",[19,119509,119510],{},[2680,119511,119512],{"href":119512,"rel":119513},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26128],[130,119515,119519],{"className":119516,"code":119517,"language":119518,"meta":135,"style":135},"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",[50,119520,119521,119526,119531,119540,119545,119554,119559,119579,119584,119595,119600,119609,119614,119642,119647,119666,119671,119690,119694,119699,119715,119719,119724,119754,119758,119763,119779,119783,119788,119803,119807,119812,119828,119832,119837,119849,119861,119865,119870,119887,119891,119896,119914,119918,119923,119932,119936,119941],{"__ignoreMap":135},[139,119522,119523],{"class":141,"line":142},[139,119524,119525],{"class":2512},"#更新相关的知识\n",[139,119527,119528],{"class":141,"line":210},[139,119529,119530],{"class":2512},"# 更新软件包列表（从服务器获取最新软件信息）\n",[139,119532,119533,119535,119538],{"class":141,"line":254},[139,119534,26840],{"class":781},[139,119536,119537],{"class":160}," apt",[139,119539,28502],{"class":160},[139,119541,119542],{"class":141,"line":262},[139,119543,119544],{"class":2512},"# 升级所有可更新的软件包（不删除旧包）\n",[139,119546,119547,119549,119551],{"class":141,"line":313},[139,119548,26840],{"class":781},[139,119550,119537],{"class":160},[139,119552,119553],{"class":160}," upgrade\n",[139,119555,119556],{"class":141,"line":462},[139,119557,119558],{"class":2512},"#更新和升级软件包\n",[139,119560,119561,119563,119565,119568,119570,119572,119574,119577],{"class":141,"line":474},[139,119562,26840],{"class":781},[139,119564,119537],{"class":160},[139,119566,119567],{"class":160}," update",[139,119569,28451],{"class":145},[139,119571,26840],{"class":781},[139,119573,119537],{"class":160},[139,119575,119576],{"class":160}," upgrade",[139,119578,103208],{"class":153},[139,119580,119581],{"class":141,"line":484},[139,119582,119583],{"class":2512},"#列出可更新的软件包及版本信息\n",[139,119585,119586,119589,119592],{"class":141,"line":989},[139,119587,119588],{"class":781},"apt",[139,119590,119591],{"class":160}," list",[139,119593,119594],{"class":153}," --upgradable\n",[139,119596,119597],{"class":141,"line":994},[139,119598,119599],{"class":2512},"#彻底升级（处理依赖关系，可能删除旧包）\n",[139,119601,119602,119604,119606],{"class":141,"line":999},[139,119603,26840],{"class":781},[139,119605,119537],{"class":160},[139,119607,119608],{"class":160}," full-upgrade\n",[139,119610,119611],{"class":141,"line":1006},[139,119612,119613],{"class":2512},"#设置指定版本\n",[139,119615,119616,119618,119620,119622,119624,119627,119629,119631,119633,119635,119638,119640],{"class":141,"line":1027},[139,119617,26840],{"class":781},[139,119619,119537],{"class":160},[139,119621,1841],{"class":160},[139,119623,31161],{"class":149},[139,119625,119626],{"class":160},"package_nam",[139,119628,628],{"class":145},[139,119630,958],{"class":149},[139,119632,150],{"class":160},[139,119634,796],{"class":149},[139,119636,119637],{"class":160},"version_numbe",[139,119639,3105],{"class":145},[139,119641,53545],{"class":149},[139,119643,119644],{"class":141,"line":1040},[139,119645,119646],{"class":2512},"#只安装软件包不升级\n",[139,119648,119649,119651,119653,119655,119657,119659,119661,119663],{"class":141,"line":2160},[139,119650,26840],{"class":781},[139,119652,119537],{"class":160},[139,119654,1841],{"class":160},[139,119656,31161],{"class":149},[139,119658,119626],{"class":160},[139,119660,628],{"class":145},[139,119662,958],{"class":149},[139,119664,119665],{"class":153}," --no-upgrade\n",[139,119667,119668],{"class":141,"line":2188},[139,119669,119670],{"class":2512},"#只升级，不存在就不安装\n",[139,119672,119673,119675,119677,119679,119681,119683,119685,119687],{"class":141,"line":3944},[139,119674,26840],{"class":781},[139,119676,119537],{"class":160},[139,119678,1841],{"class":160},[139,119680,31161],{"class":149},[139,119682,119626],{"class":160},[139,119684,628],{"class":145},[139,119686,958],{"class":149},[139,119688,119689],{"class":153}," --only-upgrade\n",[139,119691,119692],{"class":141,"line":3963},[139,119693,843],{"emptyLinePlaceholder":842},[139,119695,119696],{"class":141,"line":3968},[139,119697,119698],{"class":2512},"#安装指定的软件命令\n",[139,119700,119701,119703,119705,119707,119709,119711,119713],{"class":141,"line":3982},[139,119702,26840],{"class":781},[139,119704,119537],{"class":160},[139,119706,1841],{"class":160},[139,119708,31161],{"class":149},[139,119710,119626],{"class":160},[139,119712,628],{"class":145},[139,119714,53545],{"class":149},[139,119716,119717],{"class":141,"line":3987},[139,119718,843],{"emptyLinePlaceholder":842},[139,119720,119721],{"class":141,"line":4014},[139,119722,119723],{"class":2512},"#安装多个软件包\n",[139,119725,119726,119728,119730,119732,119734,119737,119740,119742,119744,119747,119749,119751],{"class":141,"line":4019},[139,119727,26840],{"class":781},[139,119729,119537],{"class":160},[139,119731,1841],{"class":160},[139,119733,31161],{"class":149},[139,119735,119736],{"class":160},"package_",[139,119738,119739],{"class":149},"1>",[139,119741,31161],{"class":149},[139,119743,119736],{"class":160},[139,119745,119746],{"class":149},"2>",[139,119748,31161],{"class":149},[139,119750,119736],{"class":160},[139,119752,119753],{"class":149},"3>\n",[139,119755,119756],{"class":141,"line":4036},[139,119757,843],{"emptyLinePlaceholder":842},[139,119759,119760],{"class":141,"line":4041},[139,119761,119762],{"class":2512},"#更新指定的软件命令\n",[139,119764,119765,119767,119769,119771,119773,119775,119777],{"class":141,"line":4046},[139,119766,26840],{"class":781},[139,119768,119537],{"class":160},[139,119770,119567],{"class":160},[139,119772,31161],{"class":149},[139,119774,119626],{"class":160},[139,119776,628],{"class":145},[139,119778,53545],{"class":149},[139,119780,119781],{"class":141,"line":4051},[139,119782,843],{"emptyLinePlaceholder":842},[139,119784,119785],{"class":141,"line":4065},[139,119786,119787],{"class":2512},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[139,119789,119790,119792,119795,119797,119799,119801],{"class":141,"line":4070},[139,119791,119588],{"class":781},[139,119793,119794],{"class":160}," show",[139,119796,31161],{"class":149},[139,119798,119626],{"class":160},[139,119800,628],{"class":145},[139,119802,53545],{"class":149},[139,119804,119805],{"class":141,"line":4860},[139,119806,843],{"emptyLinePlaceholder":842},[139,119808,119809],{"class":141,"line":4874},[139,119810,119811],{"class":2512},"#删除软件包命令\n",[139,119813,119814,119816,119818,119820,119822,119824,119826],{"class":141,"line":4882},[139,119815,26840],{"class":781},[139,119817,119537],{"class":160},[139,119819,28340],{"class":160},[139,119821,31161],{"class":149},[139,119823,119626],{"class":160},[139,119825,628],{"class":145},[139,119827,53545],{"class":149},[139,119829,119830],{"class":141,"line":4887},[139,119831,843],{"emptyLinePlaceholder":842},[139,119833,119834],{"class":141,"line":4893},[139,119835,119836],{"class":2512},"# 清理旧版本和缓存（释放磁盘空间）\n",[139,119838,119839,119841,119843,119846],{"class":141,"line":4899},[139,119840,26840],{"class":781},[139,119842,119537],{"class":160},[139,119844,119845],{"class":160}," autoremove",[139,119847,119848],{"class":2512},"  # 删除不再需要的依赖和库文件\n",[139,119850,119851,119853,119855,119858],{"class":141,"line":4904},[139,119852,26840],{"class":781},[139,119854,119537],{"class":160},[139,119856,119857],{"class":160}," clean",[139,119859,119860],{"class":2512},"       # 清理下载的缓存包\n",[139,119862,119863],{"class":141,"line":10222},[139,119864,843],{"emptyLinePlaceholder":842},[139,119866,119867],{"class":141,"line":10246},[139,119868,119869],{"class":2512},"#移除软件包及配置文件\n",[139,119871,119872,119874,119876,119879,119881,119883,119885],{"class":141,"line":10251},[139,119873,26840],{"class":781},[139,119875,119537],{"class":160},[139,119877,119878],{"class":160}," purge",[139,119880,31161],{"class":149},[139,119882,119626],{"class":160},[139,119884,628],{"class":145},[139,119886,53545],{"class":149},[139,119888,119889],{"class":141,"line":10257},[139,119890,843],{"emptyLinePlaceholder":842},[139,119892,119893],{"class":141,"line":10284},[139,119894,119895],{"class":2512},"#查找软件包命令\n",[139,119897,119898,119900,119902,119905,119907,119910,119912],{"class":141,"line":10289},[139,119899,26840],{"class":781},[139,119901,119537],{"class":160},[139,119903,119904],{"class":160}," search",[139,119906,31161],{"class":149},[139,119908,119909],{"class":160},"keywor",[139,119911,2753],{"class":145},[139,119913,53545],{"class":149},[139,119915,119916],{"class":141,"line":10295},[139,119917,843],{"emptyLinePlaceholder":842},[139,119919,119920],{"class":141,"line":10307},[139,119921,119922],{"class":2512},"#列出所有已安装的包\n",[139,119924,119925,119927,119929],{"class":141,"line":10319},[139,119926,119588],{"class":781},[139,119928,119591],{"class":160},[139,119930,119931],{"class":153}," --installed\n",[139,119933,119934],{"class":141,"line":10331},[139,119935,843],{"emptyLinePlaceholder":842},[139,119937,119938],{"class":141,"line":11990},[139,119939,119940],{"class":2512},"#列出所有已安装的包的版本信息\n",[139,119942,119943,119945,119947],{"class":141,"line":12015},[139,119944,119588],{"class":781},[139,119946,119591],{"class":160},[139,119948,119949],{"class":153}," --all-versions\n",[2348,119951,119952],{},"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":135,"searchDepth":210,"depth":210,"links":119954},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119499,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119961,"title":119962,"body":119963,"description":2384,"extension":2385,"meta":120704,"navigation":842,"path":120705,"seo":120706,"stem":120707,"__hash__":120708},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119964,"toc":120691},[119965,119968,119972,119975,119981,119985,119989,119995,120000,120005,120010,120015,120020,120023,120026,120029,120032,120036,120039,120044,120047,120052,120055,120060,120067,120070,120073,120076,120079,120082,120093,120097,120101,120106,120111,120115,120120,120124,120129,120133,120137,120142,120145,120190,120195,120199,120203,120208,120214,120219,120229,120234,120244,120249,120254,120281,120285,120288,120293,120296,120321,120325,120330,120333,120338,120343,120363,120368,120371,120386,120390,120443,120446,120451,120455,120458,120473,120476,120479,120484,120488,120492,120495,120499,120503,120506,120511,120516,120520,120527,120535,120538,120545,120550,120555,120558,120563,120570,120575,120582,120586,120588,120593,120597,120600,120603,120608,120611,120616,120619,120624,120629,120634,120638,120643,120647,120688],[10,119966,119962],{"id":119967},"_2-linux装机教程",[14,119969,119971],{"id":119970},"_21-实体机","2.1 实体机",[19,119973,119974],{},"使用清华源：（Ubuntu24.04）",[19,119976,119977],{},[2680,119978,119979],{"href":119979,"rel":119980},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26128],[14,119982,119984],{"id":119983},"_22-普通虚拟机","2.2 普通虚拟机",[1217,119986,119988],{"id":119987},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119990,119991],{},[2680,119992,119993],{"href":119993,"rel":119994},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26128],[19,119996,119997],{},[3760,119998],{"alt":135,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120001,120002],{},[3760,120003],{"alt":135,"src":120004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120006,120007],{},[3760,120008],{"alt":135,"src":120009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120011,120012],{},[3760,120013],{"alt":135,"src":120014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120016,120017],{},[3760,120018],{"alt":135,"src":120019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120021,120022],{},"内存4G（4096MB）；",[19,120024,120025],{},"CPU给4个核；",[19,120027,120028],{},"硬盘动态分配60G；",[19,120030,120031],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1217,120033,120035],{"id":120034},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120037,120038],{},"按照1.1的步骤下载Ubuntu",[19,120040,120041],{},[3760,120042],{"alt":135,"src":120043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120045,120046],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120048,120049],{},[3760,120050],{"alt":135,"src":120051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120053,120054],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120056,120057],{},[3760,120058],{"alt":135,"src":120059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120061,120062,120063,120066],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1674,120064,120065],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120068,120069],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120071,120072],{},"将改动写入磁盘吗 继续",[19,120074,120075],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120077,120078],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120080,120081],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120083,120084,120085,120088,120089,120092],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1674,120086,120087],{},"除了"," 选不发送系统信息与不升级之外， ",[1674,120090,120091],{},"其它"," 都跳过或前进）",[1217,120094,120096],{"id":120095},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24265,120098,120100],{"id":120099},"_2231-全屏","2.2.3.1 全屏",[19,120102,120103],{},[3760,120104],{"alt":135,"src":120105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120107,120108],{},[3760,120109],{"alt":135,"src":120110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24265,120112,120114],{"id":120113},"_2232-文件交换","2.2.3.2 文件交换",[19,120116,120117],{},[3760,120118],{"alt":135,"src":120119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24265,120121,120123],{"id":120122},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120125,120126],{},[3760,120127],{"alt":135,"src":120128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120130,120132],{"id":120131},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1217,120134,120136],{"id":120135},"_231-简介与优缺点","2.3.1 简介与优缺点",[1760,120138,120139],{},[1763,120140,120141],{},"什么情况下推荐？",[19,120143,120144],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1760,120146,120147],{"start":210},[1763,120148,120149,120150],{},"优缺点：",[1760,120151,120152,120182],{},[1763,120153,120154,120155],{},"优点：",[1760,120156,120157,120160,120167,120170,120173,120176,120179],{},[1763,120158,120159],{},"WSL2是最好的Linux发行版;(bushi)",[1763,120161,120162,120163,120166],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1674,120164,120165],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1763,120168,120169],{},"非常方便调用USB设备，可以USB直通;",[1763,120171,120172],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1763,120174,120175],{},"非常方便Win与WSL2互相传文件等协同操作;",[1763,120177,120178],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1763,120180,120181],{},"非常方便使用Windows的VScode远程开发;",[1763,120183,120184,120185],{},"缺点：",[1760,120186,120187],{},[1763,120188,120189],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120191,120192],{},[3760,120193],{"alt":135,"src":120194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1217,120196,120198],{"id":120197},"_232-安装教程","2.3.2 安装教程",[24265,120200,120202],{"id":120201},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1760,120204,120205],{},[1763,120206,120207],{},"方法一(图形界面)",[19,120209,120210,120211,1122],{},"用Win+R输入",[50,120212,120213],{},"appwiz.cpl",[19,120215,120216],{},[3760,120217],{"alt":135,"src":120218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120220,120221,120222,120225,120226,28733],{},"点击OK进入 ",[1674,120223,120224],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1674,120227,120228],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120230,120231],{},[3760,120232],{"alt":135,"src":120233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120235,120236,120237,103245,120240,120243],{},"选择 ",[1674,120238,120239],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1674,120241,120242],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120245,120246],{},[3760,120247],{"alt":135,"src":120248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1760,120250,120251],{"start":210},[1763,120252,120253],{},"方法二(命令行)",[130,120255,120259],{"className":120256,"code":120257,"language":120258,"meta":135,"style":135},"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",[50,120260,120261,120266,120271,120276],{"__ignoreMap":135},[139,120262,120263],{"class":141,"line":142},[139,120264,120265],{},"# 开启 Linux 子系统\n",[139,120267,120268],{"class":141,"line":210},[139,120269,120270],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[139,120272,120273],{"class":141,"line":254},[139,120274,120275],{},"# 开启虚拟机平台\n",[139,120277,120278],{"class":141,"line":262},[139,120279,120280],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24265,120282,120284],{"id":120283},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120286,120287],{},"用管理员权限打开powershell",[19,120289,120290],{},[3760,120291],{"alt":135,"src":120292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120294,120295],{},"升级WSL并设置默认版本为WSL2",[130,120297,120299],{"className":120256,"code":120298,"language":120258,"meta":135,"style":135},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[50,120300,120301,120306,120311,120316],{"__ignoreMap":135},[139,120302,120303],{"class":141,"line":142},[139,120304,120305],{},"# 更新 wsl\n",[139,120307,120308],{"class":141,"line":210},[139,120309,120310],{},"wsl --update\n",[139,120312,120313],{"class":141,"line":254},[139,120314,120315],{},"# 将 wsl 版本设置为 wsl2\n",[139,120317,120318],{"class":141,"line":262},[139,120319,120320],{},"wsl --set-default-version 2\n",[24265,120322,120324],{"id":120323},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1760,120326,120327],{},[1763,120328,120329],{},"方式一(商店下载)",[19,120331,120332],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120334,120335],{},[3760,120336],{"alt":135,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1760,120339,120340],{"start":210},[1763,120341,120342],{},"方式二(命令行安装)",[130,120344,120346],{"className":120256,"code":120345,"language":120258,"meta":135,"style":135},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[50,120347,120348,120353,120358],{"__ignoreMap":135},[139,120349,120350],{"class":141,"line":142},[139,120351,120352],{},"# 列出可安装的 Linux 版本\n",[139,120354,120355],{"class":141,"line":210},[139,120356,120357],{},"#（需要科学手段）\n",[139,120359,120360],{"class":141,"line":254},[139,120361,120362],{},"wsl --list --online\n",[19,120364,120365],{},[3760,120366],{"alt":135,"src":120367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120369,120370],{},"选择对应发行版并安装",[130,120372,120374],{"className":120256,"code":120373,"language":120258,"meta":135,"style":135},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[50,120375,120376,120381],{"__ignoreMap":135},[139,120377,120378],{"class":141,"line":142},[139,120379,120380],{},"# Ubuntu安装完毕后需要重启系统\n",[139,120382,120383],{"class":141,"line":210},[139,120384,120385],{},"wsl --install -d Ubuntu-24.04\n",[24265,120387,120389],{"id":120388},"_2324-查看系统状态","2.3.2.4 查看系统状态",[130,120391,120393],{"className":120256,"code":120392,"language":120258,"meta":135,"style":135},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[50,120394,120395,120400,120405,120410,120415,120419,120423,120428,120433,120438],{"__ignoreMap":135},[139,120396,120397],{"class":141,"line":142},[139,120398,120399],{},"# 查看 wsl\n",[139,120401,120402],{"class":141,"line":210},[139,120403,120404],{},"wsl -l\n",[139,120406,120407],{"class":141,"line":254},[139,120408,120409],{},"# 查看 wsl 运行版本或模式\n",[139,120411,120412],{"class":141,"line":262},[139,120413,120414],{},"wsl -l -v\n",[139,120416,120417],{"class":141,"line":313},[139,120418,843],{"emptyLinePlaceholder":842},[139,120420,120421],{"class":141,"line":462},[139,120422,843],{"emptyLinePlaceholder":842},[139,120424,120425],{"class":141,"line":474},[139,120426,120427],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[139,120429,120430],{"class":141,"line":484},[139,120431,120432],{},"wsl --set-version \u003Cdistro> 2\n",[139,120434,120435],{"class":141,"line":989},[139,120436,120437],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[139,120439,120440],{"class":141,"line":994},[139,120441,120442],{},"wsl --unregister \u003Cdistro>\n",[19,120444,120445],{},"输出Version为2即正常",[19,120447,120448],{},[3760,120449],{"alt":135,"src":120450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24265,120452,120454],{"id":120453},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120456,120457],{},"直接在Powershell里输入wsl命令进入子系统",[130,120459,120461],{"className":120256,"code":120460,"language":120258,"meta":135,"style":135},"# 进入子系统\nwsl\n",[50,120462,120463,120468],{"__ignoreMap":135},[139,120464,120465],{"class":141,"line":142},[139,120466,120467],{},"# 进入子系统\n",[139,120469,120470],{"class":141,"line":210},[139,120471,120472],{},"wsl\n",[19,120474,120475],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120477,120478],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120480,120481],{},[3760,120482],{"alt":135,"src":120483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1217,120485,120487],{"id":120486},"_233-配置各种环境","2.3.3 配置各种环境",[24265,120489,120491],{"id":120490},"_2331-换源","2.3.3.1 换源",[19,120493,120494],{},"(同实体机LINUX，往下找教程)",[24265,120496,120498],{"id":120497},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25177,120500,120502],{"id":120501},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120504,120505],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120507,120508],{},[3760,120509],{"alt":135,"src":120510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120512,120513],{},[3760,120514],{"alt":135,"src":120515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25177,120517,120519],{"id":120518},"_23322-cuda","2.3.3.2.2 CUDA",[19,120521,120522,120523],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2680,120524,120525],{"href":120525,"rel":120526},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26128],[19,120528,120529,120532],{},[3760,120530],{"alt":135,"src":120531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3760,120533],{"alt":135,"src":120534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120536,120537],{},"在下方的网站，选择合适的版本。",[19,120539,120540,120541],{},"WSL2 专属 CUDA 指南：",[2680,120542,120543],{"href":120543,"rel":120544},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26128],[19,120546,120547],{},[1674,120548,120549],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120551,120552],{},[3760,120553],{"alt":135,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120556,120557],{},"挨行敲一遍",[19,120559,120560],{},[3760,120561],{"alt":135,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120564,120565,120566,120569],{},"敲完后，输入",[50,120567,120568],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120571,120572],{},[3760,120573],{"alt":135,"src":120574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120576,120577,120578,120581],{},"（请详看下方教程的",[1674,120579,120580],{},"安装CUDA的配置环境来看","如何配置环境）",[25177,120583,120585],{"id":120584},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120587,120494],{},[19,120589,120590],{},[3760,120591],{"alt":135,"src":120592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24265,120594,120596],{"id":120595},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120598,120599],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120601,120602],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120604,120605],{},[3760,120606],{"alt":135,"src":120607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120609,120610],{},"连接WSL2",[19,120612,120613],{},[3760,120614],{"alt":135,"src":120615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120617,120618],{},"远程开发成功。",[19,120620,120621],{},[3760,120622],{"alt":135,"src":120623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120625,120626],{},[3760,120627],{"alt":135,"src":120628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120630,120631],{},[3760,120632],{"alt":135,"src":120633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24265,120635,120637],{"id":120636},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120639,120640],{},[3760,120641],{"alt":135,"src":120642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24265,120644,120646],{"id":120645},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[130,120648,120650],{"className":119516,"code":120649,"language":119518,"meta":135,"style":135},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[50,120651,120652,120660,120668,120679,120683],{"__ignoreMap":135},[139,120653,120654,120656,120658],{"class":141,"line":142},[139,120655,26840],{"class":781},[139,120657,119537],{"class":160},[139,120659,28502],{"class":160},[139,120661,120662,120664,120666],{"class":141,"line":210},[139,120663,26840],{"class":781},[139,120665,119537],{"class":160},[139,120667,119553],{"class":160},[139,120669,120670,120672,120674,120676],{"class":141,"line":254},[139,120671,26840],{"class":781},[139,120673,119537],{"class":160},[139,120675,1841],{"class":160},[139,120677,120678],{"class":160}," mesa-utils\n",[139,120680,120681],{"class":141,"line":262},[139,120682,843],{"emptyLinePlaceholder":842},[139,120684,120685],{"class":141,"line":313},[139,120686,120687],{"class":2512},"#然后重启wsl2即可\n",[2348,120689,120690],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":135,"searchDepth":210,"depth":210,"links":120692},[120693,120694,120699],{"id":119970,"depth":210,"text":119971},{"id":119983,"depth":210,"text":119984,"children":120695},[120696,120697,120698],{"id":119987,"depth":254,"text":119988},{"id":120034,"depth":254,"text":120035},{"id":120095,"depth":254,"text":120096},{"id":120131,"depth":210,"text":120132,"children":120700},[120701,120702,120703],{"id":120135,"depth":254,"text":120136},{"id":120197,"depth":254,"text":120198},{"id":120486,"depth":254,"text":120487},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119962,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120710,"title":120711,"body":120712,"description":2384,"extension":2385,"meta":123646,"navigation":842,"path":123647,"seo":123648,"stem":123649,"__hash__":123650},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120713,"toc":123618},[120714,120717,120721,120727,120731,120737,120741,120929,120932,120937,120941,120945,120948,120951,120957,120962,120965,120968,120973,121006,121011,121015,121092,121095,121100,121104,121107,121146,121149,121158,121175,121180,121187,121304,121309,121312,121339,121344,121348,121357,121407,121414,121418,121421,121435,121442,121476,121481,121485,121508,121511,121516,121520,121523,121526,121529,121571,121575,121578,121581,121622,121626,121630,121633,121638,121643,121646,121669,121672,121680,121685,121688,121693,121698,121701,121706,121710,121715,121738,121743,121805,121813,121818,121823,121826,121831,121834,121839,121844,121861,121866,121872,121877,121891,121895,121898,121901,121904,121947,121950,121955,122056,122059,122064,122068,122072,122109,122113,122117,122121,122167,122171,122216,122220,122227,122235,122290,122293,122370,122373,122396,122400,122403,122408,122413,122421,122424,122429,122434,122439,122442,122447,122456,122459,122464,122467,122538,122543,122546,122551,122554,122559,122562,122567,122570,122575,122580,122583,122658,122661,122674,122679,122682,122696,122699,122728,122733,122762,122765,122770,122774,122779,122788,122791,122796,122799,122804,122807,122810,122815,122818,122823,122828,122831,122836,122839,122964,122969,122999,123002,123007,123012,123029,123032,123075,123078,123105,123110,123123,123266,123270,123275,123289,123292,123343,123346,123376,123379,123395,123400,123414,123417,123484,123489,123498,123503,123506,123518,123523,123530,123554,123557,123562,123565,123584,123589,123596,123608,123615],[10,120715,120711],{"id":120716},"_3-安装必备配置",[14,120718,120720],{"id":120719},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[130,120722,120725],{"className":120723,"code":120724,"language":645},[643],"  打开下方网站（注意，该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",[50,120726,120724],{"__ignoreMap":135},[1217,120728,120730],{"id":120729},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[130,120732,120735],{"className":120733,"code":120734,"language":645},[643],"  输入以下命令\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",[50,120736,120734],{"__ignoreMap":135},[1217,120738,120740],{"id":120739},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[130,120742,120746],{"className":120743,"code":120744,"language":120745,"meta":135,"style":135},"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",[50,120747,120748,120756,120767,120779,120793,120797,120807,120812,120816,120820,120825,120829,120841,120845,120850,120854,120865,120869,120885,120889,120900,120904,120909,120913,120921],{"__ignoreMap":135},[139,120749,120750,120752,120754],{"class":141,"line":142},[139,120751,26840],{"class":781},[139,120753,119537],{"class":160},[139,120755,28502],{"class":160},[139,120757,120758,120760,120762,120764],{"class":141,"line":210},[139,120759,26840],{"class":781},[139,120761,119537],{"class":160},[139,120763,1841],{"class":160},[139,120765,120766],{"class":160}," vim\n",[139,120768,120769,120771,120774,120776],{"class":141,"line":254},[139,120770,26840],{"class":781},[139,120772,120773],{"class":160}," rm",[139,120775,27588],{"class":153},[139,120777,120778],{"class":160}," \u002Fetc\u002Fapt\u002Fsources.list\n",[139,120780,120781,120783,120785,120787,120790],{"class":141,"line":262},[139,120782,26840],{"class":781},[139,120784,120773],{"class":160},[139,120786,27588],{"class":153},[139,120788,120789],{"class":160}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[139,120791,120792],{"class":153},"**\n",[139,120794,120795],{"class":141,"line":313},[139,120796,843],{"emptyLinePlaceholder":842},[139,120798,120799,120801,120804],{"class":141,"line":462},[139,120800,26840],{"class":781},[139,120802,120803],{"class":160}," vim",[139,120805,120806],{"class":160}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[139,120808,120809],{"class":141,"line":474},[139,120810,120811],{"class":160},"```\n",[139,120813,120814],{"class":141,"line":484},[139,120815,843],{"emptyLinePlaceholder":842},[139,120817,120818],{"class":141,"line":989},[139,120819,843],{"emptyLinePlaceholder":842},[139,120821,120822],{"class":141,"line":994},[139,120823,120824],{"class":781},"选择好Ubuntu版本后，复制下方的内容。\n",[139,120826,120827],{"class":141,"line":999},[139,120828,843],{"emptyLinePlaceholder":842},[139,120830,120831,120833,120836,120839],{"class":141,"line":1006},[139,120832,2668],{"class":149},[139,120834,120835],{"class":160},"[](",[139,120837,120838],{"class":781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[139,120840,164],{"class":160},[139,120842,120843],{"class":141,"line":1027},[139,120844,843],{"emptyLinePlaceholder":842},[139,120846,120847],{"class":141,"line":1040},[139,120848,120849],{"class":781},"粘贴进去\n",[139,120851,120852],{"class":141,"line":2160},[139,120853,843],{"emptyLinePlaceholder":842},[139,120855,120856,120858,120860,120863],{"class":141,"line":2188},[139,120857,2668],{"class":149},[139,120859,120835],{"class":160},[139,120861,120862],{"class":781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[139,120864,164],{"class":160},[139,120866,120867],{"class":141,"line":3944},[139,120868,843],{"emptyLinePlaceholder":842},[139,120870,120871,120874,120877,120880,120882],{"class":141,"line":3963},[139,120872,120873],{"class":781},"按一下ESC，然后英文冒号，输入",[139,120875,120876],{"class":160}," `",[139,120878,120879],{"class":781},":wq!",[139,120881,3403],{"class":160},[139,120883,120884],{"class":781},"然后回车\n",[139,120886,120887],{"class":141,"line":3968},[139,120888,843],{"emptyLinePlaceholder":842},[139,120890,120891,120893,120895,120898],{"class":141,"line":3982},[139,120892,2668],{"class":149},[139,120894,120835],{"class":160},[139,120896,120897],{"class":781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[139,120899,164],{"class":160},[139,120901,120902],{"class":141,"line":3987},[139,120903,843],{"emptyLinePlaceholder":842},[139,120905,120906],{"class":141,"line":4014},[139,120907,120908],{"class":781},"输入以下命令\n",[139,120910,120911],{"class":141,"line":4019},[139,120912,843],{"emptyLinePlaceholder":842},[139,120914,120915,120918],{"class":141,"line":4036},[139,120916,120917],{"class":160},"```",[139,120919,120920],{"class":781},"Bash\n",[139,120922,120923,120925,120927],{"class":141,"line":4041},[139,120924,26840],{"class":781},[139,120926,119537],{"class":160},[139,120928,28502],{"class":160},[19,120930,120931],{},"这里被替换成对应学校则成功",[19,120933,120934],{},[3760,120935],{"alt":135,"src":120936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120938,120940],{"id":120939},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1217,120942,120944],{"id":120943},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120946,120947],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120949,120950],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120952,120953],{},[2680,120954,120955],{"href":120955,"rel":120956},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26128],[19,120958,120959],{},[3760,120960],{"alt":135,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120963,120964],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120966,120967],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120969,120970],{},[3760,120971],{"alt":135,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[130,120974,120976],{"className":119516,"code":120975,"language":119518,"meta":135,"style":135},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[50,120977,120978,120983,120990,120995],{"__ignoreMap":135},[139,120979,120980],{"class":141,"line":142},[139,120981,120982],{"class":2512},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[139,120984,120985,120987],{"class":141,"line":210},[139,120986,103503],{"class":153},[139,120988,120989],{"class":160}," ~\u002FDownloads\n",[139,120991,120992],{"class":141,"line":254},[139,120993,120994],{"class":2512},"#下方chrome安装包名不一定是这个，根据名字来看\n",[139,120996,120997,120999,121001,121003],{"class":141,"line":262},[139,120998,26840],{"class":781},[139,121000,119537],{"class":160},[139,121002,1841],{"class":160},[139,121004,121005],{"class":160}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121007,121008],{},[3760,121009],{"alt":135,"src":121010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1217,121012,121014],{"id":121013},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[130,121016,121018],{"className":119516,"code":121017,"language":119518,"meta":135,"style":135},"# 老版\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",[50,121019,121020,121025,121033,121044,121049,121053,121058,121068,121076,121087],{"__ignoreMap":135},[139,121021,121022],{"class":141,"line":142},[139,121023,121024],{"class":2512},"# 老版\n",[139,121026,121027,121029,121031],{"class":141,"line":210},[139,121028,26840],{"class":781},[139,121030,119537],{"class":160},[139,121032,28502],{"class":160},[139,121034,121035,121037,121039,121041],{"class":141,"line":254},[139,121036,26840],{"class":781},[139,121038,119537],{"class":160},[139,121040,1841],{"class":160},[139,121042,121043],{"class":160}," neofetch\n",[139,121045,121046],{"class":141,"line":262},[139,121047,121048],{"class":781},"neofetch\n",[139,121050,121051],{"class":141,"line":313},[139,121052,843],{"emptyLinePlaceholder":842},[139,121054,121055],{"class":141,"line":462},[139,121056,121057],{"class":2512},"# 新版\n",[139,121059,121060,121062,121065],{"class":141,"line":474},[139,121061,26840],{"class":781},[139,121063,121064],{"class":160}," add-apt-repository",[139,121066,121067],{"class":160}," ppa:zhangsongcui3371\u002Ffastfetch\n",[139,121069,121070,121072,121074],{"class":141,"line":484},[139,121071,26840],{"class":781},[139,121073,119537],{"class":160},[139,121075,28502],{"class":160},[139,121077,121078,121080,121082,121084],{"class":141,"line":989},[139,121079,26840],{"class":781},[139,121081,119537],{"class":160},[139,121083,1841],{"class":160},[139,121085,121086],{"class":160}," fastfetch\n",[139,121088,121089],{"class":141,"line":994},[139,121090,121091],{"class":781},"fastfetch\n",[19,121093,121094],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121096,121097],{},[3760,121098],{"alt":135,"src":121099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1217,121101,121103],{"id":121102},"_323-移除snap应用","3.2.3 移除snap应用",[19,121105,121106],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[130,121108,121110],{"className":119516,"code":121109,"language":119518,"meta":135,"style":135},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[50,121111,121112,121124,121135],{"__ignoreMap":135},[139,121113,121114,121116,121118,121121],{"class":141,"line":142},[139,121115,26840],{"class":781},[139,121117,28773],{"class":160},[139,121119,121120],{"class":160}," disable",[139,121122,121123],{"class":160}," snapd.service\n",[139,121125,121126,121128,121130,121132],{"class":141,"line":210},[139,121127,26840],{"class":781},[139,121129,28773],{"class":160},[139,121131,121120],{"class":160},[139,121133,121134],{"class":160}," snapd.socket\n",[139,121136,121137,121139,121141,121143],{"class":141,"line":254},[139,121138,26840],{"class":781},[139,121140,28773],{"class":160},[139,121142,121120],{"class":160},[139,121144,121145],{"class":160}," snapd.seeded.service\n",[19,121147,121148],{},"然后查看snap应用列表",[19,121150,121151,121152,121157],{},"根据你安装的选择不同（最小安装或普通安装），有",[2680,121153,121156],{"href":121154,"rel":121155},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26128],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[130,121159,121161],{"className":119516,"code":121160,"language":119518,"meta":135,"style":135},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[50,121162,121163,121168],{"__ignoreMap":135},[139,121164,121165],{"class":141,"line":142},[139,121166,121167],{"class":2512},"# 查询当前系统上snap安装了哪些app\n",[139,121169,121170,121173],{"class":141,"line":210},[139,121171,121172],{"class":781},"snap",[139,121174,1899],{"class":160},[19,121176,121177],{},[3760,121178],{"alt":135,"src":121179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121181,121182,121183,121186],{},"卸载掉图中所有应用，按照 ",[1674,121184,121185],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[130,121188,121190],{"className":119516,"code":121189,"language":119518,"meta":135,"style":135},"#移除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",[50,121191,121192,121197,121209,121214,121225,121230,121241,121246,121257,121262,121266,121271,121282,121293],{"__ignoreMap":135},[139,121193,121194],{"class":141,"line":142},[139,121195,121196],{"class":2512},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[139,121198,121199,121201,121204,121206],{"class":141,"line":210},[139,121200,26840],{"class":781},[139,121202,121203],{"class":160}," snap",[139,121205,28340],{"class":160},[139,121207,121208],{"class":160}," snap-store\n",[139,121210,121211],{"class":141,"line":254},[139,121212,121213],{"class":2512},"#移除firefox浏览器\n",[139,121215,121216,121218,121220,121222],{"class":141,"line":262},[139,121217,26840],{"class":781},[139,121219,121203],{"class":160},[139,121221,28340],{"class":160},[139,121223,121224],{"class":160}," firefox\n",[139,121226,121227],{"class":141,"line":313},[139,121228,121229],{"class":2512},"#移除gnome-42-2204\n",[139,121231,121232,121234,121236,121238],{"class":141,"line":462},[139,121233,26840],{"class":781},[139,121235,121203],{"class":160},[139,121237,28340],{"class":160},[139,121239,121240],{"class":160}," gnome-42-2204\n",[139,121242,121243],{"class":141,"line":474},[139,121244,121245],{"class":2512},"#移除gtk-common-themes\n",[139,121247,121248,121250,121252,121254],{"class":141,"line":484},[139,121249,26840],{"class":781},[139,121251,121203],{"class":160},[139,121253,28340],{"class":160},[139,121255,121256],{"class":160}," gtk-common-themes\n",[139,121258,121259],{"class":141,"line":989},[139,121260,121261],{"class":2512},"#移除其它...\n",[139,121263,121264],{"class":141,"line":994},[139,121265,4957],{"class":145},[139,121267,121268],{"class":141,"line":999},[139,121269,121270],{"class":2512},"#移除core22,bare以及snapd\n",[139,121272,121273,121275,121277,121279],{"class":141,"line":1006},[139,121274,26840],{"class":781},[139,121276,121203],{"class":160},[139,121278,28340],{"class":160},[139,121280,121281],{"class":160}," core22\n",[139,121283,121284,121286,121288,121290],{"class":141,"line":1027},[139,121285,26840],{"class":781},[139,121287,121203],{"class":160},[139,121289,28340],{"class":160},[139,121291,121292],{"class":160}," bare\n",[139,121294,121295,121297,121299,121301],{"class":141,"line":1040},[139,121296,26840],{"class":781},[139,121298,121203],{"class":160},[139,121300,28340],{"class":160},[139,121302,121303],{"class":160}," snapd\n",[19,121305,121306],{},[3760,121307],{"alt":135,"src":121308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121310,121311],{},"输入以下命令查看是否还有snap包",[130,121313,121315],{"className":119516,"code":121314,"language":119518,"meta":135,"style":135},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[50,121316,121317,121323,121327,121331,121335],{"__ignoreMap":135},[139,121318,121319,121321],{"class":141,"line":142},[139,121320,121172],{"class":781},[139,121322,1899],{"class":160},[139,121324,121325],{"class":141,"line":210},[139,121326,121024],{"class":2512},[139,121328,121329],{"class":141,"line":254},[139,121330,121048],{"class":781},[139,121332,121333],{"class":141,"line":262},[139,121334,121057],{"class":2512},[139,121336,121337],{"class":141,"line":313},[139,121338,121091],{"class":781},[19,121340,121341],{},[3760,121342],{"alt":135,"src":121343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1217,121345,121347],{"id":121346},"_324-移除snap","3.2.4 移除snap",[19,121349,121350,121351,121356],{},"在删除掉",[2680,121352,121355],{"href":121353,"rel":121354},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26128],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[130,121358,121360],{"className":119516,"code":121359,"language":119518,"meta":135,"style":135}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[50,121361,121362,121367,121380,121385,121396],{"__ignoreMap":135},[139,121363,121364],{"class":141,"line":142},[139,121365,121366],{"class":2512}," #使用apt移除掉snap\n",[139,121368,121369,121371,121373,121375,121378],{"class":141,"line":210},[139,121370,26840],{"class":781},[139,121372,119537],{"class":160},[139,121374,119845],{"class":160},[139,121376,121377],{"class":153}," --purge",[139,121379,121303],{"class":160},[139,121381,121382],{"class":141,"line":254},[139,121383,121384],{"class":2512},"#移除snapd的一些目录\n",[139,121386,121387,121389,121391,121393],{"class":141,"line":262},[139,121388,26840],{"class":781},[139,121390,120773],{"class":160},[139,121392,27588],{"class":153},[139,121394,121395],{"class":160}," \u002Fvar\u002Fcache\u002Fsnapd\n",[139,121397,121398,121400,121402,121404],{"class":141,"line":313},[139,121399,26840],{"class":781},[139,121401,120773],{"class":160},[139,121403,27588],{"class":153},[139,121405,121406],{"class":160}," ~\u002Fsnap\n",[19,121408,121409,121410,121413],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[50,121411,121412],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1217,121415,121417],{"id":121416},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121419,121420],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[130,121422,121424],{"className":119516,"code":121423,"language":119518,"meta":135,"style":135},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[50,121425,121426],{"__ignoreMap":135},[139,121427,121428,121430,121432],{"class":141,"line":142},[139,121429,26840],{"class":781},[139,121431,120803],{"class":160},[139,121433,121434],{"class":160}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121436,121437,121438,121441],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[50,121439,121440],{},":wq"," 回车",[130,121443,121445],{"className":119516,"code":121444,"language":119518,"meta":135,"style":135},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[50,121446,121447,121454,121468],{"__ignoreMap":135},[139,121448,121449,121452],{"class":141,"line":142},[139,121450,121451],{"class":781},"Package:",[139,121453,121303],{"class":160},[139,121455,121456,121459,121462,121465],{"class":141,"line":210},[139,121457,121458],{"class":781},"Pin:",[139,121460,121461],{"class":160}," release",[139,121463,121464],{"class":160}," a=",[139,121466,121467],{"class":153},"*\n",[139,121469,121470,121473],{"class":141,"line":254},[139,121471,121472],{"class":781},"Pin-Priority:",[139,121474,121475],{"class":153}," -10\n",[19,121477,121478],{},[3760,121479],{"alt":135,"src":121480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1217,121482,121484],{"id":121483},"_326-测试是否成功","3.2.6 测试是否成功",[130,121486,121488],{"className":119516,"code":121487,"language":119518,"meta":135,"style":135},"sudo apt update\nsudo apt install firefox\n",[50,121489,121490,121498],{"__ignoreMap":135},[139,121491,121492,121494,121496],{"class":141,"line":142},[139,121493,26840],{"class":781},[139,121495,119537],{"class":160},[139,121497,28502],{"class":160},[139,121499,121500,121502,121504,121506],{"class":141,"line":210},[139,121501,26840],{"class":781},[139,121503,119537],{"class":160},[139,121505,1841],{"class":160},[139,121507,121224],{"class":160},[19,121509,121510],{},"这里提示snapd无法被安装，就证明成功了",[19,121512,121513],{},[3760,121514],{"alt":135,"src":121515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1217,121517,121519],{"id":121518},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121521,121522],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121524,121525],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121527,121528],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[130,121530,121532],{"className":119516,"code":121531,"language":119518,"meta":135,"style":135},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[50,121533,121534,121539,121548,121553,121561],{"__ignoreMap":135},[139,121535,121536],{"class":141,"line":142},[139,121537,121538],{"class":2512},"# 添加Mozilla提供的源\n",[139,121540,121541,121543,121545],{"class":141,"line":210},[139,121542,26840],{"class":781},[139,121544,121064],{"class":160},[139,121546,121547],{"class":160}," ppa:mozillateam\u002Fppa\n",[139,121549,121550],{"class":141,"line":254},[139,121551,121552],{"class":2512},"# 安装Firefox\n",[139,121554,121555,121557,121559],{"class":141,"line":262},[139,121556,26840],{"class":781},[139,121558,119537],{"class":160},[139,121560,28502],{"class":160},[139,121562,121563,121565,121567,121569],{"class":141,"line":313},[139,121564,26840],{"class":781},[139,121566,119537],{"class":160},[139,121568,1841],{"class":160},[139,121570,121224],{"class":160},[1217,121572,121574],{"id":121573},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121576,121577],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121579,121580],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[130,121582,121584],{"className":119516,"code":121583,"language":119518,"meta":135,"style":135},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[50,121585,121586,121591,121601,121609,121613],{"__ignoreMap":135},[139,121587,121588],{"class":141,"line":142},[139,121589,121590],{"class":2512},"#删掉禁止安装snap的配置文件\n",[139,121592,121593,121595,121597,121599],{"class":141,"line":210},[139,121594,26840],{"class":781},[139,121596,120773],{"class":160},[139,121598,27588],{"class":153},[139,121600,121434],{"class":160},[139,121602,121603,121605,121607],{"class":141,"line":254},[139,121604,26840],{"class":781},[139,121606,119537],{"class":160},[139,121608,28502],{"class":160},[139,121610,121611],{"class":141,"line":262},[139,121612,843],{"emptyLinePlaceholder":842},[139,121614,121615,121617,121619],{"class":141,"line":313},[139,121616,26840],{"class":781},[139,121618,119537],{"class":160},[139,121620,121621],{"class":160}," dist-update\n",[14,121623,121625],{"id":121624},"_33-中文输入法","3.3 中文输入法",[1217,121627,121629],{"id":121628},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121631,121632],{},"官网下载搜狗输入法",[19,121634,121635],{},[3760,121636],{"alt":135,"src":121637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121639,121640],{},[3760,121641],{"alt":135,"src":121642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121644,121645],{},"打开终端输入如下",[130,121647,121649],{"className":119516,"code":121648,"language":119518,"meta":135,"style":135},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[50,121650,121651,121658],{"__ignoreMap":135},[139,121652,121653,121655],{"class":141,"line":142},[139,121654,103503],{"class":153},[139,121656,121657],{"class":160}," ~\u002FDownloads\u002F\n",[139,121659,121660,121662,121664,121666],{"class":141,"line":210},[139,121661,26840],{"class":781},[139,121663,119537],{"class":160},[139,121665,1841],{"class":160},[139,121667,121668],{"class":160}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121670,121671],{},"打开Fcitx",[19,121673,121674,121677],{},[3760,121675],{"alt":135,"src":121676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3760,121678],{"alt":135,"src":121679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121681,121682],{},[3760,121683],{"alt":135,"src":121684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121686,121687],{},"添加搜狗输入法",[19,121689,121690],{},[3760,121691],{"alt":135,"src":121692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121694,121695],{},[3760,121696],{"alt":135,"src":121697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121699,121700],{},"将搜狗输入法设置为唯一输入法",[19,121702,121703],{},[3760,121704],{"alt":135,"src":121705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1217,121707,121709],{"id":121708},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1760,121711,121712],{},[1763,121713,121714],{},"卸载旧输入法",[130,121716,121718],{"className":120743,"code":121717,"language":120745,"meta":135,"style":135},"sudo apt purge fcitx* ibus*\n",[50,121719,121720],{"__ignoreMap":135},[139,121721,121722,121724,121726,121728,121731,121733,121736],{"class":141,"line":142},[139,121723,26840],{"class":781},[139,121725,119537],{"class":160},[139,121727,119878],{"class":160},[139,121729,121730],{"class":160}," fcitx",[139,121732,2892],{"class":153},[139,121734,121735],{"class":160}," ibus",[139,121737,121467],{"class":153},[1760,121739,121740],{"start":210},[1763,121741,121742],{},"安装Fcitx5",[130,121744,121746],{"className":119516,"code":121745,"language":119518,"meta":135,"style":135},"# 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",[50,121747,121748,121753,121767,121771,121776,121785,121793],{"__ignoreMap":135},[139,121749,121750],{"class":141,"line":142},[139,121751,121752],{"class":2512},"# Ubuntu22.04及以上、Debian12及以上\n",[139,121754,121755,121757,121759,121761,121764],{"class":141,"line":210},[139,121756,26840],{"class":781},[139,121758,119537],{"class":160},[139,121760,1841],{"class":160},[139,121762,121763],{"class":160}," fcitx5",[139,121765,121766],{"class":160}," fcitx5-chinese-addons\n",[139,121768,121769],{"class":141,"line":254},[139,121770,843],{"emptyLinePlaceholder":842},[139,121772,121773],{"class":141,"line":262},[139,121774,121775],{"class":2512},"# Ubuntu20.04\n",[139,121777,121778,121780,121782],{"class":141,"line":313},[139,121779,26840],{"class":781},[139,121781,121064],{"class":160},[139,121783,121784],{"class":160}," ppa:zhsj\u002Ffcitx5\n",[139,121786,121787,121789,121791],{"class":141,"line":462},[139,121788,26840],{"class":781},[139,121790,119537],{"class":160},[139,121792,28502],{"class":160},[139,121794,121795,121797,121799,121801,121803],{"class":141,"line":474},[139,121796,26840],{"class":781},[139,121798,119537],{"class":160},[139,121800,1841],{"class":160},[139,121802,121763],{"class":160},[139,121804,121766],{"class":160},[1760,121806,121807,121810],{"start":254},[1763,121808,121809],{},"Reboot System",[1763,121811,121812],{},"启动Fcitx5",[19,121814,121815],{},[3760,121816],{"alt":135,"src":121817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1760,121819,121820],{"start":313},[1763,121821,121822],{},"修改一些设置",[19,121824,121825],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121827,121828],{},[3760,121829],{"alt":135,"src":121830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121832,121833],{},"添加快捷键以便于更好切换中英文",[19,121835,121836],{},[3760,121837],{"alt":135,"src":121838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1760,121840,121841],{"start":462},[1763,121842,121843],{},"重启",[130,121845,121847],{"className":120743,"code":121846,"language":120745,"meta":135,"style":135},"sudo shutdown -r now\n",[50,121848,121849],{"__ignoreMap":135},[139,121850,121851,121853,121856,121858],{"class":141,"line":142},[139,121852,26840],{"class":781},[139,121854,121855],{"class":160}," shutdown",[139,121857,1937],{"class":153},[139,121859,121860],{"class":160}," now\n",[1760,121862,121863],{"start":474},[1763,121864,121865],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121867,121868],{},[2680,121869,121870],{"href":121870,"rel":121871},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26128],[1760,121873,121874],{"start":484},[1763,121875,121876],{},"再重启",[130,121878,121879],{"className":120743,"code":121846,"language":120745,"meta":135,"style":135},[50,121880,121881],{"__ignoreMap":135},[139,121882,121883,121885,121887,121889],{"class":141,"line":142},[139,121884,26840],{"class":781},[139,121886,121855],{"class":160},[139,121888,1937],{"class":153},[139,121890,121860],{"class":160},[14,121892,121894],{"id":121893},"_34-pip3源替换","3.4 pip3源替换",[19,121896,121897],{},"非Debian系发行版需要做。",[19,121899,121900],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121902,121903],{},"使用dnf的系统也可能不用做。",[130,121905,121907],{"className":119516,"code":121906,"language":119518,"meta":135,"style":135},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[50,121908,121909,121914,121921,121926,121931],{"__ignoreMap":135},[139,121910,121911],{"class":141,"line":142},[139,121912,121913],{"class":2512},"# 检查是否已安装 pip\n",[139,121915,121916,121919],{"class":141,"line":210},[139,121917,121918],{"class":781},"pip3",[139,121920,28553],{"class":153},[139,121922,121923],{"class":141,"line":254},[139,121924,121925],{"class":2512},"# 如果未安装，先安装 pip3（见下方）\n",[139,121927,121928],{"class":141,"line":262},[139,121929,121930],{"class":2512},"# 配置 pip 使用清华源\n",[139,121932,121933,121935,121938,121941,121944],{"class":141,"line":313},[139,121934,121918],{"class":781},[139,121936,121937],{"class":160}," config",[139,121939,121940],{"class":160}," set",[139,121942,121943],{"class":160}," global.index-url",[139,121945,121946],{"class":160}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121948,121949],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121951,121952],{},[3760,121953],{"alt":135,"src":121954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[130,121956,121958],{"className":119516,"code":121957,"language":119518,"meta":135,"style":135},"#安装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",[50,121959,121960,121965,121973,121984,121988,121993,122012,122016,122021,122033,122037,122042],{"__ignoreMap":135},[139,121961,121962],{"class":141,"line":142},[139,121963,121964],{"class":2512},"#安装pip3\n",[139,121966,121967,121969,121971],{"class":141,"line":210},[139,121968,26840],{"class":781},[139,121970,119537],{"class":160},[139,121972,28502],{"class":160},[139,121974,121975,121977,121979,121981],{"class":141,"line":254},[139,121976,26840],{"class":781},[139,121978,28337],{"class":160},[139,121980,1841],{"class":160},[139,121982,121983],{"class":160}," python3-pip\n",[139,121985,121986],{"class":141,"line":262},[139,121987,843],{"emptyLinePlaceholder":842},[139,121989,121990],{"class":141,"line":313},[139,121991,121992],{"class":2512},"#更新pip3\n",[139,121994,121995,121997,121999,122001,122003,122005,122008,122010],{"class":141,"line":462},[139,121996,103106],{"class":781},[139,121998,103109],{"class":153},[139,122000,103132],{"class":160},[139,122002,1841],{"class":160},[139,122004,28690],{"class":153},[139,122006,122007],{"class":160}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[139,122009,103137],{"class":153},[139,122011,103140],{"class":160},[139,122013,122014],{"class":141,"line":474},[139,122015,843],{"emptyLinePlaceholder":842},[139,122017,122018],{"class":141,"line":484},[139,122019,122020],{"class":2512},"#设置pip源为清华源\n",[139,122022,122023,122025,122027,122029,122031],{"class":141,"line":989},[139,122024,121918],{"class":781},[139,122026,121937],{"class":160},[139,122028,121940],{"class":160},[139,122030,121943],{"class":160},[139,122032,121946],{"class":160},[139,122034,122035],{"class":141,"line":994},[139,122036,843],{"emptyLinePlaceholder":842},[139,122038,122039],{"class":141,"line":999},[139,122040,122041],{"class":2512},"#测试\n",[139,122043,122044,122046,122048,122050,122052,122054],{"class":141,"line":1006},[139,122045,103106],{"class":781},[139,122047,103109],{"class":153},[139,122049,103132],{"class":160},[139,122051,1841],{"class":160},[139,122053,103137],{"class":153},[139,122055,103140],{"class":160},[19,122057,122058],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122060,122061],{},[3760,122062],{"alt":135,"src":122063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122065,122067],{"id":122066},"_35-显卡驱动安装","3.5 显卡驱动安装",[1217,122069,122071],{"id":122070},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[130,122073,122075],{"className":120743,"code":122074,"language":120745,"meta":135,"style":135},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[50,122076,122077,122082,122097,122102],{"__ignoreMap":135},[139,122078,122079],{"class":141,"line":142},[139,122080,122081],{"class":2512},"# 如果是使用apt安装的驱动\n",[139,122083,122084,122086,122088,122090,122092,122095],{"class":141,"line":210},[139,122085,26840],{"class":781},[139,122087,28337],{"class":160},[139,122089,28340],{"class":160},[139,122091,121377],{"class":153},[139,122093,122094],{"class":160}," nvidia",[139,122096,121467],{"class":153},[139,122098,122099],{"class":141,"line":254},[139,122100,122101],{"class":2512},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[139,122103,122104,122106],{"class":141,"line":262},[139,122105,26840],{"class":781},[139,122107,122108],{"class":160}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1217,122110,122112],{"id":122111},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24265,122114,122116],{"id":122115},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25177,122118,122120],{"id":122119},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[130,122122,122124],{"className":120743,"code":122123,"language":120745,"meta":135,"style":135},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[50,122125,122126,122131,122142,122147,122157,122162],{"__ignoreMap":135},[139,122127,122128],{"class":141,"line":142},[139,122129,122130],{"class":2512},"# 安装英伟达驱动\n",[139,122132,122133,122135,122137,122139],{"class":141,"line":210},[139,122134,26840],{"class":781},[139,122136,119537],{"class":160},[139,122138,1841],{"class":160},[139,122140,122141],{"class":160}," nvidia-driver-版本号\n",[139,122143,122144],{"class":141,"line":254},[139,122145,122146],{"class":2512},"# 重启 \n",[139,122148,122149,122151,122153,122155],{"class":141,"line":262},[139,122150,26840],{"class":781},[139,122152,121855],{"class":160},[139,122154,1937],{"class":153},[139,122156,121860],{"class":160},[139,122158,122159],{"class":141,"line":313},[139,122160,122161],{"class":2512},"# 检查驱动是否安装成功\n",[139,122163,122164],{"class":141,"line":462},[139,122165,122166],{"class":781},"nvidia-smi\n",[25177,122168,122170],{"id":122169},"_35212-debian","3.5.2.1.2 Debian",[130,122172,122174],{"className":120743,"code":122173,"language":120745,"meta":135,"style":135},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[50,122175,122176,122180,122194,122198,122208,122212],{"__ignoreMap":135},[139,122177,122178],{"class":141,"line":142},[139,122179,122130],{"class":2512},[139,122181,122182,122184,122186,122188,122191],{"class":141,"line":210},[139,122183,26840],{"class":781},[139,122185,119537],{"class":160},[139,122187,1841],{"class":160},[139,122189,122190],{"class":160}," nvidia-driver",[139,122192,122193],{"class":160}," nvidia-settings\n",[139,122195,122196],{"class":141,"line":254},[139,122197,122146],{"class":2512},[139,122199,122200,122202,122204,122206],{"class":141,"line":262},[139,122201,26840],{"class":781},[139,122203,121855],{"class":160},[139,122205,1937],{"class":153},[139,122207,121860],{"class":160},[139,122209,122210],{"class":141,"line":313},[139,122211,122161],{"class":2512},[139,122213,122214],{"class":141,"line":462},[139,122215,122166],{"class":781},[24265,122217,122219],{"id":122218},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122221,122222,122223,122226],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1674,122224,122225],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122228,122229,122230],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25820,122231,122232],{},[1674,122233,122234],{},"（也可以不禁用桌面环境，直接进行下一步。）",[130,122236,122238],{"className":120743,"code":122237,"language":120745,"meta":135,"style":135},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[50,122239,122240,122245,122255,122260,122273,122278],{"__ignoreMap":135},[139,122241,122242],{"class":141,"line":142},[139,122243,122244],{"class":2512},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[139,122246,122247,122249,122252],{"class":141,"line":210},[139,122248,26840],{"class":781},[139,122250,122251],{"class":160}," telinit",[139,122253,122254],{"class":153}," 3\n",[139,122256,122257],{"class":141,"line":254},[139,122258,122259],{"class":2512},"# ubuntu 使用下方命令\n",[139,122261,122262,122264,122267,122270],{"class":141,"line":262},[139,122263,26840],{"class":781},[139,122265,122266],{"class":160}," service",[139,122268,122269],{"class":160}," lightdm",[139,122271,122272],{"class":160}," stop\n",[139,122274,122275],{"class":141,"line":313},[139,122276,122277],{"class":2512},"# Fedora 使用下方命令\n",[139,122279,122280,122282,122284,122287],{"class":141,"line":462},[139,122281,26840],{"class":781},[139,122283,28773],{"class":160},[139,122285,122286],{"class":160}," isolate",[139,122288,122289],{"class":160}," multi-user.target\n",[19,122291,122292],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[130,122294,122296],{"className":120743,"code":122295,"language":120745,"meta":135,"style":135},"# 编译环境+准备工作\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",[50,122297,122298,122303,122314,122319,122326,122331,122343,122348,122355,122360],{"__ignoreMap":135},[139,122299,122300],{"class":141,"line":142},[139,122301,122302],{"class":2512},"# 编译环境+准备工作\n",[139,122304,122305,122307,122309,122311],{"class":141,"line":210},[139,122306,26840],{"class":781},[139,122308,119537],{"class":160},[139,122310,1841],{"class":160},[139,122312,122313],{"class":160}," build-essential\n",[139,122315,122316],{"class":141,"line":254},[139,122317,122318],{"class":2512},"# 进入到.run目录中\n",[139,122320,122321,122323],{"class":141,"line":262},[139,122322,103503],{"class":153},[139,122324,122325],{"class":160}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[139,122327,122328],{"class":141,"line":313},[139,122329,122330],{"class":2512},"# 给驱动文件增加可执行权限：\n",[139,122332,122333,122335,122337,122340],{"class":141,"line":462},[139,122334,26840],{"class":781},[139,122336,26843],{"class":160},[139,122338,122339],{"class":160}," a+x",[139,122341,122342],{"class":160}," NVIDIA-Linux-x86_64-550.107.02.run\n",[139,122344,122345],{"class":141,"line":474},[139,122346,122347],{"class":2512},"# 然后执行安装：\n",[139,122349,122350,122352],{"class":141,"line":484},[139,122351,26840],{"class":781},[139,122353,122354],{"class":160}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[139,122356,122357],{"class":141,"line":989},[139,122358,122359],{"class":2512},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[139,122361,122362,122364,122367],{"class":141,"line":994},[139,122363,26840],{"class":781},[139,122365,122366],{"class":160}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[139,122368,122369],{"class":153},"  --no-opengl-files\n",[19,122371,122372],{},"安装完毕重启即可",[130,122374,122376],{"className":120743,"code":122375,"language":120745,"meta":135,"style":135},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[50,122377,122378,122382,122388,122392],{"__ignoreMap":135},[139,122379,122380],{"class":141,"line":142},[139,122381,122146],{"class":2512},[139,122383,122384,122386],{"class":141,"line":210},[139,122385,26840],{"class":781},[139,122387,28907],{"class":160},[139,122389,122390],{"class":141,"line":254},[139,122391,122161],{"class":2512},[139,122393,122394],{"class":141,"line":262},[139,122395,122166],{"class":781},[1217,122397,122399],{"id":122398},"_353-安装cuda","3.5.3 安装CUDA",[19,122401,122402],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122404,122405],{},[3760,122406],{"alt":135,"src":122407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1760,122409,122410],{},[1763,122411,122412],{},"先查看显卡驱动所支持的最高CUDA版本",[130,122414,122415],{"className":120743,"code":122166,"language":120745,"meta":135,"style":135},[50,122416,122417],{"__ignoreMap":135},[139,122418,122419],{"class":141,"line":142},[139,122420,122166],{"class":781},[19,122422,122423],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122425,122426],{},[3760,122427],{"alt":135,"src":122428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1760,122430,122431],{"start":210},[1763,122432,122433],{},"下载CUDA并安装CUDA",[19,122435,120522,122436],{},[2680,122437,120525],{"href":120525,"rel":122438},[26128],[19,122440,122441],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122443,122444],{},[3760,122445],{"alt":135,"src":122446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122448,122449,122450,122455],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2680,122451,122454],{"href":122452,"rel":122453},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26128],"Vinci机器人队单片机教程","）",[19,122457,122458],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122460,122461],{},[3760,122462],{"alt":135,"src":122463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122465,122466],{},"将最下方框框里的命令敲入终端",[130,122468,122470],{"className":120743,"code":122469,"language":120745,"meta":135,"style":135},"# 在当前文件夹下创建一个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",[50,122471,122472,122477,122486,122491,122498,122503,122511,122516,122527,122532],{"__ignoreMap":135},[139,122473,122474],{"class":141,"line":142},[139,122475,122476],{"class":2512},"# 在当前文件夹下创建一个ttt的子文件夹\n",[139,122478,122479,122481,122483],{"class":141,"line":210},[139,122480,103493],{"class":781},[139,122482,31475],{"class":153},[139,122484,122485],{"class":160}," .\u002Fttt\n",[139,122487,122488],{"class":141,"line":254},[139,122489,122490],{"class":2512},"# 进入ttt文件夹\n",[139,122492,122493,122495],{"class":141,"line":262},[139,122494,103503],{"class":153},[139,122496,122497],{"class":160}," ttt\n",[139,122499,122500],{"class":141,"line":313},[139,122501,122502],{"class":2512},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[139,122504,122505,122508],{"class":141,"line":462},[139,122506,122507],{"class":781},"wget",[139,122509,122510],{"class":160}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[139,122512,122513],{"class":141,"line":474},[139,122514,122515],{"class":2512},"# 给予权限\n",[139,122517,122518,122520,122522,122524],{"class":141,"line":484},[139,122519,26840],{"class":781},[139,122521,26843],{"class":160},[139,122523,122339],{"class":160},[139,122525,122526],{"class":160}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[139,122528,122529],{"class":141,"line":989},[139,122530,122531],{"class":2512},"# 运行脚本\n",[139,122533,122534,122536],{"class":141,"line":994},[139,122535,26840],{"class":781},[139,122537,122526],{"class":160},[19,122539,122540],{},[3760,122541],{"alt":135,"src":122542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122544,122545],{},"正在安装中：",[19,122547,122548],{},[3760,122549],{"alt":135,"src":122550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122552,122553],{},"输入accept接受即可",[19,122555,122556],{},[3760,122557],{"alt":135,"src":122558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122560,122561],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122563,122564],{},[3760,122565],{"alt":135,"src":122566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122568,122569],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122571,122572],{},[3760,122573],{"alt":135,"src":122574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1760,122576,122577],{"start":254},[1763,122578,122579],{},"配置环境",[19,122581,122582],{},"根据上方确认一下路径，比如我上面红色框起来的为",[130,122584,122586],{"className":120743,"code":122585,"language":120745,"meta":135,"style":135},"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",[50,122587,122588,122604,122619],{"__ignoreMap":135},[139,122589,122590,122593,122596,122599,122602],{"class":141,"line":142},[139,122591,122592],{"class":781},"Please",[139,122594,122595],{"class":160}," make",[139,122597,122598],{"class":160}," sure",[139,122600,122601],{"class":160}," that",[139,122603,4957],{"class":145},[139,122605,122606,122608,122611,122614,122617],{"class":141,"line":210},[139,122607,54506],{"class":781},[139,122609,122610],{"class":160},"   PATH",[139,122612,122613],{"class":160}," includes",[139,122615,122616],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[139,122618,4957],{"class":145},[139,122620,122621,122623,122626,122628,122631,122634,122636,122639,122642,122645,122648,122650,122653,122655],{"class":141,"line":254},[139,122622,54506],{"class":781},[139,122624,122625],{"class":160},"   LD_LIBRARY_PATH",[139,122627,122613],{"class":160},[139,122629,122630],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[139,122632,122633],{"class":160}," or,",[139,122635,1134],{"class":160},[139,122637,122638],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[139,122640,122641],{"class":160}," to",[139,122643,122644],{"class":160}," \u002Fetc\u002Fld.so.conf",[139,122646,122647],{"class":160}," and",[139,122649,29490],{"class":160},[139,122651,122652],{"class":160}," ldconfig",[139,122654,607],{"class":160},[139,122656,122657],{"class":160}," root\n",[19,122659,122660],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[130,122662,122664],{"className":120743,"code":122663,"language":120745,"meta":135,"style":135},"which nvcc\n",[50,122665,122666],{"__ignoreMap":135},[139,122667,122668,122671],{"class":141,"line":142},[139,122669,122670],{"class":153},"which",[139,122672,122673],{"class":160}," nvcc\n",[19,122675,122676],{},[3760,122677],{"alt":135,"src":122678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122680,122681],{},"所以我进行以下操作：",[130,122683,122685],{"className":120743,"code":122684,"language":120745,"meta":135,"style":135},"sudo vim ~\u002F.bashrc\n",[50,122686,122687],{"__ignoreMap":135},[139,122688,122689,122691,122693],{"class":141,"line":142},[139,122690,26840],{"class":781},[139,122692,120803],{"class":160},[139,122694,122695],{"class":160}," ~\u002F.bashrc\n",[19,122697,122698],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[130,122700,122702],{"className":120743,"code":122701,"language":120745,"meta":135,"style":135},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[50,122703,122704,122716],{"__ignoreMap":135},[139,122705,122706,122708,122711,122713],{"class":141,"line":142},[139,122707,27305],{"class":149},[139,122709,122710],{"class":145}," PATH",[139,122712,150],{"class":149},[139,122714,122715],{"class":145},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[139,122717,122718,122720,122723,122725],{"class":141,"line":210},[139,122719,27305],{"class":149},[139,122721,122722],{"class":145}," LD_LIBRARY_PATH",[139,122724,150],{"class":149},[139,122726,122727],{"class":145},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122729,122730],{},[3760,122731],{"alt":135,"src":122732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[130,122734,122736],{"className":120743,"code":122735,"language":120745,"meta":135,"style":135},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[50,122737,122738,122743,122749,122754],{"__ignoreMap":135},[139,122739,122740],{"class":141,"line":142},[139,122741,122742],{"class":2512},"# 刷新当前终端的环境变量\n",[139,122744,122745,122747],{"class":141,"line":210},[139,122746,103120],{"class":153},[139,122748,122695],{"class":160},[139,122750,122751],{"class":141,"line":254},[139,122752,122753],{"class":2512},"# 验证CUDA是否安装成功\n",[139,122755,122756,122759],{"class":141,"line":262},[139,122757,122758],{"class":781},"nvcc",[139,122760,122761],{"class":153}," -V\n",[19,122763,122764],{},"出现下图这种则安装成功。",[19,122766,122767],{},[3760,122768],{"alt":135,"src":122769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1217,122771,122773],{"id":122772},"_354-安装cudnn","3.5.4 安装cuDNN",[1760,122775,122776],{},[1763,122777,122778],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122780,122781,122782,122787],{},"前往 NVIDIA cuDNN 下载页面：",[2680,122783,122786],{"href":122784,"rel":122785},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26128],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122789,122790],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122792,122793],{},[3760,122794],{"alt":135,"src":122795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122797,122798],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122800,122801],{},[3760,122802],{"alt":135,"src":122803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122805,122806],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122808,122809],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122811,122812],{},[1674,122813,122814],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122816,122817],{},"下载好的：",[19,122819,122820],{},[3760,122821],{"alt":135,"src":122822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1760,122824,122825],{"start":210},[1763,122826,122827],{},"安装cuDNN",[19,122829,122830],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122832,122833],{},[3760,122834],{"alt":135,"src":122835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122837,122838],{},"解压文件，并复制到对应位置完成安装",[130,122840,122842],{"className":120743,"code":122841,"language":120745,"meta":135,"style":135},"# 解压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",[50,122843,122844,122849,122860,122865,122872,122877,122893,122907,122912,122923,122932,122936,122952],{"__ignoreMap":135},[139,122845,122846],{"class":141,"line":142},[139,122847,122848],{"class":2512},"# 解压cuDNN文件\n",[139,122850,122851,122854,122857],{"class":141,"line":210},[139,122852,122853],{"class":781},"tar",[139,122855,122856],{"class":153}," -xvf",[139,122858,122859],{"class":160}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[139,122861,122862],{"class":141,"line":254},[139,122863,122864],{"class":2512},"# cd进文件夹\n",[139,122866,122867,122869],{"class":141,"line":262},[139,122868,103503],{"class":153},[139,122870,122871],{"class":160}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[139,122873,122874],{"class":141,"line":313},[139,122875,122876],{"class":2512},"# 复制cuDNN文件到CUDA目录\n",[139,122878,122879,122881,122883,122886,122888,122891],{"class":141,"line":462},[139,122880,26840],{"class":781},[139,122882,30121],{"class":160},[139,122884,122885],{"class":160}," include\u002Fcudnn",[139,122887,2892],{"class":153},[139,122889,122890],{"class":160},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[139,122892,4957],{"class":145},[139,122894,122895,122897,122899,122902,122904],{"class":141,"line":474},[139,122896,26840],{"class":781},[139,122898,30121],{"class":160},[139,122900,122901],{"class":160}," lib\u002Flibcudnn",[139,122903,2892],{"class":153},[139,122905,122906],{"class":160},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[139,122908,122909],{"class":141,"line":484},[139,122910,122911],{"class":2512},"# 对比一下有没有缺文件\n",[139,122913,122914,122916,122919,122921],{"class":141,"line":989},[139,122915,29021],{"class":781},[139,122917,122918],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[139,122920,2892],{"class":153},[139,122922,4957],{"class":145},[139,122924,122925,122927,122930],{"class":141,"line":994},[139,122926,29021],{"class":781},[139,122928,122929],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[139,122931,121467],{"class":153},[139,122933,122934],{"class":141,"line":999},[139,122935,122515],{"class":2512},[139,122937,122938,122940,122942,122945,122947,122949],{"class":141,"line":1006},[139,122939,26840],{"class":781},[139,122941,26843],{"class":160},[139,122943,122944],{"class":160}," a+r",[139,122946,122918],{"class":160},[139,122948,2892],{"class":153},[139,122950,122951],{"class":145},"   \n",[139,122953,122954,122956,122958,122960,122962],{"class":141,"line":1027},[139,122955,26840],{"class":781},[139,122957,26843],{"class":160},[139,122959,122944],{"class":160},[139,122961,122929],{"class":160},[139,122963,121467],{"class":153},[1760,122965,122966],{"start":254},[1763,122967,122968],{},"检查是否安装成功",[130,122970,122972],{"className":120743,"code":122971,"language":120745,"meta":135,"style":135},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[50,122973,122974,122979],{"__ignoreMap":135},[139,122975,122976],{"class":141,"line":142},[139,122977,122978],{"class":2512},"# 检查cuDNN版本命令\n",[139,122980,122981,122984,122987,122989,122991,122994,122997],{"class":141,"line":210},[139,122982,122983],{"class":781},"cat",[139,122985,122986],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[139,122988,27372],{"class":149},[139,122990,32495],{"class":781},[139,122992,122993],{"class":160}," CUDNN_MAJOR",[139,122995,122996],{"class":153}," -A",[139,122998,49961],{"class":153},[19,123000,123001],{},"出现下图这样的就是安装成功了",[19,123003,123004],{},[3760,123005],{"alt":135,"src":123006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1760,123008,123009],{"start":262},[1763,123010,123011],{},"软链接(一般不需要)",[130,123013,123015],{"className":120743,"code":123014,"language":120745,"meta":135,"style":135},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[50,123016,123017,123022],{"__ignoreMap":135},[139,123018,123019],{"class":141,"line":142},[139,123020,123021],{"class":2512},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[139,123023,123024,123026],{"class":141,"line":210},[139,123025,26840],{"class":781},[139,123027,123028],{"class":160}," ldconfig\n",[19,123030,123031],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[130,123033,123038],{"className":123034,"code":123035,"language":123036,"meta":123037,"style":135},"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",[50,123039,123040,123045,123050,123055,123060,123065,123070],{"__ignoreMap":135},[139,123041,123042],{"class":141,"line":142},[139,123043,123044],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[139,123046,123047],{"class":141,"line":210},[139,123048,123049],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[139,123051,123052],{"class":141,"line":254},[139,123053,123054],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[139,123056,123057],{"class":141,"line":262},[139,123058,123059],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[139,123061,123062],{"class":141,"line":313},[139,123063,123064],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[139,123066,123067],{"class":141,"line":462},[139,123068,123069],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[139,123071,123072],{"class":141,"line":474},[139,123073,123074],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123076,123077],{},"运行下方的命令",[130,123079,123081],{"className":120743,"code":123080,"language":120745,"meta":135,"style":135},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[50,123082,123083,123088,123095,123100],{"__ignoreMap":135},[139,123084,123085],{"class":141,"line":142},[139,123086,123087],{"class":2512},"# cd进入CUDA路径\n",[139,123089,123090,123092],{"class":141,"line":210},[139,123091,103503],{"class":153},[139,123093,123094],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[139,123096,123097],{"class":141,"line":254},[139,123098,123099],{"class":2512}," # 查看本路径下的需要软链接的文件名\n",[139,123101,123102],{"class":141,"line":262},[139,123103,123104],{"class":781}," ls\n",[19,123106,123107],{},[3760,123108],{"alt":135,"src":123109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123111,123112,123113,20677,123116,20677,123119,123122],{},"如上图，我需要将",[50,123114,123115],{},"libcudnn_xxx_xxxxx.so.8.9.7",[50,123117,123118],{},"libcudnn_xxx_xxxxx.so.8",[50,123120,123121],{},"libcudnn_xxx_xxxxx.so","软链接",[130,123124,123126],{"className":120743,"code":123125,"language":120745,"meta":135,"style":135},"# 创建符号链接。对于每个 .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",[50,123127,123128,123133,123149,123163,123177,123191,123205,123219,123233,123238,123244,123249],{"__ignoreMap":135},[139,123129,123130],{"class":141,"line":142},[139,123131,123132],{"class":2512},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[139,123134,123135,123137,123140,123143,123146],{"class":141,"line":210},[139,123136,26840],{"class":781},[139,123138,123139],{"class":160}," ln",[139,123141,123142],{"class":153}," -sf",[139,123144,123145],{"class":160}," libcudnn_cnn_train.so.8.9.7",[139,123147,123148],{"class":160}," libcudnn_cnn_train.so.8\n",[139,123150,123151,123153,123155,123157,123160],{"class":141,"line":254},[139,123152,26840],{"class":781},[139,123154,123139],{"class":160},[139,123156,123142],{"class":153},[139,123158,123159],{"class":160}," libcudnn_adv_infer.so.8.9.7",[139,123161,123162],{"class":160}," libcudnn_adv_infer.so.8\n",[139,123164,123165,123167,123169,123171,123174],{"class":141,"line":262},[139,123166,26840],{"class":781},[139,123168,123139],{"class":160},[139,123170,123142],{"class":153},[139,123172,123173],{"class":160}," libcudnn_adv_train.so.8.9.7",[139,123175,123176],{"class":160}," libcudnn_adv_train.so.8\n",[139,123178,123179,123181,123183,123185,123188],{"class":141,"line":313},[139,123180,26840],{"class":781},[139,123182,123139],{"class":160},[139,123184,123142],{"class":153},[139,123186,123187],{"class":160}," libcudnn_cnn_infer.so.8.9.7",[139,123189,123190],{"class":160}," libcudnn_cnn_infer.so.8\n",[139,123192,123193,123195,123197,123199,123202],{"class":141,"line":462},[139,123194,26840],{"class":781},[139,123196,123139],{"class":160},[139,123198,123142],{"class":153},[139,123200,123201],{"class":160}," libcudnn.so.8.9.7",[139,123203,123204],{"class":160}," libcudnn.so.8\n",[139,123206,123207,123209,123211,123213,123216],{"class":141,"line":474},[139,123208,26840],{"class":781},[139,123210,123139],{"class":160},[139,123212,123142],{"class":153},[139,123214,123215],{"class":160}," libcudnn_ops_infer.so.8.9.7",[139,123217,123218],{"class":160}," libcudnn_ops_infer.so.8\n",[139,123220,123221,123223,123225,123227,123230],{"class":141,"line":484},[139,123222,26840],{"class":781},[139,123224,123139],{"class":160},[139,123226,123142],{"class":153},[139,123228,123229],{"class":160}," libcudnn_ops_train.so.8.9.7",[139,123231,123232],{"class":160}," libcudnn_ops_train.so.8\n",[139,123234,123235],{"class":141,"line":989},[139,123236,123237],{"class":2512},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[139,123239,123240,123242],{"class":141,"line":994},[139,123241,26840],{"class":781},[139,123243,123028],{"class":160},[139,123245,123246],{"class":141,"line":999},[139,123247,123248],{"class":2512},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[139,123250,123251,123253,123256,123259,123261,123264],{"class":141,"line":1006},[139,123252,29021],{"class":781},[139,123254,123255],{"class":153}," -l",[139,123257,123258],{"class":160}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[139,123260,2892],{"class":153},[139,123262,123263],{"class":160},".so",[139,123265,121467],{"class":153},[1217,123267,123269],{"id":123268},"_355-常见问题","3.5.5 常见问题",[1760,123271,123272],{},[1763,123273,123274],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[130,123276,123278],{"className":120743,"code":123277,"language":120745,"meta":135,"style":135},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[50,123279,123280],{"__ignoreMap":135},[139,123281,123282,123284,123286],{"class":141,"line":142},[139,123283,26840],{"class":781},[139,123285,120803],{"class":160},[139,123287,123288],{"class":160}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123290,123291],{},"blacklist-nouveau.conf文件内容如下：",[130,123293,123295],{"className":120743,"code":123294,"language":120745,"meta":135,"style":135},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[50,123296,123297,123305,123312,123324,123334],{"__ignoreMap":135},[139,123298,123299,123302],{"class":141,"line":142},[139,123300,123301],{"class":781},"blacklist",[139,123303,123304],{"class":160}," nouveau\n",[139,123306,123307,123309],{"class":141,"line":210},[139,123308,123301],{"class":781},[139,123310,123311],{"class":160}," lbm-nouveau\n",[139,123313,123314,123316,123319,123322],{"class":141,"line":254},[139,123315,118150],{"class":781},[139,123317,123318],{"class":160}," nouveau",[139,123320,123321],{"class":160}," modeset=",[139,123323,5367],{"class":153},[139,123325,123326,123329,123331],{"class":141,"line":262},[139,123327,123328],{"class":153},"alias",[139,123330,123318],{"class":160},[139,123332,123333],{"class":160}," off\n",[139,123335,123336,123338,123341],{"class":141,"line":313},[139,123337,123328],{"class":153},[139,123339,123340],{"class":160}," lbm-nouveau",[139,123342,123333],{"class":160},[19,123344,123345],{},"接着运行下方命令",[130,123347,123349],{"className":120743,"code":123348,"language":120745,"meta":135,"style":135},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[50,123350,123351,123361,123366],{"__ignoreMap":135},[139,123352,123353,123355,123358],{"class":141,"line":142},[139,123354,26840],{"class":781},[139,123356,123357],{"class":160}," update-initramfs",[139,123359,123360],{"class":153}," -u\n",[139,123362,123363],{"class":141,"line":210},[139,123364,123365],{"class":781},"或者\n",[139,123367,123368,123370,123373],{"class":141,"line":254},[139,123369,26840],{"class":781},[139,123371,123372],{"class":160}," dracut",[139,123374,123375],{"class":153}," --force\n",[19,123377,123378],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[130,123380,123382],{"className":120743,"code":123381,"language":120745,"meta":135,"style":135},"lsmod | grep nouveau\n",[50,123383,123384],{"__ignoreMap":135},[139,123385,123386,123389,123391,123393],{"class":141,"line":142},[139,123387,123388],{"class":781},"lsmod",[139,123390,27372],{"class":149},[139,123392,32495],{"class":781},[139,123394,123304],{"class":160},[1760,123396,123397],{"start":210},[1763,123398,123399],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[130,123401,123403],{"className":120743,"code":123402,"language":120745,"meta":135,"style":135},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[50,123404,123405],{"__ignoreMap":135},[139,123406,123407,123409,123411],{"class":141,"line":142},[139,123408,26840],{"class":781},[139,123410,120803],{"class":160},[139,123412,123413],{"class":160}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123415,123416],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[130,123418,123420],{"className":120743,"code":123419,"language":120745,"meta":135,"style":135},"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",[50,123421,123422,123430,123438,123446,123453,123461,123471,123479],{"__ignoreMap":135},[139,123423,123424,123427],{"class":141,"line":142},[139,123425,123426],{"class":781},"Section",[139,123428,123429],{"class":160}," \"OutputClass\"\n",[139,123431,123432,123435],{"class":141,"line":210},[139,123433,123434],{"class":781},"   Identifier",[139,123436,123437],{"class":160}," \"nvidia\"\n",[139,123439,123440,123443],{"class":141,"line":254},[139,123441,123442],{"class":781},"   MatchDriver",[139,123444,123445],{"class":160}," \"nvidia-drm\"\n",[139,123447,123448,123451],{"class":141,"line":262},[139,123449,123450],{"class":781},"   Driver",[139,123452,123437],{"class":160},[139,123454,123455,123458],{"class":141,"line":313},[139,123456,123457],{"class":781},"   Option",[139,123459,123460],{"class":160}," \"AllowEmptyInitialConfiguration\"\n",[139,123462,123463,123465,123468],{"class":141,"line":462},[139,123464,123457],{"class":781},[139,123466,123467],{"class":160}," \"PrimaryGPU\"",[139,123469,123470],{"class":160}," \"yes\"\n",[139,123472,123473,123476],{"class":141,"line":474},[139,123474,123475],{"class":781},"   ModulePath",[139,123477,123478],{"class":160}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[139,123480,123481],{"class":141,"line":484},[139,123482,123483],{"class":781},"EndSection\n",[1760,123485,123486],{"start":254},[1763,123487,123488],{},"安装N卡驱动提示错误",[130,123490,123492],{"className":123034,"code":123491,"language":123036,"meta":123037,"style":135},"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",[50,123493,123494],{"__ignoreMap":135},[139,123495,123496],{"class":141,"line":142},[139,123497,123491],{},[1760,123499,123500],{},[1763,123501,123502],{},"检查当前运行的内核版本：",[19,123504,123505],{},"运行以下命令以查看你当前正在使用的内核版本：",[130,123507,123509],{"className":119516,"code":123508,"language":119518,"meta":135,"style":135},"uname -r\n",[50,123510,123511],{"__ignoreMap":135},[139,123512,123513,123515],{"class":141,"line":142},[139,123514,72434],{"class":781},[139,123516,123517],{"class":153}," -r\n",[1760,123519,123520],{"start":210},[1763,123521,123522],{},"安装内核开发文件：",[19,123524,123525,123526,123529],{},"确保你已经安装了与当前内核版本相匹配的 ",[50,123527,123528],{},"kernel-devel"," 包。运行以下命令来安装：",[130,123531,123533],{"className":119516,"code":123532,"language":119518,"meta":135,"style":135},"sudo dnf install kernel-devel-$(uname -r)\n",[50,123534,123535],{"__ignoreMap":135},[139,123536,123537,123539,123541,123543,123546,123548,123550,123552],{"class":141,"line":142},[139,123538,26840],{"class":781},[139,123540,28575],{"class":160},[139,123542,1841],{"class":160},[139,123544,123545],{"class":160}," kernel-devel-",[139,123547,27362],{"class":145},[139,123549,72434],{"class":781},[139,123551,1937],{"class":153},[139,123553,164],{"class":145},[19,123555,123556],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1760,123558,123559],{"start":254},[1763,123560,123561],{},"安装内核源代码（如果需要）：",[19,123563,123564],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[130,123566,123568],{"className":119516,"code":123567,"language":119518,"meta":135,"style":135},"sudo dnf install kernel-headers kernel-source\n",[50,123569,123570],{"__ignoreMap":135},[139,123571,123572,123574,123576,123578,123581],{"class":141,"line":142},[139,123573,26840],{"class":781},[139,123575,28575],{"class":160},[139,123577,1841],{"class":160},[139,123579,123580],{"class":160}," kernel-headers",[139,123582,123583],{"class":160}," kernel-source\n",[1760,123585,123586],{"start":262},[1763,123587,123588],{},"检查安装：",[19,123590,123591,123592,123595],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[50,123593,123594],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[130,123597,123599],{"className":119516,"code":123598,"language":119518,"meta":135,"style":135},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[50,123600,123601],{"__ignoreMap":135},[139,123602,123603,123605],{"class":141,"line":142},[139,123604,29021],{"class":781},[139,123606,123607],{"class":160}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123609,123610,123611,123614],{},"如果仍然遇到问题，可以通过 ",[50,123612,123613],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2348,123616,123617],{},"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":135,"searchDepth":210,"depth":210,"links":123619},[123620,123624,123634,123638,123639],{"id":120719,"depth":210,"text":120720,"children":123621},[123622,123623],{"id":120729,"depth":254,"text":120730},{"id":120739,"depth":254,"text":120740},{"id":120939,"depth":210,"text":120940,"children":123625},[123626,123627,123628,123629,123630,123631,123632,123633],{"id":120943,"depth":254,"text":120944},{"id":121013,"depth":254,"text":121014},{"id":121102,"depth":254,"text":121103},{"id":121346,"depth":254,"text":121347},{"id":121416,"depth":254,"text":121417},{"id":121483,"depth":254,"text":121484},{"id":121518,"depth":254,"text":121519},{"id":121573,"depth":254,"text":121574},{"id":121624,"depth":210,"text":121625,"children":123635},[123636,123637],{"id":121628,"depth":254,"text":121629},{"id":121708,"depth":254,"text":121709},{"id":121893,"depth":210,"text":121894},{"id":122066,"depth":210,"text":122067,"children":123640},[123641,123642,123643,123644,123645],{"id":122070,"depth":254,"text":122071},{"id":122111,"depth":254,"text":122112},{"id":122398,"depth":254,"text":122399},{"id":122772,"depth":254,"text":122773},{"id":123268,"depth":254,"text":123269},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120711,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123652,"title":123653,"body":123654,"description":2384,"extension":2385,"meta":123994,"navigation":842,"path":123995,"seo":123996,"stem":123997,"__hash__":123998},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123655,"toc":123992},[123656,123659,123664,123667,123913,123918,123921,123957,123960,123989],[10,123657,123653],{"id":123658},"_4-命令教程长期积累",[1760,123660,123661],{},[1763,123662,123663],{},"大多数命令",[19,123665,123666],{},"常用 Linux 命令速查：",[130,123668,123670],{"className":119516,"code":123669,"language":119518,"meta":135,"style":135},"# 文件与目录\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",[50,123671,123672,123677,123684,123691,123699,123706,123713,123721,123729,123736,123743,123751,123755,123760,123767,123775,123782,123786,123791,123798,123806,123814,123822,123830,123834,123839,123847,123854,123861,123869,123877,123881,123886,123895,123904],{"__ignoreMap":135},[139,123673,123674],{"class":141,"line":142},[139,123675,123676],{"class":2512},"# 文件与目录\n",[139,123678,123679,123681],{"class":141,"line":210},[139,123680,29021],{"class":781},[139,123682,123683],{"class":2512},"        # 列出目录内容\n",[139,123685,123686,123688],{"class":141,"line":254},[139,123687,103503],{"class":153},[139,123689,123690],{"class":2512},"        # 切换目录\n",[139,123692,123693,123696],{"class":141,"line":262},[139,123694,123695],{"class":153},"pwd",[139,123697,123698],{"class":2512},"       # 显示当前路径\n",[139,123700,123701,123703],{"class":141,"line":313},[139,123702,103493],{"class":781},[139,123704,123705],{"class":2512},"     # 创建目录\n",[139,123707,123708,123710],{"class":141,"line":462},[139,123709,27585],{"class":781},[139,123711,123712],{"class":2512},"        # 删除文件或目录\n",[139,123714,123715,123718],{"class":141,"line":474},[139,123716,123717],{"class":781},"cp",[139,123719,123720],{"class":2512},"        # 复制文件或目录\n",[139,123722,123723,123726],{"class":141,"line":484},[139,123724,123725],{"class":781},"mv",[139,123727,123728],{"class":2512},"        # 移动\u002F重命名文件或目录\n",[139,123730,123731,123733],{"class":141,"line":989},[139,123732,103510],{"class":781},[139,123734,123735],{"class":2512},"     # 创建空文件\n",[139,123737,123738,123740],{"class":141,"line":994},[139,123739,122983],{"class":781},[139,123741,123742],{"class":2512},"       # 查看文件内容\n",[139,123744,123745,123748],{"class":141,"line":999},[139,123746,123747],{"class":781},"head\u002Ftail",[139,123749,123750],{"class":2512}," # 查看文件头部\u002F尾部\n",[139,123752,123753],{"class":141,"line":1006},[139,123754,843],{"emptyLinePlaceholder":842},[139,123756,123757],{"class":141,"line":1027},[139,123758,123759],{"class":2512},"# 权限管理\n",[139,123761,123762,123764],{"class":141,"line":1040},[139,123763,26875],{"class":781},[139,123765,123766],{"class":2512},"     # 修改文件权限\n",[139,123768,123769,123772],{"class":141,"line":2160},[139,123770,123771],{"class":781},"chown",[139,123773,123774],{"class":2512},"     # 修改文件所有者\n",[139,123776,123777,123779],{"class":141,"line":2188},[139,123778,26840],{"class":781},[139,123780,123781],{"class":2512},"      # 以管理员身份执行\n",[139,123783,123784],{"class":141,"line":3944},[139,123785,843],{"emptyLinePlaceholder":842},[139,123787,123788],{"class":141,"line":3963},[139,123789,123790],{"class":2512},"# 系统信息\n",[139,123792,123793,123795],{"class":141,"line":3968},[139,123794,72434],{"class":781},[139,123796,123797],{"class":2512},"     # 系统信息\n",[139,123799,123800,123803],{"class":141,"line":3982},[139,123801,123802],{"class":781},"df",[139,123804,123805],{"class":2512},"        # 磁盘使用情况\n",[139,123807,123808,123811],{"class":141,"line":3987},[139,123809,123810],{"class":781},"free",[139,123812,123813],{"class":2512},"      # 内存使用情况\n",[139,123815,123816,123819],{"class":141,"line":4014},[139,123817,123818],{"class":781},"top\u002Fhtop",[139,123820,123821],{"class":2512},"  # 进程监控\n",[139,123823,123824,123827],{"class":141,"line":4019},[139,123825,123826],{"class":781},"ps",[139,123828,123829],{"class":2512},"        # 查看进程\n",[139,123831,123832],{"class":141,"line":4036},[139,123833,843],{"emptyLinePlaceholder":842},[139,123835,123836],{"class":141,"line":4041},[139,123837,123838],{"class":2512},"# 网络\n",[139,123840,123841,123844],{"class":141,"line":4046},[139,123842,123843],{"class":781},"ping",[139,123845,123846],{"class":2512},"      # 测试网络连通性\n",[139,123848,123849,123851],{"class":141,"line":4051},[139,123850,29109],{"class":781},[139,123852,123853],{"class":2512},"      # 发送 HTTP 请求\n",[139,123855,123856,123858],{"class":141,"line":4065},[139,123857,122507],{"class":781},[139,123859,123860],{"class":2512},"      # 下载文件\n",[139,123862,123863,123866],{"class":141,"line":4070},[139,123864,123865],{"class":781},"ssh",[139,123867,123868],{"class":2512},"       # 远程登录\n",[139,123870,123871,123874],{"class":141,"line":4860},[139,123872,123873],{"class":781},"scp",[139,123875,123876],{"class":2512},"       # 远程文件传输\n",[139,123878,123879],{"class":141,"line":4874},[139,123880,843],{"emptyLinePlaceholder":842},[139,123882,123883],{"class":141,"line":4882},[139,123884,123885],{"class":2512},"# 包管理（Debian\u002FUbuntu）\n",[139,123887,123888,123890,123892],{"class":141,"line":4887},[139,123889,119588],{"class":781},[139,123891,119567],{"class":160},[139,123893,123894],{"class":2512},"   # 更新软件源\n",[139,123896,123897,123899,123901],{"class":141,"line":4893},[139,123898,119588],{"class":781},[139,123900,1841],{"class":160},[139,123902,123903],{"class":2512},"  # 安装软件包\n",[139,123905,123906,123908,123910],{"class":141,"line":4899},[139,123907,119588],{"class":781},[139,123909,28340],{"class":160},[139,123911,123912],{"class":2512},"   # 卸载软件包\n",[1760,123914,123915],{"start":210},[1763,123916,123917],{},"KDE Dolphin 以root打开",[19,123919,123920],{},"kde5",[130,123922,123924],{"className":119516,"code":123923,"language":119518,"meta":135,"style":135},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[50,123925,123926],{"__ignoreMap":135},[139,123927,123928,123931,123934,123937,123939,123941,123944,123947,123949,123952,123954],{"class":141,"line":142},[139,123929,123930],{"class":781},"pkexec",[139,123932,123933],{"class":160}," env",[139,123935,123936],{"class":160}," DISPLAY=",[139,123938,30403],{"class":145},[139,123940,30461],{"class":160},[139,123942,123943],{"class":145},"$XAUTHORITY ",[139,123945,123946],{"class":160},"KDE_SESSION_VERSION=",[139,123948,1481],{"class":153},[139,123950,123951],{"class":160}," KDE_FULL_SESSION=",[139,123953,3660],{"class":153},[139,123955,123956],{"class":160}," dolphin\n",[19,123958,123959],{},"kde6",[130,123961,123963],{"className":119516,"code":123962,"language":119518,"meta":135,"style":135},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[50,123964,123965],{"__ignoreMap":135},[139,123966,123967,123969,123971,123973,123975,123977,123979,123981,123983,123985,123987],{"class":141,"line":142},[139,123968,123930],{"class":781},[139,123970,123933],{"class":160},[139,123972,123936],{"class":160},[139,123974,30403],{"class":145},[139,123976,30461],{"class":160},[139,123978,123943],{"class":145},[139,123980,123946],{"class":160},[139,123982,2782],{"class":153},[139,123984,123951],{"class":160},[139,123986,3660],{"class":153},[139,123988,123956],{"class":160},[2348,123990,123991],{},"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":135,"searchDepth":210,"depth":210,"links":123993},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123653,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124000,"title":124001,"body":124002,"description":2384,"extension":2385,"meta":124016,"navigation":842,"path":124017,"seo":124018,"stem":124019,"__hash__":124020},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124003,"toc":124014},[124004,124007],[10,124005,124001],{"id":124006},"_5-各种环境配置",[19,124008,124009],{},[2680,124010,124013],{"href":124011,"rel":124012},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26128],"电控组环境搭建大全",{"title":135,"searchDepth":210,"depth":210,"links":124015},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124001,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124022,"title":124023,"body":124024,"description":2384,"extension":2385,"meta":124372,"navigation":842,"path":124373,"seo":124374,"stem":124375,"__hash__":124376},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124025,"toc":124364},[124026,124029,124033,124037,124041,124046,124053,124057,124350,124354,124361],[10,124027,124023],{"id":124028},"_6-拓展功能",[14,124030,124032],{"id":124031},"_61-wine","6.1 Wine",[14,124034,124036],{"id":124035},"_62-android","6.2 Android",[1217,124038,124040],{"id":124039},"_621-i卡a卡","6.2.1 I卡、A卡",[1760,124042,124043],{},[1763,124044,124045],{},"Wayland-Waydroid(体验超级好)",[19,124047,124048,124049],{},"Waydroid 官网与安装指南：",[2680,124050,124051],{"href":124051,"rel":124052},"https:\u002F\u002Fwaydro.id\u002F",[26128],[1217,124054,124056],{"id":124055},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1760,124058,124059],{},[1763,124060,124061,124062,124064,124065,124069,124071,124074,124079,124276],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55951,124063],{},"BlissOS 官网下载：",[2680,124066,124067],{"href":124067,"rel":124068},"https:\u002F\u002Fblissos.org\u002F",[26128],[55951,124070],{},[3760,124072],{"alt":135,"src":124073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1760,124075,124076],{"start":254},[1763,124077,124078],{},"比较推荐的配置",[130,124080,124082],{"className":119516,"code":124081,"language":119518,"meta":135,"style":135},"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",[50,124083,124084,124091,124101,124111,124121,124133,124143,124150,124160,124169,124178,124188,124198,124207,124217,124227,124239,124249,124258,124268],{"__ignoreMap":135},[139,124085,124086,124089],{"class":141,"line":142},[139,124087,124088],{"class":781},"qemu-system-x86_64",[139,124090,26941],{"class":153},[139,124092,124093,124096,124099],{"class":141,"line":210},[139,124094,124095],{"class":153},"        -M",[139,124097,124098],{"class":160}," q35,vmport=off",[139,124100,26941],{"class":153},[139,124102,124103,124106,124109],{"class":141,"line":254},[139,124104,124105],{"class":153},"        -accel",[139,124107,124108],{"class":160}," kvm",[139,124110,26941],{"class":153},[139,124112,124113,124116,124119],{"class":141,"line":262},[139,124114,124115],{"class":153},"        -cpu",[139,124117,124118],{"class":160}," qemu64,+sse3,+sse4.2",[139,124120,26941],{"class":153},[139,124122,124123,124126,124129,124131],{"class":141,"line":313},[139,124124,124125],{"class":153},"        -smp",[139,124127,124128],{"class":160}," 8,cores=",[139,124130,1476],{"class":153},[139,124132,26941],{"class":153},[139,124134,124135,124138,124141],{"class":141,"line":462},[139,124136,124137],{"class":153},"        -m",[139,124139,124140],{"class":160}," 6G",[139,124142,26941],{"class":153},[139,124144,124145,124148],{"class":141,"line":474},[139,124146,124147],{"class":153},"        -usb",[139,124149,26941],{"class":153},[139,124151,124152,124155,124158],{"class":141,"line":484},[139,124153,124154],{"class":153},"        -device",[139,124156,124157],{"class":160}," virtio-tablet",[139,124159,26941],{"class":153},[139,124161,124162,124164,124167],{"class":141,"line":989},[139,124163,124154],{"class":153},[139,124165,124166],{"class":160}," virtio-keyboard",[139,124168,26941],{"class":153},[139,124170,124171,124173,124176],{"class":141,"line":994},[139,124172,124154],{"class":153},[139,124174,124175],{"class":160}," usb-tablet",[139,124177,26941],{"class":153},[139,124179,124180,124183,124186],{"class":141,"line":999},[139,124181,124182],{"class":153},"        -bios",[139,124184,124185],{"class":160}," OVMF-pure-efi64.fd",[139,124187,26941],{"class":153},[139,124189,124190,124193,124196],{"class":141,"line":1006},[139,124191,124192],{"class":153},"        -net",[139,124194,124195],{"class":160}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[139,124197,26941],{"class":153},[139,124199,124200,124202,124205],{"class":141,"line":1027},[139,124201,124192],{"class":153},[139,124203,124204],{"class":160}," nic,model=virtio",[139,124206,26941],{"class":153},[139,124208,124209,124212,124215],{"class":141,"line":1040},[139,124210,124211],{"class":153},"        -audio",[139,124213,124214],{"class":160}," sdl,model=hda",[139,124216,26941],{"class":153},[139,124218,124219,124222,124225],{"class":141,"line":2160},[139,124220,124221],{"class":153},"        -display",[139,124223,124224],{"class":160}," sdl,gl=on,show-cursor=on",[139,124226,26941],{"class":153},[139,124228,124229,124231,124234,124237],{"class":141,"line":2188},[139,124230,124154],{"class":153},[139,124232,124233],{"class":160}," virtio-vga-gl,xres=1920,yres=",[139,124235,124236],{"class":153},"1080",[139,124238,26941],{"class":153},[139,124240,124241,124244,124247],{"class":141,"line":3944},[139,124242,124243],{"class":153},"        -drive",[139,124245,124246],{"class":160}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[139,124248,26941],{"class":153},[139,124250,124251,124253,124256],{"class":141,"line":3963},[139,124252,124243],{"class":153},[139,124254,124255],{"class":160}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[139,124257,26941],{"class":153},[139,124259,124260,124263,124266],{"class":141,"line":3968},[139,124261,124262],{"class":153},"        -monitor",[139,124264,124265],{"class":160}," stdio",[139,124267,26941],{"class":153},[139,124269,124270,124273],{"class":141,"line":3982},[139,124271,124272],{"class":153},"        -serial",[139,124274,124275],{"class":160}," none\n",[1760,124277,124278],{"start":313},[1763,124279,124280,124281],{},"常用操作：",[1760,124282,124283,124286,124342],{},[1763,124284,124285],{},"全屏：Ctrl+Alt+F",[1763,124287,124288,124289,124294],{},"adb调试",[1760,124290,124291],{},[1763,124292,124293],{},"使Linux与Android用ADB连接。",[130,124295,124297],{"className":119516,"code":124296,"language":119518,"meta":135,"style":135},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[50,124298,124299,124304,124315,124320,124332,124337],{"__ignoreMap":135},[139,124300,124301],{"class":141,"line":142},[139,124302,124303],{"class":2512},"# 连接安卓\n",[139,124305,124306,124309,124312],{"class":141,"line":210},[139,124307,124308],{"class":781},"adb",[139,124310,124311],{"class":160}," connect",[139,124313,124314],{"class":153}," 127.0.0.1\n",[139,124316,124317],{"class":141,"line":254},[139,124318,124319],{"class":2512},"# 打开shell\n",[139,124321,124322,124324,124326,124329],{"class":141,"line":262},[139,124323,124308],{"class":781},[139,124325,29143],{"class":153},[139,124327,124328],{"class":160}," 127.0.0.1:5555",[139,124330,124331],{"class":160}," shell\n",[139,124333,124334],{"class":141,"line":313},[139,124335,124336],{"class":2512},"# 使用root权限\n",[139,124338,124339],{"class":141,"line":462},[139,124340,124341],{"class":781},"su\n",[1763,124343,124344,124345],{},"中文输入法",[1760,124346,124347],{},[1763,124348,124349],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124351,124353],{"id":124352},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124355,124356,124357],{},"rEFInd 官网与文档：",[2680,124358,124359],{"href":124359,"rel":124360},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26128],[2348,124362,124363],{},"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":135,"searchDepth":210,"depth":210,"links":124365},[124366,124367,124371],{"id":124031,"depth":210,"text":124032},{"id":124035,"depth":210,"text":124036,"children":124368},[124369,124370],{"id":124039,"depth":254,"text":124040},{"id":124055,"depth":254,"text":124056},{"id":124352,"depth":210,"text":124353},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124023,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124378,"title":124379,"body":124380,"description":2384,"extension":2385,"meta":127679,"navigation":842,"path":127680,"seo":127681,"stem":127682,"__hash__":127683},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124381,"toc":127653},[124382,124385,124389,124392,124399,124649,124652,124724,124727,124731,124735,124740,124743,124746,124749,124754,124757,124760,124763,124768,124771,124776,124779,124782,124787,124790,124795,124798,124802,124806,124809,124814,124817,124831,124834,124837,124846,124849,124858,124861,124864,124873,124876,124885,124888,124891,124900,124903,124906,124921,124924,124927,124936,124941,124944,124947,124956,124959,124968,124971,124980,124983,124992,124997,125000,125008,125013,125016,125025,125028,125036,125041,125044,125053,125056,125059,125063,125066,125071,125074,125079,125093,125098,125103,125114,125119,125125,125130,125145,125150,125153,125158,125163,125168,125176,125181,125188,125193,125204,125209,125212,125216,125219,125222,125227,125230,125249,125254,125257,125266,125271,125274,125296,125299,125329,125332,125337,125340,125354,125359,125378,125381,125384,125389,125401,125406,125411,125414,125419,125422,125437,125440,125445,125450,125454,125459,125499,125502,125506,125512,125518,125523,125526,125533,125538,125545,125548,125551,125558,125572,125575,125635,125638,125652,125664,125667,125670,125673,125737,125740,125743,125746,125766,125769,125774,125781,125785,125788,125792,125797,125802,125806,125809,125812,125854,125859,125862,125884,125899,125901,125906,125918,125978,125980,125982,126036,126038,126040,126046,126051,126054,126059,126063,126066,126128,126133,126136,126138,126142,126154,126236,126238,126240,126294,126300,126302,126306,126311,126313,126318,126322,126342,126377,126381,126384,126387,126390,126397,126400,126412,126415,126430,126433,126452,126500,126503,126520,126523,126537,126542,126545,126554,126569,126581,126619,126624,126633,126638,126643,126669,126678,126682,126686,126691,126694,126698,126702,126707,126710,126715,126718,126723,126726,126731,126734,126738,126743,126746,126751,126754,126758,126763,126766,126771,126774,126779,126782,126786,126791,126794,126799,126802,126807,126810,126814,126819,126822,126827,126830,126835,126838,126843,126846,126851,126854,126859,126862,126866,126871,126874,126879,126886,126890,126895,126898,126903,126906,126910,126915,126918,126921,126924,126927,126930,126934,126937,126947,126952,126957,126979,126984,126989,126996,127000,127005,127008,127011,127016,127019,127022,127025,127028,127031,127034,127037,127040,127043,127046,127049,127052,127057,127062,127067,127072,127077,127082,127087,127090,127094,127097,127101,127106,127111,127116,127121,127125,127131,127139,127144,127147,127152,127167,127170,127175,127209,127224,127227,127282,127308,127320,127323,127332,127335,127350,127355,127358,127364,127369,127372,127377,127380,127385,127390,127397,127400,127415,127418,127453,127458,127466,127504,127507,127510,127515,127518,127523,127534,127568,127573,127576,127585,127590,127596,127599,127604,127613,127618,127621,127624,127629,127637,127640,127645,127650],[10,124383,124379],{"id":124384},"_7-其他操作",[14,124386,124388],{"id":124387},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124390,124391],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124393,124394,124395,124398],{},"进入工控机的硬盘目录，进入",[50,124396,124397],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[130,124400,124404],{"className":124401,"code":124402,"language":124403,"meta":135,"style":135},"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",[50,124405,124406,124414,124425,124432,124439,124451,124458,124470,124481,124492,124499,124506,124513,124525,124537,124544,124556,124568,124575,124587,124599,124611,124622,124629,124640],{"__ignoreMap":135},[139,124407,124408,124411],{"class":141,"line":142},[139,124409,124410],{"class":53538},"network",[139,124412,124413],{"class":145},": \n",[139,124415,124416,124419,124421,124423],{"class":141,"line":210},[139,124417,124418],{"class":53538},"  version",[139,124420,2265],{"class":145},[139,124422,416],{"class":153},[139,124424,4957],{"class":145},[139,124426,124427,124430],{"class":141,"line":254},[139,124428,124429],{"class":53538},"  wifis",[139,124431,124413],{"class":145},[139,124433,124434,124437],{"class":141,"line":262},[139,124435,124436],{"class":53538},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[139,124438,124413],{"class":145},[139,124440,124441,124444,124446,124449],{"class":141,"line":313},[139,124442,124443],{"class":53538},"      renderer",[139,124445,2265],{"class":145},[139,124447,124448],{"class":160},"NetworkManager",[139,124450,4957],{"class":145},[139,124452,124453,124456],{"class":141,"line":462},[139,124454,124455],{"class":53538},"      match",[139,124457,124413],{"class":145},[139,124459,124460,124463,124465,124468],{"class":141,"line":474},[139,124461,124462],{"class":53538},"        name",[139,124464,2265],{"class":145},[139,124466,124467],{"class":160},"\"wlan0\"",[139,124469,4957],{"class":145},[139,124471,124472,124475,124477,124479],{"class":141,"line":484},[139,124473,124474],{"class":53538},"      dhcp4",[139,124476,2265],{"class":145},[139,124478,3660],{"class":153},[139,124480,4957],{"class":145},[139,124482,124483,124486,124488,124490],{"class":141,"line":989},[139,124484,124485],{"class":53538},"      dhcp6",[139,124487,2265],{"class":145},[139,124489,3660],{"class":153},[139,124491,4957],{"class":145},[139,124493,124494,124497],{"class":141,"line":994},[139,124495,124496],{"class":53538},"      access-points",[139,124498,124413],{"class":145},[139,124500,124501,124504],{"class":141,"line":999},[139,124502,124503],{"class":160},"        \"EMIS_Vinci_Robocon_5G\"",[139,124505,124413],{"class":145},[139,124507,124508,124511],{"class":141,"line":1006},[139,124509,124510],{"class":53538},"          auth",[139,124512,124413],{"class":145},[139,124514,124515,124518,124520,124523],{"class":141,"line":1027},[139,124516,124517],{"class":53538},"            key-management",[139,124519,2265],{"class":145},[139,124521,124522],{"class":160},"\"psk\"",[139,124524,4957],{"class":145},[139,124526,124527,124530,124532,124535],{"class":141,"line":1040},[139,124528,124529],{"class":53538},"            password",[139,124531,2265],{"class":145},[139,124533,124534],{"class":160},"\"vinci666\"",[139,124536,4957],{"class":145},[139,124538,124539,124542],{"class":141,"line":2160},[139,124540,124541],{"class":53538},"          networkmanager",[139,124543,124413],{"class":145},[139,124545,124546,124549,124551,124554],{"class":141,"line":2188},[139,124547,124548],{"class":53538},"            uuid",[139,124550,2265],{"class":145},[139,124552,124553],{"class":160},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[139,124555,4957],{"class":145},[139,124557,124558,124561,124563,124566],{"class":141,"line":3944},[139,124559,124560],{"class":53538},"            name",[139,124562,2265],{"class":145},[139,124564,124565],{"class":160},"\"EMIS_Vinci_Robocon_5G\"",[139,124567,4957],{"class":145},[139,124569,124570,124573],{"class":141,"line":3963},[139,124571,124572],{"class":53538},"            passthrough",[139,124574,124413],{"class":145},[139,124576,124577,124580,124582,124585],{"class":141,"line":3968},[139,124578,124579],{"class":53538},"              wifi-security.auth-alg",[139,124581,2265],{"class":145},[139,124583,124584],{"class":160},"\"open\"",[139,124586,4957],{"class":145},[139,124588,124589,124592,124594,124597],{"class":141,"line":3982},[139,124590,124591],{"class":53538},"              ipv6.addr-gen-mode",[139,124593,2265],{"class":145},[139,124595,124596],{"class":160},"\"default\"",[139,124598,4957],{"class":145},[139,124600,124601,124604,124606,124609],{"class":141,"line":3987},[139,124602,124603],{"class":53538},"              ipv6.ip6-privacy",[139,124605,2265],{"class":145},[139,124607,124608],{"class":160},"\"-1\"",[139,124610,4957],{"class":145},[139,124612,124613,124616,124618,124620],{"class":141,"line":4014},[139,124614,124615],{"class":53538},"              proxy._",[139,124617,2265],{"class":145},[139,124619,9926],{"class":160},[139,124621,4957],{"class":145},[139,124623,124624,124627],{"class":141,"line":4019},[139,124625,124626],{"class":53538},"      networkmanager",[139,124628,124413],{"class":145},[139,124630,124631,124634,124636,124638],{"class":141,"line":4036},[139,124632,124633],{"class":53538},"        uuid",[139,124635,2265],{"class":145},[139,124637,124553],{"class":160},[139,124639,4957],{"class":145},[139,124641,124642,124644,124646],{"class":141,"line":4041},[139,124643,124462],{"class":53538},[139,124645,2265],{"class":145},[139,124647,124648],{"class":160},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124650,124651],{},"将其改为新wifi的名和密码：",[130,124653,124655],{"className":124401,"code":124654,"language":124403,"meta":135,"style":135},"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",[50,124656,124657,124663,124672,124678,124685,124694,124702,124708,124714],{"__ignoreMap":135},[139,124658,124659,124661],{"class":141,"line":142},[139,124660,124410],{"class":53538},[139,124662,246],{"class":145},[139,124664,124665,124667,124669],{"class":141,"line":210},[139,124666,124418],{"class":53538},[139,124668,2265],{"class":145},[139,124670,124671],{"class":153},"2\n",[139,124673,124674,124676],{"class":141,"line":254},[139,124675,124429],{"class":53538},[139,124677,246],{"class":145},[139,124679,124680,124683],{"class":141,"line":262},[139,124681,124682],{"class":53538},"    wlan0",[139,124684,246],{"class":145},[139,124686,124687,124689,124691],{"class":141,"line":313},[139,124688,124474],{"class":53538},[139,124690,2265],{"class":145},[139,124692,124693],{"class":153},"true\n",[139,124695,124696,124698,124700],{"class":141,"line":462},[139,124697,124485],{"class":53538},[139,124699,2265],{"class":145},[139,124701,124693],{"class":153},[139,124703,124704,124706],{"class":141,"line":474},[139,124705,124496],{"class":53538},[139,124707,246],{"class":145},[139,124709,124710,124712],{"class":141,"line":484},[139,124711,124503],{"class":160},[139,124713,246],{"class":145},[139,124715,124716,124719,124721],{"class":141,"line":989},[139,124717,124718],{"class":53538},"          password",[139,124720,2265],{"class":145},[139,124722,124723],{"class":160},"\"vinci666\"\n",[19,124725,124726],{},"工控机开机即可连上网。",[14,124728,124730],{"id":124729},"_72-ssh远程开发","7.2 SSH远程开发",[1217,124732,124734],{"id":124733},"_721-环境准备","7.2.1 环境准备",[19,124736,124737],{},[1674,124738,124739],{},"1.硬件准备",[19,124741,124742],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124744,124745],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124747,124748],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124750,124751],{},[1674,124752,124753],{},"2.设置固定IP",[19,124755,124756],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124758,124759],{},"1.进入设置界面",[19,124761,124762],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124764,124765],{},[3760,124766],{"alt":135,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124769,124770],{},"2.配置所连接的网络",[19,124772,124773],{},[3760,124774],{"alt":135,"src":124775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124777,124778],{},"3.设置固定IP",[19,124780,124781],{},"查看当前IP地址。",[19,124783,124784],{},[3760,124785],{"alt":135,"src":124786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124788,124789],{},"设置固定IP。",[19,124791,124792],{},[3760,124793],{"alt":135,"src":124794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124796,124797],{},"至此，IP配置完毕。",[1217,124799,124801],{"id":124800},"_722-环境搭建","7.2.2 环境搭建",[19,124803,124804],{},[1674,124805,28016],{},[19,124807,124808],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124810,124811],{},[1674,124812,124813],{},"实现",[19,124815,124816],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1760,124818,124819,124822,124825,124828],{},[1763,124820,124821],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1763,124823,124824],{},"远程主机启动SSH服务；",[1763,124826,124827],{},"本地主机登陆远程主机；",[1763,124829,124830],{},"实现数据传输。",[19,124832,124833],{},"1.安装SSH客户端与服务端",[19,124835,124836],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[130,124838,124840],{"className":123034,"code":124839,"language":123036,"meta":123037,"style":135}," sudo apt install openssh-server\n",[50,124841,124842],{"__ignoreMap":135},[139,124843,124844],{"class":141,"line":142},[139,124845,124839],{},[19,124847,124848],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[130,124850,124852],{"className":123034,"code":124851,"language":123036,"meta":123037,"style":135},"sudo apt install openssh-client\n",[50,124853,124854],{"__ignoreMap":135},[139,124855,124856],{"class":141,"line":142},[139,124857,124851],{},[19,124859,124860],{},"2.远程主机启动SSH服务",[19,124862,124863],{},"远程主机启动 ssh 服务命令如下：",[130,124865,124867],{"className":123034,"code":124866,"language":123036,"meta":123037,"style":135},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[50,124868,124869],{"__ignoreMap":135},[139,124870,124871],{"class":141,"line":142},[139,124872,124866],{},[19,124874,124875],{},"启动后可使用如下命令查看服务是否正常运行：",[130,124877,124879],{"className":123034,"code":124878,"language":123036,"meta":123037,"style":135},"ps -e | grep ssh\n",[50,124880,124881],{"__ignoreMap":135},[139,124882,124883],{"class":141,"line":142},[139,124884,124878],{},[19,124886,124887],{},"如果启动成功，会包含 sshd 程序。",[19,124889,124890],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[130,124892,124894],{"className":123034,"code":124893,"language":123036,"meta":123037,"style":135},"sudo systemctl enable ssh\n",[50,124895,124896],{"__ignoreMap":135},[139,124897,124898],{"class":141,"line":142},[139,124899,124893],{},[19,124901,124902],{},"3.本地远程登录",[19,124904,124905],{},"登录远程主机可以调用如下命令:",[130,124907,124909],{"className":119516,"code":124908,"language":119518,"meta":135,"style":135},"ssh -X 用户名@ip地址\n",[50,124910,124911],{"__ignoreMap":135},[139,124912,124913,124915,124918],{"class":141,"line":142},[139,124914,123865],{"class":781},[139,124916,124917],{"class":153}," -X",[139,124919,124920],{"class":160}," 用户名@ip地址\n",[19,124922,124923],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124925,124926],{},"如果退出，可以调用exit命令：",[130,124928,124930],{"className":123034,"code":124929,"language":123036,"meta":123037,"style":135},"exit\n",[50,124931,124932],{"__ignoreMap":135},[139,124933,124934],{"class":141,"line":142},[139,124935,124929],{},[19,124937,124938],{},[1674,124939,124940],{},"4.实现数据传输",[19,124942,124943],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124945,124946],{},"上传文件指令格式如下：",[130,124948,124950],{"className":123034,"code":124949,"language":123036,"meta":123037,"style":135},"scp 本地文件路径 账号@ip:路径\n",[50,124951,124952],{"__ignoreMap":135},[139,124953,124954],{"class":141,"line":142},[139,124955,124949],{},[19,124957,124958],{},"上传文件夹指令格式如下：",[130,124960,124962],{"className":123034,"code":124961,"language":123036,"meta":123037,"style":135},"scp -r 本地文件夹路径 账号@ip:路径\n",[50,124963,124964],{"__ignoreMap":135},[139,124965,124966],{"class":141,"line":142},[139,124967,124961],{},[19,124969,124970],{},"下载文件指令格式如下：",[130,124972,124974],{"className":123034,"code":124973,"language":123036,"meta":123037,"style":135},"scp 账号@ip:路径 本地文件夹路径\n",[50,124975,124976],{"__ignoreMap":135},[139,124977,124978],{"class":141,"line":142},[139,124979,124973],{},[19,124981,124982],{},"下载文件夹指令格式如下：",[130,124984,124986],{"className":123034,"code":124985,"language":123036,"meta":123037,"style":135},"scp -r 账号@ip:路径 本地文件夹路径\n",[50,124987,124988],{"__ignoreMap":135},[139,124989,124990],{"class":141,"line":142},[139,124991,124985],{},[19,124993,124994],{},[1674,124995,124996],{},"优化",[19,124998,124999],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1760,125001,125002,125005],{},[1763,125003,125004],{},"本地生成密钥对；",[1763,125006,125007],{},"将公钥上传至远程主机。",[19,125009,125010],{},[1674,125011,125012],{},"1.生成密钥对",[19,125014,125015],{},"本地客户端生成公私钥：（一路回车默认即可）",[130,125017,125019],{"className":123034,"code":125018,"language":123036,"meta":123037,"style":135},"ssh-keygen\n",[50,125020,125021],{"__ignoreMap":135},[139,125022,125023],{"class":141,"line":142},[139,125024,125018],{},[19,125026,125027],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1760,125029,125030,125033],{},[1763,125031,125032],{},"id_rsa （私钥）；",[1763,125034,125035],{},"id_rsa.pub (公钥)。",[19,125037,125038],{},[1674,125039,125040],{},"2.公钥上传",[19,125042,125043],{},"上传指令如下：",[130,125045,125047],{"className":123034,"code":125046,"language":123036,"meta":123037,"style":135},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[50,125048,125049],{"__ignoreMap":135},[139,125050,125051],{"class":141,"line":142},[139,125052,125046],{},[19,125054,125055],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125057,125058],{},"以后再远程登录就无需录入密码了。",[1217,125060,125062],{"id":125061},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125064,125065],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125067,125068],{},[1674,125069,125070],{},"1.准备工作",[19,125072,125073],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125075,125076],{},[1674,125077,125078],{},"2.为VScode安装远程开发插件",[19,125080,125081,125082,125085,125086,125089,125090,170],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[50,125083,125084],{},"扩展：商店","的搜索栏输入",[50,125087,125088],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[50,125091,125092],{},"安装",[19,125094,125095],{},[3760,125096],{"alt":135,"src":125097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125099,125100],{},[1674,125101,125102],{},"3.配置远程连接",[19,125104,125105,125106,125109,125110,125113],{},"步骤1：使用快捷键",[50,125107,125108],{},"ctrl + shift + p","打开命令输入窗口，并输入",[50,125111,125112],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125115,125116],{},[3760,125117],{"alt":135,"src":125118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125120,125121,125122,170],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[50,125123,125124],{},"Add New SSH Host",[19,125126,125127],{},[3760,125128],{"alt":135,"src":125129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125131,125132,125133,125136,125137,125140,125141,125144],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[50,125134,125135],{},"ssh +X ubuntu@192.168.43.164","，其中，",[50,125138,125139],{},"ubuntu","需要替换为你的登录用户名，",[50,125142,125143],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125146,125147],{},[3760,125148],{"alt":135,"src":125149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125151,125152],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125154,125155],{},[3760,125156],{"alt":135,"src":125157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125159,125160],{},[3760,125161],{"alt":135,"src":125162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125164,125165],{},[1674,125166,125167],{},"4.使用",[19,125169,125170,125171,125109,125173,125175],{},"步骤1：继续使用快捷键",[50,125172,125108],{},[50,125174,125112],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125177,125178],{},[3760,125179],{"alt":135,"src":125180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125182,125183,125184,125187],{},"或者，也可以点击侧边栏的",[50,125185,125186],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125189,125190],{},[3760,125191],{"alt":135,"src":125192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125194,125195,125196,125199,125200,125203],{},"步骤2：选择菜单栏的",[50,125197,125198],{},"文件","下的",[50,125201,125202],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125205,125206],{},[3760,125207],{"alt":135,"src":125208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125210,125211],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125213,125215],{"id":125214},"_73-远程桌面","7.3 远程桌面",[19,125217,125218],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125220,125221],{},"我们选择使用VNC来看。",[1760,125223,125224],{},[1763,125225,125226],{},"安装VNC服务器：",[19,125228,125229],{},"这里以TigerVNC为例进行安装：",[130,125231,125233],{"className":119516,"code":125232,"language":119518,"meta":135,"style":135},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[50,125234,125235],{"__ignoreMap":135},[139,125236,125237,125239,125241,125243,125246],{"class":141,"line":142},[139,125238,26840],{"class":781},[139,125240,119537],{"class":160},[139,125242,1841],{"class":160},[139,125244,125245],{"class":160}," tigervnc-standalone-server",[139,125247,125248],{"class":160}," tigervnc-common\n",[1760,125250,125251],{"start":210},[1763,125252,125253],{},"设置VNC密码：",[19,125255,125256],{},"为VNC用户设置密码，运行以下命令：",[130,125258,125260],{"className":119516,"code":125259,"language":119518,"meta":135,"style":135},"vncpasswd\n",[50,125261,125262],{"__ignoreMap":135},[139,125263,125264],{"class":141,"line":142},[139,125265,125259],{"class":781},[1760,125267,125268],{"start":254},[1763,125269,125270],{},"配置VNC启动脚本:",[19,125272,125273],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[130,125275,125277],{"className":119516,"code":125276,"language":119518,"meta":135,"style":135},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[50,125278,125279,125288],{"__ignoreMap":135},[139,125280,125281,125283,125285],{"class":141,"line":142},[139,125282,103493],{"class":781},[139,125284,31475],{"class":153},[139,125286,125287],{"class":160}," ~\u002F.vnc\n",[139,125289,125290,125293],{"class":141,"line":210},[139,125291,125292],{"class":781},"nano",[139,125294,125295],{"class":160}," ~\u002F.vnc\u002Fxstartup\n",[19,125297,125298],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[130,125300,125302],{"className":119516,"code":125301,"language":119518,"meta":135,"style":135},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[50,125303,125304,125309,125317,125324],{"__ignoreMap":135},[139,125305,125306],{"class":141,"line":142},[139,125307,125308],{"class":2512},"#!\u002Fbin\u002Fsh\n",[139,125310,125311,125314],{"class":141,"line":210},[139,125312,125313],{"class":153},"unset",[139,125315,125316],{"class":160}," SESSION_MANAGER\n",[139,125318,125319,125321],{"class":141,"line":254},[139,125320,125313],{"class":153},[139,125322,125323],{"class":160}," DBUS_SESSION_BUS_ADDRESS\n",[139,125325,125326],{"class":141,"line":262},[139,125327,125328],{"class":781},"gnome-session\n",[19,125330,125331],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1760,125333,125334],{"start":262},[1763,125335,125336],{},"给予执行权限：",[19,125338,125339],{},"为xstartup文件设置执行权限：",[130,125341,125343],{"className":119516,"code":125342,"language":119518,"meta":135,"style":135},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[50,125344,125345],{"__ignoreMap":135},[139,125346,125347,125349,125352],{"class":141,"line":142},[139,125348,26875],{"class":781},[139,125350,125351],{"class":160}," +x",[139,125353,125295],{"class":160},[1760,125355,125356],{"start":313},[1763,125357,125358],{},"启动VNC服务器：",[130,125360,125362],{"className":119516,"code":125361,"language":119518,"meta":135,"style":135},"vncserver -geometry 1920x1080 -localhost=0\n",[50,125363,125364],{"__ignoreMap":135},[139,125365,125366,125369,125372,125375],{"class":141,"line":142},[139,125367,125368],{"class":781},"vncserver",[139,125370,125371],{"class":153}," -geometry",[139,125373,125374],{"class":160}," 1920x1080",[139,125376,125377],{"class":153}," -localhost=0\n",[19,125379,125380],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125382,125383],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1760,125385,125386],{"start":462},[1763,125387,125388],{},"查看已开启的VNC服务器：",[130,125390,125392],{"className":119516,"code":125391,"language":119518,"meta":135,"style":135},"vncserver -list\n",[50,125393,125394],{"__ignoreMap":135},[139,125395,125396,125398],{"class":141,"line":142},[139,125397,125368],{"class":781},[139,125399,125400],{"class":153}," -list\n",[19,125402,125403],{},[3760,125404],{"alt":135,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1760,125407,125408],{"start":474},[1763,125409,125410],{},"连接到VNC服务器：",[19,125412,125413],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1760,125415,125416],{"start":484},[1763,125417,125418],{},"停止VNC服务器：",[19,125420,125421],{},"如果需要停止VNC服务器，可以使用以下命令：",[130,125423,125425],{"className":119516,"code":125424,"language":119518,"meta":135,"style":135},"vncserver -kill :1\n",[50,125426,125427],{"__ignoreMap":135},[139,125428,125429,125431,125434],{"class":141,"line":142},[139,125430,125368],{"class":781},[139,125432,125433],{"class":153}," -kill",[139,125435,125436],{"class":160}," :1\n",[19,125438,125439],{},"将:1替换为你实际使用的显示编号。",[19,125441,125442],{},[3760,125443],{"alt":135,"src":125444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125446,125447],{},[3760,125448],{"alt":135,"src":125449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125451,125453],{"id":125452},"_74-usb端口设置","7.4 USB端口设置",[19,125455,125456],{},[1674,125457,125458],{},"首先先配置好权限",[130,125460,125462],{"className":119516,"code":125461,"language":119518,"meta":135,"style":135},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[50,125463,125464,125469,125482,125489,125494],{"__ignoreMap":135},[139,125465,125466],{"class":141,"line":142},[139,125467,125468],{"class":2512},"# 将用户权限提高\n",[139,125470,125471,125473,125475,125477,125480],{"class":141,"line":210},[139,125472,26840],{"class":781},[139,125474,28834],{"class":160},[139,125476,28837],{"class":153},[139,125478,125479],{"class":160}," dialout",[139,125481,28842],{"class":145},[139,125483,125484,125486],{"class":141,"line":254},[139,125485,28861],{"class":781},[139,125487,125488],{"class":160}," dialout\n",[139,125490,125491],{"class":141,"line":262},[139,125492,125493],{"class":2512},"# 查看下面命令是否输出dialout（若输出才正常）\n",[139,125495,125496],{"class":141,"line":313},[139,125497,125498],{"class":781},"groups\n",[19,125500,125501],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1217,125503,125505],{"id":125504},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125507,125508,125511],{},[1674,125509,125510],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125513,125514,125517],{},[1674,125515,125516],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125519,125520],{},[1674,125521,125522],{},"流程如下：",[19,125524,125525],{},"（1）.查找设备idVendor和idProduct",[19,125527,125528,125529,125532],{},"接入两个USB设备，在终端调用指令",[50,125530,125531],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125534,125535],{},[3760,125536],{"alt":135,"src":125537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125539,125540,125541,125544],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[50,125542,125543],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125546,125547],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125549,125550],{},"（2）.编写映射规则",[19,125552,125553,125554,125557],{},"在",[50,125555,125556],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[130,125559,125561],{"className":119516,"code":125560,"language":119518,"meta":135,"style":135},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[50,125562,125563],{"__ignoreMap":135},[139,125564,125565,125567,125569],{"class":141,"line":142},[139,125566,26840],{"class":781},[139,125568,120803],{"class":160},[139,125570,125571],{"class":160}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125573,125574],{},"输入如下内容：",[130,125576,125578],{"className":119516,"code":125577,"language":119518,"meta":135,"style":135},"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",[50,125579,125580,125610],{"__ignoreMap":135},[139,125581,125582,125585,125587,125590,125593,125596,125599,125601,125604,125607],{"class":141,"line":142},[139,125583,125584],{"class":145},"KERNEL",[139,125586,150],{"class":149},[139,125588,125589],{"class":160},"=\"ttyUSB*\",",[139,125591,125592],{"class":781}," ATTRS",[139,125594,125595],{"class":160},"{idVendor}==",[139,125597,125598],{"class":781},"\"10c4\"",[139,125600,2816],{"class":781},[139,125602,125603],{"class":160}," ATTRS{idProduct}==\"ea60\",",[139,125605,125606],{"class":160}," MODE:=\"0777\",",[139,125608,125609],{"class":160}," SYMLINK+=\"mylidar\"\n",[139,125611,125612,125614,125616,125618,125620,125622,125625,125627,125630,125632],{"class":141,"line":210},[139,125613,125584],{"class":145},[139,125615,150],{"class":149},[139,125617,125589],{"class":160},[139,125619,125592],{"class":781},[139,125621,125595],{"class":160},[139,125623,125624],{"class":781},"\"1a86\"",[139,125626,2816],{"class":781},[139,125628,125629],{"class":160}," ATTRS{idProduct}==\"7523\",",[139,125631,125606],{"class":160},[139,125633,125634],{"class":160}," SYMLINK+=\"mycar\"\n",[19,125636,125637],{},"代码解释：",[3437,125639,125640,125643,125646,125649],{},[1763,125641,125642],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1763,125644,125645],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1763,125647,125648],{},"SYMLINK是符号连接，即绑定的别名；",[1763,125650,125651],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125653,125654,125655,125658,125661],{},"***小提示：***",[25820,125656,125657],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[50,125659,125660],{},"\u002Fetc\u002Fudev\u002Frule.d",[25820,125662,125663],{},"目录即可。",[19,125665,125666],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125668,125669],{},"（3）.使规则生效",[19,125671,125672],{},"在终端下输入如下指令：",[130,125674,125676],{"className":119516,"code":125675,"language":119518,"meta":135,"style":135},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[50,125677,125678,125683,125695,125706,125710,125715,125728],{"__ignoreMap":135},[139,125679,125680],{"class":141,"line":142},[139,125681,125682],{"class":2512},"# Ubuntu用下方命令\n",[139,125684,125685,125687,125689,125692],{"class":141,"line":210},[139,125686,26840],{"class":781},[139,125688,122266],{"class":160},[139,125690,125691],{"class":160}," udev",[139,125693,125694],{"class":160}," reload\n",[139,125696,125697,125699,125701,125703],{"class":141,"line":254},[139,125698,26840],{"class":781},[139,125700,122266],{"class":160},[139,125702,125691],{"class":160},[139,125704,125705],{"class":160}," restart\n",[139,125707,125708],{"class":141,"line":262},[139,125709,843],{"emptyLinePlaceholder":842},[139,125711,125712],{"class":141,"line":313},[139,125713,125714],{"class":2512},"#Fedora用下方命令\n",[139,125716,125717,125719,125722,125725],{"class":141,"line":462},[139,125718,26840],{"class":781},[139,125720,125721],{"class":160}," udevadm",[139,125723,125724],{"class":160}," control",[139,125726,125727],{"class":153}," --reload\n",[139,125729,125730,125732,125734],{"class":141,"line":474},[139,125731,26840],{"class":781},[139,125733,125721],{"class":160},[139,125735,125736],{"class":160}," trigger\n",[19,125738,125739],{},"再重新插拔设备即可。",[19,125741,125742],{},"（4）.测试",[19,125744,125745],{},"终端下输入如下指令",[130,125747,125749],{"className":119516,"code":125748,"language":119518,"meta":135,"style":135},"ll \u002Fdev | grep ttyUSB\n",[50,125750,125751],{"__ignoreMap":135},[139,125752,125753,125756,125759,125761,125763],{"class":141,"line":142},[139,125754,125755],{"class":781},"ll",[139,125757,125758],{"class":160}," \u002Fdev",[139,125760,27372],{"class":149},[139,125762,32495],{"class":781},[139,125764,125765],{"class":160}," ttyUSB\n",[19,125767,125768],{},"运行结果如下：",[19,125770,125771],{},[3760,125772],{"alt":135,"src":125773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125775,125776,125777,125780],{},"也可以多次插拔USB设备，会发现设备端口",[50,125778,125779],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125782,125783],{},[1674,125784,120184],{},[19,125786,125787],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1217,125789,125791],{"id":125790},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125793,125794,125796],{},[1674,125795,125510],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125798,125799,125801],{},[1674,125800,125516],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125803,125804],{},[1674,125805,125522],{},[19,125807,125808],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125810,125811],{},"调用如下指令查看第一台雷达的USB信息：",[130,125813,125815],{"className":119516,"code":125814,"language":119518,"meta":135,"style":135},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[50,125816,125817,125837],{"__ignoreMap":135},[139,125818,125819,125822,125824,125827,125830,125832,125834],{"class":141,"line":142},[139,125820,125821],{"class":781},"udevadm",[139,125823,72051],{"class":160},[139,125825,125826],{"class":153}," --attribute-walk",[139,125828,125829],{"class":153}," --name=\u002Fdev\u002FttyUSB0",[139,125831,27372],{"class":149},[139,125833,32495],{"class":781},[139,125835,125836],{"class":160}," KERNELS\n",[139,125838,125839,125841,125843,125845,125848,125850,125852],{"class":141,"line":210},[139,125840,125821],{"class":781},[139,125842,72051],{"class":160},[139,125844,125826],{"class":153},[139,125846,125847],{"class":153}," --name=\u002Fdev\u002FttyACM0",[139,125849,27372],{"class":149},[139,125851,32495],{"class":781},[139,125853,125836],{"class":160},[19,125855,125856],{},[3760,125857],{"alt":135,"src":125858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125860,125861],{},"调用如下指令查看第二台雷达的USB信息：",[130,125863,125865],{"className":119516,"code":125864,"language":119518,"meta":135,"style":135},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[50,125866,125867],{"__ignoreMap":135},[139,125868,125869,125871,125873,125875,125878,125880,125882],{"class":141,"line":142},[139,125870,125821],{"class":781},[139,125872,72051],{"class":160},[139,125874,125826],{"class":153},[139,125876,125877],{"class":153}," --name=\u002Fdev\u002FttyUSB1",[139,125879,27372],{"class":149},[139,125881,32495],{"class":781},[139,125883,125836],{"class":160},[19,125885,125886,125887,125890,125891,125894,125895,125898],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[50,125888,125889],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[50,125892,125893],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1674,125896,125897],{},"唯一性标识","”。",[19,125900,125550],{},[19,125902,125553,125903,125905],{},[50,125904,125556],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[130,125907,125908],{"className":119516,"code":125560,"language":119518,"meta":135,"style":135},[50,125909,125910],{"__ignoreMap":135},[139,125911,125912,125914,125916],{"class":141,"line":142},[139,125913,26840],{"class":781},[139,125915,120803],{"class":160},[139,125917,125571],{"class":160},[130,125919,125921],{"className":119516,"code":125920,"language":119518,"meta":135,"style":135},"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",[50,125922,125923,125952],{"__ignoreMap":135},[139,125924,125925,125927,125929,125931,125934,125936,125939,125942,125944,125947,125949],{"class":141,"line":142},[139,125926,125584],{"class":145},[139,125928,150],{"class":149},[139,125930,125589],{"class":160},[139,125932,125933],{"class":145}," KERNELS",[139,125935,150],{"class":149},[139,125937,125938],{"class":160},"=\"1-1.3:1.0\",",[139,125940,125941],{"class":781}," MODE:",[139,125943,150],{"class":160},[139,125945,125946],{"class":781},"\"0777\"",[139,125948,2816],{"class":781},[139,125950,125951],{"class":160}," SYMLINK+=\"rplidar_front\"\n",[139,125953,125954,125956,125958,125960,125962,125964,125967,125969,125971,125973,125975],{"class":141,"line":210},[139,125955,125584],{"class":145},[139,125957,150],{"class":149},[139,125959,125589],{"class":160},[139,125961,125933],{"class":145},[139,125963,150],{"class":149},[139,125965,125966],{"class":160},"=\"1-1.4:1.0\",",[139,125968,125941],{"class":781},[139,125970,150],{"class":160},[139,125972,125946],{"class":781},[139,125974,2816],{"class":781},[139,125976,125977],{"class":160}," SYMLINK+=\"rplidar_back\"\n",[19,125979,125669],{},[19,125981,125672],{},[130,125983,125984],{"className":119516,"code":125675,"language":119518,"meta":135,"style":135},[50,125985,125986,125990,126000,126010,126014,126018,126028],{"__ignoreMap":135},[139,125987,125988],{"class":141,"line":142},[139,125989,125682],{"class":2512},[139,125991,125992,125994,125996,125998],{"class":141,"line":210},[139,125993,26840],{"class":781},[139,125995,122266],{"class":160},[139,125997,125691],{"class":160},[139,125999,125694],{"class":160},[139,126001,126002,126004,126006,126008],{"class":141,"line":254},[139,126003,26840],{"class":781},[139,126005,122266],{"class":160},[139,126007,125691],{"class":160},[139,126009,125705],{"class":160},[139,126011,126012],{"class":141,"line":262},[139,126013,843],{"emptyLinePlaceholder":842},[139,126015,126016],{"class":141,"line":313},[139,126017,125714],{"class":2512},[139,126019,126020,126022,126024,126026],{"class":141,"line":462},[139,126021,26840],{"class":781},[139,126023,125721],{"class":160},[139,126025,125724],{"class":160},[139,126027,125727],{"class":153},[139,126029,126030,126032,126034],{"class":141,"line":474},[139,126031,26840],{"class":781},[139,126033,125721],{"class":160},[139,126035,125736],{"class":160},[19,126037,125739],{},[19,126039,125742],{},[19,126041,125745,126042,126045],{},[50,126043,126044],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126047,126048],{},[3760,126049],{"alt":135,"src":126050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126052,126053],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126055,126056,126058],{},[1674,126057,120184],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1217,126060,126062],{"id":126061},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126064,126065],{},"（1）.查看所连接的主机USB接口的信息",[130,126067,126069],{"className":119516,"code":126068,"language":119518,"meta":135,"style":135},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[50,126070,126071,126101],{"__ignoreMap":135},[139,126072,126073,126075,126077,126080,126082,126084,126086,126088,126091,126094,126096,126099],{"class":141,"line":142},[139,126074,125821],{"class":781},[139,126076,72051],{"class":160},[139,126078,126079],{"class":153}," -a",[139,126081,31475],{"class":153},[139,126083,30681],{"class":145},[139,126085,125821],{"class":781},[139,126087,72051],{"class":160},[139,126089,126090],{"class":153}," -q",[139,126092,126093],{"class":160}," path",[139,126095,27378],{"class":153},[139,126097,126098],{"class":160}," \u002Fdev\u002FttyACM0",[139,126100,164],{"class":145},[139,126102,126103,126105,126107,126109,126111,126113,126115,126117,126119,126121,126123,126126],{"class":141,"line":210},[139,126104,125821],{"class":781},[139,126106,72051],{"class":160},[139,126108,126079],{"class":153},[139,126110,31475],{"class":153},[139,126112,30681],{"class":145},[139,126114,125821],{"class":781},[139,126116,72051],{"class":160},[139,126118,126090],{"class":153},[139,126120,126093],{"class":160},[139,126122,27378],{"class":153},[139,126124,126125],{"class":160}," \u002Fdev\u002FttyUSB0",[139,126127,164],{"class":145},[19,126129,126130],{},[3760,126131],{"alt":135,"src":126132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126134,126135],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126137,125550],{},[19,126139,125553,126140,125905],{},[50,126141,125556],{},[130,126143,126144],{"className":119516,"code":125560,"language":119518,"meta":135,"style":135},[50,126145,126146],{"__ignoreMap":135},[139,126147,126148,126150,126152],{"class":141,"line":142},[139,126149,26840],{"class":781},[139,126151,120803],{"class":160},[139,126153,125571],{"class":160},[130,126155,126157],{"className":119516,"code":126156,"language":119518,"meta":135,"style":135},"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",[50,126158,126159,126187,126213],{"__ignoreMap":135},[139,126160,126161,126163,126165,126168,126170,126172,126174,126176,126179,126182,126184],{"class":141,"line":142},[139,126162,125584],{"class":145},[139,126164,150],{"class":149},[139,126166,126167],{"class":160},"=\"ttyACM*\",",[139,126169,125592],{"class":781},[139,126171,125595],{"class":160},[139,126173,125624],{"class":781},[139,126175,2816],{"class":781},[139,126177,126178],{"class":160}," ATTRS{idProduct}==\"55d4\",",[139,126180,126181],{"class":160}," ATTRS{serial}==\"0001\",",[139,126183,125606],{"class":160},[139,126185,126186],{"class":160}," SYMLINK+=\"ttyACM_MCU\"\n",[139,126188,126189,126191,126193,126195,126197,126199,126201,126203,126205,126208,126210],{"class":141,"line":210},[139,126190,125584],{"class":145},[139,126192,150],{"class":149},[139,126194,126167],{"class":160},[139,126196,125592],{"class":781},[139,126198,125595],{"class":160},[139,126200,125624],{"class":781},[139,126202,2816],{"class":781},[139,126204,126178],{"class":160},[139,126206,126207],{"class":160}," ATTRS{serial}==\"0002\",",[139,126209,125606],{"class":160},[139,126211,126212],{"class":160}," SYMLINK+=\"ttyACM_Lidar\"\n",[139,126214,126215,126217,126219,126221,126223,126225,126227,126229,126231,126233],{"class":141,"line":254},[139,126216,125584],{"class":145},[139,126218,150],{"class":149},[139,126220,125589],{"class":160},[139,126222,125592],{"class":781},[139,126224,125595],{"class":160},[139,126226,125624],{"class":781},[139,126228,2816],{"class":781},[139,126230,125629],{"class":160},[139,126232,125606],{"class":160},[139,126234,126235],{"class":160}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126237,125669],{},[19,126239,125672],{},[130,126241,126242],{"className":119516,"code":125675,"language":119518,"meta":135,"style":135},[50,126243,126244,126248,126258,126268,126272,126276,126286],{"__ignoreMap":135},[139,126245,126246],{"class":141,"line":142},[139,126247,125682],{"class":2512},[139,126249,126250,126252,126254,126256],{"class":141,"line":210},[139,126251,26840],{"class":781},[139,126253,122266],{"class":160},[139,126255,125691],{"class":160},[139,126257,125694],{"class":160},[139,126259,126260,126262,126264,126266],{"class":141,"line":254},[139,126261,26840],{"class":781},[139,126263,122266],{"class":160},[139,126265,125691],{"class":160},[139,126267,125705],{"class":160},[139,126269,126270],{"class":141,"line":262},[139,126271,843],{"emptyLinePlaceholder":842},[139,126273,126274],{"class":141,"line":313},[139,126275,125714],{"class":2512},[139,126277,126278,126280,126282,126284],{"class":141,"line":462},[139,126279,26840],{"class":781},[139,126281,125721],{"class":160},[139,126283,125724],{"class":160},[139,126285,125727],{"class":153},[139,126287,126288,126290,126292],{"class":141,"line":474},[139,126289,26840],{"class":781},[139,126291,125721],{"class":160},[139,126293,125736],{"class":160},[19,126295,126296,126297],{},"再重新插拔设备即可，或者 ",[1674,126298,126299],{},"直接重启系统。",[19,126301,125742],{},[19,126303,125745,126304,126045],{},[50,126305,126044],{},[19,126307,126308],{},[3760,126309],{"alt":135,"src":126310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126312,126053],{},[19,126314,126315,126317],{},[1674,126316,120184],{}," 一些设备可能没有串口号等。",[1217,126319,126321],{"id":126320},"_744-其他注意事项","7.4.4 其他注意事项",[19,126323,126324,126325,126327,126328,126331,126332,20677,126335,126338,126339,126341],{},"并非所有的USB设备端口号都是",[50,126326,125779],{},"的格式，比如Arduino的端口号可能是",[50,126329,126330],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[50,126333,126334],{},"videon",[50,126336,126337],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[50,126340,126334],{},"端口，绑定时需要关联的也是该接口。",[19,126343,126344,126345,126348,126349,126352,126353,126355,126356,126359,126360,126363,126364,126367,126368,126367,126371,126367,126374,170],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[50,126346,126347],{},"KERNEL==\"ttyUSB*\"","修改为",[50,126350,126351],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[50,126354,126347],{},"修改为类似于",[50,126357,126358],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[50,126361,126362],{},"video[0,2,4,6]","表示可以绑定的端口为",[50,126365,126366],{},"video0","或",[50,126369,126370],{},"video2",[50,126372,126373],{},"video4",[50,126375,126376],{},"video6",[14,126378,126380],{"id":126379},"_75-挂载内网网页","7.5 挂载内网网页",[19,126382,126383],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126385,126386],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126388,126389],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126391,126392,126393],{},"Termux 下载地址（F-Droid）：",[2680,126394,126395],{"href":126395,"rel":126396},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26128],[19,126398,126399],{},"首先打开app后，先更新软件缓存：",[130,126401,126403],{"className":119516,"code":126402,"language":119518,"meta":135,"style":135},"pkg update\n",[50,126404,126405],{"__ignoreMap":135},[139,126406,126407,126410],{"class":141,"line":142},[139,126408,126409],{"class":781},"pkg",[139,126411,28502],{"class":160},[19,126413,126414],{},"然后换源",[130,126416,126418],{"className":119516,"code":126417,"language":119518,"meta":135,"style":135},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[50,126419,126420],{"__ignoreMap":135},[139,126421,126422,126424,126427],{"class":141,"line":142},[139,126423,125292],{"class":781},[139,126425,126426],{"class":145}," $PREFIX",[139,126428,126429],{"class":160},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126431,126432],{},"将该文件内容替换为下面：",[130,126434,126436],{"className":119516,"code":126435,"language":119518,"meta":135,"style":135},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[50,126437,126438],{"__ignoreMap":135},[139,126439,126440,126443,126446,126449],{"class":141,"line":142},[139,126441,126442],{"class":781},"deb",[139,126444,126445],{"class":160}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[139,126447,126448],{"class":160}," stable",[139,126450,126451],{"class":160}," main\n",[3437,126453,126454,126481],{},[1763,126455,126456,126457,126459,126460],{},"如果你使用的是",[50,126458,125292],{},"编辑器：",[3437,126461,126462,126469,126475],{},[1763,126463,126464,126465,126468],{},"按 ",[50,126466,126467],{},"Ctrl+O"," 保存文件。",[1763,126470,126464,126471,126474],{},[50,126472,126473],{},"Enter"," 确认文件名。",[1763,126476,126464,126477,126480],{},[50,126478,126479],{},"Ctrl+X"," 退出编辑器。",[1763,126482,126456,126483,126459,126486],{},[50,126484,126485],{},"vim",[3437,126487,126488,126494],{},[1763,126489,126464,126490,126493],{},[50,126491,126492],{},"Esc"," 退出编辑模式。",[1763,126495,126496,126497,126499],{},"输入 ",[50,126498,121440],{}," 保存并退出。",[19,126501,126502],{},"接下来重新更新软件源：",[130,126504,126506],{"className":119516,"code":126505,"language":119518,"meta":135,"style":135},"pkg update && pkg upgrade\n",[50,126507,126508],{"__ignoreMap":135},[139,126509,126510,126512,126514,126516,126518],{"class":141,"line":142},[139,126511,126409],{"class":781},[139,126513,119567],{"class":160},[139,126515,28451],{"class":145},[139,126517,126409],{"class":781},[139,126519,119553],{"class":160},[19,126521,126522],{},"安装python：",[130,126524,126526],{"className":119516,"code":126525,"language":119518,"meta":135,"style":135},"pkg install python\n",[50,126527,126528],{"__ignoreMap":135},[139,126529,126530,126532,126534],{"class":141,"line":142},[139,126531,126409],{"class":781},[139,126533,1841],{"class":160},[139,126535,126536],{"class":160}," python\n",[19,126538,126539,28733],{},[1674,126540,126541],{},"通过Termux访问设备存储",[19,126543,126544],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[130,126546,126548],{"className":119516,"code":126547,"language":119518,"meta":135,"style":135},"termux-setup-storage\n",[50,126549,126550],{"__ignoreMap":135},[139,126551,126552],{"class":141,"line":142},[139,126553,126547],{"class":781},[1760,126555,126556],{},[1763,126557,126558,28733,126561],{},[1674,126559,126560],{},"进入HTML文件所在的目录",[1760,126562,126563],{},[1763,126564,126565,126566,126568],{},"使用",[50,126567,103503],{},"命令进入HTML文件所在的目录：",[130,126570,126572],{"className":119516,"code":126571,"language":119518,"meta":135,"style":135},"cd ~\u002Fyour_html_folder\n",[50,126573,126574],{"__ignoreMap":135},[139,126575,126576,126578],{"class":141,"line":142},[139,126577,103503],{"class":153},[139,126579,126580],{"class":160}," ~\u002Fyour_html_folder\n",[1760,126582,126583],{"start":210},[1763,126584,126585,28733,126588,126593,126610],{},[1674,126586,126587],{},"启动Python HTTP服务器",[1760,126589,126590],{},[1763,126591,126592],{},"运行以下命令启动一个简单的HTTP服务器：",[130,126594,126596],{"className":119516,"code":126595,"language":119518,"meta":135,"style":135},"python -m http.server 8000\n",[50,126597,126598],{"__ignoreMap":135},[139,126599,126600,126602,126604,126607],{"class":141,"line":142},[139,126601,134],{"class":781},[139,126603,103109],{"class":153},[139,126605,126606],{"class":160}," http.server",[139,126608,126609],{"class":153}," 8000\n",[1760,126611,126612],{"start":254},[1763,126613,126614,126615,126618],{},"这会在端口",[50,126616,126617],{},"8000","上启动一个Web服务器。",[3437,126620,126621],{},[1763,126622,126623],{},"启动服务器后，Termux会显示日志信息，例如：",[130,126625,126627],{"className":123034,"code":126626,"language":123036,"meta":123037,"style":135},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[50,126628,126629],{"__ignoreMap":135},[139,126630,126631],{"class":141,"line":142},[139,126632,126626],{},[3437,126634,126635],{},[1763,126636,126637],{},"这表示服务器已成功启动。",[19,126639,126640],{},[1674,126641,126642],{},"在浏览器中访问HTML文件",[1760,126644,126645],{},[1763,126646,126647,28733,126650,126655],{},[1674,126648,126649],{},"在同一设备上访问",[1760,126651,126652],{},[1763,126653,126654],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[130,126656,126659],{"className":126657,"code":126658,"language":73893,"meta":135,"style":135},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[50,126660,126661],{"__ignoreMap":135},[139,126662,126663,126666],{"class":141,"line":142},[139,126664,126665],{"class":145},"http:",[139,126667,126668],{"class":2512},"\u002F\u002Flocalhost:8000\n",[3437,126670,126671],{},[1763,126672,126673,126674,126677],{},"如果HTML文件中有",[50,126675,126676],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126679,126681],{"id":126680},"_76-linux重点知识","7.6 Linux重点知识",[1217,126683,126685],{"id":126684},"_761-关于点的说明","7.6.1 关于点的说明",[19,126687,126688],{},[3760,126689],{"alt":135,"src":126690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126692,126693],{},"一点本目录，两点上目录",[1217,126695,126697],{"id":126696},"_762-目录","7.6.2 目录",[24265,126699,126701],{"id":126700},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126703,126704],{},[1674,126705,126706],{},"\u002Fboot:",[19,126708,126709],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126711,126712],{},[1674,126713,126714],{},"\u002Fetc:",[19,126716,126717],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126719,126720],{},[1674,126721,126722],{},"\u002Flib：",[19,126724,126725],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126727,126728],{},[1674,126729,126730],{},"\u002Fsys:",[19,126732,126733],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24265,126735,126737],{"id":126736},"_7622-指令集合","7.6.2.2 指令集合",[19,126739,126740],{},[1674,126741,126742],{},"\u002Fbin:",[19,126744,126745],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126747,126748],{},[1674,126749,126750],{},"\u002Fsbin:",[19,126752,126753],{},"只有系统管理员才能使用的程序和指令",[24265,126755,126757],{"id":126756},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126759,126760],{},[1674,126761,126762],{},"\u002Fdev:",[19,126764,126765],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126767,126768],{},[1674,126769,126770],{},"\u002Fmedia:",[19,126772,126773],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126775,126776],{},[1674,126777,126778],{},"\u002Fmnt:",[19,126780,126781],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24265,126783,126785],{"id":126784},"_7624-临时文件","7.6.2.4 临时文件",[19,126787,126788],{},[1674,126789,126790],{},"\u002Frun:",[19,126792,126793],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126795,126796],{},[1674,126797,126798],{},"\u002Flost+found:",[19,126800,126801],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126803,126804],{},[1674,126805,126806],{},"\u002Ftmp:",[19,126808,126809],{},"这个目录是用来存放一些临时文件的",[24265,126811,126813],{"id":126812},"_7625-账户","7.6.2.5 账户",[19,126815,126816],{},[1674,126817,126818],{},"\u002Froot：",[19,126820,126821],{},"系统管理员的用户主目录",[19,126823,126824,28733],{},[1674,126825,126826],{},"\u002Fhome",[19,126828,126829],{},"用户的主目录，以用户的账号命名的",[19,126831,126832,28733],{},[1674,126833,126834],{},"\u002Fusr",[19,126836,126837],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126839,126840],{},[1674,126841,126842],{},"\u002Fusr\u002Fbin：",[19,126844,126845],{},"系统用户使用的应用程序与指令",[19,126847,126848],{},[1674,126849,126850],{},"\u002Fusr\u002Fsbin：",[19,126852,126853],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126855,126856],{},[1674,126857,126858],{},"\u002Fusr\u002Fsrc：",[19,126860,126861],{},"内核源代码默认的放置目录",[24265,126863,126865],{"id":126864},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126867,126868],{},[1674,126869,126870],{},"\u002Fvar：",[19,126872,126873],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126875,126876],{},[1674,126877,126878],{},"\u002Fproc:",[19,126880,126881,126882,126885],{},"管理 ",[1674,126883,126884],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24265,126887,126889],{"id":126888},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126891,126892],{},[1674,126893,126894],{},"\u002Fopt:",[19,126896,126897],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126899,126900],{},[1674,126901,126902],{},"\u002Fsrv:",[19,126904,126905],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1217,126907,126909],{"id":126908},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126911,126912],{},[3760,126913],{"alt":135,"src":126914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126916,126917],{},"windows-->linux:",[19,126919,126920],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126922,126923],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126925,126926],{},"linux传输文件到windows",[19,126928,126929],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1217,126931,126933],{"id":126932},"_764-易忘知识","7.6.4 易忘知识",[19,126935,126936],{},"操作系统内核查看",[130,126938,126939],{"className":119516,"code":123508,"language":119518,"meta":135,"style":135},[50,126940,126941],{"__ignoreMap":135},[139,126942,126943,126945],{"class":141,"line":142},[139,126944,72434],{"class":781},[139,126946,123517],{"class":153},[19,126948,126949],{},[3760,126950],{"alt":135,"src":126951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126953,126954],{},[3760,126955],{"alt":135,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[130,126958,126960],{"className":119516,"code":126959,"language":119518,"meta":135,"style":135},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[50,126961,126962,126974],{"__ignoreMap":135},[139,126963,126964,126966,126969,126972],{"class":141,"line":142},[139,126965,123725],{"class":781},[139,126967,126968],{"class":160}," mvtest",[139,126970,126971],{"class":160}," mvtest2",[139,126973,4957],{"class":145},[139,126975,126976],{"class":141,"line":210},[139,126977,126978],{"class":781},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126980,126981],{},[3760,126982],{"alt":135,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126985,126986],{},[3760,126987],{"alt":135,"src":126988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126990,126991,126992,126995],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[50,126993,126994],{},"du -a"," 可以快速查看磁盘使用细节。",[1217,126997,126999],{"id":126998},"_765-vim","7.6.5 Vim",[19,127001,127002],{},[3760,127003],{"alt":135,"src":127004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127006,127007],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127009,127010],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127012,127013],{},[1674,127014,127015],{},"1.命令模式：",[19,127017,127018],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127020,127021],{},"x 删除当前光标所在处的字符",[19,127023,127024],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127026,127027],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127029,127030],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127032,127033],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127035,127036],{},"dd 剪切当前行",[19,127038,127039],{},"yy 复制当前行",[19,127041,127042],{},"p 粘贴剪贴板内容到光标下方",[19,127044,127045],{},"P 粘贴剪贴板内容到光标上方",[19,127047,127048],{},"u 撤销上一次操作",[19,127050,127051],{},"ctrl+r 重做上一次操作",[19,127053,127054,127056],{},[3230,127055],{}," 保存文件",[19,127058,127059,127061],{},[3080,127060],{}," 退出Vim编辑器",[19,127063,127064,127066],{},[3080,127065],{},"! 强制退出Vim编辑器，不保存修改",[19,127068,127069],{},[1674,127070,127071],{},"2.输入模式：",[19,127073,127074],{},[3760,127075],{"alt":135,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127078,127079],{},[1674,127080,127081],{},"3.底线命令模式：",[19,127083,127084],{},[3760,127085],{"alt":135,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127088,127089],{},"按下esc可以退出底线命令模式",[1217,127091,127093],{"id":127092},"_766-apt","7.6.6 apt",[19,127095,127096],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1217,127098,127100],{"id":127099},"_767-home与root的区别","7.6.7 home与root的区别",[19,127102,127103],{},[3760,127104],{"alt":135,"src":127105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127107,127108],{},[3760,127109],{"alt":135,"src":127110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127112,127113],{},[3760,127114],{"alt":135,"src":127115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127117,127118],{},[3760,127119],{"alt":135,"src":127120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1217,127122,127124],{"id":127123},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127126,127127],{},[2680,127128,127129],{"href":127129,"rel":127130},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26128],[1760,127132,127133,127136],{},[1763,127134,127135],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1763,127137,127138],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127140,127141],{},[3760,127142],{"alt":135,"src":127143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127145,127146],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127148,127149],{},[3760,127150],{"alt":135,"src":127151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[130,127153,127155],{"className":123034,"code":127154,"language":123036,"meta":123037,"style":135},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[50,127156,127157,127162],{"__ignoreMap":135},[139,127158,127159],{"class":141,"line":142},[139,127160,127161],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[139,127163,127164],{"class":141,"line":210},[139,127165,127166],{},".\u002Fpycharm.sh\n",[19,127168,127169],{},"3️⃣创建.desktop文件",[19,127171,127172],{},[1674,127173,127174],{},"原理：",[3437,127176,127177,127187],{},[1763,127178,127179,127180,127186],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1674,127181,127182,127185],{},[50,127183,127184],{},".desktop"," 文件"," 来识别应用。",[1763,127188,127189,127191,127192],{},[50,127190,127184],{}," 文件相当于一个“应用注册表”，告诉系统：",[3437,127193,127194,127197,127200,127203,127206],{},[1763,127195,127196],{},"应用名字（Name）",[1763,127198,127199],{},"图标（Icon）",[1763,127201,127202],{},"执行命令（Exec）",[1763,127204,127205],{},"分类（Categories）",[1763,127207,127208],{},"是否需要终端（Terminal）",[130,127210,127212],{"className":123034,"code":127211,"language":123036,"meta":123037,"style":135},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[50,127213,127214,127219],{"__ignoreMap":135},[139,127215,127216],{"class":141,"line":142},[139,127217,127218],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[139,127220,127221],{"class":141,"line":210},[139,127222,127223],{},"nano pycharm.desktop\n",[19,127225,127226],{},"nano是一个命令行下的编辑器，也可以使用vim",[130,127228,127230],{"className":123034,"code":127229,"language":123036,"meta":123037,"style":135},"[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",[50,127231,127232,127237,127242,127247,127252,127257,127262,127267,127272,127277],{"__ignoreMap":135},[139,127233,127234],{"class":141,"line":142},[139,127235,127236],{},"[Desktop Entry]\n",[139,127238,127239],{"class":141,"line":210},[139,127240,127241],{},"Version=1.0\n",[139,127243,127244],{"class":141,"line":254},[139,127245,127246],{},"Type=Application\n",[139,127248,127249],{"class":141,"line":262},[139,127250,127251],{},"Name=PyCharm\n",[139,127253,127254],{"class":141,"line":313},[139,127255,127256],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[139,127258,127259],{"class":141,"line":462},[139,127260,127261],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[139,127263,127264],{"class":141,"line":474},[139,127265,127266],{},"Comment=JetBrains PyCharm IDE\n",[139,127268,127269],{"class":141,"line":484},[139,127270,127271],{},"Categories=Development;IDE;\n",[139,127273,127274],{"class":141,"line":989},[139,127275,127276],{},"Terminal=false\n",[139,127278,127279],{"class":141,"line":994},[139,127280,127281],{},"StartupWMClass=jetbrains-pycharm\n",[3437,127283,127284,127290,127296,127302],{},[1763,127285,127286,127289],{},[50,127287,127288],{},"Exec"," → 点击图标时执行的命令",[1763,127291,127292,127295],{},[50,127293,127294],{},"Icon"," → 显示在菜单和桌面上的图标",[1763,127297,127298,127301],{},[50,127299,127300],{},"Terminal=false"," → 不打开终端",[1763,127303,127304,127307],{},[50,127305,127306],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127309,127310,127311],"blockquote",{},[19,127312,127313,127314,127316,127317],{},"可以理解成 ",[50,127315,127184],{}," 文件是 Linux 的 ",[1674,127318,127319],{},"快捷方式配置文件",[19,127321,127322],{},"4️⃣设置可执行权限",[130,127324,127326],{"className":123034,"code":127325,"language":123036,"meta":123037,"style":135},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[50,127327,127328],{"__ignoreMap":135},[139,127329,127330],{"class":141,"line":142},[139,127331,127325],{},[19,127333,127334],{},"5️⃣桌面图标启动的话如下：",[130,127336,127338],{"className":123034,"code":127337,"language":123036,"meta":123037,"style":135},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[50,127339,127340,127345],{"__ignoreMap":135},[139,127341,127342],{"class":141,"line":142},[139,127343,127344],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[139,127346,127347],{"class":141,"line":210},[139,127348,127349],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1760,127351,127352],{"start":254},[1763,127353,127354],{},"下载Appimage文件实现软件的安装",[19,127356,127357],{},"1️⃣先下载appimage",[19,127359,127360],{},[2680,127361,127362],{"href":127362,"rel":127363},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26128],[19,127365,127366],{},[3760,127367],{"alt":135,"src":127368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127370,127371],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127373,127374],{},[3760,127375],{"alt":135,"src":127376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127378,127379],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127381,127382],{},[3760,127383],{"alt":135,"src":127384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127386,127387],{},[3760,127388],{"alt":135,"src":127389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127391,127392,127393,127396],{},"3️⃣给他们放在",[50,127394,127395],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127398,127399],{},"4️⃣给软件执行权限",[130,127401,127403],{"className":123034,"code":127402,"language":123036,"meta":123037,"style":135},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[50,127404,127405,127410],{"__ignoreMap":135},[139,127406,127407],{"class":141,"line":142},[139,127408,127409],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[139,127411,127412],{"class":141,"line":210},[139,127413,127414],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127416,127417],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[130,127419,127421],{"className":119516,"code":127420,"language":119518,"meta":135,"style":135},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[50,127422,127423,127430,127437,127443],{"__ignoreMap":135},[139,127424,127425,127427],{"class":141,"line":142},[139,127426,103503],{"class":153},[139,127428,127429],{"class":160}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[139,127431,127432,127434],{"class":141,"line":210},[139,127433,103510],{"class":781},[139,127435,127436],{"class":160}," .\u002Fqqmusic.desktop\n",[139,127438,127439,127441],{"class":141,"line":254},[139,127440,126485],{"class":781},[139,127442,127436],{"class":160},[139,127444,127445,127447,127449,127451],{"class":141,"line":262},[139,127446,26840],{"class":781},[139,127448,26843],{"class":160},[139,127450,125351],{"class":160},[139,127452,127436],{"class":160},[19,127454,127455,127457],{},[50,127456,103510],{},"：一个 Linux 命令，主要功能是：",[3437,127459,127460,127463],{},[1763,127461,127462],{},"如果文件不存在，就创建一个新的空文件",[1763,127464,127465],{},"如果文件已存在，就更新该文件的最后修改时间",[130,127467,127469],{"className":123034,"code":127468,"language":123036,"meta":123037,"style":135},"[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",[50,127470,127471,127475,127480,127485,127490,127494,127499],{"__ignoreMap":135},[139,127472,127473],{"class":141,"line":142},[139,127474,127236],{},[139,127476,127477],{"class":141,"line":210},[139,127478,127479],{},"Name=QQ音乐\n",[139,127481,127482],{"class":141,"line":254},[139,127483,127484],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[139,127486,127487],{"class":141,"line":262},[139,127488,127489],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[139,127491,127492],{"class":141,"line":313},[139,127493,127246],{},[139,127495,127496],{"class":141,"line":462},[139,127497,127498],{},"Categories=Audio;Music;Player;\n",[139,127500,127501],{"class":141,"line":474},[139,127502,127503],{},"Comment=QQ Music Client for Linux\n",[19,127505,127506],{},"将文件复制进去",[19,127508,127509],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127511,127512],{},[3760,127513],{"alt":135,"src":127514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127516,127517],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127519,127520],{},[3760,127521],{"alt":135,"src":127522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127524,127525,127526,127529,127530,127533],{},"如果你用的不是KDE，那么也可以直接修改",[50,127527,127528],{},"qqmuic.desktop","：在exec的末尾加上",[50,127531,127532],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[130,127535,127537],{"className":123034,"code":127536,"language":123036,"meta":123037,"style":135},"[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",[50,127538,127539,127543,127547,127552,127556,127560,127564],{"__ignoreMap":135},[139,127540,127541],{"class":141,"line":142},[139,127542,127236],{},[139,127544,127545],{"class":141,"line":210},[139,127546,127479],{},[139,127548,127549],{"class":141,"line":254},[139,127550,127551],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[139,127553,127554],{"class":141,"line":262},[139,127555,127489],{},[139,127557,127558],{"class":141,"line":313},[139,127559,127246],{},[139,127561,127562],{"class":141,"line":462},[139,127563,127498],{},[139,127565,127566],{"class":141,"line":474},[139,127567,127503],{},[19,127569,127570],{},[3760,127571],{"alt":135,"src":127572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127574,127575],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[130,127577,127579],{"className":123034,"code":127578,"language":123036,"meta":123037,"style":135},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[50,127580,127581],{"__ignoreMap":135},[139,127582,127583],{"class":141,"line":142},[139,127584,127578],{},[1760,127586,127587],{"start":262},[1763,127588,127589],{},"去Flathub上安装软件",[19,127591,127592],{},[2680,127593,127594],{"href":127594,"rel":127595},"https:\u002F\u002Fflathub.org\u002F",[26128],[19,127597,127598],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127600,127601],{},[3760,127602],{"alt":135,"src":127603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[130,127605,127607],{"className":123034,"code":127606,"language":123036,"meta":123037,"style":135},"flatpak install flathub com.obsproject.Studio\n",[50,127608,127609],{"__ignoreMap":135},[139,127610,127611],{"class":141,"line":142},[139,127612,127606],{},[19,127614,127615],{},[3760,127616],{"alt":135,"src":127617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127619,127620],{},"2️⃣运行软件",[19,127622,127623],{},"a.官方方式：",[19,127625,127626],{},[3760,127627],{"alt":135,"src":127628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[130,127630,127631],{"className":123034,"code":127606,"language":123036,"meta":123037,"style":135},[50,127632,127633],{"__ignoreMap":135},[139,127634,127635],{"class":141,"line":142},[139,127636,127606],{},[19,127638,127639],{},"b.当普通软件运行：",[19,127641,127642],{},[3760,127643],{"alt":135,"src":127644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127646,127647],{},[3760,127648],{"alt":135,"src":127649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2348,127651,127652],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":135,"searchDepth":210,"depth":210,"links":127654},[127655,127656,127661,127662,127668,127669],{"id":124387,"depth":210,"text":124388},{"id":124729,"depth":210,"text":124730,"children":127657},[127658,127659,127660],{"id":124733,"depth":254,"text":124734},{"id":124800,"depth":254,"text":124801},{"id":125061,"depth":254,"text":125062},{"id":125214,"depth":210,"text":125215},{"id":125452,"depth":210,"text":125453,"children":127663},[127664,127665,127666,127667],{"id":125504,"depth":254,"text":125505},{"id":125790,"depth":254,"text":125791},{"id":126061,"depth":254,"text":126062},{"id":126320,"depth":254,"text":126321},{"id":126379,"depth":210,"text":126380},{"id":126680,"depth":210,"text":126681,"children":127670},[127671,127672,127673,127674,127675,127676,127677,127678],{"id":126684,"depth":254,"text":126685},{"id":126696,"depth":254,"text":126697},{"id":126908,"depth":254,"text":126909},{"id":126932,"depth":254,"text":126933},{"id":126998,"depth":254,"text":126999},{"id":127092,"depth":254,"text":127093},{"id":127099,"depth":254,"text":127100},{"id":127123,"depth":254,"text":127124},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124379,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127685,"title":127686,"body":127687,"description":2384,"extension":2385,"meta":127691,"navigation":842,"path":127692,"seo":127693,"stem":127694,"__hash__":127695},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127688,"toc":127689},[],{"title":135,"searchDepth":210,"depth":210,"links":127690},[],{"category":32522},"\u002Fwiki\u002F2025-01-27-linux",{"title":127686,"description":2384},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127697,"title":127698,"body":127699,"description":127703,"extension":2385,"meta":128094,"navigation":842,"path":128095,"seo":128096,"stem":128097,"__hash__":128098},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127700,"toc":128092},[127701,127704,127708,127725,127728,127781,127785,127787,127827,127836,127840,127843,128084,128089],[19,127702,127703],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127705,127707],{"id":127706},"_1ubuntu环境配置","1.Ubuntu环境配置",[1760,127709,127710,127713,127716,127719,127722],{},[1763,127711,127712],{},"ubuntu环境换源",[1763,127714,127715],{},"安装cuda",[1763,127717,127718],{},"安装miniconda",[1763,127720,127721],{},"安装pytorch",[1763,127723,127724],{},"安装genesis",[19,127726,127727],{},"参考链接：",[130,127729,127731],{"className":1830,"code":127730,"language":1832,"meta":135,"style":135},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[50,127732,127733],{"__ignoreMap":135},[139,127734,127735,127738,127741,127744,127746,127749,127752,127754,127757,127760,127762,127765,127768,127770,127773,127776,127778],{"class":141,"line":142},[139,127736,127737],{"class":781},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[139,127739,127740],{"class":160},"=blogdetail",[139,127742,127743],{"class":145},"&sharetype",[139,127745,150],{"class":149},[139,127747,127748],{"class":160},"blogdetail",[139,127750,127751],{"class":145},"&sharerId",[139,127753,150],{"class":149},[139,127755,127756],{"class":160},"144728092",[139,127758,127759],{"class":145},"&sharerefer",[139,127761,150],{"class":149},[139,127763,127764],{"class":160},"PC",[139,127766,127767],{"class":145},"&sharesource",[139,127769,150],{"class":149},[139,127771,127772],{"class":160},"qq_69379513",[139,127774,127775],{"class":145},"&sharefrom",[139,127777,150],{"class":149},[139,127779,127780],{"class":160},"from_link\n",[10,127782,127784],{"id":127783},"_2genesis-报错issue","2.Genesis 报错issue",[19,127786,127727],{},[130,127788,127789],{"className":1830,"code":127730,"language":1832,"meta":135,"style":135},[50,127790,127791],{"__ignoreMap":135},[139,127792,127793,127795,127797,127799,127801,127803,127805,127807,127809,127811,127813,127815,127817,127819,127821,127823,127825],{"class":141,"line":142},[139,127794,127737],{"class":781},[139,127796,127740],{"class":160},[139,127798,127743],{"class":145},[139,127800,150],{"class":149},[139,127802,127748],{"class":160},[139,127804,127751],{"class":145},[139,127806,150],{"class":149},[139,127808,127756],{"class":160},[139,127810,127759],{"class":145},[139,127812,150],{"class":149},[139,127814,127764],{"class":160},[139,127816,127767],{"class":145},[139,127818,150],{"class":149},[139,127820,127772],{"class":160},[139,127822,127775],{"class":145},[139,127824,150],{"class":149},[139,127826,127780],{"class":160},[130,127828,127830],{"className":1830,"code":127829,"language":1832,"meta":135,"style":135},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[50,127831,127832],{"__ignoreMap":135},[139,127833,127834],{"class":141,"line":142},[139,127835,127829],{"class":781},[10,127837,127839],{"id":127838},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127841,127842],{},"hello_robot.py",[130,127844,127846],{"className":132,"code":127845,"language":134,"meta":135,"style":135},"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",[50,127847,127848,127854,127869,127873,127885,127897,127901,127914,127918,127937,127947,127957,127971,127975,127979,127984,127988,127998,128005,128019,128026,128036,128041,128045,128063,128068,128072,128079],{"__ignoreMap":135},[139,127849,127850,127852],{"class":141,"line":142},[139,127851,1064],{"class":149},[139,127853,1611],{"class":145},[139,127855,127856,127859,127862,127864,127866],{"class":141,"line":210},[139,127857,127858],{"class":145},"os.environ[",[139,127860,127861],{"class":160},"'PYOPENGL_PLATFORM'",[139,127863,6721],{"class":145},[139,127865,150],{"class":149},[139,127867,127868],{"class":160}," 'glx'\n",[139,127870,127871],{"class":141,"line":254},[139,127872,843],{"emptyLinePlaceholder":842},[139,127874,127875,127877,127880,127882],{"class":141,"line":262},[139,127876,1064],{"class":149},[139,127878,127879],{"class":145}," genesis ",[139,127881,1035],{"class":149},[139,127883,127884],{"class":145}," gs\n",[139,127886,127887,127889,127892,127894],{"class":141,"line":313},[139,127888,1265],{"class":149},[139,127890,127891],{"class":145}," pynput ",[139,127893,1064],{"class":149},[139,127895,127896],{"class":145}," keyboard\n",[139,127898,127899],{"class":141,"line":462},[139,127900,843],{"emptyLinePlaceholder":842},[139,127902,127903,127906,127909,127911],{"class":141,"line":474},[139,127904,127905],{"class":145},"gs.init(",[139,127907,127908],{"class":2111},"backend",[139,127910,150],{"class":149},[139,127912,127913],{"class":145},"gs.gpu)\n",[139,127915,127916],{"class":141,"line":484},[139,127917,843],{"emptyLinePlaceholder":842},[139,127919,127920,127923,127925,127928,127931,127933,127935],{"class":141,"line":989},[139,127921,127922],{"class":145},"scene ",[139,127924,150],{"class":149},[139,127926,127927],{"class":145}," gs.Scene(",[139,127929,127930],{"class":2111},"show_viewer",[139,127932,150],{"class":149},[139,127934,33725],{"class":153},[139,127936,164],{"class":145},[139,127938,127939,127942,127944],{"class":141,"line":994},[139,127940,127941],{"class":145},"plane ",[139,127943,150],{"class":149},[139,127945,127946],{"class":145}," scene.add_entity(gs.morphs.Plane())\n",[139,127948,127949,127952,127954],{"class":141,"line":999},[139,127950,127951],{"class":145},"franka ",[139,127953,150],{"class":149},[139,127955,127956],{"class":145}," scene.add_entity(\n",[139,127958,127959,127962,127964,127966,127969],{"class":141,"line":1006},[139,127960,127961],{"class":145},"    gs.morphs.MJCF(",[139,127963,2137],{"class":2111},[139,127965,150],{"class":149},[139,127967,127968],{"class":160},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[139,127970,40290],{"class":145},[139,127972,127973],{"class":141,"line":1027},[139,127974,164],{"class":145},[139,127976,127977],{"class":141,"line":1040},[139,127978,843],{"emptyLinePlaceholder":842},[139,127980,127981],{"class":141,"line":2160},[139,127982,127983],{"class":145},"scene.build()\n",[139,127985,127986],{"class":141,"line":2188},[139,127987,843],{"emptyLinePlaceholder":842},[139,127989,127990,127992,127995],{"class":141,"line":3944},[139,127991,778],{"class":149},[139,127993,127994],{"class":781}," on_press",[139,127996,127997],{"class":145},"(key):\n",[139,127999,128000,128003],{"class":141,"line":3963},[139,128001,128002],{"class":149},"    try",[139,128004,246],{"class":145},[139,128006,128007,128009,128012,128014,128017],{"class":141,"line":3968},[139,128008,4780],{"class":149},[139,128010,128011],{"class":145}," key.char ",[139,128013,5232],{"class":149},[139,128015,128016],{"class":160}," 'q'",[139,128018,246],{"class":145},[139,128020,128021,128023],{"class":141,"line":3982},[139,128022,17999],{"class":149},[139,128024,128025],{"class":153}," False\n",[139,128027,128028,128031,128034],{"class":141,"line":3987},[139,128029,128030],{"class":149},"    except",[139,128032,128033],{"class":153}," AttributeError",[139,128035,246],{"class":145},[139,128037,128038],{"class":141,"line":4014},[139,128039,128040],{"class":149},"        pass\n",[139,128042,128043],{"class":141,"line":4019},[139,128044,843],{"emptyLinePlaceholder":842},[139,128046,128047,128050,128052,128055,128058,128060],{"class":141,"line":4036},[139,128048,128049],{"class":145},"listener ",[139,128051,150],{"class":149},[139,128053,128054],{"class":145}," keyboard.Listener(",[139,128056,128057],{"class":2111},"on_press",[139,128059,150],{"class":149},[139,128061,128062],{"class":145},"on_press)\n",[139,128064,128065],{"class":141,"line":4041},[139,128066,128067],{"class":145},"listener.start()\n",[139,128069,128070],{"class":141,"line":4046},[139,128071,843],{"emptyLinePlaceholder":842},[139,128073,128074,128076],{"class":141,"line":4051},[139,128075,110884],{"class":149},[139,128077,128078],{"class":145}," listener.running:\n",[139,128080,128081],{"class":141,"line":4065},[139,128082,128083],{"class":145},"    scene.step()\n",[19,128085,128086],{},[3760,128087],{"alt":135,"src":128088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2348,128090,128091],{},"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":135,"searchDepth":210,"depth":210,"links":128093},[],{"category":25645},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127698,"description":127703},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128100,"title":128101,"body":128102,"description":2384,"extension":2385,"meta":128117,"navigation":842,"path":128118,"seo":128119,"stem":128120,"__hash__":128121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128103,"toc":128114},[128104,128107,128111],[10,128105,128101],{"id":128106},"_1-基础知识",[14,128108,128110],{"id":128109},"_11-js的组成","1.1 js的组成",[19,128112,128113],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":135,"searchDepth":210,"depth":210,"links":128115},[128116],{"id":128109,"depth":210,"text":128110},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128101,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128123,"title":128124,"body":128125,"description":2384,"extension":2385,"meta":128263,"navigation":842,"path":128264,"seo":128265,"stem":128266,"__hash__":128267},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128126,"toc":128251},[128127,128130,128134,128137,128141,128151,128155,128158,128161,128164,128168,128175,128181,128185,128191,128201,128205,128208,128212,128215,128219,128222,128226,128229,128233,128236,128239,128242,128245,128248],[10,128128,128124],{"id":128129},"_2-vscode必备内容",[14,128131,128133],{"id":128132},"_21-标签分类","2.1 标签分类",[19,128135,128136],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128138,128140],{"id":128139},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128142,128143,128144,128146,128147,128150],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[50,128145,2668],{}," 然后按 ",[50,128148,128149],{},"Tab","，快速自动生成基本结构。",[14,128152,128154],{"id":128153},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128156,128157],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128159,128160],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128162,128163],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128165,128167],{"id":128166},"_24-视图缩放","2.4 视图缩放",[19,128169,128170,128171,128174],{},"缩放视图 ",[50,128172,128173],{},"ctrl+"," 可实现代码增大。",[19,128176,128177,128180],{},[50,128178,128179],{},"ctrl-"," 可实现代码减小。",[14,128182,128184],{"id":128183},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128186,128187,128188,170],{},"VSCode 新建文件快捷键为 ",[50,128189,128190],{},"ctrl+N",[19,128192,128193,128194,128197,128198,1115],{},"保存快捷键为 ",[50,128195,128196],{},"ctrl+S","，将文本保存为 ",[50,128199,128200],{},".html",[14,128202,128204],{"id":128203},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128206,128207],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128209,128211],{"id":128210},"_27-vscode-icons","2.7 vscode-icons",[19,128213,128214],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128216,128218],{"id":128217},"_28-easy-less","2.8 Easy LESS",[19,128220,128221],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128223,128225],{"id":128224},"_29-会了吧插件","2.9 会了吧插件",[19,128227,128228],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128230,128232],{"id":128231},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128234,128235],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128237,128238],{},"②选定多个相同的单词:ctrl+D",[19,128240,128241],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128243,128244],{},"④全局替换某些单词:ctrl+h",[19,128246,128247],{},"⑤快速定位到某一行:ctrl+g",[19,128249,128250],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":135,"searchDepth":210,"depth":210,"links":128252},[128253,128254,128255,128256,128257,128258,128259,128260,128261,128262],{"id":128132,"depth":210,"text":128133},{"id":128139,"depth":210,"text":128140},{"id":128153,"depth":210,"text":128154},{"id":128166,"depth":210,"text":128167},{"id":128183,"depth":210,"text":128184},{"id":128203,"depth":210,"text":128204},{"id":128210,"depth":210,"text":128211},{"id":128217,"depth":210,"text":128218},{"id":128224,"depth":210,"text":128225},{"id":128231,"depth":210,"text":128232},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128124,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128269,"title":128270,"body":128271,"description":2384,"extension":2385,"meta":128430,"navigation":842,"path":128431,"seo":128432,"stem":128433,"__hash__":128434},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128272,"toc":128422},[128273,128276,128280,128290,128296,128302,128306,128315,128319,128324,128327,128330,128334,128337,128347,128356,128365,128374,128384,128391,128396,128401,128414],[10,128274,128270],{"id":128275},"_3-html文本与容器标签",[14,128277,128279],{"id":128278},"_31-标题标签","3.1 标题标签",[19,128281,128282,128285,128286,128289],{},[50,128283,128284],{},"\u003Ch1>","我是一级标签",[50,128287,128288],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128291,128292,128285,128294],{},[50,128293,128284],{},[50,128295,128288],{},[19,128297,125553,128298,128301],{},[50,128299,128300],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128303,128305],{"id":128304},"_32-段落标签","3.2 段落标签",[19,128307,128308,128311,128312],{},[50,128309,128310],{},"\u003Cp>","....",[50,128313,128314],{},"\u003C\u002Fp>",[14,128316,128318],{"id":128317},"_33-换行标签","3.3 换行标签",[19,128320,128321],{},[50,128322,128323],{},"\u003Cbr \u002F>",[19,128325,128326],{},"具有强制换行的作用",[19,128328,128329],{},"单标签",[14,128331,128333],{"id":128332},"_34-文本格式化标签","3.4 文本格式化标签",[19,128335,128336],{},"提供粗体、斜体和下划线等效果",[19,128338,128339,128340,84767,128343,128346],{},"加粗：",[50,128341,128342],{},"\u003Cstrong>...\u003C\u002Fstrong>",[50,128344,128345],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128348,128349,128350,84767,128353,128346],{},"斜体：",[50,128351,128352],{},"\u003Cem>...\u003C\u002Fem>",[50,128354,128355],{},"\u003Ci>...\u003C\u002Fi>",[19,128357,128358,128359,84767,128362,128346],{},"删除线：",[50,128360,128361],{},"\u003Cdel>...\u003C\u002Fdel>",[50,128363,128364],{},"\u003Cs>...\u003C\u002Fs>",[19,128366,128367,128368,84767,128371,128346],{},"下划线：",[50,128369,128370],{},"\u003Cins>...\u003C\u002Fins>",[50,128372,128373],{},"\u003Cu>...\u003C\u002Fu>",[14,128375,128377,128378,20677,128381,104917],{"id":128376},"_35-div和span标签","3.5 ",[50,128379,128380],{},"\u003Cdiv>",[50,128382,128383],{},"\u003Cspan>",[19,128385,128386,103245,128388,128390],{},[50,128387,128380],{},[50,128389,128383],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128392,128393],{},[50,128394,128395],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128397,128398],{},[50,128399,128400],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128402,128403,128404,128406,128407,128409,128410,128413],{},"两者特点：①",[50,128405,128380],{}," 标签用来布局，但一行通常只放一个 ",[50,128408,128380],{},"。可以理解为一个大盒子，独占一行，在 ",[50,128411,128412],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128415,79478,128416,128418,128419,128421],{},[50,128417,128383],{}," 标签也可用于布局，一行可以放多个 ",[50,128420,128383],{},"，可理解为小盒子。",{"title":135,"searchDepth":210,"depth":210,"links":128423},[128424,128425,128426,128427,128428],{"id":128278,"depth":210,"text":128279},{"id":128304,"depth":210,"text":128305},{"id":128317,"depth":210,"text":128318},{"id":128332,"depth":210,"text":128333},{"id":128376,"depth":210,"text":128429},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128270,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128436,"title":128437,"body":128438,"description":2384,"extension":2385,"meta":128635,"navigation":842,"path":128636,"seo":128637,"stem":128638,"__hash__":128639},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128439,"toc":128627},[128440,128443,128447,128450,128456,128463,128469,128475,128478,128481,128484,128487,128490,128493,128496,128500,128503,128506,128509,128515,128521,128527,128534,128538,128544,128550,128553,128556,128562,128568,128574,128577,128580,128584,128587,128597,128603,128607,128616,128620,128623],[10,128441,128437],{"id":128442},"_4-html图像与链接",[14,128444,128446],{"id":128445},"_41-图像标签","4.1 图像标签",[19,128448,128449],{},"（1）标签",[19,128451,128452,128455],{},[50,128453,128454],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128457,128458,128459,128462],{},"src是",[50,128460,128461],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128464,128465,128466],{},"alt:文本，替换文本。图像不能显示的文字 ",[50,128467,128468],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128470,128471,128472],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[50,128473,128474],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128476,128477],{},"width:像素，设置图像的宽度",[19,128479,128480],{},"height:像素，设置图像的高度",[19,128482,128483],{},"border：像素，设置图像的边框粗细",[19,128485,128486],{},"（2）图像标签属性的注意点：",[19,128488,128489],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128491,128492],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128494,128495],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128497,128499],{"id":128498},"_42-路径注意要点","4.2 路径注意要点：",[19,128501,128502],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128504,128505],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128507,128508],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128510,128511,128512],{},"①同一级路径：图像文件位于HTML文件同一级，如",[50,128513,128514],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128516,128517,128518],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[50,128519,128520],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128522,128523,128524],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[50,128525,128526],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128528,128529,128530,634],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2680,128531,128532],{"href":128532,"rel":128533},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26128],[14,128535,128537],{"id":128536},"_43-超链接标签","4.3 超链接标签",[19,128539,128540,128543],{},[50,128541,128542],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128545,128546,128547],{},"①语法格式：",[50,128548,128549],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128551,128552],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128554,128555],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128557,128558,128559],{},"③链接分类：外部链接：",[50,128560,128561],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128563,128564,128565],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[50,128566,128567],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128569,128570,128571],{},"空链接：如果当时没有确定链接目标时，",[50,128572,128573],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128575,128576],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128578,128579],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128581,128583],{"id":128582},"_44-锚点链接","4.4 锚点链接",[19,128585,128586],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128588,128589,128590,128593,128594],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[50,128591,128592],{},"\u003Ca href=\"#two\">","第二级",[50,128595,128596],{},"\u003C\u002Fa>",[19,128598,128599,128600],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[50,128601,128602],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128604,128606],{"id":128605},"_45-注释标签","4.5 注释标签",[19,128608,128609,128612,128613],{},[50,128610,128611],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[50,128614,128615],{},"ctrl+\u002F",[14,128617,128619],{"id":128618},"_46-特殊字符","4.6 特殊字符",[19,128621,128622],{},"可以实现添加多个空格",[3760,128624],{"style":128625,"src":128626},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":135,"searchDepth":210,"depth":210,"links":128628},[128629,128630,128631,128632,128633,128634],{"id":128445,"depth":210,"text":128446},{"id":128498,"depth":210,"text":128499},{"id":128536,"depth":210,"text":128537},{"id":128582,"depth":210,"text":128583},{"id":128605,"depth":210,"text":128606},{"id":128618,"depth":210,"text":128619},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128437,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128641,"title":128642,"body":128643,"description":2384,"extension":2385,"meta":128936,"navigation":842,"path":128937,"seo":128938,"stem":128939,"__hash__":128940},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128644,"toc":128927},[128645,128648,128652,128655,128658,128661,128664,128667,128670,128673,128676,128679,128699,128705,128709,128712,128715,128718,128721,128724,128727,128731,128734,128737,128740,128743,128756,128761,128764,128767,128782,128785,128788,128791,128794,128797,128801,128804,128811,128814,128817,128820,128823,128826,128832,128835,128838,128844,128847,128850,128853,128859,128862,128865,128879,128886,128889,128892,128899,128908,128911,128914,128917,128921,128924],[10,128646,128642],{"id":128647},"_5-html表格列表与表单",[14,128649,128651],{"id":128650},"_51-表格标签","5.1 表格标签",[19,128653,128654],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128656,128657],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128659,128660],{},"②表格基本语法：",[3760,128662],{"style":128625,"src":128663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128665,128666],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3760,128668],{"style":128625,"src":128669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128671,128672],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3760,128674],{"style":128625,"src":128675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128677,128678],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128680,128681,128684,128685,128687,128688,128691,128692,128694,128695,128698],{},[50,128682,128683],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[50,128686,128683],{},"内部必须拥有",[50,128689,128690],{},"\u003Ctr>","标签，一般位于第一行，",[50,128693,128683],{},"比",[50,128696,128697],{},"\u003Cth>","范围广",[19,128700,128701,128704],{},[50,128702,128703],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128706,128708],{"id":128707},"_52-合并单元格","5.2 合并单元格",[19,128710,128711],{},"（1）合并单元格方式：",[19,128713,128714],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128716,128717],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128719,128720],{},"（2）目标单元格：",[19,128722,128723],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128725,128726],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128728,128730],{"id":128729},"_53-列表标签","5.3 列表标签",[19,128732,128733],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128735,128736],{},"①无序列表：",[3760,128738],{"style":128625,"src":128739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128741,128742],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128744,128745,128748,128749,128752,128753,128755],{},[50,128746,128747],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[50,128750,128751],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[50,128754,128747],{},"中输入其他标签或文字是不对的",[19,128757,128758,128760],{},[50,128759,128751],{},"之间相当于一个容器，可以容纳所有元素",[19,128762,128763],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128765,128766],{},"在css中去除前边的小圆点采用如下代码:",[130,128768,128772],{"className":128769,"code":128770,"language":128771,"meta":135,"style":135},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[50,128773,128774],{"__ignoreMap":135},[139,128775,128776,128779],{"class":141,"line":142},[139,128777,128778],{"class":53538},"list-style",[139,128780,128781],{"class":145},": none;\n",[19,128783,128784],{},"②有序列表：",[3760,128786],{"style":128625,"src":128787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128789,128790],{},"③自定义列表：",[3760,128792],{"style":128625,"src":128793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3760,128795],{"style":128625,"src":128796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128798,128800],{"id":128799},"_54-表单标签","5.4 表单标签",[19,128802,128803],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128805,128806,128807,128810],{},"（1）表单域：包含单元素的区域，",[50,128808,128809],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3760,128812],{"style":128625,"src":128813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128815,128816],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128818,128819],{},"表单元素提交必须有name属性",[19,128821,128822],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128824,128825],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128827,79455,128828,128831],{},[50,128829,128830],{},"\u003Cinput>","输入表单元素",[3760,128833],{"style":128625,"src":128834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3760,128836],{"style":128625,"src":128837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128839,128840,128841],{},"单选按钮：",[50,128842,128843],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3760,128845],{"style":128625,"src":128846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128848,128849],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3760,128851],{"style":128625,"src":128852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128854,128855,128858],{},[1674,128856,128857],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128860,128861],{},"②select下拉表单元素：可以节约页面控件",[3760,128863],{"style":128625,"src":128864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128866,128867,16066,128869,128872,128873,128875,128876,128878],{},[1674,128868,2486],{},[50,128870,128871],{},"\u003Cselect>","中至少包含一对",[50,128874,104938],{},"；在",[50,128877,104938],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128880,128881,128882,128885],{},"③",[50,128883,128884],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3760,128887],{"style":128625,"src":128888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128890,128891],{},"3行20列",[14,128893,128895,128896,104917],{"id":128894},"_55-lable标签","5.5 ",[50,128897,128898],{},"\u003Clable>",[19,128900,128901,128902,128904,128905,128907],{},"它不是表单标签，但常常与表单标签搭配使用，",[50,128903,128898],{},"标签用于绑定一个表单标签，当点击",[50,128906,128898],{},"标签内的文本",[19,128909,128910],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3760,128912],{"style":128625,"src":128913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3760,128915],{"style":128625,"src":128916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128918,128920],{"id":128919},"_56-实例","5.6 实例",[3760,128922],{"style":128625,"src":128923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2348,128925,128926],{},"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":135,"searchDepth":210,"depth":210,"links":128928},[128929,128930,128931,128932,128933,128935],{"id":128650,"depth":210,"text":128651},{"id":128707,"depth":210,"text":128708},{"id":128729,"depth":210,"text":128730},{"id":128799,"depth":210,"text":128800},{"id":128894,"depth":210,"text":128934},"5.5 \u003Clable>标签",{"id":128919,"depth":210,"text":128920},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128642,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128942,"title":128943,"body":128944,"description":2384,"extension":2385,"meta":129493,"navigation":842,"path":129494,"seo":129495,"stem":129496,"__hash__":129497},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128945,"toc":129468},[128946,128949,128953,128956,128959,128963,128966,128969,128972,128975,128978,128981,128984,128988,128991,128995,128998,129001,129004,129008,129011,129014,129017,129023,129026,129029,129032,129035,129038,129041,129044,129077,129081,129084,129087,129090,129094,129097,129100,129103,129106,129109,129113,129116,129119,129122,129126,129129,129133,129136,129140,129143,129148,129152,129155,129159,129162,129165,129168,129171,129198,129201,129205,129208,129211,129216,129219,129222,129226,129229,129234,129237,129240,129243,129247,129250,129253,129256,129260,129263,129266,129269,129273,129277,129280,129320,129323,129327,129334,129337,129341,129344,129390,129394,129397,129400,129403,129431,129435,129438,129465],[10,128947,128943],{"id":128948},"_6-css语法与文本样式",[14,128950,128952],{"id":128951},"_61-css语法规范","6.1 css语法规范",[19,128954,128955],{},"由两部分组成，选择器及一条或多条声明",[3760,128957],{"style":128625,"src":128958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128960,128961],{},[1674,128962,2486],{},[19,128964,128965],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128967,128968],{},"②属性与属性值以“键值对”的形式出现",[19,128970,128971],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128973,128974],{},"④属性和属性值之间用英文“;”分开",[3760,128976],{"style":128625,"src":128977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3760,128979],{"style":128625,"src":128980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3760,128982],{"style":128625,"src":128983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128985,128987],{"id":128986},"_62-css选择器","6.2 css选择器",[19,128989,128990],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1217,128992,128994],{"id":128993},"_621-标签选择器","6.2.1 标签选择器",[19,128996,128997],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128999,129000],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3760,129002],{"style":128625,"src":129003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1217,129005,129007],{"id":129006},"_622-类选择器","6.2.2 类选择器",[19,129009,129010],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129012,129013],{},"②样例",[3760,129015],{"style":128625,"src":129016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129018,129019,129020,129022],{},"③ ",[1674,129021,128857],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129024,129025],{},"可以理解为给这个标签起了个名字，来表示；",[19,129027,129028],{},"长名称或词组可以使用横线来为选择器命名；",[19,129030,129031],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129033,129034],{},"命名要有意义；",[3760,129036],{"style":128625,"src":129037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129039,129040],{},"类选择器也可以指定特殊的元素p.center{}",[19,129042,129043],{},"p.center和.center都对",[130,129045,129047],{"className":128769,"code":129046,"language":128771,"meta":135,"style":135},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[50,129048,129049,129054,129063,129073],{"__ignoreMap":135},[139,129050,129051],{"class":141,"line":142},[139,129052,129053],{"class":2512},"\u002F* 类选择器指定特殊元素 *\u002F\n",[139,129055,129056,129058,129061],{"class":141,"line":210},[139,129057,19],{"class":53538},[139,129059,129060],{"class":781},".center",[139,129062,17840],{"class":145},[139,129064,129065,129067,129069,129071],{"class":141,"line":254},[139,129066,72755],{"class":153},[139,129068,2265],{"class":145},[139,129070,53829],{"class":153},[139,129072,3591],{"class":145},[139,129074,129075],{"class":141,"line":262},[139,129076,3862],{"class":145},[1217,129078,129080],{"id":129079},"_623-多类名使用","6.2.3 多类名使用",[19,129082,129083],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3760,129085],{"style":128625,"src":129086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129088,129089],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1217,129091,129093],{"id":129092},"_624-id选择器","6.2.4 id选择器",[19,129095,129096],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129098,129099],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3760,129101],{"style":128625,"src":129102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129104,129105],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129107,129108],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1217,129110,129112],{"id":129111},"_625-通配符选择器","6.2.5 通配符选择器",[19,129114,129115],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129117,129118],{},"* {",[19,129120,129121],{},"color=\"red\"}",[1217,129123,129125],{"id":129124},"_626-总结","6.2.6 总结",[3760,129127],{"style":128625,"src":129128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129130,129132],{"id":129131},"_63-css字体属性","6.3 css字体属性",[19,129134,129135],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1217,129137,129139],{"id":129138},"_631-字体系列","6.3.1 字体系列",[19,129141,129142],{},"font-family: '宋体';",[19,129144,129145,129147],{},[1674,129146,2486],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1217,129149,129151],{"id":129150},"_632-字体大小","6.3.2 字体大小",[19,129153,129154],{},"font-size: 20px",[19,129156,129157,28733],{},[1674,129158,128857],{},[19,129160,129161],{},"①px（像素）大小是网页的最常用单位",[19,129163,129164],{},"②谷歌浏览器默认为16px",[19,129166,129167],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129169,129170],{},"④可以给body指定整个页面的大小：会自动引用",[130,129172,129174],{"className":128769,"code":129173,"language":128771,"meta":135,"style":135},"body {\n  font-size: 16px;\n}\n",[50,129175,129176,129182,129194],{"__ignoreMap":135},[139,129177,129178,129180],{"class":141,"line":142},[139,129179,54037],{"class":53538},[139,129181,17840],{"class":145},[139,129183,129184,129186,129188,129190,129192],{"class":141,"line":210},[139,129185,72855],{"class":153},[139,129187,2265],{"class":145},[139,129189,3036],{"class":153},[139,129191,53729],{"class":149},[139,129193,3591],{"class":145},[139,129195,129196],{"class":141,"line":254},[139,129197,3862],{"class":145},[19,129199,129200],{},"⑤标题标签比较特殊，需要单独指定大小",[1217,129202,129204],{"id":129203},"_633-字体粗细","6.3.3 字体粗细",[19,129206,129207],{},"font-weight: bold;",[19,129209,129210],{},"font-weight: 100；",[19,129212,129213,129215],{},[1674,129214,2486],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129217,129218],{},"font-weight= 400;",[19,129220,129221],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1217,129223,129225],{"id":129224},"_634-文字样式","6.3.4 文字样式",[19,129227,129228],{},"font-style: normal；",[19,129230,129231,28733],{},[1674,129232,129233],{},"属性值",[19,129235,129236],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129238,129239],{},"②italic：浏览器会显示斜体的字体样式",[3760,129241],{"style":128625,"src":129242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1217,129244,129246],{"id":129245},"_635-字体符合属性","6.3.5 字体符合属性",[3760,129248],{"style":128625,"src":129249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3760,129251],{"style":128625,"src":129252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129254,129255],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129257,129258,28733],{},[1674,129259,128857],{},[19,129261,129262],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129264,129265],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129267,129268],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129270,129272],{"id":129271},"_64-css-test文本属性","6.4 css test文本属性",[1217,129274,129276],{"id":129275},"_641-文本颜色","6.4.1 文本颜色",[19,129278,129279],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[130,129281,129283],{"className":128769,"code":129282,"language":128771,"meta":135,"style":135},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[50,129284,129285,129290,129296,129306,129311,129316],{"__ignoreMap":135},[139,129286,129287],{"class":141,"line":142},[139,129288,129289],{"class":2512},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[139,129291,129292,129294],{"class":141,"line":210},[139,129293,19],{"class":53538},[139,129295,17840],{"class":145},[139,129297,129298,129300,129302,129304],{"class":141,"line":254},[139,129299,73134],{"class":153},[139,129301,2265],{"class":145},[139,129303,59655],{"class":153},[139,129305,3591],{"class":145},[139,129307,129308],{"class":141,"line":262},[139,129309,129310],{"class":2512},"  \u002F* color: #ff0000; *\u002F\n",[139,129312,129313],{"class":141,"line":313},[139,129314,129315],{"class":2512},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[139,129317,129318],{"class":141,"line":462},[139,129319,3862],{"class":145},[3760,129321],{"style":128625,"src":129322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1217,129324,129326],{"id":129325},"_642-对齐文本","6.4.2 对齐文本",[19,129328,129329,129330,129333],{},"text-align属于用于设置元素内文本内容的 ",[1674,129331,129332],{},"水平对齐"," 方式",[19,129335,129336],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1217,129338,129340],{"id":129339},"_643-装饰文本","6.4.3 装饰文本",[19,129342,129343],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[130,129345,129347],{"className":128769,"code":129346,"language":128771,"meta":135,"style":135},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[50,129348,129349,129355,129365,129369,129375,129386],{"__ignoreMap":135},[139,129350,129351,129353],{"class":141,"line":142},[139,129352,2680],{"class":53538},[139,129354,17840],{"class":145},[139,129356,129357,129359,129361,129363],{"class":141,"line":210},[139,129358,72731],{"class":153},[139,129360,2265],{"class":145},[139,129362,56971],{"class":153},[139,129364,3591],{"class":145},[139,129366,129367],{"class":141,"line":254},[139,129368,3862],{"class":145},[139,129370,129371,129373],{"class":141,"line":262},[139,129372,19],{"class":53538},[139,129374,17840],{"class":145},[139,129376,129377,129379,129381,129384],{"class":141,"line":313},[139,129378,72731],{"class":153},[139,129380,2265],{"class":145},[139,129382,129383],{"class":153},"underline",[139,129385,3591],{"class":145},[139,129387,129388],{"class":141,"line":462},[139,129389,3862],{"class":145},[1217,129391,129393],{"id":129392},"_644-文本缩进","6.4.4 文本缩进",[19,129395,129396],{},"实现文本的第一行首行缩进自己指定的距离",[19,129398,129399],{},"20px往右边走；-20px往左边走",[19,129401,129402],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[130,129404,129406],{"className":128769,"code":129405,"language":128771,"meta":135,"style":135},"p {\n  text-indent: 2em;\n}\n",[50,129407,129408,129414,129427],{"__ignoreMap":135},[139,129409,129410,129412],{"class":141,"line":142},[139,129411,19],{"class":53538},[139,129413,17840],{"class":145},[139,129415,129416,129419,129421,129423,129425],{"class":141,"line":210},[139,129417,129418],{"class":153},"  text-indent",[139,129420,2265],{"class":145},[139,129422,416],{"class":153},[139,129424,25820],{"class":149},[139,129426,3591],{"class":145},[139,129428,129429],{"class":141,"line":254},[139,129430,3862],{"class":145},[1217,129432,129434],{"id":129433},"_645-行间距","6.4.5 行间距",[19,129436,129437],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[130,129439,129441],{"className":128769,"code":129440,"language":128771,"meta":135,"style":135},"p {\n  line-height: 1.6;\n}\n",[50,129442,129443,129449,129461],{"__ignoreMap":135},[139,129444,129445,129447],{"class":141,"line":142},[139,129446,19],{"class":53538},[139,129448,17840],{"class":145},[139,129450,129451,129454,129456,129459],{"class":141,"line":210},[139,129452,129453],{"class":153},"  line-height",[139,129455,2265],{"class":145},[139,129457,129458],{"class":153},"1.6",[139,129460,3591],{"class":145},[139,129462,129463],{"class":141,"line":254},[139,129464,3862],{"class":145},[2348,129466,129467],{},"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":135,"searchDepth":210,"depth":210,"links":129469},[129470,129471,129479,129486],{"id":128951,"depth":210,"text":128952},{"id":128986,"depth":210,"text":128987,"children":129472},[129473,129474,129475,129476,129477,129478],{"id":128993,"depth":254,"text":128994},{"id":129006,"depth":254,"text":129007},{"id":129079,"depth":254,"text":129080},{"id":129092,"depth":254,"text":129093},{"id":129111,"depth":254,"text":129112},{"id":129124,"depth":254,"text":129125},{"id":129131,"depth":210,"text":129132,"children":129480},[129481,129482,129483,129484,129485],{"id":129138,"depth":254,"text":129139},{"id":129150,"depth":254,"text":129151},{"id":129203,"depth":254,"text":129204},{"id":129224,"depth":254,"text":129225},{"id":129245,"depth":254,"text":129246},{"id":129271,"depth":210,"text":129272,"children":129487},[129488,129489,129490,129491,129492],{"id":129275,"depth":254,"text":129276},{"id":129325,"depth":254,"text":129326},{"id":129339,"depth":254,"text":129340},{"id":129392,"depth":254,"text":129393},{"id":129433,"depth":254,"text":129434},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128943,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129499,"title":129500,"body":129501,"description":2384,"extension":2385,"meta":130150,"navigation":842,"path":130151,"seo":130152,"stem":130153,"__hash__":130154},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129502,"toc":130131},[129503,129506,129510,129514,129574,129578,129588,129591,129594,129598,129623,129627,129630,129633,129636,129639,129642,129646,129649,129652,129694,129697,129723,129729,129732,129736,129740,129746,129749,129752,129755,129758,129761,129764,129809,129813,129816,129819,129823,129827,129856,129859,129864,129867,129870,129873,129876,129880,129884,129887,129889,129892,129896,129899,129903,129906,129909,129912,129916,129920,129926,129936,129939,129942,129945,129948,129951,130074,130082,130090,130128],[10,129504,129500],{"id":129505},"_7-css引入方式与选择器进阶",[14,129507,129509],{"id":129508},"_71-css引入方式","7.1 css引入方式",[1217,129511,129513],{"id":129512},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[130,129515,129519],{"className":129516,"code":129517,"language":129518,"meta":135,"style":135},"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",[50,129520,129521,129529,129536,129548,129561,129566],{"__ignoreMap":135},[139,129522,129523,129525,129527],{"class":141,"line":142},[139,129524,796],{"class":145},[139,129526,2348],{"class":53538},[139,129528,53545],{"class":145},[139,129530,129531,129534],{"class":141,"line":210},[139,129532,129533],{"class":53538},"  h1",[139,129535,17840],{"class":145},[139,129537,129538,129541,129543,129546],{"class":141,"line":254},[139,129539,129540],{"class":153},"    color",[139,129542,2265],{"class":145},[139,129544,129545],{"class":153},"blue",[139,129547,3591],{"class":145},[139,129549,129550,129553,129555,129557,129559],{"class":141,"line":262},[139,129551,129552],{"class":153},"    font-size",[139,129554,2265],{"class":145},[139,129556,3235],{"class":153},[139,129558,53729],{"class":149},[139,129560,3591],{"class":145},[139,129562,129563],{"class":141,"line":313},[139,129564,129565],{"class":145},"  }\n",[139,129567,129568,129570,129572],{"class":141,"line":462},[139,129569,54022],{"class":145},[139,129571,2348],{"class":53538},[139,129573,53545],{"class":145},[19,129575,129576,28733],{},[1674,129577,128857],{},[19,129579,79455,129580,129583,129584,129587],{},[50,129581,129582],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[50,129585,129586],{},"\u003Chead>","标签中",[19,129589,129590],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129592,129593],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1217,129595,129597],{"id":129596},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[130,129599,129601],{"className":129516,"code":129600,"language":129518,"meta":135,"style":135},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[50,129602,129603],{"__ignoreMap":135},[139,129604,129605,129607,129609,129611,129613,129616,129619,129621],{"class":141,"line":142},[139,129606,796],{"class":145},[139,129608,19],{"class":53538},[139,129610,64859],{"class":781},[139,129612,150],{"class":145},[139,129614,129615],{"class":160},"\"color: red; font-size: 16px;\"",[139,129617,129618],{"class":145},">这是一个段落\u003C\u002F",[139,129620,19],{"class":53538},[139,129622,53545],{"class":145},[19,129624,129625,28733],{},[1674,129626,128857],{},[19,129628,129629],{},"①style其实就是标签的属性",[19,129631,129632],{},"②在双引号中间，写法要符合css规范",[19,129634,129635],{},"③可以控制当前的标签设置样式",[19,129637,129638],{},"④书写繁琐，简单时才用",[19,129640,129641],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1217,129643,129645],{"id":129644},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129647,129648],{},"使用最多，单独建一个css文件，然后html引用",[19,129650,129651],{},"①css文件部分： style.css",[130,129653,129655],{"className":128769,"code":129654,"language":128771,"meta":135,"style":135},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[50,129656,129657,129662,129668,129678,129690],{"__ignoreMap":135},[139,129658,129659],{"class":141,"line":142},[139,129660,129661],{"class":2512},"\u002F* style.css *\u002F\n",[139,129663,129664,129666],{"class":141,"line":210},[139,129665,10],{"class":53538},[139,129667,17840],{"class":145},[139,129669,129670,129672,129674,129676],{"class":141,"line":254},[139,129671,73134],{"class":153},[139,129673,2265],{"class":145},[139,129675,129545],{"class":153},[139,129677,3591],{"class":145},[139,129679,129680,129682,129684,129686,129688],{"class":141,"line":262},[139,129681,72855],{"class":153},[139,129683,2265],{"class":145},[139,129685,3235],{"class":153},[139,129687,53729],{"class":149},[139,129689,3591],{"class":145},[139,129691,129692],{"class":141,"line":313},[139,129693,3862],{"class":145},[19,129695,129696],{},"②html部分",[130,129698,129700],{"className":129516,"code":129699,"language":129518,"meta":135,"style":135},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[50,129701,129702],{"__ignoreMap":135},[139,129703,129704,129706,129708,129710,129712,129714,129716,129718,129721],{"class":141,"line":142},[139,129705,796],{"class":145},[139,129707,71235],{"class":53538},[139,129709,71238],{"class":781},[139,129711,150],{"class":145},[139,129713,71243],{"class":160},[139,129715,63290],{"class":781},[139,129717,150],{"class":145},[139,129719,129720],{"class":160},"\"style.css\"",[139,129722,53545],{"class":145},[19,129724,129725,129728],{},[50,129726,129727],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129730,129731],{},"ctrl+0回到页面原来大小",[14,129733,129735],{"id":129734},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1217,129737,129739],{"id":129738},"_721-快速生成html","7.2.1 快速生成html",[19,129741,129742,129743],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[50,129744,129745],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129747,129748],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129750,129751],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129753,129754],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129756,129757],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129759,129760],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129762,129763],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[130,129765,129767],{"className":129516,"code":129766,"language":129518,"meta":135,"style":135},"\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",[50,129768,129769,129774,129779,129784,129789,129794,129799,129804],{"__ignoreMap":135},[139,129770,129771],{"class":141,"line":142},[139,129772,129773],{"class":2512},"\u003C!-- Emmet 语法示例 -->\n",[139,129775,129776],{"class":141,"line":210},[139,129777,129778],{"class":2512},"\u003C!-- div*3        → 生成3个div -->\n",[139,129780,129781],{"class":141,"line":254},[139,129782,129783],{"class":2512},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[139,129785,129786],{"class":141,"line":262},[139,129787,129788],{"class":2512},"\u003C!-- div+p        → 兄弟div和p -->\n",[139,129790,129791],{"class":141,"line":313},[139,129792,129793],{"class":2512},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[139,129795,129796],{"class":141,"line":462},[139,129797,129798],{"class":2512},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[139,129800,129801],{"class":141,"line":474},[139,129802,129803],{"class":2512},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[139,129805,129806],{"class":141,"line":484},[139,129807,129808],{"class":2512},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1217,129810,129812],{"id":129811},"_722-快速生成css","7.2.2 快速生成css",[19,129814,129815],{},"简写开头",[19,129817,129818],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129820,129822],{"id":129821},"_73-css复合选择器","7.3 css复合选择器",[1217,129824,129826],{"id":129825},"_731-后代选择器","7.3.1 后代选择器",[130,129828,129830],{"className":128769,"code":129829,"language":128771,"meta":135,"style":135},".parent .child {\n  color: blue;\n}\n",[50,129831,129832,129842,129852],{"__ignoreMap":135},[139,129833,129834,129837,129840],{"class":141,"line":142},[139,129835,129836],{"class":781},".parent",[139,129838,129839],{"class":781}," .child",[139,129841,17840],{"class":145},[139,129843,129844,129846,129848,129850],{"class":141,"line":210},[139,129845,73134],{"class":153},[139,129847,2265],{"class":145},[139,129849,129545],{"class":153},[139,129851,3591],{"class":145},[139,129853,129854],{"class":141,"line":254},[139,129855,3862],{"class":145},[19,129857,129858],{},"元素1 元素2 {样式声明}",[19,129860,129861],{},[1674,129862,129863],{},"注意点:",[19,129865,129866],{},"①元素1和元素2中间用空格隔开",[19,129868,129869],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129871,129872],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129874,129875],{},"④元素1和元素2可以是任意基础选择器",[1217,129877,129879],{"id":129878},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129881,129882],{},[1674,129883,129863],{},[19,129885,129886],{},"①元素1和元素2中间用大于号隔开",[19,129888,129869],{},[19,129890,129891],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1217,129893,129895],{"id":129894},"_733-并集选择器","7.3.3 并集选择器",[19,129897,129898],{},"元素1，元素2 {样式声明}",[19,129900,129901],{},[1674,129902,129863],{},[19,129904,129905],{},"①元素1和元素2中间用逗号隔开",[19,129907,129908],{},"②逗号可以理解为和的意思",[19,129910,129911],{},"③并集选择器通常用于集体声明",[1217,129913,129915],{"id":129914},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129917,129918],{},[1674,129919,129863],{},[19,129921,129922,129923,129925],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71235,129924],{},"－:visited－:hover－:active。",[19,129927,129928,129929,129932,129933,28003],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129930,129931],"hover",{}," 、 ",[129934,129935],"first-child",{},[19,129937,129938],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129940,129941],{},"link对没访问的进行设置",[19,129943,129944],{},"vistied对已访问的进行改变",[19,129946,129947],{},"hover鼠标经过就会变",[19,129949,129950],{},"active常按(点)就会变",[130,129952,129954],{"className":128769,"code":129953,"language":128771,"meta":135,"style":135},"\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",[50,129955,129956,129961,129970,129980,129990,129994,130003,130014,130018,130026,130036,130046,130050,130059,130070],{"__ignoreMap":135},[139,129957,129958],{"class":141,"line":142},[139,129959,129960],{"class":2512},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[139,129962,129963,129965,129968],{"class":141,"line":210},[139,129964,2680],{"class":53538},[139,129966,129967],{"class":781},":link",[139,129969,17840],{"class":145},[139,129971,129972,129974,129976,129978],{"class":141,"line":254},[139,129973,73134],{"class":153},[139,129975,2265],{"class":145},[139,129977,64602],{"class":153},[139,129979,3591],{"class":145},[139,129981,129982,129984,129986,129988],{"class":141,"line":262},[139,129983,72731],{"class":153},[139,129985,2265],{"class":145},[139,129987,56971],{"class":153},[139,129989,3591],{"class":145},[139,129991,129992],{"class":141,"line":313},[139,129993,3862],{"class":145},[139,129995,129996,129998,130001],{"class":141,"line":462},[139,129997,2680],{"class":53538},[139,129999,130000],{"class":781},":visited",[139,130002,17840],{"class":145},[139,130004,130005,130007,130009,130012],{"class":141,"line":474},[139,130006,73134],{"class":153},[139,130008,2265],{"class":145},[139,130010,130011],{"class":153},"purple",[139,130013,3591],{"class":145},[139,130015,130016],{"class":141,"line":484},[139,130017,3862],{"class":145},[139,130019,130020,130022,130024],{"class":141,"line":989},[139,130021,2680],{"class":53538},[139,130023,63173],{"class":781},[139,130025,17840],{"class":145},[139,130027,130028,130030,130032,130034],{"class":141,"line":994},[139,130029,73134],{"class":153},[139,130031,2265],{"class":145},[139,130033,57123],{"class":153},[139,130035,3591],{"class":145},[139,130037,130038,130040,130042,130044],{"class":141,"line":999},[139,130039,72731],{"class":153},[139,130041,2265],{"class":145},[139,130043,129383],{"class":153},[139,130045,3591],{"class":145},[139,130047,130048],{"class":141,"line":1006},[139,130049,3862],{"class":145},[139,130051,130052,130054,130057],{"class":141,"line":1027},[139,130053,2680],{"class":53538},[139,130055,130056],{"class":781},":active",[139,130058,17840],{"class":145},[139,130060,130061,130063,130065,130068],{"class":141,"line":1040},[139,130062,73134],{"class":153},[139,130064,2265],{"class":145},[139,130066,130067],{"class":153},"green",[139,130069,3591],{"class":145},[139,130071,130072],{"class":141,"line":2160},[139,130073,3862],{"class":145},[1217,130075,130077,130078,130081],{"id":130076},"_735-伪类选择器","7.3.5 ",[130079,130080],"focus",{},"伪类选择器",[19,130083,130084,130086,130087,130089],{},[130079,130085],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[50,130088,128830],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[130,130091,130093],{"className":128769,"code":130092,"language":128771,"meta":135,"style":135},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[50,130094,130095,130103,130114,130124],{"__ignoreMap":135},[139,130096,130097,130099,130101],{"class":141,"line":142},[139,130098,199],{"class":53538},[139,130100,64133],{"class":781},[139,130102,17840],{"class":145},[139,130104,130105,130108,130110,130112],{"class":141,"line":210},[139,130106,130107],{"class":153},"  border-color",[139,130109,2265],{"class":145},[139,130111,57123],{"class":153},[139,130113,3591],{"class":145},[139,130115,130116,130118,130120,130122],{"class":141,"line":254},[139,130117,73027],{"class":153},[139,130119,2265],{"class":145},[139,130121,56971],{"class":153},[139,130123,3591],{"class":145},[139,130125,130126],{"class":141,"line":262},[139,130127,3862],{"class":145},[2348,130129,130130],{},"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":135,"searchDepth":210,"depth":210,"links":130132},[130133,130138,130142],{"id":129508,"depth":210,"text":129509,"children":130134},[130135,130136,130137],{"id":129512,"depth":254,"text":129513},{"id":129596,"depth":254,"text":129597},{"id":129644,"depth":254,"text":129645},{"id":129734,"depth":210,"text":129735,"children":130139},[130140,130141],{"id":129738,"depth":254,"text":129739},{"id":129811,"depth":254,"text":129812},{"id":129821,"depth":210,"text":129822,"children":130143},[130144,130145,130146,130147,130148],{"id":129825,"depth":254,"text":129826},{"id":129878,"depth":254,"text":129879},{"id":129894,"depth":254,"text":129895},{"id":129914,"depth":254,"text":129915},{"id":130076,"depth":254,"text":130149},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129500,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130156,"title":130157,"body":130158,"description":2384,"extension":2385,"meta":132081,"navigation":842,"path":132082,"seo":132083,"stem":132084,"__hash__":132085},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130159,"toc":132055},[130160,130163,130167,130176,130180,130206,130211,130214,130217,130220,130223,130227,130230,130240,130248,130252,130287,130292,130295,130298,130301,130304,130308,130311,130320,130324,130337,130342,130345,130348,130351,130355,130358,130362,130365,130420,130423,130454,130457,130511,130515,130518,130684,130807,130810,130813,130816,130819,130823,130826,130830,130833,130836,130840,130843,130874,130901,130929,130932,130936,130962,131005,131009,131103,131106,131133,131136,131139,131142,131145,131148,131151,131154,131157,131160,131164,131221,131248,131252,131300,131304,131345,131347,131350,131353,131356,131359,131363,131455,131458,131461,131464,131468,131591,131792,131796,131800,131803,131806,131809,131813,131816,131819,131844,131847,131850,131853,131856,131859,131863,131871,131933,131936,131994,131997,132000,132003,132006,132009,132012,132015,132052],[10,130161,130157],{"id":130162},"_8-css显示模式与背景特性",[14,130164,130166],{"id":130165},"_81-css元素显示模式","8.1 css元素显示模式",[19,130168,130169,130170,130172,130173,130175],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[50,130171,128380],{},"自己占一行，比如一行可以放多个",[50,130174,128383],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1217,130177,130179],{"id":130178},"_811-块元素","8.1.1 块元素",[19,130181,130182,130183,130185,130186,2655,130189,2655,130191,2655,130193,2655,130196,2655,130199,130202,130203,130205],{},"常见的块元素有",[50,130184,128284],{},"~",[50,130187,130188],{},"\u003Ch6>",[50,130190,128310],{},[50,130192,128380],{},[50,130194,130195],{},"\u003Cul>",[50,130197,130198],{},"\u003Col>",[50,130200,130201],{},"\u003Cli>","等，其中 ",[50,130204,128380],{}," 标签是最典型的块元素",[19,130207,130208],{},[1674,130209,130210],{},"块级元素的特点：",[19,130212,130213],{},"① 比较霸道，自己独占一行。",[19,130215,130216],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130218,130219],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130221,130222],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130224,130225],{},[1674,130226,2486],{},[19,130228,130229],{},"①文字类的元素内不能使用块级元素",[19,130231,79478,130232,130234,130235,130237,130238],{},[50,130233,128310],{}," 标签主要用于存放文字，因此 ",[50,130236,128310],{}," 里面不能放块级元素，特别是不能放",[50,130239,128380],{},[19,130241,130242,130243,130185,130245,130247],{},"⑥同理， ",[50,130244,128284],{},[50,130246,130188],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1217,130249,130251],{"id":130250},"_812-行内元素","8.1.2 行内元素",[19,130253,130254,130255,2655,130257,2655,130260,2655,130263,2655,130266,2655,130269,2655,130272,2655,130275,2655,130278,2655,130281,130283,130284,130286],{},"常见的行内元素有 ",[50,130256,128542],{},[50,130258,130259],{},"\u003Cstrong>",[50,130261,130262],{},"\u003Cb>",[50,130264,130265],{},"\u003Cem>",[50,130267,130268],{},"\u003Ci>",[50,130270,130271],{},"\u003Cdel>",[50,130273,130274],{},"\u003Cs>",[50,130276,130277],{},"\u003Cins>",[50,130279,130280],{},"\u003Cu>",[50,130282,128383],{}," 等，其中 ",[50,130285,128383],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130288,130289],{},[1674,130290,130291],{},"特点：",[19,130293,130294],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130296,130297],{},"② 高、宽直接设置是无效的。",[19,130299,130300],{},"③ 默认宽度就是它本身内容的宽度。",[19,130302,130303],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130305,130306],{},[1674,130307,2486],{},[19,130309,130310],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130312,130313,130314,130316,130317,130319],{},"②特殊情况链接 ",[50,130315,128542],{}," 里面可以放块级元素，但是给 ",[50,130318,128542],{}," 转换一下块级模式最安全",[1217,130321,130323],{"id":130322},"_813-行内块元素","8.1.3 行内块元素",[19,130325,130326,130327,2655,130330,2655,130333,130336],{},"在行内元素中有几个特殊的标签 —— ",[50,130328,130329],{},"\u003Cimg \u002F>",[50,130331,130332],{},"\u003Cinput \u002F>",[50,130334,130335],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130338,130339],{},[1674,130340,130341],{},"行内块元素的特点：",[19,130343,130344],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130346,130347],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130349,130350],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1217,130352,130354],{"id":130353},"_814-总结","8.1.4 总结",[3760,130356],{"style":128625,"src":130357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1217,130359,130361],{"id":130360},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130363,130364],{},"①转换为块元素：display:block;",[130,130366,130368],{"className":128769,"code":130367,"language":128771,"meta":135,"style":135},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[50,130369,130370,130375,130381,130392,130404,130416],{"__ignoreMap":135},[139,130371,130372],{"class":141,"line":142},[139,130373,130374],{"class":2512},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[139,130376,130377,130379],{"class":141,"line":210},[139,130378,2680],{"class":53538},[139,130380,17840],{"class":145},[139,130382,130383,130386,130388,130390],{"class":141,"line":254},[139,130384,130385],{"class":153},"  display",[139,130387,2265],{"class":145},[139,130389,63102],{"class":153},[139,130391,3591],{"class":145},[139,130393,130394,130396,130398,130400,130402],{"class":141,"line":262},[139,130395,72797],{"class":153},[139,130397,2265],{"class":145},[139,130399,1017],{"class":153},[139,130401,53729],{"class":149},[139,130403,3591],{"class":145},[139,130405,130406,130408,130410,130412,130414],{"class":141,"line":313},[139,130407,73017],{"class":153},[139,130409,2265],{"class":145},[139,130411,2839],{"class":153},[139,130413,53729],{"class":149},[139,130415,3591],{"class":145},[139,130417,130418],{"class":141,"line":462},[139,130419,3862],{"class":145},[19,130421,130422],{},"②转换为行内元素：display:inline;",[130,130424,130426],{"className":128769,"code":130425,"language":128771,"meta":135,"style":135},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[50,130427,130428,130433,130439,130450],{"__ignoreMap":135},[139,130429,130430],{"class":141,"line":142},[139,130431,130432],{"class":2512},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[139,130434,130435,130437],{"class":141,"line":210},[139,130436,53848],{"class":53538},[139,130438,17840],{"class":145},[139,130440,130441,130443,130445,130448],{"class":141,"line":254},[139,130442,130385],{"class":153},[139,130444,2265],{"class":145},[139,130446,130447],{"class":153},"inline",[139,130449,3591],{"class":145},[139,130451,130452],{"class":141,"line":262},[139,130453,3862],{"class":145},[19,130455,130456],{},"③转换为行内块：display:inline-block;",[130,130458,130460],{"className":128769,"code":130459,"language":128771,"meta":135,"style":135},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[50,130461,130462,130467,130473,130483,130495,130507],{"__ignoreMap":135},[139,130463,130464],{"class":141,"line":142},[139,130465,130466],{"class":2512},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[139,130468,130469,130471],{"class":141,"line":210},[139,130470,139],{"class":53538},[139,130472,17840],{"class":145},[139,130474,130475,130477,130479,130481],{"class":141,"line":254},[139,130476,130385],{"class":153},[139,130478,2265],{"class":145},[139,130480,74612],{"class":153},[139,130482,3591],{"class":145},[139,130484,130485,130487,130489,130491,130493],{"class":141,"line":262},[139,130486,72797],{"class":153},[139,130488,2265],{"class":145},[139,130490,3047],{"class":153},[139,130492,53729],{"class":149},[139,130494,3591],{"class":145},[139,130496,130497,130499,130501,130503,130505],{"class":141,"line":313},[139,130498,73017],{"class":153},[139,130500,2265],{"class":145},[139,130502,3383],{"class":153},[139,130504,53729],{"class":149},[139,130506,3591],{"class":145},[139,130508,130509],{"class":141,"line":462},[139,130510,3862],{"class":145},[1217,130512,130514],{"id":130513},"_816-小米侧边栏","8.1.6 小米侧边栏",[3760,130516],{"style":128625,"src":130517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[130,130519,130521],{"className":129516,"code":130520,"language":129518,"meta":135,"style":135},"\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",[50,130522,130523,130528,130543,130562,130581,130600,130619,130638,130657,130676],{"__ignoreMap":135},[139,130524,130525],{"class":141,"line":142},[139,130526,130527],{"class":2512},"\u003C!-- 小米侧边栏案例 -->\n",[139,130529,130530,130532,130534,130536,130538,130541],{"class":141,"line":210},[139,130531,796],{"class":145},[139,130533,53848],{"class":53538},[139,130535,55721],{"class":781},[139,130537,150],{"class":145},[139,130539,130540],{"class":160},"\"sidebar\"",[139,130542,53545],{"class":145},[139,130544,130545,130547,130549,130551,130553,130555,130558,130560],{"class":141,"line":254},[139,130546,54380],{"class":145},[139,130548,2680],{"class":53538},[139,130550,63290],{"class":781},[139,130552,150],{"class":145},[139,130554,63295],{"class":160},[139,130556,130557],{"class":145},">手机 电话卡\u003C\u002F",[139,130559,2680],{"class":53538},[139,130561,53545],{"class":145},[139,130563,130564,130566,130568,130570,130572,130574,130577,130579],{"class":141,"line":262},[139,130565,54380],{"class":145},[139,130567,2680],{"class":53538},[139,130569,63290],{"class":781},[139,130571,150],{"class":145},[139,130573,63295],{"class":160},[139,130575,130576],{"class":145},">电视 盒子\u003C\u002F",[139,130578,2680],{"class":53538},[139,130580,53545],{"class":145},[139,130582,130583,130585,130587,130589,130591,130593,130596,130598],{"class":141,"line":313},[139,130584,54380],{"class":145},[139,130586,2680],{"class":53538},[139,130588,63290],{"class":781},[139,130590,150],{"class":145},[139,130592,63295],{"class":160},[139,130594,130595],{"class":145},">笔记本 平板\u003C\u002F",[139,130597,2680],{"class":53538},[139,130599,53545],{"class":145},[139,130601,130602,130604,130606,130608,130610,130612,130615,130617],{"class":141,"line":462},[139,130603,54380],{"class":145},[139,130605,2680],{"class":53538},[139,130607,63290],{"class":781},[139,130609,150],{"class":145},[139,130611,63295],{"class":160},[139,130613,130614],{"class":145},">出行 穿戴\u003C\u002F",[139,130616,2680],{"class":53538},[139,130618,53545],{"class":145},[139,130620,130621,130623,130625,130627,130629,130631,130634,130636],{"class":141,"line":474},[139,130622,54380],{"class":145},[139,130624,2680],{"class":53538},[139,130626,63290],{"class":781},[139,130628,150],{"class":145},[139,130630,63295],{"class":160},[139,130632,130633],{"class":145},">智能 路由器\u003C\u002F",[139,130635,2680],{"class":53538},[139,130637,53545],{"class":145},[139,130639,130640,130642,130644,130646,130648,130650,130653,130655],{"class":141,"line":484},[139,130641,54380],{"class":145},[139,130643,2680],{"class":53538},[139,130645,63290],{"class":781},[139,130647,150],{"class":145},[139,130649,63295],{"class":160},[139,130651,130652],{"class":145},">健康 儿童\u003C\u002F",[139,130654,2680],{"class":53538},[139,130656,53545],{"class":145},[139,130658,130659,130661,130663,130665,130667,130669,130672,130674],{"class":141,"line":989},[139,130660,54380],{"class":145},[139,130662,2680],{"class":53538},[139,130664,63290],{"class":781},[139,130666,150],{"class":145},[139,130668,63295],{"class":160},[139,130670,130671],{"class":145},">耳机 音响\u003C\u002F",[139,130673,2680],{"class":53538},[139,130675,53545],{"class":145},[139,130677,130678,130680,130682],{"class":141,"line":994},[139,130679,54022],{"class":145},[139,130681,53848],{"class":53538},[139,130683,53545],{"class":145},[130,130685,130687],{"className":128769,"code":130686,"language":128771,"meta":135,"style":135},".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",[50,130688,130689,130698,130708,130721,130733,130745,130757,130767,130778,130782,130792,130803],{"__ignoreMap":135},[139,130690,130691,130694,130696],{"class":141,"line":142},[139,130692,130693],{"class":781},".sidebar",[139,130695,3696],{"class":53538},[139,130697,17840],{"class":145},[139,130699,130700,130702,130704,130706],{"class":141,"line":210},[139,130701,130385],{"class":153},[139,130703,2265],{"class":145},[139,130705,63102],{"class":153},[139,130707,3591],{"class":145},[139,130709,130710,130712,130714,130717,130719],{"class":141,"line":254},[139,130711,72797],{"class":153},[139,130713,2265],{"class":145},[139,130715,130716],{"class":153},"234",[139,130718,53729],{"class":149},[139,130720,3591],{"class":145},[139,130722,130723,130725,130727,130729,130731],{"class":141,"line":262},[139,130724,73017],{"class":153},[139,130726,2265],{"class":145},[139,130728,2889],{"class":153},[139,130730,53729],{"class":149},[139,130732,3591],{"class":145},[139,130734,130735,130737,130739,130741,130743],{"class":141,"line":313},[139,130736,129453],{"class":153},[139,130738,2265],{"class":145},[139,130740,2889],{"class":153},[139,130742,53729],{"class":149},[139,130744,3591],{"class":145},[139,130746,130747,130749,130751,130753,130755],{"class":141,"line":462},[139,130748,73052],{"class":153},[139,130750,2265],{"class":145},[139,130752,3383],{"class":153},[139,130754,53729],{"class":149},[139,130756,3591],{"class":145},[139,130758,130759,130761,130763,130765],{"class":141,"line":474},[139,130760,73134],{"class":153},[139,130762,2265],{"class":145},[139,130764,63075],{"class":153},[139,130766,3591],{"class":145},[139,130768,130769,130771,130773,130776],{"class":141,"line":484},[139,130770,73107],{"class":153},[139,130772,2265],{"class":145},[139,130774,130775],{"class":153},"#55585a",[139,130777,3591],{"class":145},[139,130779,130780],{"class":141,"line":989},[139,130781,3862],{"class":145},[139,130783,130784,130786,130788,130790],{"class":141,"line":994},[139,130785,130693],{"class":781},[139,130787,3696],{"class":53538},[139,130789,63173],{"class":781},[139,130791,17840],{"class":145},[139,130793,130794,130796,130798,130801],{"class":141,"line":999},[139,130795,73107],{"class":153},[139,130797,2265],{"class":145},[139,130799,130800],{"class":153},"#ff6700",[139,130802,3591],{"class":145},[139,130804,130805],{"class":141,"line":1006},[139,130806,3862],{"class":145},[3760,130808],{"style":128625,"src":130809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130811,130812],{},"行高=盒子高度：实现文字的垂直居中",[19,130814,130815],{},"原理讲解：",[3760,130817],{"style":128625,"src":130818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130820,130822],{"id":130821},"_82-css背景","8.2 css背景",[19,130824,130825],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1217,130827,130829],{"id":130828},"_821-背景颜色","8.2.1 背景颜色",[19,130831,130832],{},"background-color:颜色值;",[19,130834,130835],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1217,130837,130839],{"id":130838},"_822-背景图片","8.2.2 背景图片",[19,130841,130842],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[130,130844,130846],{"className":128769,"code":130845,"language":128771,"meta":135,"style":135},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[50,130847,130848,130854,130870],{"__ignoreMap":135},[139,130849,130850,130852],{"class":141,"line":142},[139,130851,53848],{"class":53538},[139,130853,17840],{"class":145},[139,130855,130856,130859,130861,130863,130865,130868],{"class":141,"line":210},[139,130857,130858],{"class":153},"  background-image",[139,130860,2265],{"class":145},[139,130862,63959],{"class":153},[139,130864,157],{"class":145},[139,130866,130867],{"class":2111},"images\u002Fbg.png",[139,130869,5002],{"class":145},[139,130871,130872],{"class":141,"line":254},[139,130873,3862],{"class":145},[26,130875,130876,130885],{},[29,130877,130878],{},[32,130879,130880,130883],{},[35,130881,130882],{"align":26003},"参数值",[35,130884,104920],{"align":26003},[42,130886,130887,130894],{},[32,130888,130889,130891],{},[47,130890,56971],{"align":26003},[47,130892,130893],{"align":26003},"无背景图（默认的）",[32,130895,130896,130898],{},[47,130897,63959],{"align":26003},[47,130899,130900],{"align":26003},"使用绝对或相对地址指定背景图像",[130,130902,130903],{"className":128769,"code":130845,"language":128771,"meta":135,"style":135},[50,130904,130905,130911,130925],{"__ignoreMap":135},[139,130906,130907,130909],{"class":141,"line":142},[139,130908,53848],{"class":53538},[139,130910,17840],{"class":145},[139,130912,130913,130915,130917,130919,130921,130923],{"class":141,"line":210},[139,130914,130858],{"class":153},[139,130916,2265],{"class":145},[139,130918,63959],{"class":153},[139,130920,157],{"class":145},[139,130922,130867],{"class":2111},[139,130924,5002],{"class":145},[139,130926,130927],{"class":141,"line":254},[139,130928,3862],{"class":145},[19,130930,130931],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1217,130933,130935],{"id":130934},"_823-背景平铺","8.2.3 背景平铺",[130,130937,130939],{"className":128769,"code":130938,"language":128771,"meta":135,"style":135},"div {\n  background-repeat: no-repeat;\n}\n",[50,130940,130941,130947,130958],{"__ignoreMap":135},[139,130942,130943,130945],{"class":141,"line":142},[139,130944,53848],{"class":53538},[139,130946,17840],{"class":145},[139,130948,130949,130952,130954,130956],{"class":141,"line":210},[139,130950,130951],{"class":153},"  background-repeat",[139,130953,2265],{"class":145},[139,130955,63969],{"class":153},[139,130957,3591],{"class":145},[139,130959,130960],{"class":141,"line":254},[139,130961,3862],{"class":145},[26,130963,130964,130972],{},[29,130965,130966],{},[32,130967,130968,130970],{},[35,130969,130882],{"align":26003},[35,130971,104920],{"align":26003},[42,130973,130974,130982,130989,130997],{},[32,130975,130976,130979],{},[47,130977,130978],{"align":26003},"repeat",[47,130980,130981],{"align":26003},"背景图像在纵向和横向上平铺（默认的）",[32,130983,130984,130986],{},[47,130985,63969],{"align":26003},[47,130987,130988],{"align":26003},"背景图像不平铺",[32,130990,130991,130994],{},[47,130992,130993],{"align":26003},"repeat-x",[47,130995,130996],{"align":26003},"背景图像在横向上平铺",[32,130998,130999,131002],{},[47,131000,131001],{"align":26003},"repeat-y",[47,131003,131004],{"align":26003},"背景图像在纵向平铺",[1217,131006,131008],{"id":131007},"_824-背景图片位置","8.2.4 背景图片位置",[130,131010,131012],{"className":128769,"code":131011,"language":128771,"meta":135,"style":135},"\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",[50,131013,131014,131019,131025,131039,131043,131048,131054,131070,131074,131079,131085,131099],{"__ignoreMap":135},[139,131015,131016],{"class":141,"line":142},[139,131017,131018],{"class":2512},"\u002F* 方位名词 *\u002F\n",[139,131020,131021,131023],{"class":141,"line":210},[139,131022,53848],{"class":53538},[139,131024,17840],{"class":145},[139,131026,131027,131030,131032,131034,131037],{"class":141,"line":254},[139,131028,131029],{"class":153},"  background-position",[139,131031,2265],{"class":145},[139,131033,53829],{"class":153},[139,131035,131036],{"class":153}," top",[139,131038,3591],{"class":145},[139,131040,131041],{"class":141,"line":262},[139,131042,3862],{"class":145},[139,131044,131045],{"class":141,"line":313},[139,131046,131047],{"class":2512},"\u002F* 精确单位 *\u002F\n",[139,131049,131050,131052],{"class":141,"line":462},[139,131051,53848],{"class":53538},[139,131053,17840],{"class":145},[139,131055,131056,131058,131060,131062,131064,131066,131068],{"class":141,"line":474},[139,131057,131029],{"class":153},[139,131059,2265],{"class":145},[139,131061,3135],{"class":153},[139,131063,53729],{"class":149},[139,131065,59738],{"class":153},[139,131067,53729],{"class":149},[139,131069,3591],{"class":145},[139,131071,131072],{"class":141,"line":484},[139,131073,3862],{"class":145},[139,131075,131076],{"class":141,"line":989},[139,131077,131078],{"class":2512},"\u002F* 混合单位 *\u002F\n",[139,131080,131081,131083],{"class":141,"line":994},[139,131082,53848],{"class":53538},[139,131084,17840],{"class":145},[139,131086,131087,131089,131091,131093,131095,131097],{"class":141,"line":999},[139,131088,131029],{"class":153},[139,131090,2265],{"class":145},[139,131092,3135],{"class":153},[139,131094,53729],{"class":149},[139,131096,19411],{"class":153},[139,131098,3591],{"class":145},[139,131100,131101],{"class":141,"line":1006},[139,131102,3862],{"class":145},[19,131104,131105],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[26,131107,131108,131116],{},[29,131109,131110],{},[32,131111,131112,131114],{},[35,131113,130882],{"align":26003},[35,131115,40],{"align":26003},[42,131117,131118,131125],{},[32,131119,131120,131122],{},[47,131121,54204],{"align":26003},[47,131123,131124],{"align":26003},"百分数|由浮点数和单位标识符组成的长度值",[32,131126,131127,131130],{},[47,131128,131129],{"align":26003},"position",[47,131131,131132],{"align":26003},"top|center|bottom|left|center|right 方位名词",[19,131134,131135],{},"其他说明：",[19,131137,131138],{},"①参数是方位名词",[19,131140,131141],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131143,131144],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131146,131147],{},"②参数是精确单位",[19,131149,131150],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131152,131153],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131155,131156],{},"③参数是混合单位",[19,131158,131159],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1217,131161,131163],{"id":131162},"_825-背景图片固定","8.2.5 背景图片固定",[130,131165,131167],{"className":128769,"code":131166,"language":128771,"meta":135,"style":135},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[50,131168,131169,131174,131180,131192,131196,131201,131207,131217],{"__ignoreMap":135},[139,131170,131171],{"class":141,"line":142},[139,131172,131173],{"class":2512},"\u002F* 背景滚动（默认） *\u002F\n",[139,131175,131176,131178],{"class":141,"line":210},[139,131177,53848],{"class":53538},[139,131179,17840],{"class":145},[139,131181,131182,131185,131187,131190],{"class":141,"line":254},[139,131183,131184],{"class":153},"  background-attachment",[139,131186,2265],{"class":145},[139,131188,131189],{"class":153},"scroll",[139,131191,3591],{"class":145},[139,131193,131194],{"class":141,"line":262},[139,131195,3862],{"class":145},[139,131197,131198],{"class":141,"line":313},[139,131199,131200],{"class":2512},"\u002F* 背景固定 *\u002F\n",[139,131202,131203,131205],{"class":141,"line":462},[139,131204,53848],{"class":53538},[139,131206,17840],{"class":145},[139,131208,131209,131211,131213,131215],{"class":141,"line":474},[139,131210,131184],{"class":153},[139,131212,2265],{"class":145},[139,131214,88461],{"class":153},[139,131216,3591],{"class":145},[139,131218,131219],{"class":141,"line":484},[139,131220,3862],{"class":145},[26,131222,131223,131232],{},[29,131224,131225],{},[32,131226,131227,131230],{},[35,131228,131229],{"align":26003},"参数",[35,131231,104920],{"align":26003},[42,131233,131234,131241],{},[32,131235,131236,131238],{},[47,131237,131189],{"align":26003},[47,131239,131240],{"align":26003},"背景图像是随对象内容滚动",[32,131242,131243,131245],{},[47,131244,88461],{"align":26003},[47,131246,131247],{"align":26003},"背景图像固定",[1217,131249,131251],{"id":131250},"_826-背景样式合写","8.2.6 背景样式合写",[130,131253,131255],{"className":128769,"code":131254,"language":128771,"meta":135,"style":135},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[50,131256,131257,131262,131268,131296],{"__ignoreMap":135},[139,131258,131259],{"class":141,"line":142},[139,131260,131261],{"class":2512},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[139,131263,131264,131266],{"class":141,"line":210},[139,131265,53848],{"class":53538},[139,131267,17840],{"class":145},[139,131269,131270,131272,131274,131276,131279,131281,131283,131285,131287,131290,131292,131294],{"class":141,"line":254},[139,131271,72840],{"class":153},[139,131273,2265],{"class":145},[139,131275,63075],{"class":153},[139,131277,131278],{"class":153}," url",[139,131280,157],{"class":145},[139,131282,130867],{"class":2111},[139,131284,2120],{"class":145},[139,131286,63969],{"class":153},[139,131288,131289],{"class":153}," fixed",[139,131291,19411],{"class":153},[139,131293,131036],{"class":153},[139,131295,3591],{"class":145},[139,131297,131298],{"class":141,"line":262},[139,131299,3862],{"class":145},[1217,131301,131303],{"id":131302},"_827-背景色半透明","8.2.7 背景色半透明",[130,131305,131307],{"className":128769,"code":131306,"language":128771,"meta":135,"style":135},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[50,131308,131309,131315,131341],{"__ignoreMap":135},[139,131310,131311,131313],{"class":141,"line":142},[139,131312,53848],{"class":53538},[139,131314,17840],{"class":145},[139,131316,131317,131319,131321,131323,131325,131327,131329,131331,131333,131335,131337,131339],{"class":141,"line":210},[139,131318,72840],{"class":153},[139,131320,2265],{"class":145},[139,131322,57344],{"class":153},[139,131324,157],{"class":145},[139,131326,2634],{"class":153},[139,131328,413],{"class":145},[139,131330,2634],{"class":153},[139,131332,413],{"class":145},[139,131334,2634],{"class":153},[139,131336,413],{"class":145},[139,131338,102748],{"class":153},[139,131340,5002],{"class":145},[139,131342,131343],{"class":141,"line":254},[139,131344,3862],{"class":145},[19,131346,101623],{},[19,131348,131349],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131351,131352],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131354,131355],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131357,131358],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1217,131360,131362],{"id":131361},"_828-总结","8.2.8 总结",[26,131364,131365,131376],{},[29,131366,131367],{},[32,131368,131369,131372,131374],{},[35,131370,131371],{"align":26003},"属性",[35,131373,104920],{"align":26003},[35,131375,2597],{"align":26003},[42,131377,131378,131389,131400,131411,131422,131433,131444],{},[32,131379,131380,131383,131386],{},[47,131381,131382],{"align":26003},"background-color",[47,131384,131385],{"align":26003},"背景颜色",[47,131387,131388],{"align":26003},"预定义的颜色值\u002F十六进制\u002FRGB代码",[32,131390,131391,131394,131397],{},[47,131392,131393],{"align":26003},"background-image",[47,131395,131396],{"align":26003},"背景图片",[47,131398,131399],{"align":26003},"url(图片路径)",[32,131401,131402,131405,131408],{},[47,131403,131404],{"align":26003},"background-repeat",[47,131406,131407],{"align":26003},"是否平铺",[47,131409,131410],{"align":26003},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[32,131412,131413,131416,131419],{},[47,131414,131415],{"align":26003},"background-position",[47,131417,131418],{"align":26003},"背景位置",[47,131420,131421],{"align":26003},"length\u002Fposition 分别是x和y坐标",[32,131423,131424,131427,131430],{},[47,131425,131426],{"align":26003},"background-attachment",[47,131428,131429],{"align":26003},"背景附着",[47,131431,131432],{"align":26003},"scroll(背景滚动) \u002Ffixed (背景固定)",[32,131434,131435,131438,131441],{},[47,131436,131437],{"align":26003},"背景简写",[47,131439,131440],{"align":26003},"书写更简单",[47,131442,131443],{"align":26003},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[32,131445,131446,131449,131452],{},[47,131447,131448],{"align":26003},"背景半透明",[47,131450,131451],{"align":26003},"背景颜色半透明",[47,131453,131454],{"align":26003},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131456,131457],{},"颜色渐变：",[3760,131459],{"style":128625,"src":131460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3760,131462],{"style":128625,"src":131463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1217,131465,131467],{"id":131466},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[130,131469,131471],{"className":129516,"code":131470,"language":129518,"meta":135,"style":135},"\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",[50,131472,131473,131488,131507,131526,131545,131564,131583],{"__ignoreMap":135},[139,131474,131475,131477,131479,131481,131483,131486],{"class":141,"line":142},[139,131476,796],{"class":145},[139,131478,53848],{"class":53538},[139,131480,55721],{"class":781},[139,131482,150],{"class":145},[139,131484,131485],{"class":160},"\"nav\"",[139,131487,53545],{"class":145},[139,131489,131490,131492,131494,131496,131498,131500,131503,131505],{"class":141,"line":210},[139,131491,54380],{"class":145},[139,131493,2680],{"class":53538},[139,131495,63290],{"class":781},[139,131497,150],{"class":145},[139,131499,63295],{"class":160},[139,131501,131502],{"class":145},">五彩导航1\u003C\u002F",[139,131504,2680],{"class":53538},[139,131506,53545],{"class":145},[139,131508,131509,131511,131513,131515,131517,131519,131522,131524],{"class":141,"line":254},[139,131510,54380],{"class":145},[139,131512,2680],{"class":53538},[139,131514,63290],{"class":781},[139,131516,150],{"class":145},[139,131518,63295],{"class":160},[139,131520,131521],{"class":145},">五彩导航2\u003C\u002F",[139,131523,2680],{"class":53538},[139,131525,53545],{"class":145},[139,131527,131528,131530,131532,131534,131536,131538,131541,131543],{"class":141,"line":262},[139,131529,54380],{"class":145},[139,131531,2680],{"class":53538},[139,131533,63290],{"class":781},[139,131535,150],{"class":145},[139,131537,63295],{"class":160},[139,131539,131540],{"class":145},">五彩导航3\u003C\u002F",[139,131542,2680],{"class":53538},[139,131544,53545],{"class":145},[139,131546,131547,131549,131551,131553,131555,131557,131560,131562],{"class":141,"line":313},[139,131548,54380],{"class":145},[139,131550,2680],{"class":53538},[139,131552,63290],{"class":781},[139,131554,150],{"class":145},[139,131556,63295],{"class":160},[139,131558,131559],{"class":145},">五彩导航4\u003C\u002F",[139,131561,2680],{"class":53538},[139,131563,53545],{"class":145},[139,131565,131566,131568,131570,131572,131574,131576,131579,131581],{"class":141,"line":462},[139,131567,54380],{"class":145},[139,131569,2680],{"class":53538},[139,131571,63290],{"class":781},[139,131573,150],{"class":145},[139,131575,63295],{"class":160},[139,131577,131578],{"class":145},">五彩导航5\u003C\u002F",[139,131580,2680],{"class":53538},[139,131582,53545],{"class":145},[139,131584,131585,131587,131589],{"class":141,"line":474},[139,131586,54022],{"class":145},[139,131588,53848],{"class":53538},[139,131590,53545],{"class":145},[130,131592,131594],{"className":128769,"code":131593,"language":128771,"meta":135,"style":135},".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",[50,131595,131596,131605,131615,131627,131639,131649,131661,131671,131675,131700,131723,131746,131769],{"__ignoreMap":135},[139,131597,131598,131601,131603],{"class":141,"line":142},[139,131599,131600],{"class":781},".nav",[139,131602,3696],{"class":53538},[139,131604,17840],{"class":145},[139,131606,131607,131609,131611,131613],{"class":141,"line":210},[139,131608,130385],{"class":153},[139,131610,2265],{"class":145},[139,131612,74612],{"class":153},[139,131614,3591],{"class":145},[139,131616,131617,131619,131621,131623,131625],{"class":141,"line":254},[139,131618,72797],{"class":153},[139,131620,2265],{"class":145},[139,131622,3252],{"class":153},[139,131624,53729],{"class":149},[139,131626,3591],{"class":145},[139,131628,131629,131631,131633,131635,131637],{"class":141,"line":262},[139,131630,73017],{"class":153},[139,131632,2265],{"class":145},[139,131634,3291],{"class":153},[139,131636,53729],{"class":149},[139,131638,3591],{"class":145},[139,131640,131641,131643,131645,131647],{"class":141,"line":313},[139,131642,72755],{"class":153},[139,131644,2265],{"class":145},[139,131646,53829],{"class":153},[139,131648,3591],{"class":145},[139,131650,131651,131653,131655,131657,131659],{"class":141,"line":462},[139,131652,129453],{"class":153},[139,131654,2265],{"class":145},[139,131656,3291],{"class":153},[139,131658,53729],{"class":149},[139,131660,3591],{"class":145},[139,131662,131663,131665,131667,131669],{"class":141,"line":474},[139,131664,73134],{"class":153},[139,131666,2265],{"class":145},[139,131668,63075],{"class":153},[139,131670,3591],{"class":145},[139,131672,131673],{"class":141,"line":484},[139,131674,3862],{"class":145},[139,131676,131677,131679,131681,131684,131686,131688,131691,131693,131695,131697],{"class":141,"line":989},[139,131678,131600],{"class":781},[139,131680,3696],{"class":53538},[139,131682,131683],{"class":781},":nth-child",[139,131685,157],{"class":145},[139,131687,410],{"class":153},[139,131689,131690],{"class":145},") { ",[139,131692,131382],{"class":153},[139,131694,2265],{"class":145},[139,131696,130800],{"class":153},[139,131698,131699],{"class":145},"; }\n",[139,131701,131702,131704,131706,131708,131710,131712,131714,131716,131718,131721],{"class":141,"line":994},[139,131703,131600],{"class":781},[139,131705,3696],{"class":53538},[139,131707,131683],{"class":781},[139,131709,157],{"class":145},[139,131711,416],{"class":153},[139,131713,131690],{"class":145},[139,131715,131382],{"class":153},[139,131717,2265],{"class":145},[139,131719,131720],{"class":153},"#ff0000",[139,131722,131699],{"class":145},[139,131724,131725,131727,131729,131731,131733,131735,131737,131739,131741,131744],{"class":141,"line":999},[139,131726,131600],{"class":781},[139,131728,3696],{"class":53538},[139,131730,131683],{"class":781},[139,131732,157],{"class":145},[139,131734,421],{"class":153},[139,131736,131690],{"class":145},[139,131738,131382],{"class":153},[139,131740,2265],{"class":145},[139,131742,131743],{"class":153},"#00a4ff",[139,131745,131699],{"class":145},[139,131747,131748,131750,131752,131754,131756,131758,131760,131762,131764,131767],{"class":141,"line":1006},[139,131749,131600],{"class":781},[139,131751,3696],{"class":53538},[139,131753,131683],{"class":781},[139,131755,157],{"class":145},[139,131757,1476],{"class":153},[139,131759,131690],{"class":145},[139,131761,131382],{"class":153},[139,131763,2265],{"class":145},[139,131765,131766],{"class":153},"#ff00ff",[139,131768,131699],{"class":145},[139,131770,131771,131773,131775,131777,131779,131781,131783,131785,131787,131790],{"class":141,"line":1027},[139,131772,131600],{"class":781},[139,131774,3696],{"class":53538},[139,131776,131683],{"class":781},[139,131778,157],{"class":145},[139,131780,1481],{"class":153},[139,131782,131690],{"class":145},[139,131784,131382],{"class":153},[139,131786,2265],{"class":145},[139,131788,131789],{"class":153},"#00ff00",[139,131791,131699],{"class":145},[14,131793,131795],{"id":131794},"_83-css三大特性","8.3 css三大特性",[1217,131797,131799],{"id":131798},"_831-层叠性","8.3.1 层叠性",[19,131801,131802],{},"为了解决样式冲突问题",[19,131804,131805],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131807,131808],{},"   ②样式不冲突，不会层叠",[1217,131810,131812],{"id":131811},"_832-继承性","8.3.2 继承性",[19,131814,131815],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131817,131818],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[130,131820,131822],{"className":128769,"code":131821,"language":128771,"meta":135,"style":135},"p {\n  color: #333;\n}\n",[50,131823,131824,131830,131840],{"__ignoreMap":135},[139,131825,131826,131828],{"class":141,"line":142},[139,131827,19],{"class":53538},[139,131829,17840],{"class":145},[139,131831,131832,131834,131836,131838],{"class":141,"line":210},[139,131833,73134],{"class":153},[139,131835,2265],{"class":145},[139,131837,64602],{"class":153},[139,131839,3591],{"class":145},[139,131841,131842],{"class":141,"line":254},[139,131843,3862],{"class":145},[3760,131845],{"style":128625,"src":131846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131848,131849],{},"解释：①行高可以跟单位也可以不跟单位",[19,131851,131852],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131854,131855],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131857,131858],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1217,131860,131862],{"id":131861},"_833-优先级","8.3.3 优先级",[1760,131864,131865,131868],{},[1763,131866,131867],{},"选择器相同，则执行层叠性",[1763,131869,131870],{},"选择器不同，则根据选择器权重执行",[26,131872,131873,131883],{},[29,131874,131875],{},[32,131876,131877,131880],{},[35,131878,131879],{"align":26003},"选择器",[35,131881,131882],{"align":26003},"选择器权重",[42,131884,131885,131893,131901,131909,131917,131925],{},[32,131886,131887,131890],{},[47,131888,131889],{"align":26003},"继承 或者*",[47,131891,131892],{"align":26003},"0，0，0，0",[32,131894,131895,131898],{},[47,131896,131897],{"align":26003},"标签选择器",[47,131899,131900],{"align":26003},"0，0，0，1",[32,131902,131903,131906],{},[47,131904,131905],{"align":26003},"类选择器，伪类选择器",[47,131907,131908],{"align":26003},"0，0，1，0",[32,131910,131911,131914],{},[47,131912,131913],{"align":26003},"ID选择器",[47,131915,131916],{"align":26003},"0，1，0，0",[32,131918,131919,131922],{},[47,131920,131921],{"align":26003},"行内样式",[47,131923,131924],{"align":26003},"1，0，0，0",[32,131926,131927,131930],{},[47,131928,131929],{"align":26003},"！important",[47,131931,131932],{"align":26003},"无穷大",[19,131934,131935],{},"! important用法：",[130,131937,131939],{"className":128769,"code":131938,"language":128771,"meta":135,"style":135},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[50,131940,131941,131946,131952,131965,131969,131974,131980,131990],{"__ignoreMap":135},[139,131942,131943],{"class":141,"line":142},[139,131944,131945],{"class":2512},"\u002F* !important 拥有最高优先级 *\u002F\n",[139,131947,131948,131950],{"class":141,"line":210},[139,131949,53848],{"class":53538},[139,131951,17840],{"class":145},[139,131953,131954,131956,131958,131960,131963],{"class":141,"line":254},[139,131955,73134],{"class":153},[139,131957,2265],{"class":145},[139,131959,53882],{"class":153},[139,131961,131962],{"class":149}," !important",[139,131964,3591],{"class":145},[139,131966,131967],{"class":141,"line":262},[139,131968,3862],{"class":145},[139,131970,131971],{"class":141,"line":313},[139,131972,131973],{"class":2512},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[139,131975,131976,131978],{"class":141,"line":462},[139,131977,53848],{"class":53538},[139,131979,17840],{"class":145},[139,131981,131982,131984,131986,131988],{"class":141,"line":474},[139,131983,73134],{"class":153},[139,131985,2265],{"class":145},[139,131987,59655],{"class":153},[139,131989,3591],{"class":145},[139,131991,131992],{"class":141,"line":484},[139,131993,3862],{"class":145},[19,131995,131996],{},"优先级注意点：",[19,131998,131999],{},"①权重是有4组数字组成,但是不会有进位",[19,132001,132002],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132004,132005],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132007,132008],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132010,132011],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132013,132014],{},"⑥复合选择器",[26,132016,132017,132027],{},[29,132018,132019],{},[32,132020,132021,132024],{},[35,132022,132023],{"align":26003},"div ul li",[35,132025,132026],{"align":26003},"0,0,0,3",[42,132028,132029,132037,132045],{},[32,132030,132031,132034],{},[47,132032,132033],{"align":26003},".nav ul li",[47,132035,132036],{"align":26003},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[32,132038,132039,132042],{},[47,132040,132041],{"align":26003},"a:hover",[47,132043,132044],{"align":26003},"0,0,1,1",[32,132046,132047,132050],{},[47,132048,132049],{"align":26003},".nav a",[47,132051,132044],{"align":26003},[2348,132053,132054],{},"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":135,"searchDepth":210,"depth":210,"links":132056},[132057,132065,132076],{"id":130165,"depth":210,"text":130166,"children":132058},[132059,132060,132061,132062,132063,132064],{"id":130178,"depth":254,"text":130179},{"id":130250,"depth":254,"text":130251},{"id":130322,"depth":254,"text":130323},{"id":130353,"depth":254,"text":130354},{"id":130360,"depth":254,"text":130361},{"id":130513,"depth":254,"text":130514},{"id":130821,"depth":210,"text":130822,"children":132066},[132067,132068,132069,132070,132071,132072,132073,132074,132075],{"id":130828,"depth":254,"text":130829},{"id":130838,"depth":254,"text":130839},{"id":130934,"depth":254,"text":130935},{"id":131007,"depth":254,"text":131008},{"id":131162,"depth":254,"text":131163},{"id":131250,"depth":254,"text":131251},{"id":131302,"depth":254,"text":131303},{"id":131361,"depth":254,"text":131362},{"id":131466,"depth":254,"text":131467},{"id":131794,"depth":210,"text":131795,"children":132077},[132078,132079,132080],{"id":131798,"depth":254,"text":131799},{"id":131811,"depth":254,"text":131812},{"id":131861,"depth":254,"text":131862},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130157,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132087,"title":132088,"body":132089,"description":2384,"extension":2385,"meta":133679,"navigation":842,"path":133680,"seo":133681,"stem":133682,"__hash__":133683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132090,"toc":133658},[132091,132094,132098,132101,132104,132107,132110,132113,132116,132119,132123,132131,132168,132204,132207,132221,132226,132260,132263,132356,132361,132364,132394,132397,132402,132410,132414,132421,132467,132511,132516,132519,132522,132525,132528,132531,132534,132536,132539,132543,132548,132592,132597,132600,132603,132640,132645,132648,132651,132654,132657,132689,132692,132695,132698,132730,132733,132736,132739,132743,132746,132778,132781,132785,132805,132808,132816,132819,132823,132828,132831,132863,132868,132871,132909,132913,132918,132921,132924,132955,132958,132975,132980,133032,133092,133097,133151,133189,133193,133197,133200,133204,133212,133215,133217,133228,133233,133281,133315,133318,133321,133324,133327,133371,133374,133377,133380,133383,133386,133389,133433,133436,133439,133442,133445,133448,133451,133457,133460,133504,133507,133510,133513,133516,133519,133563,133566,133568,133571,133575,133579,133617,133621,133624,133627,133631,133639,133643,133646,133649,133652,133655],[10,132092,132088],{"id":132093},"_9-css盒模型浮动与切图",[14,132095,132097],{"id":132096},"_91-盒子模型","9.1 盒子模型",[19,132099,132100],{},"利用盒子来设计网页",[19,132102,132103],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132105,132106],{},"网页布局设置：",[19,132108,132109],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132111,132112],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132114,132115],{},"③往盒子里装内容",[3760,132117],{"style":128625,"src":132118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1217,132120,132122],{"id":132121},"_911-边框border","9.1.1 边框（border）",[1760,132124,132125,132128],{},[1763,132126,132127],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1763,132129,132130],{},"语法",[130,132132,132134],{"className":128769,"code":132133,"language":128771,"meta":135,"style":135},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[50,132135,132136,132141,132147,132164],{"__ignoreMap":135},[139,132137,132138],{"class":141,"line":142},[139,132139,132140],{"class":2512},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[139,132142,132143,132145],{"class":141,"line":210},[139,132144,53848],{"class":53538},[139,132146,17840],{"class":145},[139,132148,132149,132151,132153,132155,132157,132159,132162],{"class":141,"line":254},[139,132150,73125],{"class":153},[139,132152,2265],{"class":145},[139,132154,410],{"class":153},[139,132156,53729],{"class":149},[139,132158,53758],{"class":153},[139,132160,132161],{"class":153}," #ccc",[139,132163,3591],{"class":145},[139,132165,132166],{"class":141,"line":262},[139,132167,3862],{"class":145},[26,132169,132170,132178],{},[29,132171,132172],{},[32,132173,132174,132176],{},[35,132175,131371],{"align":26003},[35,132177,104920],{"align":26003},[42,132179,132180,132188,132196],{},[32,132181,132182,132185],{},[47,132183,132184],{"align":26003},"border-width",[47,132186,132187],{"align":26003},"定义边框粗细，单位是px",[32,132189,132190,132193],{},[47,132191,132192],{"align":26003},"border-style",[47,132194,132195],{"align":26003},"边框的样式",[32,132197,132198,132201],{},[47,132199,132200],{"align":26003},"border-color",[47,132202,132203],{"align":26003},"边框的颜色",[19,132205,132206],{},"边框样式 border-style 可以设置如下值：",[3437,132208,132209,132212,132215,132218],{},[1763,132210,132211],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1763,132213,132214],{},"solid：边框为单实线(最为常用的)",[1763,132216,132217],{},"dashed：边框为虚线",[1763,132219,132220],{},"dotted：边框为点线",[1760,132222,132223],{"start":254},[1763,132224,132225],{},"边框的合写分写",[130,132227,132228],{"className":128769,"code":132133,"language":128771,"meta":135,"style":135},[50,132229,132230,132234,132240,132256],{"__ignoreMap":135},[139,132231,132232],{"class":141,"line":142},[139,132233,132140],{"class":2512},[139,132235,132236,132238],{"class":141,"line":210},[139,132237,53848],{"class":53538},[139,132239,17840],{"class":145},[139,132241,132242,132244,132246,132248,132250,132252,132254],{"class":141,"line":254},[139,132243,73125],{"class":153},[139,132245,2265],{"class":145},[139,132247,410],{"class":153},[139,132249,53729],{"class":149},[139,132251,53758],{"class":153},[139,132253,132161],{"class":153},[139,132255,3591],{"class":145},[139,132257,132258],{"class":141,"line":262},[139,132259,3862],{"class":145},[19,132261,132262],{},"边框分开写法：",[130,132264,132266],{"className":128769,"code":132265,"language":128771,"meta":135,"style":135},"\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",[50,132267,132268,132273,132279,132297,132315,132334,132352],{"__ignoreMap":135},[139,132269,132270],{"class":141,"line":142},[139,132271,132272],{"class":2512},"\u002F* 边框分开写法 *\u002F\n",[139,132274,132275,132277],{"class":141,"line":210},[139,132276,53848],{"class":53538},[139,132278,17840],{"class":145},[139,132280,132281,132284,132286,132288,132290,132292,132295],{"class":141,"line":254},[139,132282,132283],{"class":153},"  border-top",[139,132285,2265],{"class":145},[139,132287,410],{"class":153},[139,132289,53729],{"class":149},[139,132291,53758],{"class":153},[139,132293,132294],{"class":153}," #000",[139,132296,3591],{"class":145},[139,132298,132299,132302,132304,132306,132308,132310,132313],{"class":141,"line":262},[139,132300,132301],{"class":153},"  border-right",[139,132303,2265],{"class":145},[139,132305,416],{"class":153},[139,132307,53729],{"class":149},[139,132309,64474],{"class":153},[139,132311,132312],{"class":153}," #333",[139,132314,3591],{"class":145},[139,132316,132317,132320,132322,132324,132326,132329,132332],{"class":141,"line":313},[139,132318,132319],{"class":153},"  border-bottom",[139,132321,2265],{"class":145},[139,132323,421],{"class":153},[139,132325,53729],{"class":149},[139,132327,132328],{"class":153}," dotted",[139,132330,132331],{"class":153}," #666",[139,132333,3591],{"class":145},[139,132335,132336,132339,132341,132343,132345,132347,132350],{"class":141,"line":462},[139,132337,132338],{"class":153},"  border-left",[139,132340,2265],{"class":145},[139,132342,410],{"class":153},[139,132344,53729],{"class":149},[139,132346,53758],{"class":153},[139,132348,132349],{"class":153}," #999",[139,132351,3591],{"class":145},[139,132353,132354],{"class":141,"line":474},[139,132355,3862],{"class":145},[1760,132357,132358],{"start":262},[1763,132359,132360],{},"表格的细线边框",[19,132362,132363],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[130,132365,132367],{"className":128769,"code":132366,"language":128771,"meta":135,"style":135},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[50,132368,132369,132374,132380,132390],{"__ignoreMap":135},[139,132370,132371],{"class":141,"line":142},[139,132372,132373],{"class":2512},"\u002F* 表格细线边框合并 *\u002F\n",[139,132375,132376,132378],{"class":141,"line":210},[139,132377,26],{"class":53538},[139,132379,17840],{"class":145},[139,132381,132382,132384,132386,132388],{"class":141,"line":254},[139,132383,72807],{"class":153},[139,132385,2265],{"class":145},[139,132387,67266],{"class":153},[139,132389,3591],{"class":145},[139,132391,132392],{"class":141,"line":262},[139,132393,3862],{"class":145},[19,132395,132396],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1760,132398,132399],{"start":313},[1763,132400,132401],{},"解决边框额外增加盒子的实际大小的方法：",[3437,132403,132404,132407],{},[1763,132405,132406],{},"测量盒子大小的时候,不量边框",[1763,132408,132409],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1217,132411,132413],{"id":132412},"_912-内边距","9.1.2 内边距",[1760,132415,132416,132419],{},[1763,132417,132418],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1763,132420,132130],{},[26,132422,132423,132433],{},[29,132424,132425],{},[32,132426,132427,132430],{},[35,132428,132429],{"align":26003},"值的个数",[35,132431,132432],{"align":26003},"表达意思",[42,132434,132435,132443,132451,132459],{},[32,132436,132437,132440],{},[47,132438,132439],{"align":26003},"padding: 5px;",[47,132441,132442],{"align":26003},"1个值，代表上下左右都有5个元素",[32,132444,132445,132448],{},[47,132446,132447],{"align":26003},"padding: 5px 10px;",[47,132449,132450],{"align":26003},"2个值，代表上下内边距为5像素，左右内边距为10像素",[32,132452,132453,132456],{},[47,132454,132455],{"align":26003},"padding: 5px 10px 20px;",[47,132457,132458],{"align":26003},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[32,132460,132461,132464],{},[47,132462,132463],{"align":26003},"padding: 5px 10px 20px 30px;",[47,132465,132466],{"align":26003},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[26,132468,132469,132477],{},[29,132470,132471],{},[32,132472,132473,132475],{},[35,132474,131371],{"align":26003},[35,132476,104920],{"align":26003},[42,132478,132479,132487,132495,132503],{},[32,132480,132481,132484],{},[47,132482,132483],{"align":26003},"padding-left",[47,132485,132486],{"align":26003},"左内边距",[32,132488,132489,132492],{},[47,132490,132491],{"align":26003},"padding-right",[47,132493,132494],{"align":26003},"右内边距",[32,132496,132497,132500],{},[47,132498,132499],{"align":26003},"padding-top",[47,132501,132502],{"align":26003},"上内边距",[32,132504,132505,132508],{},[47,132506,132507],{"align":26003},"padding-bottom",[47,132509,132510],{"align":26003},"下内边距",[1760,132512,132513],{"start":254},[1763,132514,132515],{},"内边距会影响盒子的实际大小",[19,132517,132518],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132520,132521],{},"①内容和边框有了距离，添加了内边距",[19,132523,132524],{},"②padding影响了盒子实际大小",[19,132526,132527],{},"内边距对盒子大小的影响：",[19,132529,132530],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132532,132533],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132535,97447],{},[19,132537,132538],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1217,132540,132542],{"id":132541},"_913-外边距","9.1.3 外边距",[1760,132544,132545],{},[1763,132546,132547],{},"控制盒子与盒子之间的距离",[26,132549,132550,132558],{},[29,132551,132552],{},[32,132553,132554,132556],{},[35,132555,131371],{"align":26003},[35,132557,104920],{"align":26003},[42,132559,132560,132568,132576,132584],{},[32,132561,132562,132565],{},[47,132563,132564],{"align":26003},"margin-left",[47,132566,132567],{"align":26003},"左外边距",[32,132569,132570,132573],{},[47,132571,132572],{"align":26003},"margin-right",[47,132574,132575],{"align":26003},"右外边距",[32,132577,132578,132581],{},[47,132579,132580],{"align":26003},"margin-top",[47,132582,132583],{"align":26003},"上外边距",[32,132585,132586,132589],{},[47,132587,132588],{"align":26003},"margin-bottom",[47,132590,132591],{"align":26003},"下外边距",[1760,132593,132594],{"start":210},[1763,132595,132596],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132598,132599],{},"①盒子必须指定了宽度（width）",[19,132601,132602],{},"②盒子左右的外边距都设置为 auto",[130,132604,132606],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[50,132607,132608,132613,132620,132636],{"__ignoreMap":135},[139,132609,132610],{"class":141,"line":142},[139,132611,132612],{"class":2512},"\u002F* margin 复合写法（同上） *\u002F\n",[139,132614,132615,132618],{"class":141,"line":210},[139,132616,132617],{"class":781},".box",[139,132619,17840],{"class":145},[139,132621,132622,132624,132626,132628,132630,132633],{"class":141,"line":254},[139,132623,72699],{"class":153},[139,132625,2265],{"class":145},[139,132627,2634],{"class":153},[139,132629,53793],{"class":153},[139,132631,132632],{"class":145},";  ",[139,132634,132635],{"class":2512},"\u002F* 块级盒子水平居中 *\u002F\n",[139,132637,132638],{"class":141,"line":262},[139,132639,3862],{"class":145},[1760,132641,132642],{"start":254},[1763,132643,132644],{},"外边距塌陷问题",[19,132646,132647],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3760,132649],{"style":128625,"src":132650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132652,132653],{},"解决方案：",[19,132655,132656],{},"①可以为父亲元素定义上边距",[130,132658,132659],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,132660,132661,132665,132671,132685],{"__ignoreMap":135},[139,132662,132663],{"class":141,"line":142},[139,132664,132612],{"class":2512},[139,132666,132667,132669],{"class":141,"line":210},[139,132668,132617],{"class":781},[139,132670,17840],{"class":145},[139,132672,132673,132675,132677,132679,132681,132683],{"class":141,"line":254},[139,132674,72699],{"class":153},[139,132676,2265],{"class":145},[139,132678,2634],{"class":153},[139,132680,53793],{"class":153},[139,132682,132632],{"class":145},[139,132684,132635],{"class":2512},[139,132686,132687],{"class":141,"line":262},[139,132688,3862],{"class":145},[19,132690,132691],{},"②可以为父亲元素定义上内边距",[19,132693,132694],{},"③可以为父亲元素添加overflow:hidden",[3760,132696],{"style":128625,"src":132697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[130,132699,132700],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,132701,132702,132706,132712,132726],{"__ignoreMap":135},[139,132703,132704],{"class":141,"line":142},[139,132705,132612],{"class":2512},[139,132707,132708,132710],{"class":141,"line":210},[139,132709,132617],{"class":781},[139,132711,17840],{"class":145},[139,132713,132714,132716,132718,132720,132722,132724],{"class":141,"line":254},[139,132715,72699],{"class":153},[139,132717,2265],{"class":145},[139,132719,2634],{"class":153},[139,132721,53793],{"class":153},[139,132723,132632],{"class":145},[139,132725,132635],{"class":2512},[139,132727,132728],{"class":141,"line":262},[139,132729,3862],{"class":145},[3760,132731],{"style":128625,"src":132732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132734,132735],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132737,132738],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1217,132740,132742],{"id":132741},"_914-清除内外边距","9.1.4 清除内外边距",[19,132744,132745],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[130,132747,132748],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,132749,132750,132754,132760,132774],{"__ignoreMap":135},[139,132751,132752],{"class":141,"line":142},[139,132753,132612],{"class":2512},[139,132755,132756,132758],{"class":141,"line":210},[139,132757,132617],{"class":781},[139,132759,17840],{"class":145},[139,132761,132762,132764,132766,132768,132770,132772],{"class":141,"line":254},[139,132763,72699],{"class":153},[139,132765,2265],{"class":145},[139,132767,2634],{"class":153},[139,132769,53793],{"class":153},[139,132771,132632],{"class":145},[139,132773,132635],{"class":2512},[139,132775,132776],{"class":141,"line":262},[139,132777,3862],{"class":145},[19,132779,132780],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1217,132782,132784],{"id":132783},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3437,132786,132787,132790,132793,132796,132799,132802],{},[1763,132788,132789],{},"文件→打开 ：可以打开我们要测量的图片",[1763,132791,132792],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1763,132794,132795],{},"右击标尺，把里面的单位改为像素",[1763,132797,132798],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1763,132800,132801],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1763,132803,132804],{},"用选区拖动 可以测量大小",[3760,132806],{"style":128625,"src":132807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3437,132809,132810,132813],{},[1763,132811,132812],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1763,132814,132815],{},"吸管取色工具",[3760,132817],{"style":128625,"src":132818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1217,132820,132822],{"id":132821},"_916-案例","9.1.6 案例",[1760,132824,132825],{},[1763,132826,132827],{},"小米商品",[3760,132829],{"style":128625,"src":132830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[130,132832,132833],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,132834,132835,132839,132845,132859],{"__ignoreMap":135},[139,132836,132837],{"class":141,"line":142},[139,132838,132612],{"class":2512},[139,132840,132841,132843],{"class":141,"line":210},[139,132842,132617],{"class":781},[139,132844,17840],{"class":145},[139,132846,132847,132849,132851,132853,132855,132857],{"class":141,"line":254},[139,132848,72699],{"class":153},[139,132850,2265],{"class":145},[139,132852,2634],{"class":153},[139,132854,53793],{"class":153},[139,132856,132632],{"class":145},[139,132858,132635],{"class":2512},[139,132860,132861],{"class":141,"line":262},[139,132862,3862],{"class":145},[1760,132864,132865],{"start":210},[1763,132866,132867],{},"快报模块",[3760,132869],{"style":128625,"src":132870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[130,132872,132874],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[50,132875,132876,132881,132896,132901],{"__ignoreMap":135},[139,132877,132878],{"class":141,"line":142},[139,132879,132880],{"class":2512},"\u003C!-- HTML 代码示例 -->\n",[139,132882,132883,132885,132887,132889,132891,132894],{"class":141,"line":210},[139,132884,796],{"class":145},[139,132886,53848],{"class":53538},[139,132888,55721],{"class":781},[139,132890,150],{"class":145},[139,132892,132893],{"class":160},"\"example\"",[139,132895,53545],{"class":145},[139,132897,132898],{"class":141,"line":254},[139,132899,132900],{"class":145},"  示例内容\n",[139,132902,132903,132905,132907],{"class":141,"line":262},[139,132904,54022],{"class":145},[139,132906,53848],{"class":53538},[139,132908,53545],{"class":145},[1217,132910,132912],{"id":132911},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1760,132914,132915],{},[1763,132916,132917],{},"圆角边框",[19,132919,132920],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3760,132922],{"style":128625,"src":132923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[130,132925,132927],{"className":128769,"code":132926,"language":128771,"meta":135,"style":135},"div {\n  border: 1px solid #ccc;\n}\n",[50,132928,132929,132935,132951],{"__ignoreMap":135},[139,132930,132931,132933],{"class":141,"line":142},[139,132932,53848],{"class":53538},[139,132934,17840],{"class":145},[139,132936,132937,132939,132941,132943,132945,132947,132949],{"class":141,"line":210},[139,132938,73125],{"class":153},[139,132940,2265],{"class":145},[139,132942,410],{"class":153},[139,132944,53729],{"class":149},[139,132946,53758],{"class":153},[139,132948,132161],{"class":153},[139,132950,3591],{"class":145},[139,132952,132953],{"class":141,"line":254},[139,132954,3862],{"class":145},[19,132956,132957],{},"解释:",[3437,132959,132960,132963,132966,132969,132972],{},[1763,132961,132962],{},"参数值可以为数值或百分比的形式",[1763,132964,132965],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1763,132967,132968],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1763,132970,132971],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1763,132973,132974],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1760,132976,132977],{"start":210},[1763,132978,132979],{},"盒子阴影",[130,132981,132983],{"className":128769,"code":132982,"language":128771,"meta":135,"style":135},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[50,132984,132985,132991,133028],{"__ignoreMap":135},[139,132986,132987,132989],{"class":141,"line":142},[139,132988,53848],{"class":53538},[139,132990,17840],{"class":145},[139,132992,132993,132996,132998,133000,133002,133004,133006,133008,133010,133012,133014,133016,133018,133020,133022,133024,133026],{"class":141,"line":210},[139,132994,132995],{"class":153},"  box-shadow",[139,132997,2265],{"class":145},[139,132999,2634],{"class":153},[139,133001,17024],{"class":153},[139,133003,53729],{"class":149},[139,133005,4323],{"class":153},[139,133007,53729],{"class":149},[139,133009,80996],{"class":153},[139,133011,157],{"class":145},[139,133013,2634],{"class":153},[139,133015,413],{"class":145},[139,133017,2634],{"class":153},[139,133019,413],{"class":145},[139,133021,2634],{"class":153},[139,133023,413],{"class":145},[139,133025,88438],{"class":153},[139,133027,5002],{"class":145},[139,133029,133030],{"class":141,"line":254},[139,133031,3862],{"class":145},[26,133033,133034,133042],{},[29,133035,133036],{},[32,133037,133038,133040],{},[35,133039,2597],{"align":26003},[35,133041,29749],{"align":26003},[42,133043,133044,133052,133060,133068,133076,133084],{},[32,133045,133046,133049],{},[47,133047,133048],{"align":26003},"h-shadow",[47,133050,133051],{"align":26003},"必需,水平阴影的位置,允许负值",[32,133053,133054,133057],{},[47,133055,133056],{"align":26003},"v-shadow",[47,133058,133059],{"align":26003},"必需,垂直阴影的位置,允许负值",[32,133061,133062,133065],{},[47,133063,133064],{"align":26003},"blur",[47,133066,133067],{"align":26003},"可选,模糊距离,就是影子的虚实",[32,133069,133070,133073],{},[47,133071,133072],{"align":26003},"spread",[47,133074,133075],{"align":26003},"可选,阴影尺寸",[32,133077,133078,133081],{},[47,133079,133080],{"align":26003},"color",[47,133082,133083],{"align":26003},"可选,阴影的颜色",[32,133085,133086,133089],{},[47,133087,133088],{"align":26003},"inset",[47,133090,133091],{"align":26003},"可选,将外部阴影(outset)改为内部阴影",[1760,133093,133094],{"start":254},[1763,133095,133096],{},"文字阴影",[130,133098,133100],{"className":128769,"code":133099,"language":128771,"meta":135,"style":135},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[50,133101,133102,133108,133147],{"__ignoreMap":135},[139,133103,133104,133106],{"class":141,"line":142},[139,133105,19],{"class":53538},[139,133107,17840],{"class":145},[139,133109,133110,133113,133115,133117,133119,133121,133123,133125,133127,133129,133131,133133,133135,133137,133139,133141,133143,133145],{"class":141,"line":210},[139,133111,133112],{"class":153},"  text-shadow",[139,133114,2265],{"class":145},[139,133116,410],{"class":153},[139,133118,53729],{"class":149},[139,133120,27381],{"class":153},[139,133122,53729],{"class":149},[139,133124,17024],{"class":153},[139,133126,53729],{"class":149},[139,133128,80996],{"class":153},[139,133130,157],{"class":145},[139,133132,2634],{"class":153},[139,133134,413],{"class":145},[139,133136,2634],{"class":153},[139,133138,413],{"class":145},[139,133140,2634],{"class":153},[139,133142,413],{"class":145},[139,133144,102748],{"class":153},[139,133146,5002],{"class":145},[139,133148,133149],{"class":141,"line":254},[139,133150,3862],{"class":145},[26,133152,133153,133161],{},[29,133154,133155],{},[32,133156,133157,133159],{},[35,133158,2597],{"align":26003},[35,133160,29749],{"align":26003},[42,133162,133163,133169,133176,133183],{},[32,133164,133165,133167],{},[47,133166,133048],{"align":26003},[47,133168,133051],{"align":26003},[32,133170,133171,133173],{},[47,133172,133056],{"align":26003},[47,133174,133175],{"align":26003},"必需,垂直阴影位置,允许负值",[32,133177,133178,133180],{},[47,133179,133064],{"align":26003},[47,133181,133182],{"align":26003},"可选,模糊的距离",[32,133184,133185,133187],{},[47,133186,133080],{"align":26003},[47,133188,133083],{"align":26003},[14,133190,133192],{"id":133191},"_92-浮动","9.2 浮动",[1217,133194,133196],{"id":133195},"_921-浮动介绍","9.2.1 浮动介绍",[19,133198,133199],{},"在16.2中详细介绍",[1217,133201,133203],{"id":133202},"_922-清除浮动","9.2.2 清除浮动",[1760,133205,133206,133209],{},[1763,133207,133208],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1763,133210,133211],{},"清除浮动的本质",[19,133213,133214],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133216,11299],{},[3437,133218,133219,133222,133225],{},[1763,133220,133221],{},"如果父盒子本身有高度，则不需要清除浮动",[1763,133223,133224],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1763,133226,133227],{},"父级有了高度，就不会影响下面的标准流了",[1760,133229,133230],{"start":254},[1763,133231,133232],{},"清除浮动样式",[130,133234,133236],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[50,133237,133238,133245,133256,133260,133267,133277],{"__ignoreMap":135},[139,133239,133240,133243],{"class":141,"line":142},[139,133241,133242],{"class":781},".left",[139,133244,17840],{"class":145},[139,133246,133247,133250,133252,133254],{"class":141,"line":210},[139,133248,133249],{"class":153},"  float",[139,133251,2265],{"class":145},[139,133253,26003],{"class":153},[139,133255,3591],{"class":145},[139,133257,133258],{"class":141,"line":254},[139,133259,3862],{"class":145},[139,133261,133262,133265],{"class":141,"line":262},[139,133263,133264],{"class":781},".right",[139,133266,17840],{"class":145},[139,133268,133269,133271,133273,133275],{"class":141,"line":313},[139,133270,133249],{"class":153},[139,133272,2265],{"class":145},[139,133274,74751],{"class":153},[139,133276,3591],{"class":145},[139,133278,133279],{"class":141,"line":462},[139,133280,3862],{"class":145},[26,133282,133283,133291],{},[29,133284,133285],{},[32,133286,133287,133289],{},[35,133288,129233],{"align":26003},[35,133290,29749],{"align":26003},[42,133292,133293,133300,133307],{},[32,133294,133295,133297],{},[47,133296,26003],{"align":26003},[47,133298,133299],{"align":26003},"不允许左侧有浮动元素（清除左侧浮动的影响）",[32,133301,133302,133304],{},[47,133303,74751],{"align":26003},[47,133305,133306],{"align":26003},"不允许右侧有浮动元素（清除右侧浮动的影响）",[32,133308,133309,133312],{},[47,133310,133311],{"align":26003},"both",[47,133313,133314],{"align":26003},"同时清除左右侧浮动的影响",[19,133316,133317],{},"法一",[19,133319,133320],{},"额外标签法也称为隔墙法",[19,133322,133323],{},"使用方式：",[19,133325,133326],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[130,133328,133329],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,133330,133331,133337,133347,133351,133357,133367],{"__ignoreMap":135},[139,133332,133333,133335],{"class":141,"line":142},[139,133334,133242],{"class":781},[139,133336,17840],{"class":145},[139,133338,133339,133341,133343,133345],{"class":141,"line":210},[139,133340,133249],{"class":153},[139,133342,2265],{"class":145},[139,133344,26003],{"class":153},[139,133346,3591],{"class":145},[139,133348,133349],{"class":141,"line":254},[139,133350,3862],{"class":145},[139,133352,133353,133355],{"class":141,"line":262},[139,133354,133264],{"class":781},[139,133356,17840],{"class":145},[139,133358,133359,133361,133363,133365],{"class":141,"line":313},[139,133360,133249],{"class":153},[139,133362,2265],{"class":145},[139,133364,74751],{"class":153},[139,133366,3591],{"class":145},[139,133368,133369],{"class":141,"line":462},[139,133370,3862],{"class":145},[19,133372,133373],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133375,133376],{},"优点： 通俗易懂，书写方便",[19,133378,133379],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133381,133382],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133384,133385],{},"法二",[19,133387,133388],{},"父级添加overflow属性",[130,133390,133391],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,133392,133393,133399,133409,133413,133419,133429],{"__ignoreMap":135},[139,133394,133395,133397],{"class":141,"line":142},[139,133396,133242],{"class":781},[139,133398,17840],{"class":145},[139,133400,133401,133403,133405,133407],{"class":141,"line":210},[139,133402,133249],{"class":153},[139,133404,2265],{"class":145},[139,133406,26003],{"class":153},[139,133408,3591],{"class":145},[139,133410,133411],{"class":141,"line":254},[139,133412,3862],{"class":145},[139,133414,133415,133417],{"class":141,"line":262},[139,133416,133264],{"class":781},[139,133418,17840],{"class":145},[139,133420,133421,133423,133425,133427],{"class":141,"line":313},[139,133422,133249],{"class":153},[139,133424,2265],{"class":145},[139,133426,74751],{"class":153},[139,133428,3591],{"class":145},[139,133430,133431],{"class":141,"line":462},[139,133432,3862],{"class":145},[19,133434,133435],{},"overflow: hidden;",[19,133437,133438],{},"优点：代码简洁",[19,133440,133441],{},"缺点：无法显示溢出的部分",[19,133443,133444],{},"注意：是给父元素添加代码",[19,133446,133447],{},"法三",[19,133449,133450],{},"父级添加after伪元素",[19,133452,133453,133456],{},[133454,133455],"after",{}," 方式是额外标签法的升级版",[19,133458,133459],{},"使用的时候复制就可以",[130,133461,133462],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,133463,133464,133470,133480,133484,133490,133500],{"__ignoreMap":135},[139,133465,133466,133468],{"class":141,"line":142},[139,133467,133242],{"class":781},[139,133469,17840],{"class":145},[139,133471,133472,133474,133476,133478],{"class":141,"line":210},[139,133473,133249],{"class":153},[139,133475,2265],{"class":145},[139,133477,26003],{"class":153},[139,133479,3591],{"class":145},[139,133481,133482],{"class":141,"line":254},[139,133483,3862],{"class":145},[139,133485,133486,133488],{"class":141,"line":262},[139,133487,133264],{"class":781},[139,133489,17840],{"class":145},[139,133491,133492,133494,133496,133498],{"class":141,"line":313},[139,133493,133249],{"class":153},[139,133495,2265],{"class":145},[139,133497,74751],{"class":153},[139,133499,3591],{"class":145},[139,133501,133502],{"class":141,"line":462},[139,133503,3862],{"class":145},[19,133505,133506],{},"优点：没有增加标签，结构更简单",[19,133508,133509],{},"缺点：照顾低版本浏览器",[19,133511,133512],{},"代表网站： 百度、淘宝网、网易等",[19,133514,133515],{},"法四",[19,133517,133518],{},"父级添加双伪元素",[130,133520,133521],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,133522,133523,133529,133539,133543,133549,133559],{"__ignoreMap":135},[139,133524,133525,133527],{"class":141,"line":142},[139,133526,133242],{"class":781},[139,133528,17840],{"class":145},[139,133530,133531,133533,133535,133537],{"class":141,"line":210},[139,133532,133249],{"class":153},[139,133534,2265],{"class":145},[139,133536,26003],{"class":153},[139,133538,3591],{"class":145},[139,133540,133541],{"class":141,"line":254},[139,133542,3862],{"class":145},[139,133544,133545,133547],{"class":141,"line":262},[139,133546,133264],{"class":781},[139,133548,17840],{"class":145},[139,133550,133551,133553,133555,133557],{"class":141,"line":313},[139,133552,133249],{"class":153},[139,133554,2265],{"class":145},[139,133556,74751],{"class":153},[139,133558,3591],{"class":145},[139,133560,133561],{"class":141,"line":462},[139,133562,3862],{"class":145},[19,133564,133565],{},"优点：代码更简洁",[19,133567,133509],{},[19,133569,133570],{},"代表网站：小米、腾讯等",[14,133572,133574],{"id":133573},"_93-ps切图","9.3 PS切图",[1217,133576,133578],{"id":133577},"_931-常见图片格式","9.3.1 常见图片格式",[26,133580,133581,133591],{},[29,133582,133583],{},[32,133584,133585,133588],{},[35,133586,133587],{"align":26003},"jpg图像格式",[35,133589,133590],{"align":26003},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[42,133592,133593,133601,133609],{},[32,133594,133595,133598],{},[47,133596,133597],{"align":26003},"gif图像格式",[47,133599,133600],{"align":26003},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[32,133602,133603,133606],{},[47,133604,133605],{"align":26003},"png图像格式",[47,133607,133608],{"align":26003},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[32,133610,133611,133614],{},[47,133612,133613],{"align":26003},"PSD图像格式",[47,133615,133616],{"align":26003},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1217,133618,133620],{"id":133619},"_932-图层切图","9.3.2 图层切图",[19,133622,133623],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133625,133626],{},"按住shift选中两个图层->图层菜单->合并图层",[1217,133628,133630],{"id":133629},"_933-切片切图","9.3.3 切片切图",[3437,133632,133633,133636],{},[1763,133634,133635],{},"利用切片工具手动划出",[1763,133637,133638],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1217,133640,133642],{"id":133641},"_934-切图步骤","9.3.4 切图步骤",[19,133644,133645],{},"用切片工具选中：",[3760,133647],{"style":128625,"src":133648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133650,133651],{},"文件 -> 导出",[3760,133653],{"style":128625,"src":133654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2348,133656,133657],{},"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":135,"searchDepth":210,"depth":210,"links":133659},[133660,133669,133673],{"id":132096,"depth":210,"text":132097,"children":133661},[133662,133663,133664,133665,133666,133667,133668],{"id":132121,"depth":254,"text":132122},{"id":132412,"depth":254,"text":132413},{"id":132541,"depth":254,"text":132542},{"id":132741,"depth":254,"text":132742},{"id":132783,"depth":254,"text":132784},{"id":132821,"depth":254,"text":132822},{"id":132911,"depth":254,"text":132912},{"id":133191,"depth":210,"text":133192,"children":133670},[133671,133672],{"id":133195,"depth":254,"text":133196},{"id":133202,"depth":254,"text":133203},{"id":133573,"depth":210,"text":133574,"children":133674},[133675,133676,133677,133678],{"id":133577,"depth":254,"text":133578},{"id":133619,"depth":254,"text":133620},{"id":133629,"depth":254,"text":133630},{"id":133641,"depth":254,"text":133642},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132088,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133685,"title":133686,"body":133687,"description":2384,"extension":2385,"meta":134328,"navigation":842,"path":134329,"seo":134330,"stem":134331,"__hash__":134332},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133688,"toc":134316},[133689,133692,133696,133722,133756,133760,133764,133767,133809,133816,133826,133834,133836,133839,133842,133845,133852,133866,133870,133873,133902,133906,133909,133923,133927,133930,133958,133962,133965,133991,133995,134000,134033,134038,134066,134070,134087,134133,134138,134182,134199,134306,134314],[10,133690,133686],{"id":133691},"_10-css规范与学成在线案例",[14,133693,133695],{"id":133694},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1760,133697,133698,133704,133710,133716],{},[1763,133699,133700,133703],{},[1674,133701,133702],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1763,133705,133706,133709],{},[1674,133707,133708],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1763,133711,133712,133715],{},[1674,133713,133714],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1763,133717,133718,133721],{},[1674,133719,133720],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[130,133723,133724],{"className":128769,"code":132133,"language":128771,"meta":135,"style":135},[50,133725,133726,133730,133736,133752],{"__ignoreMap":135},[139,133727,133728],{"class":141,"line":142},[139,133729,132140],{"class":2512},[139,133731,133732,133734],{"class":141,"line":210},[139,133733,53848],{"class":53538},[139,133735,17840],{"class":145},[139,133737,133738,133740,133742,133744,133746,133748,133750],{"class":141,"line":254},[139,133739,73125],{"class":153},[139,133741,2265],{"class":145},[139,133743,410],{"class":153},[139,133745,53729],{"class":149},[139,133747,53758],{"class":153},[139,133749,132161],{"class":153},[139,133751,3591],{"class":145},[139,133753,133754],{"class":141,"line":262},[139,133755,3862],{"class":145},[14,133757,133759],{"id":133758},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1217,133761,133763],{"id":133762},"_1021-header头部制作","10.2.1 header头部制作",[3760,133765],{"style":128625,"src":133766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3437,133768,133769,133776,133783,133789,133796,133803],{},[1763,133770,133771,133772,133775],{},"1号是版心盒子 ",[1674,133773,133774],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1763,133777,133778,133779,133782],{},"版心盒子 里面包含 2号盒子 ",[1674,133780,133781],{},"logo"," 图标",[1763,133784,133785,133786,133788],{},"版心盒子 里面包含 3号盒子 ",[1674,133787,55948],{}," 导航栏",[1763,133790,133791,133792,133795],{},"版心盒子 里面包含 4号盒子 ",[1674,133793,133794],{},"search"," 搜索框",[1763,133797,133798,133799,133802],{},"版心盒子 里面包含 5号盒子 ",[1674,133800,133801],{},"user"," 个人信息",[1763,133804,133805,133806],{},"注意，要求里面的 ",[1674,133807,133808],{},"4个子盒子 必须都浮动",[1760,133810,133811],{},[1763,133812,133813],{},[1674,133814,133815],{},"导航栏注意点:",[19,133817,133818,133819,133822,133823],{},"实际开发中， ",[1674,133820,133821],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1674,133824,133825],{},"用 li 包含链接(li+a)的做法",[3437,133827,133828,133831],{},[1763,133829,133830],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1763,133832,133833],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133835,11299],{},[19,133837,133838],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133840,133841],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133843,133844],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1760,133846,133847],{"start":210},[1763,133848,133849],{},[1674,133850,133851],{},"4号盒子search的细节：",[3437,133853,133854,133857,133860],{},[1763,133855,133856],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1763,133858,133859],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1763,133861,133862,133865],{},[50,133863,133864],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1217,133867,133869],{"id":133868},"_1022-banner制作","10.2.2 banner制作",[3760,133871],{"style":128625,"src":133872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3437,133874,133875,133882,133888,133895],{},[1763,133876,133877,133878,133881],{},"1号盒子是通栏的大盒子 ",[1674,133879,133880],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1763,133883,133884,133885,133887],{},"2号盒子是版心 ",[1674,133886,3230],{}," ， 要水平居中对齐",[1763,133889,133890,133891,133894],{},"3号盒子版心内，左对齐 ",[1674,133892,133893],{},"subnav"," 侧导航栏",[1763,133896,133897,133898,133901],{},"4号盒子版心内，右对齐 ",[1674,133899,133900],{},"course"," 课程",[1217,133903,133905],{"id":133904},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3760,133907],{"style":128625,"src":133908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3437,133910,133911,133914,133917,133920],{},[1763,133912,133913],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1763,133915,133916],{},"1号盒子是标题 H3 左侧浮动",[1763,133918,133919],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1763,133921,133922],{},"3号盒子 右浮动 mod 修改",[1217,133924,133926],{"id":133925},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3760,133928],{"style":128625,"src":133929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3437,133931,133932,133938,133945,133952,133955],{},[1763,133933,133934,133935,133937],{},"1号盒子为最大的盒子 ",[1674,133936,55949],{}," 版心水平居中对齐",[1763,133939,133940,133941,133944],{},"2号盒子为上面部分 ",[1674,133942,133943],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1763,133946,133947,133948,133951],{},"3号盒子为底下部分 ",[1674,133949,133950],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1763,133953,133954],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1763,133956,133957],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1217,133959,133961],{"id":133960},"_1025-底部模块制作","10.2.5 底部模块制作",[3760,133963],{"style":128625,"src":133964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3437,133966,133967,133974,133977,133984],{},[1763,133968,133969,133970,133973],{},"1号盒子通栏大盒子 底部 ",[1674,133971,133972],{},"footer"," 给高度 底色是白色",[1763,133975,133976],{},"2号盒子版心水平居中",[1763,133978,133979,133980,133983],{},"3号盒子版权 ",[1674,133981,133982],{},"copyright"," 左对齐",[1763,133985,133986,133987,133990],{},"4号盒子 链接组 ",[1674,133988,133989],{},"links"," 右对齐",[1217,133992,133994],{"id":133993},"_1026-代码模块","10.2.6 代码模块",[1760,133996,133997],{},[1763,133998,133999],{},"html部分",[130,134001,134003],{"className":129516,"code":134002,"language":129518,"meta":135,"style":135},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[50,134004,134005],{"__ignoreMap":135},[139,134006,134007,134009,134011,134013,134015,134018,134021,134023,134026,134029,134031],{"class":141,"line":142},[139,134008,796],{"class":145},[139,134010,2680],{"class":53538},[139,134012,63290],{"class":781},[139,134014,150],{"class":145},[139,134016,134017],{"class":160},"\"https:\u002F\u002Fexample.com\"",[139,134019,134020],{"class":781}," target",[139,134022,150],{"class":145},[139,134024,134025],{"class":160},"\"_blank\"",[139,134027,134028],{"class":145},">链接文字\u003C\u002F",[139,134030,2680],{"class":53538},[139,134032,53545],{"class":145},[1760,134034,134035],{"start":210},[1763,134036,134037],{},"css部分",[130,134039,134040],{"className":129516,"code":134002,"language":129518,"meta":135,"style":135},[50,134041,134042],{"__ignoreMap":135},[139,134043,134044,134046,134048,134050,134052,134054,134056,134058,134060,134062,134064],{"class":141,"line":142},[139,134045,796],{"class":145},[139,134047,2680],{"class":53538},[139,134049,63290],{"class":781},[139,134051,150],{"class":145},[139,134053,134017],{"class":160},[139,134055,134020],{"class":781},[139,134057,150],{"class":145},[139,134059,134025],{"class":160},[139,134061,134028],{"class":145},[139,134063,2680],{"class":53538},[139,134065,53545],{"class":145},[1217,134067,134069],{"id":134068},"_1027-收获","10.2.7 收获",[1760,134071,134072,134075,134078,134081,134084],{},[1763,134073,134074],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1763,134076,134077],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1763,134079,134080],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1763,134082,134083],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1763,134085,134086],{},"遗忘代码",[130,134088,134090],{"className":128769,"code":134089,"language":128771,"meta":135,"style":135},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[50,134091,134092,134114,134119,134129],{"__ignoreMap":135},[139,134093,134094,134096,134098,134100,134102,134104,134106,134108,134110,134112],{"class":141,"line":142},[139,134095,53848],{"class":53538},[139,134097,413],{"class":145},[139,134099,19],{"class":53538},[139,134101,413],{"class":145},[139,134103,10],{"class":53538},[139,134105,413],{"class":145},[139,134107,3437],{"class":53538},[139,134109,413],{"class":145},[139,134111,1763],{"class":53538},[139,134113,17840],{"class":145},[139,134115,134116],{"class":141,"line":210},[139,134117,134118],{"class":2512},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[139,134120,134121,134123,134125,134127],{"class":141,"line":254},[139,134122,130385],{"class":153},[139,134124,2265],{"class":145},[139,134126,63102],{"class":153},[139,134128,3591],{"class":145},[139,134130,134131],{"class":141,"line":262},[139,134132,3862],{"class":145},[1760,134134,134135],{"start":462},[1763,134136,134137],{},"html引css的程序",[130,134139,134140],{"className":128769,"code":134089,"language":128771,"meta":135,"style":135},[50,134141,134142,134164,134168,134178],{"__ignoreMap":135},[139,134143,134144,134146,134148,134150,134152,134154,134156,134158,134160,134162],{"class":141,"line":142},[139,134145,53848],{"class":53538},[139,134147,413],{"class":145},[139,134149,19],{"class":53538},[139,134151,413],{"class":145},[139,134153,10],{"class":53538},[139,134155,413],{"class":145},[139,134157,3437],{"class":53538},[139,134159,413],{"class":145},[139,134161,1763],{"class":53538},[139,134163,17840],{"class":145},[139,134165,134166],{"class":141,"line":210},[139,134167,134118],{"class":2512},[139,134169,134170,134172,134174,134176],{"class":141,"line":254},[139,134171,130385],{"class":153},[139,134173,2265],{"class":145},[139,134175,63102],{"class":153},[139,134177,3591],{"class":145},[139,134179,134180],{"class":141,"line":262},[139,134181,3862],{"class":145},[1760,134183,134184,134187,134190,134193,134196],{"start":474},[1763,134185,134186],{},"浮动的盒子不会有外边距合并问题",[1763,134188,134189],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1763,134191,134192],{},"ctrl+g快速定位行；shift+alt多个光标",[1763,134194,134195],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1763,134197,134198],{},"在写选择器时尽量写全一些，例如",[130,134200,134202],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},"\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",[50,134203,134204,134209,134225,134230,134245,134250,134265,134270,134285,134290],{"__ignoreMap":135},[139,134205,134206],{"class":141,"line":142},[139,134207,134208],{"class":2512},"\u002F* 静态定位（默认） *\u002F\n",[139,134210,134211,134214,134216,134218,134220,134223],{"class":141,"line":210},[139,134212,134213],{"class":781},".static",[139,134215,82036],{"class":145},[139,134217,131129],{"class":153},[139,134219,2265],{"class":145},[139,134221,134222],{"class":153},"static",[139,134224,131699],{"class":145},[139,134226,134227],{"class":141,"line":254},[139,134228,134229],{"class":2512},"\u002F* 相对定位 *\u002F\n",[139,134231,134232,134235,134237,134239,134241,134243],{"class":141,"line":262},[139,134233,134234],{"class":781},".relative",[139,134236,82036],{"class":145},[139,134238,131129],{"class":153},[139,134240,2265],{"class":145},[139,134242,56998],{"class":153},[139,134244,131699],{"class":145},[139,134246,134247],{"class":141,"line":313},[139,134248,134249],{"class":2512},"\u002F* 绝对定位 *\u002F\n",[139,134251,134252,134255,134257,134259,134261,134263],{"class":141,"line":462},[139,134253,134254],{"class":781},".absolute",[139,134256,82036],{"class":145},[139,134258,131129],{"class":153},[139,134260,2265],{"class":145},[139,134262,57065],{"class":153},[139,134264,131699],{"class":145},[139,134266,134267],{"class":141,"line":474},[139,134268,134269],{"class":2512},"\u002F* 固定定位 *\u002F\n",[139,134271,134272,134275,134277,134279,134281,134283],{"class":141,"line":484},[139,134273,134274],{"class":781},".fixed",[139,134276,82036],{"class":145},[139,134278,131129],{"class":153},[139,134280,2265],{"class":145},[139,134282,88461],{"class":153},[139,134284,131699],{"class":145},[139,134286,134287],{"class":141,"line":989},[139,134288,134289],{"class":2512},"\u002F* 粘性定位 *\u002F\n",[139,134291,134292,134295,134297,134299,134301,134304],{"class":141,"line":994},[139,134293,134294],{"class":781},".sticky",[139,134296,82036],{"class":145},[139,134298,131129],{"class":153},[139,134300,2265],{"class":145},[139,134302,134303],{"class":153},"sticky",[139,134305,131699],{"class":145},[1760,134307,134308,134311],{"start":1006},[1763,134309,134310],{},"一定要用好注释",[1763,134312,134313],{},"浮动的盒子不会有外边距合并的问题",[2348,134315,133657],{},{"title":135,"searchDepth":210,"depth":210,"links":134317},[134318,134319],{"id":133694,"depth":210,"text":133695},{"id":133758,"depth":210,"text":133759,"children":134320},[134321,134322,134323,134324,134325,134326,134327],{"id":133762,"depth":254,"text":133763},{"id":133868,"depth":254,"text":133869},{"id":133904,"depth":254,"text":133905},{"id":133925,"depth":254,"text":133926},{"id":133960,"depth":254,"text":133961},{"id":133993,"depth":254,"text":133994},{"id":134068,"depth":254,"text":134069},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133686,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134334,"title":134335,"body":134336,"description":2384,"extension":2385,"meta":135822,"navigation":842,"path":135823,"seo":135824,"stem":135825,"__hash__":135826},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134337,"toc":135814},[134338,134341,134345,134349,134360,134364,134381,134425,134458,134461,134478,134481,134484,134528,134532,134536,134539,134542,134546,134549,134560,134623,134664,134667,134682,134736,134744,134747,134758,134812,134838,134841,134854,134908,134940,134994,135017,135071,135074,135077,135084,135138,135159,135213,135216,135219,135304,135312,135369,135392,135396,135399,135417,135421,135440,135494,135532,135536,135539,135542,135564,135568,135576,135579,135584,135595,135598,135602,135616,135660,135663,135667,135670,135675,135701,135706,135783,135786,135790,135793,135796,135799,135802,135805,135808,135811],[10,134339,134335],{"id":134340},"_11-传统布局与定位体系",[14,134342,134344],{"id":134343},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1217,134346,134348],{"id":134347},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3437,134350,134351,134354,134357],{},[1763,134352,134353],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1763,134355,134356],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1763,134358,134359],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1217,134361,134363],{"id":134362},"_1112-浮动","11.1.2 浮动",[3437,134365,134366,134369,134372,134375,134378],{},[1763,134367,134368],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1763,134370,134371],{},"浮动可以改变元素标签默认的排列方式",[1763,134373,134374],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1763,134376,134377],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1763,134379,134380],{},"在使用行内块转换时盒子之间是有空隙的",[130,134382,134383],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,134384,134385,134391,134401,134405,134411,134421],{"__ignoreMap":135},[139,134386,134387,134389],{"class":141,"line":142},[139,134388,133242],{"class":781},[139,134390,17840],{"class":145},[139,134392,134393,134395,134397,134399],{"class":141,"line":210},[139,134394,133249],{"class":153},[139,134396,2265],{"class":145},[139,134398,26003],{"class":153},[139,134400,3591],{"class":145},[139,134402,134403],{"class":141,"line":254},[139,134404,3862],{"class":145},[139,134406,134407,134409],{"class":141,"line":262},[139,134408,133264],{"class":781},[139,134410,17840],{"class":145},[139,134412,134413,134415,134417,134419],{"class":141,"line":313},[139,134414,133249],{"class":153},[139,134416,2265],{"class":145},[139,134418,74751],{"class":153},[139,134420,3591],{"class":145},[139,134422,134423],{"class":141,"line":462},[139,134424,3862],{"class":145},[26,134426,134427,134435],{},[29,134428,134429],{},[32,134430,134431,134433],{},[35,134432,129233],{"align":26003},[35,134434,29749],{"align":26003},[42,134436,134437,134444,134451],{},[32,134438,134439,134441],{},[47,134440,56971],{"align":26003},[47,134442,134443],{"align":26003},"元素不浮动（默认值）",[32,134445,134446,134448],{},[47,134447,26003],{"align":26003},[47,134449,134450],{"align":26003},"元素向左浮动",[32,134452,134453,134455],{},[47,134454,74751],{"align":26003},[47,134456,134457],{"align":26003},"元素向右浮动",[19,134459,134460],{},"浮动重点：",[3437,134462,134463,134466,134469,134472,134475],{},[1763,134464,134465],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1763,134467,134468],{},"浮动的元素会一行内显示并且元素顶部对齐",[1763,134470,134471],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1763,134473,134474],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1763,134476,134477],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134479,134480],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134482,134483],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[130,134485,134486],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,134487,134488,134494,134504,134508,134514,134524],{"__ignoreMap":135},[139,134489,134490,134492],{"class":141,"line":142},[139,134491,133242],{"class":781},[139,134493,17840],{"class":145},[139,134495,134496,134498,134500,134502],{"class":141,"line":210},[139,134497,133249],{"class":153},[139,134499,2265],{"class":145},[139,134501,26003],{"class":153},[139,134503,3591],{"class":145},[139,134505,134506],{"class":141,"line":254},[139,134507,3862],{"class":145},[139,134509,134510,134512],{"class":141,"line":262},[139,134511,133264],{"class":781},[139,134513,17840],{"class":145},[139,134515,134516,134518,134520,134522],{"class":141,"line":313},[139,134517,133249],{"class":153},[139,134519,2265],{"class":145},[139,134521,74751],{"class":153},[139,134523,3591],{"class":145},[139,134525,134526],{"class":141,"line":462},[139,134527,3862],{"class":145},[1217,134529,134531],{"id":134530},"_1113-定位","11.1.3 定位",[24265,134533,134535],{"id":134534},"_11131-使用场景","11.1.3.1 使用场景",[19,134537,134538],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134540,134541],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24265,134543,134545],{"id":134544},"_11132-定位组成","11.1.3.2 定位组成",[19,134547,134548],{},"定位 = 定位模式 + 边偏移",[1760,134550,134551],{},[1763,134552,134553,134556,134557],{},[1674,134554,134555],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1674,134558,134559],{},"定位模式",[130,134561,134563],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[50,134564,134565,134571,134585,134602,134619],{"__ignoreMap":135},[139,134566,134567,134569],{"class":141,"line":142},[139,134568,132617],{"class":781},[139,134570,17840],{"class":145},[139,134572,134573,134576,134578,134580,134582],{"class":141,"line":210},[139,134574,134575],{"class":153},"  position",[139,134577,2265],{"class":145},[139,134579,56998],{"class":153},[139,134581,132632],{"class":145},[139,134583,134584],{"class":2512},"\u002F* 定位模式 *\u002F\n",[139,134586,134587,134590,134592,134594,134596,134599],{"class":141,"line":254},[139,134588,134589],{"class":153},"  top",[139,134591,2265],{"class":145},[139,134593,536],{"class":153},[139,134595,53729],{"class":149},[139,134597,134598],{"class":145},";           ",[139,134600,134601],{"class":2512},"\u002F* 边偏移：上 *\u002F\n",[139,134603,134604,134607,134609,134611,134613,134616],{"class":141,"line":262},[139,134605,134606],{"class":153},"  left",[139,134608,2265],{"class":145},[139,134610,3135],{"class":153},[139,134612,53729],{"class":149},[139,134614,134615],{"class":145},";          ",[139,134617,134618],{"class":2512},"\u002F* 边偏移：左 *\u002F\n",[139,134620,134621],{"class":141,"line":313},[139,134622,3862],{"class":145},[26,134624,134625,134634],{},[29,134626,134627],{},[32,134628,134629,134631],{},[35,134630,2597],{"align":26003},[35,134632,134633],{"align":26003},"语义",[42,134635,134636,134643,134650,134657],{},[32,134637,134638,134640],{},[47,134639,134222],{"align":26003},[47,134641,134642],{"align":26003},"静态定位",[32,134644,134645,134647],{},[47,134646,56998],{"align":26003},[47,134648,134649],{"align":26003},"相对定位",[32,134651,134652,134654],{},[47,134653,57065],{"align":26003},[47,134655,134656],{"align":26003},"绝对定位",[32,134658,134659,134661],{},[47,134660,88461],{"align":26003},[47,134662,134663],{"align":26003},"固定定位",[19,134665,134666],{},"（1）静态定位：",[3437,134668,134669,134680],{},[1763,134670,134671,134672,134675,134676,134679],{},"静态定位是元素的 ",[1674,134673,134674],{},"默认定位方式"," ， ",[1674,134677,134678],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1763,134681,7459],{},[130,134683,134684],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,134685,134686,134692,134704,134718,134732],{"__ignoreMap":135},[139,134687,134688,134690],{"class":141,"line":142},[139,134689,132617],{"class":781},[139,134691,17840],{"class":145},[139,134693,134694,134696,134698,134700,134702],{"class":141,"line":210},[139,134695,134575],{"class":153},[139,134697,2265],{"class":145},[139,134699,56998],{"class":153},[139,134701,132632],{"class":145},[139,134703,134584],{"class":2512},[139,134705,134706,134708,134710,134712,134714,134716],{"class":141,"line":254},[139,134707,134589],{"class":153},[139,134709,2265],{"class":145},[139,134711,536],{"class":153},[139,134713,53729],{"class":149},[139,134715,134598],{"class":145},[139,134717,134601],{"class":2512},[139,134719,134720,134722,134724,134726,134728,134730],{"class":141,"line":262},[139,134721,134606],{"class":153},[139,134723,2265],{"class":145},[139,134725,3135],{"class":153},[139,134727,53729],{"class":149},[139,134729,134615],{"class":145},[139,134731,134618],{"class":2512},[139,134733,134734],{"class":141,"line":313},[139,134735,3862],{"class":145},[3437,134737,134738,134741],{},[1763,134739,134740],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1763,134742,134743],{},"静态定位在布局时我们几乎不用的",[19,134745,134746],{},"（2）相对定位",[3437,134748,134749,134756],{},[1763,134750,134751,134752,134755],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1674,134753,134754],{},"原来的位置"," 来说的（自恋型）",[1763,134757,7459],{},[130,134759,134760],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,134761,134762,134768,134780,134794,134808],{"__ignoreMap":135},[139,134763,134764,134766],{"class":141,"line":142},[139,134765,132617],{"class":781},[139,134767,17840],{"class":145},[139,134769,134770,134772,134774,134776,134778],{"class":141,"line":210},[139,134771,134575],{"class":153},[139,134773,2265],{"class":145},[139,134775,56998],{"class":153},[139,134777,132632],{"class":145},[139,134779,134584],{"class":2512},[139,134781,134782,134784,134786,134788,134790,134792],{"class":141,"line":254},[139,134783,134589],{"class":153},[139,134785,2265],{"class":145},[139,134787,536],{"class":153},[139,134789,53729],{"class":149},[139,134791,134598],{"class":145},[139,134793,134601],{"class":2512},[139,134795,134796,134798,134800,134802,134804,134806],{"class":141,"line":262},[139,134797,134606],{"class":153},[139,134799,2265],{"class":145},[139,134801,3135],{"class":153},[139,134803,53729],{"class":149},[139,134805,134615],{"class":145},[139,134807,134618],{"class":2512},[139,134809,134810],{"class":141,"line":313},[139,134811,3862],{"class":145},[3437,134813,134814],{},[1763,134815,134816,134817,134819,134820,134822,134823,134826,134827,134830,134831,134833,134834,134837],{},"相对定位的特点：",[55951,134818],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55951,134821],{},"  ② ",[1674,134824,134825],{},"原来"," 在标准流的 ",[1674,134828,134829],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55951,134832],{},"  ③因此， ",[1674,134835,134836],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134839,134840],{},"（3）绝对定位",[3437,134842,134843,134852],{},[1763,134844,134845,134847,134848,134851],{},[1674,134846,134656],{}," 是元素在移动位置的时候，是相对于它 ",[1674,134849,134850],{},"祖先元素"," 来说的（拼爹型）",[1763,134853,7459],{},[130,134855,134856],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,134857,134858,134864,134876,134890,134904],{"__ignoreMap":135},[139,134859,134860,134862],{"class":141,"line":142},[139,134861,132617],{"class":781},[139,134863,17840],{"class":145},[139,134865,134866,134868,134870,134872,134874],{"class":141,"line":210},[139,134867,134575],{"class":153},[139,134869,2265],{"class":145},[139,134871,56998],{"class":153},[139,134873,132632],{"class":145},[139,134875,134584],{"class":2512},[139,134877,134878,134880,134882,134884,134886,134888],{"class":141,"line":254},[139,134879,134589],{"class":153},[139,134881,2265],{"class":145},[139,134883,536],{"class":153},[139,134885,53729],{"class":149},[139,134887,134598],{"class":145},[139,134889,134601],{"class":2512},[139,134891,134892,134894,134896,134898,134900,134902],{"class":141,"line":262},[139,134893,134606],{"class":153},[139,134895,2265],{"class":145},[139,134897,3135],{"class":153},[139,134899,53729],{"class":149},[139,134901,134615],{"class":145},[139,134903,134618],{"class":2512},[139,134905,134906],{"class":141,"line":313},[139,134907,3862],{"class":145},[3437,134909,134910,134925,134934,134937],{},[1763,134911,134912,134913,134915,134916,134918,134919,134921,134922,134924],{},"绝对定位的特点：",[55951,134914],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55951,134917],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55951,134920],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55951,134923],{},"  (4)固定定位",[1763,134926,134927,134929,134930,134933],{},[1674,134928,134663],{}," 是元素 ",[1674,134931,134932],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1763,134935,134936],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1763,134938,134939],{},"语法:",[130,134941,134942],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,134943,134944,134950,134962,134976,134990],{"__ignoreMap":135},[139,134945,134946,134948],{"class":141,"line":142},[139,134947,132617],{"class":781},[139,134949,17840],{"class":145},[139,134951,134952,134954,134956,134958,134960],{"class":141,"line":210},[139,134953,134575],{"class":153},[139,134955,2265],{"class":145},[139,134957,56998],{"class":153},[139,134959,132632],{"class":145},[139,134961,134584],{"class":2512},[139,134963,134964,134966,134968,134970,134972,134974],{"class":141,"line":254},[139,134965,134589],{"class":153},[139,134967,2265],{"class":145},[139,134969,536],{"class":153},[139,134971,53729],{"class":149},[139,134973,134598],{"class":145},[139,134975,134601],{"class":2512},[139,134977,134978,134980,134982,134984,134986,134988],{"class":141,"line":262},[139,134979,134606],{"class":153},[139,134981,2265],{"class":145},[139,134983,3135],{"class":153},[139,134985,53729],{"class":149},[139,134987,134615],{"class":145},[139,134989,134618],{"class":2512},[139,134991,134992],{"class":141,"line":313},[139,134993,3862],{"class":145},[3437,134995,134996,135005],{},[1763,134997,134998,134999,135001,135002,135004],{},"特点:",[55951,135000],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55951,135003],{},"  ②固定定位不再占有原先的位置,完全脱标",[1763,135006,135007,135008,135010,135011,135013,135014,135016],{},"固定在版心位置的方法:",[55951,135009],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55951,135012],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55951,135015],{},"  实例：",[130,135018,135019],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,135020,135021,135027,135039,135053,135067],{"__ignoreMap":135},[139,135022,135023,135025],{"class":141,"line":142},[139,135024,132617],{"class":781},[139,135026,17840],{"class":145},[139,135028,135029,135031,135033,135035,135037],{"class":141,"line":210},[139,135030,134575],{"class":153},[139,135032,2265],{"class":145},[139,135034,56998],{"class":153},[139,135036,132632],{"class":145},[139,135038,134584],{"class":2512},[139,135040,135041,135043,135045,135047,135049,135051],{"class":141,"line":254},[139,135042,134589],{"class":153},[139,135044,2265],{"class":145},[139,135046,536],{"class":153},[139,135048,53729],{"class":149},[139,135050,134598],{"class":145},[139,135052,134601],{"class":2512},[139,135054,135055,135057,135059,135061,135063,135065],{"class":141,"line":262},[139,135056,134606],{"class":153},[139,135058,2265],{"class":145},[139,135060,3135],{"class":153},[139,135062,53729],{"class":149},[139,135064,134615],{"class":145},[139,135066,134618],{"class":2512},[139,135068,135069],{"class":141,"line":313},[139,135070,3862],{"class":145},[3760,135072],{"style":128625,"src":135073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135075,135076],{},"(5)粘性定位",[3437,135078,135079,135082],{},[1763,135080,135081],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1763,135083,7459],{},[130,135085,135086],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,135087,135088,135094,135106,135120,135134],{"__ignoreMap":135},[139,135089,135090,135092],{"class":141,"line":142},[139,135091,132617],{"class":781},[139,135093,17840],{"class":145},[139,135095,135096,135098,135100,135102,135104],{"class":141,"line":210},[139,135097,134575],{"class":153},[139,135099,2265],{"class":145},[139,135101,56998],{"class":153},[139,135103,132632],{"class":145},[139,135105,134584],{"class":2512},[139,135107,135108,135110,135112,135114,135116,135118],{"class":141,"line":254},[139,135109,134589],{"class":153},[139,135111,2265],{"class":145},[139,135113,536],{"class":153},[139,135115,53729],{"class":149},[139,135117,134598],{"class":145},[139,135119,134601],{"class":2512},[139,135121,135122,135124,135126,135128,135130,135132],{"class":141,"line":262},[139,135123,134606],{"class":153},[139,135125,2265],{"class":145},[139,135127,3135],{"class":153},[139,135129,53729],{"class":149},[139,135131,134615],{"class":145},[139,135133,134618],{"class":2512},[139,135135,135136],{"class":141,"line":313},[139,135137,3862],{"class":145},[3437,135139,135140],{},[1763,135141,135142,135143,135145,135146,135148,135149,135151,135152,135155,135156,135158],{},"粘性定位的特点：",[55951,135144],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55951,135147],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55951,135150],{},"  ③必须添加 top 、left、right、bottom ",[1674,135153,135154],{},"其中一个"," 才有效",[55951,135157],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[130,135160,135161],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,135162,135163,135169,135181,135195,135209],{"__ignoreMap":135},[139,135164,135165,135167],{"class":141,"line":142},[139,135166,132617],{"class":781},[139,135168,17840],{"class":145},[139,135170,135171,135173,135175,135177,135179],{"class":141,"line":210},[139,135172,134575],{"class":153},[139,135174,2265],{"class":145},[139,135176,56998],{"class":153},[139,135178,132632],{"class":145},[139,135180,134584],{"class":2512},[139,135182,135183,135185,135187,135189,135191,135193],{"class":141,"line":254},[139,135184,134589],{"class":153},[139,135186,2265],{"class":145},[139,135188,536],{"class":153},[139,135190,53729],{"class":149},[139,135192,134598],{"class":145},[139,135194,134601],{"class":2512},[139,135196,135197,135199,135201,135203,135205,135207],{"class":141,"line":262},[139,135198,134606],{"class":153},[139,135200,2265],{"class":145},[139,135202,3135],{"class":153},[139,135204,53729],{"class":149},[139,135206,134615],{"class":145},[139,135208,134618],{"class":2512},[139,135210,135211],{"class":141,"line":313},[139,135212,3862],{"class":145},[3760,135214],{"style":128625,"src":135215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135217,135218],{},"(6)总结",[26,135220,135221,135236],{},[29,135222,135223],{},[32,135224,135225,135227,135230,135233],{},[35,135226,134559],{"align":26003},[35,135228,135229],{"align":26003},"是否脱标",[35,135231,135232],{"align":26003},"移动位置",[35,135234,135235],{"align":26003},"是否常用",[42,135237,135238,135251,135265,135279,135292],{},[32,135239,135240,135243,135245,135248],{},[47,135241,135242],{"align":26003},"Static 静态定位",[47,135244,106901],{"align":26003},[47,135246,135247],{"align":26003},"不能使用边偏移",[47,135249,135250],{"align":26003},"很少",[32,135252,135253,135256,135259,135262],{},[47,135254,135255],{"align":26003},"Relative 相对定位",[47,135257,135258],{"align":26003},"否(占有位置)",[47,135260,135261],{"align":26003},"相对于自身位置移动",[47,135263,135264],{"align":26003},"基本单独使用",[32,135266,135267,135270,135273,135276],{},[47,135268,135269],{"align":26003},"Absolute 绝对定位",[47,135271,135272],{"align":26003},"是(不占有位置)",[47,135274,135275],{"align":26003},"带有定位的父级",[47,135277,135278],{"align":26003},"要和定位父级元素搭配使用",[32,135280,135281,135284,135286,135289],{},[47,135282,135283],{"align":26003},"Fixed 固定定位",[47,135285,135272],{"align":26003},[47,135287,135288],{"align":26003},"浏览器可视区",[47,135290,135291],{"align":26003},"单独使用,不需要父级",[32,135293,135294,135297,135299,135301],{},[47,135295,135296],{"align":26003},"Sticky 粘性定位",[47,135298,135258],{"align":26003},[47,135300,135288],{"align":26003},[47,135302,135303],{"align":26003},"当前阶段少",[1760,135305,135306],{"start":210},[1763,135307,135308,135311],{},[1674,135309,135310],{},"边偏移"," 则决定了该元素的最终位置",[26,135313,135314,135325],{},[29,135315,135316],{},[32,135317,135318,135321,135323],{},[35,135319,135320],{"align":26003},"边偏移属性",[35,135322,29752],{"align":26003},[35,135324,29749],{"align":26003},[42,135326,135327,135338,135349,135359],{},[32,135328,135329,135332,135335],{},[47,135330,135331],{"align":26003},"top",[47,135333,135334],{"align":26003},"top: 80px;",[47,135336,135337],{"align":26003},"顶端偏移量，定义元素相对于父元素上边线的距离",[32,135339,135340,135343,135346],{},[47,135341,135342],{"align":26003},"bottom",[47,135344,135345],{"align":26003},"bottom: 80px ;",[47,135347,135348],{"align":26003},"底部偏移量，定义元素相对于其父元素下边线的距离",[32,135350,135351,135353,135356],{},[47,135352,26003],{"align":26003},[47,135354,135355],{"align":26003},"left: 80px ;",[47,135357,135358],{"align":26003},"左侧偏移量，定义元素相对于其父元素左边线的距离",[32,135360,135361,135363,135366],{},[47,135362,74751],{"align":26003},[47,135364,135365],{"align":26003},"right: 80px ;",[47,135367,135368],{"align":26003},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3437,135370,135371],{},[1763,135372,11299,135373,135375,135376,135378,135379,135381,135382,135385,135386,135388,135389,135391],{},[55951,135374],{},"  ① ",[1674,135377,135310],{}," 需要和 ",[1674,135380,134559],{}," 联合使用， ",[1674,135383,135384],{},"单独使用无效"," ；",[55951,135387],{},"  ②top和bottom不要同时使用",[55951,135390],{},"  ③left和right不要同时使用",[24265,135393,135395],{"id":135394},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135397,135398],{},"子级是绝对定位的话，父级要用相对定位",[3437,135400,135401,135404,135407,135410],{},[1763,135402,135403],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1763,135405,135406],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1763,135408,135409],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1763,135411,135412,135413,135416],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1674,135414,135415],{},"子绝父绝"," 也会遇到",[24265,135418,135420],{"id":135419},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3437,135422,135423,135438],{},[1763,135424,135425,135426,135429,135430,135433,135434,135437],{},"在使用 ",[1674,135427,135428],{},"定位"," 布局时，可能会 ",[1674,135431,135432],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1674,135435,135436],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1763,135439,7459],{},[130,135441,135442],{"className":128769,"code":134562,"language":128771,"meta":135,"style":135},[50,135443,135444,135450,135462,135476,135490],{"__ignoreMap":135},[139,135445,135446,135448],{"class":141,"line":142},[139,135447,132617],{"class":781},[139,135449,17840],{"class":145},[139,135451,135452,135454,135456,135458,135460],{"class":141,"line":210},[139,135453,134575],{"class":153},[139,135455,2265],{"class":145},[139,135457,56998],{"class":153},[139,135459,132632],{"class":145},[139,135461,134584],{"class":2512},[139,135463,135464,135466,135468,135470,135472,135474],{"class":141,"line":254},[139,135465,134589],{"class":153},[139,135467,2265],{"class":145},[139,135469,536],{"class":153},[139,135471,53729],{"class":149},[139,135473,134598],{"class":145},[139,135475,134601],{"class":2512},[139,135477,135478,135480,135482,135484,135486,135488],{"class":141,"line":262},[139,135479,134606],{"class":153},[139,135481,2265],{"class":145},[139,135483,3135],{"class":153},[139,135485,53729],{"class":149},[139,135487,134615],{"class":145},[139,135489,134618],{"class":2512},[139,135491,135492],{"class":141,"line":313},[139,135493,3862],{"class":145},[3437,135495,135496],{},[1763,135497,135498,135499,135375,135501,135503,135504,129932,135507,84767,135510,135512,135513,135515,135516,135519,135520,135385,135523,135525,135526,135529,135531],{},"z-index的特性",[55951,135500],{},[1674,135502,129233],{}," ： ",[1674,135505,135506],{},"正整数",[1674,135508,135509],{},"负整数",[1674,135511,2634],{}," ，默认值是 0，数值越大，盒子越靠上；",[55951,135514],{},"  ②如果 ",[1674,135517,135518],{},"属性值相同"," ，则按照书写顺序， ",[1674,135521,135522],{},"后来居上",[55951,135524],{},"  ③数字后面 ",[1674,135527,135528],{},"不能加单位",[55951,135530],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24265,135533,135535],{"id":135534},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135537,135538],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135540,135541],{},"方法:",[3437,135543,135544,135554],{},[1763,135545,135546,135547,135550,135551],{},"left: 50%; 让 ",[1674,135548,135549],{},"盒子的左侧"," 移动到 ",[1674,135552,135553],{},"父级元素的水平中心位置",[1763,135555,135556,135557,135560,135561],{},"margin-left: -100px; 让盒子 ",[1674,135558,135559],{},"向左"," 移动 ",[1674,135562,135563],{},"自身宽度的一半",[24265,135565,135567],{"id":135566},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1760,135569,135570,135573],{},[1763,135571,135572],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1763,135574,135575],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135577,135578],{},"也就是说绝对定位和固定定位和浮动类似",[1760,135580,135581],{"start":254},[1763,135582,135583],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3437,135585,135586,135589,135592],{},[1763,135587,135588],{},"可以用inline-block 转换为行内块",[1763,135590,135591],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1763,135593,135594],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135596,135597],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24265,135599,135601],{"id":135600},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1760,135603,135604,135607,135610,135613],{},[1763,135605,135606],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1763,135608,135609],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1763,135611,135612],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1763,135614,135615],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[130,135617,135618],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,135619,135620,135626,135636,135640,135646,135656],{"__ignoreMap":135},[139,135621,135622,135624],{"class":141,"line":142},[139,135623,133242],{"class":781},[139,135625,17840],{"class":145},[139,135627,135628,135630,135632,135634],{"class":141,"line":210},[139,135629,133249],{"class":153},[139,135631,2265],{"class":145},[139,135633,26003],{"class":153},[139,135635,3591],{"class":145},[139,135637,135638],{"class":141,"line":254},[139,135639,3862],{"class":145},[139,135641,135642,135644],{"class":141,"line":262},[139,135643,133264],{"class":781},[139,135645,17840],{"class":145},[139,135647,135648,135650,135652,135654],{"class":141,"line":313},[139,135649,133249],{"class":153},[139,135651,2265],{"class":145},[139,135653,74751],{"class":153},[139,135655,3591],{"class":145},[139,135657,135658],{"class":141,"line":462},[139,135659,3862],{"class":145},[3760,135661],{"style":128625,"src":135662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24265,135664,135666],{"id":135665},"_11138-轮播图","11.1.3.8 轮播图",[3760,135668],{"style":128625,"src":135669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1760,135671,135672],{},[1763,135673,135674],{},"制作顺序:",[3437,135676,135677,135680,135683,135692],{},[1763,135678,135679],{},"大盒子我们类名为： tb-promo 淘宝广告",[1763,135681,135682],{},"里面先放一张图片",[1763,135684,135685,135686,135688,135689,135691],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55951,135687],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55951,135690],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1763,135693,135694,135695,135697,135698,135700],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55951,135696],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55951,135699],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1760,135702,135703],{"start":210},[1763,135704,135705],{},"代码模块",[130,135707,135709],{"className":128769,"code":135708,"language":128771,"meta":135,"style":135},"\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",[50,135710,135711,135716,135723,135733,135743,135753,135757,135762,135769,135779],{"__ignoreMap":135},[139,135712,135713],{"class":141,"line":142},[139,135714,135715],{"class":2512},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[139,135717,135718,135721],{"class":141,"line":210},[139,135719,135720],{"class":781},".son",[139,135722,17840],{"class":145},[139,135724,135725,135727,135729,135731],{"class":141,"line":254},[139,135726,134575],{"class":153},[139,135728,2265],{"class":145},[139,135730,57065],{"class":153},[139,135732,3591],{"class":145},[139,135734,135735,135737,135739,135741],{"class":141,"line":262},[139,135736,134589],{"class":153},[139,135738,2265],{"class":145},[139,135740,2634],{"class":153},[139,135742,3591],{"class":145},[139,135744,135745,135747,135749,135751],{"class":141,"line":313},[139,135746,134606],{"class":153},[139,135748,2265],{"class":145},[139,135750,2634],{"class":153},[139,135752,3591],{"class":145},[139,135754,135755],{"class":141,"line":462},[139,135756,3862],{"class":145},[139,135758,135759],{"class":141,"line":474},[139,135760,135761],{"class":2512},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[139,135763,135764,135767],{"class":141,"line":484},[139,135765,135766],{"class":781},".father",[139,135768,17840],{"class":145},[139,135770,135771,135773,135775,135777],{"class":141,"line":989},[139,135772,134575],{"class":153},[139,135774,2265],{"class":145},[139,135776,56998],{"class":153},[139,135778,3591],{"class":145},[139,135780,135781],{"class":141,"line":994},[139,135782,3862],{"class":145},[19,135784,135785],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1217,135787,135789],{"id":135788},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3760,135791],{"style":128625,"src":135792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135794,135795],{},"✨ 黄金口诀：",[19,135797,135798],{},"\"TOP正下负上，LEFT正右负左\"",[19,135800,135801],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135803,135804],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135806,135807],{},"✨ 简单记：",[19,135809,135810],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2348,135812,135813],{},"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":135,"searchDepth":210,"depth":210,"links":135815},[135816],{"id":134343,"depth":210,"text":134344,"children":135817},[135818,135819,135820,135821],{"id":134347,"depth":254,"text":134348},{"id":134362,"depth":254,"text":134363},{"id":134530,"depth":254,"text":134531},{"id":135788,"depth":254,"text":135789},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134335,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135828,"title":135829,"body":135830,"description":2384,"extension":2385,"meta":137253,"navigation":842,"path":137254,"seo":137255,"stem":137256,"__hash__":137257},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135831,"toc":137232},[135832,135835,135839,135847,135851,135856,135864,135876,135880,135885,135893,135904,135908,135913,135954,135962,135966,135969,135972,135975,136069,136072,136166,136169,136263,136266,136269,136304,136307,136310,136340,136343,136346,136349,136352,136355,136358,136361,136431,136434,136438,136442,136483,136487,136493,136496,136499,136503,136506,136509,136512,136593,136596,136599,136603,136607,136610,136613,136616,136619,136622,136628,136637,136641,136660,136664,136674,136677,136680,136683,136686,136689,136692,136695,136698,136707,136711,136720,136723,136728,136781,136786,136952,136955,136958,136963,136966,136969,136972,136975,136980,137128,137131,137134,137139,137142,137147,137181,137184,137187,137191,137194,137201,137204,137207,137210,137213,137216,137219,137222,137226,137229],[10,135833,135829],{"id":135834},"_12-显示隐藏与图形资源",[14,135836,135838],{"id":135837},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3437,135840,135841,135844],{},[1763,135842,135843],{},"目的:让一个元素在页面中消失或者显示出来",[1763,135845,135846],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1217,135848,135850],{"id":135849},"_1211-display-显示","12.1.1 display 显示",[1760,135852,135853],{},[1763,135854,135855],{},"display 设置或检索对象是否及如何显示",[3437,135857,135858,135861],{},[1763,135859,135860],{},"display: none;隐藏对象",[1763,135862,135863],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1760,135865,135866,135873],{"start":210},[1763,135867,135868,135869,135872],{},"特点： display 隐藏元素后， ",[1674,135870,135871],{},"不再占"," 有原来的位置",[1763,135874,135875],{},"在js中使用非常的广泛",[1217,135877,135879],{"id":135878},"_1212-visibility可见性","12.1.2 visibility可见性",[1760,135881,135882],{},[1763,135883,135884],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3437,135886,135887,135890],{},[1763,135888,135889],{},"visibility： visible；元素可见",[1763,135891,135892],{},"visibility：hidden；元素隐藏",[1760,135894,135895,135898,135901],{"start":210},[1763,135896,135897],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1763,135899,135900],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1763,135902,135903],{},"隐藏后继续占有原有位置",[1217,135905,135907],{"id":135906},"_1213-overflow溢出","12.1.3 overflow溢出",[3437,135909,135910],{},[1763,135911,135912],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[26,135914,135915,135923],{},[29,135916,135917],{},[32,135918,135919,135921],{},[35,135920,129233],{"align":26003},[35,135922,29749],{"align":26003},[42,135924,135925,135933,135940,135947],{},[32,135926,135927,135930],{},[47,135928,135929],{"align":26003},"visible",[47,135931,135932],{"align":26003},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[32,135934,135935,135937],{},[47,135936,63947],{"align":26003},[47,135938,135939],{"align":26003},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[32,135941,135942,135944],{},[47,135943,131189],{"align":26003},[47,135945,135946],{"align":26003},"不管超出内容否，总是显示滚动条",[32,135948,135949,135951],{},[47,135950,74892],{"align":26003},[47,135952,135953],{"align":26003},"超出自动显示滚动条，不超出不显示滚动条",[3437,135955,135956,135959],{},[1763,135957,135958],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1763,135960,135961],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1217,135963,135965],{"id":135964},"_1214-案例收获","12.1.4 案例收获",[3760,135967],{"style":128625,"src":135968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135970,135971],{},"问题：没做出来动态效果，使用hover没实现",[19,135973,135974],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[130,135976,135977],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,135978,135979,135983,135997,136001,136015,136019,136033,136037,136051,136055],{"__ignoreMap":135},[139,135980,135981],{"class":141,"line":142},[139,135982,134208],{"class":2512},[139,135984,135985,135987,135989,135991,135993,135995],{"class":141,"line":210},[139,135986,134213],{"class":781},[139,135988,82036],{"class":145},[139,135990,131129],{"class":153},[139,135992,2265],{"class":145},[139,135994,134222],{"class":153},[139,135996,131699],{"class":145},[139,135998,135999],{"class":141,"line":254},[139,136000,134229],{"class":2512},[139,136002,136003,136005,136007,136009,136011,136013],{"class":141,"line":262},[139,136004,134234],{"class":781},[139,136006,82036],{"class":145},[139,136008,131129],{"class":153},[139,136010,2265],{"class":145},[139,136012,56998],{"class":153},[139,136014,131699],{"class":145},[139,136016,136017],{"class":141,"line":313},[139,136018,134249],{"class":2512},[139,136020,136021,136023,136025,136027,136029,136031],{"class":141,"line":462},[139,136022,134254],{"class":781},[139,136024,82036],{"class":145},[139,136026,131129],{"class":153},[139,136028,2265],{"class":145},[139,136030,57065],{"class":153},[139,136032,131699],{"class":145},[139,136034,136035],{"class":141,"line":474},[139,136036,134269],{"class":2512},[139,136038,136039,136041,136043,136045,136047,136049],{"class":141,"line":484},[139,136040,134274],{"class":781},[139,136042,82036],{"class":145},[139,136044,131129],{"class":153},[139,136046,2265],{"class":145},[139,136048,88461],{"class":153},[139,136050,131699],{"class":145},[139,136052,136053],{"class":141,"line":989},[139,136054,134289],{"class":2512},[139,136056,136057,136059,136061,136063,136065,136067],{"class":141,"line":994},[139,136058,134294],{"class":781},[139,136060,82036],{"class":145},[139,136062,131129],{"class":153},[139,136064,2265],{"class":145},[139,136066,134303],{"class":153},[139,136068,131699],{"class":145},[19,136070,136071],{},"完整代码：",[130,136073,136074],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,136075,136076,136080,136094,136098,136112,136116,136130,136134,136148,136152],{"__ignoreMap":135},[139,136077,136078],{"class":141,"line":142},[139,136079,134208],{"class":2512},[139,136081,136082,136084,136086,136088,136090,136092],{"class":141,"line":210},[139,136083,134213],{"class":781},[139,136085,82036],{"class":145},[139,136087,131129],{"class":153},[139,136089,2265],{"class":145},[139,136091,134222],{"class":153},[139,136093,131699],{"class":145},[139,136095,136096],{"class":141,"line":254},[139,136097,134229],{"class":2512},[139,136099,136100,136102,136104,136106,136108,136110],{"class":141,"line":262},[139,136101,134234],{"class":781},[139,136103,82036],{"class":145},[139,136105,131129],{"class":153},[139,136107,2265],{"class":145},[139,136109,56998],{"class":153},[139,136111,131699],{"class":145},[139,136113,136114],{"class":141,"line":313},[139,136115,134249],{"class":2512},[139,136117,136118,136120,136122,136124,136126,136128],{"class":141,"line":462},[139,136119,134254],{"class":781},[139,136121,82036],{"class":145},[139,136123,131129],{"class":153},[139,136125,2265],{"class":145},[139,136127,57065],{"class":153},[139,136129,131699],{"class":145},[139,136131,136132],{"class":141,"line":474},[139,136133,134269],{"class":2512},[139,136135,136136,136138,136140,136142,136144,136146],{"class":141,"line":484},[139,136137,134274],{"class":781},[139,136139,82036],{"class":145},[139,136141,131129],{"class":153},[139,136143,2265],{"class":145},[139,136145,88461],{"class":153},[139,136147,131699],{"class":145},[139,136149,136150],{"class":141,"line":989},[139,136151,134289],{"class":2512},[139,136153,136154,136156,136158,136160,136162,136164],{"class":141,"line":994},[139,136155,134294],{"class":781},[139,136157,82036],{"class":145},[139,136159,131129],{"class":153},[139,136161,2265],{"class":145},[139,136163,134303],{"class":153},[139,136165,131699],{"class":145},[19,136167,136168],{},"分布思路重点详解：",[130,136170,136171],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,136172,136173,136177,136191,136195,136209,136213,136227,136231,136245,136249],{"__ignoreMap":135},[139,136174,136175],{"class":141,"line":142},[139,136176,134208],{"class":2512},[139,136178,136179,136181,136183,136185,136187,136189],{"class":141,"line":210},[139,136180,134213],{"class":781},[139,136182,82036],{"class":145},[139,136184,131129],{"class":153},[139,136186,2265],{"class":145},[139,136188,134222],{"class":153},[139,136190,131699],{"class":145},[139,136192,136193],{"class":141,"line":254},[139,136194,134229],{"class":2512},[139,136196,136197,136199,136201,136203,136205,136207],{"class":141,"line":262},[139,136198,134234],{"class":781},[139,136200,82036],{"class":145},[139,136202,131129],{"class":153},[139,136204,2265],{"class":145},[139,136206,56998],{"class":153},[139,136208,131699],{"class":145},[139,136210,136211],{"class":141,"line":313},[139,136212,134249],{"class":2512},[139,136214,136215,136217,136219,136221,136223,136225],{"class":141,"line":462},[139,136216,134254],{"class":781},[139,136218,82036],{"class":145},[139,136220,131129],{"class":153},[139,136222,2265],{"class":145},[139,136224,57065],{"class":153},[139,136226,131699],{"class":145},[139,136228,136229],{"class":141,"line":474},[139,136230,134269],{"class":2512},[139,136232,136233,136235,136237,136239,136241,136243],{"class":141,"line":484},[139,136234,134274],{"class":781},[139,136236,82036],{"class":145},[139,136238,131129],{"class":153},[139,136240,2265],{"class":145},[139,136242,88461],{"class":153},[139,136244,131699],{"class":145},[139,136246,136247],{"class":141,"line":989},[139,136248,134289],{"class":2512},[139,136250,136251,136253,136255,136257,136259,136261],{"class":141,"line":994},[139,136252,134294],{"class":781},[139,136254,82036],{"class":145},[139,136256,131129],{"class":153},[139,136258,2265],{"class":145},[139,136260,134303],{"class":153},[139,136262,131699],{"class":145},[3760,136264],{"style":128625,"src":136265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136267,136268],{},"图片太大，盒子太小，此时需要修改图片的大小",[130,136270,136272],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[50,136273,136274],{"__ignoreMap":135},[139,136275,136276,136278,136280,136282,136284,136287,136289,136291,136294,136297,136299,136302],{"class":141,"line":142},[139,136277,796],{"class":145},[139,136279,3760],{"class":53538},[139,136281,57473],{"class":781},[139,136283,150],{"class":145},[139,136285,136286],{"class":160},"\"images\u002Fpic.jpg\"",[139,136288,57481],{"class":781},[139,136290,150],{"class":145},[139,136292,136293],{"class":160},"\"描述文字\"",[139,136295,136296],{"class":781}," title",[139,136298,150],{"class":145},[139,136300,136301],{"class":160},"\"悬停提示\"",[139,136303,53545],{"class":145},[3760,136305],{"style":128625,"src":136306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136308,136309],{},"制造遮罩层",[130,136311,136312],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,136313,136314],{"__ignoreMap":135},[139,136315,136316,136318,136320,136322,136324,136326,136328,136330,136332,136334,136336,136338],{"class":141,"line":142},[139,136317,796],{"class":145},[139,136319,3760],{"class":53538},[139,136321,57473],{"class":781},[139,136323,150],{"class":145},[139,136325,136286],{"class":160},[139,136327,57481],{"class":781},[139,136329,150],{"class":145},[139,136331,136293],{"class":160},[139,136333,136296],{"class":781},[139,136335,150],{"class":145},[139,136337,136301],{"class":160},[139,136339,53545],{"class":145},[19,136341,136342],{},"此时是这样的为标准流",[3760,136344],{"style":128625,"src":136345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136347,136348],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136350,136351],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136353,136354],{},"让他在中间，用center(background-position)",[19,136356,136357],{},"将需要变的尽可能放到一个盒子中",[19,136359,136360],{},"放大盒子上内部盒子发生变化",[130,136362,136364],{"className":128769,"code":136363,"language":128771,"meta":135,"style":135},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[50,136365,136366,136372,136382,136386,136393,136403,136415,136427],{"__ignoreMap":135},[139,136367,136368,136370],{"class":141,"line":142},[139,136369,129836],{"class":781},[139,136371,17840],{"class":145},[139,136373,136374,136376,136378,136380],{"class":141,"line":210},[139,136375,134575],{"class":153},[139,136377,2265],{"class":145},[139,136379,56998],{"class":153},[139,136381,3591],{"class":145},[139,136383,136384],{"class":141,"line":254},[139,136385,3862],{"class":145},[139,136387,136388,136391],{"class":141,"line":262},[139,136389,136390],{"class":781},".child",[139,136392,17840],{"class":145},[139,136394,136395,136397,136399,136401],{"class":141,"line":313},[139,136396,134575],{"class":153},[139,136398,2265],{"class":145},[139,136400,57065],{"class":153},[139,136402,3591],{"class":145},[139,136404,136405,136407,136409,136411,136413],{"class":141,"line":462},[139,136406,134589],{"class":153},[139,136408,2265],{"class":145},[139,136410,3091],{"class":153},[139,136412,2766],{"class":149},[139,136414,3591],{"class":145},[139,136416,136417,136419,136421,136423,136425],{"class":141,"line":474},[139,136418,134606],{"class":153},[139,136420,2265],{"class":145},[139,136422,3091],{"class":153},[139,136424,2766],{"class":149},[139,136426,3591],{"class":145},[139,136428,136429],{"class":141,"line":484},[139,136430,3862],{"class":145},[19,136432,136433],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136435,136437],{"id":136436},"_122-精灵图","12.2 精灵图",[1217,136439,136441],{"id":136440},"_1221-理解","12.2.1 理解",[1760,136443,136444,136462],{},[1763,136445,136446,136447,134675,136450,136453,136454,136457,136458,136461],{},"目的： ",[1674,136448,136449],{},"为了有效地减少服务器接收和发送请求的次数",[1674,136451,136452],{},"提高"," 页面的 ",[1674,136455,136456],{},"加载速度"," ，出现了 ",[1674,136459,136460],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1763,136463,136464,136465,136467,136468,136470,136471,136473,136474,136476,136477,136479,136480,136482],{},"使用精灵图核心：",[55951,136466],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55951,136469],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55951,136472],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55951,136475],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55951,136478],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55951,136481],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1217,136484,136486],{"id":136485},"_1222-扒图","12.2.2 扒图",[130,136488,136491],{"className":136489,"code":136490,"language":645},[643],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[50,136492,136490],{"__ignoreMap":135},[3760,136494],{"style":128625,"src":136495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3760,136497],{"style":128625,"src":136498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1217,136500,136502],{"id":136501},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3760,136504],{"style":128625,"src":136505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136507,136508],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3760,136510],{"style":128625,"src":136511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[130,136513,136515],{"className":128769,"code":136514,"language":128771,"meta":135,"style":135},"\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",[50,136516,136517,136522,136529,136541,136553,136572,136589],{"__ignoreMap":135},[139,136518,136519],{"class":141,"line":142},[139,136520,136521],{"class":2512},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[139,136523,136524,136527],{"class":141,"line":210},[139,136525,136526],{"class":781},".icon",[139,136528,17840],{"class":145},[139,136530,136531,136533,136535,136537,136539],{"class":141,"line":254},[139,136532,72797],{"class":153},[139,136534,2265],{"class":145},[139,136536,3135],{"class":153},[139,136538,53729],{"class":149},[139,136540,3591],{"class":145},[139,136542,136543,136545,136547,136549,136551],{"class":141,"line":262},[139,136544,73017],{"class":153},[139,136546,2265],{"class":145},[139,136548,3135],{"class":153},[139,136550,53729],{"class":149},[139,136552,3591],{"class":145},[139,136554,136555,136557,136559,136561,136563,136566,136568,136570],{"class":141,"line":313},[139,136556,72840],{"class":153},[139,136558,2265],{"class":145},[139,136560,63959],{"class":153},[139,136562,157],{"class":145},[139,136564,136565],{"class":2111},"sprites.png",[139,136567,2120],{"class":145},[139,136569,63969],{"class":153},[139,136571,3591],{"class":145},[139,136573,136574,136576,136578,136580,136582,136585,136587],{"class":141,"line":462},[139,136575,131029],{"class":153},[139,136577,2265],{"class":145},[139,136579,54000],{"class":153},[139,136581,53729],{"class":149},[139,136583,136584],{"class":153}," -20",[139,136586,53729],{"class":149},[139,136588,3591],{"class":145},[139,136590,136591],{"class":141,"line":474},[139,136592,3862],{"class":145},[3760,136594],{"style":128625,"src":136595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136597,136598],{},"在前端中坐标轴的正方向是右和下",[14,136600,136602],{"id":136601},"_123-字体图标","12.3 字体图标",[1217,136604,136606],{"id":136605},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136608,136609],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136611,136612],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136614,136615],{},"1.图片文件还是比较大的。",[19,136617,136618],{},"2.图片本身放大和缩小会失真。",[19,136620,136621],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136623,136624,136625,28003],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1674,136626,136627],{},"字体图标 iconfont",[19,136629,136630,136633,136634,170],{},[1674,136631,136632],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1674,136635,136636],{},"展示的是图标，本质属于字体",[1217,136638,136640],{"id":136639},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3437,136642,136643,136648,136651,136654,136657],{},[1763,136644,136645,136647],{},[1674,136646,28138],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1763,136649,136650],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1763,136652,136653],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1763,136655,136656],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1763,136658,136659],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1217,136661,136663],{"id":136662},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3437,136665,136666],{},[1763,136667,136668,136669],{},"icomoon字体库：",[2680,136670,136673],{"href":136671,"rel":136672},"http:\u002F\u002Ficomoon.io\u002F",[26128],"http:\u002F\u002Ficomoon.io",[19,136675,136676],{},"进去之后点icomoon app",[3760,136678],{"style":128625,"src":136679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136681,136682],{},"可以对其编辑：",[3760,136684],{"style":128625,"src":136685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136687,136688],{},"生成字体：",[3760,136690],{"style":128625,"src":136691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136693,136694],{},"下载：",[3760,136696],{"style":128625,"src":136697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3437,136699,136700],{},[1763,136701,136702,136703],{},"阿里iconfont字体库： ",[2680,136704,136705],{"href":136705,"rel":136706},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26128],[1217,136708,136710],{"id":136709},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1760,136712,136713],{},[1763,136714,136715,136716,136719],{},"把下载包里面的 ",[1674,136717,136718],{},"fonts"," 文件夹放入页面根目录下",[3760,136721],{"style":128625,"src":136722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1760,136724,136725],{"start":210},[1763,136726,136727],{},"字体文件格式",[26,136729,136730,136739],{},[29,136731,136732],{},[32,136733,136734,136737],{},[35,136735,136736],{"align":26003},"格式",[35,136738,26007],{"align":26003},[42,136740,136741,136751,136761,136771],{},[32,136742,136743,136748],{},[47,136744,136745],{"align":26003},[1674,136746,136747],{},".ttf",[47,136749,136750],{"align":26003},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[32,136752,136753,136758],{},[47,136754,136755],{"align":26003},[1674,136756,136757],{},".woff",[47,136759,136760],{"align":26003},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[32,136762,136763,136768],{},[47,136764,136765],{"align":26003},[1674,136766,136767],{},".eot",[47,136769,136770],{"align":26003},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[32,136772,136773,136778],{},[47,136774,136775],{"align":26003},[1674,136776,136777],{},"svg",[47,136779,136780],{"align":26003},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1760,136782,136783],{"start":254},[1763,136784,136785],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[130,136787,136789],{"className":128769,"code":136788,"language":128771,"meta":135,"style":135},"\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",[50,136790,136791,136796,136803,136815,136831,136856,136877,136897,136917,136921,136927,136937,136948],{"__ignoreMap":135},[139,136792,136793],{"class":141,"line":142},[139,136794,136795],{"class":2512},"\u002F* 引入字体图标 *\u002F\n",[139,136797,136798,136801],{"class":141,"line":210},[139,136799,136800],{"class":149},"@font-face",[139,136802,17840],{"class":145},[139,136804,136805,136808,136810,136813],{"class":141,"line":254},[139,136806,136807],{"class":153},"  font-family",[139,136809,2265],{"class":145},[139,136811,136812],{"class":160},"'icomoon'",[139,136814,3591],{"class":145},[139,136816,136817,136820,136822,136824,136826,136829],{"class":141,"line":262},[139,136818,136819],{"class":153},"  src",[139,136821,2265],{"class":145},[139,136823,63959],{"class":153},[139,136825,157],{"class":145},[139,136827,136828],{"class":160},"'fonts\u002Ficomoon.eot'",[139,136830,5002],{"class":145},[139,136832,136833,136835,136837,136839,136841,136844,136846,136849,136851,136854],{"class":141,"line":313},[139,136834,136819],{"class":153},[139,136836,2265],{"class":145},[139,136838,63959],{"class":153},[139,136840,157],{"class":145},[139,136842,136843],{"class":160},"'fonts\u002Ficomoon.eot?#iefix'",[139,136845,2120],{"class":145},[139,136847,136848],{"class":153},"format",[139,136850,157],{"class":145},[139,136852,136853],{"class":160},"'embedded-opentype'",[139,136855,40290],{"class":145},[139,136857,136858,136861,136863,136866,136868,136870,136872,136875],{"class":141,"line":462},[139,136859,136860],{"class":153},"       url",[139,136862,157],{"class":145},[139,136864,136865],{"class":160},"'fonts\u002Ficomoon.woff'",[139,136867,2120],{"class":145},[139,136869,136848],{"class":153},[139,136871,157],{"class":145},[139,136873,136874],{"class":160},"'woff'",[139,136876,40290],{"class":145},[139,136878,136879,136881,136883,136886,136888,136890,136892,136895],{"class":141,"line":474},[139,136880,136860],{"class":153},[139,136882,157],{"class":145},[139,136884,136885],{"class":160},"'fonts\u002Ficomoon.ttf'",[139,136887,2120],{"class":145},[139,136889,136848],{"class":153},[139,136891,157],{"class":145},[139,136893,136894],{"class":160},"'truetype'",[139,136896,40290],{"class":145},[139,136898,136899,136901,136903,136906,136908,136910,136912,136915],{"class":141,"line":484},[139,136900,136860],{"class":153},[139,136902,157],{"class":145},[139,136904,136905],{"class":160},"'fonts\u002Ficomoon.svg#icomoon'",[139,136907,2120],{"class":145},[139,136909,136848],{"class":153},[139,136911,157],{"class":145},[139,136913,136914],{"class":160},"'svg'",[139,136916,5002],{"class":145},[139,136918,136919],{"class":141,"line":989},[139,136920,3862],{"class":145},[139,136922,136923,136925],{"class":141,"line":994},[139,136924,136526],{"class":781},[139,136926,17840],{"class":145},[139,136928,136929,136931,136933,136935],{"class":141,"line":999},[139,136930,136807],{"class":153},[139,136932,2265],{"class":145},[139,136934,136812],{"class":160},[139,136936,3591],{"class":145},[139,136938,136939,136942,136944,136946],{"class":141,"line":1006},[139,136940,136941],{"class":153},"  font-style",[139,136943,2265],{"class":145},[139,136945,66073],{"class":153},[139,136947,3591],{"class":145},[139,136949,136950],{"class":141,"line":1027},[139,136951,3862],{"class":145},[19,136953,136954],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3760,136956],{"style":128625,"src":136957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1760,136959,136960],{"start":262},[1763,136961,136962],{},"添加字体",[3760,136964],{"style":128625,"src":136965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136967,136968],{},"复制：",[3760,136970],{"style":128625,"src":136971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136973,136974],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1760,136976,136977],{"start":313},[1763,136978,136979],{},"代码展示：",[130,136981,136982],{"className":128769,"code":136788,"language":128771,"meta":135,"style":135},[50,136983,136984,136988,136994,137004,137018,137040,137058,137076,137094,137098,137104,137114,137124],{"__ignoreMap":135},[139,136985,136986],{"class":141,"line":142},[139,136987,136795],{"class":2512},[139,136989,136990,136992],{"class":141,"line":210},[139,136991,136800],{"class":149},[139,136993,17840],{"class":145},[139,136995,136996,136998,137000,137002],{"class":141,"line":254},[139,136997,136807],{"class":153},[139,136999,2265],{"class":145},[139,137001,136812],{"class":160},[139,137003,3591],{"class":145},[139,137005,137006,137008,137010,137012,137014,137016],{"class":141,"line":262},[139,137007,136819],{"class":153},[139,137009,2265],{"class":145},[139,137011,63959],{"class":153},[139,137013,157],{"class":145},[139,137015,136828],{"class":160},[139,137017,5002],{"class":145},[139,137019,137020,137022,137024,137026,137028,137030,137032,137034,137036,137038],{"class":141,"line":313},[139,137021,136819],{"class":153},[139,137023,2265],{"class":145},[139,137025,63959],{"class":153},[139,137027,157],{"class":145},[139,137029,136843],{"class":160},[139,137031,2120],{"class":145},[139,137033,136848],{"class":153},[139,137035,157],{"class":145},[139,137037,136853],{"class":160},[139,137039,40290],{"class":145},[139,137041,137042,137044,137046,137048,137050,137052,137054,137056],{"class":141,"line":462},[139,137043,136860],{"class":153},[139,137045,157],{"class":145},[139,137047,136865],{"class":160},[139,137049,2120],{"class":145},[139,137051,136848],{"class":153},[139,137053,157],{"class":145},[139,137055,136874],{"class":160},[139,137057,40290],{"class":145},[139,137059,137060,137062,137064,137066,137068,137070,137072,137074],{"class":141,"line":474},[139,137061,136860],{"class":153},[139,137063,157],{"class":145},[139,137065,136885],{"class":160},[139,137067,2120],{"class":145},[139,137069,136848],{"class":153},[139,137071,157],{"class":145},[139,137073,136894],{"class":160},[139,137075,40290],{"class":145},[139,137077,137078,137080,137082,137084,137086,137088,137090,137092],{"class":141,"line":484},[139,137079,136860],{"class":153},[139,137081,157],{"class":145},[139,137083,136905],{"class":160},[139,137085,2120],{"class":145},[139,137087,136848],{"class":153},[139,137089,157],{"class":145},[139,137091,136914],{"class":160},[139,137093,5002],{"class":145},[139,137095,137096],{"class":141,"line":989},[139,137097,3862],{"class":145},[139,137099,137100,137102],{"class":141,"line":994},[139,137101,136526],{"class":781},[139,137103,17840],{"class":145},[139,137105,137106,137108,137110,137112],{"class":141,"line":999},[139,137107,136807],{"class":153},[139,137109,2265],{"class":145},[139,137111,136812],{"class":160},[139,137113,3591],{"class":145},[139,137115,137116,137118,137120,137122],{"class":141,"line":1006},[139,137117,136941],{"class":153},[139,137119,2265],{"class":145},[139,137121,66073],{"class":153},[139,137123,3591],{"class":145},[139,137125,137126],{"class":141,"line":1027},[139,137127,3862],{"class":145},[3760,137129],{"style":128625,"src":137130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137132,137133],{},"更加细节展示：",[1760,137135,137136],{},[1763,137137,137138],{},"html 标签内添加小图标",[3760,137140],{"style":128625,"src":137141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1760,137143,137144],{"start":210},[1763,137145,137146],{},"给标签定义字体",[130,137148,137149],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,137150,137151,137155,137169,137173],{"__ignoreMap":135},[139,137152,137153],{"class":141,"line":142},[139,137154,132880],{"class":2512},[139,137156,137157,137159,137161,137163,137165,137167],{"class":141,"line":210},[139,137158,796],{"class":145},[139,137160,53848],{"class":53538},[139,137162,55721],{"class":781},[139,137164,150],{"class":145},[139,137166,132893],{"class":160},[139,137168,53545],{"class":145},[139,137170,137171],{"class":141,"line":254},[139,137172,132900],{"class":145},[139,137174,137175,137177,137179],{"class":141,"line":262},[139,137176,54022],{"class":145},[139,137178,53848],{"class":53538},[139,137180,53545],{"class":145},[19,137182,137183],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3760,137185],{"style":128625,"src":137186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1217,137188,137190],{"id":137189},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137192,137193],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137195,137196,137197,137200],{},"把压缩包里面的 ",[1674,137198,137199],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137202,137203],{},"打开网站，点下方：",[3760,137205],{"style":128625,"src":137206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3760,137208],{"style":128625,"src":137209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3760,137211],{"style":128625,"src":137212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137214,137215],{},"点yes重新加载",[19,137217,137218],{},"然后重复之前的操作就可以实现了",[19,137220,137221],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1217,137223,137225],{"id":137224},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3760,137227],{"style":128625,"src":137228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2348,137230,137231],{},"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":135,"searchDepth":210,"depth":210,"links":137233},[137234,137240,137245],{"id":135837,"depth":210,"text":135838,"children":137235},[137236,137237,137238,137239],{"id":135849,"depth":254,"text":135850},{"id":135878,"depth":254,"text":135879},{"id":135906,"depth":254,"text":135907},{"id":135964,"depth":254,"text":135965},{"id":136436,"depth":210,"text":136437,"children":137241},[137242,137243,137244],{"id":136440,"depth":254,"text":136441},{"id":136485,"depth":254,"text":136486},{"id":136501,"depth":254,"text":136502},{"id":136601,"depth":210,"text":136602,"children":137246},[137247,137248,137249,137250,137251,137252],{"id":136605,"depth":254,"text":136606},{"id":136639,"depth":254,"text":136640},{"id":136662,"depth":254,"text":136663},{"id":136709,"depth":254,"text":136710},{"id":137189,"depth":254,"text":137190},{"id":137224,"depth":254,"text":137225},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135829,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137259,"title":137260,"body":137261,"description":2384,"extension":2385,"meta":138488,"navigation":842,"path":138489,"seo":138490,"stem":138491,"__hash__":138492},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137262,"toc":138469},[137263,137266,137270,137273,137287,137355,137385,137388,137392,137396,137498,137545,137549,137552,137555,137589,137592,137595,137598,137601,137604,137607,137610,137612,137615,137618,137621,137624,137627,137630,137633,137661,137664,137668,137671,137678,137681,137684,137710,137713,137717,137720,137723,137730,137734,137737,137739,137771,137774,137777,137789,137795,137798,137801,137804,137806,137810,137813,137816,137819,137864,137868,137870,137873,137880,137922,137925,137929,137934,137948,137952,137955,137958,137961,137964,137967,138001,138004,138007,138061,138064,138067,138070,138073,138125,138128,138131,138180,138184,138186,138189,138192,138195,138198,138201,138259,138262,138268,138271,138274,138306,138309,138313,138317,138320,138352,138356,138359,138403,138407,138410,138413,138416,138419,138422,138425,138428,138430,138433,138435,138438,138441,138444,138447,138452,138455,138457,138460,138463,138466],[10,137264,137260],{"id":137265},"_13-界面样式与布局技巧",[14,137267,137269],{"id":137268},"_131-css三角","13.1 css三角",[19,137271,137272],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3437,137274,137275,137278,137281,137284],{},[1763,137276,137277],{},"用css 边框可以模拟三角效果",[1763,137279,137280],{},"宽度高度为0",[1763,137282,137283],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1763,137285,137286],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[130,137288,137290],{"className":128769,"code":137289,"language":128771,"meta":135,"style":135},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[50,137291,137292,137297,137304,137314,137324,137340,137351],{"__ignoreMap":135},[139,137293,137294],{"class":141,"line":142},[139,137295,137296],{"class":2512},"\u002F* CSS 实现三角形 *\u002F\n",[139,137298,137299,137302],{"class":141,"line":210},[139,137300,137301],{"class":781},".triangle",[139,137303,17840],{"class":145},[139,137305,137306,137308,137310,137312],{"class":141,"line":254},[139,137307,72797],{"class":153},[139,137309,2265],{"class":145},[139,137311,2634],{"class":153},[139,137313,3591],{"class":145},[139,137315,137316,137318,137320,137322],{"class":141,"line":262},[139,137317,73017],{"class":153},[139,137319,2265],{"class":145},[139,137321,2634],{"class":153},[139,137323,3591],{"class":145},[139,137325,137326,137328,137330,137332,137334,137336,137338],{"class":141,"line":313},[139,137327,73125],{"class":153},[139,137329,2265],{"class":145},[139,137331,536],{"class":153},[139,137333,53729],{"class":149},[139,137335,53758],{"class":153},[139,137337,66223],{"class":153},[139,137339,3591],{"class":145},[139,137341,137342,137345,137347,137349],{"class":141,"line":462},[139,137343,137344],{"class":153},"  border-bottom-color",[139,137346,2265],{"class":145},[139,137348,64602],{"class":153},[139,137350,3591],{"class":145},[139,137352,137353],{"class":141,"line":474},[139,137354,3862],{"class":145},[130,137356,137357],{"className":128769,"code":132926,"language":128771,"meta":135,"style":135},[50,137358,137359,137365,137381],{"__ignoreMap":135},[139,137360,137361,137363],{"class":141,"line":142},[139,137362,53848],{"class":53538},[139,137364,17840],{"class":145},[139,137366,137367,137369,137371,137373,137375,137377,137379],{"class":141,"line":210},[139,137368,73125],{"class":153},[139,137370,2265],{"class":145},[139,137372,410],{"class":153},[139,137374,53729],{"class":149},[139,137376,53758],{"class":153},[139,137378,132161],{"class":153},[139,137380,3591],{"class":145},[139,137382,137383],{"class":141,"line":254},[139,137384,3862],{"class":145},[3760,137386],{"style":128625,"src":137387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137389,137391],{"id":137390},"_132-css用户界面样式","13.2 css用户界面样式",[1217,137393,137395],{"id":137394},"_1321-鼠标样式","13.2.1 鼠标样式",[130,137397,137399],{"className":128769,"code":137398,"language":128771,"meta":135,"style":135},"\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",[50,137400,137401,137406,137425,137443,137462,137479],{"__ignoreMap":135},[139,137402,137403],{"class":141,"line":142},[139,137404,137405],{"class":2512},"\u002F* 鼠标样式 *\u002F\n",[139,137407,137408,137410,137412,137415,137417,137419,137422],{"class":141,"line":210},[139,137409,53848],{"class":53538},[139,137411,82036],{"class":145},[139,137413,137414],{"class":153},"cursor",[139,137416,2265],{"class":145},[139,137418,64263],{"class":153},[139,137420,137421],{"class":145},"; }   ",[139,137423,137424],{"class":2512},"\u002F* 手型 *\u002F\n",[139,137426,137427,137429,137431,137433,137435,137438,137440],{"class":141,"line":254},[139,137428,53848],{"class":53538},[139,137430,82036],{"class":145},[139,137432,137414],{"class":153},[139,137434,2265],{"class":145},[139,137436,137437],{"class":153},"default",[139,137439,137421],{"class":145},[139,137441,137442],{"class":2512},"\u002F* 默认 *\u002F\n",[139,137444,137445,137447,137449,137451,137453,137456,137459],{"class":141,"line":262},[139,137446,53848],{"class":53538},[139,137448,82036],{"class":145},[139,137450,137414],{"class":153},[139,137452,2265],{"class":145},[139,137454,137455],{"class":153},"move",[139,137457,137458],{"class":145},"; }      ",[139,137460,137461],{"class":2512},"\u002F* 移动 *\u002F\n",[139,137463,137464,137466,137468,137470,137472,137474,137476],{"class":141,"line":313},[139,137465,53848],{"class":53538},[139,137467,82036],{"class":145},[139,137469,137414],{"class":153},[139,137471,2265],{"class":145},[139,137473,645],{"class":153},[139,137475,137458],{"class":145},[139,137477,137478],{"class":2512},"\u002F* 文本 *\u002F\n",[139,137480,137481,137483,137485,137487,137489,137492,137495],{"class":141,"line":462},[139,137482,53848],{"class":53538},[139,137484,82036],{"class":145},[139,137486,137414],{"class":153},[139,137488,2265],{"class":145},[139,137490,137491],{"class":153},"not-allowed",[139,137493,137494],{"class":145},"; } ",[139,137496,137497],{"class":2512},"\u002F* 禁止 *\u002F\n",[26,137499,137500,137508],{},[29,137501,137502],{},[32,137503,137504,137506],{},[35,137505,129233],{"align":26003},[35,137507,29749],{"align":26003},[42,137509,137510,137517,137524,137531,137538],{},[32,137511,137512,137514],{},[47,137513,137437],{"align":26003},[47,137515,137516],{"align":26003},"小白 默认",[32,137518,137519,137521],{},[47,137520,64263],{"align":26003},[47,137522,137523],{"align":26003},"小手",[32,137525,137526,137528],{},[47,137527,137455],{"align":26003},[47,137529,137530],{"align":26003},"移动",[32,137532,137533,137535],{},[47,137534,645],{"align":26003},[47,137536,137537],{"align":26003},"文本",[32,137539,137540,137542],{},[47,137541,137491],{"align":26003},[47,137543,137544],{"align":26003},"禁止",[1217,137546,137548],{"id":137547},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137550,137551],{},"去除表单轮廓线",[19,137553,137554],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[130,137556,137557],{"className":128769,"code":132133,"language":128771,"meta":135,"style":135},[50,137558,137559,137563,137569,137585],{"__ignoreMap":135},[139,137560,137561],{"class":141,"line":142},[139,137562,132140],{"class":2512},[139,137564,137565,137567],{"class":141,"line":210},[139,137566,53848],{"class":53538},[139,137568,17840],{"class":145},[139,137570,137571,137573,137575,137577,137579,137581,137583],{"class":141,"line":254},[139,137572,73125],{"class":153},[139,137574,2265],{"class":145},[139,137576,410],{"class":153},[139,137578,53729],{"class":149},[139,137580,53758],{"class":153},[139,137582,132161],{"class":153},[139,137584,3591],{"class":145},[139,137586,137587],{"class":141,"line":262},[139,137588,3862],{"class":145},[19,137590,137591],{},"文本域：",[3760,137593],{"style":128625,"src":137594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137596,137597],{},"此时会有一个空白区域",[3760,137599],{"style":128625,"src":137600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137602,137603],{},"写在同一行就不会出现这个问题",[3760,137605],{"style":128625,"src":137606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137608,137609],{},"文本域是行内块元素，一定记住！！！",[19,137611,100460],{},[3760,137613],{"style":128625,"src":137614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137616,137617],{},"文本域尽量放在一行",[19,137619,137620],{},"知识回顾：cols是列，rols是行",[3760,137622],{"style":128625,"src":137623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137625,137626],{},"它可以进行拖动，显然这是我们不愿意看到的",[3760,137628],{"style":128625,"src":137629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137631,137632],{},"使用resize进行解决",[130,137634,137636],{"className":128769,"code":137635,"language":128771,"meta":135,"style":135},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[50,137637,137638,137644,137657],{"__ignoreMap":135},[139,137639,137640,137642],{"class":141,"line":142},[139,137641,199],{"class":53538},[139,137643,17840],{"class":145},[139,137645,137646,137648,137650,137652,137654],{"class":141,"line":210},[139,137647,73027],{"class":153},[139,137649,2265],{"class":145},[139,137651,56971],{"class":153},[139,137653,132632],{"class":145},[139,137655,137656],{"class":2512},"\u002F* 取消表单轮廓线 *\u002F\n",[139,137658,137659],{"class":141,"line":254},[139,137660,3862],{"class":145},[19,137662,137663],{},"此时就无法通过右下方实现拖动了",[1217,137665,137667],{"id":137666},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137669,137670],{},"实现一个盒子中的文字和图片对齐",[19,137672,137673,137674,137677],{},"用于设置一个元素的 ",[1674,137675,137676],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137679,137680],{},"图片和文字默认是基线对齐",[3760,137682],{"style":128625,"src":137683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[130,137685,137686],{"className":128769,"code":137635,"language":128771,"meta":135,"style":135},[50,137687,137688,137694,137706],{"__ignoreMap":135},[139,137689,137690,137692],{"class":141,"line":142},[139,137691,199],{"class":53538},[139,137693,17840],{"class":145},[139,137695,137696,137698,137700,137702,137704],{"class":141,"line":210},[139,137697,73027],{"class":153},[139,137699,2265],{"class":145},[139,137701,56971],{"class":153},[139,137703,132632],{"class":145},[139,137705,137656],{"class":2512},[139,137707,137708],{"class":141,"line":254},[139,137709,3862],{"class":145},[3760,137711],{"style":128625,"src":137712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24265,137714,137716],{"id":137715},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137718,137719],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3760,137721],{"style":128625,"src":137722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137724,137725,137726,137729],{},"此时可以给图片、表单这些行内块元素的 ",[1674,137727,137728],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24265,137731,137733],{"id":137732},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137735,137736],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137738,16904],{},[130,137740,137742],{"className":128769,"code":137741,"language":128771,"meta":135,"style":135},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[50,137743,137744,137749,137755,137767],{"__ignoreMap":135},[139,137745,137746],{"class":141,"line":142},[139,137747,137748],{"class":2512},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[139,137750,137751,137753],{"class":141,"line":210},[139,137752,3760],{"class":53538},[139,137754,17840],{"class":145},[139,137756,137757,137760,137762,137765],{"class":141,"line":254},[139,137758,137759],{"class":153},"  vertical-align",[139,137761,2265],{"class":145},[139,137763,137764],{"class":153},"middle",[139,137766,3591],{"class":145},[139,137768,137769],{"class":141,"line":262},[139,137770,3862],{"class":145},[3760,137772],{"style":128625,"src":137773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137775,137776],{},"主要解决方法有两种：",[1760,137778,137779],{},[1763,137780,137781,137784,137785,137788],{},[1674,137782,137783],{},"给图片"," 添加 ",[1674,137786,137787],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137790,137791,137792],{},"2.把图片转换为块级元素 ",[1674,137793,137794],{},"display: block",[19,137796,137797],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137799,137800],{},"img {",[19,137802,137803],{},"vertical-align:middle;",[19,137805,631],{},[1217,137807,137809],{"id":137808},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137811,137812],{},"效果：",[3760,137814],{"style":128625,"src":137815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137817,137818],{},"单行文本溢出显示省略号--必须满足三个条件：",[130,137820,137822],{"className":128769,"code":137821,"language":128771,"meta":135,"style":135},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[50,137823,137824,137829,137835,137845,137850,137860],{"__ignoreMap":135},[139,137825,137826],{"class":141,"line":142},[139,137827,137828],{"class":2512},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[139,137830,137831,137833],{"class":141,"line":210},[139,137832,3760],{"class":53538},[139,137834,17840],{"class":145},[139,137836,137837,137839,137841,137843],{"class":141,"line":254},[139,137838,137759],{"class":153},[139,137840,2265],{"class":145},[139,137842,137764],{"class":153},[139,137844,3591],{"class":145},[139,137846,137847],{"class":141,"line":262},[139,137848,137849],{"class":2512},"  \u002F* 或 *\u002F\n",[139,137851,137852,137854,137856,137858],{"class":141,"line":313},[139,137853,130385],{"class":153},[139,137855,2265],{"class":145},[139,137857,63102],{"class":153},[139,137859,3591],{"class":145},[139,137861,137862],{"class":141,"line":462},[139,137863,3862],{"class":145},[1217,137865,137867],{"id":137866},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137869,137812],{},[3760,137871],{"style":128625,"src":137872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137874,137875,137876,137879],{},"多行文本溢出显示省略号， ",[1674,137877,137878],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[130,137881,137882],{"className":128769,"code":137821,"language":128771,"meta":135,"style":135},[50,137883,137884,137888,137894,137904,137908,137918],{"__ignoreMap":135},[139,137885,137886],{"class":141,"line":142},[139,137887,137828],{"class":2512},[139,137889,137890,137892],{"class":141,"line":210},[139,137891,3760],{"class":53538},[139,137893,17840],{"class":145},[139,137895,137896,137898,137900,137902],{"class":141,"line":254},[139,137897,137759],{"class":153},[139,137899,2265],{"class":145},[139,137901,137764],{"class":153},[139,137903,3591],{"class":145},[139,137905,137906],{"class":141,"line":262},[139,137907,137849],{"class":2512},[139,137909,137910,137912,137914,137916],{"class":141,"line":313},[139,137911,130385],{"class":153},[139,137913,2265],{"class":145},[139,137915,63102],{"class":153},[139,137917,3591],{"class":145},[139,137919,137920],{"class":141,"line":462},[139,137921,3862],{"class":145},[19,137923,137924],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137926,137928],{"id":137927},"_133-常见布局技巧","13.3 常见布局技巧",[19,137930,137931],{},[1674,137932,137933],{},"巧妙利用一个技术更快更好的布局：",[1760,137935,137936,137939,137942,137945],{},[1763,137937,137938],{},"margin负值的运用",[1763,137940,137941],{},"文字围绕浮动元素",[1763,137943,137944],{},"行内块的巧妙运用",[1763,137946,137947],{},"CSS三角强化",[1217,137949,137951],{"id":137950},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137953,137954],{},"应用场景：",[3760,137956],{"style":128625,"src":137957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3760,137959],{"style":128625,"src":137960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137962,137963],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137965,137966],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[130,137968,137969],{"className":128769,"code":132133,"language":128771,"meta":135,"style":135},[50,137970,137971,137975,137981,137997],{"__ignoreMap":135},[139,137972,137973],{"class":141,"line":142},[139,137974,132140],{"class":2512},[139,137976,137977,137979],{"class":141,"line":210},[139,137978,53848],{"class":53538},[139,137980,17840],{"class":145},[139,137982,137983,137985,137987,137989,137991,137993,137995],{"class":141,"line":254},[139,137984,73125],{"class":153},[139,137986,2265],{"class":145},[139,137988,410],{"class":153},[139,137990,53729],{"class":149},[139,137992,53758],{"class":153},[139,137994,132161],{"class":153},[139,137996,3591],{"class":145},[139,137998,137999],{"class":141,"line":262},[139,138000,3862],{"class":145},[3760,138002],{"style":128625,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138005,138006],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[130,138008,138010],{"className":128769,"code":138009,"language":128771,"meta":135,"style":135},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[50,138011,138012,138017,138023,138033,138045,138057],{"__ignoreMap":135},[139,138013,138014],{"class":141,"line":142},[139,138015,138016],{"class":2512},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[139,138018,138019,138021],{"class":141,"line":210},[139,138020,132617],{"class":781},[139,138022,17840],{"class":145},[139,138024,138025,138027,138029,138031],{"class":141,"line":254},[139,138026,134575],{"class":153},[139,138028,2265],{"class":145},[139,138030,56998],{"class":153},[139,138032,3591],{"class":145},[139,138034,138035,138037,138039,138041,138043],{"class":141,"line":262},[139,138036,134589],{"class":153},[139,138038,2265],{"class":145},[139,138040,536],{"class":153},[139,138042,53729],{"class":149},[139,138044,3591],{"class":145},[139,138046,138047,138049,138051,138053,138055],{"class":141,"line":313},[139,138048,134606],{"class":153},[139,138050,2265],{"class":145},[139,138052,3135],{"class":153},[139,138054,53729],{"class":149},[139,138056,3591],{"class":145},[139,138058,138059],{"class":141,"line":462},[139,138060,3862],{"class":145},[19,138062,138063],{},"加上上述代码会发现：",[3760,138065],{"style":128625,"src":138066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138068,138069],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138071,138072],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[130,138074,138075],{"className":128769,"code":138009,"language":128771,"meta":135,"style":135},[50,138076,138077,138081,138087,138097,138109,138121],{"__ignoreMap":135},[139,138078,138079],{"class":141,"line":142},[139,138080,138016],{"class":2512},[139,138082,138083,138085],{"class":141,"line":210},[139,138084,132617],{"class":781},[139,138086,17840],{"class":145},[139,138088,138089,138091,138093,138095],{"class":141,"line":254},[139,138090,134575],{"class":153},[139,138092,2265],{"class":145},[139,138094,56998],{"class":153},[139,138096,3591],{"class":145},[139,138098,138099,138101,138103,138105,138107],{"class":141,"line":262},[139,138100,134589],{"class":153},[139,138102,2265],{"class":145},[139,138104,536],{"class":153},[139,138106,53729],{"class":149},[139,138108,3591],{"class":145},[139,138110,138111,138113,138115,138117,138119],{"class":141,"line":313},[139,138112,134606],{"class":153},[139,138114,2265],{"class":145},[139,138116,3135],{"class":153},[139,138118,53729],{"class":149},[139,138120,3591],{"class":145},[139,138122,138123],{"class":141,"line":462},[139,138124,3862],{"class":145},[19,138126,138127],{},"解决方式2：",[19,138129,138130],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[130,138132,138134],{"className":128769,"code":138133,"language":128771,"meta":135,"style":135},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[50,138135,138136,138142,138152,138164,138176],{"__ignoreMap":135},[139,138137,138138,138140],{"class":141,"line":142},[139,138139,53848],{"class":53538},[139,138141,17840],{"class":145},[139,138143,138144,138146,138148,138150],{"class":141,"line":210},[139,138145,134575],{"class":153},[139,138147,2265],{"class":145},[139,138149,56998],{"class":153},[139,138151,3591],{"class":145},[139,138153,138154,138156,138158,138160,138162],{"class":141,"line":254},[139,138155,134589],{"class":153},[139,138157,2265],{"class":145},[139,138159,536],{"class":153},[139,138161,53729],{"class":149},[139,138163,3591],{"class":145},[139,138165,138166,138168,138170,138172,138174],{"class":141,"line":262},[139,138167,134606],{"class":153},[139,138169,2265],{"class":145},[139,138171,3135],{"class":153},[139,138173,53729],{"class":149},[139,138175,3591],{"class":145},[139,138177,138178],{"class":141,"line":313},[139,138179,3862],{"class":145},[1217,138181,138183],{"id":138182},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138185,137954],{},[3760,138187],{"style":128625,"src":138188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138190,138191],{},"实现结构图：",[3760,138193],{"style":128625,"src":138194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138196,138197],{},"巧妙运用浮动元素不会压住文字的特性",[19,138199,138200],{},"代码显示：",[130,138202,138204],{"className":128769,"code":138203,"language":128771,"meta":135,"style":135},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[50,138205,138206,138212,138222,138226,138231,138235,138241,138255],{"__ignoreMap":135},[139,138207,138208,138210],{"class":141,"line":142},[139,138209,132617],{"class":781},[139,138211,17840],{"class":145},[139,138213,138214,138216,138218,138220],{"class":141,"line":210},[139,138215,133249],{"class":153},[139,138217,2265],{"class":145},[139,138219,26003],{"class":153},[139,138221,3591],{"class":145},[139,138223,138224],{"class":141,"line":254},[139,138225,3862],{"class":145},[139,138227,138228],{"class":141,"line":262},[139,138229,138230],{"class":145},"```Css\n",[139,138232,138233],{"class":141,"line":313},[139,138234,132612],{"class":2512},[139,138236,138237,138239],{"class":141,"line":462},[139,138238,132617],{"class":781},[139,138240,17840],{"class":145},[139,138242,138243,138245,138247,138249,138251,138253],{"class":141,"line":474},[139,138244,72699],{"class":153},[139,138246,2265],{"class":145},[139,138248,2634],{"class":153},[139,138250,53793],{"class":153},[139,138252,132632],{"class":145},[139,138254,132635],{"class":2512},[139,138256,138257],{"class":141,"line":484},[139,138258,3862],{"class":145},[19,138260,138261],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[130,138263,138266],{"className":138264,"code":138265,"language":645},[643],"\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",[50,138267,138265],{"__ignoreMap":135},[3760,138269],{"style":128625,"src":138270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138272,138273],{},"最终展示结果：",[130,138275,138276],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,138277,138278,138282,138288,138302],{"__ignoreMap":135},[139,138279,138280],{"class":141,"line":142},[139,138281,132612],{"class":2512},[139,138283,138284,138286],{"class":141,"line":210},[139,138285,132617],{"class":781},[139,138287,17840],{"class":145},[139,138289,138290,138292,138294,138296,138298,138300],{"class":141,"line":254},[139,138291,72699],{"class":153},[139,138293,2265],{"class":145},[139,138295,2634],{"class":153},[139,138297,53793],{"class":153},[139,138299,132632],{"class":145},[139,138301,132635],{"class":2512},[139,138303,138304],{"class":141,"line":262},[139,138305,3862],{"class":145},[3760,138307],{"style":128625,"src":138308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138310,138312],{"id":138311},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1217,138314,138316],{"id":138315},"_1341-原理","13.4.1 原理",[3760,138318],{"style":128625,"src":138319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[130,138321,138322],{"className":128769,"code":132605,"language":128771,"meta":135,"style":135},[50,138323,138324,138328,138334,138348],{"__ignoreMap":135},[139,138325,138326],{"class":141,"line":142},[139,138327,132612],{"class":2512},[139,138329,138330,138332],{"class":141,"line":210},[139,138331,132617],{"class":781},[139,138333,17840],{"class":145},[139,138335,138336,138338,138340,138342,138344,138346],{"class":141,"line":254},[139,138337,72699],{"class":153},[139,138339,2265],{"class":145},[139,138341,2634],{"class":153},[139,138343,53793],{"class":153},[139,138345,132632],{"class":145},[139,138347,132635],{"class":2512},[139,138349,138350],{"class":141,"line":262},[139,138351,3862],{"class":145},[1217,138353,138355],{"id":138354},"_1342-实例","13.4.2 实例",[3760,138357],{"style":128625,"src":138358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[130,138360,138361],{"className":128769,"code":133235,"language":128771,"meta":135,"style":135},[50,138362,138363,138369,138379,138383,138389,138399],{"__ignoreMap":135},[139,138364,138365,138367],{"class":141,"line":142},[139,138366,133242],{"class":781},[139,138368,17840],{"class":145},[139,138370,138371,138373,138375,138377],{"class":141,"line":210},[139,138372,133249],{"class":153},[139,138374,2265],{"class":145},[139,138376,26003],{"class":153},[139,138378,3591],{"class":145},[139,138380,138381],{"class":141,"line":254},[139,138382,3862],{"class":145},[139,138384,138385,138387],{"class":141,"line":262},[139,138386,133264],{"class":781},[139,138388,17840],{"class":145},[139,138390,138391,138393,138395,138397],{"class":141,"line":313},[139,138392,133249],{"class":153},[139,138394,2265],{"class":145},[139,138396,74751],{"class":153},[139,138398,3591],{"class":145},[139,138400,138401],{"class":141,"line":462},[139,138402,3862],{"class":145},[14,138404,138406],{"id":138405},"_135-css的初始化","13.5 css的初始化",[19,138408,138409],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138411,138412],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138414,138415],{},"每个网页都必须首先进行 CSS初始化。",[19,138417,138418],{},"这里我们以 京东CSS初始化代码为例。",[19,138420,138421],{},"在网页右键查看网页源代码",[19,138423,138424],{},"找到css的link引入语句",[19,138426,138427],{},"然后ctrl+f 输入body",[19,138429,79455],{},[3760,138431],{"style":128625,"src":138432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138434,79478],{},[3760,138436],{"style":128625,"src":138437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138439,138440],{},"③打开了网页上传压缩的代码",[3760,138442],{"style":128625,"src":138443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138445,138446],{},"④从body前可以查看这个网页的初始化代码",[19,138448,138449],{},[1674,138450,138451],{},"Unicode编码字体：",[19,138453,138454],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138456,85435],{},[19,138458,138459],{},"黑体 \\9ED1\\4F53",[19,138461,138462],{},"宋体 \\5B8B\\4F53",[19,138464,138465],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2348,138467,138468],{},"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":135,"searchDepth":210,"depth":210,"links":138470},[138471,138472,138479,138483,138487],{"id":137268,"depth":210,"text":137269},{"id":137390,"depth":210,"text":137391,"children":138473},[138474,138475,138476,138477,138478],{"id":137394,"depth":254,"text":137395},{"id":137547,"depth":254,"text":137548},{"id":137666,"depth":254,"text":137667},{"id":137808,"depth":254,"text":137809},{"id":137866,"depth":254,"text":137867},{"id":137927,"depth":210,"text":137928,"children":138480},[138481,138482],{"id":137950,"depth":254,"text":137951},{"id":138182,"depth":254,"text":138183},{"id":138311,"depth":210,"text":138312,"children":138484},[138485,138486],{"id":138315,"depth":254,"text":138316},{"id":138354,"depth":254,"text":138355},{"id":138405,"depth":210,"text":138406},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137260,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138494,"title":138495,"body":138496,"description":2384,"extension":2385,"meta":140182,"navigation":842,"path":140183,"seo":140184,"stem":140185,"__hash__":140186},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138497,"toc":140171},[138498,138501,138505,138509,138512,138519,138522,138525,138563,138566,138568,138582,138586,138595,138599,138604,138607,138610,138613,138648,138653,138656,138686,138689,138694,138697,138700,138730,138733,138787,138790,138794,138799,138811,138814,138818,138848,138851,138856,138859,138889,138892,138896,138913,138917,138921,138924,138957,138960,138964,138967,138970,138973,138976,138979,139090,139093,139096,139099,139201,139204,139208,139212,139216,139219,139259,139262,139264,139280,139284,139287,139292,139373,139376,139379,139505,139510,139513,139521,139524,139529,139614,139617,139621,139624,139627,139631,139651,139656,139740,139743,139748,139751,139754,139832,139835,139838,139841,139844,139847,139852,139855,139858,139930,139933,139938,139941,140038,140041,140047,140050,140053,140056,140059,140062,140065,140068,140071,140075,140080,140083,140116,140121,140124,140165,140168],[10,138499,138495],{"id":138500},"_14-html5与css3新特性",[14,138502,138504],{"id":138503},"_141-html5的新特性","14.1 HTML5的新特性",[1217,138506,138508],{"id":138507},"_1411-基本标签","14.1.1 基本标签",[19,138510,138511],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138513,138514,138515,138518],{},"这些新特性都有兼容性问题，基本是 ",[1674,138516,138517],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138520,138521],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138523,138524],{},"现在使用的是新特性：",[3437,138526,138527,138533,138539,138545,138551,138557],{},[1763,138528,138529,138532],{},[50,138530,138531],{},"\u003Cheader>"," 头部标签",[1763,138534,138535,138538],{},[50,138536,138537],{},"\u003Cnav>"," 导航标签",[1763,138540,138541,138544],{},[50,138542,138543],{},"\u003Carticle>"," 内容标签",[1763,138546,138547,138550],{},[50,138548,138549],{},"\u003Csection>"," 定义文档某个区域",[1763,138552,138553,138556],{},[50,138554,138555],{},"\u003Caside>"," 侧边栏标签",[1763,138558,138559,138562],{},[50,138560,138561],{},"\u003Cfooter>"," 尾部标签",[3760,138564],{"style":128625,"src":138565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138567,2486],{},[3437,138569,138570,138573,138576,138579],{},[1763,138571,138572],{},"这种语义化标准主要是针对搜索引擎的",[1763,138574,138575],{},"这些标签页面中可以经常使用",[1763,138577,138578],{},"在IE9中，需要把这些元素转换为块级元素",[1763,138580,138581],{},"移动端更喜欢使用这些标签",[1217,138583,138585],{"id":138584},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138587,138588,138589,138591,138592,138594],{},"音频 ",[1674,138590,30434],{}," 和视频 ",[1674,138593,30443],{}," 两个标签",[24265,138596,138598],{"id":138597},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1760,138600,138601],{},[1763,138602,138603],{},"支持格式：",[3760,138605],{"style":128625,"src":138606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138608,138609],{},"尽量使用MP4，兼容性好",[19,138611,138612],{},"用MP4就可以",[130,138614,138616],{"className":129516,"code":138615,"language":129518,"meta":135,"style":135},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[50,138617,138618],{"__ignoreMap":135},[139,138619,138620,138622,138624,138626,138628,138631,138633,138636,138639,138642,138644,138646],{"class":141,"line":142},[139,138621,796],{"class":145},[139,138623,30443],{"class":53538},[139,138625,57473],{"class":781},[139,138627,150],{"class":145},[139,138629,138630],{"class":160},"\"movie.mp4\"",[139,138632,94651],{"class":781},[139,138634,138635],{"class":781}," autoplay",[139,138637,138638],{"class":781}," muted",[139,138640,138641],{"class":781}," loop",[139,138643,57548],{"class":145},[139,138645,30443],{"class":53538},[139,138647,53545],{"class":145},[1760,138649,138650],{"start":210},[1763,138651,138652],{},"兼容写法",[19,138654,138655],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[130,138657,138658],{"className":129516,"code":138615,"language":129518,"meta":135,"style":135},[50,138659,138660],{"__ignoreMap":135},[139,138661,138662,138664,138666,138668,138670,138672,138674,138676,138678,138680,138682,138684],{"class":141,"line":142},[139,138663,796],{"class":145},[139,138665,30443],{"class":53538},[139,138667,57473],{"class":781},[139,138669,150],{"class":145},[139,138671,138630],{"class":160},[139,138673,94651],{"class":781},[139,138675,138635],{"class":781},[139,138677,138638],{"class":781},[139,138679,138641],{"class":781},[139,138681,57548],{"class":145},[139,138683,30443],{"class":53538},[139,138685,53545],{"class":145},[19,138687,138688],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1760,138690,138691],{"start":254},[1763,138692,138693],{},"video常用属性",[3760,138695],{"style":128625,"src":138696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138698,138699],{},"poster属性后面是跟的等待加载图片的地址",[130,138701,138702],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,138703,138704],{"__ignoreMap":135},[139,138705,138706,138708,138710,138712,138714,138716,138718,138720,138722,138724,138726,138728],{"class":141,"line":142},[139,138707,796],{"class":145},[139,138709,3760],{"class":53538},[139,138711,57473],{"class":781},[139,138713,150],{"class":145},[139,138715,136286],{"class":160},[139,138717,57481],{"class":781},[139,138719,150],{"class":145},[139,138721,136293],{"class":160},[139,138723,136296],{"class":781},[139,138725,150],{"class":145},[139,138727,136301],{"class":160},[139,138729,53545],{"class":145},[19,138731,138732],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[130,138734,138736],{"className":128769,"code":138735,"language":128771,"meta":135,"style":135},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[50,138737,138738,138743,138749,138773,138778,138783],{"__ignoreMap":135},[139,138739,138740],{"class":141,"line":142},[139,138741,138742],{"class":2512},"\u002F* 2D 位移 *\u002F\n",[139,138744,138745,138747],{"class":141,"line":210},[139,138746,53848],{"class":53538},[139,138748,17840],{"class":145},[139,138750,138751,138754,138756,138759,138761,138763,138765,138767,138769,138771],{"class":141,"line":254},[139,138752,138753],{"class":153},"  transform",[139,138755,2265],{"class":145},[139,138757,138758],{"class":153},"translate",[139,138760,157],{"class":145},[139,138762,1017],{"class":153},[139,138764,53729],{"class":149},[139,138766,413],{"class":145},[139,138768,3091],{"class":153},[139,138770,53729],{"class":149},[139,138772,5002],{"class":145},[139,138774,138775],{"class":141,"line":262},[139,138776,138777],{"class":2512},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[139,138779,138780],{"class":141,"line":313},[139,138781,138782],{"class":2512},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[139,138784,138785],{"class":141,"line":462},[139,138786,3862],{"class":145},[19,138788,138789],{},"muted:自动静音属性",[24265,138791,138793],{"id":138792},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1760,138795,138796],{},[1763,138797,138798],{},"基本使用",[19,138800,138801,138802,138807,138808],{},"当前 ",[1674,138803,138804],{},[50,138805,138806],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1674,138809,138810],{},"mp3格式",[3760,138812],{"style":128625,"src":138813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1760,138815,138816],{"start":210},[1763,138817,138652],{},[130,138819,138820],{"className":129516,"code":138615,"language":129518,"meta":135,"style":135},[50,138821,138822],{"__ignoreMap":135},[139,138823,138824,138826,138828,138830,138832,138834,138836,138838,138840,138842,138844,138846],{"class":141,"line":142},[139,138825,796],{"class":145},[139,138827,30443],{"class":53538},[139,138829,57473],{"class":781},[139,138831,150],{"class":145},[139,138833,138630],{"class":160},[139,138835,94651],{"class":781},[139,138837,138635],{"class":781},[139,138839,138638],{"class":781},[139,138841,138641],{"class":781},[139,138843,57548],{"class":145},[139,138845,30443],{"class":53538},[139,138847,53545],{"class":145},[19,138849,138850],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1760,138852,138853],{"start":254},[1763,138854,138855],{},"常用属性",[3760,138857],{"style":128625,"src":138858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[130,138860,138861],{"className":129516,"code":138615,"language":129518,"meta":135,"style":135},[50,138862,138863],{"__ignoreMap":135},[139,138864,138865,138867,138869,138871,138873,138875,138877,138879,138881,138883,138885,138887],{"class":141,"line":142},[139,138866,796],{"class":145},[139,138868,30443],{"class":53538},[139,138870,57473],{"class":781},[139,138872,150],{"class":145},[139,138874,138630],{"class":160},[139,138876,94651],{"class":781},[139,138878,138635],{"class":781},[139,138880,138638],{"class":781},[139,138882,138641],{"class":781},[139,138884,57548],{"class":145},[139,138886,30443],{"class":53538},[139,138888,53545],{"class":145},[19,138890,138891],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24265,138893,138895],{"id":138894},"_14123-总结","14.1.2.3 总结",[3437,138897,138898,138901,138904,138907,138910],{},[1763,138899,138900],{},"音频标签和视频标签使用方式基本一致",[1763,138902,138903],{},"浏览器支持情况不同",[1763,138905,138906],{},"谷歌浏览器把音频和视频自动播放禁止了",[1763,138908,138909],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1763,138911,138912],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1217,138914,138916],{"id":138915},"_1413-表单元素","14.1.3 表单元素",[24265,138918,138920],{"id":138919},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3760,138922],{"style":128625,"src":138923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[130,138925,138927],{"className":129516,"code":138926,"language":129518,"meta":135,"style":135},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[50,138928,138929],{"__ignoreMap":135},[139,138930,138931,138933,138935,138937,138939,138941,138943,138945,138948,138950,138952,138955],{"class":141,"line":142},[139,138932,796],{"class":145},[139,138934,199],{"class":53538},[139,138936,56058],{"class":781},[139,138938,150],{"class":145},[139,138940,64931],{"class":160},[139,138942,17189],{"class":781},[139,138944,150],{"class":145},[139,138946,138947],{"class":160},"\"username\"",[139,138949,63253],{"class":781},[139,138951,150],{"class":145},[139,138953,138954],{"class":160},"\"请输入用户名\"",[139,138956,53545],{"class":145},[3760,138958],{"style":128625,"src":138959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24265,138961,138963],{"id":138962},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3760,138965],{"style":128625,"src":138966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138968,138969],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138971,138972],{},"快捷操作：",[3760,138974],{"style":128625,"src":138975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138977,138978],{},"例子1：",[130,138980,138982],{"className":129516,"code":138981,"language":129518,"meta":135,"style":135},"\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",[50,138983,138984,139007,139034,139063,139082],{"__ignoreMap":135},[139,138985,138986,138988,138990,138992,138994,138997,139000,139002,139005],{"class":141,"line":142},[139,138987,796],{"class":145},[139,138989,68856],{"class":53538},[139,138991,68859],{"class":781},[139,138993,150],{"class":145},[139,138995,138996],{"class":160},"\"\u002Fsubmit\"",[139,138998,138999],{"class":781}," method",[139,139001,150],{"class":145},[139,139003,139004],{"class":160},"\"post\"",[139,139006,53545],{"class":145},[139,139008,139009,139011,139013,139015,139017,139019,139021,139023,139025,139027,139029,139032],{"class":141,"line":210},[139,139010,54380],{"class":145},[139,139012,199],{"class":53538},[139,139014,56058],{"class":781},[139,139016,150],{"class":145},[139,139018,64931],{"class":160},[139,139020,17189],{"class":781},[139,139022,150],{"class":145},[139,139024,138947],{"class":160},[139,139026,63253],{"class":781},[139,139028,150],{"class":145},[139,139030,139031],{"class":160},"\"用户名\"",[139,139033,53545],{"class":145},[139,139035,139036,139038,139040,139042,139044,139047,139049,139051,139054,139056,139058,139061],{"class":141,"line":254},[139,139037,54380],{"class":145},[139,139039,199],{"class":53538},[139,139041,56058],{"class":781},[139,139043,150],{"class":145},[139,139045,139046],{"class":160},"\"password\"",[139,139048,17189],{"class":781},[139,139050,150],{"class":145},[139,139052,139053],{"class":160},"\"pwd\"",[139,139055,63253],{"class":781},[139,139057,150],{"class":145},[139,139059,139060],{"class":160},"\"密码\"",[139,139062,53545],{"class":145},[139,139064,139065,139067,139069,139071,139073,139075,139078,139080],{"class":141,"line":262},[139,139066,54380],{"class":145},[139,139068,56121],{"class":53538},[139,139070,56058],{"class":781},[139,139072,150],{"class":145},[139,139074,68879],{"class":160},[139,139076,139077],{"class":145},">提交\u003C\u002F",[139,139079,56121],{"class":53538},[139,139081,53545],{"class":145},[139,139083,139084,139086,139088],{"class":141,"line":313},[139,139085,54022],{"class":145},[139,139087,68856],{"class":53538},[139,139089,53545],{"class":145},[3760,139091],{"style":128625,"src":139092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139094,139095],{},"value是表单域的内容",[19,139097,139098],{},"例子2：",[130,139100,139101],{"className":129516,"code":138981,"language":129518,"meta":135,"style":135},[50,139102,139103,139123,139149,139175,139193],{"__ignoreMap":135},[139,139104,139105,139107,139109,139111,139113,139115,139117,139119,139121],{"class":141,"line":142},[139,139106,796],{"class":145},[139,139108,68856],{"class":53538},[139,139110,68859],{"class":781},[139,139112,150],{"class":145},[139,139114,138996],{"class":160},[139,139116,138999],{"class":781},[139,139118,150],{"class":145},[139,139120,139004],{"class":160},[139,139122,53545],{"class":145},[139,139124,139125,139127,139129,139131,139133,139135,139137,139139,139141,139143,139145,139147],{"class":141,"line":210},[139,139126,54380],{"class":145},[139,139128,199],{"class":53538},[139,139130,56058],{"class":781},[139,139132,150],{"class":145},[139,139134,64931],{"class":160},[139,139136,17189],{"class":781},[139,139138,150],{"class":145},[139,139140,138947],{"class":160},[139,139142,63253],{"class":781},[139,139144,150],{"class":145},[139,139146,139031],{"class":160},[139,139148,53545],{"class":145},[139,139150,139151,139153,139155,139157,139159,139161,139163,139165,139167,139169,139171,139173],{"class":141,"line":254},[139,139152,54380],{"class":145},[139,139154,199],{"class":53538},[139,139156,56058],{"class":781},[139,139158,150],{"class":145},[139,139160,139046],{"class":160},[139,139162,17189],{"class":781},[139,139164,150],{"class":145},[139,139166,139053],{"class":160},[139,139168,63253],{"class":781},[139,139170,150],{"class":145},[139,139172,139060],{"class":160},[139,139174,53545],{"class":145},[139,139176,139177,139179,139181,139183,139185,139187,139189,139191],{"class":141,"line":262},[139,139178,54380],{"class":145},[139,139180,56121],{"class":53538},[139,139182,56058],{"class":781},[139,139184,150],{"class":145},[139,139186,68879],{"class":160},[139,139188,139077],{"class":145},[139,139190,56121],{"class":53538},[139,139192,53545],{"class":145},[139,139194,139195,139197,139199],{"class":141,"line":313},[139,139196,54022],{"class":145},[139,139198,68856],{"class":53538},[139,139200,53545],{"class":145},[3760,139202],{"style":128625,"src":139203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139205,139207],{"id":139206},"_142-css新特性","14.2 CSS新特性",[1217,139209,139211],{"id":139210},"_1421-新增选择器","14.2.1 新增选择器",[24265,139213,139215],{"id":139214},"_14211-属性选择器","14.2.1.1 属性选择器",[3760,139217],{"style":128625,"src":139218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[130,139220,139222],{"className":128769,"code":139221,"language":128771,"meta":135,"style":135},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[50,139223,139224,139239,139255],{"__ignoreMap":135},[139,139225,139226,139228,139230,139232,139234,139236],{"class":141,"line":142},[139,139227,199],{"class":53538},[139,139229,3325],{"class":145},[139,139231,105331],{"class":781},[139,139233,150],{"class":149},[139,139235,64931],{"class":160},[139,139237,139238],{"class":145},"] {\n",[139,139240,139241,139243,139245,139247,139249,139251,139253],{"class":141,"line":210},[139,139242,73125],{"class":153},[139,139244,2265],{"class":145},[139,139246,410],{"class":153},[139,139248,53729],{"class":149},[139,139250,53758],{"class":153},[139,139252,132349],{"class":153},[139,139254,3591],{"class":145},[139,139256,139257],{"class":141,"line":254},[139,139258,3862],{"class":145},[3760,139260],{"style":128625,"src":139261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139263,2486],{},[3437,139265,139266,139269,139272,139275],{},[1763,139267,139268],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1763,139270,139271],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1763,139273,139274],{},"属性选择器也可以选择出来自定义的属性",[1763,139276,139277,139279],{},[1674,139278,11299],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24265,139281,139283],{"id":139282},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3760,139285],{"style":128625,"src":139286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1760,139288,139289],{},[1763,139290,139291],{},"fist-child",[130,139293,139295],{"className":128769,"code":139294,"language":128771,"meta":135,"style":135},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[50,139296,139297,139302,139317,139337,139355],{"__ignoreMap":135},[139,139298,139299],{"class":141,"line":142},[139,139300,139301],{"class":2512},"\u002F* 属性选择器 *\u002F\n",[139,139303,139304,139306,139308,139310,139312,139314],{"class":141,"line":210},[139,139305,199],{"class":53538},[139,139307,3325],{"class":145},[139,139309,105331],{"class":781},[139,139311,150],{"class":149},[139,139313,64931],{"class":160},[139,139315,139316],{"class":145},"] { }\n",[139,139318,139319,139321,139323,139325,139328,139331,139334],{"class":141,"line":254},[139,139320,199],{"class":53538},[139,139322,3325],{"class":145},[139,139324,915],{"class":781},[139,139326,139327],{"class":149},"^=",[139,139329,139330],{"class":160},"\"icon\"",[139,139332,139333],{"class":145},"] { }  ",[139,139335,139336],{"class":2512},"\u002F* 以 icon 开头 *\u002F\n",[139,139338,139339,139341,139343,139345,139348,139350,139352],{"class":141,"line":262},[139,139340,199],{"class":53538},[139,139342,3325],{"class":145},[139,139344,915],{"class":781},[139,139346,139347],{"class":149},"$=",[139,139349,139330],{"class":160},[139,139351,139333],{"class":145},[139,139353,139354],{"class":2512},"\u002F* 以 icon 结尾 *\u002F\n",[139,139356,139357,139359,139361,139363,139366,139368,139370],{"class":141,"line":313},[139,139358,199],{"class":53538},[139,139360,3325],{"class":145},[139,139362,915],{"class":781},[139,139364,139365],{"class":149},"*=",[139,139367,139330],{"class":160},[139,139369,139333],{"class":145},[139,139371,139372],{"class":2512},"\u002F* 包含 icon *\u002F\n",[19,139374,139375],{},"ul的第一个儿子文本为红色",[19,139377,139378],{},"一定要在冒号前加空格，不然就是选中所有的了",[130,139380,139382],{"className":128769,"code":139381,"language":128771,"meta":135,"style":135},".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",[50,139383,139384,139390,139400,139404,139408,139413,139426,139439,139455,139472,139489],{"__ignoreMap":135},[139,139385,139386,139388],{"class":141,"line":142},[139,139387,129060],{"class":781},[139,139389,17840],{"class":145},[139,139391,139392,139394,139396,139398],{"class":141,"line":210},[139,139393,73134],{"class":153},[139,139395,2265],{"class":145},[139,139397,59655],{"class":153},[139,139399,3591],{"class":145},[139,139401,139402],{"class":141,"line":254},[139,139403,3862],{"class":145},[139,139405,139406],{"class":141,"line":262},[139,139407,138230],{"class":145},[139,139409,139410],{"class":141,"line":313},[139,139411,139412],{"class":2512},"\u002F* 结构伪类选择器 *\u002F\n",[139,139414,139415,139417,139420,139423],{"class":141,"line":462},[139,139416,1763],{"class":53538},[139,139418,139419],{"class":781},":first-child",[139,139421,139422],{"class":145}," { }           ",[139,139424,139425],{"class":2512},"\u002F* 第一个 *\u002F\n",[139,139427,139428,139430,139433,139436],{"class":141,"line":474},[139,139429,1763],{"class":53538},[139,139431,139432],{"class":781},":last-child",[139,139434,139435],{"class":145}," { }            ",[139,139437,139438],{"class":2512},"\u002F* 最后一个 *\u002F\n",[139,139440,139441,139443,139445,139447,139449,139452],{"class":141,"line":484},[139,139442,1763],{"class":53538},[139,139444,131683],{"class":781},[139,139446,157],{"class":145},[139,139448,416],{"class":153},[139,139450,139451],{"class":145},") { }          ",[139,139453,139454],{"class":2512},"\u002F* 第2个 *\u002F\n",[139,139456,139457,139459,139461,139463,139466,139469],{"class":141,"line":989},[139,139458,1763],{"class":53538},[139,139460,131683],{"class":781},[139,139462,157],{"class":145},[139,139464,139465],{"class":153},"2n",[139,139467,139468],{"class":145},") { }         ",[139,139470,139471],{"class":2512},"\u002F* 偶数 *\u002F\n",[139,139473,139474,139476,139478,139480,139483,139486],{"class":141,"line":994},[139,139475,1763],{"class":53538},[139,139477,131683],{"class":781},[139,139479,157],{"class":145},[139,139481,139482],{"class":153},"2n+1",[139,139484,139485],{"class":145},") { }       ",[139,139487,139488],{"class":2512},"\u002F* 奇数 *\u002F\n",[139,139490,139491,139493,139495,139497,139500,139502],{"class":141,"line":999},[139,139492,1763],{"class":53538},[139,139494,131683],{"class":781},[139,139496,157],{"class":145},[139,139498,139499],{"class":153},"-n+3",[139,139501,139485],{"class":145},[139,139503,139504],{"class":2512},"\u002F* 前3个 *\u002F\n",[53848,139506,139509],{"className":139507},[139508],"example","\n  示例内容\n",[19,139511,139512],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3437,139514,139515],{},[1763,139516,139517,139520],{},[50,139518,139519],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139522,139523],{},"也就是说它选择的是熊大",[1760,139525,139526],{"start":462},[1763,139527,139528],{},"权重",[130,139530,139532],{"className":128769,"code":139531,"language":128771,"meta":135,"style":135},"\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",[50,139533,139534,139538,139548,139558,139572,139586,139600],{"__ignoreMap":135},[139,139535,139536],{"class":141,"line":142},[139,139537,139412],{"class":2512},[139,139539,139540,139542,139544,139546],{"class":141,"line":210},[139,139541,1763],{"class":53538},[139,139543,139419],{"class":781},[139,139545,139422],{"class":145},[139,139547,139425],{"class":2512},[139,139549,139550,139552,139554,139556],{"class":141,"line":254},[139,139551,1763],{"class":53538},[139,139553,139432],{"class":781},[139,139555,139435],{"class":145},[139,139557,139438],{"class":2512},[139,139559,139560,139562,139564,139566,139568,139570],{"class":141,"line":262},[139,139561,1763],{"class":53538},[139,139563,131683],{"class":781},[139,139565,157],{"class":145},[139,139567,416],{"class":153},[139,139569,139451],{"class":145},[139,139571,139454],{"class":2512},[139,139573,139574,139576,139578,139580,139582,139584],{"class":141,"line":313},[139,139575,1763],{"class":53538},[139,139577,131683],{"class":781},[139,139579,157],{"class":145},[139,139581,139465],{"class":153},[139,139583,139468],{"class":145},[139,139585,139471],{"class":2512},[139,139587,139588,139590,139592,139594,139596,139598],{"class":141,"line":462},[139,139589,1763],{"class":53538},[139,139591,131683],{"class":781},[139,139593,157],{"class":145},[139,139595,139482],{"class":153},[139,139597,139485],{"class":145},[139,139599,139488],{"class":2512},[139,139601,139602,139604,139606,139608,139610,139612],{"class":141,"line":474},[139,139603,1763],{"class":53538},[139,139605,131683],{"class":781},[139,139607,157],{"class":145},[139,139609,139499],{"class":153},[139,139611,139485],{"class":145},[139,139613,139504],{"class":2512},[19,139615,139616],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24265,139618,139620],{"id":139619},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139622,139623],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3760,139625],{"style":128625,"src":139626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1760,139628,139629],{},[1763,139630,2486],{},[3437,139632,139633,139636,139639,139642,139645,139648],{},[1763,139634,139635],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1763,139637,139638],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1763,139640,139641],{},"语法： element::before {}",[1763,139643,139644],{},"before 和 after 必须有 content 属性",[1763,139646,139647],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1763,139649,139650],{},"伪元素选择器和标签选择器一样，权重为 1",[1760,139652,139653],{"start":210},[1763,139654,139655],{},"实例",[130,139657,139658],{"className":128769,"code":139531,"language":128771,"meta":135,"style":135},[50,139659,139660,139664,139674,139684,139698,139712,139726],{"__ignoreMap":135},[139,139661,139662],{"class":141,"line":142},[139,139663,139412],{"class":2512},[139,139665,139666,139668,139670,139672],{"class":141,"line":210},[139,139667,1763],{"class":53538},[139,139669,139419],{"class":781},[139,139671,139422],{"class":145},[139,139673,139425],{"class":2512},[139,139675,139676,139678,139680,139682],{"class":141,"line":254},[139,139677,1763],{"class":53538},[139,139679,139432],{"class":781},[139,139681,139435],{"class":145},[139,139683,139438],{"class":2512},[139,139685,139686,139688,139690,139692,139694,139696],{"class":141,"line":262},[139,139687,1763],{"class":53538},[139,139689,131683],{"class":781},[139,139691,157],{"class":145},[139,139693,416],{"class":153},[139,139695,139451],{"class":145},[139,139697,139454],{"class":2512},[139,139699,139700,139702,139704,139706,139708,139710],{"class":141,"line":313},[139,139701,1763],{"class":53538},[139,139703,131683],{"class":781},[139,139705,157],{"class":145},[139,139707,139465],{"class":153},[139,139709,139468],{"class":145},[139,139711,139471],{"class":2512},[139,139713,139714,139716,139718,139720,139722,139724],{"class":141,"line":462},[139,139715,1763],{"class":53538},[139,139717,131683],{"class":781},[139,139719,157],{"class":145},[139,139721,139482],{"class":153},[139,139723,139485],{"class":145},[139,139725,139488],{"class":2512},[139,139727,139728,139730,139732,139734,139736,139738],{"class":141,"line":474},[139,139729,1763],{"class":53538},[139,139731,131683],{"class":781},[139,139733,157],{"class":145},[139,139735,139499],{"class":153},[139,139737,139485],{"class":145},[139,139739,139504],{"class":2512},[3760,139741],{"style":128625,"src":139742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1760,139744,139745],{"start":254},[1763,139746,139747],{},"使用场景1",[3760,139749],{"style":128625,"src":139750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139752,139753],{},"不需要再加盒子来整红色那部分了",[130,139755,139757],{"className":128769,"code":139756,"language":128771,"meta":135,"style":135},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[50,139758,139759,139764,139773,139784,139794,139798,139807,139818,139828],{"__ignoreMap":135},[139,139760,139761],{"class":141,"line":142},[139,139762,139763],{"class":2512},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[139,139765,139766,139768,139771],{"class":141,"line":210},[139,139767,53848],{"class":53538},[139,139769,139770],{"class":781},"::before",[139,139772,17840],{"class":145},[139,139774,139775,139778,139780,139782],{"class":141,"line":254},[139,139776,139777],{"class":153},"  content",[139,139779,2265],{"class":145},[139,139781,9926],{"class":160},[139,139783,3591],{"class":145},[139,139785,139786,139788,139790,139792],{"class":141,"line":262},[139,139787,130385],{"class":153},[139,139789,2265],{"class":145},[139,139791,63102],{"class":153},[139,139793,3591],{"class":145},[139,139795,139796],{"class":141,"line":313},[139,139797,3862],{"class":145},[139,139799,139800,139802,139805],{"class":141,"line":462},[139,139801,53848],{"class":53538},[139,139803,139804],{"class":781},"::after",[139,139806,17840],{"class":145},[139,139808,139809,139811,139813,139816],{"class":141,"line":474},[139,139810,139777],{"class":153},[139,139812,2265],{"class":145},[139,139814,139815],{"class":160},"\"→\"",[139,139817,3591],{"class":145},[139,139819,139820,139822,139824,139826],{"class":141,"line":484},[139,139821,73134],{"class":153},[139,139823,2265],{"class":145},[139,139825,64303],{"class":153},[139,139827,3591],{"class":145},[139,139829,139830],{"class":141,"line":989},[139,139831,3862],{"class":145},[3760,139833],{"style":128625,"src":139834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139836,139837],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3760,139839],{"style":128625,"src":139840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139842,139843],{},"但是在引用时需要先转义一下",[19,139845,139846],{},"content='\\e930'",[1760,139848,139849],{"start":262},[1763,139850,139851],{},"使用场景2",[19,139853,139854],{},"仿土豆效果",[19,139856,139857],{},"通过使用伪元素选择器可以减少body中盒子的数量",[130,139859,139860],{"className":128769,"code":139756,"language":128771,"meta":135,"style":135},[50,139861,139862,139866,139874,139884,139894,139898,139906,139916,139926],{"__ignoreMap":135},[139,139863,139864],{"class":141,"line":142},[139,139865,139763],{"class":2512},[139,139867,139868,139870,139872],{"class":141,"line":210},[139,139869,53848],{"class":53538},[139,139871,139770],{"class":781},[139,139873,17840],{"class":145},[139,139875,139876,139878,139880,139882],{"class":141,"line":254},[139,139877,139777],{"class":153},[139,139879,2265],{"class":145},[139,139881,9926],{"class":160},[139,139883,3591],{"class":145},[139,139885,139886,139888,139890,139892],{"class":141,"line":262},[139,139887,130385],{"class":153},[139,139889,2265],{"class":145},[139,139891,63102],{"class":153},[139,139893,3591],{"class":145},[139,139895,139896],{"class":141,"line":313},[139,139897,3862],{"class":145},[139,139899,139900,139902,139904],{"class":141,"line":462},[139,139901,53848],{"class":53538},[139,139903,139804],{"class":781},[139,139905,17840],{"class":145},[139,139907,139908,139910,139912,139914],{"class":141,"line":474},[139,139909,139777],{"class":153},[139,139911,2265],{"class":145},[139,139913,139815],{"class":160},[139,139915,3591],{"class":145},[139,139917,139918,139920,139922,139924],{"class":141,"line":484},[139,139919,73134],{"class":153},[139,139921,2265],{"class":145},[139,139923,64303],{"class":153},[139,139925,3591],{"class":145},[139,139927,139928],{"class":141,"line":989},[139,139929,3862],{"class":145},[3760,139931],{"style":128625,"src":139932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1760,139934,139935],{"start":313},[1763,139936,139937],{},"使用场景3",[19,139939,139940],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[130,139942,139944],{"className":128769,"code":139943,"language":128771,"meta":135,"style":135},".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",[50,139945,139946,139952,139962,139966,139970,139974,139982,139992,140002,140006,140014,140024,140034],{"__ignoreMap":135},[139,139947,139948,139950],{"class":141,"line":142},[139,139949,132617],{"class":781},[139,139951,17840],{"class":145},[139,139953,139954,139956,139958,139960],{"class":141,"line":210},[139,139955,133249],{"class":153},[139,139957,2265],{"class":145},[139,139959,26003],{"class":153},[139,139961,3591],{"class":145},[139,139963,139964],{"class":141,"line":254},[139,139965,3862],{"class":145},[139,139967,139968],{"class":141,"line":262},[139,139969,138230],{"class":145},[139,139971,139972],{"class":141,"line":313},[139,139973,139763],{"class":2512},[139,139975,139976,139978,139980],{"class":141,"line":462},[139,139977,53848],{"class":53538},[139,139979,139770],{"class":781},[139,139981,17840],{"class":145},[139,139983,139984,139986,139988,139990],{"class":141,"line":474},[139,139985,139777],{"class":153},[139,139987,2265],{"class":145},[139,139989,9926],{"class":160},[139,139991,3591],{"class":145},[139,139993,139994,139996,139998,140000],{"class":141,"line":484},[139,139995,130385],{"class":153},[139,139997,2265],{"class":145},[139,139999,63102],{"class":153},[139,140001,3591],{"class":145},[139,140003,140004],{"class":141,"line":989},[139,140005,3862],{"class":145},[139,140007,140008,140010,140012],{"class":141,"line":994},[139,140009,53848],{"class":53538},[139,140011,139804],{"class":781},[139,140013,17840],{"class":145},[139,140015,140016,140018,140020,140022],{"class":141,"line":999},[139,140017,139777],{"class":153},[139,140019,2265],{"class":145},[139,140021,139815],{"class":160},[139,140023,3591],{"class":145},[139,140025,140026,140028,140030,140032],{"class":141,"line":1006},[139,140027,73134],{"class":153},[139,140029,2265],{"class":145},[139,140031,64303],{"class":153},[139,140033,3591],{"class":145},[139,140035,140036],{"class":141,"line":1027},[139,140037,3862],{"class":145},[19,140039,140040],{},"div {\nmargin: 0 auto;\n}",[130,140042,140045],{"className":140043,"code":140044,"language":645},[643],"\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",[50,140046,140044],{"__ignoreMap":135},[19,140048,140049],{},"如果想让多个元素都发生变化",[19,140051,140052],{},"不能如下操作：",[19,140054,140055],{},"transition: width 2s ease 0.5s;",[19,140057,140058],{},"transition: height 2s ease 0.5s;不对！！！",[19,140060,140061],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140063,140064],{},"使用如下：加逗号隔开",[19,140066,140067],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140069,140070],{},"transition all 2s ease;",[1217,140072,140074],{"id":140073},"_1426-过渡练习","14.2.6 过渡练习",[1760,140076,140077],{},[1763,140078,140079],{},"进度条",[3760,140081],{"style":128625,"src":140082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[130,140084,140086],{"className":128769,"code":140085,"language":128771,"meta":135,"style":135},"div {\n  transition: all 0.3s ease;\n}\n",[50,140087,140088,140094,140112],{"__ignoreMap":135},[139,140089,140090,140092],{"class":141,"line":142},[139,140091,53848],{"class":53538},[139,140093,17840],{"class":145},[139,140095,140096,140099,140101,140103,140106,140108,140110],{"class":141,"line":210},[139,140097,140098],{"class":153},"  transition",[139,140100,2265],{"class":145},[139,140102,30381],{"class":153},[139,140104,140105],{"class":153}," 0.3",[139,140107,3130],{"class":149},[139,140109,80909],{"class":153},[139,140111,3591],{"class":145},[139,140113,140114],{"class":141,"line":254},[139,140115,3862],{"class":145},[1760,140117,140118],{"start":210},[1763,140119,140120],{},"小米logo",[19,140122,140123],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[130,140125,140127],{"className":128769,"code":140126,"language":128771,"meta":135,"style":135},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[50,140128,140129,140134,140140,140156,140161],{"__ignoreMap":135},[139,140130,140131],{"class":141,"line":142},[139,140132,140133],{"class":2512},"\u002F* CSS3 过渡 *\u002F\n",[139,140135,140136,140138],{"class":141,"line":210},[139,140137,53848],{"class":53538},[139,140139,17840],{"class":145},[139,140141,140142,140144,140146,140148,140150,140152,140154],{"class":141,"line":254},[139,140143,140098],{"class":153},[139,140145,2265],{"class":145},[139,140147,30381],{"class":153},[139,140149,140105],{"class":153},[139,140151,3130],{"class":149},[139,140153,80909],{"class":153},[139,140155,3591],{"class":145},[139,140157,140158],{"class":141,"line":262},[139,140159,140160],{"class":2512},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[139,140162,140163],{"class":141,"line":313},[139,140164,3862],{"class":145},[19,140166,140167],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2348,140169,140170],{},"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":135,"searchDepth":210,"depth":210,"links":140172},[140173,140178],{"id":138503,"depth":210,"text":138504,"children":140174},[140175,140176,140177],{"id":138507,"depth":254,"text":138508},{"id":138584,"depth":254,"text":138585},{"id":138915,"depth":254,"text":138916},{"id":139206,"depth":210,"text":139207,"children":140179},[140180,140181],{"id":139210,"depth":254,"text":139211},{"id":140073,"depth":254,"text":140074},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138495,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140188,"title":140189,"body":140190,"description":2384,"extension":2385,"meta":141934,"navigation":842,"path":141935,"seo":141936,"stem":141937,"__hash__":141938},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140191,"toc":141915},[140192,140195,140199,140202,140208,140214,140218,140220,140223,140226,140229,140232,140235,140238,140241,140245,140249,140252,140255,140258,140262,140265,140268,140273,140276,140279,140282,140286,140289,140298,140301,140304,140308,140311,140314,140319,140326,140340,140348,140355,140360,140363,140366,140369,140376,140380,140386,140392,140395,140398,140403,140409,140411,140419,140424,140427,140433,140435,140440,140445,140448,140450,140455,140458,140463,140468,140502,140506,140510,140513,140517,140520,140606,140609,140646,140649,140685,140689,140694,140707,140761,140763,140791,140793,140821,140827,140841,140843,140887,140889,140933,140936,140943,140954,140956,140983,140985,141011,141018,141034,141036,141130,141132,141226,141233,141236,141241,141247,141321,141324,141326,141362,141364,141400,141403,141410,141429,141432,141435,141437,141462,141464,141488,141491,141494,141524,141528,141531,141594,141596,141662,141664,141728,141731,141763,141765,141791,141793,141819,141822,141853,141855,141881,141883,141909,141912],[10,140193,140189],{"id":140194},"_15-品优购项目上篇-搭建与公共模块",[14,140196,140198],{"id":140197},"_151-项目规划","15.1 项目规划",[3760,140200],{"style":128625,"src":140201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140203,140204,140207],{},[1674,140205,140206],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140209,140210,140213],{},[1674,140211,140212],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140215,140217],{"id":140216},"_152-项目介绍","15.2 项目介绍",[19,140219,140206],{},[3760,140221],{"style":128625,"src":140222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140224,140225],{},"主页：",[3760,140227],{"style":128625,"src":140228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140230,140231],{},"列表页：",[3760,140233],{"style":128625,"src":140234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140236,140237],{},"注册页：",[3760,140239],{"style":128625,"src":140240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140242,140244],{"id":140243},"_153-项目搭建工作","15.3 项目搭建工作",[1217,140246,140248],{"id":140247},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3760,140250],{"style":128625,"src":140251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140253,140254],{},"经常更换的图片要放到upload文件夹中",[19,140256,140257],{},"不经常换的放到images文件夹中",[1217,140259,140261],{"id":140260},"_1532-创建文件如下","15.3.2 创建文件如下",[3760,140263],{"style":128625,"src":140264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3760,140266],{"style":128625,"src":140267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140269,140270],{},[1674,140271,140272],{},"初始化样式：",[19,140274,140275],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140277,140278],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140280,140281],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1217,140283,140285],{"id":140284},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140287,140288],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140290,140291,140292,140297],{},"这里最典型的应用就是 ",[1674,140293,140294],{},[50,140295,140296],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3760,140299],{"style":128625,"src":140300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140302,140303],{},"通过link方法来引入",[1217,140305,140307],{"id":140306},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3760,140309],{"style":128625,"src":140310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140312,140313],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1760,140315,140316],{},[1763,140317,140318],{},"制作favicon图标",[19,140320,140321,140322,140325],{},"①把品优购图标切成 ",[50,140323,140324],{},"png"," 图片",[19,140327,140328,140329,140331,140332,140335,140336],{},"②把 ",[50,140330,140324],{}," 图片转换为 ",[50,140333,140334],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2680,140337,140338],{"href":140338,"rel":140339},"http:\u002F\u002Fwww.bitbug.net\u002F",[26128],[1760,140341,140342,140345],{"start":210},[1763,140343,140344],{},"favicon图标放到网站根目录下",[1763,140346,140347],{},"HTML页面引入favicon",[19,140349,140350,140351,140354],{},"在html 页面里面的 ",[50,140352,140353],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140356,140357],{},[50,140358,140359],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140361,140362],{},"复制这行代码或者在生成这个的网站进行复制",[3760,140364],{"style":128625,"src":140365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140367,140368],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140370,140371,140372],{},"例如:",[2680,140373,140374],{"href":140374,"rel":140375},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26128],[1217,140377,140379],{"id":140378},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140381,140382,140385],{},[1674,140383,140384],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140387,140388,140391],{},[1674,140389,140390],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140393,140394],{},"页面必须有三个标签用来符合 SEO 优化",[3760,140396],{"style":128625,"src":140397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1760,140399,140400],{},[1763,140401,140402],{},"title网站标题",[19,140404,140405,140408],{},[1674,140406,140407],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140410,71020],{},[3437,140412,140413,140416],{},[1763,140414,140415],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1763,140417,140418],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1760,140420,140421],{"start":210},[1763,140422,140423],{},"description网站描述",[19,140425,140426],{},"简要说明我们网站主要是做什么的",[19,140428,140429,140432],{},[1674,140430,140431],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140434,71020],{},[19,140436,140437],{},[50,140438,140439],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1760,140441,140442],{"start":254},[1763,140443,140444],{},"keywords关键词",[19,140446,140447],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140449,71020],{},[19,140451,140452],{},[50,140453,140454],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140456,140457],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140459,140460],{},[1674,140461,140462],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1760,140464,140465],{"start":262},[1763,140466,140467],{},"代码总结",[130,140469,140470],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,140471,140472,140476,140490,140494],{"__ignoreMap":135},[139,140473,140474],{"class":141,"line":142},[139,140475,132880],{"class":2512},[139,140477,140478,140480,140482,140484,140486,140488],{"class":141,"line":210},[139,140479,796],{"class":145},[139,140481,53848],{"class":53538},[139,140483,55721],{"class":781},[139,140485,150],{"class":145},[139,140487,132893],{"class":160},[139,140489,53545],{"class":145},[139,140491,140492],{"class":141,"line":254},[139,140493,132900],{"class":145},[139,140495,140496,140498,140500],{"class":141,"line":262},[139,140497,54022],{"class":145},[139,140499,53848],{"class":53538},[139,140501,53545],{"class":145},[14,140503,140505],{"id":140504},"_154-项目公共部分制作","15.4 项目公共部分制作",[1217,140507,140509],{"id":140508},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3760,140511],{"style":128625,"src":140512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1217,140514,140516],{"id":140515},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140518,140519],{},"布局思路：",[3437,140521,140522,140525,140528,140550,140583],{},[1763,140523,140524],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1763,140526,140527],{},"里面包含版心的盒子",[1763,140529,140530,140531],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3437,140532,140533,140541,140547],{},[1763,140534,140535,140536,23767,140538,140540],{},"1 号盒子 里面包含一个",[50,140537,3437],{},[50,140539,3437],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1763,140542,140543,140544,140546],{},"里面的内容是水平排列，所以需要给",[50,140545,1763],{},"设置浮动",[1763,140548,140549],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1763,140551,140552,140553],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3437,140554,140555,140569,140574],{},[1763,140556,140557,140558,23767,140560,140562,140563,140565,140566,140568],{},"2 号盒子 里面包含一个",[50,140559,3437],{},[50,140561,3437],{},"包裹",[50,140564,1763],{},"，中间的",[50,140567,3354],{},"可以用样式去设置，也可以用字符 |",[1763,140570,140571,140572,140546],{},"里面内容水平排列，给",[50,140573,1763],{},[1763,140575,140576,140577,140579,140580,140582],{},"找到里面所有偶数的 ",[50,140578,1763],{}," 设置样式（偶数的 ",[50,140581,1763],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1763,140584,140585,140586],{},"需要用到字体图标",[3437,140587,140588,140594,140597,140600,140603],{},[1763,140589,140590,140591],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[50,140592,140593],{},"arrow-icon",[1763,140595,140596],{},"先要引入字体图片的资源",[1763,140598,140599],{},"在样式里面利用 font-face 来进行声明",[1763,140601,140602],{},"在伪元素的 content属性设置 图标的编码",[1763,140604,140605],{},"给伪元素设置font-family属性",[19,140607,140608],{},"结构实例代码：",[130,140610,140612],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},"div::before {\n  content: \"\";\n  display: block;\n}\n",[50,140613,140614,140622,140632,140642],{"__ignoreMap":135},[139,140615,140616,140618,140620],{"class":141,"line":142},[139,140617,53848],{"class":53538},[139,140619,139770],{"class":781},[139,140621,17840],{"class":145},[139,140623,140624,140626,140628,140630],{"class":141,"line":210},[139,140625,139777],{"class":153},[139,140627,2265],{"class":145},[139,140629,9926],{"class":160},[139,140631,3591],{"class":145},[139,140633,140634,140636,140638,140640],{"class":141,"line":254},[139,140635,130385],{"class":153},[139,140637,2265],{"class":145},[139,140639,63102],{"class":153},[139,140641,3591],{"class":145},[139,140643,140644],{"class":141,"line":262},[139,140645,3862],{"class":145},[19,140647,140648],{},"样式实例代码：",[130,140650,140651],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,140652,140653,140661,140671,140681],{"__ignoreMap":135},[139,140654,140655,140657,140659],{"class":141,"line":142},[139,140656,53848],{"class":53538},[139,140658,139770],{"class":781},[139,140660,17840],{"class":145},[139,140662,140663,140665,140667,140669],{"class":141,"line":210},[139,140664,139777],{"class":153},[139,140666,2265],{"class":145},[139,140668,9926],{"class":160},[139,140670,3591],{"class":145},[139,140672,140673,140675,140677,140679],{"class":141,"line":254},[139,140674,130385],{"class":153},[139,140676,2265],{"class":145},[139,140678,63102],{"class":153},[139,140680,3591],{"class":145},[139,140682,140683],{"class":141,"line":262},[139,140684,3862],{"class":145},[1217,140686,140688],{"id":140687},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3437,140690,140691],{},[1763,140692,140693],{},"header 盒子必须要有高度",[19,140695,140696,140697,140699,140700],{},"1 号盒子是 ",[50,140698,133781],{}," 标志定位，在正常开发过程中， ",[1674,140701,140702,140703,140706],{},"logo的布局其实是有讲究的，需要进行 ",[50,140704,140705],{},"logoSEO","的优化 （★★★）",[3437,140708,140709,140717,140725,140752],{},[1763,140710,140711,140713,140714,140716],{},[50,140712,133781],{}," 里面首先放一个 ",[50,140715,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1763,140718,140719,140721,140722,140724],{},[50,140720,10],{}," 里面再放一个链接，可以返回首页的，把 ",[50,140723,133781],{}," 的背景图片给链接即可",[1763,140726,140727,140728],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3437,140729,140730,140745],{},[1763,140731,140732,140733,140736,140737,140740,140741,140744],{},"方法1：",[50,140734,140735],{},"text-indent"," 移到盒子外面（",[50,140738,140739],{},"text-indent: -9999px",") ，然后 ",[50,140742,140743],{},"overflow:hidden"," ，淘宝的做法",[1763,140746,140747,140748,140751],{},"方法2：直接给 ",[50,140749,140750],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1763,140753,140754,140755,140757,140758,140760],{},"最后给链接一个 ",[50,140756,53645],{}," 属性，这样鼠标放到 ",[50,140759,133781],{}," 上就可以看到提示文字了",[19,140762,140608],{},[130,140764,140765],{"className":129516,"code":134002,"language":129518,"meta":135,"style":135},[50,140766,140767],{"__ignoreMap":135},[139,140768,140769,140771,140773,140775,140777,140779,140781,140783,140785,140787,140789],{"class":141,"line":142},[139,140770,796],{"class":145},[139,140772,2680],{"class":53538},[139,140774,63290],{"class":781},[139,140776,150],{"class":145},[139,140778,134017],{"class":160},[139,140780,134020],{"class":781},[139,140782,150],{"class":145},[139,140784,134025],{"class":160},[139,140786,134028],{"class":145},[139,140788,2680],{"class":53538},[139,140790,53545],{"class":145},[19,140792,140648],{},[130,140794,140795],{"className":129516,"code":134002,"language":129518,"meta":135,"style":135},[50,140796,140797],{"__ignoreMap":135},[139,140798,140799,140801,140803,140805,140807,140809,140811,140813,140815,140817,140819],{"class":141,"line":142},[139,140800,796],{"class":145},[139,140802,2680],{"class":53538},[139,140804,63290],{"class":781},[139,140806,150],{"class":145},[139,140808,134017],{"class":160},[139,140810,134020],{"class":781},[139,140812,150],{"class":145},[139,140814,134025],{"class":160},[139,140816,134028],{"class":145},[139,140818,2680],{"class":53538},[139,140820,53545],{"class":145},[19,140822,140823,140824,140826],{},"2 号盒子是 ",[50,140825,133794],{}," 搜索模块定位",[3437,140828,140829,140832,140835,140838],{},[1763,140830,140831],{},"search盒子利用定位的方式放在对应的位置",[1763,140833,140834],{},"search盒子设置绝对定位，header盒子设置相对定位",[1763,140836,140837],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1763,140839,140840],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140842,140608],{},[130,140844,140845],{"className":128769,"code":134089,"language":128771,"meta":135,"style":135},[50,140846,140847,140869,140873,140883],{"__ignoreMap":135},[139,140848,140849,140851,140853,140855,140857,140859,140861,140863,140865,140867],{"class":141,"line":142},[139,140850,53848],{"class":53538},[139,140852,413],{"class":145},[139,140854,19],{"class":53538},[139,140856,413],{"class":145},[139,140858,10],{"class":53538},[139,140860,413],{"class":145},[139,140862,3437],{"class":53538},[139,140864,413],{"class":145},[139,140866,1763],{"class":53538},[139,140868,17840],{"class":145},[139,140870,140871],{"class":141,"line":210},[139,140872,134118],{"class":2512},[139,140874,140875,140877,140879,140881],{"class":141,"line":254},[139,140876,130385],{"class":153},[139,140878,2265],{"class":145},[139,140880,63102],{"class":153},[139,140882,3591],{"class":145},[139,140884,140885],{"class":141,"line":262},[139,140886,3862],{"class":145},[19,140888,140648],{},[130,140890,140891],{"className":128769,"code":134089,"language":128771,"meta":135,"style":135},[50,140892,140893,140915,140919,140929],{"__ignoreMap":135},[139,140894,140895,140897,140899,140901,140903,140905,140907,140909,140911,140913],{"class":141,"line":142},[139,140896,53848],{"class":53538},[139,140898,413],{"class":145},[139,140900,19],{"class":53538},[139,140902,413],{"class":145},[139,140904,10],{"class":53538},[139,140906,413],{"class":145},[139,140908,3437],{"class":53538},[139,140910,413],{"class":145},[139,140912,1763],{"class":53538},[139,140914,17840],{"class":145},[139,140916,140917],{"class":141,"line":210},[139,140918,134118],{"class":2512},[139,140920,140921,140923,140925,140927],{"class":141,"line":254},[139,140922,130385],{"class":153},[139,140924,2265],{"class":145},[139,140926,63102],{"class":153},[139,140928,3591],{"class":145},[139,140930,140931],{"class":141,"line":262},[139,140932,3862],{"class":145},[19,140934,140935],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140937,140938,140939,140942],{},"3 号盒子是 ",[50,140940,140941],{},"hotwords"," 热词模块定位",[3437,140944,140945,140948,140951],{},[1763,140946,140947],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1763,140949,140950],{},"给里面所有的a标签设置 左右10px的外边距",[1763,140952,140953],{},"给第一个a标签设置文字变红色（#c81623）",[19,140955,140608],{},[130,140957,140959],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},"div {\n  margin: 0 auto;\n}\n",[50,140960,140961,140967,140979],{"__ignoreMap":135},[139,140962,140963,140965],{"class":141,"line":142},[139,140964,53848],{"class":53538},[139,140966,17840],{"class":145},[139,140968,140969,140971,140973,140975,140977],{"class":141,"line":210},[139,140970,72699],{"class":153},[139,140972,2265],{"class":145},[139,140974,2634],{"class":153},[139,140976,53793],{"class":153},[139,140978,3591],{"class":145},[139,140980,140981],{"class":141,"line":254},[139,140982,3862],{"class":145},[19,140984,140648],{},[130,140986,140987],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,140988,140989,140995,141007],{"__ignoreMap":135},[139,140990,140991,140993],{"class":141,"line":142},[139,140992,53848],{"class":53538},[139,140994,17840],{"class":145},[139,140996,140997,140999,141001,141003,141005],{"class":141,"line":210},[139,140998,72699],{"class":153},[139,141000,2265],{"class":145},[139,141002,2634],{"class":153},[139,141004,53793],{"class":153},[139,141006,3591],{"class":145},[139,141008,141009],{"class":141,"line":254},[139,141010,3862],{"class":145},[19,141012,141013,141014,141017],{},"4 号盒子是 ",[50,141015,141016],{},"shopcar"," 购物车模块",[3437,141019,141020,141025,141028,141031],{},[1763,141021,125553,141022,141024],{},[50,141023,141016],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1763,141026,141027],{},"count 统计部分用绝对定位做",[1763,141029,141030],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1763,141032,141033],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141035,140608],{},[130,141037,141038],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,141039,141040,141044,141058,141062,141076,141080,141094,141098,141112,141116],{"__ignoreMap":135},[139,141041,141042],{"class":141,"line":142},[139,141043,134208],{"class":2512},[139,141045,141046,141048,141050,141052,141054,141056],{"class":141,"line":210},[139,141047,134213],{"class":781},[139,141049,82036],{"class":145},[139,141051,131129],{"class":153},[139,141053,2265],{"class":145},[139,141055,134222],{"class":153},[139,141057,131699],{"class":145},[139,141059,141060],{"class":141,"line":254},[139,141061,134229],{"class":2512},[139,141063,141064,141066,141068,141070,141072,141074],{"class":141,"line":262},[139,141065,134234],{"class":781},[139,141067,82036],{"class":145},[139,141069,131129],{"class":153},[139,141071,2265],{"class":145},[139,141073,56998],{"class":153},[139,141075,131699],{"class":145},[139,141077,141078],{"class":141,"line":313},[139,141079,134249],{"class":2512},[139,141081,141082,141084,141086,141088,141090,141092],{"class":141,"line":462},[139,141083,134254],{"class":781},[139,141085,82036],{"class":145},[139,141087,131129],{"class":153},[139,141089,2265],{"class":145},[139,141091,57065],{"class":153},[139,141093,131699],{"class":145},[139,141095,141096],{"class":141,"line":474},[139,141097,134269],{"class":2512},[139,141099,141100,141102,141104,141106,141108,141110],{"class":141,"line":484},[139,141101,134274],{"class":781},[139,141103,82036],{"class":145},[139,141105,131129],{"class":153},[139,141107,2265],{"class":145},[139,141109,88461],{"class":153},[139,141111,131699],{"class":145},[139,141113,141114],{"class":141,"line":989},[139,141115,134289],{"class":2512},[139,141117,141118,141120,141122,141124,141126,141128],{"class":141,"line":994},[139,141119,134294],{"class":781},[139,141121,82036],{"class":145},[139,141123,131129],{"class":153},[139,141125,2265],{"class":145},[139,141127,134303],{"class":153},[139,141129,131699],{"class":145},[19,141131,140648],{},[130,141133,141134],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,141135,141136,141140,141154,141158,141172,141176,141190,141194,141208,141212],{"__ignoreMap":135},[139,141137,141138],{"class":141,"line":142},[139,141139,134208],{"class":2512},[139,141141,141142,141144,141146,141148,141150,141152],{"class":141,"line":210},[139,141143,134213],{"class":781},[139,141145,82036],{"class":145},[139,141147,131129],{"class":153},[139,141149,2265],{"class":145},[139,141151,134222],{"class":153},[139,141153,131699],{"class":145},[139,141155,141156],{"class":141,"line":254},[139,141157,134229],{"class":2512},[139,141159,141160,141162,141164,141166,141168,141170],{"class":141,"line":262},[139,141161,134234],{"class":781},[139,141163,82036],{"class":145},[139,141165,131129],{"class":153},[139,141167,2265],{"class":145},[139,141169,56998],{"class":153},[139,141171,131699],{"class":145},[139,141173,141174],{"class":141,"line":313},[139,141175,134249],{"class":2512},[139,141177,141178,141180,141182,141184,141186,141188],{"class":141,"line":462},[139,141179,134254],{"class":781},[139,141181,82036],{"class":145},[139,141183,131129],{"class":153},[139,141185,2265],{"class":145},[139,141187,57065],{"class":153},[139,141189,131699],{"class":145},[139,141191,141192],{"class":141,"line":474},[139,141193,134269],{"class":2512},[139,141195,141196,141198,141200,141202,141204,141206],{"class":141,"line":484},[139,141197,134274],{"class":781},[139,141199,82036],{"class":145},[139,141201,131129],{"class":153},[139,141203,2265],{"class":145},[139,141205,88461],{"class":153},[139,141207,131699],{"class":145},[139,141209,141210],{"class":141,"line":989},[139,141211,134289],{"class":2512},[139,141213,141214,141216,141218,141220,141222,141224],{"class":141,"line":994},[139,141215,134294],{"class":781},[139,141217,82036],{"class":145},[139,141219,131129],{"class":153},[139,141221,2265],{"class":145},[139,141223,134303],{"class":153},[139,141225,131699],{"class":145},[1217,141227,141229,141230,141232],{"id":141228},"_1544-nav导航模块制作","15.4.4 ",[50,141231,55948],{},"导航模块制作",[3760,141234],{"style":128625,"src":141235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141237,141238,141240],{},[50,141239,55948],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141242,141243,141244],{},"1 号盒子左侧浮动，",[50,141245,141246],{},"dropdown",[3437,141248,141249,141259,141267,141273,141281,141291,141299,141310],{},[1763,141250,141251,141252,103245,141255,141258],{},"1号盒子有讲究，根据相关性 里面包含 ",[50,141253,141254],{},".dt",[50,141256,141257],{},".dd"," 两个盒子",[1763,141260,141261,141263,141264,141266],{},[50,141262,141254],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[50,141265,141257],{}," 挤到下面去了",[1763,141268,141269,141270,141272],{},"给 ",[50,141271,141257],{}," 盒子设置宽度 和 高度，以及背景颜色",[1763,141274,141269,141275,141277,141278,122455],{},[50,141276,141257],{}," 盒子里面定义 无序列表 （",[50,141279,141280],{},"ul > li > a",[1763,141282,141283,141284,141286,141287,141290],{},"每个 ",[50,141285,1763],{}," 都有一个高度（",[50,141288,141289],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1763,141292,141269,141293,141295,141296,122455],{},[50,141294,1763],{}," 里面的a设置文字大小（",[50,141297,141298],{},"14px",[1763,141300,141269,141301,141303,141304,141306,141307,141309],{},[50,141302,1763],{}," 设置 ",[50,141305,129930],{},"，当鼠标移入的时候，让",[50,141308,1763],{},"的背景变成白色，让里面的文字变成红色",[1763,141311,141312,141314,141315,141317,141318,141320],{},[50,141313,1763],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[50,141316,1763],{},"的右侧，那么给",[50,141319,1763],{},"设置相对定位",[19,141322,141323],{},"一定要注意相关性",[19,141325,140608],{},[130,141327,141328],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,141329,141330,141338,141348,141358],{"__ignoreMap":135},[139,141331,141332,141334,141336],{"class":141,"line":142},[139,141333,53848],{"class":53538},[139,141335,139770],{"class":781},[139,141337,17840],{"class":145},[139,141339,141340,141342,141344,141346],{"class":141,"line":210},[139,141341,139777],{"class":153},[139,141343,2265],{"class":145},[139,141345,9926],{"class":160},[139,141347,3591],{"class":145},[139,141349,141350,141352,141354,141356],{"class":141,"line":254},[139,141351,130385],{"class":153},[139,141353,2265],{"class":145},[139,141355,63102],{"class":153},[139,141357,3591],{"class":145},[139,141359,141360],{"class":141,"line":262},[139,141361,3862],{"class":145},[19,141363,140648],{},[130,141365,141366],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,141367,141368,141376,141386,141396],{"__ignoreMap":135},[139,141369,141370,141372,141374],{"class":141,"line":142},[139,141371,53848],{"class":53538},[139,141373,139770],{"class":781},[139,141375,17840],{"class":145},[139,141377,141378,141380,141382,141384],{"class":141,"line":210},[139,141379,139777],{"class":153},[139,141381,2265],{"class":145},[139,141383,9926],{"class":160},[139,141385,3591],{"class":145},[139,141387,141388,141390,141392,141394],{"class":141,"line":254},[139,141389,130385],{"class":153},[139,141391,2265],{"class":145},[139,141393,63102],{"class":153},[139,141395,3591],{"class":145},[139,141397,141398],{"class":141,"line":262},[139,141399,3862],{"class":145},[19,141401,141402],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141404,141405,141406,141409],{},"2 号盒子左侧浮动，",[50,141407,141408],{},"navitems"," 导航栏组",[3437,141411,141412,141417,141426],{},[1763,141413,141414,141415],{},"里面结构是 ",[50,141416,141280],{},[1763,141418,141419,141420,141422,141423,141425],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[50,141421,2680],{},"左右的",[50,141424,33135],{},"把两侧撑开",[1763,141427,141428],{},"让文字垂直居中（行高等于高度）",[3760,141430],{"style":128625,"src":141431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141433,141434],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141436,140608],{},[130,141438,141440],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},".box {\n  float: left;\n}\n",[50,141441,141442,141448,141458],{"__ignoreMap":135},[139,141443,141444,141446],{"class":141,"line":142},[139,141445,132617],{"class":781},[139,141447,17840],{"class":145},[139,141449,141450,141452,141454,141456],{"class":141,"line":210},[139,141451,133249],{"class":153},[139,141453,2265],{"class":145},[139,141455,26003],{"class":153},[139,141457,3591],{"class":145},[139,141459,141460],{"class":141,"line":254},[139,141461,3862],{"class":145},[19,141463,140648],{},[130,141465,141466],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,141467,141468,141474,141484],{"__ignoreMap":135},[139,141469,141470,141472],{"class":141,"line":142},[139,141471,132617],{"class":781},[139,141473,17840],{"class":145},[139,141475,141476,141478,141480,141482],{"class":141,"line":210},[139,141477,133249],{"class":153},[139,141479,2265],{"class":145},[139,141481,26003],{"class":153},[139,141483,3591],{"class":145},[139,141485,141486],{"class":141,"line":254},[139,141487,3862],{"class":145},[19,141489,141490],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3760,141492],{"style":128625,"src":141493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[130,141495,141496],{"className":128769,"code":132926,"language":128771,"meta":135,"style":135},[50,141497,141498,141504,141520],{"__ignoreMap":135},[139,141499,141500,141502],{"class":141,"line":142},[139,141501,53848],{"class":53538},[139,141503,17840],{"class":145},[139,141505,141506,141508,141510,141512,141514,141516,141518],{"class":141,"line":210},[139,141507,73125],{"class":153},[139,141509,2265],{"class":145},[139,141511,410],{"class":153},[139,141513,53729],{"class":149},[139,141515,53758],{"class":153},[139,141517,132161],{"class":153},[139,141519,3591],{"class":145},[139,141521,141522],{"class":141,"line":254},[139,141523,3862],{"class":145},[1217,141525,141527],{"id":141526},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3760,141529],{"style":128625,"src":141530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3437,141532,141533,141538,141543],{},[1763,141534,141535,141537],{},[50,141536,133972],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1763,141539,141540,141542],{},[50,141541,133972],{}," 里面有一个大的版心",[1763,141544,141545,141546,141549,141550],{},"版心里面包含 1 号盒子，",[50,141547,141548],{},"mod_service"," 是服务模块，mod 是模块的意思",[3437,141551,141552,141557,141570,141586,141591],{},[1763,141553,141269,141554,141556],{},[50,141555,141548],{}," 设置高度（80px）和下边框",[1763,141558,141559,141560,141563,141564,141566,141567,141569],{},"在里面定义 ",[50,141561,141562],{},"ul > li"," ,每个",[50,141565,1763],{}," 宽度是300px 高度是 50px，给每个",[50,141568,1763],{},"设置35px的左内边距",[1763,141571,141572,141573,141575,141576,141578,141579,141581,141582,20677,141584,122455],{},"在每个",[50,141574,1763],{},"里面，放一个 ",[50,141577,25177],{},"（里面放图标），一个",[50,141580,53848],{},"（里面放",[50,141583,53848],{},[50,141585,19],{},[1763,141587,141269,141588,141590],{},[50,141589,25177],{},"设置浮动，让h5与这个div左右排列",[1763,141592,141593],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141595,140608],{},[130,141597,141599],{"className":128769,"code":141598,"language":128771,"meta":135,"style":135},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[50,141600,141601,141607,141619,141631,141658],{"__ignoreMap":135},[139,141602,141603,141605],{"class":141,"line":142},[139,141604,136526],{"class":781},[139,141606,17840],{"class":145},[139,141608,141609,141611,141613,141615,141617],{"class":141,"line":210},[139,141610,72797],{"class":153},[139,141612,2265],{"class":145},[139,141614,3135],{"class":153},[139,141616,53729],{"class":149},[139,141618,3591],{"class":145},[139,141620,141621,141623,141625,141627,141629],{"class":141,"line":254},[139,141622,73017],{"class":153},[139,141624,2265],{"class":145},[139,141626,3135],{"class":153},[139,141628,53729],{"class":149},[139,141630,3591],{"class":145},[139,141632,141633,141635,141637,141639,141641,141643,141645,141647,141650,141652,141654,141656],{"class":141,"line":262},[139,141634,72840],{"class":153},[139,141636,2265],{"class":145},[139,141638,63959],{"class":153},[139,141640,157],{"class":145},[139,141642,136565],{"class":2111},[139,141644,2120],{"class":145},[139,141646,63969],{"class":153},[139,141648,141649],{"class":153}," -10",[139,141651,53729],{"class":149},[139,141653,136584],{"class":153},[139,141655,53729],{"class":149},[139,141657,3591],{"class":145},[139,141659,141660],{"class":141,"line":313},[139,141661,3862],{"class":145},[19,141663,140648],{},[130,141665,141666],{"className":128769,"code":141598,"language":128771,"meta":135,"style":135},[50,141667,141668,141674,141686,141698,141724],{"__ignoreMap":135},[139,141669,141670,141672],{"class":141,"line":142},[139,141671,136526],{"class":781},[139,141673,17840],{"class":145},[139,141675,141676,141678,141680,141682,141684],{"class":141,"line":210},[139,141677,72797],{"class":153},[139,141679,2265],{"class":145},[139,141681,3135],{"class":153},[139,141683,53729],{"class":149},[139,141685,3591],{"class":145},[139,141687,141688,141690,141692,141694,141696],{"class":141,"line":254},[139,141689,73017],{"class":153},[139,141691,2265],{"class":145},[139,141693,3135],{"class":153},[139,141695,53729],{"class":149},[139,141697,3591],{"class":145},[139,141699,141700,141702,141704,141706,141708,141710,141712,141714,141716,141718,141720,141722],{"class":141,"line":262},[139,141701,72840],{"class":153},[139,141703,2265],{"class":145},[139,141705,63959],{"class":153},[139,141707,157],{"class":145},[139,141709,136565],{"class":2111},[139,141711,2120],{"class":145},[139,141713,63969],{"class":153},[139,141715,141649],{"class":153},[139,141717,53729],{"class":149},[139,141719,136584],{"class":153},[139,141721,53729],{"class":149},[139,141723,3591],{"class":145},[139,141725,141726],{"class":141,"line":313},[139,141727,3862],{"class":145},[19,141729,141730],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3437,141732,141733,141736,141742,141748,141760],{},[1763,141734,141735],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1763,141737,141738,141739,122455],{},"里面的布局利用 自定义列表来实现（",[50,141740,141741],{},"dl > dt + dd",[1763,141743,141269,141744,141747],{},[50,141745,141746],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1763,141749,141269,141750,141753,141754,20677,141756,141759],{},[50,141751,141752],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[50,141755,141752],{},[50,141757,141758],{},"dd","之间有些距离",[1763,141761,141762],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141764,140608],{},[130,141766,141767],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,141768,141769,141775,141787],{"__ignoreMap":135},[139,141770,141771,141773],{"class":141,"line":142},[139,141772,53848],{"class":53538},[139,141774,17840],{"class":145},[139,141776,141777,141779,141781,141783,141785],{"class":141,"line":210},[139,141778,72699],{"class":153},[139,141780,2265],{"class":145},[139,141782,2634],{"class":153},[139,141784,53793],{"class":153},[139,141786,3591],{"class":145},[139,141788,141789],{"class":141,"line":254},[139,141790,3862],{"class":145},[19,141792,140648],{},[130,141794,141795],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,141796,141797,141803,141815],{"__ignoreMap":135},[139,141798,141799,141801],{"class":141,"line":142},[139,141800,53848],{"class":53538},[139,141802,17840],{"class":145},[139,141804,141805,141807,141809,141811,141813],{"class":141,"line":210},[139,141806,72699],{"class":153},[139,141808,2265],{"class":145},[139,141810,2634],{"class":153},[139,141812,53793],{"class":153},[139,141814,3591],{"class":145},[139,141816,141817],{"class":141,"line":254},[139,141818,3862],{"class":145},[19,141820,141821],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3437,141823,141824,141833,141836,141847],{},[1763,141825,141826,141827,141829,141830,141832],{},"分为上下两块，上面是 ",[50,141828,133989],{}," 友情链接，下面是 ",[50,141831,133982],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1763,141834,141835],{},"把内容分别复制到相应模块中",[1763,141837,141269,141838,141840,141841,141843,141844,141846],{},[50,141839,133989],{}," 设置 15px 的下外边距，给",[50,141842,133989],{}," 里面 的 ",[50,141845,2680],{}," 标签设置 左右 3px 的外边距",[1763,141848,141849,141850,141852],{},"给",[50,141851,133982],{}," 设置 20px 的行高",[19,141854,140608],{},[130,141856,141857],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,141858,141859,141865,141877],{"__ignoreMap":135},[139,141860,141861,141863],{"class":141,"line":142},[139,141862,53848],{"class":53538},[139,141864,17840],{"class":145},[139,141866,141867,141869,141871,141873,141875],{"class":141,"line":210},[139,141868,72699],{"class":153},[139,141870,2265],{"class":145},[139,141872,2634],{"class":153},[139,141874,53793],{"class":153},[139,141876,3591],{"class":145},[139,141878,141879],{"class":141,"line":254},[139,141880,3862],{"class":145},[19,141882,140648],{},[130,141884,141885],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,141886,141887,141893,141905],{"__ignoreMap":135},[139,141888,141889,141891],{"class":141,"line":142},[139,141890,53848],{"class":53538},[139,141892,17840],{"class":145},[139,141894,141895,141897,141899,141901,141903],{"class":141,"line":210},[139,141896,72699],{"class":153},[139,141898,2265],{"class":145},[139,141900,2634],{"class":153},[139,141902,53793],{"class":153},[139,141904,3591],{"class":145},[139,141906,141907],{"class":141,"line":254},[139,141908,3862],{"class":145},[19,141910,141911],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2348,141913,141914],{},"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":135,"searchDepth":210,"depth":210,"links":141916},[141917,141918,141919,141926],{"id":140197,"depth":210,"text":140198},{"id":140216,"depth":210,"text":140217},{"id":140243,"depth":210,"text":140244,"children":141920},[141921,141922,141923,141924,141925],{"id":140247,"depth":254,"text":140248},{"id":140260,"depth":254,"text":140261},{"id":140284,"depth":254,"text":140285},{"id":140306,"depth":254,"text":140307},{"id":140378,"depth":254,"text":140379},{"id":140504,"depth":210,"text":140505,"children":141927},[141928,141929,141930,141931,141933],{"id":140508,"depth":254,"text":140509},{"id":140515,"depth":254,"text":140516},{"id":140687,"depth":254,"text":140688},{"id":141228,"depth":254,"text":141932},"15.4.4 nav导航模块制作",{"id":141526,"depth":254,"text":141527},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140189,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141940,"title":141941,"body":141942,"description":2384,"extension":2385,"meta":144344,"navigation":842,"path":144345,"seo":144346,"stem":144347,"__hash__":144348},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141943,"toc":144321},[141944,141947,141951,141955,141967,141970,141973,141976,141987,141989,142013,142015,142039,142044,142047,142049,142085,142087,142123,142126,142131,142134,142137,142140,142170,142177,142180,142190,142192,142226,142229,142263,142269,142286,142288,142324,142326,142362,142367,142392,142394,142420,142422,142446,142453,142456,142520,142522,142564,142566,142606,142613,142618,142620,142650,142652,142682,142686,142689,142696,142708,142710,142736,142738,142762,142765,142767,142791,142797,142807,142809,142839,142841,142871,142878,142919,142921,142957,142959,142995,142999,143002,143005,143008,143014,143019,143022,143045,143048,143072,143075,143099,143104,143107,143110,143113,143116,143119,143193,143195,143225,143227,143257,143260,143263,143295,143299,143303,143317,143326,143329,143334,143336,143430,143432,143526,143549,143551,143575,143577,143601,143608,143611,143621,143623,143647,143652,143660,143662,143692,143697,143737,143739,143765,143767,143793,143797,143800,143805,143808,143812,143820,143827,143835,143837,143867,143869,143899,143907,143910,143913,143915,143945,143947,143977,143980,143985,143987,144011,144013,144037,144040,144125,144127,144151,144153,144177,144181,144183,144207,144209,144243,144247,144261,144264,144269,144272,144277,144280,144310,144318],[10,141945,141941],{"id":141946},"_16-品优购项目下篇-主体与页面开发",[14,141948,141950],{"id":141949},"_161-项目主体模块制作","16.1 项目主体模块制作",[1217,141952,141954],{"id":141953},"_1611-首页制作","16.1.1 首页制作",[19,141956,141957,141959,141960,141962,141963,141966],{},[1674,141958,1680],{}," 主体模块是 ",[1674,141961,76287],{}," 里面专有的，注意需要新的样式文件 ",[1674,141964,141965],{},"index.css，"," 就不要写在common.css中了",[3760,141968],{"style":128625,"src":141969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3760,141971],{"style":128625,"src":141972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141974,141975],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3437,141977,141978,141981,141984],{},[1763,141979,141980],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1763,141982,141983],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1763,141985,141986],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141988,140608],{},[130,141990,141991],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,141992,141993,141999,142009],{"__ignoreMap":135},[139,141994,141995,141997],{"class":141,"line":142},[139,141996,132617],{"class":781},[139,141998,17840],{"class":145},[139,142000,142001,142003,142005,142007],{"class":141,"line":210},[139,142002,133249],{"class":153},[139,142004,2265],{"class":145},[139,142006,26003],{"class":153},[139,142008,3591],{"class":145},[139,142010,142011],{"class":141,"line":254},[139,142012,3862],{"class":145},[19,142014,140648],{},[130,142016,142017],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,142018,142019,142025,142035],{"__ignoreMap":135},[139,142020,142021,142023],{"class":141,"line":142},[139,142022,132617],{"class":781},[139,142024,17840],{"class":145},[139,142026,142027,142029,142031,142033],{"class":141,"line":210},[139,142028,133249],{"class":153},[139,142030,2265],{"class":145},[139,142032,26003],{"class":153},[139,142034,3591],{"class":145},[139,142036,142037],{"class":141,"line":254},[139,142038,3862],{"class":145},[1760,142040,142041],{},[1763,142042,142043],{},"左侧focus模块制作",[3760,142045],{"style":128625,"src":142046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142048,140608],{},[130,142050,142051],{"className":128769,"code":130092,"language":128771,"meta":135,"style":135},[50,142052,142053,142061,142071,142081],{"__ignoreMap":135},[139,142054,142055,142057,142059],{"class":141,"line":142},[139,142056,199],{"class":53538},[139,142058,64133],{"class":781},[139,142060,17840],{"class":145},[139,142062,142063,142065,142067,142069],{"class":141,"line":210},[139,142064,130107],{"class":153},[139,142066,2265],{"class":145},[139,142068,57123],{"class":153},[139,142070,3591],{"class":145},[139,142072,142073,142075,142077,142079],{"class":141,"line":254},[139,142074,73027],{"class":153},[139,142076,2265],{"class":145},[139,142078,56971],{"class":153},[139,142080,3591],{"class":145},[139,142082,142083],{"class":141,"line":262},[139,142084,3862],{"class":145},[19,142086,140648],{},[130,142088,142089],{"className":128769,"code":130092,"language":128771,"meta":135,"style":135},[50,142090,142091,142099,142109,142119],{"__ignoreMap":135},[139,142092,142093,142095,142097],{"class":141,"line":142},[139,142094,199],{"class":53538},[139,142096,64133],{"class":781},[139,142098,17840],{"class":145},[139,142100,142101,142103,142105,142107],{"class":141,"line":210},[139,142102,130107],{"class":153},[139,142104,2265],{"class":145},[139,142106,57123],{"class":153},[139,142108,3591],{"class":145},[139,142110,142111,142113,142115,142117],{"class":141,"line":254},[139,142112,73027],{"class":153},[139,142114,2265],{"class":145},[139,142116,56971],{"class":153},[139,142118,3591],{"class":145},[139,142120,142121],{"class":141,"line":262},[139,142122,3862],{"class":145},[19,142124,142125],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1760,142127,142128],{"start":210},[1763,142129,142130],{},"右侧newsflash模块制作",[3760,142132],{"style":128625,"src":142133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142135,142136],{},"右侧的模块 分为上中下三个盒子",[19,142138,142139],{},"结构代码：",[130,142141,142142],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,142143,142144],{"__ignoreMap":135},[139,142145,142146,142148,142150,142152,142154,142156,142158,142160,142162,142164,142166,142168],{"class":141,"line":142},[139,142147,796],{"class":145},[139,142149,3760],{"class":53538},[139,142151,57473],{"class":781},[139,142153,150],{"class":145},[139,142155,136286],{"class":160},[139,142157,57481],{"class":781},[139,142159,150],{"class":145},[139,142161,136293],{"class":160},[139,142163,136296],{"class":781},[139,142165,150],{"class":145},[139,142167,136301],{"class":160},[139,142169,53545],{"class":145},[19,142171,142172,142173,142176],{},"1 号盒子为 ",[50,142174,142175],{},"news"," 新闻模块 高度为 165px",[3760,142178],{"style":128625,"src":142179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142181,142182,142183,142186,142187],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[50,142184,142185],{},"news-hd","，下面是 ",[50,142188,142189],{},"news-bd",[19,142191,142139],{},[130,142193,142194],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,142195,142196,142200,142214,142218],{"__ignoreMap":135},[139,142197,142198],{"class":141,"line":142},[139,142199,132880],{"class":2512},[139,142201,142202,142204,142206,142208,142210,142212],{"class":141,"line":210},[139,142203,796],{"class":145},[139,142205,53848],{"class":53538},[139,142207,55721],{"class":781},[139,142209,150],{"class":145},[139,142211,132893],{"class":160},[139,142213,53545],{"class":145},[139,142215,142216],{"class":141,"line":254},[139,142217,132900],{"class":145},[139,142219,142220,142222,142224],{"class":141,"line":262},[139,142221,54022],{"class":145},[139,142223,53848],{"class":53538},[139,142225,53545],{"class":145},[19,142227,142228],{},"样式代码：",[130,142230,142231],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,142232,142233,142237,142251,142255],{"__ignoreMap":135},[139,142234,142235],{"class":141,"line":142},[139,142236,132880],{"class":2512},[139,142238,142239,142241,142243,142245,142247,142249],{"class":141,"line":210},[139,142240,796],{"class":145},[139,142242,53848],{"class":53538},[139,142244,55721],{"class":781},[139,142246,150],{"class":145},[139,142248,132893],{"class":160},[139,142250,53545],{"class":145},[139,142252,142253],{"class":141,"line":254},[139,142254,132900],{"class":145},[139,142256,142257,142259,142261],{"class":141,"line":262},[139,142258,54022],{"class":145},[139,142260,53848],{"class":53538},[139,142262,53545],{"class":145},[19,142264,142265,142266,142268],{},"上面是",[50,142267,142185],{},"，设置高度是 33px，设置下边框",[3437,142270,142271,142277],{},[1763,142272,142273,142274,142276],{},"里面放一个",[50,142275,25177],{}," 标题",[1763,142278,142279,142280,142282,142283,142285],{},"放一个a",[50,142281,104917],{},"，内容是 更多，然后让 ",[50,142284,2680],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142287,142139],{},[130,142289,142290],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,142291,142292,142300,142310,142320],{"__ignoreMap":135},[139,142293,142294,142296,142298],{"class":141,"line":142},[139,142295,53848],{"class":53538},[139,142297,139770],{"class":781},[139,142299,17840],{"class":145},[139,142301,142302,142304,142306,142308],{"class":141,"line":210},[139,142303,139777],{"class":153},[139,142305,2265],{"class":145},[139,142307,9926],{"class":160},[139,142309,3591],{"class":145},[139,142311,142312,142314,142316,142318],{"class":141,"line":254},[139,142313,130385],{"class":153},[139,142315,2265],{"class":145},[139,142317,63102],{"class":153},[139,142319,3591],{"class":145},[139,142321,142322],{"class":141,"line":262},[139,142323,3862],{"class":145},[19,142325,142228],{},[130,142327,142328],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,142329,142330,142338,142348,142358],{"__ignoreMap":135},[139,142331,142332,142334,142336],{"class":141,"line":142},[139,142333,53848],{"class":53538},[139,142335,139770],{"class":781},[139,142337,17840],{"class":145},[139,142339,142340,142342,142344,142346],{"class":141,"line":210},[139,142341,139777],{"class":153},[139,142343,2265],{"class":145},[139,142345,9926],{"class":160},[139,142347,3591],{"class":145},[139,142349,142350,142352,142354,142356],{"class":141,"line":254},[139,142351,130385],{"class":153},[139,142353,2265],{"class":145},[139,142355,63102],{"class":153},[139,142357,3591],{"class":145},[139,142359,142360],{"class":141,"line":262},[139,142361,3862],{"class":145},[19,142363,142364,142365],{},"下面是",[50,142366,142189],{},[3437,142368,142369,142377],{},[1763,142370,142371,142372,103245,142374,142376],{},"里面包含 ",[50,142373,3437],{},[50,142375,1763],{}," 还有链接",[1763,142378,141849,142379,142381,142382,142384,142385,142388,142389],{},[50,142380,1763],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[50,142383,133435],{}," 2.设置 ",[50,142386,142387],{},"white-space: nowrap;"," 3. 设置 ",[50,142390,142391],{},"text-overflow: ellipsis;",[19,142393,142139],{},[130,142395,142397],{"className":128769,"code":142396,"language":128771,"meta":135,"style":135},"div {\n  overflow: hidden;\n}\n",[50,142398,142399,142405,142416],{"__ignoreMap":135},[139,142400,142401,142403],{"class":141,"line":142},[139,142402,53848],{"class":53538},[139,142404,17840],{"class":145},[139,142406,142407,142410,142412,142414],{"class":141,"line":210},[139,142408,142409],{"class":153},"  overflow",[139,142411,2265],{"class":145},[139,142413,63947],{"class":153},[139,142415,3591],{"class":145},[139,142417,142418],{"class":141,"line":254},[139,142419,3862],{"class":145},[19,142421,142228],{},[130,142423,142424],{"className":128769,"code":142396,"language":128771,"meta":135,"style":135},[50,142425,142426,142432,142442],{"__ignoreMap":135},[139,142427,142428,142430],{"class":141,"line":142},[139,142429,53848],{"class":53538},[139,142431,17840],{"class":145},[139,142433,142434,142436,142438,142440],{"class":141,"line":210},[139,142435,142409],{"class":153},[139,142437,2265],{"class":145},[139,142439,63947],{"class":153},[139,142441,3591],{"class":145},[139,142443,142444],{"class":141,"line":254},[139,142445,3862],{"class":145},[19,142447,142448,142449,142452],{},"2 号盒子为 ",[50,142450,142451],{},"lifeservice"," 生活服务模块 高度为 209px",[3760,142454],{"style":128625,"src":142455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3437,142457,142458,142461,142471,142495,142506],{},[1763,142459,142460],{},"设置边框（左右下边框）",[1763,142462,142463,142464,142467,142468,142470],{},"里面的内容 是 ",[50,142465,142466],{},"ul > 12*li","，给",[50,142469,1763],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1763,142472,142473,142474],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3437,142475,142476,142481,142490],{},[1763,142477,142478,142480],{},[50,142479,142451],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1763,142482,142483,142484,142486,142487,142489],{},"可以让 ",[50,142485,142451],{}," 里面的 ",[50,142488,3437],{}," 宽度为 252，就可以装的下 4 个 小 li",[1763,142491,142492,142494],{},[50,142493,142451],{}," 盒子 overflow 隐藏多余的部分就可以了",[1763,142496,118687,142497,142499,142500,142502,142503,142505],{},[50,142498,1763],{}," 里面放一个 ",[50,142501,2879],{},"（里面放图标），下面的文本用 ",[50,142504,19],{}," 标签包裹",[1763,142507,141269,142508,142510,142511,142513,142514,141303,142516,142519],{},[50,142509,2879],{}," 设置 24px宽和28px的高（注意 ",[50,142512,2879],{}," 是行内元素， 转成行内块），给 ",[50,142515,1763],{},[50,142517,142518],{},"text-align:center"," 让里面内容居中显示",[19,142521,142139],{},[130,142523,142525],{"className":128769,"code":142524,"language":128771,"meta":135,"style":135},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[50,142526,142527,142545,142550,142560],{"__ignoreMap":135},[139,142528,142529,142531,142533,142535,142537,142539,142541,142543],{"class":141,"line":142},[139,142530,139],{"class":53538},[139,142532,413],{"class":145},[139,142534,2680],{"class":53538},[139,142536,413],{"class":145},[139,142538,25820],{"class":53538},[139,142540,413],{"class":145},[139,142542,1674],{"class":53538},[139,142544,17840],{"class":145},[139,142546,142547],{"class":141,"line":210},[139,142548,142549],{"class":2512},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[139,142551,142552,142554,142556,142558],{"class":141,"line":254},[139,142553,130385],{"class":153},[139,142555,2265],{"class":145},[139,142557,130447],{"class":153},[139,142559,3591],{"class":145},[139,142561,142562],{"class":141,"line":262},[139,142563,3862],{"class":145},[19,142565,142228],{},[130,142567,142568],{"className":128769,"code":142524,"language":128771,"meta":135,"style":135},[50,142569,142570,142588,142592,142602],{"__ignoreMap":135},[139,142571,142572,142574,142576,142578,142580,142582,142584,142586],{"class":141,"line":142},[139,142573,139],{"class":53538},[139,142575,413],{"class":145},[139,142577,2680],{"class":53538},[139,142579,413],{"class":145},[139,142581,25820],{"class":53538},[139,142583,413],{"class":145},[139,142585,1674],{"class":53538},[139,142587,17840],{"class":145},[139,142589,142590],{"class":141,"line":210},[139,142591,142549],{"class":2512},[139,142593,142594,142596,142598,142600],{"class":141,"line":254},[139,142595,130385],{"class":153},[139,142597,2265],{"class":145},[139,142599,130447],{"class":153},[139,142601,3591],{"class":145},[139,142603,142604],{"class":141,"line":262},[139,142605,3862],{"class":145},[19,142607,142608,142609,142612],{},"3 号盒子为 ",[50,142610,142611],{},"bargain"," 特价商品",[3437,142614,142615],{},[1763,142616,142617],{},"这个比较简单，直接插入一张图片即可",[19,142619,142139],{},[130,142621,142622],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,142623,142624],{"__ignoreMap":135},[139,142625,142626,142628,142630,142632,142634,142636,142638,142640,142642,142644,142646,142648],{"class":141,"line":142},[139,142627,796],{"class":145},[139,142629,3760],{"class":53538},[139,142631,57473],{"class":781},[139,142633,150],{"class":145},[139,142635,136286],{"class":160},[139,142637,57481],{"class":781},[139,142639,150],{"class":145},[139,142641,136293],{"class":160},[139,142643,136296],{"class":781},[139,142645,150],{"class":145},[139,142647,136301],{"class":160},[139,142649,53545],{"class":145},[19,142651,142228],{},[130,142653,142654],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,142655,142656],{"__ignoreMap":135},[139,142657,142658,142660,142662,142664,142666,142668,142670,142672,142674,142676,142678,142680],{"class":141,"line":142},[139,142659,796],{"class":145},[139,142661,3760],{"class":53538},[139,142663,57473],{"class":781},[139,142665,150],{"class":145},[139,142667,136286],{"class":160},[139,142669,57481],{"class":781},[139,142671,150],{"class":145},[139,142673,136293],{"class":160},[139,142675,136296],{"class":781},[139,142677,150],{"class":145},[139,142679,136301],{"class":160},[139,142681,53545],{"class":145},[1217,142683,142685],{"id":142684},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3760,142687],{"style":128625,"src":142688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142690,142691,142692,142695],{},"大盒子 ",[50,142693,142694],{},"recom"," 推荐模块 recommend",[3437,142697,142698],{},[1763,142699,142700,142701,142703,142704,142707],{},"给这个 ",[50,142702,142694],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[50,142705,142706],{},"#ebebeb","），设置距离上边 12px",[19,142709,142139],{},[130,142711,142713],{"className":128769,"code":142712,"language":128771,"meta":135,"style":135},"div {\n  background-color: #f0f0f0;\n}\n",[50,142714,142715,142721,142732],{"__ignoreMap":135},[139,142716,142717,142719],{"class":141,"line":142},[139,142718,53848],{"class":53538},[139,142720,17840],{"class":145},[139,142722,142723,142725,142727,142730],{"class":141,"line":210},[139,142724,73107],{"class":153},[139,142726,2265],{"class":145},[139,142728,142729],{"class":153},"#f0f0f0",[139,142731,3591],{"class":145},[139,142733,142734],{"class":141,"line":254},[139,142735,3862],{"class":145},[19,142737,142228],{},[130,142739,142740],{"className":128769,"code":142712,"language":128771,"meta":135,"style":135},[50,142741,142742,142748,142758],{"__ignoreMap":135},[139,142743,142744,142746],{"class":141,"line":142},[139,142745,53848],{"class":53538},[139,142747,17840],{"class":145},[139,142749,142750,142752,142754,142756],{"class":141,"line":210},[139,142751,73107],{"class":153},[139,142753,2265],{"class":145},[139,142755,142729],{"class":153},[139,142757,3591],{"class":145},[139,142759,142760],{"class":141,"line":254},[139,142761,3862],{"class":145},[19,142763,142764],{},"里面包含 2 个盒子， 浮动即可",[19,142766,142139],{},[130,142768,142769],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,142770,142771,142777,142787],{"__ignoreMap":135},[139,142772,142773,142775],{"class":141,"line":142},[139,142774,132617],{"class":781},[139,142776,17840],{"class":145},[139,142778,142779,142781,142783,142785],{"class":141,"line":210},[139,142780,133249],{"class":153},[139,142782,2265],{"class":145},[139,142784,26003],{"class":153},[139,142786,3591],{"class":145},[139,142788,142789],{"class":141,"line":254},[139,142790,3862],{"class":145},[19,142792,142793,142794],{},"1 号盒子 ",[50,142795,142796],{},"recom_hd",[3437,142798,142799,142802],{},[1763,142800,142801],{},"设置宽度205px，高度163px",[1763,142803,142273,142804,142806],{},[50,142805,3760],{},"标签，插入图片即可",[19,142808,142139],{},[130,142810,142811],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,142812,142813],{"__ignoreMap":135},[139,142814,142815,142817,142819,142821,142823,142825,142827,142829,142831,142833,142835,142837],{"class":141,"line":142},[139,142816,796],{"class":145},[139,142818,3760],{"class":53538},[139,142820,57473],{"class":781},[139,142822,150],{"class":145},[139,142824,136286],{"class":160},[139,142826,57481],{"class":781},[139,142828,150],{"class":145},[139,142830,136293],{"class":160},[139,142832,136296],{"class":781},[139,142834,150],{"class":145},[139,142836,136301],{"class":160},[139,142838,53545],{"class":145},[19,142840,142228],{},[130,142842,142843],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,142844,142845],{"__ignoreMap":135},[139,142846,142847,142849,142851,142853,142855,142857,142859,142861,142863,142865,142867,142869],{"class":141,"line":142},[139,142848,796],{"class":145},[139,142850,3760],{"class":53538},[139,142852,57473],{"class":781},[139,142854,150],{"class":145},[139,142856,136286],{"class":160},[139,142858,57481],{"class":781},[139,142860,150],{"class":145},[139,142862,136293],{"class":160},[139,142864,136296],{"class":781},[139,142866,150],{"class":145},[139,142868,136301],{"class":160},[139,142870,53545],{"class":145},[19,142872,142873,142874,142877],{},"2 号盒子 ",[50,142875,142876],{},"recom_bd"," ，注意里面的小竖线",[3437,142879,142880,142891,142894,142899,142904],{},[1763,142881,142882,142883,142885,142886,142888,142889],{},"右侧结构里面放 ",[50,142884,3437],{}," 包含 4个 ",[50,142887,1763],{},"，每个li里面包含一个",[50,142890,3760],{},[1763,142892,142893],{},"直接利用切片工具把里面的内容当成一张图片",[1763,142895,141269,142896,142898],{},[50,142897,1763],{}," 设置浮动",[1763,142900,141269,142901,142903],{},[50,142902,3760],{}," 设置宽高，宽度 248px，高度 163px",[1763,142905,142906,142907,142467,142910,142912,142913,142915,142916],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[50,142908,142909],{},"top 10px",[50,142911,1763],{},"设置相对定位（注意，最后一个",[50,142914,1763],{},"不用设置伪元素），可以利用 ",[50,142917,142918],{},"nth-child(-n+3){...}",[19,142920,142139],{},[130,142922,142923],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,142924,142925,142933,142943,142953],{"__ignoreMap":135},[139,142926,142927,142929,142931],{"class":141,"line":142},[139,142928,53848],{"class":53538},[139,142930,139770],{"class":781},[139,142932,17840],{"class":145},[139,142934,142935,142937,142939,142941],{"class":141,"line":210},[139,142936,139777],{"class":153},[139,142938,2265],{"class":145},[139,142940,9926],{"class":160},[139,142942,3591],{"class":145},[139,142944,142945,142947,142949,142951],{"class":141,"line":254},[139,142946,130385],{"class":153},[139,142948,2265],{"class":145},[139,142950,63102],{"class":153},[139,142952,3591],{"class":145},[139,142954,142955],{"class":141,"line":262},[139,142956,3862],{"class":145},[19,142958,142228],{},[130,142960,142961],{"className":128769,"code":140611,"language":128771,"meta":135,"style":135},[50,142962,142963,142971,142981,142991],{"__ignoreMap":135},[139,142964,142965,142967,142969],{"class":141,"line":142},[139,142966,53848],{"class":53538},[139,142968,139770],{"class":781},[139,142970,17840],{"class":145},[139,142972,142973,142975,142977,142979],{"class":141,"line":210},[139,142974,139777],{"class":153},[139,142976,2265],{"class":145},[139,142978,9926],{"class":160},[139,142980,3591],{"class":145},[139,142982,142983,142985,142987,142989],{"class":141,"line":254},[139,142984,130385],{"class":153},[139,142986,2265],{"class":145},[139,142988,63102],{"class":153},[139,142990,3591],{"class":145},[139,142992,142993],{"class":141,"line":262},[139,142994,3862],{"class":145},[1217,142996,142998],{"id":142997},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3760,143000],{"style":128625,"src":143001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143003,143004],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143006,143007],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143009,143010,143013],{},[50,143011,143012],{},"box_hd"," 制作",[19,143015,142793,143016,143018],{},[50,143017,143012],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3760,143020],{"style":128625,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3437,143023,143024,143029,143034,143037],{},[1763,143025,143026,143028],{},[50,143027,143012],{}," 给 30px 的高度，2个像素的下边框",[1763,143030,143031,143032],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[50,143033,141280],{},[1763,143035,143036],{},"左侧盒左浮动，右侧盒子右浮动",[1763,143038,143039,143041,143042,143044],{},[50,143040,2680],{},"标签之间的距离用左右的",[50,143043,33135],{},"撑开即可",[19,143046,143047],{},"结构代码",[130,143049,143050],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143051,143052,143058,143068],{"__ignoreMap":135},[139,143053,143054,143056],{"class":141,"line":142},[139,143055,132617],{"class":781},[139,143057,17840],{"class":145},[139,143059,143060,143062,143064,143066],{"class":141,"line":210},[139,143061,133249],{"class":153},[139,143063,2265],{"class":145},[139,143065,26003],{"class":153},[139,143067,3591],{"class":145},[139,143069,143070],{"class":141,"line":254},[139,143071,3862],{"class":145},[19,143073,143074],{},"样式代码",[130,143076,143077],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143078,143079,143085,143095],{"__ignoreMap":135},[139,143080,143081,143083],{"class":141,"line":142},[139,143082,132617],{"class":781},[139,143084,17840],{"class":145},[139,143086,143087,143089,143091,143093],{"class":141,"line":210},[139,143088,133249],{"class":153},[139,143090,2265],{"class":145},[139,143092,26003],{"class":153},[139,143094,3591],{"class":145},[139,143096,143097],{"class":141,"line":254},[139,143098,3862],{"class":145},[19,143100,143101,143013],{},[50,143102,143103],{},"box_bd",[19,143105,143106],{},"2 号盒子 box_bd，不要给高度",[3760,143108],{"style":128625,"src":143109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143111,143112],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143114,143115],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143117,143118],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3437,143120,143121,143133,143149],{},[1763,143122,143123,143125,143126,143129,143130,143132],{},[50,143124,143103],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[50,143127,143128],{},"tab_content","，在",[50,143131,143128],{}," 里面包裹tab选项卡对应的内容",[1763,143134,143135,143136,143139,143140,143142,143143,143145,143146,143148],{},"内容被一个大盒子包裹（",[50,143137,143138],{},"tab_list_item","），里面是 ",[50,143141,3437],{}," 包裹 5个 ",[50,143144,1763],{},"，每个",[50,143147,1763],{},"设置对应的宽度，然后设置浮动",[1763,143150,143151,143152,143154,143155,143157,143158],{},"而这5个",[50,143153,1763],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[50,143156,1763],{},"设置",[3437,143159,143160,143178,143181],{},[1763,143161,143162,143163,143165,143166,143168,143169,143171,143172,143174,143175,143177],{},"第一个小 ",[50,143164,1763],{}," 分为上下结构，上面是 ",[50,143167,3437],{}," 包裹 ",[50,143170,1763],{}," ，",[50,143173,1763],{},"里面包裹 ",[50,143176,2680],{},"，下面插入一张图片",[1763,143179,143180],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1763,143182,143183,143184,143186,143187,143189,143190,143192],{},"后面的小 ",[50,143185,1763],{}," 里面先放一个",[50,143188,2680],{},"标签，然后在",[50,143191,2680],{},"标签里面插入图片即可",[19,143194,143047],{},[130,143196,143197],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,143198,143199],{"__ignoreMap":135},[139,143200,143201,143203,143205,143207,143209,143211,143213,143215,143217,143219,143221,143223],{"class":141,"line":142},[139,143202,796],{"class":145},[139,143204,3760],{"class":53538},[139,143206,57473],{"class":781},[139,143208,150],{"class":145},[139,143210,136286],{"class":160},[139,143212,57481],{"class":781},[139,143214,150],{"class":145},[139,143216,136293],{"class":160},[139,143218,136296],{"class":781},[139,143220,150],{"class":145},[139,143222,136301],{"class":160},[139,143224,53545],{"class":145},[19,143226,143074],{},[130,143228,143229],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,143230,143231],{"__ignoreMap":135},[139,143232,143233,143235,143237,143239,143241,143243,143245,143247,143249,143251,143253,143255],{"class":141,"line":142},[139,143234,796],{"class":145},[139,143236,3760],{"class":53538},[139,143238,57473],{"class":781},[139,143240,150],{"class":145},[139,143242,136286],{"class":160},[139,143244,57481],{"class":781},[139,143246,150],{"class":145},[139,143248,136293],{"class":160},[139,143250,136296],{"class":781},[139,143252,150],{"class":145},[139,143254,136301],{"class":160},[139,143256,53545],{"class":145},[19,143258,143259],{},"tab栏切换需求！！！！！！介绍：",[3760,143261],{"style":128625,"src":143262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3437,143264,143265,143273,143279,143282],{},[1763,143266,143267,143270,143271],{},[50,143268,143269],{},"tab","栏的布局是 ",[50,143272,141280],{},[1763,143274,143275,143276,143278],{},"有多少个",[50,143277,143269],{},"选项卡，那么对应就有多少个内容",[1763,143280,143281],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1763,143283,143284,143285,143288,143289,143291,143292,143294],{},"等后面我们学习了",[50,143286,143287],{},"js","之后，我们就会配合",[50,143290,143287],{},"来实现，",[50,143293,143269],{},"栏的切换",[14,143296,143298],{"id":143297},"_162-列表制作","16.2 列表制作",[1217,143300,143302],{"id":143301},"_1621-准备工作","16.2.1 准备工作",[3437,143304,143305,143308,143311,143314],{},[1763,143306,143307],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1763,143309,143310],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1763,143312,143313],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1763,143315,143316],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1217,143318,143320,143321,103245,143323,143325],{"id":143319},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[50,143322,133774],{},[50,143324,55948],{}," 修改",[3760,143327],{"style":128625,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3437,143330,143331],{},[1763,143332,143333],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143335,142139],{},[130,143337,143338],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,143339,143340,143344,143358,143362,143376,143380,143394,143398,143412,143416],{"__ignoreMap":135},[139,143341,143342],{"class":141,"line":142},[139,143343,134208],{"class":2512},[139,143345,143346,143348,143350,143352,143354,143356],{"class":141,"line":210},[139,143347,134213],{"class":781},[139,143349,82036],{"class":145},[139,143351,131129],{"class":153},[139,143353,2265],{"class":145},[139,143355,134222],{"class":153},[139,143357,131699],{"class":145},[139,143359,143360],{"class":141,"line":254},[139,143361,134229],{"class":2512},[139,143363,143364,143366,143368,143370,143372,143374],{"class":141,"line":262},[139,143365,134234],{"class":781},[139,143367,82036],{"class":145},[139,143369,131129],{"class":153},[139,143371,2265],{"class":145},[139,143373,56998],{"class":153},[139,143375,131699],{"class":145},[139,143377,143378],{"class":141,"line":313},[139,143379,134249],{"class":2512},[139,143381,143382,143384,143386,143388,143390,143392],{"class":141,"line":462},[139,143383,134254],{"class":781},[139,143385,82036],{"class":145},[139,143387,131129],{"class":153},[139,143389,2265],{"class":145},[139,143391,57065],{"class":153},[139,143393,131699],{"class":145},[139,143395,143396],{"class":141,"line":474},[139,143397,134269],{"class":2512},[139,143399,143400,143402,143404,143406,143408,143410],{"class":141,"line":484},[139,143401,134274],{"class":781},[139,143403,82036],{"class":145},[139,143405,131129],{"class":153},[139,143407,2265],{"class":145},[139,143409,88461],{"class":153},[139,143411,131699],{"class":145},[139,143413,143414],{"class":141,"line":989},[139,143415,134289],{"class":2512},[139,143417,143418,143420,143422,143424,143426,143428],{"class":141,"line":994},[139,143419,134294],{"class":781},[139,143421,82036],{"class":145},[139,143423,131129],{"class":153},[139,143425,2265],{"class":145},[139,143427,134303],{"class":153},[139,143429,131699],{"class":145},[19,143431,142228],{},[130,143433,143434],{"className":128769,"code":134201,"language":128771,"meta":135,"style":135},[50,143435,143436,143440,143454,143458,143472,143476,143490,143494,143508,143512],{"__ignoreMap":135},[139,143437,143438],{"class":141,"line":142},[139,143439,134208],{"class":2512},[139,143441,143442,143444,143446,143448,143450,143452],{"class":141,"line":210},[139,143443,134213],{"class":781},[139,143445,82036],{"class":145},[139,143447,131129],{"class":153},[139,143449,2265],{"class":145},[139,143451,134222],{"class":153},[139,143453,131699],{"class":145},[139,143455,143456],{"class":141,"line":254},[139,143457,134229],{"class":2512},[139,143459,143460,143462,143464,143466,143468,143470],{"class":141,"line":262},[139,143461,134234],{"class":781},[139,143463,82036],{"class":145},[139,143465,131129],{"class":153},[139,143467,2265],{"class":145},[139,143469,56998],{"class":153},[139,143471,131699],{"class":145},[139,143473,143474],{"class":141,"line":313},[139,143475,134249],{"class":2512},[139,143477,143478,143480,143482,143484,143486,143488],{"class":141,"line":462},[139,143479,134254],{"class":781},[139,143481,82036],{"class":145},[139,143483,131129],{"class":153},[139,143485,2265],{"class":145},[139,143487,57065],{"class":153},[139,143489,131699],{"class":145},[139,143491,143492],{"class":141,"line":474},[139,143493,134269],{"class":2512},[139,143495,143496,143498,143500,143502,143504,143506],{"class":141,"line":484},[139,143497,134274],{"class":781},[139,143499,82036],{"class":145},[139,143501,131129],{"class":153},[139,143503,2265],{"class":145},[139,143505,88461],{"class":153},[139,143507,131699],{"class":145},[139,143509,143510],{"class":141,"line":989},[139,143511,134289],{"class":2512},[139,143513,143514,143516,143518,143520,143522,143524],{"class":141,"line":994},[139,143515,134294],{"class":781},[139,143517,82036],{"class":145},[139,143519,131129],{"class":153},[139,143521,2265],{"class":145},[139,143523,134303],{"class":153},[139,143525,131699],{"class":145},[3437,143527,143528,143539],{},[1763,143529,143530,143531,143534,143535,103245,143537],{},"1 号盒子左侧浮动 ",[50,143532,143533],{},"sk_list"," 里面包含 ",[50,143536,3437],{},[50,143538,1763],{},[1763,143540,143541,143542,143534,143545,103245,143547],{},"2 号盒子左侧浮动 ",[50,143543,143544],{},"sk_con",[50,143546,3437],{},[50,143548,1763],{},[19,143550,142139],{},[130,143552,143553],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143554,143555,143561,143571],{"__ignoreMap":135},[139,143556,143557,143559],{"class":141,"line":142},[139,143558,132617],{"class":781},[139,143560,17840],{"class":145},[139,143562,143563,143565,143567,143569],{"class":141,"line":210},[139,143564,133249],{"class":153},[139,143566,2265],{"class":145},[139,143568,26003],{"class":153},[139,143570,3591],{"class":145},[139,143572,143573],{"class":141,"line":254},[139,143574,3862],{"class":145},[19,143576,142228],{},[130,143578,143579],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143580,143581,143587,143597],{"__ignoreMap":135},[139,143582,143583,143585],{"class":141,"line":142},[139,143584,132617],{"class":781},[139,143586,17840],{"class":145},[139,143588,143589,143591,143593,143595],{"class":141,"line":210},[139,143590,133249],{"class":153},[139,143592,2265],{"class":145},[139,143594,26003],{"class":153},[139,143596,3591],{"class":145},[139,143598,143599],{"class":141,"line":254},[139,143600,3862],{"class":145},[1217,143602,143604,143605],{"id":143603},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[50,143606,143607],{},"sk_container",[3760,143609],{"style":128625,"src":143610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3437,143612,143613,143618],{},[1763,143614,142793,143615,143617],{},[50,143616,143607],{}," 给宽度 1200，不要给高度",[1763,143619,143620],{},"一定不要忘记清除浮动",[19,143622,142139],{},[130,143624,143625],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143626,143627,143633,143643],{"__ignoreMap":135},[139,143628,143629,143631],{"class":141,"line":142},[139,143630,132617],{"class":781},[139,143632,17840],{"class":145},[139,143634,143635,143637,143639,143641],{"class":141,"line":210},[139,143636,133249],{"class":153},[139,143638,2265],{"class":145},[139,143640,26003],{"class":153},[139,143642,3591],{"class":145},[139,143644,143645],{"class":141,"line":254},[139,143646,3862],{"class":145},[1760,143648,143649],{},[1763,143650,143651],{},"sk_hd制作",[3437,143653,143654],{},[1763,143655,142873,143656,143659],{},[50,143657,143658],{},"sk_hd"," ，插入图片即可",[19,143661,142139],{},[130,143663,143664],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,143665,143666],{"__ignoreMap":135},[139,143667,143668,143670,143672,143674,143676,143678,143680,143682,143684,143686,143688,143690],{"class":141,"line":142},[139,143669,796],{"class":145},[139,143671,3760],{"class":53538},[139,143673,57473],{"class":781},[139,143675,150],{"class":145},[139,143677,136286],{"class":160},[139,143679,57481],{"class":781},[139,143681,150],{"class":145},[139,143683,136293],{"class":160},[139,143685,136296],{"class":781},[139,143687,150],{"class":145},[139,143689,136301],{"class":160},[139,143691,53545],{"class":145},[1760,143693,143694],{"start":210},[1763,143695,143696],{},"sk_bd制作",[3437,143698,143699],{},[1763,143700,143701,143702,143705,143706,103245,143708,143710],{},"3 号盒子 ",[50,143703,143704],{},"sk_bd"," ，里面包含很多的 ",[50,143707,3437],{},[50,143709,1763],{},[3437,143711,143712,143721],{},[1763,143713,143714,143715,143717,143718,143720],{},"当鼠标移入到 ",[50,143716,1763],{}," 上面的时候显示红色的边框，在这里先给 ",[50,143719,1763],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1763,143722,143723,143724,143726,143727,143729,143730,143733,143734,143736],{},"由于给每个 ",[50,143725,1763],{}," 都设置了外边距，导致一行的最后一个 ",[50,143728,1763],{}," 掉了下来，在这里我们利用 ",[50,143731,143732],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[50,143735,1763],{},"，去掉外边距就好了",[19,143738,142139],{},[130,143740,143741],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,143742,143743,143749,143761],{"__ignoreMap":135},[139,143744,143745,143747],{"class":141,"line":142},[139,143746,53848],{"class":53538},[139,143748,17840],{"class":145},[139,143750,143751,143753,143755,143757,143759],{"class":141,"line":210},[139,143752,72699],{"class":153},[139,143754,2265],{"class":145},[139,143756,2634],{"class":153},[139,143758,53793],{"class":153},[139,143760,3591],{"class":145},[139,143762,143763],{"class":141,"line":254},[139,143764,3862],{"class":145},[19,143766,142228],{},[130,143768,143769],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,143770,143771,143777,143789],{"__ignoreMap":135},[139,143772,143773,143775],{"class":141,"line":142},[139,143774,53848],{"class":53538},[139,143776,17840],{"class":145},[139,143778,143779,143781,143783,143785,143787],{"class":141,"line":210},[139,143780,72699],{"class":153},[139,143782,2265],{"class":145},[139,143784,2634],{"class":153},[139,143786,53793],{"class":153},[139,143788,3591],{"class":145},[139,143790,143791],{"class":141,"line":254},[139,143792,3862],{"class":145},[14,143794,143796],{"id":143795},"_163-注册页面制作","16.3 注册页面制作",[3760,143798],{"style":128625,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143801,143802,143804],{},[1674,143803,11299],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3760,143806],{"style":128625,"src":143807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1217,143809,143811],{"id":143810},"_1631-准备工作","16.3.1 准备工作",[3437,143813,143814,143817],{},[1763,143815,143816],{},"创建register.html，引入 base.css，引入favicon图标",[1763,143818,143819],{},"创建register.css ，在html页面进行引入",[1217,143821,143823,143824,143826],{"id":143822},"_1632-header-头部实现","16.3.2 ",[50,143825,133774],{}," 头部实现",[3437,143828,143829,143832],{},[1763,143830,143831],{},"整个内容用 版心 进行包裹",[1763,143833,143834],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143836,142139],{},[130,143838,143839],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,143840,143841],{"__ignoreMap":135},[139,143842,143843,143845,143847,143849,143851,143853,143855,143857,143859,143861,143863,143865],{"class":141,"line":142},[139,143844,796],{"class":145},[139,143846,3760],{"class":53538},[139,143848,57473],{"class":781},[139,143850,150],{"class":145},[139,143852,136286],{"class":160},[139,143854,57481],{"class":781},[139,143856,150],{"class":145},[139,143858,136293],{"class":160},[139,143860,136296],{"class":781},[139,143862,150],{"class":145},[139,143864,136301],{"class":160},[139,143866,53545],{"class":145},[19,143868,142228],{},[130,143870,143871],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,143872,143873],{"__ignoreMap":135},[139,143874,143875,143877,143879,143881,143883,143885,143887,143889,143891,143893,143895,143897],{"class":141,"line":142},[139,143876,796],{"class":145},[139,143878,3760],{"class":53538},[139,143880,57473],{"class":781},[139,143882,150],{"class":145},[139,143884,136286],{"class":160},[139,143886,57481],{"class":781},[139,143888,150],{"class":145},[139,143890,136293],{"class":160},[139,143892,136296],{"class":781},[139,143894,150],{"class":145},[139,143896,136301],{"class":160},[139,143898,53545],{"class":145},[1217,143900,143902,143903,143906],{"id":143901},"_1633-registerarea-主体模块实现","16.3.3 ",[50,143904,143905],{},"registerarea"," 主体模块实现",[3760,143908],{"style":128625,"src":143909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143911,143912],{},"整个大盒子 高度为 522px，设置4个边框",[19,143914,142139],{},[130,143916,143917],{"className":128769,"code":132926,"language":128771,"meta":135,"style":135},[50,143918,143919,143925,143941],{"__ignoreMap":135},[139,143920,143921,143923],{"class":141,"line":142},[139,143922,53848],{"class":53538},[139,143924,17840],{"class":145},[139,143926,143927,143929,143931,143933,143935,143937,143939],{"class":141,"line":210},[139,143928,73125],{"class":153},[139,143930,2265],{"class":145},[139,143932,410],{"class":153},[139,143934,53729],{"class":149},[139,143936,53758],{"class":153},[139,143938,132161],{"class":153},[139,143940,3591],{"class":145},[139,143942,143943],{"class":141,"line":254},[139,143944,3862],{"class":145},[19,143946,142228],{},[130,143948,143949],{"className":128769,"code":132926,"language":128771,"meta":135,"style":135},[50,143950,143951,143957,143973],{"__ignoreMap":135},[139,143952,143953,143955],{"class":141,"line":142},[139,143954,53848],{"class":53538},[139,143956,17840],{"class":145},[139,143958,143959,143961,143963,143965,143967,143969,143971],{"class":141,"line":210},[139,143960,73125],{"class":153},[139,143962,2265],{"class":145},[139,143964,410],{"class":153},[139,143966,53729],{"class":149},[139,143968,53758],{"class":153},[139,143970,132161],{"class":153},[139,143972,3591],{"class":145},[139,143974,143975],{"class":141,"line":254},[139,143976,3862],{"class":145},[19,143978,143979],{},"1号盒子 是一个 h3 标签，放标题",[3437,143981,143982],{},[1763,143983,143984],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143986,142139],{},[130,143988,143989],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,143990,143991,143997,144007],{"__ignoreMap":135},[139,143992,143993,143995],{"class":141,"line":142},[139,143994,132617],{"class":781},[139,143996,17840],{"class":145},[139,143998,143999,144001,144003,144005],{"class":141,"line":210},[139,144000,133249],{"class":153},[139,144002,2265],{"class":145},[139,144004,26003],{"class":153},[139,144006,3591],{"class":145},[139,144008,144009],{"class":141,"line":254},[139,144010,3862],{"class":145},[19,144012,142228],{},[130,144014,144015],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,144016,144017,144023,144033],{"__ignoreMap":135},[139,144018,144019,144021],{"class":141,"line":142},[139,144020,132617],{"class":781},[139,144022,17840],{"class":145},[139,144024,144025,144027,144029,144031],{"class":141,"line":210},[139,144026,133249],{"class":153},[139,144028,2265],{"class":145},[139,144030,26003],{"class":153},[139,144032,3591],{"class":145},[139,144034,144035],{"class":141,"line":254},[139,144036,3862],{"class":145},[19,144038,144039],{},"2号盒子 里面放注册的内容",[3437,144041,144042,144045,144054,144068,144081,144084,144087,144105,144119],{},[1763,144043,144044],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1763,144046,144047,144048,144050,144051,144053],{},"里面的内容利用 ",[50,144049,3437],{}," 包含 ",[50,144052,1763],{}," 来实现的（不需要用表格）",[1763,144055,141283,144056,144058,144059,144061,144062,144064,144065,144067],{},[50,144057,1763],{}," 里面，左侧放 ",[50,144060,35853],{}," 标签， 中间放",[50,144063,199],{}," 标签， 右侧放 ",[50,144066,139],{}," 提示信息",[1763,144069,144070,144071,144073,144074,144076,144077,144080],{},"左侧 ",[50,144072,35853],{},"里面的文字都是右对齐，我们可以给",[50,144075,35853],{},"设置一个宽度（88px），然后利用",[50,144078,144079],{},"text-align"," 来设置右对齐",[1763,144082,144083],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1763,144085,144086],{},"右侧 span修饰一下文字颜色",[1763,144088,144089,144090],{},"提示信息的样式优化",[3437,144091,144092,144095,144098],{},[1763,144093,144094],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1763,144096,144097],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1763,144099,144100,144101,144104],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[50,144102,144103],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1763,144106,144107,144108],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3437,144109,144110,144116],{},[1763,144111,144112,144113,144115],{},"设置 ",[50,144114,25820],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1763,144117,144118],{},"分别设置 背景颜色",[1763,144120,144121,144122,144124],{},"同意协议 和 完成注册 都是用 ",[50,144123,1763],{}," 进行包裹",[19,144126,142139],{},[130,144128,144129],{"className":128769,"code":142712,"language":128771,"meta":135,"style":135},[50,144130,144131,144137,144147],{"__ignoreMap":135},[139,144132,144133,144135],{"class":141,"line":142},[139,144134,53848],{"class":53538},[139,144136,17840],{"class":145},[139,144138,144139,144141,144143,144145],{"class":141,"line":210},[139,144140,73107],{"class":153},[139,144142,2265],{"class":145},[139,144144,142729],{"class":153},[139,144146,3591],{"class":145},[139,144148,144149],{"class":141,"line":254},[139,144150,3862],{"class":145},[19,144152,142228],{},[130,144154,144155],{"className":128769,"code":142712,"language":128771,"meta":135,"style":135},[50,144156,144157,144163,144173],{"__ignoreMap":135},[139,144158,144159,144161],{"class":141,"line":142},[139,144160,53848],{"class":53538},[139,144162,17840],{"class":145},[139,144164,144165,144167,144169,144171],{"class":141,"line":210},[139,144166,73107],{"class":153},[139,144168,2265],{"class":145},[139,144170,142729],{"class":153},[139,144172,3591],{"class":145},[139,144174,144175],{"class":141,"line":254},[139,144176,3862],{"class":145},[1217,144178,144180],{"id":144179},"_1634-底部实现","16.3.4 底部实现",[19,144182,142139],{},[130,144184,144185],{"className":128769,"code":142712,"language":128771,"meta":135,"style":135},[50,144186,144187,144193,144203],{"__ignoreMap":135},[139,144188,144189,144191],{"class":141,"line":142},[139,144190,53848],{"class":53538},[139,144192,17840],{"class":145},[139,144194,144195,144197,144199,144201],{"class":141,"line":210},[139,144196,73107],{"class":153},[139,144198,2265],{"class":145},[139,144200,142729],{"class":153},[139,144202,3591],{"class":145},[139,144204,144205],{"class":141,"line":254},[139,144206,3862],{"class":145},[19,144208,142228],{},[130,144210,144211],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,144212,144213,144217,144231,144235],{"__ignoreMap":135},[139,144214,144215],{"class":141,"line":142},[139,144216,132880],{"class":2512},[139,144218,144219,144221,144223,144225,144227,144229],{"class":141,"line":210},[139,144220,796],{"class":145},[139,144222,53848],{"class":53538},[139,144224,55721],{"class":781},[139,144226,150],{"class":145},[139,144228,132893],{"class":160},[139,144230,53545],{"class":145},[139,144232,144233],{"class":141,"line":254},[139,144234,132900],{"class":145},[139,144236,144237,144239,144241],{"class":141,"line":262},[139,144238,54022],{"class":145},[139,144240,53848],{"class":53538},[139,144242,53545],{"class":145},[14,144244,144246],{"id":144245},"_164-项目总结","16.4 项目总结",[1760,144248,144249,144252,144255,144258],{},[1763,144250,144251],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1763,144253,144254],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1763,144256,144257],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1763,144259,144260],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3760,144262],{"style":128625,"src":144263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1760,144265,144266],{"start":313},[1763,144267,144268],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3760,144270],{"style":128625,"src":144271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1760,144273,144274],{"start":462},[1763,144275,144276],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3760,144278],{"style":128625,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[130,144281,144282],{"className":129516,"code":138926,"language":129518,"meta":135,"style":135},[50,144283,144284],{"__ignoreMap":135},[139,144285,144286,144288,144290,144292,144294,144296,144298,144300,144302,144304,144306,144308],{"class":141,"line":142},[139,144287,796],{"class":145},[139,144289,199],{"class":53538},[139,144291,56058],{"class":781},[139,144293,150],{"class":145},[139,144295,64931],{"class":160},[139,144297,17189],{"class":781},[139,144299,150],{"class":145},[139,144301,138947],{"class":160},[139,144303,63253],{"class":781},[139,144305,150],{"class":145},[139,144307,138954],{"class":160},[139,144309,53545],{"class":145},[1760,144311,144312,144315],{"start":474},[1763,144313,144314],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1763,144316,144317],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2348,144319,144320],{},"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":135,"searchDepth":210,"depth":210,"links":144322},[144323,144328,144335,144343],{"id":141949,"depth":210,"text":141950,"children":144324},[144325,144326,144327],{"id":141953,"depth":254,"text":141954},{"id":142684,"depth":254,"text":142685},{"id":142997,"depth":254,"text":142998},{"id":143297,"depth":210,"text":143298,"children":144329},[144330,144331,144333],{"id":143301,"depth":254,"text":143302},{"id":143319,"depth":254,"text":144332},"16.2.2 列表页 header 和 nav 修改",{"id":143603,"depth":254,"text":144334},"16.2.3 列表页主体 sk_container",{"id":143795,"depth":210,"text":143796,"children":144336},[144337,144338,144340,144342],{"id":143810,"depth":254,"text":143811},{"id":143822,"depth":254,"text":144339},"16.3.2 header 头部实现",{"id":143901,"depth":254,"text":144341},"16.3.3 registerarea 主体模块实现",{"id":144179,"depth":254,"text":144180},{"id":144245,"depth":210,"text":144246},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141941,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144350,"title":144351,"body":144352,"description":2384,"extension":2385,"meta":144460,"navigation":842,"path":144461,"seo":144462,"stem":144463,"__hash__":144464},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144353,"toc":144455},[144354,144357,144361,144364,144367,144376,144385,144389,144394,144401,144419,144422,144425,144428,144431,144434,144437,144440,144443,144446,144449,144452],[10,144355,144351],{"id":144356},"_17-web服务器与网站发布",[14,144358,144360],{"id":144359},"_171-web服务器","17.1 Web服务器",[19,144362,144363],{},"把自己网站上传到服务器上，可以让其他人访问",[3760,144365],{"style":128625,"src":144366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144368,144369,144372,144373],{},[1674,144370,144371],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1674,144374,144375],{},"Web 服务器等",[19,144377,144378,144379,103245,144382,28003],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1674,144380,144381],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1674,144383,144384],{},"远程服务器",[1217,144386,144388],{"id":144387},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144390,144391],{},[1674,144392,144393],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144395,144396,144397],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2680,144398,144399],{"href":144399,"rel":144400},"http:\u002F\u002Ffree.3v.do\u002F",[26128],[3437,144402,144403,144406,144409,144416],{},[1763,144404,144405],{},"去免费空间网站注册账号。",[1763,144407,144408],{},"记录下主机名、用户名、密码、域名。",[1763,144410,144411,144412,144415],{},"利用 ",[50,144413,144414],{},"utftp"," 软件 上传网站到远程服务器",[1763,144417,144418],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144420,144421],{},"使用软件上传，对上传软件文件进行解压",[3760,144423],{"style":128625,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3760,144426],{"style":128625,"src":144427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144429,144430],{},"输入刚刚申请的服务器账号信息：",[3760,144432],{"style":128625,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3760,144435],{"style":128625,"src":144436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3760,144438],{"style":128625,"src":144439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3760,144441],{"style":128625,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144444,144445],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3760,144447],{"style":128625,"src":144448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144450,144451],{},"浏览器输入域名即可访问",[19,144453,144454],{},"首页一定必须是index",{"title":135,"searchDepth":210,"depth":210,"links":144456},[144457],{"id":144359,"depth":210,"text":144360,"children":144458},[144459],{"id":144387,"depth":254,"text":144388},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144351,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144466,"title":144467,"body":144468,"description":2384,"extension":2385,"meta":145395,"navigation":842,"path":145396,"seo":145397,"stem":145398,"__hash__":145399},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144469,"toc":145378},[144470,144473,144477,144480,144483,144494,144497,144501,144505,144510,144513,144516,144519,144522,144526,144552,144556,144560,144563,144566,144570,144603,144607,144610,144613,144677,144681,144685,144688,144691,144694,144698,144743,144747,144750,144780,144784,144788,144791,144794,144798,144801,144870,144873,144981,144983,144989,144993,144996,144999,145095,145098,145102,145126,145130,145133,145137,145140,145144,145147,145150,145153,145156,145160,145163,145166,145170,145174,145177,145180,145183,145186,145190,145193,145197,145200,145203,145248,145252,145256,145259,145262,145265,145297,145301,145304,145338,145342,145345,145375],[10,144471,144467],{"id":144472},"_18-2d动画与3d转换",[14,144474,144476],{"id":144475},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144478,144479],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144481,144482],{},"转换（transform）你可以简单理解为变形",[3437,144484,144485,144488,144491],{},[1763,144486,144487],{},"移动：translate",[1763,144489,144490],{},"旋转：rotate",[1763,144492,144493],{},"缩放：scale",[3760,144495],{"style":128625,"src":144496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1217,144498,144500],{"id":144499},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24265,144502,144504],{"id":144503},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144506,144507,144508],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1674,144509,135428],{},[3760,144511],{"style":128625,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144514,144515],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144517,144518],{},"对于行内元素无效",[19,144520,144521],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24265,144523,144525],{"id":144524},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[130,144527,144528],{"className":128769,"code":140958,"language":128771,"meta":135,"style":135},[50,144529,144530,144536,144548],{"__ignoreMap":135},[139,144531,144532,144534],{"class":141,"line":142},[139,144533,53848],{"class":53538},[139,144535,17840],{"class":145},[139,144537,144538,144540,144542,144544,144546],{"class":141,"line":210},[139,144539,72699],{"class":153},[139,144541,2265],{"class":145},[139,144543,2634],{"class":153},[139,144545,53793],{"class":153},[139,144547,3591],{"class":145},[139,144549,144550],{"class":141,"line":254},[139,144551,3862],{"class":145},[1217,144553,144555],{"id":144554},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24265,144557,144559],{"id":144558},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144561,144562],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3760,144564],{"style":128625,"src":144565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24265,144567,144569],{"id":144568},"_18122-旋转效果","18.1.2.2 旋转效果",[130,144571,144573],{"className":128769,"code":144572,"language":128771,"meta":135,"style":135},"div {\n  transform: rotate(45deg);\n}\n",[50,144574,144575,144581,144599],{"__ignoreMap":135},[139,144576,144577,144579],{"class":141,"line":142},[139,144578,53848],{"class":53538},[139,144580,17840],{"class":145},[139,144582,144583,144585,144587,144590,144592,144594,144597],{"class":141,"line":210},[139,144584,138753],{"class":153},[139,144586,2265],{"class":145},[139,144588,144589],{"class":153},"rotate",[139,144591,157],{"class":145},[139,144593,2965],{"class":153},[139,144595,144596],{"class":149},"deg",[139,144598,5002],{"class":145},[139,144600,144601],{"class":141,"line":254},[139,144602,3862],{"class":145},[24265,144604,144606],{"id":144605},"_18123-三角做法","18.1.2.3 三角做法",[19,144608,144609],{},"该下标当经过最外层大盒子时会实现向上反转",[3760,144611],{"style":128625,"src":144612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[130,144614,144615],{"className":128769,"code":137289,"language":128771,"meta":135,"style":135},[50,144616,144617,144621,144627,144637,144647,144663,144673],{"__ignoreMap":135},[139,144618,144619],{"class":141,"line":142},[139,144620,137296],{"class":2512},[139,144622,144623,144625],{"class":141,"line":210},[139,144624,137301],{"class":781},[139,144626,17840],{"class":145},[139,144628,144629,144631,144633,144635],{"class":141,"line":254},[139,144630,72797],{"class":153},[139,144632,2265],{"class":145},[139,144634,2634],{"class":153},[139,144636,3591],{"class":145},[139,144638,144639,144641,144643,144645],{"class":141,"line":262},[139,144640,73017],{"class":153},[139,144642,2265],{"class":145},[139,144644,2634],{"class":153},[139,144646,3591],{"class":145},[139,144648,144649,144651,144653,144655,144657,144659,144661],{"class":141,"line":313},[139,144650,73125],{"class":153},[139,144652,2265],{"class":145},[139,144654,536],{"class":153},[139,144656,53729],{"class":149},[139,144658,53758],{"class":153},[139,144660,66223],{"class":153},[139,144662,3591],{"class":145},[139,144664,144665,144667,144669,144671],{"class":141,"line":462},[139,144666,137344],{"class":153},[139,144668,2265],{"class":145},[139,144670,64602],{"class":153},[139,144672,3591],{"class":145},[139,144674,144675],{"class":141,"line":474},[139,144676,3862],{"class":145},[1217,144678,144680],{"id":144679},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24265,144682,144684],{"id":144683},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144686,144687],{},"设置中心点",[3760,144689],{"style":128625,"src":144690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144692,144693],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24265,144695,144697],{"id":144696},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[130,144699,144701],{"className":128769,"code":144700,"language":128771,"meta":135,"style":135},"\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",[50,144702,144703,144708,144714,144729,144734,144739],{"__ignoreMap":135},[139,144704,144705],{"class":141,"line":142},[139,144706,144707],{"class":2512},"\u002F* 转换中心点 *\u002F\n",[139,144709,144710,144712],{"class":141,"line":210},[139,144711,53848],{"class":53538},[139,144713,17840],{"class":145},[139,144715,144716,144719,144721,144723,144725,144727],{"class":141,"line":254},[139,144717,144718],{"class":153},"  transform-origin",[139,144720,2265],{"class":145},[139,144722,53829],{"class":153},[139,144724,19411],{"class":153},[139,144726,132632],{"class":145},[139,144728,137442],{"class":2512},[139,144730,144731],{"class":141,"line":262},[139,144732,144733],{"class":2512},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[139,144735,144736],{"class":141,"line":313},[139,144737,144738],{"class":2512},"  \u002F* transform-origin: left top; *\u002F\n",[139,144740,144741],{"class":141,"line":462},[139,144742,3862],{"class":145},[24265,144744,144746],{"id":144745},"_18133-旋转案例","18.1.3.3 旋转案例",[3760,144748],{"style":128625,"src":144749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[130,144751,144752],{"className":128769,"code":144572,"language":128771,"meta":135,"style":135},[50,144753,144754,144760,144776],{"__ignoreMap":135},[139,144755,144756,144758],{"class":141,"line":142},[139,144757,53848],{"class":53538},[139,144759,17840],{"class":145},[139,144761,144762,144764,144766,144768,144770,144772,144774],{"class":141,"line":210},[139,144763,138753],{"class":153},[139,144765,2265],{"class":145},[139,144767,144589],{"class":153},[139,144769,157],{"class":145},[139,144771,2965],{"class":153},[139,144773,144596],{"class":149},[139,144775,5002],{"class":145},[139,144777,144778],{"class":141,"line":254},[139,144779,3862],{"class":145},[1217,144781,144783],{"id":144782},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24265,144785,144787],{"id":144786},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144789,144790],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3760,144792],{"style":128625,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24265,144795,144797],{"id":144796},"_18142-分页按钮","18.1.4.2 分页按钮",[3760,144799],{"style":128625,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[130,144802,144804],{"className":128769,"code":144803,"language":128771,"meta":135,"style":135},"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",[50,144805,144806,144812,144828,144832,144836,144841,144847,144861,144866],{"__ignoreMap":135},[139,144807,144808,144810],{"class":141,"line":142},[139,144809,53848],{"class":53538},[139,144811,17840],{"class":145},[139,144813,144814,144816,144818,144821,144823,144826],{"class":141,"line":210},[139,144815,138753],{"class":153},[139,144817,2265],{"class":145},[139,144819,144820],{"class":153},"scale",[139,144822,157],{"class":145},[139,144824,144825],{"class":153},"1.2",[139,144827,5002],{"class":145},[139,144829,144830],{"class":141,"line":254},[139,144831,3862],{"class":145},[139,144833,144834],{"class":141,"line":262},[139,144835,138230],{"class":145},[139,144837,144838],{"class":141,"line":313},[139,144839,144840],{"class":2512},"\u002F* 2D 缩放 *\u002F\n",[139,144842,144843,144845],{"class":141,"line":462},[139,144844,53848],{"class":53538},[139,144846,17840],{"class":145},[139,144848,144849,144851,144853,144855,144857,144859],{"class":141,"line":474},[139,144850,138753],{"class":153},[139,144852,2265],{"class":145},[139,144854,144820],{"class":153},[139,144856,157],{"class":145},[139,144858,144825],{"class":153},[139,144860,5002],{"class":145},[139,144862,144863],{"class":141,"line":484},[139,144864,144865],{"class":2512},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[139,144867,144868],{"class":141,"line":989},[139,144869,3862],{"class":145},[19,144871,144872],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[130,144874,144876],{"className":128769,"code":144875,"language":128771,"meta":135,"style":135},"\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",[50,144877,144878,144883,144893,144914,144935,144939,144944,144950,144977],{"__ignoreMap":135},[139,144879,144880],{"class":141,"line":142},[139,144881,144882],{"class":2512},"\u002F* 定义动画 *\u002F\n",[139,144884,144885,144888,144891],{"class":141,"line":210},[139,144886,144887],{"class":149},"@keyframes",[139,144889,144890],{"class":2111}," move",[139,144892,17840],{"class":145},[139,144894,144895,144898,144900,144902,144904,144907,144909,144911],{"class":141,"line":254},[139,144896,144897],{"class":781},"  0%",[139,144899,82036],{"class":145},[139,144901,50372],{"class":153},[139,144903,2265],{"class":145},[139,144905,144906],{"class":153},"translateX",[139,144908,157],{"class":145},[139,144910,2634],{"class":153},[139,144912,144913],{"class":145},"); }\n",[139,144915,144916,144919,144921,144923,144925,144927,144929,144931,144933],{"class":141,"line":262},[139,144917,144918],{"class":781},"  100%",[139,144920,82036],{"class":145},[139,144922,50372],{"class":153},[139,144924,2265],{"class":145},[139,144926,144906],{"class":153},[139,144928,157],{"class":145},[139,144930,1017],{"class":153},[139,144932,53729],{"class":149},[139,144934,144913],{"class":145},[139,144936,144937],{"class":141,"line":313},[139,144938,3862],{"class":145},[139,144940,144941],{"class":141,"line":462},[139,144942,144943],{"class":2512},"\u002F* 调用动画 *\u002F\n",[139,144945,144946,144948],{"class":141,"line":474},[139,144947,53848],{"class":53538},[139,144949,17840],{"class":145},[139,144951,144952,144955,144957,144959,144961,144963,144965,144967,144969,144972,144975],{"class":141,"line":484},[139,144953,144954],{"class":153},"  animation",[139,144956,2265],{"class":145},[139,144958,137455],{"class":153},[139,144960,27381],{"class":153},[139,144962,3130],{"class":149},[139,144964,80909],{"class":153},[139,144966,799],{"class":153},[139,144968,3130],{"class":149},[139,144970,144971],{"class":153}," infinite",[139,144973,144974],{"class":153}," alternate",[139,144976,3591],{"class":145},[139,144978,144979],{"class":141,"line":989},[139,144980,3862],{"class":145},[19,144982,144872],{},[130,144984,144987],{"className":144985,"code":144986,"language":645},[643],"\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",[50,144988,144986],{"__ignoreMap":135},[24265,144990,144992],{"id":144991},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144994,144995],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3760,144997],{"style":128625,"src":144998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[130,145000,145001],{"className":128769,"code":144875,"language":128771,"meta":135,"style":135},[50,145002,145003,145007,145015,145033,145053,145057,145061,145067,145091],{"__ignoreMap":135},[139,145004,145005],{"class":141,"line":142},[139,145006,144882],{"class":2512},[139,145008,145009,145011,145013],{"class":141,"line":210},[139,145010,144887],{"class":149},[139,145012,144890],{"class":2111},[139,145014,17840],{"class":145},[139,145016,145017,145019,145021,145023,145025,145027,145029,145031],{"class":141,"line":254},[139,145018,144897],{"class":781},[139,145020,82036],{"class":145},[139,145022,50372],{"class":153},[139,145024,2265],{"class":145},[139,145026,144906],{"class":153},[139,145028,157],{"class":145},[139,145030,2634],{"class":153},[139,145032,144913],{"class":145},[139,145034,145035,145037,145039,145041,145043,145045,145047,145049,145051],{"class":141,"line":262},[139,145036,144918],{"class":781},[139,145038,82036],{"class":145},[139,145040,50372],{"class":153},[139,145042,2265],{"class":145},[139,145044,144906],{"class":153},[139,145046,157],{"class":145},[139,145048,1017],{"class":153},[139,145050,53729],{"class":149},[139,145052,144913],{"class":145},[139,145054,145055],{"class":141,"line":313},[139,145056,3862],{"class":145},[139,145058,145059],{"class":141,"line":462},[139,145060,144943],{"class":2512},[139,145062,145063,145065],{"class":141,"line":474},[139,145064,53848],{"class":53538},[139,145066,17840],{"class":145},[139,145068,145069,145071,145073,145075,145077,145079,145081,145083,145085,145087,145089],{"class":141,"line":484},[139,145070,144954],{"class":153},[139,145072,2265],{"class":145},[139,145074,137455],{"class":153},[139,145076,27381],{"class":153},[139,145078,3130],{"class":149},[139,145080,80909],{"class":153},[139,145082,799],{"class":153},[139,145084,3130],{"class":149},[139,145086,144971],{"class":153},[139,145088,144974],{"class":153},[139,145090,3591],{"class":145},[139,145092,145093],{"class":141,"line":989},[139,145094,3862],{"class":145},[19,145096,145097],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1217,145099,145101],{"id":145100},"_1823-知识点回顾","18.2.3 知识点回顾",[130,145103,145104],{"className":128769,"code":130938,"language":128771,"meta":135,"style":135},[50,145105,145106,145112,145122],{"__ignoreMap":135},[139,145107,145108,145110],{"class":141,"line":142},[139,145109,53848],{"class":53538},[139,145111,17840],{"class":145},[139,145113,145114,145116,145118,145120],{"class":141,"line":210},[139,145115,130951],{"class":153},[139,145117,2265],{"class":145},[139,145119,63969],{"class":153},[139,145121,3591],{"class":145},[139,145123,145124],{"class":141,"line":254},[139,145125,3862],{"class":145},[14,145127,145129],{"id":145128},"_183-3d-转换","18.3 3D 转换",[19,145131,145132],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1217,145134,145136],{"id":145135},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3760,145138],{"style":128625,"src":145139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1217,145141,145143],{"id":145142},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3760,145145],{"style":128625,"src":145146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145148,145149],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145151,145152],{},"translate3d的效果需要搭配透视perspective来使用",[3760,145154],{"style":128625,"src":145155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1217,145157,145159],{"id":145158},"_1833-透视-perspective","18.3.3 透视 perspective",[3760,145161],{"style":128625,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145164,145165],{},"透视写在父盒子上，单位为像素",[1217,145167,145169],{"id":145168},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24265,145171,145173],{"id":145172},"_18341-分开解释","18.3.4.1 分开解释",[3760,145175],{"style":128625,"src":145176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3760,145178],{"style":128625,"src":145179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3760,145181],{"style":128625,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145184,145185],{},"总结来说就是左手原则",[24265,145187,145189],{"id":145188},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3760,145191],{"style":128625,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1217,145194,145196],{"id":145195},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3760,145198],{"style":128625,"src":145199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3760,145201],{"style":128625,"src":145202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[130,145204,145206],{"className":128769,"code":145205,"language":128771,"meta":135,"style":135},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[50,145207,145208,145214,145227,145244],{"__ignoreMap":135},[139,145209,145210,145212],{"class":141,"line":142},[139,145211,53848],{"class":53538},[139,145213,17840],{"class":145},[139,145215,145216,145219,145221,145223,145225],{"class":141,"line":210},[139,145217,145218],{"class":153},"  perspective",[139,145220,2265],{"class":145},[139,145222,67305],{"class":153},[139,145224,53729],{"class":149},[139,145226,3591],{"class":145},[139,145228,145229,145231,145233,145236,145238,145240,145242],{"class":141,"line":254},[139,145230,138753],{"class":153},[139,145232,2265],{"class":145},[139,145234,145235],{"class":153},"rotateX",[139,145237,157],{"class":145},[139,145239,2965],{"class":153},[139,145241,144596],{"class":149},[139,145243,5002],{"class":145},[139,145245,145246],{"class":141,"line":262},[139,145247,3862],{"class":145},[1217,145249,145251],{"id":145250},"_1836-案例","18.3.6 案例",[24265,145253,145255],{"id":145254},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3760,145257],{"style":128625,"src":145258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3760,145260],{"style":128625,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3760,145263],{"style":128625,"src":145264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[130,145266,145268],{"className":128769,"code":145267,"language":128771,"meta":135,"style":135},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[50,145269,145270,145275,145281,145293],{"__ignoreMap":135},[139,145271,145272],{"class":141,"line":142},[139,145273,145274],{"class":2512},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[139,145276,145277,145279],{"class":141,"line":210},[139,145278,135766],{"class":781},[139,145280,17840],{"class":145},[139,145282,145283,145285,145287,145289,145291],{"class":141,"line":254},[139,145284,145218],{"class":153},[139,145286,2265],{"class":145},[139,145288,67305],{"class":153},[139,145290,53729],{"class":149},[139,145292,3591],{"class":145},[139,145294,145295],{"class":141,"line":262},[139,145296,3862],{"class":145},[24265,145298,145300],{"id":145299},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3760,145302],{"style":128625,"src":145303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[130,145305,145306],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,145307,145308,145312,145326,145330],{"__ignoreMap":135},[139,145309,145310],{"class":141,"line":142},[139,145311,132880],{"class":2512},[139,145313,145314,145316,145318,145320,145322,145324],{"class":141,"line":210},[139,145315,796],{"class":145},[139,145317,53848],{"class":53538},[139,145319,55721],{"class":781},[139,145321,150],{"class":145},[139,145323,132893],{"class":160},[139,145325,53545],{"class":145},[139,145327,145328],{"class":141,"line":254},[139,145329,132900],{"class":145},[139,145331,145332,145334,145336],{"class":141,"line":262},[139,145333,54022],{"class":145},[139,145335,53848],{"class":53538},[139,145337,53545],{"class":145},[24265,145339,145341],{"id":145340},"_18363-旋转木马","18.3.6.3 旋转木马",[3760,145343],{"style":128625,"src":145344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[130,145346,145347],{"className":128769,"code":144572,"language":128771,"meta":135,"style":135},[50,145348,145349,145355,145371],{"__ignoreMap":135},[139,145350,145351,145353],{"class":141,"line":142},[139,145352,53848],{"class":53538},[139,145354,17840],{"class":145},[139,145356,145357,145359,145361,145363,145365,145367,145369],{"class":141,"line":210},[139,145358,138753],{"class":153},[139,145360,2265],{"class":145},[139,145362,144589],{"class":153},[139,145364,157],{"class":145},[139,145366,2965],{"class":153},[139,145368,144596],{"class":149},[139,145370,5002],{"class":145},[139,145372,145373],{"class":141,"line":254},[139,145374,3862],{"class":145},[2348,145376,145377],{},"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":135,"searchDepth":210,"depth":210,"links":145379},[145380,145387],{"id":144475,"depth":210,"text":144476,"children":145381},[145382,145383,145384,145385,145386],{"id":144499,"depth":254,"text":144500},{"id":144554,"depth":254,"text":144555},{"id":144679,"depth":254,"text":144680},{"id":144782,"depth":254,"text":144783},{"id":145100,"depth":254,"text":145101},{"id":145128,"depth":210,"text":145129,"children":145388},[145389,145390,145391,145392,145393,145394],{"id":145135,"depth":254,"text":145136},{"id":145142,"depth":254,"text":145143},{"id":145158,"depth":254,"text":145159},{"id":145168,"depth":254,"text":145169},{"id":145195,"depth":254,"text":145196},{"id":145250,"depth":254,"text":145251},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144467,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145401,"title":145402,"body":145403,"description":2384,"extension":2385,"meta":145606,"navigation":842,"path":145607,"seo":145608,"stem":145609,"__hash__":145610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145404,"toc":145595},[145405,145408,145412,145415,145418,145422,145425,145428,145431,145435,145438,145442,145445,145449,145452,145456,145470,145474,145499,145502,145505,145522,145526,145530,145533,145536,145540,145543,145546,145564,145568,145571,145585,145589,145592],[10,145406,145402],{"id":145407},"_19-移动端基础-前缀现状与视口",[14,145409,145411],{"id":145410},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3760,145413],{"style":128625,"src":145414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145416,145417],{},"意思就是加个前缀，增加兼容性",[14,145419,145421],{"id":145420},"_192-移动端现状认识","19.2 移动端现状认识",[3760,145423],{"style":128625,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145426,145427],{},"调试方法：",[3760,145429],{"style":128625,"src":145430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145432,145434],{"id":145433},"_193-视口","19.3 视口",[19,145436,145437],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1217,145439,145441],{"id":145440},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3760,145443],{"style":128625,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1217,145446,145448],{"id":145447},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3760,145450],{"style":128625,"src":145451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1217,145453,145455],{"id":145454},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3437,145457,145458,145461,145464,145467],{},[1763,145459,145460],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1763,145462,145463],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1763,145465,145466],{},"需要手动添写meta视口标签通知浏览器操作",[1763,145468,145469],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1217,145471,145473],{"id":145472},"_1934-meta视口标签","19.3.4 meta视口标签",[130,145475,145477],{"className":129516,"code":145476,"language":129518,"meta":135,"style":135},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[50,145478,145479],{"__ignoreMap":135},[139,145480,145481,145483,145485,145487,145489,145491,145493,145495,145497],{"class":141,"line":142},[139,145482,796],{"class":145},[139,145484,53582],{"class":53538},[139,145486,17189],{"class":781},[139,145488,150],{"class":145},[139,145490,53629],{"class":160},[139,145492,53609],{"class":781},[139,145494,150],{"class":145},[139,145496,53636],{"class":160},[139,145498,53545],{"class":145},[3760,145500],{"style":128625,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145503,145504],{},"标准视口设置：",[1760,145506,145507,145510,145513,145516,145519],{},[1763,145508,145509],{},"视口宽度和设备保持一致",[1763,145511,145512],{},"视口的默认缩放比例1.0",[1763,145514,145515],{},"不允许用户自行缩放",[1763,145517,145518],{},"最大允许的缩放比例1.0",[1763,145520,145521],{},"最小允许的缩放比例1.0",[1217,145523,145525],{"id":145524},"_1935-二倍图","19.3.5 二倍图",[24265,145527,145529],{"id":145528},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3760,145531],{"style":128625,"src":145532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3760,145534],{"style":128625,"src":145535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24265,145537,145539],{"id":145538},"_19352-多倍图","19.3.5.2 多倍图",[3760,145541],{"style":128625,"src":145542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145544,145545],{},"二倍图法，代码如下：",[130,145547,145549],{"className":128769,"code":145548,"language":128771,"meta":135,"style":135},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[50,145550,145551,145556],{"__ignoreMap":135},[139,145552,145553],{"class":141,"line":142},[139,145554,145555],{"class":2512},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[139,145557,145558,145561],{"class":141,"line":210},[139,145559,145560],{"class":53538},"background-size",[139,145562,145563],{"class":145},": 50% 50%;\n",[24265,145565,145567],{"id":145566},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3760,145569],{"style":128625,"src":145570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1760,145572,145573,145576,145579,145582],{},[1763,145574,145575],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1763,145577,145578],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1763,145580,145581],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1763,145583,145584],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24265,145586,145588],{"id":145587},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3760,145590],{"style":128625,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2348,145593,145594],{},"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":135,"searchDepth":210,"depth":210,"links":145596},[145597,145598,145599],{"id":145410,"depth":210,"text":145411},{"id":145420,"depth":210,"text":145421},{"id":145433,"depth":210,"text":145434,"children":145600},[145601,145602,145603,145604,145605],{"id":145440,"depth":254,"text":145441},{"id":145447,"depth":254,"text":145448},{"id":145454,"depth":254,"text":145455},{"id":145472,"depth":254,"text":145473},{"id":145524,"depth":254,"text":145525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145402,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145612,"title":145613,"body":145614,"description":2384,"extension":2385,"meta":146491,"navigation":842,"path":146492,"seo":146493,"stem":146494,"__hash__":146495},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145615,"toc":146475},[145616,145619,145623,145630,145633,145640,145643,145648,145651,145655,145659,145666,145669,145672,145676,145679,145682,145685,145688,145691,145695,145698,145702,145704,145707,145710,145713,145716,145718,145721,145723,145753,145755,145785,145789,145792,145796,145799,145816,145819,145822,145898,145900,145903,145906,145909,145912,145914,145917,145920,145924,145946,145949,145952,145956,145959,145965,145968,145972,145975,145978,145982,145985,145988,145991,145995,145998,146001,146004,146007,146011,146014,146018,146025,146028,146031,146034,146037,146047,146050,146053,146060,146063,146067,146070,146073,146077,146080,146083,146086,146131,146134,146137,146140,146142,146271,146273,146311,146314,146317,146319,146437,146439,146473],[10,145617,145613],{"id":145618},"_20-移动端布局实战上篇",[14,145620,145622],{"id":145621},"_201-移动端主流方案","20.1 移动端主流方案",[1760,145624,145625],{},[1763,145626,145627],{},[1674,145628,145629],{},"单独移动端页面（主流）",[3760,145631],{"style":128625,"src":145632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1760,145634,145635],{"start":210},[1763,145636,145637],{},[1674,145638,145639],{},"响应式兼容PC移动端",[3760,145641],{"style":128625,"src":145642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1760,145644,145645],{"start":254},[1763,145646,145647],{},"两种页面选型布局方式",[3760,145649],{"style":128625,"src":145650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145652,145654],{"id":145653},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1217,145656,145658],{"id":145657},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145660,145661,145662],{},"官网地址： ",[2680,145663,145664],{"href":145664,"rel":145665},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26128],[3760,145667],{"style":128625,"src":145668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3760,145670],{"style":128625,"src":145671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1217,145673,145675],{"id":145674},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3760,145677],{"style":128625,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3760,145680],{"style":128625,"src":145681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145683,145684],{},"去除高亮：",[19,145686,145687],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145689,145690],{},"-webkit- tap-highlight-color: transparent;",[14,145692,145694],{"id":145693},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3760,145696],{"style":128625,"src":145697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145699,145701],{"id":145700},"_204-流式布局案例","20.4 流式布局案例",[19,145703,2486],{},[19,145705,145706],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145708,145709],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145711,145712],{},"图片格式：",[3760,145714],{"style":128625,"src":145715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145717,137812],{},[3760,145719],{"style":128625,"src":145720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145722,142139],{},[130,145724,145725],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,145726,145727],{"__ignoreMap":135},[139,145728,145729,145731,145733,145735,145737,145739,145741,145743,145745,145747,145749,145751],{"class":141,"line":142},[139,145730,796],{"class":145},[139,145732,3760],{"class":53538},[139,145734,57473],{"class":781},[139,145736,150],{"class":145},[139,145738,136286],{"class":160},[139,145740,57481],{"class":781},[139,145742,150],{"class":145},[139,145744,136293],{"class":160},[139,145746,136296],{"class":781},[139,145748,150],{"class":145},[139,145750,136301],{"class":160},[139,145752,53545],{"class":145},[19,145754,142228],{},[130,145756,145757],{"className":129516,"code":136271,"language":129518,"meta":135,"style":135},[50,145758,145759],{"__ignoreMap":135},[139,145760,145761,145763,145765,145767,145769,145771,145773,145775,145777,145779,145781,145783],{"class":141,"line":142},[139,145762,796],{"class":145},[139,145764,3760],{"class":53538},[139,145766,57473],{"class":781},[139,145768,150],{"class":145},[139,145770,136286],{"class":160},[139,145772,57481],{"class":781},[139,145774,150],{"class":145},[139,145776,136293],{"class":160},[139,145778,136296],{"class":781},[139,145780,150],{"class":145},[139,145782,136301],{"class":160},[139,145784,53545],{"class":145},[14,145786,145788],{"id":145787},"_205-flex布局","20.5 flex布局",[3760,145790],{"style":128625,"src":145791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1217,145793,145795],{"id":145794},"_2051-布局原理","20.5.1 布局原理",[19,145797,145798],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3437,145800,145801,145804,145807,145810,145813],{},[1763,145802,145803],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1763,145805,145806],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1763,145808,145809],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1763,145811,145812],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1763,145814,145815],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145817,145818],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145820,145821],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[130,145823,145825],{"className":128769,"code":145824,"language":128771,"meta":135,"style":135},"\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",[50,145826,145827,145832,145839,145849,145861,145872,145883,145894],{"__ignoreMap":135},[139,145828,145829],{"class":141,"line":142},[139,145830,145831],{"class":2512},"\u002F* Flex 弹性布局 *\u002F\n",[139,145833,145834,145837],{"class":141,"line":210},[139,145835,145836],{"class":781},".container",[139,145838,17840],{"class":145},[139,145840,145841,145843,145845,145847],{"class":141,"line":254},[139,145842,130385],{"class":153},[139,145844,2265],{"class":145},[139,145846,53714],{"class":153},[139,145848,3591],{"class":145},[139,145850,145851,145854,145856,145859],{"class":141,"line":262},[139,145852,145853],{"class":153},"  flex-direction",[139,145855,2265],{"class":145},[139,145857,145858],{"class":153},"row",[139,145860,3591],{"class":145},[139,145862,145863,145866,145868,145870],{"class":141,"line":313},[139,145864,145865],{"class":153},"  justify-content",[139,145867,2265],{"class":145},[139,145869,53905],{"class":153},[139,145871,3591],{"class":145},[139,145873,145874,145877,145879,145881],{"class":141,"line":462},[139,145875,145876],{"class":153},"  align-items",[139,145878,2265],{"class":145},[139,145880,53829],{"class":153},[139,145882,3591],{"class":145},[139,145884,145885,145888,145890,145892],{"class":141,"line":474},[139,145886,145887],{"class":153},"  flex-wrap",[139,145889,2265],{"class":145},[139,145891,80839],{"class":153},[139,145893,3591],{"class":145},[139,145895,145896],{"class":141,"line":484},[139,145897,3862],{"class":145},[19,145899,72682],{},[19,145901,145902],{},".form-item .male-label {",[19,145904,145905],{},"   margin-right: 20px;",[19,145907,145908],{},"   display: inline-flex;",[19,145910,145911],{},"   align-items: center;",[19,145913,631],{},[3760,145915],{"style":128625,"src":145916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3760,145918],{"style":128625,"src":145919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1217,145921,145923],{"id":145922},"_2052-常见父项属性","20.5.2 常见父项属性",[1760,145925,145926,145929,145932,145935,145938,145941,145944],{},[1763,145927,145928],{},"flex-direction：设置主轴的方向",[1763,145930,145931],{},"justify-content：设置主轴上的子元素排列方式",[1763,145933,145934],{},"flex-wrap：设置子元素是否换行",[1763,145936,145937],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1763,145939,145940],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1763,145942,145943],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1763,145945,145928],{},[3760,145947],{"style":128625,"src":145948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3760,145950],{"style":128625,"src":145951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1760,145953,145954],{"start":210},[1763,145955,145931],{},[3760,145957],{"style":128625,"src":145958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145960,145961,145964],{},[50,145962,145963],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145966,145967],{},"跟着主轴走",[1760,145969,145970],{"start":254},[1763,145971,145934],{},[3760,145973],{"style":128625,"src":145974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145976,145977],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1760,145979,145980],{"start":262},[1763,145981,145937],{},[3760,145983],{"style":128625,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145986,145987],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145989,145990],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1760,145992,145993],{"start":313},[1763,145994,145940],{},[3760,145996],{"style":128625,"src":145997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145999,146000],{},"align-items与align-content之间的区别：",[19,146002,146003],{},"单找items，多找content",[3760,146005],{"style":128625,"src":146006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1760,146008,146009],{"start":462},[1763,146010,145943],{},[3760,146012],{"style":128625,"src":146013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1217,146015,146017],{"id":146016},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1760,146019,146020],{},[1763,146021,146022],{},[1674,146023,146024],{},"flex 属性",[19,146026,146027],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3760,146029],{"style":128625,"src":146030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146032,146033],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146035,146036],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1760,146038,146039],{"start":210},[1763,146040,146041,16066,146044],{},[1674,146042,146043],{},"align-self",[1674,146045,146046],{},"控制子项自己在侧轴上的排列方式",[3760,146048],{"style":128625,"src":146049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146051,146052],{},"单个子盒子在父盒子侧轴上的排列方式",[1760,146054,146055],{"start":254},[1763,146056,146057,146059],{},[1674,146058,97524],{}," 属性定义项目的排列顺序",[3760,146061],{"style":128625,"src":146062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1217,146064,146066],{"id":146065},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3760,146068],{"style":128625,"src":146069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146071,146072],{},"必须要添加浏览器的私有前缀",[1217,146074,146076],{"id":146075},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146078,146079],{},"学到最重要的知识：",[19,146081,146082],{},"flex处理这样的布局思路",[3760,146084],{"style":128625,"src":146085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[130,146087,146089],{"className":128769,"code":146088,"language":128771,"meta":135,"style":135},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[50,146090,146091,146097,146107,146117,146127],{"__ignoreMap":135},[139,146092,146093,146095],{"class":141,"line":142},[139,146094,145836],{"class":781},[139,146096,17840],{"class":145},[139,146098,146099,146101,146103,146105],{"class":141,"line":210},[139,146100,130385],{"class":153},[139,146102,2265],{"class":145},[139,146104,53714],{"class":153},[139,146106,3591],{"class":145},[139,146108,146109,146111,146113,146115],{"class":141,"line":254},[139,146110,145865],{"class":153},[139,146112,2265],{"class":145},[139,146114,53829],{"class":153},[139,146116,3591],{"class":145},[139,146118,146119,146121,146123,146125],{"class":141,"line":262},[139,146120,145876],{"class":153},[139,146122,2265],{"class":145},[139,146124,53829],{"class":153},[139,146126,3591],{"class":145},[139,146128,146129],{"class":141,"line":313},[139,146130,3862],{"class":145},[19,146132,146133],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146135,146136],{},"使用属性选择器",[3760,146138],{"style":128625,"src":146139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146141,71119],{},[130,146143,146145],{"className":129516,"code":146144,"language":129518,"meta":135,"style":135},"\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",[50,146146,146147,146152,146166,146171,146191,146196,146215,146220,146239,146244,146263],{"__ignoreMap":135},[139,146148,146149],{"class":141,"line":142},[139,146150,146151],{"class":2512},"\u003C!-- 携程网移动端案例结构 -->\n",[139,146153,146154,146156,146158,146160,146162,146164],{"class":141,"line":210},[139,146155,796],{"class":145},[139,146157,53848],{"class":53538},[139,146159,55721],{"class":781},[139,146161,150],{"class":145},[139,146163,94551],{"class":160},[139,146165,53545],{"class":145},[139,146167,146168],{"class":141,"line":254},[139,146169,146170],{"class":2512},"  \u003C!-- 搜索栏 -->\n",[139,146172,146173,146175,146177,146179,146181,146184,146187,146189],{"class":141,"line":262},[139,146174,54380],{"class":145},[139,146176,53848],{"class":53538},[139,146178,55721],{"class":781},[139,146180,150],{"class":145},[139,146182,146183],{"class":160},"\"search-index\"",[139,146185,146186],{"class":145},">...\u003C\u002F",[139,146188,53848],{"class":53538},[139,146190,53545],{"class":145},[139,146192,146193],{"class":141,"line":313},[139,146194,146195],{"class":2512},"  \u003C!-- 焦点图 -->\n",[139,146197,146198,146200,146202,146204,146206,146209,146211,146213],{"class":141,"line":462},[139,146199,54380],{"class":145},[139,146201,53848],{"class":53538},[139,146203,55721],{"class":781},[139,146205,150],{"class":145},[139,146207,146208],{"class":160},"\"focus\"",[139,146210,146186],{"class":145},[139,146212,53848],{"class":53538},[139,146214,53545],{"class":145},[139,146216,146217],{"class":141,"line":474},[139,146218,146219],{"class":2512},"  \u003C!-- 主导航 -->\n",[139,146221,146222,146224,146226,146228,146230,146233,146235,146237],{"class":141,"line":484},[139,146223,54380],{"class":145},[139,146225,53848],{"class":53538},[139,146227,55721],{"class":781},[139,146229,150],{"class":145},[139,146231,146232],{"class":160},"\"local-nav\"",[139,146234,146186],{"class":145},[139,146236,53848],{"class":53538},[139,146238,53545],{"class":145},[139,146240,146241],{"class":141,"line":989},[139,146242,146243],{"class":2512},"  \u003C!-- 子导航 -->\n",[139,146245,146246,146248,146250,146252,146254,146257,146259,146261],{"class":141,"line":994},[139,146247,54380],{"class":145},[139,146249,53848],{"class":53538},[139,146251,55721],{"class":781},[139,146253,150],{"class":145},[139,146255,146256],{"class":160},"\"nav-common\"",[139,146258,146186],{"class":145},[139,146260,53848],{"class":53538},[139,146262,53545],{"class":145},[139,146264,146265,146267,146269],{"class":141,"line":999},[139,146266,54022],{"class":145},[139,146268,53848],{"class":53538},[139,146270,53545],{"class":145},[19,146272,72682],{},[130,146274,146275],{"className":128769,"code":139221,"language":128771,"meta":135,"style":135},[50,146276,146277,146291,146307],{"__ignoreMap":135},[139,146278,146279,146281,146283,146285,146287,146289],{"class":141,"line":142},[139,146280,199],{"class":53538},[139,146282,3325],{"class":145},[139,146284,105331],{"class":781},[139,146286,150],{"class":149},[139,146288,64931],{"class":160},[139,146290,139238],{"class":145},[139,146292,146293,146295,146297,146299,146301,146303,146305],{"class":141,"line":210},[139,146294,73125],{"class":153},[139,146296,2265],{"class":145},[139,146298,410],{"class":153},[139,146300,53729],{"class":149},[139,146302,53758],{"class":153},[139,146304,132349],{"class":153},[139,146306,3591],{"class":145},[139,146308,146309],{"class":141,"line":254},[139,146310,3862],{"class":145},[19,146312,146313],{},"总代码和效果展示：",[3760,146315],{"style":128625,"src":146316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146318,71119],{},[130,146320,146321],{"className":129516,"code":146144,"language":129518,"meta":135,"style":135},[50,146322,146323,146327,146341,146345,146363,146367,146385,146389,146407,146411,146429],{"__ignoreMap":135},[139,146324,146325],{"class":141,"line":142},[139,146326,146151],{"class":2512},[139,146328,146329,146331,146333,146335,146337,146339],{"class":141,"line":210},[139,146330,796],{"class":145},[139,146332,53848],{"class":53538},[139,146334,55721],{"class":781},[139,146336,150],{"class":145},[139,146338,94551],{"class":160},[139,146340,53545],{"class":145},[139,146342,146343],{"class":141,"line":254},[139,146344,146170],{"class":2512},[139,146346,146347,146349,146351,146353,146355,146357,146359,146361],{"class":141,"line":262},[139,146348,54380],{"class":145},[139,146350,53848],{"class":53538},[139,146352,55721],{"class":781},[139,146354,150],{"class":145},[139,146356,146183],{"class":160},[139,146358,146186],{"class":145},[139,146360,53848],{"class":53538},[139,146362,53545],{"class":145},[139,146364,146365],{"class":141,"line":313},[139,146366,146195],{"class":2512},[139,146368,146369,146371,146373,146375,146377,146379,146381,146383],{"class":141,"line":462},[139,146370,54380],{"class":145},[139,146372,53848],{"class":53538},[139,146374,55721],{"class":781},[139,146376,150],{"class":145},[139,146378,146208],{"class":160},[139,146380,146186],{"class":145},[139,146382,53848],{"class":53538},[139,146384,53545],{"class":145},[139,146386,146387],{"class":141,"line":474},[139,146388,146219],{"class":2512},[139,146390,146391,146393,146395,146397,146399,146401,146403,146405],{"class":141,"line":484},[139,146392,54380],{"class":145},[139,146394,53848],{"class":53538},[139,146396,55721],{"class":781},[139,146398,150],{"class":145},[139,146400,146232],{"class":160},[139,146402,146186],{"class":145},[139,146404,53848],{"class":53538},[139,146406,53545],{"class":145},[139,146408,146409],{"class":141,"line":989},[139,146410,146243],{"class":2512},[139,146412,146413,146415,146417,146419,146421,146423,146425,146427],{"class":141,"line":994},[139,146414,54380],{"class":145},[139,146416,53848],{"class":53538},[139,146418,55721],{"class":781},[139,146420,150],{"class":145},[139,146422,146256],{"class":160},[139,146424,146186],{"class":145},[139,146426,53848],{"class":53538},[139,146428,53545],{"class":145},[139,146430,146431,146433,146435],{"class":141,"line":999},[139,146432,54022],{"class":145},[139,146434,53848],{"class":53538},[139,146436,53545],{"class":145},[19,146438,72682],{},[130,146440,146441],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,146442,146443,146447,146461,146465],{"__ignoreMap":135},[139,146444,146445],{"class":141,"line":142},[139,146446,132880],{"class":2512},[139,146448,146449,146451,146453,146455,146457,146459],{"class":141,"line":210},[139,146450,796],{"class":145},[139,146452,53848],{"class":53538},[139,146454,55721],{"class":781},[139,146456,150],{"class":145},[139,146458,132893],{"class":160},[139,146460,53545],{"class":145},[139,146462,146463],{"class":141,"line":254},[139,146464,132900],{"class":145},[139,146466,146467,146469,146471],{"class":141,"line":262},[139,146468,54022],{"class":145},[139,146470,53848],{"class":53538},[139,146472,53545],{"class":145},[2348,146474,140170],{},{"title":135,"searchDepth":210,"depth":210,"links":146476},[146477,146478,146482,146483,146484],{"id":145621,"depth":210,"text":145622},{"id":145653,"depth":210,"text":145654,"children":146479},[146480,146481],{"id":145657,"depth":254,"text":145658},{"id":145674,"depth":254,"text":145675},{"id":145693,"depth":210,"text":145694},{"id":145700,"depth":210,"text":145701},{"id":145787,"depth":210,"text":145788,"children":146485},[146486,146487,146488,146489,146490],{"id":145794,"depth":254,"text":145795},{"id":145922,"depth":254,"text":145923},{"id":146016,"depth":254,"text":146017},{"id":146065,"depth":254,"text":146066},{"id":146075,"depth":254,"text":146076},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145613,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146497,"title":146498,"body":146499,"description":2384,"extension":2385,"meta":147726,"navigation":842,"path":147727,"seo":147728,"stem":147729,"__hash__":147730},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146500,"toc":147704},[146501,146504,146508,146512,146515,146518,146522,146527,146530,146533,146536,146539,146542,146599,146602,146607,146610,146613,146617,146628,146632,146635,146638,146645,146650,146654,146657,146663,146666,146670,146673,146680,146683,146686,146693,146696,146703,146706,146709,146716,146719,146722,146724,146741,146745,146748,146751,146754,146758,146761,146764,146767,146770,146773,146776,146778,146781,146784,146846,146849,146959,146966,146972,146975,146978,146982,146985,146989,146994,146997,147004,147007,147013,147018,147021,147024,147027,147030,147033,147036,147039,147042,147098,147100,147126,147130,147133,147136,147139,147147,147150,147153,147157,147213,147216,147220,147226,147237,147240,147245,147248,147251,147257,147260,147263,147266,147269,147272,147275,147278,147281,147306,147312,147315,147318,147321,147324,147327,147330,147335,147338,147341,147344,147352,147355,147362,147365,147368,147370,147394,147396,147399,147402,147405,147408,147411,147414,147417,147451,147454,147457,147491,147498,147501,147504,147507,147510,147513,147516,147523,147526,147529,147532,147535,147542,147545,147548,147555,147558,147561,147565,147568,147571,147574,147577,147580,147583,147586,147589,147591,147615,147617,147641,147645,147656,147659,147662,147665,147668,147671,147674,147677,147680,147683,147686,147689,147692,147695,147698,147701],[10,146502,146498],{"id":146503},"_21-移动端布局实战下篇",[14,146505,146507],{"id":146506},"_211-rem适配布局","21.1 rem适配布局",[1217,146509,146511],{"id":146510},"_2111-rem单位","21.1.1 rem单位",[3760,146513],{"style":128625,"src":146514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146516,146517],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1217,146519,146521],{"id":146520},"_2112-媒体查询","21.1.2 媒体查询",[1760,146523,146524],{},[1763,146525,146526],{},"参数介绍",[3760,146528],{"style":128625,"src":146529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3760,146531],{"style":128625,"src":146532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3760,146534],{"style":128625,"src":146535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3760,146537],{"style":128625,"src":146538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3760,146540],{"style":128625,"src":146541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[130,146543,146545],{"className":128769,"code":146544,"language":128771,"meta":135,"style":135},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[50,146546,146547,146552,146571,146578,146591,146595],{"__ignoreMap":135},[139,146548,146549],{"class":141,"line":142},[139,146550,146551],{"class":2512},"\u002F* 媒体查询 *\u002F\n",[139,146553,146554,146557,146559,146562,146564,146567,146569],{"class":141,"line":210},[139,146555,146556],{"class":149},"@media",[139,146558,549],{"class":145},[139,146560,146561],{"class":153},"max-width",[139,146563,2265],{"class":145},[139,146565,146566],{"class":153},"768",[139,146568,53729],{"class":149},[139,146570,14714],{"class":145},[139,146572,146573,146576],{"class":141,"line":254},[139,146574,146575],{"class":781},"  .container",[139,146577,17840],{"class":145},[139,146579,146580,146583,146585,146587,146589],{"class":141,"line":262},[139,146581,146582],{"class":153},"    width",[139,146584,2265],{"class":145},[139,146586,1017],{"class":153},[139,146588,2766],{"class":149},[139,146590,3591],{"class":145},[139,146592,146593],{"class":141,"line":313},[139,146594,129565],{"class":145},[139,146596,146597],{"class":141,"line":462},[139,146598,3862],{"class":145},[19,146600,146601],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1760,146603,146604],{"start":210},[1763,146605,146606],{},"引入资源",[3760,146608],{"style":128625,"src":146609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146611,146612],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1217,146614,146616],{"id":146615},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3437,146618,146619,146622,146625],{},[1763,146620,146621],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1763,146623,146624],{},"媒体查询可以根据不同设备宽度来修改样式",[1763,146626,146627],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146629,146631],{"id":146630},"_212-less基础","21.2 Less基础",[19,146633,146634],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146636,146637],{},"Less可以解决该问题，它是css的扩展语言",[19,146639,146640,146641],{},"Less中文网址： ",[2680,146642,146643],{"href":146643,"rel":146644},"http:\u002F\u002Flesscss.cn\u002F",[26128],[19,146646,146647],{},[1674,146648,146649],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1217,146651,146653],{"id":146652},"_2121-less安装","21.2.1 less安装",[19,146655,146656],{},"如果使用vscode，则无需进行下方安装步骤",[19,146658,146659],{},[2680,146660,146661],{"href":146661,"rel":146662},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26128],[3760,146664],{"style":128625,"src":146665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1217,146667,146669],{"id":146668},"_2122-less使用","21.2.2 less使用",[19,146671,146672],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1760,146674,146675],{},[1763,146676,146677],{},[1674,146678,146679],{},"Less 变量",[3760,146681],{"style":128625,"src":146682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3760,146684],{"style":128625,"src":146685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1760,146687,146688],{"start":210},[1763,146689,146690],{},[1674,146691,146692],{},"Less 编译",[3760,146694],{"style":128625,"src":146695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1760,146697,146698],{"start":254},[1763,146699,146700],{},[1674,146701,146702],{},"Less 嵌套",[3760,146704],{"style":128625,"src":146705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3760,146707],{"style":128625,"src":146708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1760,146710,146711],{"start":262},[1763,146712,146713],{},[1674,146714,146715],{},"Less 运算",[3760,146717],{"style":128625,"src":146718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146720,146721],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146723,2486],{},[3437,146725,146726,146729,146732,146735,146738],{},[1763,146727,146728],{},"乘号（*）和除号（\u002F）的写法",[1763,146730,146731],{},"运算符中间左右有个空格隔开 1px + 5",[1763,146733,146734],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1763,146736,146737],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1763,146739,146740],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146742,146744],{"id":146743},"_213-rem-适配方案","21.3 rem 适配方案",[19,146746,146747],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146749,146750],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3760,146752],{"style":128625,"src":146753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1217,146755,146757],{"id":146756},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146759,146760],{},"rem + 媒体查询 + less 技术",[3760,146762],{"style":128625,"src":146763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146765,146766],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146768,146769],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3760,146771],{"style":128625,"src":146772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146774,146775],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146777,16904],{},[3760,146779],{"style":128625,"src":146780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146782,146783],{},"index.html:",[130,146785,146787],{"className":128769,"code":146786,"language":128771,"meta":135,"style":135},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[50,146788,146789,146794,146800,146816,146820,146826,146842],{"__ignoreMap":135},[139,146790,146791],{"class":141,"line":142},[139,146792,146793],{"class":2512},"\u002F* rem 适配方案 *\u002F\n",[139,146795,146796,146798],{"class":141,"line":210},[139,146797,52873],{"class":53538},[139,146799,17840],{"class":145},[139,146801,146802,146804,146806,146809,146811,146813],{"class":141,"line":254},[139,146803,72855],{"class":153},[139,146805,2265],{"class":145},[139,146807,146808],{"class":153},"62.5",[139,146810,2766],{"class":149},[139,146812,132632],{"class":145},[139,146814,146815],{"class":2512},"\u002F* 1rem = 10px *\u002F\n",[139,146817,146818],{"class":141,"line":262},[139,146819,3862],{"class":145},[139,146821,146822,146824],{"class":141,"line":313},[139,146823,132617],{"class":781},[139,146825,17840],{"class":145},[139,146827,146828,146830,146832,146834,146837,146839],{"class":141,"line":462},[139,146829,72797],{"class":153},[139,146831,2265],{"class":145},[139,146833,536],{"class":153},[139,146835,146836],{"class":149},"rem",[139,146838,132632],{"class":145},[139,146840,146841],{"class":2512},"\u002F* 100px *\u002F\n",[139,146843,146844],{"class":141,"line":474},[139,146845,3862],{"class":145},[19,146847,146848],{},"common.less",[130,146850,146852],{"className":128769,"code":146851,"language":128771,"meta":135,"style":135},"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",[50,146853,146854,146860,146875,146879,146885,146899,146903,146907,146911,146917,146931,146935,146941,146955],{"__ignoreMap":135},[139,146855,146856,146858],{"class":141,"line":142},[139,146857,52873],{"class":53538},[139,146859,17840],{"class":145},[139,146861,146862,146864,146866,146868,146870,146872],{"class":141,"line":210},[139,146863,72855],{"class":153},[139,146865,2265],{"class":145},[139,146867,146808],{"class":153},[139,146869,2766],{"class":149},[139,146871,28328],{"class":145},[139,146873,146874],{"class":2512},"\u002F* 10px *\u002F\n",[139,146876,146877],{"class":141,"line":254},[139,146878,3862],{"class":145},[139,146880,146881,146883],{"class":141,"line":262},[139,146882,53848],{"class":53538},[139,146884,17840],{"class":145},[139,146886,146887,146889,146891,146893,146895,146897],{"class":141,"line":313},[139,146888,72797],{"class":153},[139,146890,2265],{"class":145},[139,146892,536],{"class":153},[139,146894,146836],{"class":149},[139,146896,28328],{"class":145},[139,146898,146841],{"class":2512},[139,146900,146901],{"class":141,"line":462},[139,146902,3862],{"class":145},[139,146904,146905],{"class":141,"line":474},[139,146906,138230],{"class":145},[139,146908,146909],{"class":141,"line":484},[139,146910,146793],{"class":2512},[139,146912,146913,146915],{"class":141,"line":989},[139,146914,52873],{"class":53538},[139,146916,17840],{"class":145},[139,146918,146919,146921,146923,146925,146927,146929],{"class":141,"line":994},[139,146920,72855],{"class":153},[139,146922,2265],{"class":145},[139,146924,146808],{"class":153},[139,146926,2766],{"class":149},[139,146928,132632],{"class":145},[139,146930,146815],{"class":2512},[139,146932,146933],{"class":141,"line":999},[139,146934,3862],{"class":145},[139,146936,146937,146939],{"class":141,"line":1006},[139,146938,132617],{"class":781},[139,146940,17840],{"class":145},[139,146942,146943,146945,146947,146949,146951,146953],{"class":141,"line":1027},[139,146944,72797],{"class":153},[139,146946,2265],{"class":145},[139,146948,536],{"class":153},[139,146950,146836],{"class":149},[139,146952,132632],{"class":145},[139,146954,146841],{"class":2512},[139,146956,146957],{"class":141,"line":1040},[139,146958,3862],{"class":145},[19,146960,146961,146962,146965],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25820,146963,146964],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[130,146967,146970],{"className":146968,"code":146969,"language":645},[643],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[50,146971,146969],{"__ignoreMap":135},[19,146973,146974],{},"less保存时会自动变成.css文件",[19,146976,146977],{},"好好搞懂上述代码写法",[1217,146979,146981],{"id":146980},"_2132-样式导入样式","21.3.2 样式导入样式",[3760,146983],{"style":128625,"src":146984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1217,146986,146988],{"id":146987},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1760,146990,146991],{},[1763,146992,146993],{},"准备工作",[3760,146995],{"style":128625,"src":146996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146998,146999,147000],{},"github地址：",[2680,147001,147002],{"href":147002,"rel":147003},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26128],[19,147005,147006],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147008,147009,147010],{},"js文件引入到index.html中使用的是",[50,147011,147012],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1760,147014,147015],{"start":210},[1763,147016,147017],{},"vscode插件",[3760,147019],{"style":128625,"src":147020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147022,147023],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147025,147026],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3760,147028],{"style":128625,"src":147029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147031,147032],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3760,147034],{"style":128625,"src":147035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147037,147038],{},"修改成75就可以，alt+z为快捷键",[19,147040,147041],{},"index.css：",[130,147043,147044],{"className":128769,"code":146786,"language":128771,"meta":135,"style":135},[50,147045,147046,147050,147056,147070,147074,147080,147094],{"__ignoreMap":135},[139,147047,147048],{"class":141,"line":142},[139,147049,146793],{"class":2512},[139,147051,147052,147054],{"class":141,"line":210},[139,147053,52873],{"class":53538},[139,147055,17840],{"class":145},[139,147057,147058,147060,147062,147064,147066,147068],{"class":141,"line":254},[139,147059,72855],{"class":153},[139,147061,2265],{"class":145},[139,147063,146808],{"class":153},[139,147065,2766],{"class":149},[139,147067,132632],{"class":145},[139,147069,146815],{"class":2512},[139,147071,147072],{"class":141,"line":262},[139,147073,3862],{"class":145},[139,147075,147076,147078],{"class":141,"line":313},[139,147077,132617],{"class":781},[139,147079,17840],{"class":145},[139,147081,147082,147084,147086,147088,147090,147092],{"class":141,"line":462},[139,147083,72797],{"class":153},[139,147085,2265],{"class":145},[139,147087,536],{"class":153},[139,147089,146836],{"class":149},[139,147091,132632],{"class":145},[139,147093,146841],{"class":2512},[139,147095,147096],{"class":141,"line":474},[139,147097,3862],{"class":145},[19,147099,146783],{},[130,147101,147102],{"className":128769,"code":129173,"language":128771,"meta":135,"style":135},[50,147103,147104,147110,147122],{"__ignoreMap":135},[139,147105,147106,147108],{"class":141,"line":142},[139,147107,54037],{"class":53538},[139,147109,17840],{"class":145},[139,147111,147112,147114,147116,147118,147120],{"class":141,"line":210},[139,147113,72855],{"class":153},[139,147115,2265],{"class":145},[139,147117,3036],{"class":153},[139,147119,53729],{"class":149},[139,147121,3591],{"class":145},[139,147123,147124],{"class":141,"line":254},[139,147125,3862],{"class":145},[14,147127,147129],{"id":147128},"_214-响应式开发","21.4 响应式开发",[19,147131,147132],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3760,147134],{"style":128625,"src":147135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147137,147138],{},"做法：",[3437,147140,147141,147144],{},[1763,147142,147143],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1763,147145,147146],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3760,147148],{"style":128625,"src":147149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147151,147152],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1217,147154,147156],{"id":147155},"_2141-简单代码示范","21.4.1 简单代码示范",[130,147158,147159],{"className":128769,"code":146786,"language":128771,"meta":135,"style":135},[50,147160,147161,147165,147171,147185,147189,147195,147209],{"__ignoreMap":135},[139,147162,147163],{"class":141,"line":142},[139,147164,146793],{"class":2512},[139,147166,147167,147169],{"class":141,"line":210},[139,147168,52873],{"class":53538},[139,147170,17840],{"class":145},[139,147172,147173,147175,147177,147179,147181,147183],{"class":141,"line":254},[139,147174,72855],{"class":153},[139,147176,2265],{"class":145},[139,147178,146808],{"class":153},[139,147180,2766],{"class":149},[139,147182,132632],{"class":145},[139,147184,146815],{"class":2512},[139,147186,147187],{"class":141,"line":262},[139,147188,3862],{"class":145},[139,147190,147191,147193],{"class":141,"line":313},[139,147192,132617],{"class":781},[139,147194,17840],{"class":145},[139,147196,147197,147199,147201,147203,147205,147207],{"class":141,"line":462},[139,147198,72797],{"class":153},[139,147200,2265],{"class":145},[139,147202,536],{"class":153},[139,147204,146836],{"class":149},[139,147206,132632],{"class":145},[139,147208,146841],{"class":2512},[139,147210,147211],{"class":141,"line":474},[139,147212,3862],{"class":145},[19,147214,147215],{},"父盒子一般命名为container",[1217,147217,147219],{"id":147218},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147221,147222,147223],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1674,147224,147225],{},"使得 Web 开发更加快捷",[3437,147227,147228],{},[1763,147229,147230,147231],{},"官网：",[1674,147232,147233],{},[2680,147234,147235],{"href":147235,"rel":147236},"http:\u002F\u002Fgetbootstrap.com\u002F",[26128],[19,147238,147239],{},"可以直接去官网拿现成的东西",[1760,147241,147242],{},[1763,147243,147244],{},"Bootstrap的使用",[19,147246,147247],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147249,147250],{},"Bootstrap 使用四步曲：",[19,147252,147253,147256],{},[1674,147254,147255],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3760,147258],{"style":128625,"src":147259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147261,147262],{},"打开Bootstrap官网，然后下载",[3760,147264],{"style":128625,"src":147265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3760,147267],{"style":128625,"src":147268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147270,147271],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147273,147274],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147276,147277],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3760,147279],{"style":128625,"src":147280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[130,147282,147284],{"className":128769,"code":147283,"language":128771,"meta":135,"style":135},".center {\n  color: red;\n}\n",[50,147285,147286,147292,147302],{"__ignoreMap":135},[139,147287,147288,147290],{"class":141,"line":142},[139,147289,129060],{"class":781},[139,147291,17840],{"class":145},[139,147293,147294,147296,147298,147300],{"class":141,"line":210},[139,147295,73134],{"class":153},[139,147297,2265],{"class":145},[139,147299,59655],{"class":153},[139,147301,3591],{"class":145},[139,147303,147304],{"class":141,"line":254},[139,147305,3862],{"class":145},[19,147307,147308,147311],{},[50,147309,147310],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3760,147313],{"style":128625,"src":147314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3760,147316],{"style":128625,"src":147317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3760,147319],{"style":128625,"src":147320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147322,147323],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3760,147325],{"style":128625,"src":147326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147328,147329],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1760,147331,147332],{"start":210},[1763,147333,147334],{},"布局容器",[3760,147336],{"style":128625,"src":147337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147339,147340],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147342,147343],{},"container-fluid用于移动式布局比较方便",[1760,147345,147346],{"start":254},[1763,147347,147348,147349],{},"bootstrap ",[1674,147350,147351],{},"栅格系统原理",[3760,147353],{"style":128625,"src":147354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1760,147356,147357],{"start":262},[1763,147358,147359],{},[1674,147360,147361],{},"栅格选项参数",[3760,147363],{"style":128625,"src":147364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147366,147367],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147369,16904],{},[130,147371,147372],{"className":128769,"code":147283,"language":128771,"meta":135,"style":135},[50,147373,147374,147380,147390],{"__ignoreMap":135},[139,147375,147376,147378],{"class":141,"line":142},[139,147377,129060],{"class":781},[139,147379,17840],{"class":145},[139,147381,147382,147384,147386,147388],{"class":141,"line":210},[139,147383,73134],{"class":153},[139,147385,2265],{"class":145},[139,147387,59655],{"class":153},[139,147389,3591],{"class":145},[139,147391,147392],{"class":141,"line":254},[139,147393,3862],{"class":145},[19,147395,137812],{},[3760,147397],{"style":128625,"src":147398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147400,147401],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147403,147404],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147406,147407],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147409,147410],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147412,147413],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147415,147416],{},"汇总展示说明：",[130,147418,147419],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,147420,147421,147425,147439,147443],{"__ignoreMap":135},[139,147422,147423],{"class":141,"line":142},[139,147424,132880],{"class":2512},[139,147426,147427,147429,147431,147433,147435,147437],{"class":141,"line":210},[139,147428,796],{"class":145},[139,147430,53848],{"class":53538},[139,147432,55721],{"class":781},[139,147434,150],{"class":145},[139,147436,132893],{"class":160},[139,147438,53545],{"class":145},[139,147440,147441],{"class":141,"line":254},[139,147442,132900],{"class":145},[139,147444,147445,147447,147449],{"class":141,"line":262},[139,147446,54022],{"class":145},[139,147448,53848],{"class":53538},[139,147450,53545],{"class":145},[3760,147452],{"style":128625,"src":147453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147455,147456],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[130,147458,147459],{"className":129516,"code":132873,"language":129518,"meta":135,"style":135},[50,147460,147461,147465,147479,147483],{"__ignoreMap":135},[139,147462,147463],{"class":141,"line":142},[139,147464,132880],{"class":2512},[139,147466,147467,147469,147471,147473,147475,147477],{"class":141,"line":210},[139,147468,796],{"class":145},[139,147470,53848],{"class":53538},[139,147472,55721],{"class":781},[139,147474,150],{"class":145},[139,147476,132893],{"class":160},[139,147478,53545],{"class":145},[139,147480,147481],{"class":141,"line":254},[139,147482,132900],{"class":145},[139,147484,147485,147487,147489],{"class":141,"line":262},[139,147486,54022],{"class":145},[139,147488,53848],{"class":53538},[139,147490,53545],{"class":145},[1760,147492,147493],{"start":313},[1763,147494,147495],{},[1674,147496,147497],{},"列嵌套",[3760,147499],{"style":128625,"src":147500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147502,147503],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147505,147506],{},"没加row内部这样：",[3760,147508],{"style":128625,"src":147509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147511,147512],{},"加上row之后内部为：",[3760,147514],{"style":128625,"src":147515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1760,147517,147518],{"start":462},[1763,147519,147520],{},[1674,147521,147522],{},"列偏移",[3760,147524],{"style":128625,"src":147525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147527,147528],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147530,147531],{},"要加偏移量，即偏移份数",[19,147533,147534],{},"偏移的份数=12-两个盒子的份数",[1760,147536,147537],{"start":474},[1763,147538,147539],{},[1674,147540,147541],{},"列排序",[3760,147543],{"style":128625,"src":147544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147546,147547],{},"pull拉左；push推右",[1760,147549,147550],{"start":484},[1763,147551,147552],{},[1674,147553,147554],{},"响应式工具",[3760,147556],{"style":128625,"src":147557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147559,147560],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1217,147562,147564],{"id":147563},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147566,147567],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147569,147570],{},"ul {",[19,147572,147573],{},"list-style: none;",[19,147575,147576],{},"margin:0;",[19,147578,147579],{},"padding:0; }",[3760,147581],{"style":128625,"src":147582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3760,147584],{"style":128625,"src":147585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147587,147588],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147590,71119],{},[130,147592,147593],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,147594,147595,147601,147611],{"__ignoreMap":135},[139,147596,147597,147599],{"class":141,"line":142},[139,147598,132617],{"class":781},[139,147600,17840],{"class":145},[139,147602,147603,147605,147607,147609],{"class":141,"line":210},[139,147604,133249],{"class":153},[139,147606,2265],{"class":145},[139,147608,26003],{"class":153},[139,147610,3591],{"class":145},[139,147612,147613],{"class":141,"line":254},[139,147614,3862],{"class":145},[19,147616,72682],{},[130,147618,147619],{"className":128769,"code":141439,"language":128771,"meta":135,"style":135},[50,147620,147621,147627,147637],{"__ignoreMap":135},[139,147622,147623,147625],{"class":141,"line":142},[139,147624,132617],{"class":781},[139,147626,17840],{"class":145},[139,147628,147629,147631,147633,147635],{"class":141,"line":210},[139,147630,133249],{"class":153},[139,147632,2265],{"class":145},[139,147634,26003],{"class":153},[139,147636,3591],{"class":145},[139,147638,147639],{"class":141,"line":254},[139,147640,3862],{"class":145},[14,147642,147644],{"id":147643},"_215-swiper-插件使用","21.5 swiper 插件使用",[3437,147646,147647,147650,147653],{},[1763,147648,147649],{},"下载需要的css和js文件html页面中 引入相关文件",[1763,147651,147652],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1763,147654,147655],{},"根据需求定制修改模块",[3760,147657],{"style":128625,"src":147658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147660,147661],{},"解压后将这两部分放到项目中",[3760,147663],{"style":128625,"src":147664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147666,147667],{},"这个插件可以帮助我们实现轮播图效果",[19,147669,147670],{},"用法：",[3760,147672],{"style":128625,"src":147673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147675,147676],{},"找到自己喜欢的",[3760,147678],{"style":128625,"src":147679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147681,147682],{},"右键，查看网页源代码",[3760,147684],{"style":128625,"src":147685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147687,147688],{},"复制人家的结构内容",[19,147690,147691],{},"然后去看API文档：",[3760,147693],{"style":128625,"src":147694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147696,147697],{},"可以看看如何修改样式",[19,147699,147700],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2348,147702,147703],{},"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":135,"searchDepth":210,"depth":210,"links":147705},[147706,147711,147715,147720,147725],{"id":146506,"depth":210,"text":146507,"children":147707},[147708,147709,147710],{"id":146510,"depth":254,"text":146511},{"id":146520,"depth":254,"text":146521},{"id":146615,"depth":254,"text":146616},{"id":146630,"depth":210,"text":146631,"children":147712},[147713,147714],{"id":146652,"depth":254,"text":146653},{"id":146668,"depth":254,"text":146669},{"id":146743,"depth":210,"text":146744,"children":147716},[147717,147718,147719],{"id":146756,"depth":254,"text":146757},{"id":146980,"depth":254,"text":146981},{"id":146987,"depth":254,"text":146988},{"id":147128,"depth":210,"text":147129,"children":147721},[147722,147723,147724],{"id":147155,"depth":254,"text":147156},{"id":147218,"depth":254,"text":147219},{"id":147563,"depth":254,"text":147564},{"id":147643,"depth":210,"text":147644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146498,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147732,"title":147733,"body":147734,"description":2384,"extension":2385,"meta":147954,"navigation":842,"path":147955,"seo":147956,"stem":147957,"__hash__":147958},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147735,"toc":147950},[147736,147739,147743,147746,147761,147766,147769,147774,147809,147814,147826,147831,147844,147849,147866,147871,147891,147896,147914,147917,147920,147923,147926,147930,147933,147936,147939,147942,147945,147948],[10,147737,147733],{"id":147738},"_22-代码提交与新型相对单位",[14,147740,147742],{"id":147741},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147744,147745],{},"法1：",[1760,147747,147748,147755,147758],{},[1763,147749,147750,147751],{},"登录网站注册：",[2680,147752,147753],{"href":147753,"rel":147754},"https:\u002F\u002Fgitee.com\u002F",[26128],[1763,147756,147757],{},"码云创建新的仓库",[1763,147759,147760],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3437,147762,147763],{},[1763,147764,147765],{},"在网站根目录右键-- Git Bash Here",[3760,147767],{"style":128625,"src":147768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3437,147770,147771],{},[1763,147772,147773],{},"如果是第一次利用git提交，请配置好全局选项",[130,147775,147777],{"className":119516,"code":147776,"language":119518,"meta":135,"style":135},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[50,147778,147779,147795],{"__ignoreMap":135},[139,147780,147781,147784,147786,147789,147792],{"class":141,"line":142},[139,147782,147783],{"class":781},"git",[139,147785,121937],{"class":160},[139,147787,147788],{"class":153}," --global",[139,147790,147791],{"class":160}," user.name",[139,147793,147794],{"class":160}," \"你的名字\"\n",[139,147796,147797,147799,147801,147803,147806],{"class":141,"line":210},[139,147798,147783],{"class":781},[139,147800,121937],{"class":160},[139,147802,147788],{"class":153},[139,147804,147805],{"class":160}," user.email",[139,147807,147808],{"class":160}," \"你的邮箱\"\n",[3437,147810,147811],{},[1763,147812,147813],{},"初始化仓库",[130,147815,147817],{"className":119516,"code":147816,"language":119518,"meta":135,"style":135},"git init\n",[50,147818,147819],{"__ignoreMap":135},[139,147820,147821,147823],{"class":141,"line":142},[139,147822,147783],{"class":781},[139,147824,147825],{"class":160}," init\n",[3437,147827,147828],{},[1763,147829,147830],{},"把本地文件放到暂存区",[130,147832,147834],{"className":119516,"code":147833,"language":119518,"meta":135,"style":135},"git add .\n",[50,147835,147836],{"__ignoreMap":135},[139,147837,147838,147840,147842],{"class":141,"line":142},[139,147839,147783],{"class":781},[139,147841,1134],{"class":160},[139,147843,31000],{"class":160},[3437,147845,147846],{},[1763,147847,147848],{},"把本地文件放到本地仓库里面",[130,147850,147852],{"className":119516,"code":147851,"language":119518,"meta":135,"style":135},"git commit -m \"first commit\"\n",[50,147853,147854],{"__ignoreMap":135},[139,147855,147856,147858,147861,147863],{"class":141,"line":142},[139,147857,147783],{"class":781},[139,147859,147860],{"class":160}," commit",[139,147862,103109],{"class":153},[139,147864,147865],{"class":160}," \"first commit\"\n",[3437,147867,147868],{},[1763,147869,147870],{},"链接远程仓库",[130,147872,147874],{"className":119516,"code":147873,"language":119518,"meta":135,"style":135},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[50,147875,147876],{"__ignoreMap":135},[139,147877,147878,147880,147883,147885,147888],{"class":141,"line":142},[139,147879,147783],{"class":781},[139,147881,147882],{"class":160}," remote",[139,147884,1134],{"class":160},[139,147886,147887],{"class":160}," origin",[139,147889,147890],{"class":160}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3437,147892,147893],{},[1763,147894,147895],{},"把本地仓库的文件推送到远程仓库 push",[130,147897,147899],{"className":119516,"code":147898,"language":119518,"meta":135,"style":135},"git push -u origin master\n",[50,147900,147901],{"__ignoreMap":135},[139,147902,147903,147905,147907,147909,147911],{"class":141,"line":142},[139,147904,147783],{"class":781},[139,147906,31275],{"class":160},[139,147908,30550],{"class":153},[139,147910,147887],{"class":160},[139,147912,147913],{"class":160}," master\n",[3760,147915],{"style":128625,"src":147916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147918,147919],{},"上方方法暂未实现，后边学完git后在整",[19,147921,147922],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3760,147924],{"style":128625,"src":147925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147927,147929],{"id":147928},"_222-新型相对单位","22.2 新型相对单位",[3760,147931],{"style":128625,"src":147932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3760,147934],{"style":128625,"src":147935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147937,147938],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147940,147941],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3760,147943],{"style":128625,"src":147944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147946,147947],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2348,147949,26221],{},{"title":135,"searchDepth":210,"depth":210,"links":147951},[147952,147953],{"id":147741,"depth":210,"text":147742},{"id":147928,"depth":210,"text":147929},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147733,"description":2384},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147960,"title":147961,"body":147962,"description":147966,"extension":2385,"meta":147967,"navigation":842,"path":147968,"seo":147969,"stem":147970,"__hash__":147971},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147963,"toc":147964},[],{"title":135,"searchDepth":210,"depth":210,"links":147965},[],"自己正经开始学编程的第一门语言！",{"category":95067},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147961,"description":147966},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147973,"title":147974,"body":147975,"description":2384,"extension":2385,"meta":149110,"navigation":842,"path":149111,"seo":149112,"stem":149113,"__hash__":149114},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147976,"toc":149086},[147977,147980,147984,147987,147990,148015,148018,148024,148028,148031,148058,148061,148101,148104,148116,148119,148125,148129,148133,148160,148177,148184,148188,148191,148217,148220,148224,148227,148267,148270,148287,148293,148297,148302,148345,148348,148366,148369,148437,148441,148448,148451,148466,148469,148478,148481,148492,148495,148504,148507,148521,148524,148538,148542,148546,148549,148551,148570,148574,148577,148580,148591,148594,148600,148604,148610,148637,148640,148652,148655,148666,148668,148674,148678,148684,148734,148737,148778,148781,148814,148817,148851,148855,148858,148878,148881,148917,148920,148933,148937,148941,148947,148950,148963,148967,148970,148976,148979,148983,148986,148989,149034,149038,149054,149060,149067,149073,149083],[10,147978,147974],{"id":147979},"_1-python环境与第一个程序",[14,147981,147983],{"id":147982},"_11-什么是python","1.1 什么是Python",[19,147985,147986],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147988,147989],{},"理解 Python 时抓住三个关键词：",[1760,147991,147992,147995,147998],{},[1763,147993,147994],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1763,147996,147997],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1763,147999,148000,148001,2655,148004,2655,148007,2655,148010,2655,148012,170],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[50,148002,148003],{},"os",[50,148005,148006],{},"sys",[50,148008,148009],{},"json",[50,148011,60093],{},[50,148013,148014],{},"datetime",[19,148016,148017],{},"Python 程序的运行链路：",[130,148019,148022],{"className":148020,"code":148021,"language":645,"meta":135},[643],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[50,148023,148021],{"__ignoreMap":135},[14,148025,148027],{"id":148026},"_12-python解释器","1.2 Python解释器",[19,148029,148030],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[130,148032,148034],{"className":1830,"code":148033,"language":1832,"meta":135,"style":135},"python --version\npython3 --version\npython\npython3\n",[50,148035,148036,148042,148048,148053],{"__ignoreMap":135},[139,148037,148038,148040],{"class":141,"line":142},[139,148039,134],{"class":781},[139,148041,28553],{"class":153},[139,148043,148044,148046],{"class":141,"line":210},[139,148045,103106],{"class":781},[139,148047,28553],{"class":153},[139,148049,148050],{"class":141,"line":254},[139,148051,148052],{"class":781},"python\n",[139,148054,148055],{"class":141,"line":262},[139,148056,148057],{"class":781},"python3\n",[19,148059,148060],{},"进入交互模式后，可以直接输入表达式：",[130,148062,148064],{"className":132,"code":148063,"language":134,"meta":135,"style":135},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[50,148065,148066,148077,148082,148096],{"__ignoreMap":135},[139,148067,148068,148071,148073,148075],{"class":141,"line":142},[139,148069,148070],{"class":149},">>>",[139,148072,27381],{"class":153},[139,148074,47805],{"class":149},[139,148076,49961],{"class":153},[139,148078,148079],{"class":141,"line":210},[139,148080,148081],{"class":153},"3\n",[139,148083,148084,148086,148089,148091,148094],{"class":141,"line":254},[139,148085,148070],{"class":149},[139,148087,148088],{"class":153}," print",[139,148090,157],{"class":145},[139,148092,148093],{"class":160},"\"hello python\"",[139,148095,164],{"class":145},[139,148097,148098],{"class":141,"line":262},[139,148099,148100],{"class":145},"hello python\n",[19,148102,148103],{},"退出交互模式：",[130,148105,148107],{"className":132,"code":148106,"language":134,"meta":135,"style":135},"exit()\n",[50,148108,148109],{"__ignoreMap":135},[139,148110,148111,148114],{"class":141,"line":142},[139,148112,148113],{"class":153},"exit",[139,148115,4262],{"class":145},[19,148117,148118],{},"或使用快捷键：",[130,148120,148123],{"className":148121,"code":148122,"language":645,"meta":135},[643],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[50,148124,148122],{"__ignoreMap":135},[14,148126,148128],{"id":148127},"_13-安装python","1.3 安装Python",[1217,148130,148132],{"id":148131},"_131-windows安装","1.3.1 Windows安装",[1760,148134,148135,148142,148145,148151,148157],{},[1763,148136,148137,148138],{},"打开 Python 官网：",[2680,148139,148140],{"href":148140,"rel":148141},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26128],[1763,148143,148144],{},"下载 Windows Installer。",[1763,148146,148147,148148,170],{},"安装时勾选 ",[50,148149,148150],{},"Add Python to PATH",[1763,148152,148153,148154,170],{},"点击 ",[50,148155,148156],{},"Install Now",[1763,148158,148159],{},"安装完成后打开命令提示符验证：",[130,148161,148163],{"className":1830,"code":148162,"language":1832,"meta":135,"style":135},"python --version\npip --version\n",[50,148164,148165,148171],{"__ignoreMap":135},[139,148166,148167,148169],{"class":141,"line":142},[139,148168,134],{"class":781},[139,148170,28553],{"class":153},[139,148172,148173,148175],{"class":141,"line":210},[139,148174,1826],{"class":781},[139,148176,28553],{"class":153},[19,148178,148179,148180,148183],{},"如果提示 ",[50,148181,148182],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1217,148185,148187],{"id":148186},"_132-macos安装","1.3.2 macOS安装",[19,148189,148190],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[130,148192,148194],{"className":1830,"code":148193,"language":1832,"meta":135,"style":135},"brew install python\npython3 --version\npip3 --version\n",[50,148195,148196,148205,148211],{"__ignoreMap":135},[139,148197,148198,148201,148203],{"class":141,"line":142},[139,148199,148200],{"class":781},"brew",[139,148202,1841],{"class":160},[139,148204,126536],{"class":160},[139,148206,148207,148209],{"class":141,"line":210},[139,148208,103106],{"class":781},[139,148210,28553],{"class":153},[139,148212,148213,148215],{"class":141,"line":254},[139,148214,121918],{"class":781},[139,148216,28553],{"class":153},[19,148218,148219],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1217,148221,148223],{"id":148222},"_133-linux安装","1.3.3 Linux安装",[19,148225,148226],{},"Ubuntu\u002FDebian：",[130,148228,148230],{"className":1830,"code":148229,"language":1832,"meta":135,"style":135},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[50,148231,148232,148240,148255,148261],{"__ignoreMap":135},[139,148233,148234,148236,148238],{"class":141,"line":142},[139,148235,26840],{"class":781},[139,148237,119537],{"class":160},[139,148239,28502],{"class":160},[139,148241,148242,148244,148246,148248,148250,148252],{"class":141,"line":210},[139,148243,26840],{"class":781},[139,148245,119537],{"class":160},[139,148247,1841],{"class":160},[139,148249,106626],{"class":160},[139,148251,103025],{"class":160},[139,148253,148254],{"class":160}," python3-venv\n",[139,148256,148257,148259],{"class":141,"line":254},[139,148258,103106],{"class":781},[139,148260,28553],{"class":153},[139,148262,148263,148265],{"class":141,"line":262},[139,148264,121918],{"class":781},[139,148266,28553],{"class":153},[19,148268,148269],{},"Fedora：",[130,148271,148273],{"className":1830,"code":148272,"language":1832,"meta":135,"style":135},"sudo dnf install python3 python3-pip\n",[50,148274,148275],{"__ignoreMap":135},[139,148276,148277,148279,148281,148283,148285],{"class":141,"line":142},[139,148278,26840],{"class":781},[139,148280,28575],{"class":160},[139,148282,1841],{"class":160},[139,148284,106626],{"class":160},[139,148286,121983],{"class":160},[19,148288,148289,148290,148292],{},"Linux 上通常使用 ",[50,148291,103106],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148294,148296],{"id":148295},"_14-pip包管理器","1.4 pip包管理器",[19,148298,148299,148301],{},[50,148300,1826],{}," 用来安装第三方库。",[130,148303,148305],{"className":1830,"code":148304,"language":1832,"meta":135,"style":135},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[50,148306,148307,148315,148324,148332,148338],{"__ignoreMap":135},[139,148308,148309,148311,148313],{"class":141,"line":142},[139,148310,1826],{"class":781},[139,148312,1841],{"class":160},[139,148314,1844],{"class":160},[139,148316,148317,148319,148322],{"class":141,"line":210},[139,148318,1826],{"class":781},[139,148320,148321],{"class":160}," uninstall",[139,148323,1844],{"class":160},[139,148325,148326,148328,148330],{"class":141,"line":254},[139,148327,1826],{"class":781},[139,148329,119794],{"class":160},[139,148331,1844],{"class":160},[139,148333,148334,148336],{"class":141,"line":262},[139,148335,1826],{"class":781},[139,148337,1899],{"class":160},[139,148339,148340,148342],{"class":141,"line":313},[139,148341,1826],{"class":781},[139,148343,148344],{"class":160}," freeze\n",[19,148346,148347],{},"国内网络较慢时可以临时使用镜像：",[130,148349,148351],{"className":1830,"code":148350,"language":1832,"meta":135,"style":135},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[50,148352,148353],{"__ignoreMap":135},[139,148354,148355,148357,148359,148362,148364],{"class":141,"line":142},[139,148356,1826],{"class":781},[139,148358,1841],{"class":160},[139,148360,148361],{"class":160}," requests",[139,148363,28690],{"class":153},[139,148365,121946],{"class":160},[19,148367,148368],{},"常见第三方库：",[26,148370,148371,148380],{},[29,148372,148373],{},[32,148374,148375,148378],{},[35,148376,148377],{},"库",[35,148379,104920],{},[42,148381,148382,148390,148397,148405,148413,148421,148429],{},[32,148383,148384,148387],{},[47,148385,148386],{},"requests",[47,148388,148389],{},"网络请求",[32,148391,148392,148394],{},[47,148393,102853],{},[47,148395,148396],{},"数值计算",[32,148398,148399,148402],{},[47,148400,148401],{},"pandas",[47,148403,148404],{},"表格数据处理",[32,148406,148407,148410],{},[47,148408,148409],{},"matplotlib",[47,148411,148412],{},"绘图",[32,148414,148415,148418],{},[47,148416,148417],{},"pyecharts",[47,148419,148420],{},"ECharts 图表",[32,148422,148423,148426],{},[47,148424,148425],{},"flask",[47,148427,148428],{},"Web 后端",[32,148430,148431,148434],{},[47,148432,148433],{},"pytest",[47,148435,148436],{},"自动化测试",[14,148438,148440],{"id":148439},"_15-虚拟环境","1.5 虚拟环境",[19,148442,148443,148444,148447],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[50,148445,148446],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148449,148450],{},"创建虚拟环境：",[130,148452,148454],{"className":1830,"code":148453,"language":1832,"meta":135,"style":135},"python -m venv .venv\n",[50,148455,148456],{"__ignoreMap":135},[139,148457,148458,148460,148462,148464],{"class":141,"line":142},[139,148459,134],{"class":781},[139,148461,103109],{"class":153},[139,148463,103112],{"class":160},[139,148465,103115],{"class":160},[19,148467,148468],{},"Windows 激活：",[130,148470,148472],{"className":1830,"code":148471,"language":1832,"meta":135,"style":135},".venv\\Scripts\\activate\n",[50,148473,148474],{"__ignoreMap":135},[139,148475,148476],{"class":141,"line":142},[139,148477,148471],{"class":781},[19,148479,148480],{},"macOS\u002FLinux 激活：",[130,148482,148484],{"className":1830,"code":148483,"language":1832,"meta":135,"style":135},"source .venv\u002Fbin\u002Factivate\n",[50,148485,148486],{"__ignoreMap":135},[139,148487,148488,148490],{"class":141,"line":142},[139,148489,103120],{"class":153},[139,148491,103123],{"class":160},[19,148493,148494],{},"退出虚拟环境：",[130,148496,148498],{"className":1830,"code":148497,"language":1832,"meta":135,"style":135},"deactivate\n",[50,148499,148500],{"__ignoreMap":135},[139,148501,148502],{"class":141,"line":142},[139,148503,148497],{"class":781},[19,148505,148506],{},"保存依赖：",[130,148508,148509],{"className":1830,"code":1905,"language":1832,"meta":135,"style":135},[50,148510,148511],{"__ignoreMap":135},[139,148512,148513,148515,148517,148519],{"class":141,"line":142},[139,148514,1826],{"class":781},[139,148516,1914],{"class":160},[139,148518,1917],{"class":149},[139,148520,1920],{"class":160},[19,148522,148523],{},"安装依赖：",[130,148525,148526],{"className":1830,"code":1926,"language":1832,"meta":135,"style":135},[50,148527,148528],{"__ignoreMap":135},[139,148529,148530,148532,148534,148536],{"class":141,"line":142},[139,148531,1826],{"class":781},[139,148533,1841],{"class":160},[139,148535,1937],{"class":153},[139,148537,1920],{"class":160},[14,148539,148541],{"id":148540},"_16-开发工具","1.6 开发工具",[1217,148543,148545],{"id":148544},"_161-pycharm","1.6.1 PyCharm",[19,148547,148548],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148550,124280],{},[1760,148552,148553,148556,148559,148564,148567],{},[1763,148554,148555],{},"New Project：创建项目。",[1763,148557,148558],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1763,148560,148561,148562,1115],{},"New Python File：创建 ",[50,148563,1114],{},[1763,148565,148566],{},"Run：运行当前文件。",[1763,148568,148569],{},"Debug：断点调试。",[1217,148571,148573],{"id":148572},"_162-vs-code","1.6.2 VS Code",[19,148575,148576],{},"VS Code 轻量，适合后续多语言开发。",[19,148578,148579],{},"建议安装插件：",[1760,148581,148582,148585,148588],{},[1763,148583,148584],{},"Python。",[1763,148586,148587],{},"Pylance。",[1763,148589,148590],{},"Jupyter。",[19,148592,148593],{},"选择解释器：",[130,148595,148598],{"className":148596,"code":148597,"language":645,"meta":135},[643],"Ctrl + Shift + P -> Python: Select Interpreter\n",[50,148599,148597],{"__ignoreMap":135},[14,148601,148603],{"id":148602},"_17-第一个python程序","1.7 第一个Python程序",[19,148605,148606,148607,1122],{},"创建文件 ",[50,148608,148609],{},"hello.py",[130,148611,148613],{"className":132,"code":148612,"language":134,"meta":135,"style":135},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[50,148614,148615,148626],{"__ignoreMap":135},[139,148616,148617,148619,148621,148624],{"class":141,"line":142},[139,148618,213],{"class":153},[139,148620,157],{"class":145},[139,148622,148623],{"class":160},"\"Hello World\"",[139,148625,164],{"class":145},[139,148627,148628,148630,148632,148635],{"class":141,"line":210},[139,148629,213],{"class":153},[139,148631,157],{"class":145},[139,148633,148634],{"class":160},"\"你好，Python\"",[139,148636,164],{"class":145},[19,148638,148639],{},"在终端运行：",[130,148641,148643],{"className":1830,"code":148642,"language":1832,"meta":135,"style":135},"python hello.py\n",[50,148644,148645],{"__ignoreMap":135},[139,148646,148647,148649],{"class":141,"line":142},[139,148648,134],{"class":781},[139,148650,148651],{"class":160}," hello.py\n",[19,148653,148654],{},"或：",[130,148656,148658],{"className":1830,"code":148657,"language":1832,"meta":135,"style":135},"python3 hello.py\n",[50,148659,148660],{"__ignoreMap":135},[139,148661,148662,148664],{"class":141,"line":142},[139,148663,103106],{"class":781},[139,148665,148651],{"class":160},[19,148667,639],{},[130,148669,148672],{"className":148670,"code":148671,"language":645,"meta":135},[643],"Hello World\n你好，Python\n",[50,148673,148671],{"__ignoreMap":135},[14,148675,148677],{"id":148676},"_18-print函数","1.8 print函数",[19,148679,148680,148683],{},[50,148681,148682],{},"print()"," 用来输出内容。",[130,148685,148687],{"className":132,"code":148686,"language":134,"meta":135,"style":135},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[50,148688,148689,148699,148709,148719],{"__ignoreMap":135},[139,148690,148691,148693,148695,148697],{"class":141,"line":142},[139,148692,213],{"class":153},[139,148694,157],{"class":145},[139,148696,8118],{"class":160},[139,148698,164],{"class":145},[139,148700,148701,148703,148705,148707],{"class":141,"line":210},[139,148702,213],{"class":153},[139,148704,157],{"class":145},[139,148706,1017],{"class":153},[139,148708,164],{"class":145},[139,148710,148711,148713,148715,148717],{"class":141,"line":254},[139,148712,213],{"class":153},[139,148714,157],{"class":145},[139,148716,2504],{"class":153},[139,148718,164],{"class":145},[139,148720,148721,148723,148725,148728,148730,148732],{"class":141,"line":262},[139,148722,213],{"class":153},[139,148724,157],{"class":145},[139,148726,148727],{"class":160},"\"年龄:\"",[139,148729,413],{"class":145},[139,148731,3085],{"class":153},[139,148733,164],{"class":145},[19,148735,148736],{},"多个内容用逗号隔开，默认中间加空格：",[130,148738,148740],{"className":132,"code":148739,"language":134,"meta":135,"style":135},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[50,148741,148742,148752,148761],{"__ignoreMap":135},[139,148743,148744,148747,148749],{"class":141,"line":142},[139,148745,148746],{"class":145},"name ",[139,148748,150],{"class":149},[139,148750,148751],{"class":160}," \"张三\"\n",[139,148753,148754,148756,148758],{"class":141,"line":210},[139,148755,190],{"class":145},[139,148757,150],{"class":149},[139,148759,148760],{"class":153}," 18\n",[139,148762,148763,148765,148767,148770,148773,148775],{"class":141,"line":254},[139,148764,213],{"class":153},[139,148766,157],{"class":145},[139,148768,148769],{"class":160},"\"姓名:\"",[139,148771,148772],{"class":145},", name, ",[139,148774,148727],{"class":160},[139,148776,148777],{"class":145},", age)\n",[19,148779,148780],{},"修改分隔符：",[130,148782,148784],{"className":132,"code":148783,"language":134,"meta":135,"style":135},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[50,148785,148786],{"__ignoreMap":135},[139,148787,148788,148790,148792,148795,148797,148799,148801,148803,148805,148808,148810,148812],{"class":141,"line":142},[139,148789,213],{"class":153},[139,148791,157],{"class":145},[139,148793,148794],{"class":160},"\"2024\"",[139,148796,413],{"class":145},[139,148798,56550],{"class":160},[139,148800,413],{"class":145},[139,148802,56550],{"class":160},[139,148804,413],{"class":145},[139,148806,148807],{"class":2111},"sep",[139,148809,150],{"class":149},[139,148811,34730],{"class":160},[139,148813,164],{"class":145},[19,148815,148816],{},"修改结尾符：",[130,148818,148820],{"className":132,"code":148819,"language":134,"meta":135,"style":135},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[50,148821,148822,148840],{"__ignoreMap":135},[139,148823,148824,148826,148828,148830,148832,148834,148836,148838],{"class":141,"line":142},[139,148825,213],{"class":153},[139,148827,157],{"class":145},[139,148829,8118],{"class":160},[139,148831,413],{"class":145},[139,148833,48039],{"class":2111},[139,148835,150],{"class":149},[139,148837,6637],{"class":160},[139,148839,164],{"class":145},[139,148841,148842,148844,148846,148849],{"class":141,"line":210},[139,148843,213],{"class":153},[139,148845,157],{"class":145},[139,148847,148848],{"class":160},"\"python\"",[139,148850,164],{"class":145},[14,148852,148854],{"id":148853},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148856,148857],{},"交互运行适合临时验证：",[130,148859,148861],{"className":132,"code":148860,"language":134,"meta":135,"style":135},">>> 10 * 3\n30\n",[50,148862,148863,148873],{"__ignoreMap":135},[139,148864,148865,148867,148869,148871],{"class":141,"line":142},[139,148866,148070],{"class":149},[139,148868,4323],{"class":153},[139,148870,8792],{"class":149},[139,148872,122254],{"class":153},[139,148874,148875],{"class":141,"line":210},[139,148876,148877],{"class":153},"30\n",[19,148879,148880],{},"脚本运行适合保存程序：",[130,148882,148884],{"className":132,"code":148883,"language":134,"meta":135,"style":135},"price = 8\ncount = 5\nprint(price * count)\n",[50,148885,148886,148896,148905],{"__ignoreMap":135},[139,148887,148888,148891,148893],{"class":141,"line":142},[139,148889,148890],{"class":145},"price ",[139,148892,150],{"class":149},[139,148894,148895],{"class":153}," 8\n",[139,148897,148898,148901,148903],{"class":141,"line":210},[139,148899,148900],{"class":145},"count ",[139,148902,150],{"class":149},[139,148904,56661],{"class":153},[139,148906,148907,148909,148912,148914],{"class":141,"line":254},[139,148908,213],{"class":153},[139,148910,148911],{"class":145},"(price ",[139,148913,2892],{"class":149},[139,148915,148916],{"class":145}," count)\n",[19,148918,148919],{},"实际学习中推荐：",[1760,148921,148922,148925,148930],{},[1763,148923,148924],{},"临时试一个语法，用交互模式。",[1763,148926,148927,148928,1115],{},"写完整练习，用 ",[50,148929,1114],{},[1763,148931,148932],{},"写项目，用独立目录和虚拟环境。",[14,148934,148936],{"id":148935},"_110-常见错误","1.10 常见错误",[1217,148938,148940],{"id":148939},"_1101-命令找不到","1.10.1 命令找不到",[130,148942,148945],{"className":148943,"code":148944,"language":645,"meta":135},[643],"python: command not found\n",[50,148946,148944],{"__ignoreMap":135},[19,148948,148949],{},"原因：",[1760,148951,148952,148955,148958],{},[1763,148953,148954],{},"没安装 Python。",[1763,148956,148957],{},"PATH 没配置。",[1763,148959,148960,148961,170],{},"Linux\u002FmacOS 应该使用 ",[50,148962,103106],{},[1217,148964,148966],{"id":148965},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148968,148969],{},"不要把文件命名为：",[130,148971,148974],{"className":148972,"code":148973,"language":645,"meta":135},[643],"random.py\njson.py\ntime.py\nrequests.py\n",[50,148975,148973],{"__ignoreMap":135},[19,148977,148978],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1217,148980,148982],{"id":148981},"_1103-中文乱码","1.10.3 中文乱码",[19,148984,148985],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148987,148988],{},"如果读写文件出现乱码，要明确指定编码：",[130,148990,148992],{"className":132,"code":148991,"language":134,"meta":135,"style":135},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[50,148993,148994,149024],{"__ignoreMap":135},[139,148995,148996,148998,149000,149002,149005,149007,149009,149011,149013,149015,149017,149019,149021],{"class":141,"line":142},[139,148997,110056],{"class":149},[139,148999,2100],{"class":153},[139,149001,157],{"class":145},[139,149003,149004],{"class":160},"\"data.txt\"",[139,149006,413],{"class":145},[139,149008,2106],{"class":160},[139,149010,413],{"class":145},[139,149012,2112],{"class":2111},[139,149014,150],{"class":149},[139,149016,2117],{"class":160},[139,149018,2120],{"class":145},[139,149020,1035],{"class":149},[139,149022,149023],{"class":145}," f:\n",[139,149025,149026,149029,149031],{"class":141,"line":210},[139,149027,149028],{"class":145},"    content ",[139,149030,150],{"class":149},[139,149032,149033],{"class":145}," f.read()\n",[14,149035,149037],{"id":149036},"_111-本章练习","1.11 本章练习",[1760,149039,149040,149043,149049],{},[1763,149041,149042],{},"安装 Python，并在终端输出版本号。",[1763,149044,149045,149046,149048],{},"新建 ",[50,149047,148609],{},"，输出自己的姓名、年龄、学习目标。",[1763,149050,106589,149051,149053],{},[50,149052,148682],{}," 输出下面格式：",[130,149055,149058],{"className":149056,"code":149057,"language":645,"meta":135},[643],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[50,149059,149057],{"__ignoreMap":135},[1760,149061,149062],{"start":262},[1763,149063,106589,149064,149066],{},[50,149065,148807],{}," 输出日期：",[130,149068,149071],{"className":149069,"code":149070,"language":645,"meta":135},[643],"2024-10-10\n",[50,149072,149070],{"__ignoreMap":135},[1760,149074,149075],{"start":313},[1763,149076,106589,149077,149079,149080,149082],{},[50,149078,48039],{}," 让两次 ",[50,149081,148682],{}," 输出在同一行。",[2348,149084,149085],{},"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":135,"searchDepth":210,"depth":210,"links":149087},[149088,149089,149090,149095,149096,149097,149101,149102,149103,149104,149109],{"id":147982,"depth":210,"text":147983},{"id":148026,"depth":210,"text":148027},{"id":148127,"depth":210,"text":148128,"children":149091},[149092,149093,149094],{"id":148131,"depth":254,"text":148132},{"id":148186,"depth":254,"text":148187},{"id":148222,"depth":254,"text":148223},{"id":148295,"depth":210,"text":148296},{"id":148439,"depth":210,"text":148440},{"id":148540,"depth":210,"text":148541,"children":149098},[149099,149100],{"id":148544,"depth":254,"text":148545},{"id":148572,"depth":254,"text":148573},{"id":148602,"depth":210,"text":148603},{"id":148676,"depth":210,"text":148677},{"id":148853,"depth":210,"text":148854},{"id":148935,"depth":210,"text":148936,"children":149105},[149106,149107,149108],{"id":148939,"depth":254,"text":148940},{"id":148965,"depth":254,"text":148966},{"id":148981,"depth":254,"text":148982},{"id":149036,"depth":210,"text":149037},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147974,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149116,"title":149117,"body":149118,"description":2384,"extension":2385,"meta":151518,"navigation":842,"path":151519,"seo":151520,"stem":151521,"__hash__":151522},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149119,"toc":151503},[149120,149123,149127,149130,149133,149150,149153,149195,149198,149202,149205,149208,149245,149248,149282,149285,149375,149379,149393,149396,149423,149426,149430,149533,149540,149543,149560,149564,149571,149760,149763,149836,149840,149843,149927,149930,149962,149966,150170,150173,150177,150183,150285,150288,150542,150546,150549,150552,150566,150568,150754,150758,151120,151126,151130,151133,151257,151260,151439,151442,151446,151479,151483,151500],[10,149121,149117],{"id":149122},"_10-json与pyecharts折线图",[14,149124,149126],{"id":149125},"_101-数据可视化","10.1 数据可视化",[19,149128,149129],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149131,149132],{},"常见图表：",[1760,149134,149135,149138,149141,149144,149147],{},[1763,149136,149137],{},"折线图：看趋势。",[1763,149139,149140],{},"柱状图：看分类对比。",[1763,149142,149143],{},"饼图：看占比。",[1763,149145,149146],{},"地图：看地域分布。",[1763,149148,149149],{},"散点图：看两个变量之间的关系。",[19,149151,149152],{},"Python 可视化常用库：",[26,149154,149155,149163],{},[29,149156,149157],{},[32,149158,149159,149161],{},[35,149160,148377],{},[35,149162,26007],{},[42,149164,149165,149172,149180,149187],{},[32,149166,149167,149169],{},[47,149168,148409],{},[47,149170,149171],{},"基础、经典、可定制",[32,149173,149174,149177],{},[47,149175,149176],{},"seaborn",[47,149178,149179],{},"统计图表更美观",[32,149181,149182,149184],{},[47,149183,148417],{},[47,149185,149186],{},"生成交互式网页图表",[32,149188,149189,149192],{},[47,149190,149191],{},"plotly",[47,149193,149194],{},"交互图表能力强",[19,149196,149197],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149199,149201],{"id":149200},"_102-json回顾","10.2 JSON回顾",[19,149203,149204],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149206,149207],{},"Python 字典：",[130,149209,149211],{"className":132,"code":149210,"language":134,"meta":135,"style":135},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[50,149212,149213,149221,149232,149241],{"__ignoreMap":135},[139,149214,149215,149217,149219],{"class":141,"line":142},[139,149216,103883],{"class":145},[139,149218,150],{"class":149},[139,149220,17840],{"class":145},[139,149222,149223,149226,149228,149230],{"class":141,"line":210},[139,149224,149225],{"class":160},"    \"name\"",[139,149227,2265],{"class":145},[139,149229,71499],{"class":160},[139,149231,33715],{"class":145},[139,149233,149234,149237,149239],{"class":141,"line":254},[139,149235,149236],{"class":160},"    \"value\"",[139,149238,2265],{"class":145},[139,149240,99685],{"class":153},[139,149242,149243],{"class":141,"line":262},[139,149244,3862],{"class":145},[19,149246,149247],{},"JSON 字符串：",[130,149249,149252],{"className":149250,"code":149251,"language":148009,"meta":135,"style":135},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[50,149253,149254,149258,149269,149278],{"__ignoreMap":135},[139,149255,149256],{"class":141,"line":142},[139,149257,3843],{"class":145},[139,149259,149260,149263,149265,149267],{"class":141,"line":210},[139,149261,149262],{"class":153},"  \"name\"",[139,149264,2265],{"class":145},[139,149266,71499],{"class":160},[139,149268,33715],{"class":145},[139,149270,149271,149274,149276],{"class":141,"line":254},[139,149272,149273],{"class":153},"  \"value\"",[139,149275,2265],{"class":145},[139,149277,99685],{"class":153},[139,149279,149280],{"class":141,"line":262},[139,149281,3862],{"class":145},[19,149283,149284],{},"Python 与 JSON 的转换：",[130,149286,149288],{"className":132,"code":149287,"language":134,"meta":135,"style":135},"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",[50,149289,149290,149296,149300,149325,149329,149347,149354,149358,149368],{"__ignoreMap":135},[139,149291,149292,149294],{"class":141,"line":142},[139,149293,1064],{"class":149},[139,149295,2030],{"class":145},[139,149297,149298],{"class":141,"line":210},[139,149299,843],{"emptyLinePlaceholder":842},[139,149301,149302,149304,149306,149308,149310,149312,149314,149316,149319,149321,149323],{"class":141,"line":254},[139,149303,103883],{"class":145},[139,149305,150],{"class":149},[139,149307,6726],{"class":145},[139,149309,2262],{"class":160},[139,149311,2265],{"class":145},[139,149313,71499],{"class":160},[139,149315,413],{"class":145},[139,149317,149318],{"class":160},"\"value\"",[139,149320,2265],{"class":145},[139,149322,1017],{"class":153},[139,149324,3862],{"class":145},[139,149326,149327],{"class":141,"line":262},[139,149328,843],{"emptyLinePlaceholder":842},[139,149330,149331,149334,149336,149339,149341,149343,149345],{"class":141,"line":313},[139,149332,149333],{"class":145},"json_text ",[139,149335,150],{"class":149},[139,149337,149338],{"class":145}," json.dumps(data, ",[139,149340,2198],{"class":2111},[139,149342,150],{"class":149},[139,149344,2203],{"class":153},[139,149346,164],{"class":145},[139,149348,149349,149351],{"class":141,"line":462},[139,149350,213],{"class":153},[139,149352,149353],{"class":145},"(json_text)\n",[139,149355,149356],{"class":141,"line":474},[139,149357,843],{"emptyLinePlaceholder":842},[139,149359,149360,149363,149365],{"class":141,"line":484},[139,149361,149362],{"class":145},"new_data ",[139,149364,150],{"class":149},[139,149366,149367],{"class":145}," json.loads(json_text)\n",[139,149369,149370,149372],{"class":141,"line":989},[139,149371,213],{"class":153},[139,149373,149374],{"class":145},"(new_data)\n",[14,149376,149378],{"id":149377},"_103-安装pyecharts","10.3 安装pyecharts",[130,149380,149382],{"className":1830,"code":149381,"language":1832,"meta":135,"style":135},"pip install pyecharts\n",[50,149383,149384],{"__ignoreMap":135},[139,149385,149386,149388,149390],{"class":141,"line":142},[139,149387,1826],{"class":781},[139,149389,1841],{"class":160},[139,149391,149392],{"class":160}," pyecharts\n",[19,149394,149395],{},"验证：",[130,149397,149399],{"className":132,"code":149398,"language":134,"meta":135,"style":135},"import pyecharts\n\nprint(pyecharts.__version__)\n",[50,149400,149401,149407,149411],{"__ignoreMap":135},[139,149402,149403,149405],{"class":141,"line":142},[139,149404,1064],{"class":149},[139,149406,149392],{"class":145},[139,149408,149409],{"class":141,"line":210},[139,149410,843],{"emptyLinePlaceholder":842},[139,149412,149413,149415,149418,149421],{"class":141,"line":254},[139,149414,213],{"class":153},[139,149416,149417],{"class":145},"(pyecharts.",[139,149419,149420],{"class":153},"__version__",[139,149422,164],{"class":145},[19,149424,149425],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149427,149429],{"id":149428},"_104-第一个折线图","10.4 第一个折线图",[130,149431,149433],{"className":132,"code":149432,"language":134,"meta":135,"style":135},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[50,149434,149435,149447,149451,149461,149491,149523],{"__ignoreMap":135},[139,149436,149437,149439,149442,149444],{"class":141,"line":142},[139,149438,1265],{"class":149},[139,149440,149441],{"class":145}," pyecharts.charts ",[139,149443,1064],{"class":149},[139,149445,149446],{"class":145}," Line\n",[139,149448,149449],{"class":141,"line":210},[139,149450,843],{"emptyLinePlaceholder":842},[139,149452,149453,149456,149458],{"class":141,"line":254},[139,149454,149455],{"class":145},"line ",[139,149457,150],{"class":149},[139,149459,149460],{"class":145}," Line()\n",[139,149462,149463,149466,149469,149471,149474,149476,149479,149481,149484,149486,149489],{"class":141,"line":262},[139,149464,149465],{"class":145},"line.add_xaxis([",[139,149467,149468],{"class":160},"\"周一\"",[139,149470,413],{"class":145},[139,149472,149473],{"class":160},"\"周二\"",[139,149475,413],{"class":145},[139,149477,149478],{"class":160},"\"周三\"",[139,149480,413],{"class":145},[139,149482,149483],{"class":160},"\"周四\"",[139,149485,413],{"class":145},[139,149487,149488],{"class":160},"\"周五\"",[139,149490,6935],{"class":145},[139,149492,149493,149496,149499,149501,149503,149505,149507,149509,149511,149513,149516,149518,149521],{"class":141,"line":313},[139,149494,149495],{"class":145},"line.add_yaxis(",[139,149497,149498],{"class":160},"\"销售额\"",[139,149500,79747],{"class":145},[139,149502,1017],{"class":153},[139,149504,413],{"class":145},[139,149506,3252],{"class":153},[139,149508,413],{"class":145},[139,149510,3297],{"class":153},[139,149512,413],{"class":145},[139,149514,149515],{"class":153},"150",[139,149517,413],{"class":145},[139,149519,149520],{"class":153},"180",[139,149522,6935],{"class":145},[139,149524,149525,149528,149531],{"class":141,"line":462},[139,149526,149527],{"class":145},"line.render(",[139,149529,149530],{"class":160},"\"line.html\"",[139,149532,164],{"class":145},[19,149534,149535,149536,149539],{},"运行后会生成 ",[50,149537,149538],{},"line.html","，用浏览器打开即可看到图表。",[19,149541,149542],{},"核心步骤：",[1760,149544,149545,149548,149551,149554,149557],{},[1763,149546,149547],{},"导入图表类。",[1763,149549,149550],{},"创建图表对象。",[1763,149552,149553],{},"添加 x 轴数据。",[1763,149555,149556],{},"添加 y 轴数据。",[1763,149558,149559],{},"渲染为 HTML。",[14,149561,149563],{"id":149562},"_105-全局配置","10.5 全局配置",[19,149565,149566,149567,149570],{},"常用配置在 ",[50,149568,149569],{},"pyecharts.options"," 中。",[130,149572,149574],{"className":132,"code":149573,"language":134,"meta":135,"style":135},"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",[50,149575,149576,149593,149603,149607,149615,149639,149667,149672,149691,149710,149728,149748,149752],{"__ignoreMap":135},[139,149577,149578,149580,149583,149585,149588,149590],{"class":141,"line":142},[139,149579,1265],{"class":149},[139,149581,149582],{"class":145}," pyecharts ",[139,149584,1064],{"class":149},[139,149586,149587],{"class":145}," options ",[139,149589,1035],{"class":149},[139,149591,149592],{"class":145}," opts\n",[139,149594,149595,149597,149599,149601],{"class":141,"line":210},[139,149596,1265],{"class":149},[139,149598,149441],{"class":145},[139,149600,1064],{"class":149},[139,149602,149446],{"class":145},[139,149604,149605],{"class":141,"line":254},[139,149606,843],{"emptyLinePlaceholder":842},[139,149608,149609,149611,149613],{"class":141,"line":262},[139,149610,149455],{"class":145},[139,149612,150],{"class":149},[139,149614,149460],{"class":145},[139,149616,149617,149619,149621,149623,149625,149627,149629,149631,149633,149635,149637],{"class":141,"line":313},[139,149618,149465],{"class":145},[139,149620,149468],{"class":160},[139,149622,413],{"class":145},[139,149624,149473],{"class":160},[139,149626,413],{"class":145},[139,149628,149478],{"class":160},[139,149630,413],{"class":145},[139,149632,149483],{"class":160},[139,149634,413],{"class":145},[139,149636,149488],{"class":160},[139,149638,6935],{"class":145},[139,149640,149641,149643,149645,149647,149649,149651,149653,149655,149657,149659,149661,149663,149665],{"class":141,"line":462},[139,149642,149495],{"class":145},[139,149644,149498],{"class":160},[139,149646,79747],{"class":145},[139,149648,1017],{"class":153},[139,149650,413],{"class":145},[139,149652,3252],{"class":153},[139,149654,413],{"class":145},[139,149656,3297],{"class":153},[139,149658,413],{"class":145},[139,149660,149515],{"class":153},[139,149662,413],{"class":145},[139,149664,149520],{"class":153},[139,149666,6935],{"class":145},[139,149668,149669],{"class":141,"line":474},[139,149670,149671],{"class":145},"line.set_global_opts(\n",[139,149673,149674,149677,149679,149682,149684,149686,149689],{"class":141,"line":484},[139,149675,149676],{"class":2111},"    title_opts",[139,149678,150],{"class":149},[139,149680,149681],{"class":145},"opts.TitleOpts(",[139,149683,53645],{"class":2111},[139,149685,150],{"class":149},[139,149687,149688],{"class":160},"\"一周销售额\"",[139,149690,40290],{"class":145},[139,149692,149693,149696,149698,149701,149703,149705,149708],{"class":141,"line":989},[139,149694,149695],{"class":2111},"    xaxis_opts",[139,149697,150],{"class":149},[139,149699,149700],{"class":145},"opts.AxisOpts(",[139,149702,1676],{"class":2111},[139,149704,150],{"class":149},[139,149706,149707],{"class":160},"\"日期\"",[139,149709,40290],{"class":145},[139,149711,149712,149715,149717,149719,149721,149723,149726],{"class":141,"line":994},[139,149713,149714],{"class":2111},"    yaxis_opts",[139,149716,150],{"class":149},[139,149718,149700],{"class":145},[139,149720,1676],{"class":2111},[139,149722,150],{"class":149},[139,149724,149725],{"class":160},"\"金额\"",[139,149727,40290],{"class":145},[139,149729,149730,149733,149735,149738,149741,149743,149746],{"class":141,"line":999},[139,149731,149732],{"class":2111},"    tooltip_opts",[139,149734,150],{"class":149},[139,149736,149737],{"class":145},"opts.TooltipOpts(",[139,149739,149740],{"class":2111},"trigger",[139,149742,150],{"class":149},[139,149744,149745],{"class":160},"\"axis\"",[139,149747,40290],{"class":145},[139,149749,149750],{"class":141,"line":1006},[139,149751,164],{"class":145},[139,149753,149754,149756,149758],{"class":141,"line":1027},[139,149755,149527],{"class":145},[139,149757,149530],{"class":160},[139,149759,164],{"class":145},[19,149761,149762],{},"常见全局配置：",[26,149764,149765,149774],{},[29,149766,149767],{},[32,149768,149769,149772],{},[35,149770,149771],{},"配置",[35,149773,104920],{},[42,149775,149776,149786,149796,149806,149816,149826],{},[32,149777,149778,149783],{},[47,149779,149780],{},[50,149781,149782],{},"TitleOpts",[47,149784,149785],{},"标题",[32,149787,149788,149793],{},[47,149789,149790],{},[50,149791,149792],{},"LegendOpts",[47,149794,149795],{},"图例",[32,149797,149798,149803],{},[47,149799,149800],{},[50,149801,149802],{},"TooltipOpts",[47,149804,149805],{},"提示框",[32,149807,149808,149813],{},[47,149809,149810],{},[50,149811,149812],{},"AxisOpts",[47,149814,149815],{},"坐标轴",[32,149817,149818,149823],{},[47,149819,149820],{},[50,149821,149822],{},"VisualMapOpts",[47,149824,149825],{},"视觉映射",[32,149827,149828,149833],{},[47,149829,149830],{},[50,149831,149832],{},"DataZoomOpts",[47,149834,149835],{},"区域缩放",[14,149837,149839],{"id":149838},"_106-系列配置","10.6 系列配置",[19,149841,149842],{},"系列配置作用于某一组数据。",[130,149844,149846],{"className":132,"code":149845,"language":134,"meta":135,"style":135},"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",[50,149847,149848,149853,149864,149893,149904,149923],{"__ignoreMap":135},[139,149849,149850],{"class":141,"line":142},[139,149851,149852],{"class":145},"line.add_yaxis(\n",[139,149854,149855,149858,149860,149862],{"class":141,"line":210},[139,149856,149857],{"class":2111},"    series_name",[139,149859,150],{"class":149},[139,149861,149498],{"class":160},[139,149863,33715],{"class":145},[139,149865,149866,149869,149871,149873,149875,149877,149879,149881,149883,149885,149887,149889,149891],{"class":141,"line":254},[139,149867,149868],{"class":2111},"    y_axis",[139,149870,150],{"class":149},[139,149872,3325],{"class":145},[139,149874,1017],{"class":153},[139,149876,413],{"class":145},[139,149878,3252],{"class":153},[139,149880,413],{"class":145},[139,149882,3297],{"class":153},[139,149884,413],{"class":145},[139,149886,149515],{"class":153},[139,149888,413],{"class":145},[139,149890,149520],{"class":153},[139,149892,90064],{"class":145},[139,149894,149895,149898,149900,149902],{"class":141,"line":262},[139,149896,149897],{"class":2111},"    is_smooth",[139,149899,150],{"class":149},[139,149901,33725],{"class":153},[139,149903,33715],{"class":145},[139,149905,149906,149909,149911,149914,149917,149919,149921],{"class":141,"line":313},[139,149907,149908],{"class":2111},"    label_opts",[139,149910,150],{"class":149},[139,149912,149913],{"class":145},"opts.LabelOpts(",[139,149915,149916],{"class":2111},"is_show",[139,149918,150],{"class":149},[139,149920,33725],{"class":153},[139,149922,40290],{"class":145},[139,149924,149925],{"class":141,"line":462},[139,149926,164],{"class":145},[19,149928,149929],{},"常用参数：",[1760,149931,149932,149938,149944,149950,149956],{},[1763,149933,149934,149937],{},[50,149935,149936],{},"series_name","：系列名称。",[1763,149939,149940,149943],{},[50,149941,149942],{},"y_axis","：y 轴数据。",[1763,149945,149946,149949],{},[50,149947,149948],{},"is_smooth","：是否平滑曲线。",[1763,149951,149952,149955],{},[50,149953,149954],{},"label_opts","：标签配置。",[1763,149957,149958,149961],{},[50,149959,149960],{},"symbol_size","：标记点大小。",[14,149963,149965],{"id":149964},"_107-多条折线","10.7 多条折线",[130,149967,149969],{"className":132,"code":149968,"language":134,"meta":135,"style":135},"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",[50,149970,149971,149985,149995,149999,150028,150032,150040,150045,150083,150120,150124,150141,150157,150161],{"__ignoreMap":135},[139,149972,149973,149975,149977,149979,149981,149983],{"class":141,"line":142},[139,149974,1265],{"class":149},[139,149976,149582],{"class":145},[139,149978,1064],{"class":149},[139,149980,149587],{"class":145},[139,149982,1035],{"class":149},[139,149984,149592],{"class":145},[139,149986,149987,149989,149991,149993],{"class":141,"line":210},[139,149988,1265],{"class":149},[139,149990,149441],{"class":145},[139,149992,1064],{"class":149},[139,149994,149446],{"class":145},[139,149996,149997],{"class":141,"line":254},[139,149998,843],{"emptyLinePlaceholder":842},[139,150000,150001,150004,150006,150008,150010,150012,150014,150016,150018,150020,150022,150024,150026],{"class":141,"line":262},[139,150002,150003],{"class":145},"dates ",[139,150005,150],{"class":149},[139,150007,407],{"class":145},[139,150009,149468],{"class":160},[139,150011,413],{"class":145},[139,150013,149473],{"class":160},[139,150015,413],{"class":145},[139,150017,149478],{"class":160},[139,150019,413],{"class":145},[139,150021,149483],{"class":160},[139,150023,413],{"class":145},[139,150025,149488],{"class":160},[139,150027,424],{"class":145},[139,150029,150030],{"class":141,"line":313},[139,150031,843],{"emptyLinePlaceholder":842},[139,150033,150034,150036,150038],{"class":141,"line":462},[139,150035,149455],{"class":145},[139,150037,150],{"class":149},[139,150039,149460],{"class":145},[139,150041,150042],{"class":141,"line":474},[139,150043,150044],{"class":145},"line.add_xaxis(dates)\n",[139,150046,150047,150049,150052,150054,150056,150058,150061,150063,150065,150067,150069,150071,150073,150075,150077,150079,150081],{"class":141,"line":484},[139,150048,149495],{"class":145},[139,150050,150051],{"class":160},"\"线上销售\"",[139,150053,79747],{"class":145},[139,150055,1017],{"class":153},[139,150057,413],{"class":145},[139,150059,150060],{"class":153},"130",[139,150062,413],{"class":145},[139,150064,3252],{"class":153},[139,150066,413],{"class":145},[139,150068,23315],{"class":153},[139,150070,413],{"class":145},[139,150072,1022],{"class":153},[139,150074,1484],{"class":145},[139,150076,149948],{"class":2111},[139,150078,150],{"class":149},[139,150080,33725],{"class":153},[139,150082,164],{"class":145},[139,150084,150085,150087,150090,150092,150094,150096,150098,150100,150102,150104,150106,150108,150110,150112,150114,150116,150118],{"class":141,"line":989},[139,150086,149495],{"class":145},[139,150088,150089],{"class":160},"\"线下销售\"",[139,150091,79747],{"class":145},[139,150093,3047],{"class":153},[139,150095,413],{"class":145},[139,150097,3297],{"class":153},[139,150099,413],{"class":145},[139,150101,1017],{"class":153},[139,150103,413],{"class":145},[139,150105,3252],{"class":153},[139,150107,413],{"class":145},[139,150109,149515],{"class":153},[139,150111,1484],{"class":145},[139,150113,149948],{"class":2111},[139,150115,150],{"class":149},[139,150117,33725],{"class":153},[139,150119,164],{"class":145},[139,150121,150122],{"class":141,"line":994},[139,150123,149671],{"class":145},[139,150125,150126,150128,150130,150132,150134,150136,150139],{"class":141,"line":999},[139,150127,149676],{"class":2111},[139,150129,150],{"class":149},[139,150131,149681],{"class":145},[139,150133,53645],{"class":2111},[139,150135,150],{"class":149},[139,150137,150138],{"class":160},"\"线上线下销售趋势\"",[139,150140,40290],{"class":145},[139,150142,150143,150145,150147,150149,150151,150153,150155],{"class":141,"line":1006},[139,150144,149732],{"class":2111},[139,150146,150],{"class":149},[139,150148,149737],{"class":145},[139,150150,149740],{"class":2111},[139,150152,150],{"class":149},[139,150154,149745],{"class":160},[139,150156,40290],{"class":145},[139,150158,150159],{"class":141,"line":1027},[139,150160,164],{"class":145},[139,150162,150163,150165,150168],{"class":141,"line":1040},[139,150164,149527],{"class":145},[139,150166,150167],{"class":160},"\"sales.html\"",[139,150169,164],{"class":145},[19,150171,150172],{},"多条折线适合比较不同指标或不同地区。",[14,150174,150176],{"id":150175},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150178,150179,150180,1122],{},"假设 ",[50,150181,150182],{},"sales.json",[130,150184,150186],{"className":149250,"code":150185,"language":148009,"meta":135,"style":135},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[50,150187,150188,150193,150225,150253,150281],{"__ignoreMap":135},[139,150189,150190],{"class":141,"line":142},[139,150191,150192],{"class":145},"[\n",[139,150194,150195,150198,150201,150203,150205,150207,150210,150212,150214,150216,150219,150221,150223],{"class":141,"line":210},[139,150196,150197],{"class":145},"  {",[139,150199,150200],{"class":153},"\"date\"",[139,150202,2265],{"class":145},[139,150204,149468],{"class":160},[139,150206,413],{"class":145},[139,150208,150209],{"class":153},"\"online\"",[139,150211,2265],{"class":145},[139,150213,1017],{"class":153},[139,150215,413],{"class":145},[139,150217,150218],{"class":153},"\"offline\"",[139,150220,2265],{"class":145},[139,150222,3047],{"class":153},[139,150224,7208],{"class":145},[139,150226,150227,150229,150231,150233,150235,150237,150239,150241,150243,150245,150247,150249,150251],{"class":141,"line":254},[139,150228,150197],{"class":145},[139,150230,150200],{"class":153},[139,150232,2265],{"class":145},[139,150234,149473],{"class":160},[139,150236,413],{"class":145},[139,150238,150209],{"class":153},[139,150240,2265],{"class":145},[139,150242,150060],{"class":153},[139,150244,413],{"class":145},[139,150246,150218],{"class":153},[139,150248,2265],{"class":145},[139,150250,3297],{"class":153},[139,150252,7208],{"class":145},[139,150254,150255,150257,150259,150261,150263,150265,150267,150269,150271,150273,150275,150277,150279],{"class":141,"line":262},[139,150256,150197],{"class":145},[139,150258,150200],{"class":153},[139,150260,2265],{"class":145},[139,150262,149478],{"class":160},[139,150264,413],{"class":145},[139,150266,150209],{"class":153},[139,150268,2265],{"class":145},[139,150270,3252],{"class":153},[139,150272,413],{"class":145},[139,150274,150218],{"class":153},[139,150276,2265],{"class":145},[139,150278,1017],{"class":153},[139,150280,3862],{"class":145},[139,150282,150283],{"class":141,"line":313},[139,150284,424],{"class":145},[19,150286,150287],{},"读取并绘图：",[130,150289,150291],{"className":132,"code":150290,"language":134,"meta":135,"style":135},"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",[50,150292,150293,150299,150313,150323,150327,150358,150370,150374,150382,150391,150400,150404,150416,150425,150434,150443,150447,150455,150459,150476,150493,150497,150514,150530,150534],{"__ignoreMap":135},[139,150294,150295,150297],{"class":141,"line":142},[139,150296,1064],{"class":149},[139,150298,2030],{"class":145},[139,150300,150301,150303,150305,150307,150309,150311],{"class":141,"line":210},[139,150302,1265],{"class":149},[139,150304,149582],{"class":145},[139,150306,1064],{"class":149},[139,150308,149587],{"class":145},[139,150310,1035],{"class":149},[139,150312,149592],{"class":145},[139,150314,150315,150317,150319,150321],{"class":141,"line":254},[139,150316,1265],{"class":149},[139,150318,149441],{"class":145},[139,150320,1064],{"class":149},[139,150322,149446],{"class":145},[139,150324,150325],{"class":141,"line":262},[139,150326,843],{"emptyLinePlaceholder":842},[139,150328,150329,150331,150333,150335,150338,150340,150342,150344,150346,150348,150350,150352,150354,150356],{"class":141,"line":313},[139,150330,110056],{"class":149},[139,150332,2100],{"class":153},[139,150334,157],{"class":145},[139,150336,150337],{"class":160},"\"sales.json\"",[139,150339,413],{"class":145},[139,150341,2106],{"class":160},[139,150343,413],{"class":145},[139,150345,2112],{"class":2111},[139,150347,150],{"class":149},[139,150349,2117],{"class":160},[139,150351,2120],{"class":145},[139,150353,1035],{"class":149},[139,150355,2125],{"class":2111},[139,150357,246],{"class":145},[139,150359,150360,150362,150364,150366,150368],{"class":141,"line":462},[139,150361,103648],{"class":145},[139,150363,150],{"class":149},[139,150365,2134],{"class":145},[139,150367,2137],{"class":2111},[139,150369,164],{"class":145},[139,150371,150372],{"class":141,"line":474},[139,150373,843],{"emptyLinePlaceholder":842},[139,150375,150376,150378,150380],{"class":141,"line":484},[139,150377,150003],{"class":145},[139,150379,150],{"class":149},[139,150381,2088],{"class":145},[139,150383,150384,150387,150389],{"class":141,"line":989},[139,150385,150386],{"class":145},"online_sales ",[139,150388,150],{"class":149},[139,150390,2088],{"class":145},[139,150392,150393,150396,150398],{"class":141,"line":994},[139,150394,150395],{"class":145},"offline_sales ",[139,150397,150],{"class":149},[139,150399,2088],{"class":145},[139,150401,150402],{"class":141,"line":999},[139,150403,843],{"emptyLinePlaceholder":842},[139,150405,150406,150408,150411,150413],{"class":141,"line":1006},[139,150407,1970],{"class":149},[139,150409,150410],{"class":145}," item ",[139,150412,1976],{"class":149},[139,150414,150415],{"class":145}," data:\n",[139,150417,150418,150421,150423],{"class":141,"line":1027},[139,150419,150420],{"class":145},"    dates.append(item[",[139,150422,150200],{"class":160},[139,150424,6935],{"class":145},[139,150426,150427,150430,150432],{"class":141,"line":1040},[139,150428,150429],{"class":145},"    online_sales.append(item[",[139,150431,150209],{"class":160},[139,150433,6935],{"class":145},[139,150435,150436,150439,150441],{"class":141,"line":2160},[139,150437,150438],{"class":145},"    offline_sales.append(item[",[139,150440,150218],{"class":160},[139,150442,6935],{"class":145},[139,150444,150445],{"class":141,"line":2188},[139,150446,843],{"emptyLinePlaceholder":842},[139,150448,150449,150451,150453],{"class":141,"line":3944},[139,150450,149455],{"class":145},[139,150452,150],{"class":149},[139,150454,149460],{"class":145},[139,150456,150457],{"class":141,"line":3963},[139,150458,150044],{"class":145},[139,150460,150461,150463,150465,150468,150470,150472,150474],{"class":141,"line":3968},[139,150462,149495],{"class":145},[139,150464,150051],{"class":160},[139,150466,150467],{"class":145},", online_sales, ",[139,150469,149948],{"class":2111},[139,150471,150],{"class":149},[139,150473,33725],{"class":153},[139,150475,164],{"class":145},[139,150477,150478,150480,150482,150485,150487,150489,150491],{"class":141,"line":3982},[139,150479,149495],{"class":145},[139,150481,150089],{"class":160},[139,150483,150484],{"class":145},", offline_sales, ",[139,150486,149948],{"class":2111},[139,150488,150],{"class":149},[139,150490,33725],{"class":153},[139,150492,164],{"class":145},[139,150494,150495],{"class":141,"line":3987},[139,150496,149671],{"class":145},[139,150498,150499,150501,150503,150505,150507,150509,150512],{"class":141,"line":4014},[139,150500,149676],{"class":2111},[139,150502,150],{"class":149},[139,150504,149681],{"class":145},[139,150506,53645],{"class":2111},[139,150508,150],{"class":149},[139,150510,150511],{"class":160},"\"销售趋势\"",[139,150513,40290],{"class":145},[139,150515,150516,150518,150520,150522,150524,150526,150528],{"class":141,"line":4019},[139,150517,149732],{"class":2111},[139,150519,150],{"class":149},[139,150521,149737],{"class":145},[139,150523,149740],{"class":2111},[139,150525,150],{"class":149},[139,150527,149745],{"class":160},[139,150529,40290],{"class":145},[139,150531,150532],{"class":141,"line":4036},[139,150533,164],{"class":145},[139,150535,150536,150538,150540],{"class":141,"line":4041},[139,150537,149527],{"class":145},[139,150539,150167],{"class":160},[139,150541,164],{"class":145},[14,150543,150545],{"id":150544},"_109-数据清洗","10.9 数据清洗",[19,150547,150548],{},"真实数据经常不整齐，需要清洗。",[19,150550,150551],{},"常见问题：",[1760,150553,150554,150557,150560,150563],{},[1763,150555,150556],{},"数字是字符串。",[1763,150558,150559],{},"字段缺失。",[1763,150561,150562],{},"空值。",[1763,150564,150565],{},"日期格式不统一。",[19,150567,128],{},[130,150569,150571],{"className":132,"code":150570,"language":134,"meta":135,"style":135},"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",[50,150572,150573,150582,150605,150625,150646,150650,150654,150662,150671,150675,150686,150700,150709,150714,150718,150726,150736,150740,150747],{"__ignoreMap":135},[139,150574,150575,150578,150580],{"class":141,"line":142},[139,150576,150577],{"class":145},"raw_data ",[139,150579,150],{"class":149},[139,150581,57681],{"class":145},[139,150583,150584,150587,150589,150591,150593,150595,150598,150600,150603],{"class":141,"line":210},[139,150585,150586],{"class":145},"    {",[139,150588,150200],{"class":160},[139,150590,2265],{"class":145},[139,150592,149468],{"class":160},[139,150594,413],{"class":145},[139,150596,150597],{"class":160},"\"sales\"",[139,150599,2265],{"class":145},[139,150601,150602],{"class":160},"\"100\"",[139,150604,7208],{"class":145},[139,150606,150607,150609,150611,150613,150615,150617,150619,150621,150623],{"class":141,"line":254},[139,150608,150586],{"class":145},[139,150610,150200],{"class":160},[139,150612,2265],{"class":145},[139,150614,149473],{"class":160},[139,150616,413],{"class":145},[139,150618,150597],{"class":160},[139,150620,2265],{"class":145},[139,150622,9926],{"class":160},[139,150624,7208],{"class":145},[139,150626,150627,150629,150631,150633,150635,150637,150639,150641,150644],{"class":141,"line":262},[139,150628,150586],{"class":145},[139,150630,150200],{"class":160},[139,150632,2265],{"class":145},[139,150634,149478],{"class":160},[139,150636,413],{"class":145},[139,150638,150597],{"class":160},[139,150640,2265],{"class":145},[139,150642,150643],{"class":160},"\"120\"",[139,150645,7208],{"class":145},[139,150647,150648],{"class":141,"line":313},[139,150649,424],{"class":145},[139,150651,150652],{"class":141,"line":462},[139,150653,843],{"emptyLinePlaceholder":842},[139,150655,150656,150658,150660],{"class":141,"line":474},[139,150657,150003],{"class":145},[139,150659,150],{"class":149},[139,150661,2088],{"class":145},[139,150663,150664,150667,150669],{"class":141,"line":484},[139,150665,150666],{"class":145},"sales ",[139,150668,150],{"class":149},[139,150670,2088],{"class":145},[139,150672,150673],{"class":141,"line":989},[139,150674,843],{"emptyLinePlaceholder":842},[139,150676,150677,150679,150681,150683],{"class":141,"line":994},[139,150678,1970],{"class":149},[139,150680,150410],{"class":145},[139,150682,1976],{"class":149},[139,150684,150685],{"class":145}," raw_data:\n",[139,150687,150688,150691,150693,150696,150698],{"class":141,"line":999},[139,150689,150690],{"class":145},"    value ",[139,150692,150],{"class":149},[139,150694,150695],{"class":145}," item.get(",[139,150697,150597],{"class":160},[139,150699,164],{"class":145},[139,150701,150702,150704,150706],{"class":141,"line":1006},[139,150703,790],{"class":149},[139,150705,2077],{"class":149},[139,150707,150708],{"class":145}," value:\n",[139,150710,150711],{"class":141,"line":1027},[139,150712,150713],{"class":149},"        continue\n",[139,150715,150716],{"class":141,"line":1040},[139,150717,843],{"emptyLinePlaceholder":842},[139,150719,150720,150722,150724],{"class":141,"line":2160},[139,150721,150420],{"class":145},[139,150723,150200],{"class":160},[139,150725,6935],{"class":145},[139,150727,150728,150731,150733],{"class":141,"line":2188},[139,150729,150730],{"class":145},"    sales.append(",[139,150732,2461],{"class":153},[139,150734,150735],{"class":145},"(value))\n",[139,150737,150738],{"class":141,"line":3944},[139,150739,843],{"emptyLinePlaceholder":842},[139,150741,150742,150744],{"class":141,"line":3963},[139,150743,213],{"class":153},[139,150745,150746],{"class":145},"(dates)\n",[139,150748,150749,150751],{"class":141,"line":3968},[139,150750,213],{"class":153},[139,150752,150753],{"class":145},"(sales)\n",[14,150755,150757],{"id":150756},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[130,150759,150761],{"className":132,"code":150760,"language":134,"meta":135,"style":135},"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",[50,150762,150763,150777,150787,150791,150799,150820,150842,150864,150886,150908,150912,150916,150938,150959,150963,150971,150975,150979,150989,150998,151008,151024,151028,151032,151049,151065,151081,151097,151107,151111],{"__ignoreMap":135},[139,150764,150765,150767,150769,150771,150773,150775],{"class":141,"line":142},[139,150766,1265],{"class":149},[139,150768,149582],{"class":145},[139,150770,1064],{"class":149},[139,150772,149587],{"class":145},[139,150774,1035],{"class":149},[139,150776,149592],{"class":145},[139,150778,150779,150781,150783,150785],{"class":141,"line":210},[139,150780,1265],{"class":149},[139,150782,149441],{"class":145},[139,150784,1064],{"class":149},[139,150786,149446],{"class":145},[139,150788,150789],{"class":141,"line":254},[139,150790,843],{"emptyLinePlaceholder":842},[139,150792,150793,150795,150797],{"class":141,"line":262},[139,150794,150666],{"class":145},[139,150796,150],{"class":149},[139,150798,57681],{"class":145},[139,150800,150801,150803,150805,150807,150810,150812,150814,150816,150818],{"class":141,"line":313},[139,150802,150586],{"class":145},[139,150804,150200],{"class":160},[139,150806,2265],{"class":145},[139,150808,150809],{"class":160},"\"2024-10-01\"",[139,150811,413],{"class":145},[139,150813,86312],{"class":160},[139,150815,2265],{"class":145},[139,150817,94251],{"class":153},[139,150819,7208],{"class":145},[139,150821,150822,150824,150826,150828,150831,150833,150835,150837,150840],{"class":141,"line":462},[139,150823,150586],{"class":145},[139,150825,150200],{"class":160},[139,150827,2265],{"class":145},[139,150829,150830],{"class":160},"\"2024-10-02\"",[139,150832,413],{"class":145},[139,150834,86312],{"class":160},[139,150836,2265],{"class":145},[139,150838,150839],{"class":153},"1800",[139,150841,7208],{"class":145},[139,150843,150844,150846,150848,150850,150853,150855,150857,150859,150862],{"class":141,"line":474},[139,150845,150586],{"class":145},[139,150847,150200],{"class":160},[139,150849,2265],{"class":145},[139,150851,150852],{"class":160},"\"2024-10-03\"",[139,150854,413],{"class":145},[139,150856,86312],{"class":160},[139,150858,2265],{"class":145},[139,150860,150861],{"class":153},"1500",[139,150863,7208],{"class":145},[139,150865,150866,150868,150870,150872,150875,150877,150879,150881,150884],{"class":141,"line":484},[139,150867,150586],{"class":145},[139,150869,150200],{"class":160},[139,150871,2265],{"class":145},[139,150873,150874],{"class":160},"\"2024-10-04\"",[139,150876,413],{"class":145},[139,150878,86312],{"class":160},[139,150880,2265],{"class":145},[139,150882,150883],{"class":153},"2100",[139,150885,7208],{"class":145},[139,150887,150888,150890,150892,150894,150897,150899,150901,150903,150906],{"class":141,"line":989},[139,150889,150586],{"class":145},[139,150891,150200],{"class":160},[139,150893,2265],{"class":145},[139,150895,150896],{"class":160},"\"2024-10-05\"",[139,150898,413],{"class":145},[139,150900,86312],{"class":160},[139,150902,2265],{"class":145},[139,150904,150905],{"class":153},"2600",[139,150907,7208],{"class":145},[139,150909,150910],{"class":141,"line":994},[139,150911,424],{"class":145},[139,150913,150914],{"class":141,"line":999},[139,150915,843],{"emptyLinePlaceholder":842},[139,150917,150918,150920,150922,150925,150927,150929,150931,150933,150935],{"class":141,"line":1006},[139,150919,150003],{"class":145},[139,150921,150],{"class":149},[139,150923,150924],{"class":145}," [item[",[139,150926,150200],{"class":160},[139,150928,6721],{"class":145},[139,150930,1970],{"class":149},[139,150932,150410],{"class":145},[139,150934,1976],{"class":149},[139,150936,150937],{"class":145}," sales]\n",[139,150939,150940,150943,150945,150947,150949,150951,150953,150955,150957],{"class":141,"line":1027},[139,150941,150942],{"class":145},"amounts ",[139,150944,150],{"class":149},[139,150946,150924],{"class":145},[139,150948,86312],{"class":160},[139,150950,6721],{"class":145},[139,150952,1970],{"class":149},[139,150954,150410],{"class":145},[139,150956,1976],{"class":149},[139,150958,150937],{"class":145},[139,150960,150961],{"class":141,"line":1040},[139,150962,843],{"emptyLinePlaceholder":842},[139,150964,150965,150967,150969],{"class":141,"line":2160},[139,150966,149455],{"class":145},[139,150968,150],{"class":149},[139,150970,149460],{"class":145},[139,150972,150973],{"class":141,"line":2188},[139,150974,150044],{"class":145},[139,150976,150977],{"class":141,"line":3944},[139,150978,149852],{"class":145},[139,150980,150981,150983,150985,150987],{"class":141,"line":3963},[139,150982,149857],{"class":2111},[139,150984,150],{"class":149},[139,150986,149498],{"class":160},[139,150988,33715],{"class":145},[139,150990,150991,150993,150995],{"class":141,"line":3968},[139,150992,149868],{"class":2111},[139,150994,150],{"class":149},[139,150996,150997],{"class":145},"amounts,\n",[139,150999,151000,151002,151004,151006],{"class":141,"line":3982},[139,151001,149897],{"class":2111},[139,151003,150],{"class":149},[139,151005,33725],{"class":153},[139,151007,33715],{"class":145},[139,151009,151010,151012,151014,151016,151018,151020,151022],{"class":141,"line":3987},[139,151011,149908],{"class":2111},[139,151013,150],{"class":149},[139,151015,149913],{"class":145},[139,151017,149916],{"class":2111},[139,151019,150],{"class":149},[139,151021,33725],{"class":153},[139,151023,40290],{"class":145},[139,151025,151026],{"class":141,"line":4014},[139,151027,164],{"class":145},[139,151029,151030],{"class":141,"line":4019},[139,151031,149671],{"class":145},[139,151033,151034,151036,151038,151040,151042,151044,151047],{"class":141,"line":4036},[139,151035,149676],{"class":2111},[139,151037,150],{"class":149},[139,151039,149681],{"class":145},[139,151041,53645],{"class":2111},[139,151043,150],{"class":149},[139,151045,151046],{"class":160},"\"每日销售额\"",[139,151048,40290],{"class":145},[139,151050,151051,151053,151055,151057,151059,151061,151063],{"class":141,"line":4041},[139,151052,149695],{"class":2111},[139,151054,150],{"class":149},[139,151056,149700],{"class":145},[139,151058,1676],{"class":2111},[139,151060,150],{"class":149},[139,151062,149707],{"class":160},[139,151064,40290],{"class":145},[139,151066,151067,151069,151071,151073,151075,151077,151079],{"class":141,"line":4046},[139,151068,149714],{"class":2111},[139,151070,150],{"class":149},[139,151072,149700],{"class":145},[139,151074,1676],{"class":2111},[139,151076,150],{"class":149},[139,151078,149725],{"class":160},[139,151080,40290],{"class":145},[139,151082,151083,151085,151087,151089,151091,151093,151095],{"class":141,"line":4051},[139,151084,149732],{"class":2111},[139,151086,150],{"class":149},[139,151088,149737],{"class":145},[139,151090,149740],{"class":2111},[139,151092,150],{"class":149},[139,151094,149745],{"class":160},[139,151096,40290],{"class":145},[139,151098,151099,151102,151104],{"class":141,"line":4065},[139,151100,151101],{"class":2111},"    datazoom_opts",[139,151103,150],{"class":149},[139,151105,151106],{"class":145},"[opts.DataZoomOpts()],\n",[139,151108,151109],{"class":141,"line":4070},[139,151110,164],{"class":145},[139,151112,151113,151115,151118],{"class":141,"line":4860},[139,151114,149527],{"class":145},[139,151116,151117],{"class":160},"\"daily_sales.html\"",[139,151119,164],{"class":145},[19,151121,151122,151125],{},[50,151123,151124],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151127,151129],{"id":151128},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151131,151132],{},"如果数据结构如下：",[130,151134,151136],{"className":132,"code":151135,"language":134,"meta":135,"style":135},"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",[50,151137,151138,151146,151154,151176,151197,151202,151209,151229,151249,151253],{"__ignoreMap":135},[139,151139,151140,151142,151144],{"class":141,"line":142},[139,151141,103883],{"class":145},[139,151143,150],{"class":149},[139,151145,17840],{"class":145},[139,151147,151148,151151],{"class":141,"line":210},[139,151149,151150],{"class":160},"    \"北京\"",[139,151152,151153],{"class":145},": [\n",[139,151155,151156,151158,151160,151162,151165,151167,151170,151172,151174],{"class":141,"line":254},[139,151157,7195],{"class":145},[139,151159,150200],{"class":160},[139,151161,2265],{"class":145},[139,151163,151164],{"class":160},"\"2024-01-01\"",[139,151166,413],{"class":145},[139,151168,151169],{"class":160},"\"confirm\"",[139,151171,2265],{"class":145},[139,151173,536],{"class":153},[139,151175,7208],{"class":145},[139,151177,151178,151180,151182,151184,151187,151189,151191,151193,151195],{"class":141,"line":262},[139,151179,7195],{"class":145},[139,151181,150200],{"class":160},[139,151183,2265],{"class":145},[139,151185,151186],{"class":160},"\"2024-01-02\"",[139,151188,413],{"class":145},[139,151190,151169],{"class":160},[139,151192,2265],{"class":145},[139,151194,2934],{"class":153},[139,151196,7208],{"class":145},[139,151198,151199],{"class":141,"line":313},[139,151200,151201],{"class":145},"    ],\n",[139,151203,151204,151207],{"class":141,"line":462},[139,151205,151206],{"class":160},"    \"上海\"",[139,151208,151153],{"class":145},[139,151210,151211,151213,151215,151217,151219,151221,151223,151225,151227],{"class":141,"line":474},[139,151212,7195],{"class":145},[139,151214,150200],{"class":160},[139,151216,2265],{"class":145},[139,151218,151164],{"class":160},[139,151220,413],{"class":145},[139,151222,151169],{"class":160},[139,151224,2265],{"class":145},[139,151226,2833],{"class":153},[139,151228,7208],{"class":145},[139,151230,151231,151233,151235,151237,151239,151241,151243,151245,151247],{"class":141,"line":484},[139,151232,7195],{"class":145},[139,151234,150200],{"class":160},[139,151236,2265],{"class":145},[139,151238,151186],{"class":160},[139,151240,413],{"class":145},[139,151242,151169],{"class":160},[139,151244,2265],{"class":145},[139,151246,2959],{"class":153},[139,151248,7208],{"class":145},[139,151250,151251],{"class":141,"line":989},[139,151252,151201],{"class":145},[139,151254,151255],{"class":141,"line":994},[139,151256,3862],{"class":145},[19,151258,151259],{},"绘制多地区趋势：",[130,151261,151263],{"className":132,"code":151262,"language":134,"meta":135,"style":135},"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",[50,151264,151265,151279,151289,151293,151318,151322,151330,151334,151338,151350,151372,151385,151389,151393,151410,151426,151430],{"__ignoreMap":135},[139,151266,151267,151269,151271,151273,151275,151277],{"class":141,"line":142},[139,151268,1265],{"class":149},[139,151270,149582],{"class":145},[139,151272,1064],{"class":149},[139,151274,149587],{"class":145},[139,151276,1035],{"class":149},[139,151278,149592],{"class":145},[139,151280,151281,151283,151285,151287],{"class":141,"line":210},[139,151282,1265],{"class":149},[139,151284,149441],{"class":145},[139,151286,1064],{"class":149},[139,151288,149446],{"class":145},[139,151290,151291],{"class":141,"line":254},[139,151292,843],{"emptyLinePlaceholder":842},[139,151294,151295,151297,151299,151301,151303,151305,151307,151309,151311,151314,151316],{"class":141,"line":262},[139,151296,150003],{"class":145},[139,151298,150],{"class":149},[139,151300,150924],{"class":145},[139,151302,150200],{"class":160},[139,151304,6721],{"class":145},[139,151306,1970],{"class":149},[139,151308,150410],{"class":145},[139,151310,1976],{"class":149},[139,151312,151313],{"class":145}," data[",[139,151315,71499],{"class":160},[139,151317,79756],{"class":145},[139,151319,151320],{"class":141,"line":313},[139,151321,843],{"emptyLinePlaceholder":842},[139,151323,151324,151326,151328],{"class":141,"line":462},[139,151325,149455],{"class":145},[139,151327,150],{"class":149},[139,151329,149460],{"class":145},[139,151331,151332],{"class":141,"line":474},[139,151333,150044],{"class":145},[139,151335,151336],{"class":141,"line":484},[139,151337,843],{"emptyLinePlaceholder":842},[139,151339,151340,151342,151345,151347],{"class":141,"line":989},[139,151341,1970],{"class":149},[139,151343,151344],{"class":145}," city, records ",[139,151346,1976],{"class":149},[139,151348,151349],{"class":145}," data.items():\n",[139,151351,151352,151355,151357,151359,151361,151363,151365,151367,151369],{"class":141,"line":994},[139,151353,151354],{"class":145},"    values ",[139,151356,150],{"class":149},[139,151358,150924],{"class":145},[139,151360,151169],{"class":160},[139,151362,6721],{"class":145},[139,151364,1970],{"class":149},[139,151366,150410],{"class":145},[139,151368,1976],{"class":149},[139,151370,151371],{"class":145}," records]\n",[139,151373,151374,151377,151379,151381,151383],{"class":141,"line":999},[139,151375,151376],{"class":145},"    line.add_yaxis(city, values, ",[139,151378,149948],{"class":2111},[139,151380,150],{"class":149},[139,151382,33725],{"class":153},[139,151384,164],{"class":145},[139,151386,151387],{"class":141,"line":1006},[139,151388,843],{"emptyLinePlaceholder":842},[139,151390,151391],{"class":141,"line":1027},[139,151392,149671],{"class":145},[139,151394,151395,151397,151399,151401,151403,151405,151408],{"class":141,"line":1040},[139,151396,149676],{"class":2111},[139,151398,150],{"class":149},[139,151400,149681],{"class":145},[139,151402,53645],{"class":2111},[139,151404,150],{"class":149},[139,151406,151407],{"class":160},"\"多地区趋势图\"",[139,151409,40290],{"class":145},[139,151411,151412,151414,151416,151418,151420,151422,151424],{"class":141,"line":2160},[139,151413,149732],{"class":2111},[139,151415,150],{"class":149},[139,151417,149737],{"class":145},[139,151419,149740],{"class":2111},[139,151421,150],{"class":149},[139,151423,149745],{"class":160},[139,151425,40290],{"class":145},[139,151427,151428],{"class":141,"line":2188},[139,151429,164],{"class":145},[139,151431,151432,151434,151437],{"class":141,"line":3944},[139,151433,149527],{"class":145},[139,151435,151436],{"class":160},"\"trend.html\"",[139,151438,164],{"class":145},[19,151440,151441],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151443,151445],{"id":151444},"_1012-易错点","10.12 易错点",[1760,151447,151448,151454,151460,151470,151476],{},[1763,151449,151450,151453],{},[50,151451,151452],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1763,151455,151456,151459],{},[50,151457,151458],{},"render()"," 生成的是 HTML，不是图片。",[1763,151461,151462,151463,151466,151467,170],{},"JSON 字符串用 ",[50,151464,151465],{},"json.loads()","，JSON 文件用 ",[50,151468,151469],{},"json.load()",[1763,151471,151472,151473,170],{},"中文 JSON 保存时加 ",[50,151474,151475],{},"ensure_ascii=False",[1763,151477,151478],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151480,151482],{"id":151481},"_1013-本章练习","10.13 本章练习",[1760,151484,151485,151488,151491,151494,151497],{},[1763,151486,151487],{},"安装 pyecharts 并生成第一个折线图。",[1763,151489,151490],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1763,151492,151493],{},"绘制两条折线，对比线上和线下销售额。",[1763,151495,151496],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1763,151498,151499],{},"对含有空值的销售数据进行清洗后再绘图。",[2348,151501,151502],{},"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":135,"searchDepth":210,"depth":210,"links":151504},[151505,151506,151507,151508,151509,151510,151511,151512,151513,151514,151515,151516,151517],{"id":149125,"depth":210,"text":149126},{"id":149200,"depth":210,"text":149201},{"id":149377,"depth":210,"text":149378},{"id":149428,"depth":210,"text":149429},{"id":149562,"depth":210,"text":149563},{"id":149838,"depth":210,"text":149839},{"id":149964,"depth":210,"text":149965},{"id":150175,"depth":210,"text":150176},{"id":150544,"depth":210,"text":150545},{"id":150756,"depth":210,"text":150757},{"id":151128,"depth":210,"text":151129},{"id":151444,"depth":210,"text":151445},{"id":151481,"depth":210,"text":151482},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149117,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151524,"title":151525,"body":151526,"description":2384,"extension":2385,"meta":153876,"navigation":842,"path":153877,"seo":153878,"stem":153879,"__hash__":153880},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151527,"toc":153853},[151528,151531,151535,151538,151541,151617,151620,151711,151714,151718,151721,151764,151777,151781,151784,151851,151854,151858,151861,151945,151953,151957,151962,152102,152105,152116,152122,152128,152242,152246,152249,152252,152501,152504,152508,152511,152615,152618,152622,152773,152777,152784,152897,152901,152904,153010,153013,153017,153020,153051,153054,153158,153161,153165,153169,153179,153247,153251,153258,153320,153323,153327,153333,153429,153438,153442,153765,153774,153778,153806,153810,153850],[10,151529,151525],{"id":151530},"_11-面向对象基础",[14,151532,151534],{"id":151533},"_111-什么是面向对象","11.1 什么是面向对象",[19,151536,151537],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151539,151540],{},"面向过程：",[130,151542,151544],{"className":132,"code":151543,"language":134,"meta":135,"style":135},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[50,151545,151546,151555,151563,151567,151577,151608,151612],{"__ignoreMap":135},[139,151547,151548,151550,151552],{"class":141,"line":142},[139,151549,148746],{"class":145},[139,151551,150],{"class":149},[139,151553,151554],{"class":160}," \"小明\"\n",[139,151556,151557,151559,151561],{"class":141,"line":210},[139,151558,190],{"class":145},[139,151560,150],{"class":149},[139,151562,148760],{"class":153},[139,151564,151565],{"class":141,"line":254},[139,151566,843],{"emptyLinePlaceholder":842},[139,151568,151569,151571,151574],{"class":141,"line":262},[139,151570,778],{"class":149},[139,151572,151573],{"class":781}," introduce",[139,151575,151576],{"class":145},"(name, age):\n",[139,151578,151579,151581,151583,151585,151588,151590,151592,151594,151597,151599,151601,151603,151606],{"class":141,"line":313},[139,151580,302],{"class":153},[139,151582,157],{"class":145},[139,151584,619],{"class":149},[139,151586,151587],{"class":160},"\"我叫",[139,151589,625],{"class":153},[139,151591,1676],{"class":145},[139,151593,631],{"class":153},[139,151595,151596],{"class":160},"，今年",[139,151598,625],{"class":153},[139,151600,831],{"class":145},[139,151602,631],{"class":153},[139,151604,151605],{"class":160},"岁\"",[139,151607,164],{"class":145},[139,151609,151610],{"class":141,"line":462},[139,151611,843],{"emptyLinePlaceholder":842},[139,151613,151614],{"class":141,"line":474},[139,151615,151616],{"class":145},"introduce(name, age)\n",[19,151618,151619],{},"面向对象：",[130,151621,151623],{"className":132,"code":151622,"language":134,"meta":135,"style":135},"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",[50,151624,151625,151633,151641,151670,151674,151678,151688,151697,151706],{"__ignoreMap":135},[139,151626,151627,151629,151631],{"class":141,"line":142},[139,151628,915],{"class":149},[139,151630,10172],{"class":781},[139,151632,246],{"class":145},[139,151634,151635,151637,151639],{"class":141,"line":210},[139,151636,33053],{"class":149},[139,151638,151573],{"class":781},[139,151640,33059],{"class":145},[139,151642,151643,151645,151647,151649,151651,151654,151656,151658,151660,151662,151664,151666,151668],{"class":141,"line":254},[139,151644,34698],{"class":153},[139,151646,157],{"class":145},[139,151648,619],{"class":149},[139,151650,151587],{"class":160},[139,151652,151653],{"class":153},"{self",[139,151655,82529],{"class":145},[139,151657,631],{"class":153},[139,151659,151596],{"class":160},[139,151661,151653],{"class":153},[139,151663,82541],{"class":145},[139,151665,631],{"class":153},[139,151667,151605],{"class":160},[139,151669,164],{"class":145},[139,151671,151672],{"class":141,"line":262},[139,151673,843],{"emptyLinePlaceholder":842},[139,151675,151676],{"class":141,"line":313},[139,151677,843],{"emptyLinePlaceholder":842},[139,151679,151680,151683,151685],{"class":141,"line":462},[139,151681,151682],{"class":145},"student ",[139,151684,150],{"class":149},[139,151686,151687],{"class":145}," Student()\n",[139,151689,151690,151693,151695],{"class":141,"line":474},[139,151691,151692],{"class":145},"student.name ",[139,151694,150],{"class":149},[139,151696,151554],{"class":160},[139,151698,151699,151702,151704],{"class":141,"line":484},[139,151700,151701],{"class":145},"student.age ",[139,151703,150],{"class":149},[139,151705,148760],{"class":153},[139,151707,151708],{"class":141,"line":989},[139,151709,151710],{"class":145},"student.introduce()\n",[19,151712,151713],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151715,151717],{"id":151716},"_112-类和对象","11.2 类和对象",[19,151719,151720],{},"类是模板，对象是根据模板创建出来的具体实例。",[130,151722,151724],{"className":132,"code":151723,"language":134,"meta":135,"style":135},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[50,151725,151726,151734,151738,151742,151746,151755],{"__ignoreMap":135},[139,151727,151728,151730,151732],{"class":141,"line":142},[139,151729,915],{"class":149},[139,151731,10172],{"class":781},[139,151733,246],{"class":145},[139,151735,151736],{"class":141,"line":210},[139,151737,930],{"class":149},[139,151739,151740],{"class":141,"line":254},[139,151741,843],{"emptyLinePlaceholder":842},[139,151743,151744],{"class":141,"line":262},[139,151745,843],{"emptyLinePlaceholder":842},[139,151747,151748,151751,151753],{"class":141,"line":313},[139,151749,151750],{"class":145},"student1 ",[139,151752,150],{"class":149},[139,151754,151687],{"class":145},[139,151756,151757,151760,151762],{"class":141,"line":462},[139,151758,151759],{"class":145},"student2 ",[139,151761,150],{"class":149},[139,151763,151687],{"class":145},[19,151765,151766,151769,151770,103245,151773,151776],{},[50,151767,151768],{},"Student"," 是类，",[50,151771,151772],{},"student1",[50,151774,151775],{},"student2"," 是对象。",[14,151778,151780],{"id":151779},"_113-属性","11.3 属性",[19,151782,151783],{},"属性是对象保存的数据。",[130,151785,151787],{"className":132,"code":151786,"language":134,"meta":135,"style":135},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[50,151788,151789,151797,151801,151805,151809,151817,151825,151833,151837,151844],{"__ignoreMap":135},[139,151790,151791,151793,151795],{"class":141,"line":142},[139,151792,915],{"class":149},[139,151794,10172],{"class":781},[139,151796,246],{"class":145},[139,151798,151799],{"class":141,"line":210},[139,151800,930],{"class":149},[139,151802,151803],{"class":141,"line":254},[139,151804,843],{"emptyLinePlaceholder":842},[139,151806,151807],{"class":141,"line":262},[139,151808,843],{"emptyLinePlaceholder":842},[139,151810,151811,151813,151815],{"class":141,"line":313},[139,151812,151682],{"class":145},[139,151814,150],{"class":149},[139,151816,151687],{"class":145},[139,151818,151819,151821,151823],{"class":141,"line":462},[139,151820,151692],{"class":145},[139,151822,150],{"class":149},[139,151824,151554],{"class":160},[139,151826,151827,151829,151831],{"class":141,"line":474},[139,151828,151701],{"class":145},[139,151830,150],{"class":149},[139,151832,148760],{"class":153},[139,151834,151835],{"class":141,"line":484},[139,151836,843],{"emptyLinePlaceholder":842},[139,151838,151839,151841],{"class":141,"line":989},[139,151840,213],{"class":153},[139,151842,151843],{"class":145},"(student.name)\n",[139,151845,151846,151848],{"class":141,"line":994},[139,151847,213],{"class":153},[139,151849,151850],{"class":145},"(student.age)\n",[19,151852,151853],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151855,151857],{"id":151856},"_114-方法","11.4 方法",[19,151859,151860],{},"类中的函数叫方法。",[130,151862,151863],{"className":132,"code":151622,"language":134,"meta":135,"style":135},[50,151864,151865,151873,151881,151909,151913,151917,151925,151933,151941],{"__ignoreMap":135},[139,151866,151867,151869,151871],{"class":141,"line":142},[139,151868,915],{"class":149},[139,151870,10172],{"class":781},[139,151872,246],{"class":145},[139,151874,151875,151877,151879],{"class":141,"line":210},[139,151876,33053],{"class":149},[139,151878,151573],{"class":781},[139,151880,33059],{"class":145},[139,151882,151883,151885,151887,151889,151891,151893,151895,151897,151899,151901,151903,151905,151907],{"class":141,"line":254},[139,151884,34698],{"class":153},[139,151886,157],{"class":145},[139,151888,619],{"class":149},[139,151890,151587],{"class":160},[139,151892,151653],{"class":153},[139,151894,82529],{"class":145},[139,151896,631],{"class":153},[139,151898,151596],{"class":160},[139,151900,151653],{"class":153},[139,151902,82541],{"class":145},[139,151904,631],{"class":153},[139,151906,151605],{"class":160},[139,151908,164],{"class":145},[139,151910,151911],{"class":141,"line":262},[139,151912,843],{"emptyLinePlaceholder":842},[139,151914,151915],{"class":141,"line":313},[139,151916,843],{"emptyLinePlaceholder":842},[139,151918,151919,151921,151923],{"class":141,"line":462},[139,151920,151682],{"class":145},[139,151922,150],{"class":149},[139,151924,151687],{"class":145},[139,151926,151927,151929,151931],{"class":141,"line":474},[139,151928,151692],{"class":145},[139,151930,150],{"class":149},[139,151932,151554],{"class":160},[139,151934,151935,151937,151939],{"class":141,"line":484},[139,151936,151701],{"class":145},[139,151938,150],{"class":149},[139,151940,148760],{"class":153},[139,151942,151943],{"class":141,"line":989},[139,151944,151710],{"class":145},[19,151946,151947,151949,151950,151952],{},[50,151948,33075],{}," 表示当前对象。调用方法时不需要手动传入 ",[50,151951,33075],{},"，Python 会自动传。",[14,151954,151956],{"id":151955},"_115-构造方法__init__","11.5 构造方法__init__",[19,151958,151959,151961],{},[50,151960,33081],{}," 在对象创建时自动执行，用于初始化属性。",[130,151963,151965],{"className":132,"code":151964,"language":134,"meta":135,"style":135},"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",[50,151966,151967,151975,151984,151996,152008,152019,152023,152031,152069,152073,152077,152098],{"__ignoreMap":135},[139,151968,151969,151971,151973],{"class":141,"line":142},[139,151970,915],{"class":149},[139,151972,10172],{"class":781},[139,151974,246],{"class":145},[139,151976,151977,151979,151981],{"class":141,"line":210},[139,151978,33053],{"class":149},[139,151980,33056],{"class":153},[139,151982,151983],{"class":145},"(self, name, age, score):\n",[139,151985,151986,151988,151991,151993],{"class":141,"line":254},[139,151987,33097],{"class":153},[139,151989,151990],{"class":145},".name ",[139,151992,150],{"class":149},[139,151994,151995],{"class":145}," name\n",[139,151997,151998,152000,152003,152005],{"class":141,"line":262},[139,151999,33097],{"class":153},[139,152001,152002],{"class":145},".age ",[139,152004,150],{"class":149},[139,152006,152007],{"class":145}," age\n",[139,152009,152010,152012,152015,152017],{"class":141,"line":313},[139,152011,33097],{"class":153},[139,152013,152014],{"class":145},".score ",[139,152016,150],{"class":149},[139,152018,3876],{"class":145},[139,152020,152021],{"class":141,"line":462},[139,152022,843],{"emptyLinePlaceholder":842},[139,152024,152025,152027,152029],{"class":141,"line":474},[139,152026,33053],{"class":149},[139,152028,151573],{"class":781},[139,152030,33059],{"class":145},[139,152032,152033,152035,152037,152039,152041,152043,152045,152047,152049,152051,152053,152055,152058,152060,152063,152065,152067],{"class":141,"line":484},[139,152034,34698],{"class":153},[139,152036,157],{"class":145},[139,152038,619],{"class":149},[139,152040,151587],{"class":160},[139,152042,151653],{"class":153},[139,152044,82529],{"class":145},[139,152046,631],{"class":153},[139,152048,151596],{"class":160},[139,152050,151653],{"class":153},[139,152052,82541],{"class":145},[139,152054,631],{"class":153},[139,152056,152057],{"class":160},"岁，成绩",[139,152059,151653],{"class":153},[139,152061,152062],{"class":145},".score",[139,152064,631],{"class":153},[139,152066,634],{"class":160},[139,152068,164],{"class":145},[139,152070,152071],{"class":141,"line":989},[139,152072,843],{"emptyLinePlaceholder":842},[139,152074,152075],{"class":141,"line":994},[139,152076,843],{"emptyLinePlaceholder":842},[139,152078,152079,152081,152083,152086,152088,152090,152092,152094,152096],{"class":141,"line":999},[139,152080,151682],{"class":145},[139,152082,150],{"class":149},[139,152084,152085],{"class":145}," Student(",[139,152087,1441],{"class":160},[139,152089,413],{"class":145},[139,152091,3085],{"class":153},[139,152093,413],{"class":145},[139,152095,2277],{"class":153},[139,152097,164],{"class":145},[139,152099,152100],{"class":141,"line":1006},[139,152101,151710],{"class":145},[19,152103,152104],{},"构造方法的好处：",[1760,152106,152107,152110,152113],{},[1763,152108,152109],{},"创建对象时必须提供必要数据。",[1763,152111,152112],{},"属性初始化集中，不容易漏。",[1763,152114,152115],{},"对象状态更完整。",[14,152117,152119,152120],{"id":152118},"_116-str","11.6 ",[1674,152121,3600],{},[19,152123,152124,152125,170],{},"直接打印对象时，默认输出不直观。可以定义 ",[50,152126,152127],{},"__str__",[130,152129,152131],{"className":132,"code":152130,"language":134,"meta":135,"style":135},"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",[50,152132,152133,152141,152150,152160,152170,152174,152183,152211,152215,152219,152235],{"__ignoreMap":135},[139,152134,152135,152137,152139],{"class":141,"line":142},[139,152136,915],{"class":149},[139,152138,10172],{"class":781},[139,152140,246],{"class":145},[139,152142,152143,152145,152147],{"class":141,"line":210},[139,152144,33053],{"class":149},[139,152146,33056],{"class":153},[139,152148,152149],{"class":145},"(self, name, age):\n",[139,152151,152152,152154,152156,152158],{"class":141,"line":254},[139,152153,33097],{"class":153},[139,152155,151990],{"class":145},[139,152157,150],{"class":149},[139,152159,151995],{"class":145},[139,152161,152162,152164,152166,152168],{"class":141,"line":262},[139,152163,33097],{"class":153},[139,152165,152002],{"class":145},[139,152167,150],{"class":149},[139,152169,152007],{"class":145},[139,152171,152172],{"class":141,"line":313},[139,152173,843],{"emptyLinePlaceholder":842},[139,152175,152176,152178,152181],{"class":141,"line":462},[139,152177,33053],{"class":149},[139,152179,152180],{"class":153}," __str__",[139,152182,33059],{"class":145},[139,152184,152185,152187,152190,152193,152195,152197,152199,152202,152204,152206,152208],{"class":141,"line":474},[139,152186,2085],{"class":149},[139,152188,152189],{"class":149}," f",[139,152191,152192],{"class":160},"\"Student(name=",[139,152194,151653],{"class":153},[139,152196,82529],{"class":145},[139,152198,631],{"class":153},[139,152200,152201],{"class":160},", age=",[139,152203,151653],{"class":153},[139,152205,82541],{"class":145},[139,152207,631],{"class":153},[139,152209,152210],{"class":160},")\"\n",[139,152212,152213],{"class":141,"line":484},[139,152214,843],{"emptyLinePlaceholder":842},[139,152216,152217],{"class":141,"line":989},[139,152218,843],{"emptyLinePlaceholder":842},[139,152220,152221,152223,152225,152227,152229,152231,152233],{"class":141,"line":994},[139,152222,151682],{"class":145},[139,152224,150],{"class":149},[139,152226,152085],{"class":145},[139,152228,1441],{"class":160},[139,152230,413],{"class":145},[139,152232,3085],{"class":153},[139,152234,164],{"class":145},[139,152236,152237,152239],{"class":141,"line":999},[139,152238,213],{"class":153},[139,152240,152241],{"class":145},"(student)\n",[14,152243,152245],{"id":152244},"_117-封装","11.7 封装",[19,152247,152248],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152250,152251],{},"Python 中以双下划线开头的属性通常视为私有属性。",[130,152253,152255],{"className":132,"code":152254,"language":134,"meta":135,"style":135},"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",[50,152256,152257,152266,152275,152287,152299,152303,152312,152321,152325,152335,152347,152358,152363,152373,152377,152385,152397,152408,152412,152425,152435,152439,152450,152454,152458,152476,152485,152494],{"__ignoreMap":135},[139,152258,152259,152261,152264],{"class":141,"line":142},[139,152260,915],{"class":149},[139,152262,152263],{"class":781}," Account",[139,152265,246],{"class":145},[139,152267,152268,152270,152272],{"class":141,"line":210},[139,152269,33053],{"class":149},[139,152271,33056],{"class":153},[139,152273,152274],{"class":145},"(self, owner, balance):\n",[139,152276,152277,152279,152282,152284],{"class":141,"line":254},[139,152278,33097],{"class":153},[139,152280,152281],{"class":145},".owner ",[139,152283,150],{"class":149},[139,152285,152286],{"class":145}," owner\n",[139,152288,152289,152291,152294,152296],{"class":141,"line":262},[139,152290,33097],{"class":153},[139,152292,152293],{"class":145},".__balance ",[139,152295,150],{"class":149},[139,152297,152298],{"class":145}," balance\n",[139,152300,152301],{"class":141,"line":313},[139,152302,843],{"emptyLinePlaceholder":842},[139,152304,152305,152307,152310],{"class":141,"line":462},[139,152306,33053],{"class":149},[139,152308,152309],{"class":781}," get_balance",[139,152311,33059],{"class":145},[139,152313,152314,152316,152318],{"class":141,"line":474},[139,152315,2085],{"class":149},[139,152317,41116],{"class":153},[139,152319,152320],{"class":145},".__balance\n",[139,152322,152323],{"class":141,"line":484},[139,152324,843],{"emptyLinePlaceholder":842},[139,152326,152327,152329,152332],{"class":141,"line":989},[139,152328,33053],{"class":149},[139,152330,152331],{"class":781}," deposit",[139,152333,152334],{"class":145},"(self, money):\n",[139,152336,152337,152339,152341,152343,152345],{"class":141,"line":994},[139,152338,4780],{"class":149},[139,152340,955],{"class":145},[139,152342,3885],{"class":149},[139,152344,799],{"class":153},[139,152346,246],{"class":145},[139,152348,152349,152351,152353,152356],{"class":141,"line":999},[139,152350,36893],{"class":153},[139,152352,157],{"class":145},[139,152354,152355],{"class":160},"\"存款金额必须大于0\"",[139,152357,164],{"class":145},[139,152359,152360],{"class":141,"line":1006},[139,152361,152362],{"class":149},"            return\n",[139,152364,152365,152367,152369,152371],{"class":141,"line":1027},[139,152366,33097],{"class":153},[139,152368,152293],{"class":145},[139,152370,11751],{"class":149},[139,152372,986],{"class":145},[139,152374,152375],{"class":141,"line":1040},[139,152376,843],{"emptyLinePlaceholder":842},[139,152378,152379,152381,152383],{"class":141,"line":2160},[139,152380,33053],{"class":149},[139,152382,945],{"class":781},[139,152384,152334],{"class":145},[139,152386,152387,152389,152391,152393,152395],{"class":141,"line":2188},[139,152388,4780],{"class":149},[139,152390,955],{"class":145},[139,152392,3885],{"class":149},[139,152394,799],{"class":153},[139,152396,246],{"class":145},[139,152398,152399,152401,152403,152406],{"class":141,"line":3944},[139,152400,36893],{"class":153},[139,152402,157],{"class":145},[139,152404,152405],{"class":160},"\"取款金额必须大于0\"",[139,152407,164],{"class":145},[139,152409,152410],{"class":141,"line":3963},[139,152411,152362],{"class":149},[139,152413,152414,152416,152418,152420,152422],{"class":141,"line":3968},[139,152415,4780],{"class":149},[139,152417,955],{"class":145},[139,152419,958],{"class":149},[139,152421,41116],{"class":153},[139,152423,152424],{"class":145},".__balance:\n",[139,152426,152427,152429,152431,152433],{"class":141,"line":3982},[139,152428,36893],{"class":153},[139,152430,157],{"class":145},[139,152432,971],{"class":160},[139,152434,164],{"class":145},[139,152436,152437],{"class":141,"line":3987},[139,152438,152362],{"class":149},[139,152440,152441,152443,152445,152448],{"class":141,"line":4014},[139,152442,33097],{"class":153},[139,152444,152293],{"class":145},[139,152446,152447],{"class":149},"-=",[139,152449,986],{"class":145},[139,152451,152452],{"class":141,"line":4019},[139,152453,843],{"emptyLinePlaceholder":842},[139,152455,152456],{"class":141,"line":4036},[139,152457,843],{"emptyLinePlaceholder":842},[139,152459,152460,152463,152465,152468,152470,152472,152474],{"class":141,"line":4041},[139,152461,152462],{"class":145},"account ",[139,152464,150],{"class":149},[139,152466,152467],{"class":145}," Account(",[139,152469,1441],{"class":160},[139,152471,413],{"class":145},[139,152473,8684],{"class":153},[139,152475,164],{"class":145},[139,152477,152478,152481,152483],{"class":141,"line":4046},[139,152479,152480],{"class":145},"account.deposit(",[139,152482,1022],{"class":153},[139,152484,164],{"class":145},[139,152486,152487,152490,152492],{"class":141,"line":4051},[139,152488,152489],{"class":145},"account.withdraw(",[139,152491,1017],{"class":153},[139,152493,164],{"class":145},[139,152495,152496,152498],{"class":141,"line":4065},[139,152497,213],{"class":153},[139,152499,152500],{"class":145},"(account.get_balance())\n",[19,152502,152503],{},"封装的意义是避免外部随意修改内部状态。",[14,152505,152507],{"id":152506},"_118-继承","11.8 继承",[19,152509,152510],{},"继承可以让子类复用父类的属性和方法。",[130,152512,152514],{"className":132,"code":152513,"language":134,"meta":135,"style":135},"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",[50,152515,152516,152525,152534,152545,152549,152553,152567,152576,152587,152591,152595,152605,152610],{"__ignoreMap":135},[139,152517,152518,152520,152523],{"class":141,"line":142},[139,152519,915],{"class":149},[139,152521,152522],{"class":781}," Animal",[139,152524,246],{"class":145},[139,152526,152527,152529,152532],{"class":141,"line":210},[139,152528,33053],{"class":149},[139,152530,152531],{"class":781}," eat",[139,152533,33059],{"class":145},[139,152535,152536,152538,152540,152543],{"class":141,"line":254},[139,152537,34698],{"class":153},[139,152539,157],{"class":145},[139,152541,152542],{"class":160},"\"吃东西\"",[139,152544,164],{"class":145},[139,152546,152547],{"class":141,"line":262},[139,152548,843],{"emptyLinePlaceholder":842},[139,152550,152551],{"class":141,"line":313},[139,152552,843],{"emptyLinePlaceholder":842},[139,152554,152555,152557,152560,152562,152565],{"class":141,"line":462},[139,152556,915],{"class":149},[139,152558,152559],{"class":781}," Dog",[139,152561,157],{"class":145},[139,152563,152564],{"class":781},"Animal",[139,152566,558],{"class":145},[139,152568,152569,152571,152574],{"class":141,"line":474},[139,152570,33053],{"class":149},[139,152572,152573],{"class":781}," bark",[139,152575,33059],{"class":145},[139,152577,152578,152580,152582,152585],{"class":141,"line":484},[139,152579,34698],{"class":153},[139,152581,157],{"class":145},[139,152583,152584],{"class":160},"\"汪汪\"",[139,152586,164],{"class":145},[139,152588,152589],{"class":141,"line":989},[139,152590,843],{"emptyLinePlaceholder":842},[139,152592,152593],{"class":141,"line":994},[139,152594,843],{"emptyLinePlaceholder":842},[139,152596,152597,152600,152602],{"class":141,"line":999},[139,152598,152599],{"class":145},"dog ",[139,152601,150],{"class":149},[139,152603,152604],{"class":145}," Dog()\n",[139,152606,152607],{"class":141,"line":1006},[139,152608,152609],{"class":145},"dog.eat()\n",[139,152611,152612],{"class":141,"line":1027},[139,152613,152614],{"class":145},"dog.bark()\n",[19,152616,152617],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152619,152621],{"id":152620},"_119-方法重写","11.9 方法重写",[130,152623,152625],{"className":132,"code":152624,"language":134,"meta":135,"style":135},"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",[50,152626,152627,152635,152644,152655,152659,152663,152675,152683,152693,152697,152701,152714,152722,152733,152737,152741,152749,152759,152763,152768],{"__ignoreMap":135},[139,152628,152629,152631,152633],{"class":141,"line":142},[139,152630,915],{"class":149},[139,152632,152522],{"class":781},[139,152634,246],{"class":145},[139,152636,152637,152639,152642],{"class":141,"line":210},[139,152638,33053],{"class":149},[139,152640,152641],{"class":781}," speak",[139,152643,33059],{"class":145},[139,152645,152646,152648,152650,152653],{"class":141,"line":254},[139,152647,34698],{"class":153},[139,152649,157],{"class":145},[139,152651,152652],{"class":160},"\"动物叫\"",[139,152654,164],{"class":145},[139,152656,152657],{"class":141,"line":262},[139,152658,843],{"emptyLinePlaceholder":842},[139,152660,152661],{"class":141,"line":313},[139,152662,843],{"emptyLinePlaceholder":842},[139,152664,152665,152667,152669,152671,152673],{"class":141,"line":462},[139,152666,915],{"class":149},[139,152668,152559],{"class":781},[139,152670,157],{"class":145},[139,152672,152564],{"class":781},[139,152674,558],{"class":145},[139,152676,152677,152679,152681],{"class":141,"line":474},[139,152678,33053],{"class":149},[139,152680,152641],{"class":781},[139,152682,33059],{"class":145},[139,152684,152685,152687,152689,152691],{"class":141,"line":484},[139,152686,34698],{"class":153},[139,152688,157],{"class":145},[139,152690,152584],{"class":160},[139,152692,164],{"class":145},[139,152694,152695],{"class":141,"line":989},[139,152696,843],{"emptyLinePlaceholder":842},[139,152698,152699],{"class":141,"line":994},[139,152700,843],{"emptyLinePlaceholder":842},[139,152702,152703,152705,152708,152710,152712],{"class":141,"line":999},[139,152704,915],{"class":149},[139,152706,152707],{"class":781}," Cat",[139,152709,157],{"class":145},[139,152711,152564],{"class":781},[139,152713,558],{"class":145},[139,152715,152716,152718,152720],{"class":141,"line":1006},[139,152717,33053],{"class":149},[139,152719,152641],{"class":781},[139,152721,33059],{"class":145},[139,152723,152724,152726,152728,152731],{"class":141,"line":1027},[139,152725,34698],{"class":153},[139,152727,157],{"class":145},[139,152729,152730],{"class":160},"\"喵喵\"",[139,152732,164],{"class":145},[139,152734,152735],{"class":141,"line":1040},[139,152736,843],{"emptyLinePlaceholder":842},[139,152738,152739],{"class":141,"line":2160},[139,152740,843],{"emptyLinePlaceholder":842},[139,152742,152743,152745,152747],{"class":141,"line":2188},[139,152744,152599],{"class":145},[139,152746,150],{"class":149},[139,152748,152604],{"class":145},[139,152750,152751,152754,152756],{"class":141,"line":3944},[139,152752,152753],{"class":145},"cat ",[139,152755,150],{"class":149},[139,152757,152758],{"class":145}," Cat()\n",[139,152760,152761],{"class":141,"line":3963},[139,152762,843],{"emptyLinePlaceholder":842},[139,152764,152765],{"class":141,"line":3968},[139,152766,152767],{"class":145},"dog.speak()\n",[139,152769,152770],{"class":141,"line":3982},[139,152771,152772],{"class":145},"cat.speak()\n",[14,152774,152776],{"id":152775},"_1110-super","11.10 super",[19,152778,152779,152780,152783],{},"子类可以通过 ",[50,152781,152782],{},"super()"," 调用父类方法。",[130,152785,152787],{"className":132,"code":152786,"language":134,"meta":135,"style":135},"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",[50,152788,152789,152797,152806,152816,152820,152824,152836,152845,152856,152866,152870,152874,152890],{"__ignoreMap":135},[139,152790,152791,152793,152795],{"class":141,"line":142},[139,152792,915],{"class":149},[139,152794,17837],{"class":781},[139,152796,246],{"class":145},[139,152798,152799,152801,152803],{"class":141,"line":210},[139,152800,33053],{"class":149},[139,152802,33056],{"class":153},[139,152804,152805],{"class":145},"(self, name):\n",[139,152807,152808,152810,152812,152814],{"class":141,"line":254},[139,152809,33097],{"class":153},[139,152811,151990],{"class":145},[139,152813,150],{"class":149},[139,152815,151995],{"class":145},[139,152817,152818],{"class":141,"line":262},[139,152819,843],{"emptyLinePlaceholder":842},[139,152821,152822],{"class":141,"line":313},[139,152823,843],{"emptyLinePlaceholder":842},[139,152825,152826,152828,152830,152832,152834],{"class":141,"line":462},[139,152827,915],{"class":149},[139,152829,10172],{"class":781},[139,152831,157],{"class":145},[139,152833,21313],{"class":781},[139,152835,558],{"class":145},[139,152837,152838,152840,152842],{"class":141,"line":474},[139,152839,33053],{"class":149},[139,152841,33056],{"class":153},[139,152843,152844],{"class":145},"(self, name, score):\n",[139,152846,152847,152849,152851,152853],{"class":141,"line":484},[139,152848,33069],{"class":153},[139,152850,19528],{"class":145},[139,152852,33081],{"class":153},[139,152854,152855],{"class":145},"(name)\n",[139,152857,152858,152860,152862,152864],{"class":141,"line":989},[139,152859,33097],{"class":153},[139,152861,152014],{"class":145},[139,152863,150],{"class":149},[139,152865,3876],{"class":145},[139,152867,152868],{"class":141,"line":994},[139,152869,843],{"emptyLinePlaceholder":842},[139,152871,152872],{"class":141,"line":999},[139,152873,843],{"emptyLinePlaceholder":842},[139,152875,152876,152878,152880,152882,152884,152886,152888],{"class":141,"line":1006},[139,152877,151682],{"class":145},[139,152879,150],{"class":149},[139,152881,152085],{"class":145},[139,152883,1441],{"class":160},[139,152885,413],{"class":145},[139,152887,2277],{"class":153},[139,152889,164],{"class":145},[139,152891,152892,152894],{"class":141,"line":1027},[139,152893,213],{"class":153},[139,152895,152896],{"class":145},"(student.name, student.score)\n",[14,152898,152900],{"id":152899},"_1111-多态","11.11 多态",[19,152902,152903],{},"多态指不同对象响应同一个方法，表现出不同结果。",[130,152905,152907],{"className":132,"code":152906,"language":134,"meta":135,"style":135},"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",[50,152908,152909,152917,152925,152935,152939,152943,152951,152959,152969,152973,152977,152987,152992,152996,153000,153005],{"__ignoreMap":135},[139,152910,152911,152913,152915],{"class":141,"line":142},[139,152912,915],{"class":149},[139,152914,152559],{"class":781},[139,152916,246],{"class":145},[139,152918,152919,152921,152923],{"class":141,"line":210},[139,152920,33053],{"class":149},[139,152922,152641],{"class":781},[139,152924,33059],{"class":145},[139,152926,152927,152929,152931,152933],{"class":141,"line":254},[139,152928,34698],{"class":153},[139,152930,157],{"class":145},[139,152932,152584],{"class":160},[139,152934,164],{"class":145},[139,152936,152937],{"class":141,"line":262},[139,152938,843],{"emptyLinePlaceholder":842},[139,152940,152941],{"class":141,"line":313},[139,152942,843],{"emptyLinePlaceholder":842},[139,152944,152945,152947,152949],{"class":141,"line":462},[139,152946,915],{"class":149},[139,152948,152707],{"class":781},[139,152950,246],{"class":145},[139,152952,152953,152955,152957],{"class":141,"line":474},[139,152954,33053],{"class":149},[139,152956,152641],{"class":781},[139,152958,33059],{"class":145},[139,152960,152961,152963,152965,152967],{"class":141,"line":484},[139,152962,34698],{"class":153},[139,152964,157],{"class":145},[139,152966,152730],{"class":160},[139,152968,164],{"class":145},[139,152970,152971],{"class":141,"line":989},[139,152972,843],{"emptyLinePlaceholder":842},[139,152974,152975],{"class":141,"line":994},[139,152976,843],{"emptyLinePlaceholder":842},[139,152978,152979,152981,152984],{"class":141,"line":999},[139,152980,778],{"class":149},[139,152982,152983],{"class":781}," make_sound",[139,152985,152986],{"class":145},"(animal):\n",[139,152988,152989],{"class":141,"line":1006},[139,152990,152991],{"class":145},"    animal.speak()\n",[139,152993,152994],{"class":141,"line":1027},[139,152995,843],{"emptyLinePlaceholder":842},[139,152997,152998],{"class":141,"line":1040},[139,152999,843],{"emptyLinePlaceholder":842},[139,153001,153002],{"class":141,"line":2160},[139,153003,153004],{"class":145},"make_sound(Dog())\n",[139,153006,153007],{"class":141,"line":2188},[139,153008,153009],{"class":145},"make_sound(Cat())\n",[19,153011,153012],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153014,153016],{"id":153015},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153018,153019],{},"实例属性属于对象：",[130,153021,153023],{"className":132,"code":153022,"language":134,"meta":135,"style":135},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[50,153024,153025,153033,153041],{"__ignoreMap":135},[139,153026,153027,153029,153031],{"class":141,"line":142},[139,153028,915],{"class":149},[139,153030,10172],{"class":781},[139,153032,246],{"class":145},[139,153034,153035,153037,153039],{"class":141,"line":210},[139,153036,33053],{"class":149},[139,153038,33056],{"class":153},[139,153040,152805],{"class":145},[139,153042,153043,153045,153047,153049],{"class":141,"line":254},[139,153044,33097],{"class":153},[139,153046,151990],{"class":145},[139,153048,150],{"class":149},[139,153050,151995],{"class":145},[19,153052,153053],{},"类属性属于类，所有对象共享：",[130,153055,153057],{"className":132,"code":153056,"language":134,"meta":135,"style":135},"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",[50,153058,153059,153067,153077,153081,153089,153099,153103,153107,153120,153133,153137,153144,153151],{"__ignoreMap":135},[139,153060,153061,153063,153065],{"class":141,"line":142},[139,153062,915],{"class":149},[139,153064,10172],{"class":781},[139,153066,246],{"class":145},[139,153068,153069,153072,153074],{"class":141,"line":210},[139,153070,153071],{"class":145},"    school ",[139,153073,150],{"class":149},[139,153075,153076],{"class":160}," \"黑马学校\"\n",[139,153078,153079],{"class":141,"line":254},[139,153080,843],{"emptyLinePlaceholder":842},[139,153082,153083,153085,153087],{"class":141,"line":262},[139,153084,33053],{"class":149},[139,153086,33056],{"class":153},[139,153088,152805],{"class":145},[139,153090,153091,153093,153095,153097],{"class":141,"line":313},[139,153092,33097],{"class":153},[139,153094,151990],{"class":145},[139,153096,150],{"class":149},[139,153098,151995],{"class":145},[139,153100,153101],{"class":141,"line":462},[139,153102,843],{"emptyLinePlaceholder":842},[139,153104,153105],{"class":141,"line":474},[139,153106,843],{"emptyLinePlaceholder":842},[139,153108,153109,153112,153114,153116,153118],{"class":141,"line":484},[139,153110,153111],{"class":145},"s1 ",[139,153113,150],{"class":149},[139,153115,152085],{"class":145},[139,153117,1441],{"class":160},[139,153119,164],{"class":145},[139,153121,153122,153125,153127,153129,153131],{"class":141,"line":989},[139,153123,153124],{"class":145},"s2 ",[139,153126,150],{"class":149},[139,153128,152085],{"class":145},[139,153130,1446],{"class":160},[139,153132,164],{"class":145},[139,153134,153135],{"class":141,"line":994},[139,153136,843],{"emptyLinePlaceholder":842},[139,153138,153139,153141],{"class":141,"line":999},[139,153140,213],{"class":153},[139,153142,153143],{"class":145},"(s1.school)\n",[139,153145,153146,153148],{"class":141,"line":1006},[139,153147,213],{"class":153},[139,153149,153150],{"class":145},"(s2.school)\n",[139,153152,153153,153155],{"class":141,"line":1027},[139,153154,213],{"class":153},[139,153156,153157],{"class":145},"(Student.school)\n",[19,153159,153160],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153162,153164],{"id":153163},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1217,153166,153168],{"id":153167},"_11131-类方法","11.13.1 类方法",[19,153170,153171,153172,153175,153176,170],{},"类方法使用 ",[50,153173,153174],{},"@classmethod","，第一个参数通常是 ",[50,153177,153178],{},"cls",[130,153180,153182],{"className":132,"code":153181,"language":134,"meta":135,"style":135},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[50,153183,153184,153192,153200,153204,153212,153222,153232,153236,153240],{"__ignoreMap":135},[139,153185,153186,153188,153190],{"class":141,"line":142},[139,153187,915],{"class":149},[139,153189,10172],{"class":781},[139,153191,246],{"class":145},[139,153193,153194,153196,153198],{"class":141,"line":210},[139,153195,153071],{"class":145},[139,153197,150],{"class":149},[139,153199,153076],{"class":160},[139,153201,153202],{"class":141,"line":254},[139,153203,843],{"emptyLinePlaceholder":842},[139,153205,153206,153209],{"class":141,"line":262},[139,153207,153208],{"class":781},"    @",[139,153210,153211],{"class":153},"classmethod\n",[139,153213,153214,153216,153219],{"class":141,"line":313},[139,153215,33053],{"class":149},[139,153217,153218],{"class":781}," get_school",[139,153220,153221],{"class":145},"(cls):\n",[139,153223,153224,153226,153229],{"class":141,"line":462},[139,153225,2085],{"class":149},[139,153227,153228],{"class":153}," cls",[139,153230,153231],{"class":145},".school\n",[139,153233,153234],{"class":141,"line":474},[139,153235,843],{"emptyLinePlaceholder":842},[139,153237,153238],{"class":141,"line":484},[139,153239,843],{"emptyLinePlaceholder":842},[139,153241,153242,153244],{"class":141,"line":989},[139,153243,213],{"class":153},[139,153245,153246],{"class":145},"(Student.get_school())\n",[1217,153248,153250],{"id":153249},"_11132-静态方法","11.13.2 静态方法",[19,153252,153253,153254,153257],{},"静态方法使用 ",[50,153255,153256],{},"@staticmethod","，不需要访问实例和类。",[130,153259,153261],{"className":132,"code":153260,"language":134,"meta":135,"style":135},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[50,153262,153263,153272,153279,153287,153297,153301,153305],{"__ignoreMap":135},[139,153264,153265,153267,153270],{"class":141,"line":142},[139,153266,915],{"class":149},[139,153268,153269],{"class":781}," MathUtils",[139,153271,246],{"class":145},[139,153273,153274,153276],{"class":141,"line":210},[139,153275,153208],{"class":781},[139,153277,153278],{"class":153},"staticmethod\n",[139,153280,153281,153283,153285],{"class":141,"line":254},[139,153282,33053],{"class":149},[139,153284,1134],{"class":781},[139,153286,1137],{"class":145},[139,153288,153289,153291,153293,153295],{"class":141,"line":262},[139,153290,2085],{"class":149},[139,153292,1144],{"class":145},[139,153294,1147],{"class":149},[139,153296,1150],{"class":145},[139,153298,153299],{"class":141,"line":313},[139,153300,843],{"emptyLinePlaceholder":842},[139,153302,153303],{"class":141,"line":462},[139,153304,843],{"emptyLinePlaceholder":842},[139,153306,153307,153309,153312,153314,153316,153318],{"class":141,"line":474},[139,153308,213],{"class":153},[139,153310,153311],{"class":145},"(MathUtils.add(",[139,153313,410],{"class":153},[139,153315,413],{"class":145},[139,153317,416],{"class":153},[139,153319,207],{"class":145},[19,153321,153322],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153324,153326],{"id":153325},"_1114-dataclass","11.14 dataclass",[19,153328,153329,153332],{},[50,153330,153331],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[130,153334,153336],{"className":132,"code":153335,"language":134,"meta":135,"style":135},"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",[50,153337,153338,153350,153354,153358,153363,153371,153379,153387,153395,153399,153403,153423],{"__ignoreMap":135},[139,153339,153340,153342,153345,153347],{"class":141,"line":142},[139,153341,1265],{"class":149},[139,153343,153344],{"class":145}," dataclasses ",[139,153346,1064],{"class":149},[139,153348,153349],{"class":145}," dataclass\n",[139,153351,153352],{"class":141,"line":210},[139,153353,843],{"emptyLinePlaceholder":842},[139,153355,153356],{"class":141,"line":254},[139,153357,843],{"emptyLinePlaceholder":842},[139,153359,153360],{"class":141,"line":262},[139,153361,153362],{"class":781},"@dataclass\n",[139,153364,153365,153367,153369],{"class":141,"line":313},[139,153366,915],{"class":149},[139,153368,10172],{"class":781},[139,153370,246],{"class":145},[139,153372,153373,153376],{"class":141,"line":462},[139,153374,153375],{"class":145},"    name: ",[139,153377,153378],{"class":153},"str\n",[139,153380,153381,153384],{"class":141,"line":474},[139,153382,153383],{"class":145},"    age: ",[139,153385,153386],{"class":153},"int\n",[139,153388,153389,153392],{"class":141,"line":484},[139,153390,153391],{"class":145},"    score: ",[139,153393,153394],{"class":153},"float\n",[139,153396,153397],{"class":141,"line":989},[139,153398,843],{"emptyLinePlaceholder":842},[139,153400,153401],{"class":141,"line":994},[139,153402,843],{"emptyLinePlaceholder":842},[139,153404,153405,153407,153409,153411,153413,153415,153417,153419,153421],{"class":141,"line":999},[139,153406,151682],{"class":145},[139,153408,150],{"class":149},[139,153410,152085],{"class":145},[139,153412,1441],{"class":160},[139,153414,413],{"class":145},[139,153416,3085],{"class":153},[139,153418,413],{"class":145},[139,153420,2277],{"class":153},[139,153422,164],{"class":145},[139,153424,153425,153427],{"class":141,"line":1006},[139,153426,213],{"class":153},[139,153428,152241],{"class":145},[19,153430,153431,153432,2655,153434,153437],{},"它会自动生成 ",[50,153433,33081],{},[50,153435,153436],{},"__repr__"," 等方法。适合数据模型类。",[14,153439,153441],{"id":153440},"_1115-小案例学生类","11.15 小案例：学生类",[130,153443,153445],{"className":132,"code":153444,"language":134,"meta":135,"style":135},"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",[50,153446,153447,153455,153464,153476,153486,153496,153506,153510,153519,153532,153536,153545,153551,153563,153575,153587,153599,153603,153607,153613,153623,153632,153642,153650,153658,153666,153670,153674,153682,153718,153722,153726,153751,153758],{"__ignoreMap":135},[139,153448,153449,153451,153453],{"class":141,"line":142},[139,153450,915],{"class":149},[139,153452,10172],{"class":781},[139,153454,246],{"class":145},[139,153456,153457,153459,153461],{"class":141,"line":210},[139,153458,33053],{"class":149},[139,153460,33056],{"class":153},[139,153462,153463],{"class":145},"(self, student_id, name, age, score):\n",[139,153465,153466,153468,153471,153473],{"class":141,"line":254},[139,153467,33097],{"class":153},[139,153469,153470],{"class":145},".student_id ",[139,153472,150],{"class":149},[139,153474,153475],{"class":145}," student_id\n",[139,153477,153478,153480,153482,153484],{"class":141,"line":262},[139,153479,33097],{"class":153},[139,153481,151990],{"class":145},[139,153483,150],{"class":149},[139,153485,151995],{"class":145},[139,153487,153488,153490,153492,153494],{"class":141,"line":313},[139,153489,33097],{"class":153},[139,153491,152002],{"class":145},[139,153493,150],{"class":149},[139,153495,152007],{"class":145},[139,153497,153498,153500,153502,153504],{"class":141,"line":462},[139,153499,33097],{"class":153},[139,153501,152014],{"class":145},[139,153503,150],{"class":149},[139,153505,3876],{"class":145},[139,153507,153508],{"class":141,"line":474},[139,153509,843],{"emptyLinePlaceholder":842},[139,153511,153512,153514,153517],{"class":141,"line":484},[139,153513,33053],{"class":149},[139,153515,153516],{"class":781}," is_passed",[139,153518,33059],{"class":145},[139,153520,153521,153523,153525,153527,153529],{"class":141,"line":989},[139,153522,2085],{"class":149},[139,153524,41116],{"class":153},[139,153526,152014],{"class":145},[139,153528,3998],{"class":149},[139,153530,153531],{"class":153}," 60\n",[139,153533,153534],{"class":141,"line":994},[139,153535,843],{"emptyLinePlaceholder":842},[139,153537,153538,153540,153543],{"class":141,"line":999},[139,153539,33053],{"class":149},[139,153541,153542],{"class":781}," to_dict",[139,153544,33059],{"class":145},[139,153546,153547,153549],{"class":141,"line":1006},[139,153548,2085],{"class":149},[139,153550,17840],{"class":145},[139,153552,153553,153556,153558,153560],{"class":141,"line":1027},[139,153554,153555],{"class":160},"            \"student_id\"",[139,153557,2265],{"class":145},[139,153559,33075],{"class":153},[139,153561,153562],{"class":145},".student_id,\n",[139,153564,153565,153568,153570,153572],{"class":141,"line":1040},[139,153566,153567],{"class":160},"            \"name\"",[139,153569,2265],{"class":145},[139,153571,33075],{"class":153},[139,153573,153574],{"class":145},".name,\n",[139,153576,153577,153580,153582,153584],{"class":141,"line":2160},[139,153578,153579],{"class":160},"            \"age\"",[139,153581,2265],{"class":145},[139,153583,33075],{"class":153},[139,153585,153586],{"class":145},".age,\n",[139,153588,153589,153592,153594,153596],{"class":141,"line":2188},[139,153590,153591],{"class":160},"            \"score\"",[139,153593,2265],{"class":145},[139,153595,33075],{"class":153},[139,153597,153598],{"class":145},".score,\n",[139,153600,153601],{"class":141,"line":3944},[139,153602,4812],{"class":145},[139,153604,153605],{"class":141,"line":3963},[139,153606,843],{"emptyLinePlaceholder":842},[139,153608,153609,153611],{"class":141,"line":3968},[139,153610,153208],{"class":781},[139,153612,153211],{"class":153},[139,153614,153615,153617,153620],{"class":141,"line":3982},[139,153616,33053],{"class":149},[139,153618,153619],{"class":781}," from_dict",[139,153621,153622],{"class":145},"(cls, data):\n",[139,153624,153625,153627,153629],{"class":141,"line":3987},[139,153626,2085],{"class":149},[139,153628,153228],{"class":153},[139,153630,153631],{"class":145},"(\n",[139,153633,153634,153637,153640],{"class":141,"line":4014},[139,153635,153636],{"class":145},"            data[",[139,153638,153639],{"class":160},"\"student_id\"",[139,153641,90064],{"class":145},[139,153643,153644,153646,153648],{"class":141,"line":4019},[139,153645,153636],{"class":145},[139,153647,2262],{"class":160},[139,153649,90064],{"class":145},[139,153651,153652,153654,153656],{"class":141,"line":4036},[139,153653,153636],{"class":145},[139,153655,71354],{"class":160},[139,153657,90064],{"class":145},[139,153659,153660,153662,153664],{"class":141,"line":4041},[139,153661,153636],{"class":145},[139,153663,2272],{"class":160},[139,153665,90064],{"class":145},[139,153667,153668],{"class":141,"line":4046},[139,153669,40369],{"class":145},[139,153671,153672],{"class":141,"line":4051},[139,153673,843],{"emptyLinePlaceholder":842},[139,153675,153676,153678,153680],{"class":141,"line":4065},[139,153677,33053],{"class":149},[139,153679,152180],{"class":153},[139,153681,33059],{"class":145},[139,153683,153684,153686,153688,153690,153692,153695,153697,153700,153702,153704,153706,153708,153710,153712,153714,153716],{"class":141,"line":4070},[139,153685,2085],{"class":149},[139,153687,152189],{"class":149},[139,153689,634],{"class":160},[139,153691,151653],{"class":153},[139,153693,153694],{"class":145},".student_id",[139,153696,631],{"class":153},[139,153698,153699],{"class":153}," {self",[139,153701,82529],{"class":145},[139,153703,631],{"class":153},[139,153705,153699],{"class":153},[139,153707,82541],{"class":145},[139,153709,631],{"class":153},[139,153711,153699],{"class":153},[139,153713,152062],{"class":145},[139,153715,631],{"class":153},[139,153717,27396],{"class":160},[139,153719,153720],{"class":141,"line":4860},[139,153721,843],{"emptyLinePlaceholder":842},[139,153723,153724],{"class":141,"line":4874},[139,153725,843],{"emptyLinePlaceholder":842},[139,153727,153728,153730,153732,153734,153737,153739,153741,153743,153745,153747,153749],{"class":141,"line":4882},[139,153729,151682],{"class":145},[139,153731,150],{"class":149},[139,153733,152085],{"class":145},[139,153735,153736],{"class":160},"\"001\"",[139,153738,413],{"class":145},[139,153740,1441],{"class":160},[139,153742,413],{"class":145},[139,153744,3085],{"class":153},[139,153746,413],{"class":145},[139,153748,2277],{"class":153},[139,153750,164],{"class":145},[139,153752,153753,153755],{"class":141,"line":4887},[139,153754,213],{"class":153},[139,153756,153757],{"class":145},"(student.is_passed())\n",[139,153759,153760,153762],{"class":141,"line":4893},[139,153761,213],{"class":153},[139,153763,153764],{"class":145},"(student.to_dict())\n",[19,153766,153767,103245,153770,153773],{},[50,153768,153769],{},"to_dict()",[50,153771,153772],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153775,153777],{"id":153776},"_1116-易错点","11.16 易错点",[1760,153779,153780,153786,153792,153797,153800,153803],{},[1763,153781,153782,153783,170],{},"类名推荐使用大驼峰，如 ",[50,153784,153785],{},"StudentManager",[1763,153787,153788,153789,153791],{},"方法第一个参数必须写 ",[50,153790,33075],{},"，调用时不用传。",[1763,153793,153794,153796],{},[50,153795,33081],{}," 不是普通方法，它在创建对象时自动执行。",[1763,153798,153799],{},"私有属性不是绝对安全，只是约定和名称改写。",[1763,153801,153802],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1763,153804,153805],{},"类中方法太多时，说明职责可能过重。",[14,153807,153809],{"id":153808},"_1117-本章练习","11.17 本章练习",[1760,153811,153812,153818,153824,153829,153842],{},[1763,153813,153814,153815,153817],{},"定义 ",[50,153816,151768],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1763,153819,153814,153820,153823],{},[50,153821,153822],{},"Account"," 类，实现存款、取款、查询余额。",[1763,153825,153814,153826,153828],{},[50,153827,19493],{}," 类，计算圆的周长和面积。",[1763,153830,153814,153831,2655,153834,153837,153838,153841],{},[50,153832,153833],{},"Dog",[50,153835,153836],{},"Cat"," 类，并用同一个函数调用它们的 ",[50,153839,153840],{},"speak()"," 方法。",[1763,153843,106589,153844,153846,153847,170],{},[50,153845,153331],{}," 定义一个商品类 ",[50,153848,153849],{},"Product",[2348,153851,153852],{},"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":135,"searchDepth":210,"depth":210,"links":153854},[153855,153856,153857,153858,153859,153860,153862,153863,153864,153865,153866,153867,153868,153872,153873,153874,153875],{"id":151533,"depth":210,"text":151534},{"id":151716,"depth":210,"text":151717},{"id":151779,"depth":210,"text":151780},{"id":151856,"depth":210,"text":151857},{"id":151955,"depth":210,"text":151956},{"id":152118,"depth":210,"text":153861},"11.6 str",{"id":152244,"depth":210,"text":152245},{"id":152506,"depth":210,"text":152507},{"id":152620,"depth":210,"text":152621},{"id":152775,"depth":210,"text":152776},{"id":152899,"depth":210,"text":152900},{"id":153015,"depth":210,"text":153016},{"id":153163,"depth":210,"text":153164,"children":153869},[153870,153871],{"id":153167,"depth":254,"text":153168},{"id":153249,"depth":254,"text":153250},{"id":153325,"depth":210,"text":153326},{"id":153440,"depth":210,"text":153441},{"id":153776,"depth":210,"text":153777},{"id":153808,"depth":210,"text":153809},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151525,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153882,"title":153883,"body":153884,"description":2384,"extension":2385,"meta":157188,"navigation":842,"path":157189,"seo":157190,"stem":157191,"__hash__":157192},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153885,"toc":157164},[153886,153889,153893,153896,153899,153928,153931,153939,153943,153947,153950,153973,153976,153982,153986,155425,155428,155449,155453,155456,155468,155471,155655,155658,155784,155787,155791,155795,155931,155935,156021,156025,156107,156111,156148,156152,156341,156345,156348,156578,156582,156585,156766,156769,156773,156776,156782,156785,156810,156814,156817,156831,156834,156859,156862,156876,156879,156896,156899,156916,156919,156936,156940,156966,156970,156993,156997,157000,157002,157008,157010,157030,157033,157039,157045,157049,157052,157128,157131,157135,157161],[10,153887,153883],{"id":153888},"_12-综合案例与复习路线",[14,153890,153892],{"id":153891},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153894,153895],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153897,153898],{},"一个合格的入门综合项目最好覆盖：",[1760,153900,153901,153904,153907,153910,153913,153916,153919,153922,153925],{},[1763,153902,153903],{},"输入输出。",[1763,153905,153906],{},"判断和循环。",[1763,153908,153909],{},"函数拆分。",[1763,153911,153912],{},"列表、字典等容器。",[1763,153914,153915],{},"文件持久化。",[1763,153917,153918],{},"异常处理。",[1763,153920,153921],{},"模块拆分。",[1763,153923,153924],{},"可选：面向对象。",[1763,153926,153927],{},"可选：数据可视化。",[19,153929,153930],{},"本章整理两个方向：",[1760,153932,153933,153936],{},[1763,153934,153935],{},"学生管理系统。",[1763,153937,153938],{},"销售数据统计和可视化。",[14,153940,153942],{"id":153941},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1217,153944,153946],{"id":153945},"_1221-需求","12.2.1 需求",[19,153948,153949],{},"实现一个命令行学生管理系统：",[1760,153951,153952,153955,153958,153961,153964,153967,153970],{},[1763,153953,153954],{},"添加学生。",[1763,153956,153957],{},"删除学生。",[1763,153959,153960],{},"修改学生。",[1763,153962,153963],{},"查询学生。",[1763,153965,153966],{},"显示所有学生。",[1763,153968,153969],{},"保存到 JSON 文件。",[1763,153971,153972],{},"程序启动时自动读取 JSON 文件。",[19,153974,153975],{},"学生字段：",[130,153977,153980],{"className":153978,"code":153979,"language":645,"meta":135},[643],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[50,153981,153979],{"__ignoreMap":135},[14,153983,153985],{"id":153984},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[130,153987,153989],{"className":132,"code":153988,"language":134,"meta":135,"style":135},"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",[50,153990,153991,153997,154007,154011,154024,154028,154032,154041,154053,154059,154063,154069,154100,154110,154117,154128,154134,154138,154142,154152,154182,154207,154211,154215,154224,154235,154246,154257,154268,154279,154290,154301,154305,154309,154319,154331,154347,154354,154361,154365,154369,154379,154387,154394,154407,154416,154427,154431,154435,154444,154452,154458,154470,154478,154489,154493,154497,154506,154522,154526,154533,154544,154549,154553,154569,154582,154597,154601,154606,154614,154622,154630,154638,154642,154647,154658,154662,154666,154675,154690,154700,154704,154716,154727,154731,154735,154740,154744,154755,154759,154763,154772,154787,154795,154799,154811,154821,154825,154829,154844,154857,154870,154874,154887,154899,154911,154915,154919,154930,154934,154938,154947,154962,154970,154974,154986,154996,155000,155004,155009,155013,155017,155027,155033,155055,155074,155093,155112,155117,155121,155125,155134,155142,155153,155157,155161,155187,155197,155202,155206,155210,155218,155228,155232,155240,155245,155261,155265,155279,155284,155298,155303,155316,155321,155334,155339,155352,155357,155370,155381,155385,155391,155401,155405,155409,155421],{"__ignoreMap":135},[139,153992,153993,153995],{"class":141,"line":142},[139,153994,1064],{"class":149},[139,153996,2030],{"class":145},[139,153998,153999,154001,154003,154005],{"class":141,"line":210},[139,154000,1265],{"class":149},[139,154002,2037],{"class":145},[139,154004,1064],{"class":149},[139,154006,2042],{"class":145},[139,154008,154009],{"class":141,"line":254},[139,154010,843],{"emptyLinePlaceholder":842},[139,154012,154013,154016,154018,154020,154022],{"class":141,"line":262},[139,154014,154015],{"class":153},"DATA_FILE",[139,154017,15836],{"class":149},[139,154019,110766],{"class":145},[139,154021,2252],{"class":160},[139,154023,164],{"class":145},[139,154025,154026],{"class":141,"line":313},[139,154027,843],{"emptyLinePlaceholder":842},[139,154029,154030],{"class":141,"line":462},[139,154031,843],{"emptyLinePlaceholder":842},[139,154033,154034,154036,154039],{"class":141,"line":474},[139,154035,778],{"class":149},[139,154037,154038],{"class":781}," load_students",[139,154040,34200],{"class":145},[139,154042,154043,154045,154047,154050],{"class":141,"line":484},[139,154044,790],{"class":149},[139,154046,2077],{"class":149},[139,154048,154049],{"class":153}," DATA_FILE",[139,154051,154052],{"class":145},".exists():\n",[139,154054,154055,154057],{"class":141,"line":989},[139,154056,2085],{"class":149},[139,154058,2088],{"class":145},[139,154060,154061],{"class":141,"line":994},[139,154062,843],{"emptyLinePlaceholder":842},[139,154064,154065,154067],{"class":141,"line":999},[139,154066,128002],{"class":149},[139,154068,246],{"class":145},[139,154070,154071,154074,154076,154078,154080,154082,154084,154086,154088,154090,154092,154094,154096,154098],{"class":141,"line":1006},[139,154072,154073],{"class":149},"        with",[139,154075,2100],{"class":153},[139,154077,157],{"class":145},[139,154079,154015],{"class":153},[139,154081,413],{"class":145},[139,154083,2106],{"class":160},[139,154085,413],{"class":145},[139,154087,2112],{"class":2111},[139,154089,150],{"class":149},[139,154091,2117],{"class":160},[139,154093,2120],{"class":145},[139,154095,1035],{"class":149},[139,154097,2125],{"class":2111},[139,154099,246],{"class":145},[139,154101,154102,154104,154106,154108],{"class":141,"line":1027},[139,154103,17999],{"class":149},[139,154105,2134],{"class":145},[139,154107,2137],{"class":2111},[139,154109,164],{"class":145},[139,154111,154112,154114],{"class":141,"line":1040},[139,154113,128030],{"class":149},[139,154115,154116],{"class":145}," json.JSONDecodeError:\n",[139,154118,154119,154121,154123,154126],{"class":141,"line":2160},[139,154120,34698],{"class":153},[139,154122,157],{"class":145},[139,154124,154125],{"class":160},"\"数据文件格式错误，已使用空数据启动\"",[139,154127,164],{"class":145},[139,154129,154130,154132],{"class":141,"line":2188},[139,154131,2085],{"class":149},[139,154133,2088],{"class":145},[139,154135,154136],{"class":141,"line":3944},[139,154137,843],{"emptyLinePlaceholder":842},[139,154139,154140],{"class":141,"line":3963},[139,154141,843],{"emptyLinePlaceholder":842},[139,154143,154144,154146,154149],{"class":141,"line":3968},[139,154145,778],{"class":149},[139,154147,154148],{"class":781}," save_students",[139,154150,154151],{"class":145},"(students):\n",[139,154153,154154,154156,154158,154160,154162,154164,154166,154168,154170,154172,154174,154176,154178,154180],{"class":141,"line":3982},[139,154155,2097],{"class":149},[139,154157,2100],{"class":153},[139,154159,157],{"class":145},[139,154161,154015],{"class":153},[139,154163,413],{"class":145},[139,154165,2169],{"class":160},[139,154167,413],{"class":145},[139,154169,2112],{"class":2111},[139,154171,150],{"class":149},[139,154173,2117],{"class":160},[139,154175,2120],{"class":145},[139,154177,1035],{"class":149},[139,154179,2125],{"class":2111},[139,154181,246],{"class":145},[139,154183,154184,154187,154189,154191,154193,154195,154197,154199,154201,154203,154205],{"class":141,"line":3987},[139,154185,154186],{"class":145},"        json.dump(students, ",[139,154188,2137],{"class":2111},[139,154190,413],{"class":145},[139,154192,2198],{"class":2111},[139,154194,150],{"class":149},[139,154196,2203],{"class":153},[139,154198,413],{"class":145},[139,154200,2208],{"class":2111},[139,154202,150],{"class":149},[139,154204,416],{"class":153},[139,154206,164],{"class":145},[139,154208,154209],{"class":141,"line":4014},[139,154210,843],{"emptyLinePlaceholder":842},[139,154212,154213],{"class":141,"line":4019},[139,154214,843],{"emptyLinePlaceholder":842},[139,154216,154217,154219,154222],{"class":141,"line":4036},[139,154218,778],{"class":149},[139,154220,154221],{"class":781}," show_menu",[139,154223,34200],{"class":145},[139,154225,154226,154228,154230,154233],{"class":141,"line":4041},[139,154227,302],{"class":153},[139,154229,157],{"class":145},[139,154231,154232],{"class":160},"\"====== 学生管理系统 ======\"",[139,154234,164],{"class":145},[139,154236,154237,154239,154241,154244],{"class":141,"line":4046},[139,154238,302],{"class":153},[139,154240,157],{"class":145},[139,154242,154243],{"class":160},"\"1. 添加学生\"",[139,154245,164],{"class":145},[139,154247,154248,154250,154252,154255],{"class":141,"line":4051},[139,154249,302],{"class":153},[139,154251,157],{"class":145},[139,154253,154254],{"class":160},"\"2. 删除学生\"",[139,154256,164],{"class":145},[139,154258,154259,154261,154263,154266],{"class":141,"line":4065},[139,154260,302],{"class":153},[139,154262,157],{"class":145},[139,154264,154265],{"class":160},"\"3. 修改学生\"",[139,154267,164],{"class":145},[139,154269,154270,154272,154274,154277],{"class":141,"line":4070},[139,154271,302],{"class":153},[139,154273,157],{"class":145},[139,154275,154276],{"class":160},"\"4. 查询学生\"",[139,154278,164],{"class":145},[139,154280,154281,154283,154285,154288],{"class":141,"line":4860},[139,154282,302],{"class":153},[139,154284,157],{"class":145},[139,154286,154287],{"class":160},"\"5. 显示所有学生\"",[139,154289,164],{"class":145},[139,154291,154292,154294,154296,154299],{"class":141,"line":4874},[139,154293,302],{"class":153},[139,154295,157],{"class":145},[139,154297,154298],{"class":160},"\"0. 退出系统\"",[139,154300,164],{"class":145},[139,154302,154303],{"class":141,"line":4882},[139,154304,843],{"emptyLinePlaceholder":842},[139,154306,154307],{"class":141,"line":4887},[139,154308,843],{"emptyLinePlaceholder":842},[139,154310,154311,154313,154316],{"class":141,"line":4893},[139,154312,778],{"class":149},[139,154314,154315],{"class":781}," find_student",[139,154317,154318],{"class":145},"(students, student_id):\n",[139,154320,154321,154323,154326,154328],{"class":141,"line":4899},[139,154322,5482],{"class":149},[139,154324,154325],{"class":145}," student ",[139,154327,1976],{"class":149},[139,154329,154330],{"class":145}," students:\n",[139,154332,154333,154335,154338,154340,154342,154344],{"class":141,"line":4904},[139,154334,4780],{"class":149},[139,154336,154337],{"class":145}," student[",[139,154339,153639],{"class":160},[139,154341,6721],{"class":145},[139,154343,5232],{"class":149},[139,154345,154346],{"class":145}," student_id:\n",[139,154348,154349,154351],{"class":141,"line":10222},[139,154350,17999],{"class":149},[139,154352,154353],{"class":145}," student\n",[139,154355,154356,154358],{"class":141,"line":10246},[139,154357,978],{"class":149},[139,154359,154360],{"class":153}," None\n",[139,154362,154363],{"class":141,"line":10251},[139,154364,843],{"emptyLinePlaceholder":842},[139,154366,154367],{"class":141,"line":10257},[139,154368,843],{"emptyLinePlaceholder":842},[139,154370,154371,154373,154376],{"class":141,"line":10284},[139,154372,778],{"class":149},[139,154374,154375],{"class":781}," input_int",[139,154377,154378],{"class":145},"(prompt):\n",[139,154380,154381,154383,154385],{"class":141,"line":10289},[139,154382,4536],{"class":149},[139,154384,97519],{"class":153},[139,154386,246],{"class":145},[139,154388,154389,154392],{"class":141,"line":10295},[139,154390,154391],{"class":149},"        try",[139,154393,246],{"class":145},[139,154395,154396,154398,154400,154402,154404],{"class":141,"line":10307},[139,154397,17999],{"class":149},[139,154399,154],{"class":153},[139,154401,157],{"class":145},[139,154403,199],{"class":153},[139,154405,154406],{"class":145},"(prompt))\n",[139,154408,154409,154412,154414],{"class":141,"line":10319},[139,154410,154411],{"class":149},"        except",[139,154413,370],{"class":153},[139,154415,246],{"class":145},[139,154417,154418,154420,154422,154425],{"class":141,"line":10331},[139,154419,36893],{"class":153},[139,154421,157],{"class":145},[139,154423,154424],{"class":160},"\"请输入整数\"",[139,154426,164],{"class":145},[139,154428,154429],{"class":141,"line":11990},[139,154430,843],{"emptyLinePlaceholder":842},[139,154432,154433],{"class":141,"line":12015},[139,154434,843],{"emptyLinePlaceholder":842},[139,154436,154437,154439,154442],{"class":141,"line":12038},[139,154438,778],{"class":149},[139,154440,154441],{"class":781}," input_float",[139,154443,154378],{"class":145},[139,154445,154446,154448,154450],{"class":141,"line":12062},[139,154447,4536],{"class":149},[139,154449,97519],{"class":153},[139,154451,246],{"class":145},[139,154453,154454,154456],{"class":141,"line":12067},[139,154455,154391],{"class":149},[139,154457,246],{"class":145},[139,154459,154460,154462,154464,154466,154468],{"class":141,"line":12072},[139,154461,17999],{"class":149},[139,154463,112018],{"class":153},[139,154465,157],{"class":145},[139,154467,199],{"class":153},[139,154469,154406],{"class":145},[139,154471,154472,154474,154476],{"class":141,"line":12077},[139,154473,154411],{"class":149},[139,154475,370],{"class":153},[139,154477,246],{"class":145},[139,154479,154480,154482,154484,154487],{"class":141,"line":12086},[139,154481,36893],{"class":153},[139,154483,157],{"class":145},[139,154485,154486],{"class":160},"\"请输入数字\"",[139,154488,164],{"class":145},[139,154490,154491],{"class":141,"line":12091},[139,154492,843],{"emptyLinePlaceholder":842},[139,154494,154495],{"class":141,"line":12097},[139,154496,843],{"emptyLinePlaceholder":842},[139,154498,154499,154501,154504],{"class":141,"line":12118},[139,154500,778],{"class":149},[139,154502,154503],{"class":781}," add_student",[139,154505,154151],{"class":145},[139,154507,154508,154511,154513,154515,154517,154520],{"class":141,"line":12124},[139,154509,154510],{"class":145},"    student_id ",[139,154512,150],{"class":149},[139,154514,62838],{"class":153},[139,154516,157],{"class":145},[139,154518,154519],{"class":160},"\"请输入学号:\"",[139,154521,164],{"class":145},[139,154523,154524],{"class":141,"line":12138},[139,154525,843],{"emptyLinePlaceholder":842},[139,154527,154528,154530],{"class":141,"line":12144},[139,154529,790],{"class":149},[139,154531,154532],{"class":145}," find_student(students, student_id):\n",[139,154534,154535,154537,154539,154542],{"class":141,"line":12171},[139,154536,34698],{"class":153},[139,154538,157],{"class":145},[139,154540,154541],{"class":160},"\"学号已存在\"",[139,154543,164],{"class":145},[139,154545,154546],{"class":141,"line":12180},[139,154547,154548],{"class":149},"        return\n",[139,154550,154551],{"class":141,"line":12186},[139,154552,843],{"emptyLinePlaceholder":842},[139,154554,154555,154558,154560,154562,154564,154567],{"class":141,"line":12194},[139,154556,154557],{"class":145},"    name ",[139,154559,150],{"class":149},[139,154561,62838],{"class":153},[139,154563,157],{"class":145},[139,154565,154566],{"class":160},"\"请输入姓名:\"",[139,154568,164],{"class":145},[139,154570,154571,154573,154575,154578,154580],{"class":141,"line":12199},[139,154572,283],{"class":145},[139,154574,150],{"class":149},[139,154576,154577],{"class":145}," input_int(",[139,154579,204],{"class":160},[139,154581,164],{"class":145},[139,154583,154584,154587,154589,154592,154595],{"class":141,"line":18871},[139,154585,154586],{"class":145},"    score ",[139,154588,150],{"class":149},[139,154590,154591],{"class":145}," input_float(",[139,154593,154594],{"class":160},"\"请输入成绩:\"",[139,154596,164],{"class":145},[139,154598,154599],{"class":141,"line":18877},[139,154600,843],{"emptyLinePlaceholder":842},[139,154602,154603],{"class":141,"line":18900},[139,154604,154605],{"class":145},"    students.append({\n",[139,154607,154608,154611],{"class":141,"line":18906},[139,154609,154610],{"class":160},"        \"student_id\"",[139,154612,154613],{"class":145},": student_id,\n",[139,154615,154616,154619],{"class":141,"line":18929},[139,154617,154618],{"class":160},"        \"name\"",[139,154620,154621],{"class":145},": name,\n",[139,154623,154624,154627],{"class":141,"line":18943},[139,154625,154626],{"class":160},"        \"age\"",[139,154628,154629],{"class":145},": age,\n",[139,154631,154632,154635],{"class":141,"line":18963},[139,154633,154634],{"class":160},"        \"score\"",[139,154636,154637],{"class":145},": score,\n",[139,154639,154640],{"class":141,"line":18969},[139,154641,35706],{"class":145},[139,154643,154644],{"class":141,"line":18980},[139,154645,154646],{"class":145},"    save_students(students)\n",[139,154648,154649,154651,154653,154656],{"class":141,"line":19003},[139,154650,302],{"class":153},[139,154652,157],{"class":145},[139,154654,154655],{"class":160},"\"添加成功\"",[139,154657,164],{"class":145},[139,154659,154660],{"class":141,"line":19025},[139,154661,843],{"emptyLinePlaceholder":842},[139,154663,154664],{"class":141,"line":19030},[139,154665,843],{"emptyLinePlaceholder":842},[139,154667,154668,154670,154673],{"class":141,"line":19036},[139,154669,778],{"class":149},[139,154671,154672],{"class":781}," delete_student",[139,154674,154151],{"class":145},[139,154676,154677,154679,154681,154683,154685,154688],{"class":141,"line":19050},[139,154678,154510],{"class":145},[139,154680,150],{"class":149},[139,154682,62838],{"class":153},[139,154684,157],{"class":145},[139,154686,154687],{"class":160},"\"请输入要删除的学号:\"",[139,154689,164],{"class":145},[139,154691,154692,154695,154697],{"class":141,"line":19063},[139,154693,154694],{"class":145},"    student ",[139,154696,150],{"class":149},[139,154698,154699],{"class":145}," find_student(students, student_id)\n",[139,154701,154702],{"class":141,"line":19068},[139,154703,843],{"emptyLinePlaceholder":842},[139,154705,154706,154708,154710,154712,154714],{"class":141,"line":19082},[139,154707,790],{"class":149},[139,154709,154325],{"class":145},[139,154711,41170],{"class":149},[139,154713,41175],{"class":153},[139,154715,246],{"class":145},[139,154717,154718,154720,154722,154725],{"class":141,"line":19087},[139,154719,34698],{"class":153},[139,154721,157],{"class":145},[139,154723,154724],{"class":160},"\"学生不存在\"",[139,154726,164],{"class":145},[139,154728,154729],{"class":141,"line":19093},[139,154730,154548],{"class":149},[139,154732,154733],{"class":141,"line":19098},[139,154734,843],{"emptyLinePlaceholder":842},[139,154736,154737],{"class":141,"line":19112},[139,154738,154739],{"class":145},"    students.remove(student)\n",[139,154741,154742],{"class":141,"line":19117},[139,154743,154646],{"class":145},[139,154745,154746,154748,154750,154753],{"class":141,"line":19122},[139,154747,302],{"class":153},[139,154749,157],{"class":145},[139,154751,154752],{"class":160},"\"删除成功\"",[139,154754,164],{"class":145},[139,154756,154757],{"class":141,"line":19136},[139,154758,843],{"emptyLinePlaceholder":842},[139,154760,154761],{"class":141,"line":19148},[139,154762,843],{"emptyLinePlaceholder":842},[139,154764,154765,154767,154770],{"class":141,"line":19153},[139,154766,778],{"class":149},[139,154768,154769],{"class":781}," update_student",[139,154771,154151],{"class":145},[139,154773,154774,154776,154778,154780,154782,154785],{"class":141,"line":19166},[139,154775,154510],{"class":145},[139,154777,150],{"class":149},[139,154779,62838],{"class":153},[139,154781,157],{"class":145},[139,154783,154784],{"class":160},"\"请输入要修改的学号:\"",[139,154786,164],{"class":145},[139,154788,154789,154791,154793],{"class":141,"line":19171},[139,154790,154694],{"class":145},[139,154792,150],{"class":149},[139,154794,154699],{"class":145},[139,154796,154797],{"class":141,"line":19176},[139,154798,843],{"emptyLinePlaceholder":842},[139,154800,154801,154803,154805,154807,154809],{"class":141,"line":19181},[139,154802,790],{"class":149},[139,154804,154325],{"class":145},[139,154806,41170],{"class":149},[139,154808,41175],{"class":153},[139,154810,246],{"class":145},[139,154812,154813,154815,154817,154819],{"class":141,"line":19194},[139,154814,34698],{"class":153},[139,154816,157],{"class":145},[139,154818,154724],{"class":160},[139,154820,164],{"class":145},[139,154822,154823],{"class":141,"line":19199},[139,154824,154548],{"class":149},[139,154826,154827],{"class":141,"line":34880},[139,154828,843],{"emptyLinePlaceholder":842},[139,154830,154831,154833,154835,154837,154839,154842],{"class":141,"line":34886},[139,154832,154557],{"class":145},[139,154834,150],{"class":149},[139,154836,62838],{"class":153},[139,154838,157],{"class":145},[139,154840,154841],{"class":160},"\"请输入新姓名:\"",[139,154843,164],{"class":145},[139,154845,154846,154848,154850,154852,154855],{"class":141,"line":34892},[139,154847,283],{"class":145},[139,154849,150],{"class":149},[139,154851,154577],{"class":145},[139,154853,154854],{"class":160},"\"请输入新年龄:\"",[139,154856,164],{"class":145},[139,154858,154859,154861,154863,154865,154868],{"class":141,"line":34898},[139,154860,154586],{"class":145},[139,154862,150],{"class":149},[139,154864,154591],{"class":145},[139,154866,154867],{"class":160},"\"请输入新成绩:\"",[139,154869,164],{"class":145},[139,154871,154872],{"class":141,"line":34904},[139,154873,843],{"emptyLinePlaceholder":842},[139,154875,154876,154879,154881,154883,154885],{"class":141,"line":34915},[139,154877,154878],{"class":145},"    student[",[139,154880,2262],{"class":160},[139,154882,6721],{"class":145},[139,154884,150],{"class":149},[139,154886,151995],{"class":145},[139,154888,154889,154891,154893,154895,154897],{"class":141,"line":34921},[139,154890,154878],{"class":145},[139,154892,71354],{"class":160},[139,154894,6721],{"class":145},[139,154896,150],{"class":149},[139,154898,152007],{"class":145},[139,154900,154901,154903,154905,154907,154909],{"class":141,"line":34941},[139,154902,154878],{"class":145},[139,154904,2272],{"class":160},[139,154906,6721],{"class":145},[139,154908,150],{"class":149},[139,154910,3876],{"class":145},[139,154912,154913],{"class":141,"line":34947},[139,154914,843],{"emptyLinePlaceholder":842},[139,154916,154917],{"class":141,"line":34958},[139,154918,154646],{"class":145},[139,154920,154921,154923,154925,154928],{"class":141,"line":34964},[139,154922,302],{"class":153},[139,154924,157],{"class":145},[139,154926,154927],{"class":160},"\"修改成功\"",[139,154929,164],{"class":145},[139,154931,154932],{"class":141,"line":34970},[139,154933,843],{"emptyLinePlaceholder":842},[139,154935,154936],{"class":141,"line":34976},[139,154937,843],{"emptyLinePlaceholder":842},[139,154939,154940,154942,154945],{"class":141,"line":34982},[139,154941,778],{"class":149},[139,154943,154944],{"class":781}," query_student",[139,154946,154151],{"class":145},[139,154948,154949,154951,154953,154955,154957,154960],{"class":141,"line":34988},[139,154950,154510],{"class":145},[139,154952,150],{"class":149},[139,154954,62838],{"class":153},[139,154956,157],{"class":145},[139,154958,154959],{"class":160},"\"请输入要查询的学号:\"",[139,154961,164],{"class":145},[139,154963,154964,154966,154968],{"class":141,"line":34994},[139,154965,154694],{"class":145},[139,154967,150],{"class":149},[139,154969,154699],{"class":145},[139,154971,154972],{"class":141,"line":35000},[139,154973,843],{"emptyLinePlaceholder":842},[139,154975,154976,154978,154980,154982,154984],{"class":141,"line":35020},[139,154977,790],{"class":149},[139,154979,154325],{"class":145},[139,154981,41170],{"class":149},[139,154983,41175],{"class":153},[139,154985,246],{"class":145},[139,154987,154988,154990,154992,154994],{"class":141,"line":35026},[139,154989,34698],{"class":153},[139,154991,157],{"class":145},[139,154993,154724],{"class":160},[139,154995,164],{"class":145},[139,154997,154998],{"class":141,"line":35042},[139,154999,154548],{"class":149},[139,155001,155002],{"class":141,"line":35048},[139,155003,843],{"emptyLinePlaceholder":842},[139,155005,155006],{"class":141,"line":35062},[139,155007,155008],{"class":145},"    print_student(student)\n",[139,155010,155011],{"class":141,"line":35068},[139,155012,843],{"emptyLinePlaceholder":842},[139,155014,155015],{"class":141,"line":35083},[139,155016,843],{"emptyLinePlaceholder":842},[139,155018,155019,155021,155024],{"class":141,"line":35089},[139,155020,778],{"class":149},[139,155022,155023],{"class":781}," print_student",[139,155025,155026],{"class":145},"(student):\n",[139,155028,155029,155031],{"class":141,"line":35098},[139,155030,302],{"class":153},[139,155032,153631],{"class":145},[139,155034,155035,155038,155040,155042,155045,155048,155050,155053],{"class":141,"line":35104},[139,155036,155037],{"class":149},"        f",[139,155039,634],{"class":160},[139,155041,625],{"class":153},[139,155043,155044],{"class":145},"student[",[139,155046,155047],{"class":160},"'student_id'",[139,155049,3373],{"class":145},[139,155051,155052],{"class":153},"}\\t",[139,155054,27396],{"class":160},[139,155056,155057,155059,155061,155063,155065,155068,155070,155072],{"class":141,"line":35113},[139,155058,155037],{"class":149},[139,155060,634],{"class":160},[139,155062,625],{"class":153},[139,155064,155044],{"class":145},[139,155066,155067],{"class":160},"'name'",[139,155069,3373],{"class":145},[139,155071,155052],{"class":153},[139,155073,27396],{"class":160},[139,155075,155076,155078,155080,155082,155084,155087,155089,155091],{"class":141,"line":35119},[139,155077,155037],{"class":149},[139,155079,634],{"class":160},[139,155081,625],{"class":153},[139,155083,155044],{"class":145},[139,155085,155086],{"class":160},"'age'",[139,155088,3373],{"class":145},[139,155090,155052],{"class":153},[139,155092,27396],{"class":160},[139,155094,155095,155097,155099,155101,155103,155106,155108,155110],{"class":141,"line":35125},[139,155096,155037],{"class":149},[139,155098,634],{"class":160},[139,155100,625],{"class":153},[139,155102,155044],{"class":145},[139,155104,155105],{"class":160},"'score'",[139,155107,3373],{"class":145},[139,155109,631],{"class":153},[139,155111,27396],{"class":160},[139,155113,155114],{"class":141,"line":35134},[139,155115,155116],{"class":145},"    )\n",[139,155118,155119],{"class":141,"line":35140},[139,155120,843],{"emptyLinePlaceholder":842},[139,155122,155123],{"class":141,"line":35151},[139,155124,843],{"emptyLinePlaceholder":842},[139,155126,155127,155129,155132],{"class":141,"line":35157},[139,155128,778],{"class":149},[139,155130,155131],{"class":781}," show_all_students",[139,155133,154151],{"class":145},[139,155135,155136,155138,155140],{"class":141,"line":35176},[139,155137,790],{"class":149},[139,155139,2077],{"class":149},[139,155141,154330],{"class":145},[139,155143,155144,155146,155148,155151],{"class":141,"line":35182},[139,155145,34698],{"class":153},[139,155147,157],{"class":145},[139,155149,155150],{"class":160},"\"暂无学生\"",[139,155152,164],{"class":145},[139,155154,155155],{"class":141,"line":35193},[139,155156,154548],{"class":149},[139,155158,155159],{"class":141,"line":35199},[139,155160,843],{"emptyLinePlaceholder":842},[139,155162,155163,155165,155167,155170,155172,155175,155177,155180,155182,155185],{"class":141,"line":35219},[139,155164,302],{"class":153},[139,155166,157],{"class":145},[139,155168,155169],{"class":160},"\"学号",[139,155171,3531],{"class":153},[139,155173,155174],{"class":160},"姓名",[139,155176,3531],{"class":153},[139,155178,155179],{"class":160},"年龄",[139,155181,3531],{"class":153},[139,155183,155184],{"class":160},"成绩\"",[139,155186,164],{"class":145},[139,155188,155189,155191,155193,155195],{"class":141,"line":35235},[139,155190,5482],{"class":149},[139,155192,154325],{"class":145},[139,155194,1976],{"class":149},[139,155196,154330],{"class":145},[139,155198,155199],{"class":141,"line":35241},[139,155200,155201],{"class":145},"        print_student(student)\n",[139,155203,155204],{"class":141,"line":35255},[139,155205,843],{"emptyLinePlaceholder":842},[139,155207,155208],{"class":141,"line":35261},[139,155209,843],{"emptyLinePlaceholder":842},[139,155211,155212,155214,155216],{"class":141,"line":35267},[139,155213,778],{"class":149},[139,155215,4259],{"class":781},[139,155217,34200],{"class":145},[139,155219,155220,155223,155225],{"class":141,"line":35278},[139,155221,155222],{"class":145},"    students ",[139,155224,150],{"class":149},[139,155226,155227],{"class":145}," load_students()\n",[139,155229,155230],{"class":141,"line":35284},[139,155231,843],{"emptyLinePlaceholder":842},[139,155233,155234,155236,155238],{"class":141,"line":35290},[139,155235,4536],{"class":149},[139,155237,97519],{"class":153},[139,155239,246],{"class":145},[139,155241,155242],{"class":141,"line":35300},[139,155243,155244],{"class":145},"        show_menu()\n",[139,155246,155247,155250,155252,155254,155256,155259],{"class":141,"line":35306},[139,155248,155249],{"class":145},"        choice ",[139,155251,150],{"class":149},[139,155253,62838],{"class":153},[139,155255,157],{"class":145},[139,155257,155258],{"class":160},"\"请输入操作:\"",[139,155260,164],{"class":145},[139,155262,155263],{"class":141,"line":35317},[139,155264,843],{"emptyLinePlaceholder":842},[139,155266,155267,155269,155272,155274,155277],{"class":141,"line":35323},[139,155268,4780],{"class":149},[139,155270,155271],{"class":145}," choice ",[139,155273,5232],{"class":149},[139,155275,155276],{"class":160}," \"1\"",[139,155278,246],{"class":145},[139,155280,155281],{"class":141,"line":35333},[139,155282,155283],{"class":145},"            add_student(students)\n",[139,155285,155286,155289,155291,155293,155296],{"class":141,"line":35338},[139,155287,155288],{"class":149},"        elif",[139,155290,155271],{"class":145},[139,155292,5232],{"class":149},[139,155294,155295],{"class":160}," \"2\"",[139,155297,246],{"class":145},[139,155299,155300],{"class":141,"line":35344},[139,155301,155302],{"class":145},"            delete_student(students)\n",[139,155304,155305,155307,155309,155311,155314],{"class":141,"line":35392},[139,155306,155288],{"class":149},[139,155308,155271],{"class":145},[139,155310,5232],{"class":149},[139,155312,155313],{"class":160}," \"3\"",[139,155315,246],{"class":145},[139,155317,155318],{"class":141,"line":35439},[139,155319,155320],{"class":145},"            update_student(students)\n",[139,155322,155323,155325,155327,155329,155332],{"class":141,"line":35444},[139,155324,155288],{"class":149},[139,155326,155271],{"class":145},[139,155328,5232],{"class":149},[139,155330,155331],{"class":160}," \"4\"",[139,155333,246],{"class":145},[139,155335,155336],{"class":141,"line":35450},[139,155337,155338],{"class":145},"            query_student(students)\n",[139,155340,155341,155343,155345,155347,155350],{"class":141,"line":35469},[139,155342,155288],{"class":149},[139,155344,155271],{"class":145},[139,155346,5232],{"class":149},[139,155348,155349],{"class":160}," \"5\"",[139,155351,246],{"class":145},[139,155353,155354],{"class":141,"line":35475},[139,155355,155356],{"class":145},"            show_all_students(students)\n",[139,155358,155359,155361,155363,155365,155368],{"class":141,"line":35494},[139,155360,155288],{"class":149},[139,155362,155271],{"class":145},[139,155364,5232],{"class":149},[139,155366,155367],{"class":160}," \"0\"",[139,155369,246],{"class":145},[139,155371,155372,155374,155376,155379],{"class":141,"line":35500},[139,155373,36893],{"class":153},[139,155375,157],{"class":145},[139,155377,155378],{"class":160},"\"退出系统\"",[139,155380,164],{"class":145},[139,155382,155383],{"class":141,"line":35506},[139,155384,117318],{"class":149},[139,155386,155387,155389],{"class":141,"line":35516},[139,155388,4817],{"class":149},[139,155390,246],{"class":145},[139,155392,155393,155395,155397,155399],{"class":141,"line":35521},[139,155394,36893],{"class":153},[139,155396,157],{"class":145},[139,155398,709],{"class":160},[139,155400,164],{"class":145},[139,155402,155403],{"class":141,"line":35527},[139,155404,843],{"emptyLinePlaceholder":842},[139,155406,155407],{"class":141,"line":35543},[139,155408,843],{"emptyLinePlaceholder":842},[139,155410,155411,155413,155415,155417,155419],{"class":141,"line":35588},[139,155412,1729],{"class":149},[139,155414,1732],{"class":153},[139,155416,1735],{"class":149},[139,155418,1738],{"class":160},[139,155420,246],{"class":145},[139,155422,155423],{"class":141,"line":35594},[139,155424,103794],{"class":145},[19,155426,155427],{},"这个项目串联了：",[1760,155429,155430,155433,155436,155439,155442,155444],{},[1763,155431,155432],{},"菜单循环。",[1763,155434,155435],{},"函数封装。",[1763,155437,155438],{},"列表字典。",[1763,155440,155441],{},"JSON 读写。",[1763,155443,153918],{},[1763,155445,155446,170],{},[50,155447,155448],{},"if __name__ == \"__main__\"",[14,155450,155452],{"id":155451},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155454,155455],{},"可以进一步拆成两个类：",[1760,155457,155458,155463],{},[1763,155459,155460,155462],{},[50,155461,151768],{},"：表示单个学生。",[1763,155464,155465,155467],{},[50,155466,153785],{},"：负责学生增删改查和文件保存。",[19,155469,155470],{},"示意代码：",[130,155472,155474],{"className":132,"code":155473,"language":134,"meta":135,"style":135},"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",[50,155475,155476,155486,155490,155494,155498,155506,155513,155519,155525,155531,155535,155543,155549,155559,155569,155579,155589,155593,155597,155603,155611,155619,155627,155635,155643,155651],{"__ignoreMap":135},[139,155477,155478,155480,155482,155484],{"class":141,"line":142},[139,155479,1265],{"class":149},[139,155481,153344],{"class":145},[139,155483,1064],{"class":149},[139,155485,153349],{"class":145},[139,155487,155488],{"class":141,"line":210},[139,155489,843],{"emptyLinePlaceholder":842},[139,155491,155492],{"class":141,"line":254},[139,155493,843],{"emptyLinePlaceholder":842},[139,155495,155496],{"class":141,"line":262},[139,155497,153362],{"class":781},[139,155499,155500,155502,155504],{"class":141,"line":313},[139,155501,915],{"class":149},[139,155503,10172],{"class":781},[139,155505,246],{"class":145},[139,155507,155508,155511],{"class":141,"line":462},[139,155509,155510],{"class":145},"    student_id: ",[139,155512,153378],{"class":153},[139,155514,155515,155517],{"class":141,"line":474},[139,155516,153375],{"class":145},[139,155518,153378],{"class":153},[139,155520,155521,155523],{"class":141,"line":484},[139,155522,153383],{"class":145},[139,155524,153386],{"class":153},[139,155526,155527,155529],{"class":141,"line":989},[139,155528,153391],{"class":145},[139,155530,153394],{"class":153},[139,155532,155533],{"class":141,"line":994},[139,155534,843],{"emptyLinePlaceholder":842},[139,155536,155537,155539,155541],{"class":141,"line":999},[139,155538,33053],{"class":149},[139,155540,153542],{"class":781},[139,155542,33059],{"class":145},[139,155544,155545,155547],{"class":141,"line":1006},[139,155546,2085],{"class":149},[139,155548,17840],{"class":145},[139,155550,155551,155553,155555,155557],{"class":141,"line":1027},[139,155552,153555],{"class":160},[139,155554,2265],{"class":145},[139,155556,33075],{"class":153},[139,155558,153562],{"class":145},[139,155560,155561,155563,155565,155567],{"class":141,"line":1040},[139,155562,153567],{"class":160},[139,155564,2265],{"class":145},[139,155566,33075],{"class":153},[139,155568,153574],{"class":145},[139,155570,155571,155573,155575,155577],{"class":141,"line":2160},[139,155572,153579],{"class":160},[139,155574,2265],{"class":145},[139,155576,33075],{"class":153},[139,155578,153586],{"class":145},[139,155580,155581,155583,155585,155587],{"class":141,"line":2188},[139,155582,153591],{"class":160},[139,155584,2265],{"class":145},[139,155586,33075],{"class":153},[139,155588,153598],{"class":145},[139,155590,155591],{"class":141,"line":3944},[139,155592,4812],{"class":145},[139,155594,155595],{"class":141,"line":3963},[139,155596,843],{"emptyLinePlaceholder":842},[139,155598,155599,155601],{"class":141,"line":3968},[139,155600,153208],{"class":781},[139,155602,153211],{"class":153},[139,155604,155605,155607,155609],{"class":141,"line":3982},[139,155606,33053],{"class":149},[139,155608,153619],{"class":781},[139,155610,153622],{"class":145},[139,155612,155613,155615,155617],{"class":141,"line":3987},[139,155614,2085],{"class":149},[139,155616,153228],{"class":153},[139,155618,153631],{"class":145},[139,155620,155621,155623,155625],{"class":141,"line":4014},[139,155622,153636],{"class":145},[139,155624,153639],{"class":160},[139,155626,90064],{"class":145},[139,155628,155629,155631,155633],{"class":141,"line":4019},[139,155630,153636],{"class":145},[139,155632,2262],{"class":160},[139,155634,90064],{"class":145},[139,155636,155637,155639,155641],{"class":141,"line":4036},[139,155638,153636],{"class":145},[139,155640,71354],{"class":160},[139,155642,90064],{"class":145},[139,155644,155645,155647,155649],{"class":141,"line":4041},[139,155646,153636],{"class":145},[139,155648,2272],{"class":160},[139,155650,90064],{"class":145},[139,155652,155653],{"class":141,"line":4046},[139,155654,40369],{"class":145},[19,155656,155657],{},"管理器示意：",[130,155659,155661],{"className":132,"code":155660,"language":134,"meta":135,"style":135},"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",[50,155662,155663,155672,155680,155691,155695,155705,155718,155729,155736,155742,155746,155755,155764,155770,155777],{"__ignoreMap":135},[139,155664,155665,155667,155670],{"class":141,"line":142},[139,155666,915],{"class":149},[139,155668,155669],{"class":781}," StudentManager",[139,155671,246],{"class":145},[139,155673,155674,155676,155678],{"class":141,"line":210},[139,155675,33053],{"class":149},[139,155677,33056],{"class":153},[139,155679,33059],{"class":145},[139,155681,155682,155684,155687,155689],{"class":141,"line":254},[139,155683,33097],{"class":153},[139,155685,155686],{"class":145},".students ",[139,155688,150],{"class":149},[139,155690,2088],{"class":145},[139,155692,155693],{"class":141,"line":262},[139,155694,843],{"emptyLinePlaceholder":842},[139,155696,155697,155699,155702],{"class":141,"line":313},[139,155698,33053],{"class":149},[139,155700,155701],{"class":781}," find_by_id",[139,155703,155704],{"class":145},"(self, student_id):\n",[139,155706,155707,155709,155711,155713,155715],{"class":141,"line":462},[139,155708,5684],{"class":149},[139,155710,154325],{"class":145},[139,155712,1976],{"class":149},[139,155714,41116],{"class":153},[139,155716,155717],{"class":145},".students:\n",[139,155719,155720,155722,155725,155727],{"class":141,"line":474},[139,155721,6920],{"class":149},[139,155723,155724],{"class":145}," student.student_id ",[139,155726,5232],{"class":149},[139,155728,154346],{"class":145},[139,155730,155731,155734],{"class":141,"line":484},[139,155732,155733],{"class":149},"                return",[139,155735,154353],{"class":145},[139,155737,155738,155740],{"class":141,"line":989},[139,155739,2085],{"class":149},[139,155741,154360],{"class":153},[139,155743,155744],{"class":141,"line":994},[139,155745,843],{"emptyLinePlaceholder":842},[139,155747,155748,155750,155752],{"class":141,"line":999},[139,155749,33053],{"class":149},[139,155751,1134],{"class":781},[139,155753,155754],{"class":145},"(self, student):\n",[139,155756,155757,155759,155761],{"class":141,"line":1006},[139,155758,4780],{"class":149},[139,155760,41116],{"class":153},[139,155762,155763],{"class":145},".find_by_id(student.student_id):\n",[139,155765,155766,155768],{"class":141,"line":1027},[139,155767,17999],{"class":149},[139,155769,128025],{"class":153},[139,155771,155772,155774],{"class":141,"line":1040},[139,155773,33097],{"class":153},[139,155775,155776],{"class":145},".students.append(student)\n",[139,155778,155779,155781],{"class":141,"line":2160},[139,155780,2085],{"class":149},[139,155782,155783],{"class":153}," True\n",[19,155785,155786],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155788,155790],{"id":155789},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1217,155792,155794],{"id":155793},"_1251-数据结构","12.5.1 数据结构",[130,155796,155798],{"className":132,"code":155797,"language":134,"meta":135,"style":135},"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",[50,155799,155800,155808,155839,155869,155898,155927],{"__ignoreMap":135},[139,155801,155802,155804,155806],{"class":141,"line":142},[139,155803,150666],{"class":145},[139,155805,150],{"class":149},[139,155807,57681],{"class":145},[139,155809,155810,155812,155814,155816,155818,155820,155823,155825,155828,155830,155832,155834,155837],{"class":141,"line":210},[139,155811,150586],{"class":145},[139,155813,150200],{"class":160},[139,155815,2265],{"class":145},[139,155817,150809],{"class":160},[139,155819,413],{"class":145},[139,155821,155822],{"class":160},"\"category\"",[139,155824,2265],{"class":145},[139,155826,155827],{"class":160},"\"手机\"",[139,155829,413],{"class":145},[139,155831,86312],{"class":160},[139,155833,2265],{"class":145},[139,155835,155836],{"class":153},"12000",[139,155838,7208],{"class":145},[139,155840,155841,155843,155845,155847,155849,155851,155853,155855,155858,155860,155862,155864,155867],{"class":141,"line":254},[139,155842,150586],{"class":145},[139,155844,150200],{"class":160},[139,155846,2265],{"class":145},[139,155848,150809],{"class":160},[139,155850,413],{"class":145},[139,155852,155822],{"class":160},[139,155854,2265],{"class":145},[139,155856,155857],{"class":160},"\"电脑\"",[139,155859,413],{"class":145},[139,155861,86312],{"class":160},[139,155863,2265],{"class":145},[139,155865,155866],{"class":153},"18000",[139,155868,7208],{"class":145},[139,155870,155871,155873,155875,155877,155879,155881,155883,155885,155887,155889,155891,155893,155896],{"class":141,"line":262},[139,155872,150586],{"class":145},[139,155874,150200],{"class":160},[139,155876,2265],{"class":145},[139,155878,150830],{"class":160},[139,155880,413],{"class":145},[139,155882,155822],{"class":160},[139,155884,2265],{"class":145},[139,155886,155827],{"class":160},[139,155888,413],{"class":145},[139,155890,86312],{"class":160},[139,155892,2265],{"class":145},[139,155894,155895],{"class":153},"15000",[139,155897,7208],{"class":145},[139,155899,155900,155902,155904,155906,155908,155910,155912,155914,155916,155918,155920,155922,155925],{"class":141,"line":313},[139,155901,150586],{"class":145},[139,155903,150200],{"class":160},[139,155905,2265],{"class":145},[139,155907,150830],{"class":160},[139,155909,413],{"class":145},[139,155911,155822],{"class":160},[139,155913,2265],{"class":145},[139,155915,155857],{"class":160},[139,155917,413],{"class":145},[139,155919,86312],{"class":160},[139,155921,2265],{"class":145},[139,155923,155924],{"class":153},"16000",[139,155926,7208],{"class":145},[139,155928,155929],{"class":141,"line":462},[139,155930,424],{"class":145},[1217,155932,155934],{"id":155933},"_1252-按日期统计","12.5.2 按日期统计",[130,155936,155938],{"className":132,"code":155937,"language":134,"meta":135,"style":135},"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",[50,155939,155940,155949,155953,155964,155978,155991,156010,156014],{"__ignoreMap":135},[139,155941,155942,155945,155947],{"class":141,"line":142},[139,155943,155944],{"class":145},"daily_total ",[139,155946,150],{"class":149},[139,155948,90096],{"class":145},[139,155950,155951],{"class":141,"line":210},[139,155952,843],{"emptyLinePlaceholder":842},[139,155954,155955,155957,155959,155961],{"class":141,"line":254},[139,155956,1970],{"class":149},[139,155958,150410],{"class":145},[139,155960,1976],{"class":149},[139,155962,155963],{"class":145}," sales:\n",[139,155965,155966,155969,155971,155974,155976],{"class":141,"line":262},[139,155967,155968],{"class":145},"    date ",[139,155970,150],{"class":149},[139,155972,155973],{"class":145}," item[",[139,155975,150200],{"class":160},[139,155977,424],{"class":145},[139,155979,155980,155983,155985,155987,155989],{"class":141,"line":313},[139,155981,155982],{"class":145},"    amount ",[139,155984,150],{"class":149},[139,155986,155973],{"class":145},[139,155988,86312],{"class":160},[139,155990,424],{"class":145},[139,155992,155993,155996,155998,156001,156003,156005,156007],{"class":141,"line":462},[139,155994,155995],{"class":145},"    daily_total[date] ",[139,155997,150],{"class":149},[139,155999,156000],{"class":145}," daily_total.get(date, ",[139,156002,2634],{"class":153},[139,156004,2120],{"class":145},[139,156006,1147],{"class":149},[139,156008,156009],{"class":145}," amount\n",[139,156011,156012],{"class":141,"line":474},[139,156013,843],{"emptyLinePlaceholder":842},[139,156015,156016,156018],{"class":141,"line":484},[139,156017,213],{"class":153},[139,156019,156020],{"class":145},"(daily_total)\n",[1217,156022,156024],{"id":156023},"_1253-按类别统计","12.5.3 按类别统计",[130,156026,156028],{"className":132,"code":156027,"language":134,"meta":135,"style":135},"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",[50,156029,156030,156039,156043,156053,156066,156078,156096,156100],{"__ignoreMap":135},[139,156031,156032,156035,156037],{"class":141,"line":142},[139,156033,156034],{"class":145},"category_total ",[139,156036,150],{"class":149},[139,156038,90096],{"class":145},[139,156040,156041],{"class":141,"line":210},[139,156042,843],{"emptyLinePlaceholder":842},[139,156044,156045,156047,156049,156051],{"class":141,"line":254},[139,156046,1970],{"class":149},[139,156048,150410],{"class":145},[139,156050,1976],{"class":149},[139,156052,155963],{"class":145},[139,156054,156055,156058,156060,156062,156064],{"class":141,"line":262},[139,156056,156057],{"class":145},"    category ",[139,156059,150],{"class":149},[139,156061,155973],{"class":145},[139,156063,155822],{"class":160},[139,156065,424],{"class":145},[139,156067,156068,156070,156072,156074,156076],{"class":141,"line":313},[139,156069,155982],{"class":145},[139,156071,150],{"class":149},[139,156073,155973],{"class":145},[139,156075,86312],{"class":160},[139,156077,424],{"class":145},[139,156079,156080,156083,156085,156088,156090,156092,156094],{"class":141,"line":462},[139,156081,156082],{"class":145},"    category_total[category] ",[139,156084,150],{"class":149},[139,156086,156087],{"class":145}," category_total.get(category, ",[139,156089,2634],{"class":153},[139,156091,2120],{"class":145},[139,156093,1147],{"class":149},[139,156095,156009],{"class":145},[139,156097,156098],{"class":141,"line":474},[139,156099,843],{"emptyLinePlaceholder":842},[139,156101,156102,156104],{"class":141,"line":484},[139,156103,213],{"class":153},[139,156105,156106],{"class":145},"(category_total)\n",[1217,156108,156110],{"id":156109},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[130,156112,156114],{"className":132,"code":156113,"language":134,"meta":135,"style":135},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[50,156115,156116,156141],{"__ignoreMap":135},[139,156117,156118,156121,156123,156125,156128,156131,156134,156137,156139],{"class":141,"line":142},[139,156119,156120],{"class":145},"top_date, top_amount ",[139,156122,150],{"class":149},[139,156124,8225],{"class":153},[139,156126,156127],{"class":145},"(daily_total.items(), ",[139,156129,156130],{"class":2111},"key",[139,156132,156133],{"class":149},"=lambda",[139,156135,156136],{"class":145}," item: item[",[139,156138,410],{"class":153},[139,156140,6935],{"class":145},[139,156142,156143,156145],{"class":141,"line":210},[139,156144,213],{"class":153},[139,156146,156147],{"class":145},"(top_date, top_amount)\n",[14,156149,156151],{"id":156150},"_126-绘制柱状图","12.6 绘制柱状图",[130,156153,156155],{"className":132,"code":156154,"language":134,"meta":135,"style":135},"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",[50,156156,156157,156171,156182,156186,156194,156206,156218,156229,156233,156237,156247,156258,156272,156277,156294,156311,156327,156331],{"__ignoreMap":135},[139,156158,156159,156161,156163,156165,156167,156169],{"class":141,"line":142},[139,156160,1265],{"class":149},[139,156162,149582],{"class":145},[139,156164,1064],{"class":149},[139,156166,149587],{"class":145},[139,156168,1035],{"class":149},[139,156170,149592],{"class":145},[139,156172,156173,156175,156177,156179],{"class":141,"line":210},[139,156174,1265],{"class":149},[139,156176,149441],{"class":145},[139,156178,1064],{"class":149},[139,156180,156181],{"class":145}," Bar\n",[139,156183,156184],{"class":141,"line":254},[139,156185,843],{"emptyLinePlaceholder":842},[139,156187,156188,156190,156192],{"class":141,"line":262},[139,156189,156034],{"class":145},[139,156191,150],{"class":149},[139,156193,17840],{"class":145},[139,156195,156196,156199,156201,156204],{"class":141,"line":313},[139,156197,156198],{"class":160},"    \"手机\"",[139,156200,2265],{"class":145},[139,156202,156203],{"class":153},"27000",[139,156205,33715],{"class":145},[139,156207,156208,156211,156213,156216],{"class":141,"line":462},[139,156209,156210],{"class":160},"    \"电脑\"",[139,156212,2265],{"class":145},[139,156214,156215],{"class":153},"34000",[139,156217,33715],{"class":145},[139,156219,156220,156223,156225,156227],{"class":141,"line":474},[139,156221,156222],{"class":160},"    \"耳机\"",[139,156224,2265],{"class":145},[139,156226,126617],{"class":153},[139,156228,33715],{"class":145},[139,156230,156231],{"class":141,"line":484},[139,156232,3862],{"class":145},[139,156234,156235],{"class":141,"line":989},[139,156236,843],{"emptyLinePlaceholder":842},[139,156238,156239,156242,156244],{"class":141,"line":994},[139,156240,156241],{"class":145},"bar ",[139,156243,150],{"class":149},[139,156245,156246],{"class":145}," Bar()\n",[139,156248,156249,156252,156255],{"class":141,"line":999},[139,156250,156251],{"class":145},"bar.add_xaxis(",[139,156253,156254],{"class":153},"list",[139,156256,156257],{"class":145},"(category_total.keys()))\n",[139,156259,156260,156263,156265,156267,156269],{"class":141,"line":1006},[139,156261,156262],{"class":145},"bar.add_yaxis(",[139,156264,149498],{"class":160},[139,156266,413],{"class":145},[139,156268,156254],{"class":153},[139,156270,156271],{"class":145},"(category_total.values()))\n",[139,156273,156274],{"class":141,"line":1027},[139,156275,156276],{"class":145},"bar.set_global_opts(\n",[139,156278,156279,156281,156283,156285,156287,156289,156292],{"class":141,"line":1040},[139,156280,149676],{"class":2111},[139,156282,150],{"class":149},[139,156284,149681],{"class":145},[139,156286,53645],{"class":2111},[139,156288,150],{"class":149},[139,156290,156291],{"class":160},"\"品类销售额\"",[139,156293,40290],{"class":145},[139,156295,156296,156298,156300,156302,156304,156306,156309],{"class":141,"line":2160},[139,156297,149695],{"class":2111},[139,156299,150],{"class":149},[139,156301,149700],{"class":145},[139,156303,1676],{"class":2111},[139,156305,150],{"class":149},[139,156307,156308],{"class":160},"\"品类\"",[139,156310,40290],{"class":145},[139,156312,156313,156315,156317,156319,156321,156323,156325],{"class":141,"line":2188},[139,156314,149714],{"class":2111},[139,156316,150],{"class":149},[139,156318,149700],{"class":145},[139,156320,1676],{"class":2111},[139,156322,150],{"class":149},[139,156324,149498],{"class":160},[139,156326,40290],{"class":145},[139,156328,156329],{"class":141,"line":3944},[139,156330,164],{"class":145},[139,156332,156333,156336,156339],{"class":141,"line":3963},[139,156334,156335],{"class":145},"bar.render(",[139,156337,156338],{"class":160},"\"category_sales.html\"",[139,156340,164],{"class":145},[14,156342,156344],{"id":156343},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156346,156347],{},"时间线适合展示不同日期、月份、年份的数据变化。",[130,156349,156351],{"className":132,"code":156350,"language":134,"meta":135,"style":135},"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",[50,156352,156353,156367,156378,156382,156390,156414,156437,156462,156466,156470,156480,156484,156495,156504,156514,156528,156559,156564,156568],{"__ignoreMap":135},[139,156354,156355,156357,156359,156361,156363,156365],{"class":141,"line":142},[139,156356,1265],{"class":149},[139,156358,149582],{"class":145},[139,156360,1064],{"class":149},[139,156362,149587],{"class":145},[139,156364,1035],{"class":149},[139,156366,149592],{"class":145},[139,156368,156369,156371,156373,156375],{"class":141,"line":210},[139,156370,1265],{"class":149},[139,156372,149441],{"class":145},[139,156374,1064],{"class":149},[139,156376,156377],{"class":145}," Bar, Timeline\n",[139,156379,156380],{"class":141,"line":254},[139,156381,843],{"emptyLinePlaceholder":842},[139,156383,156384,156386,156388],{"class":141,"line":262},[139,156385,103883],{"class":145},[139,156387,150],{"class":149},[139,156389,17840],{"class":145},[139,156391,156392,156395,156398,156400,156402,156404,156406,156408,156410,156412],{"class":141,"line":313},[139,156393,156394],{"class":160},"    \"2024-10-01\"",[139,156396,156397],{"class":145},": {",[139,156399,155827],{"class":160},[139,156401,2265],{"class":145},[139,156403,155836],{"class":153},[139,156405,413],{"class":145},[139,156407,155857],{"class":160},[139,156409,2265],{"class":145},[139,156411,155866],{"class":153},[139,156413,7208],{"class":145},[139,156415,156416,156419,156421,156423,156425,156427,156429,156431,156433,156435],{"class":141,"line":462},[139,156417,156418],{"class":160},"    \"2024-10-02\"",[139,156420,156397],{"class":145},[139,156422,155827],{"class":160},[139,156424,2265],{"class":145},[139,156426,155895],{"class":153},[139,156428,413],{"class":145},[139,156430,155857],{"class":160},[139,156432,2265],{"class":145},[139,156434,155924],{"class":153},[139,156436,7208],{"class":145},[139,156438,156439,156442,156444,156446,156448,156451,156453,156455,156457,156460],{"class":141,"line":474},[139,156440,156441],{"class":160},"    \"2024-10-03\"",[139,156443,156397],{"class":145},[139,156445,155827],{"class":160},[139,156447,2265],{"class":145},[139,156449,156450],{"class":153},"17000",[139,156452,413],{"class":145},[139,156454,155857],{"class":160},[139,156456,2265],{"class":145},[139,156458,156459],{"class":153},"19000",[139,156461,7208],{"class":145},[139,156463,156464],{"class":141,"line":484},[139,156465,3862],{"class":145},[139,156467,156468],{"class":141,"line":989},[139,156469,843],{"emptyLinePlaceholder":842},[139,156471,156472,156475,156477],{"class":141,"line":994},[139,156473,156474],{"class":145},"timeline ",[139,156476,150],{"class":149},[139,156478,156479],{"class":145}," Timeline()\n",[139,156481,156482],{"class":141,"line":999},[139,156483,843],{"emptyLinePlaceholder":842},[139,156485,156486,156488,156491,156493],{"class":141,"line":1006},[139,156487,1970],{"class":149},[139,156489,156490],{"class":145}," date, category_data ",[139,156492,1976],{"class":149},[139,156494,151349],{"class":145},[139,156496,156497,156500,156502],{"class":141,"line":1027},[139,156498,156499],{"class":145},"    bar ",[139,156501,150],{"class":149},[139,156503,156246],{"class":145},[139,156505,156506,156509,156511],{"class":141,"line":1040},[139,156507,156508],{"class":145},"    bar.add_xaxis(",[139,156510,156254],{"class":153},[139,156512,156513],{"class":145},"(category_data.keys()))\n",[139,156515,156516,156519,156521,156523,156525],{"class":141,"line":2160},[139,156517,156518],{"class":145},"    bar.add_yaxis(",[139,156520,149498],{"class":160},[139,156522,413],{"class":145},[139,156524,156254],{"class":153},[139,156526,156527],{"class":145},"(category_data.values()))\n",[139,156529,156530,156533,156536,156538,156540,156542,156544,156546,156548,156550,156552,156554,156557],{"class":141,"line":2188},[139,156531,156532],{"class":145},"    bar.set_global_opts(",[139,156534,156535],{"class":2111},"title_opts",[139,156537,150],{"class":149},[139,156539,149681],{"class":145},[139,156541,53645],{"class":2111},[139,156543,150],{"class":149},[139,156545,619],{"class":149},[139,156547,634],{"class":160},[139,156549,625],{"class":153},[139,156551,76155],{"class":145},[139,156553,631],{"class":153},[139,156555,156556],{"class":160},"销售额\"",[139,156558,207],{"class":145},[139,156560,156561],{"class":141,"line":3944},[139,156562,156563],{"class":145},"    timeline.add(bar, date)\n",[139,156565,156566],{"class":141,"line":3963},[139,156567,843],{"emptyLinePlaceholder":842},[139,156569,156570,156573,156576],{"class":141,"line":3968},[139,156571,156572],{"class":145},"timeline.render(",[139,156574,156575],{"class":160},"\"timeline_sales.html\"",[139,156577,164],{"class":145},[14,156579,156581],{"id":156580},"_128-绘制地图","12.8 绘制地图",[19,156583,156584],{},"地图适合展示地区数据。",[130,156586,156588],{"className":132,"code":156587,"language":134,"meta":135,"style":135},"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",[50,156589,156590,156604,156615,156619,156627,156640,156652,156665,156678,156682,156686,156696,156711,156716,156733,156752,156756],{"__ignoreMap":135},[139,156591,156592,156594,156596,156598,156600,156602],{"class":141,"line":142},[139,156593,1265],{"class":149},[139,156595,149582],{"class":145},[139,156597,1064],{"class":149},[139,156599,149587],{"class":145},[139,156601,1035],{"class":149},[139,156603,149592],{"class":145},[139,156605,156606,156608,156610,156612],{"class":141,"line":210},[139,156607,1265],{"class":149},[139,156609,149441],{"class":145},[139,156611,1064],{"class":149},[139,156613,156614],{"class":145}," Map\n",[139,156616,156617],{"class":141,"line":254},[139,156618,843],{"emptyLinePlaceholder":842},[139,156620,156621,156623,156625],{"class":141,"line":262},[139,156622,103883],{"class":145},[139,156624,150],{"class":149},[139,156626,57681],{"class":145},[139,156628,156629,156632,156634,156636,156638],{"class":141,"line":313},[139,156630,156631],{"class":145},"    (",[139,156633,71499],{"class":160},[139,156635,413],{"class":145},[139,156637,3252],{"class":153},[139,156639,40290],{"class":145},[139,156641,156642,156644,156646,156648,156650],{"class":141,"line":462},[139,156643,156631],{"class":145},[139,156645,71519],{"class":160},[139,156647,413],{"class":145},[139,156649,149515],{"class":153},[139,156651,40290],{"class":145},[139,156653,156654,156656,156659,156661,156663],{"class":141,"line":474},[139,156655,156631],{"class":145},[139,156657,156658],{"class":160},"\"广东\"",[139,156660,413],{"class":145},[139,156662,1022],{"class":153},[139,156664,40290],{"class":145},[139,156666,156667,156669,156672,156674,156676],{"class":141,"line":484},[139,156668,156631],{"class":145},[139,156670,156671],{"class":160},"\"浙江\"",[139,156673,413],{"class":145},[139,156675,149520],{"class":153},[139,156677,40290],{"class":145},[139,156679,156680],{"class":141,"line":989},[139,156681,424],{"class":145},[139,156683,156684],{"class":141,"line":994},[139,156685,843],{"emptyLinePlaceholder":842},[139,156687,156688,156691,156693],{"class":141,"line":999},[139,156689,156690],{"class":145},"map_chart ",[139,156692,150],{"class":149},[139,156694,156695],{"class":145}," Map()\n",[139,156697,156698,156701,156703,156706,156709],{"class":141,"line":1006},[139,156699,156700],{"class":145},"map_chart.add(",[139,156702,149498],{"class":160},[139,156704,156705],{"class":145},", data, ",[139,156707,156708],{"class":160},"\"china\"",[139,156710,164],{"class":145},[139,156712,156713],{"class":141,"line":1027},[139,156714,156715],{"class":145},"map_chart.set_global_opts(\n",[139,156717,156718,156720,156722,156724,156726,156728,156731],{"class":141,"line":1040},[139,156719,149676],{"class":2111},[139,156721,150],{"class":149},[139,156723,149681],{"class":145},[139,156725,53645],{"class":2111},[139,156727,150],{"class":149},[139,156729,156730],{"class":160},"\"地区销售额\"",[139,156732,40290],{"class":145},[139,156734,156735,156738,156740,156743,156746,156748,156750],{"class":141,"line":2160},[139,156736,156737],{"class":2111},"    visualmap_opts",[139,156739,150],{"class":149},[139,156741,156742],{"class":145},"opts.VisualMapOpts(",[139,156744,156745],{"class":2111},"max_",[139,156747,150],{"class":149},[139,156749,1022],{"class":153},[139,156751,40290],{"class":145},[139,156753,156754],{"class":141,"line":2188},[139,156755,164],{"class":145},[139,156757,156758,156761,156764],{"class":141,"line":3944},[139,156759,156760],{"class":145},"map_chart.render(",[139,156762,156763],{"class":160},"\"map_sales.html\"",[139,156765,164],{"class":145},[19,156767,156768],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156770,156772],{"id":156771},"_129-项目拆分建议","12.9 项目拆分建议",[19,156774,156775],{},"当代码超过一个文件时，可以这样组织：",[130,156777,156780],{"className":156778,"code":156779,"language":645,"meta":135},[643],"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",[50,156781,156779],{"__ignoreMap":135},[19,156783,156784],{},"职责：",[1760,156786,156787,156792,156798,156804],{},[1763,156788,156789,156791],{},[50,156790,2219],{},"：程序入口。",[1763,156793,156794,156797],{},[50,156795,156796],{},"file_utils.py","：读写 JSON。",[1763,156799,156800,156803],{},[50,156801,156802],{},"sales_service.py","：统计销售数据。",[1763,156805,156806,156809],{},[50,156807,156808],{},"chart_builder.py","：生成图表。",[14,156811,156813],{"id":156812},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156815,156816],{},"语法基础：",[1760,156818,156819,156822,156825,156828],{},[1763,156820,156821],{},"会写变量、注释、输入输出。",[1763,156823,156824],{},"会使用 int、float、str、bool。",[1763,156826,156827],{},"会做类型转换。",[1763,156829,156830],{},"会使用 f-string 格式化输出。",[19,156832,156833],{},"流程控制：",[1760,156835,156836,156842,156848,156856],{},[1763,156837,156838,156839,170],{},"会写 ",[50,156840,156841],{},"if elif else",[1763,156843,156838,156844,103245,156846,170],{},[50,156845,110884],{},[50,156847,1970],{},[1763,156849,156850,156851,103245,156853,170],{},"理解 ",[50,156852,4338],{},[50,156854,156855],{},"continue",[1763,156857,156858],{},"能写嵌套循环。",[19,156860,156861],{},"函数：",[1760,156863,156864,156867,156870,156873],{},[1763,156865,156866],{},"会定义和调用函数。",[1763,156868,156869],{},"理解参数和返回值。",[1763,156871,156872],{},"知道局部变量和全局变量。",[1763,156874,156875],{},"会使用默认参数、关键字参数、不定长参数。",[19,156877,156878],{},"容器：",[1760,156880,156881,156884,156887,156890,156893],{},[1763,156882,156883],{},"会使用列表增删改查。",[1763,156885,156886],{},"会遍历列表、字典。",[1763,156888,156889],{},"会使用切片。",[1763,156891,156892],{},"会用集合去重。",[1763,156894,156895],{},"会处理列表嵌套字典。",[19,156897,156898],{},"文件和模块：",[1760,156900,156901,156904,156907,156910,156913],{},[1763,156902,156903],{},"会读写文本文件。",[1763,156905,156906],{},"会读写 JSON。",[1763,156908,156909],{},"会捕获常见异常。",[1763,156911,156912],{},"会导入模块和第三方包。",[1763,156914,156915],{},"会创建简单包结构。",[19,156917,156918],{},"项目能力：",[1760,156920,156921,156924,156927,156930,156933],{},[1763,156922,156923],{},"能把代码拆成函数。",[1763,156925,156926],{},"能把数据保存到文件。",[1763,156928,156929],{},"能处理用户输入错误。",[1763,156931,156932],{},"能写一个完整菜单程序。",[1763,156934,156935],{},"能用 pyecharts 生成图表。",[14,156937,156939],{"id":156938},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1760,156941,156942,156945,156948,156951,156954,156957,156960,156963],{},[1763,156943,156944],{},"猜数字游戏。",[1763,156946,156947],{},"ATM 菜单程序。",[1763,156949,156950],{},"学生成绩统计。",[1763,156952,156953],{},"学生管理系统函数版。",[1763,156955,156956],{},"学生管理系统文件持久化版。",[1763,156958,156959],{},"学生管理系统面向对象版。",[1763,156961,156962],{},"销售数据统计。",[1763,156964,156965],{},"销售数据可视化。",[14,156967,156969],{"id":156968},"_1212-常见学习误区","12.12 常见学习误区",[1760,156971,156972,156975,156978,156981,156984,156987,156990],{},[1763,156973,156974],{},"只看视频不敲代码。",[1763,156976,156977],{},"一报错就复制错误去搜，不先读报错位置。",[1763,156979,156980],{},"变量名随便写，后续自己看不懂。",[1763,156982,156983],{},"所有代码都写在一个文件一个函数里。",[1763,156985,156986],{},"不保存练习代码，复习时没有材料。",[1763,156988,156989],{},"还没掌握列表字典就急着学框架。",[1763,156991,156992],{},"不会读官方文档，只依赖教程。",[14,156994,156996],{"id":156995},"_1213-如何读报错","12.13 如何读报错",[19,156998,156999],{},"报错通常从下往上看最后几行。",[19,157001,128],{},[130,157003,157006],{"className":157004,"code":157005,"language":645,"meta":135},[643],"ValueError: invalid literal for int() with base 10: 'abc'\n",[50,157007,157005],{"__ignoreMap":135},[19,157009,26863],{},[1760,157011,157012,157017,157027],{},[1763,157013,157014,157015,170],{},"异常类型是 ",[50,157016,72],{},[1763,157018,109568,157019,157022,157023,157026],{},[50,157020,157021],{},"int()"," 无法把 ",[50,157024,157025],{},"'abc'"," 转成整数。",[1763,157028,157029],{},"应该检查输入内容或增加异常处理。",[19,157031,157032],{},"再看文件名和行号：",[130,157034,157037],{"className":157035,"code":157036,"language":645,"meta":135},[643],"File \"main.py\", line 10, in \u003Cmodule>\n",[50,157038,157036],{"__ignoreMap":135},[19,157040,157041,157042,157044],{},"表示错误发生在 ",[50,157043,2219],{}," 第 10 行。",[14,157046,157048],{"id":157047},"_1214-后续学习方向","12.14 后续学习方向",[19,157050,157051],{},"Python 基础完成后，可以按兴趣选择方向：",[1760,157053,157054,157066,157075,157087,157098,157107,157117],{},[1763,157055,157056,157057,2655,157060,2655,157063,170],{},"自动化办公：",[50,157058,157059],{},"openpyxl",[50,157061,157062],{},"python-docx",[50,157064,157065],{},"pdfplumber",[1763,157067,157068,157069,2655,157071,2655,157073,170],{},"数据分析：",[50,157070,102853],{},[50,157072,148401],{},[50,157074,148409],{},[1763,157076,157077,157078,2655,157081,2655,157084,170],{},"Web 后端：",[50,157079,157080],{},"Flask",[50,157082,157083],{},"FastAPI",[50,157085,157086],{},"Django",[1763,157088,157089,157090,2655,157092,2655,157095,170],{},"爬虫：",[50,157091,148386],{},[50,157093,157094],{},"BeautifulSoup",[50,157096,157097],{},"Scrapy",[1763,157099,157100,157101,2655,157103,157106],{},"测试开发：",[50,157102,148433],{},[50,157104,157105],{},"selenium","、接口测试。",[1763,157108,157109,157110,2655,157112,2655,157114,170],{},"人工智能：",[50,157111,102853],{},[50,157113,148401],{},[50,157115,157116],{},"pytorch",[1763,157118,157119,157120,2655,157122,2655,157125,170],{},"运维脚本：",[50,157121,148003],{},[50,157123,157124],{},"subprocess",[50,157126,157127],{},"paramiko",[19,157129,157130],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157132,157134],{"id":157133},"_1215-结课练习","12.15 结课练习",[1760,157136,157137,157140,157143,157146,157149,157152,157155,157158],{},[1763,157138,157139],{},"完成函数版学生管理系统。",[1763,157141,157142],{},"给学生管理系统增加 JSON 持久化。",[1763,157144,157145],{},"给学生管理系统增加异常处理。",[1763,157147,157148],{},"把学生管理系统改成面向对象版。",[1763,157150,157151],{},"使用 pyecharts 绘制学生成绩柱状图。",[1763,157153,157154],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1763,157156,157157],{},"按品类统计销售额并绘制柱状图。",[1763,157159,157160],{},"写一份自己的 Python 学习路线图。",[2348,157162,157163],{},"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":135,"searchDepth":210,"depth":210,"links":157165},[157166,157167,157170,157171,157172,157178,157179,157180,157181,157182,157183,157184,157185,157186,157187],{"id":153891,"depth":210,"text":153892},{"id":153941,"depth":210,"text":153942,"children":157168},[157169],{"id":153945,"depth":254,"text":153946},{"id":153984,"depth":210,"text":153985},{"id":155451,"depth":210,"text":155452},{"id":155789,"depth":210,"text":155790,"children":157173},[157174,157175,157176,157177],{"id":155793,"depth":254,"text":155794},{"id":155933,"depth":254,"text":155934},{"id":156023,"depth":254,"text":156024},{"id":156109,"depth":254,"text":156110},{"id":156150,"depth":210,"text":156151},{"id":156343,"depth":210,"text":156344},{"id":156580,"depth":210,"text":156581},{"id":156771,"depth":210,"text":156772},{"id":156812,"depth":210,"text":156813},{"id":156938,"depth":210,"text":156939},{"id":156968,"depth":210,"text":156969},{"id":156995,"depth":210,"text":156996},{"id":157047,"depth":210,"text":157048},{"id":157133,"depth":210,"text":157134},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153883,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157194,"title":157195,"body":157196,"description":2384,"extension":2385,"meta":159659,"navigation":842,"path":159660,"seo":159661,"stem":159662,"__hash__":159663},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157197,"toc":159634},[157198,157201,157205,157208,157211,157231,157234,157257,157260,157263,157285,157288,157310,157314,157317,157357,157360,157481,157485,157488,157528,157531,157555,157558,157562,157565,157579,157612,157615,157650,157653,157676,157679,157712,157715,157717,157723,157798,157801,157807,157824,157864,157868,157871,157917,157919,157956,157959,157992,157995,158030,158033,158064,158067,158086,158090,158094,158207,158209,158283,158287,158333,158336,158362,158371,158375,158378,158441,158449,158477,158481,158521,158586,158590,158593,158632,158635,158680,158683,158744,158748,158775,158778,158806,158809,158813,158817,158881,158884,158922,158925,158957,158961,159060,159064,159067,159140,159143,159191,159195,159201,159241,159244,159291,159294,159343,159347,159349,159363,159365,159546,159550,159577,159597,159604,159608,159625,159631],[10,157199,157195],{"id":157200},"_2-基础语法变量与字符串",[14,157202,157204],{"id":157203},"_21-注释","2.1 注释",[19,157206,157207],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157209,157210],{},"单行注释：",[130,157212,157214],{"className":132,"code":157213,"language":134,"meta":135,"style":135},"# 这是单行注释\nprint(\"hello\")\n",[50,157215,157216,157221],{"__ignoreMap":135},[139,157217,157218],{"class":141,"line":142},[139,157219,157220],{"class":2512},"# 这是单行注释\n",[139,157222,157223,157225,157227,157229],{"class":141,"line":210},[139,157224,213],{"class":153},[139,157226,157],{"class":145},[139,157228,8118],{"class":160},[139,157230,164],{"class":145},[19,157232,157233],{},"多行说明常用三引号：",[130,157235,157237],{"className":132,"code":157236,"language":134,"meta":135,"style":135},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[50,157238,157239,157243,157248,157253],{"__ignoreMap":135},[139,157240,157241],{"class":141,"line":142},[139,157242,97925],{"class":160},[139,157244,157245],{"class":141,"line":210},[139,157246,157247],{"class":160},"这是多行说明。\n",[139,157249,157250],{"class":141,"line":254},[139,157251,157252],{"class":160},"常用于文件顶部说明、函数说明等。\n",[139,157254,157255],{"class":141,"line":262},[139,157256,97925],{"class":160},[19,157258,157259],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157261,157262],{},"不好：",[130,157264,157266],{"className":132,"code":157265,"language":134,"meta":135,"style":135},"# age 加 1\nage = age + 1\n",[50,157267,157268,157273],{"__ignoreMap":135},[139,157269,157270],{"class":141,"line":142},[139,157271,157272],{"class":2512},"# age 加 1\n",[139,157274,157275,157277,157279,157281,157283],{"class":141,"line":210},[139,157276,190],{"class":145},[139,157278,150],{"class":149},[139,157280,793],{"class":145},[139,157282,1147],{"class":149},[139,157284,57933],{"class":153},[19,157286,157287],{},"较好：",[130,157289,157291],{"className":132,"code":157290,"language":134,"meta":135,"style":135},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[50,157292,157293,157298],{"__ignoreMap":135},[139,157294,157295],{"class":141,"line":142},[139,157296,157297],{"class":2512},"# 用户过完生日后，年龄增加一岁\n",[139,157299,157300,157302,157304,157306,157308],{"class":141,"line":210},[139,157301,190],{"class":145},[139,157303,150],{"class":149},[139,157305,793],{"class":145},[139,157307,1147],{"class":149},[139,157309,57933],{"class":153},[14,157311,157313],{"id":157312},"_22-字面量","2.2 字面量",[19,157315,157316],{},"字面量就是代码中直接写出来的数据。",[130,157318,157320],{"className":132,"code":157319,"language":134,"meta":135,"style":135},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[50,157321,157322,157329,157336,157343,157350],{"__ignoreMap":135},[139,157323,157324,157326],{"class":141,"line":142},[139,157325,1017],{"class":153},[139,157327,157328],{"class":2512},"          # 整数\n",[139,157330,157331,157333],{"class":141,"line":210},[139,157332,2504],{"class":153},[139,157334,157335],{"class":2512},"         # 小数\n",[139,157337,157338,157340],{"class":141,"line":254},[139,157339,8118],{"class":160},[139,157341,157342],{"class":2512},"      # 字符串\n",[139,157344,157345,157347],{"class":141,"line":262},[139,157346,33725],{"class":153},[139,157348,157349],{"class":2512},"         # 布尔值\n",[139,157351,157352,157354],{"class":141,"line":313},[139,157353,97913],{"class":153},[139,157355,157356],{"class":2512},"         # 空值\n",[19,157358,157359],{},"常见字面量类型：",[26,157361,157362,157372],{},[29,157363,157364],{},[32,157365,157366,157368,157370],{},[35,157367,26004],{},[35,157369,29752],{},[35,157371,40],{},[42,157373,157374,157385,157396,157407,157419,157431,157443,157456,157468],{},[32,157375,157376,157378,157382],{},[47,157377,2461],{},[47,157379,157380],{},[50,157381,1017],{},[47,157383,157384],{},"整数",[32,157386,157387,157389,157393],{},[47,157388,2496],{},[47,157390,157391],{},[50,157392,2504],{},[47,157394,157395],{},"浮点数",[32,157397,157398,157400,157404],{},[47,157399,3600],{},[47,157401,157402],{},[50,157403,8118],{},[47,157405,157406],{},"字符串",[32,157408,157409,157411,157417],{},[47,157410,3652],{},[47,157412,157413,2655,157415],{},[50,157414,33725],{},[50,157416,2203],{},[47,157418,68246],{},[32,157420,157421,157424,157428],{},[47,157422,157423],{},"NoneType",[47,157425,157426],{},[50,157427,97913],{},[47,157429,157430],{},"空值",[32,157432,157433,157435,157440],{},[47,157434,156254],{},[47,157436,157437],{},[50,157438,157439],{},"[1, 2, 3]",[47,157441,157442],{},"列表",[32,157444,157445,157448,157453],{},[47,157446,157447],{},"tuple",[47,157449,157450],{},[50,157451,157452],{},"(1, 2, 3)",[47,157454,157455],{},"元组",[32,157457,157458,157460,157465],{},[47,157459,116766],{},[47,157461,157462],{},[50,157463,157464],{},"{\"name\": \"张三\"}",[47,157466,157467],{},"字典",[32,157469,157470,157473,157478],{},[47,157471,157472],{},"set",[47,157474,157475],{},[50,157476,157477],{},"{1, 2, 3}",[47,157479,157480],{},"集合",[14,157482,157484],{"id":157483},"_23-变量","2.3 变量",[19,157486,157487],{},"变量是保存数据的名字。",[130,157489,157491],{"className":132,"code":157490,"language":134,"meta":135,"style":135},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[50,157492,157493,157501,157509,157519],{"__ignoreMap":135},[139,157494,157495,157497,157499],{"class":141,"line":142},[139,157496,148746],{"class":145},[139,157498,150],{"class":149},[139,157500,151554],{"class":160},[139,157502,157503,157505,157507],{"class":141,"line":210},[139,157504,190],{"class":145},[139,157506,150],{"class":149},[139,157508,148760],{"class":153},[139,157510,157511,157514,157516],{"class":141,"line":254},[139,157512,157513],{"class":145},"height ",[139,157515,150],{"class":149},[139,157517,157518],{"class":153}," 1.75\n",[139,157520,157521,157524,157526],{"class":141,"line":262},[139,157522,157523],{"class":145},"is_student ",[139,157525,150],{"class":149},[139,157527,155783],{"class":153},[19,157529,157530],{},"Python 的变量不需要提前声明类型：",[130,157532,157534],{"className":132,"code":157533,"language":134,"meta":135,"style":135},"score = 100\nscore = \"满分\"\n",[50,157535,157536,157546],{"__ignoreMap":135},[139,157537,157538,157541,157543],{"class":141,"line":142},[139,157539,157540],{"class":145},"score ",[139,157542,150],{"class":149},[139,157544,157545],{"class":153}," 100\n",[139,157547,157548,157550,157552],{"class":141,"line":210},[139,157549,157540],{"class":145},[139,157551,150],{"class":149},[139,157553,157554],{"class":160}," \"满分\"\n",[19,157556,157557],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157559,157561],{"id":157560},"_24-变量命名规则","2.4 变量命名规则",[19,157563,157564],{},"硬性规则：",[1760,157566,157567,157570,157573,157576],{},[1763,157568,157569],{},"只能由字母、数字、下划线组成。",[1763,157571,157572],{},"不能以数字开头。",[1763,157574,157575],{},"不能使用 Python 关键字。",[1763,157577,157578],{},"区分大小写。",[130,157580,157582],{"className":132,"code":157581,"language":134,"meta":135,"style":135},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[50,157583,157584,157593,157602],{"__ignoreMap":135},[139,157585,157586,157589,157591],{"class":141,"line":142},[139,157587,157588],{"class":145},"user_name ",[139,157590,150],{"class":149},[139,157592,148751],{"class":160},[139,157594,157595,157598,157600],{"class":141,"line":210},[139,157596,157597],{"class":145},"age2 ",[139,157599,150],{"class":149},[139,157601,148760],{"class":153},[139,157603,157604,157607,157609],{"class":141,"line":254},[139,157605,157606],{"class":145},"_token ",[139,157608,150],{"class":149},[139,157610,157611],{"class":160}," \"abc\"\n",[19,157613,157614],{},"错误写法：",[130,157616,157618],{"className":132,"code":157617,"language":134,"meta":135,"style":135},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[50,157619,157620,157629,157641],{"__ignoreMap":135},[139,157621,157622,157625,157627],{"class":141,"line":142},[139,157623,157624],{"class":79632},"2age",[139,157626,15836],{"class":149},[139,157628,148760],{"class":153},[139,157630,157631,157633,157635,157637,157639],{"class":141,"line":210},[139,157632,133801],{"class":145},[139,157634,855],{"class":149},[139,157636,148746],{"class":145},[139,157638,150],{"class":149},[139,157640,148751],{"class":160},[139,157642,157643,157645,157647],{"class":141,"line":254},[139,157644,915],{"class":149},[139,157646,15836],{"class":149},[139,157648,157649],{"class":160}," \"一班\"\n",[19,157651,157652],{},"查看关键字：",[130,157654,157656],{"className":132,"code":157655,"language":134,"meta":135,"style":135},"import keyword\n\nprint(keyword.kwlist)\n",[50,157657,157658,157665,157669],{"__ignoreMap":135},[139,157659,157660,157662],{"class":141,"line":142},[139,157661,1064],{"class":149},[139,157663,157664],{"class":145}," keyword\n",[139,157666,157667],{"class":141,"line":210},[139,157668,843],{"emptyLinePlaceholder":842},[139,157670,157671,157673],{"class":141,"line":254},[139,157672,213],{"class":153},[139,157674,157675],{"class":145},"(keyword.kwlist)\n",[19,157677,157678],{},"推荐命名风格：",[130,157680,157682],{"className":132,"code":157681,"language":134,"meta":135,"style":135},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[50,157683,157684,157693,157703],{"__ignoreMap":135},[139,157685,157686,157689,157691],{"class":141,"line":142},[139,157687,157688],{"class":145},"student_name ",[139,157690,150],{"class":149},[139,157692,151554],{"class":160},[139,157694,157695,157698,157700],{"class":141,"line":210},[139,157696,157697],{"class":145},"total_price ",[139,157699,150],{"class":149},[139,157701,157702],{"class":153}," 99.8\n",[139,157704,157705,157708,157710],{"class":141,"line":254},[139,157706,157707],{"class":145},"is_finished ",[139,157709,150],{"class":149},[139,157711,128025],{"class":153},[19,157713,157714],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157716,52970],{"id":52969},[19,157718,106589,157719,157722],{},[50,157720,157721],{},"type()"," 查看数据类型：",[130,157724,157726],{"className":132,"code":157725,"language":134,"meta":135,"style":135},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[50,157727,157728,157742,157756,157770,157784],{"__ignoreMap":135},[139,157729,157730,157732,157734,157736,157738,157740],{"class":141,"line":142},[139,157731,213],{"class":153},[139,157733,157],{"class":145},[139,157735,105331],{"class":153},[139,157737,157],{"class":145},[139,157739,1017],{"class":153},[139,157741,207],{"class":145},[139,157743,157744,157746,157748,157750,157752,157754],{"class":141,"line":210},[139,157745,213],{"class":153},[139,157747,157],{"class":145},[139,157749,105331],{"class":153},[139,157751,157],{"class":145},[139,157753,2504],{"class":153},[139,157755,207],{"class":145},[139,157757,157758,157760,157762,157764,157766,157768],{"class":141,"line":254},[139,157759,213],{"class":153},[139,157761,157],{"class":145},[139,157763,105331],{"class":153},[139,157765,157],{"class":145},[139,157767,8118],{"class":160},[139,157769,207],{"class":145},[139,157771,157772,157774,157776,157778,157780,157782],{"class":141,"line":262},[139,157773,213],{"class":153},[139,157775,157],{"class":145},[139,157777,105331],{"class":153},[139,157779,157],{"class":145},[139,157781,33725],{"class":153},[139,157783,207],{"class":145},[139,157785,157786,157788,157790,157792,157794,157796],{"class":141,"line":313},[139,157787,213],{"class":153},[139,157789,157],{"class":145},[139,157791,105331],{"class":153},[139,157793,157],{"class":145},[139,157795,97913],{"class":153},[139,157797,207],{"class":145},[19,157799,157800],{},"输出类似：",[130,157802,157805],{"className":157803,"code":157804,"language":645,"meta":135},[643],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[50,157806,157804],{"__ignoreMap":135},[19,157808,11299,157809,109506,157811,157813,157814,157816,157817,23767,157819,157816,157821,157823],{},[50,157810,3652],{},[50,157812,2461],{}," 的子类，",[50,157815,33725],{}," 可以当作 ",[50,157818,410],{},[50,157820,2203],{},[50,157822,2634],{},"，但业务代码中不要滥用。",[130,157825,157827],{"className":132,"code":157826,"language":134,"meta":135,"style":135},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[50,157828,157829,157847],{"__ignoreMap":135},[139,157830,157831,157833,157835,157837,157839,157841,157844],{"class":141,"line":142},[139,157832,213],{"class":153},[139,157834,157],{"class":145},[139,157836,33725],{"class":153},[139,157838,47805],{"class":149},[139,157840,27381],{"class":153},[139,157842,157843],{"class":145},")   ",[139,157845,157846],{"class":2512},"# 2\n",[139,157848,157849,157851,157853,157855,157857,157859,157861],{"class":141,"line":210},[139,157850,213],{"class":153},[139,157852,157],{"class":145},[139,157854,2203],{"class":153},[139,157856,47805],{"class":149},[139,157858,27381],{"class":153},[139,157860,48046],{"class":145},[139,157862,157863],{"class":2512},"# 1\n",[14,157865,157867],{"id":157866},"_26-类型转换","2.6 类型转换",[19,157869,157870],{},"常用转换函数：",[130,157872,157874],{"className":132,"code":157873,"language":134,"meta":135,"style":135},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[50,157875,157876,157886,157897,157907],{"__ignoreMap":135},[139,157877,157878,157880,157882,157884],{"class":141,"line":142},[139,157879,2461],{"class":153},[139,157881,157],{"class":145},[139,157883,56550],{"class":160},[139,157885,164],{"class":145},[139,157887,157888,157890,157892,157895],{"class":141,"line":210},[139,157889,2496],{"class":153},[139,157891,157],{"class":145},[139,157893,157894],{"class":160},"\"3.14\"",[139,157896,164],{"class":145},[139,157898,157899,157901,157903,157905],{"class":141,"line":254},[139,157900,3600],{"class":153},[139,157902,157],{"class":145},[139,157904,1017],{"class":153},[139,157906,164],{"class":145},[139,157908,157909,157911,157913,157915],{"class":141,"line":262},[139,157910,3652],{"class":153},[139,157912,157],{"class":145},[139,157914,410],{"class":153},[139,157916,164],{"class":145},[19,157918,128],{},[130,157920,157922],{"className":132,"code":157921,"language":134,"meta":135,"style":135},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[50,157923,157924,157933,157943],{"__ignoreMap":135},[139,157925,157926,157928,157930],{"class":141,"line":142},[139,157927,190],{"class":145},[139,157929,150],{"class":149},[139,157931,157932],{"class":160}," \"18\"\n",[139,157934,157935,157937,157939,157941],{"class":141,"line":210},[139,157936,190],{"class":145},[139,157938,150],{"class":149},[139,157940,154],{"class":153},[139,157942,216],{"class":145},[139,157944,157945,157947,157950,157952,157954],{"class":141,"line":254},[139,157946,213],{"class":153},[139,157948,157949],{"class":145},"(age ",[139,157951,1147],{"class":149},[139,157953,27381],{"class":153},[139,157955,164],{"class":145},[19,157957,157958],{},"输入得到的内容永远是字符串：",[130,157960,157962],{"className":132,"code":157961,"language":134,"meta":135,"style":135},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[50,157963,157964,157978],{"__ignoreMap":135},[139,157965,157966,157968,157970,157972,157974,157976],{"class":141,"line":142},[139,157967,146],{"class":145},[139,157969,150],{"class":149},[139,157971,62838],{"class":153},[139,157973,157],{"class":145},[139,157975,525],{"class":160},[139,157977,164],{"class":145},[139,157979,157980,157982,157984,157986,157989],{"class":141,"line":210},[139,157981,213],{"class":153},[139,157983,157],{"class":145},[139,157985,105331],{"class":153},[139,157987,157988],{"class":145},"(num))  ",[139,157990,157991],{"class":2512},"# str\n",[19,157993,157994],{},"如果要做数学运算，必须转换：",[130,157996,157998],{"className":132,"code":157997,"language":134,"meta":135,"style":135},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[50,157999,158000,158018],{"__ignoreMap":135},[139,158001,158002,158004,158006,158008,158010,158012,158014,158016],{"class":141,"line":142},[139,158003,146],{"class":145},[139,158005,150],{"class":149},[139,158007,154],{"class":153},[139,158009,157],{"class":145},[139,158011,199],{"class":153},[139,158013,157],{"class":145},[139,158015,525],{"class":160},[139,158017,207],{"class":145},[139,158019,158020,158022,158024,158026,158028],{"class":141,"line":210},[139,158021,213],{"class":153},[139,158023,47857],{"class":145},[139,158025,1147],{"class":149},[139,158027,4323],{"class":153},[139,158029,164],{"class":145},[19,158031,158032],{},"常见错误：",[130,158034,158036],{"className":132,"code":158035,"language":134,"meta":135,"style":135},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[50,158037,158038,158051],{"__ignoreMap":135},[139,158039,158040,158042,158044,158046,158048],{"class":141,"line":142},[139,158041,2461],{"class":153},[139,158043,157],{"class":145},[139,158045,157894],{"class":160},[139,158047,157843],{"class":145},[139,158049,158050],{"class":2512},"# 错误\n",[139,158052,158053,158055,158057,158059,158062],{"class":141,"line":210},[139,158054,2461],{"class":153},[139,158056,157],{"class":145},[139,158058,161],{"class":160},[139,158060,158061],{"class":145},")    ",[139,158063,158050],{"class":2512},[19,158065,158066],{},"正确写法：",[130,158068,158070],{"className":132,"code":158069,"language":134,"meta":135,"style":135},"num = float(\"3.14\")\n",[50,158071,158072],{"__ignoreMap":135},[139,158073,158074,158076,158078,158080,158082,158084],{"class":141,"line":142},[139,158075,146],{"class":145},[139,158077,150],{"class":149},[139,158079,112018],{"class":153},[139,158081,157],{"class":145},[139,158083,157894],{"class":160},[139,158085,164],{"class":145},[14,158087,158089],{"id":158088},"_27-运算符","2.7 运算符",[1217,158091,158093],{"id":158092},"_271-算术运算符","2.7.1 算术运算符",[26,158095,158096,158107],{},[29,158097,158098],{},[32,158099,158100,158103,158105],{},[35,158101,158102],{},"运算符",[35,158104,40],{},[35,158106,29752],{},[42,158108,158109,158123,158137,158151,158165,158179,158193],{},[32,158110,158111,158115,158118],{},[47,158112,158113],{},[50,158114,1147],{},[47,158116,158117],{},"加法",[47,158119,158120],{},[50,158121,158122],{},"1 + 2",[32,158124,158125,158129,158132],{},[47,158126,158127],{},[50,158128,855],{},[47,158130,158131],{},"减法",[47,158133,158134],{},[50,158135,158136],{},"5 - 3",[32,158138,158139,158143,158146],{},[47,158140,158141],{},[50,158142,2892],{},[47,158144,158145],{},"乘法",[47,158147,158148],{},[50,158149,158150],{},"2 * 3",[32,158152,158153,158157,158160],{},[47,158154,158155],{},[50,158156,3019],{},[47,158158,158159],{},"除法，结果是浮点数",[47,158161,158162],{},[50,158163,158164],{},"5 \u002F 2",[32,158166,158167,158171,158174],{},[47,158168,158169],{},[50,158170,35574],{},[47,158172,158173],{},"整除",[47,158175,158176],{},[50,158177,158178],{},"5 \u002F\u002F 2",[32,158180,158181,158185,158188],{},[47,158182,158183],{},[50,158184,2766],{},[47,158186,158187],{},"取余",[47,158189,158190],{},[50,158191,158192],{},"5 % 2",[32,158194,158195,158199,158202],{},[47,158196,158197],{},[50,158198,12935],{},[47,158200,158201],{},"幂运算",[47,158203,158204],{},[50,158205,158206],{},"2 ** 3",[19,158208,128],{},[130,158210,158212],{"className":132,"code":158211,"language":134,"meta":135,"style":135},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[50,158213,158214,158231,158248,158265],{"__ignoreMap":135},[139,158215,158216,158218,158220,158222,158224,158226,158228],{"class":141,"line":142},[139,158217,213],{"class":153},[139,158219,157],{"class":145},[139,158221,1481],{"class":153},[139,158223,539],{"class":149},[139,158225,17024],{"class":153},[139,158227,157843],{"class":145},[139,158229,158230],{"class":2512},"# 2.5\n",[139,158232,158233,158235,158237,158239,158242,158244,158246],{"class":141,"line":210},[139,158234,213],{"class":153},[139,158236,157],{"class":145},[139,158238,1481],{"class":153},[139,158240,158241],{"class":149}," \u002F\u002F",[139,158243,17024],{"class":153},[139,158245,48046],{"class":145},[139,158247,157846],{"class":2512},[139,158249,158250,158252,158254,158256,158259,158261,158263],{"class":141,"line":254},[139,158251,213],{"class":153},[139,158253,157],{"class":145},[139,158255,1481],{"class":153},[139,158257,158258],{"class":149}," %",[139,158260,17024],{"class":153},[139,158262,157843],{"class":145},[139,158264,157863],{"class":2512},[139,158266,158267,158269,158271,158273,158276,158278,158280],{"class":141,"line":262},[139,158268,213],{"class":153},[139,158270,157],{"class":145},[139,158272,416],{"class":153},[139,158274,158275],{"class":149}," **",[139,158277,80299],{"class":153},[139,158279,48046],{"class":145},[139,158281,158282],{"class":2512},"# 8\n",[1217,158284,158286],{"id":158285},"_272-赋值运算符","2.7.2 赋值运算符",[130,158288,158290],{"className":132,"code":158289,"language":134,"meta":135,"style":135},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[50,158291,158292,158300,158308,158316,158324],{"__ignoreMap":135},[139,158293,158294,158296,158298],{"class":141,"line":142},[139,158295,146],{"class":145},[139,158297,150],{"class":149},[139,158299,60661],{"class":153},[139,158301,158302,158304,158306],{"class":141,"line":210},[139,158303,146],{"class":145},[139,158305,11751],{"class":149},[139,158307,56661],{"class":153},[139,158309,158310,158312,158314],{"class":141,"line":254},[139,158311,146],{"class":145},[139,158313,152447],{"class":149},[139,158315,49961],{"class":153},[139,158317,158318,158320,158322],{"class":141,"line":262},[139,158319,146],{"class":145},[139,158321,139365],{"class":149},[139,158323,122254],{"class":153},[139,158325,158326,158328,158331],{"class":141,"line":313},[139,158327,146],{"class":145},[139,158329,158330],{"class":149},"\u002F=",[139,158332,49961],{"class":153},[19,158334,158335],{},"等价关系：",[130,158337,158339],{"className":132,"code":158338,"language":134,"meta":135,"style":135},"num += 1\nnum = num + 1\n",[50,158340,158341,158349],{"__ignoreMap":135},[139,158342,158343,158345,158347],{"class":141,"line":142},[139,158344,146],{"class":145},[139,158346,11751],{"class":149},[139,158348,57933],{"class":153},[139,158350,158351,158353,158355,158358,158360],{"class":141,"line":210},[139,158352,146],{"class":145},[139,158354,150],{"class":149},[139,158356,158357],{"class":145}," num ",[139,158359,1147],{"class":149},[139,158361,57933],{"class":153},[19,158363,158364,158365,103245,158368,170],{},"Python 没有 ",[50,158366,158367],{},"num++",[50,158369,158370],{},"num--",[1217,158372,158374],{"id":158373},"_273-比较运算符","2.7.3 比较运算符",[19,158376,158377],{},"比较运算结果是布尔值。",[130,158379,158381],{"className":132,"code":158380,"language":134,"meta":135,"style":135},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[50,158382,158383,158397,158412,158426],{"__ignoreMap":135},[139,158384,158385,158387,158389,158391,158393,158395],{"class":141,"line":142},[139,158386,213],{"class":153},[139,158388,157],{"class":145},[139,158390,536],{"class":153},[139,158392,1917],{"class":149},[139,158394,4433],{"class":153},[139,158396,164],{"class":145},[139,158398,158399,158401,158403,158405,158408,158410],{"class":141,"line":210},[139,158400,213],{"class":153},[139,158402,157],{"class":145},[139,158404,536],{"class":153},[139,158406,158407],{"class":149}," >=",[139,158409,4323],{"class":153},[139,158411,164],{"class":145},[139,158413,158414,158416,158418,158420,158422,158424],{"class":141,"line":254},[139,158415,213],{"class":153},[139,158417,157],{"class":145},[139,158419,536],{"class":153},[139,158421,1735],{"class":149},[139,158423,4368],{"class":153},[139,158425,164],{"class":145},[139,158427,158428,158430,158432,158434,158437,158439],{"class":141,"line":262},[139,158429,213],{"class":153},[139,158431,157],{"class":145},[139,158433,536],{"class":153},[139,158435,158436],{"class":149}," !=",[139,158438,4368],{"class":153},[139,158440,164],{"class":145},[19,158442,158443,158444,158446,158447,170],{},"注意：判断相等用 ",[50,158445,5232],{},"，赋值用 ",[50,158448,150],{},[130,158450,158452],{"className":132,"code":158451,"language":134,"meta":135,"style":135},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[50,158453,158454,158466],{"__ignoreMap":135},[139,158455,158456,158458,158460,158463],{"class":141,"line":142},[139,158457,190],{"class":145},[139,158459,150],{"class":149},[139,158461,158462],{"class":153}," 18",[139,158464,158465],{"class":2512},"       # 赋值\n",[139,158467,158468,158470,158472,158474],{"class":141,"line":210},[139,158469,190],{"class":145},[139,158471,5232],{"class":149},[139,158473,158462],{"class":153},[139,158475,158476],{"class":2512},"      # 判断是否相等\n",[1217,158478,158480],{"id":158479},"_274-逻辑运算符","2.7.4 逻辑运算符",[26,158482,158483,158491],{},[29,158484,158485],{},[32,158486,158487,158489],{},[35,158488,158102],{},[35,158490,40],{},[42,158492,158493,158502,158511],{},[32,158494,158495,158499],{},[47,158496,158497],{},[50,158498,32717],{},[47,158500,158501],{},"并且",[32,158503,158504,158508],{},[47,158505,158506],{},[50,158507,117310],{},[47,158509,158510],{},"或者",[32,158512,158513,158518],{},[47,158514,158515],{},[50,158516,158517],{},"not",[47,158519,158520],{},"取反",[130,158522,158524],{"className":132,"code":158523,"language":134,"meta":135,"style":135},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[50,158525,158526,158534,158543,158547,158562,158576],{"__ignoreMap":135},[139,158527,158528,158530,158532],{"class":141,"line":142},[139,158529,190],{"class":145},[139,158531,150],{"class":149},[139,158533,90293],{"class":153},[139,158535,158536,158539,158541],{"class":141,"line":210},[139,158537,158538],{"class":145},"has_ticket ",[139,158540,150],{"class":149},[139,158542,155783],{"class":153},[139,158544,158545],{"class":141,"line":254},[139,158546,843],{"emptyLinePlaceholder":842},[139,158548,158549,158551,158553,158555,158557,158559],{"class":141,"line":262},[139,158550,213],{"class":153},[139,158552,157949],{"class":145},[139,158554,3998],{"class":149},[139,158556,158462],{"class":153},[139,158558,122647],{"class":149},[139,158560,158561],{"class":145}," has_ticket)\n",[139,158563,158564,158566,158568,158570,158572,158574],{"class":141,"line":313},[139,158565,213],{"class":153},[139,158567,157949],{"class":145},[139,158569,796],{"class":149},[139,158571,158462],{"class":153},[139,158573,116421],{"class":149},[139,158575,158561],{"class":145},[139,158577,158578,158580,158582,158584],{"class":141,"line":462},[139,158579,213],{"class":153},[139,158581,157],{"class":145},[139,158583,158517],{"class":149},[139,158585,158561],{"class":145},[14,158587,158589],{"id":158588},"_28-字符串定义","2.8 字符串定义",[19,158591,158592],{},"三种常见写法：",[130,158594,158596],{"className":132,"code":158595,"language":134,"meta":135,"style":135},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[50,158597,158598,158608,158617,158627],{"__ignoreMap":135},[139,158599,158600,158603,158605],{"class":141,"line":142},[139,158601,158602],{"class":145},"name1 ",[139,158604,150],{"class":149},[139,158606,158607],{"class":160}," '小明'\n",[139,158609,158610,158613,158615],{"class":141,"line":210},[139,158611,158612],{"class":145},"name2 ",[139,158614,150],{"class":149},[139,158616,151554],{"class":160},[139,158618,158619,158622,158624],{"class":141,"line":254},[139,158620,158621],{"class":145},"text ",[139,158623,150],{"class":149},[139,158625,158626],{"class":160}," \"\"\"这是多行字符串\n",[139,158628,158629],{"class":141,"line":262},[139,158630,158631],{"class":160},"可以换行\"\"\"\n",[19,158633,158634],{},"字符串中包含引号：",[130,158636,158638],{"className":132,"code":158637,"language":134,"meta":135,"style":135},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[50,158639,158640,158650,158660],{"__ignoreMap":135},[139,158641,158642,158645,158647],{"class":141,"line":142},[139,158643,158644],{"class":145},"msg ",[139,158646,150],{"class":149},[139,158648,158649],{"class":160}," \"他说:'你好'\"\n",[139,158651,158652,158655,158657],{"class":141,"line":210},[139,158653,158654],{"class":145},"msg2 ",[139,158656,150],{"class":149},[139,158658,158659],{"class":160}," '他说:\"你好\"'\n",[139,158661,158662,158665,158667,158670,158673,158676,158678],{"class":141,"line":254},[139,158663,158664],{"class":145},"msg3 ",[139,158666,150],{"class":149},[139,158668,158669],{"class":160}," \"他说:",[139,158671,158672],{"class":153},"\\\"",[139,158674,158675],{"class":160},"你好",[139,158677,158672],{"class":153},[139,158679,27396],{"class":160},[19,158681,158682],{},"常见转义字符：",[26,158684,158685,158694],{},[29,158686,158687],{},[32,158688,158689,158692],{},[35,158690,158691],{},"写法",[35,158693,102927],{},[42,158695,158696,158706,158715,158725,158734],{},[32,158697,158698,158703],{},[47,158699,158700],{},[50,158701,158702],{},"\\n",[47,158704,158705],{},"换行",[32,158707,158708,158712],{},[47,158709,158710],{},[50,158711,3531],{},[47,158713,158714],{},"制表符",[32,158716,158717,158722],{},[47,158718,158719],{},[50,158720,158721],{},"\\\\",[47,158723,158724],{},"反斜杠",[32,158726,158727,158731],{},[47,158728,158729],{},[50,158730,158672],{},[47,158732,158733],{},"双引号",[32,158735,158736,158741],{},[47,158737,158738],{},[50,158739,158740],{},"\\'",[47,158742,158743],{},"单引号",[14,158745,158747],{"id":158746},"_29-字符串拼接","2.9 字符串拼接",[130,158749,158751],{"className":132,"code":158750,"language":134,"meta":135,"style":135},"name = \"小明\"\nprint(\"你好，\" + name)\n",[50,158752,158753,158761],{"__ignoreMap":135},[139,158754,158755,158757,158759],{"class":141,"line":142},[139,158756,148746],{"class":145},[139,158758,150],{"class":149},[139,158760,151554],{"class":160},[139,158762,158763,158765,158767,158770,158772],{"class":141,"line":210},[139,158764,213],{"class":153},[139,158766,157],{"class":145},[139,158768,158769],{"class":160},"\"你好，\"",[139,158771,47805],{"class":149},[139,158773,158774],{"class":145}," name)\n",[19,158776,158777],{},"字符串只能和字符串拼接：",[130,158779,158781],{"className":132,"code":158780,"language":134,"meta":135,"style":135},"age = 18\nprint(\"年龄:\" + str(age))\n",[50,158782,158783,158791],{"__ignoreMap":135},[139,158784,158785,158787,158789],{"class":141,"line":142},[139,158786,190],{"class":145},[139,158788,150],{"class":149},[139,158790,148760],{"class":153},[139,158792,158793,158795,158797,158799,158801,158803],{"class":141,"line":210},[139,158794,213],{"class":153},[139,158796,157],{"class":145},[139,158798,148727],{"class":160},[139,158800,47805],{"class":149},[139,158802,76148],{"class":153},[139,158804,158805],{"class":145},"(age))\n",[19,158807,158808],{},"更推荐使用格式化字符串。",[14,158810,158812],{"id":158811},"_210-字符串格式化","2.10 字符串格式化",[1217,158814,158816],{"id":158815},"_2101-百分号格式化","2.10.1 百分号格式化",[130,158818,158820],{"className":132,"code":158819,"language":134,"meta":135,"style":135},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[50,158821,158822,158830,158838,158847,158851],{"__ignoreMap":135},[139,158823,158824,158826,158828],{"class":141,"line":142},[139,158825,148746],{"class":145},[139,158827,150],{"class":149},[139,158829,151554],{"class":160},[139,158831,158832,158834,158836],{"class":141,"line":210},[139,158833,190],{"class":145},[139,158835,150],{"class":149},[139,158837,148760],{"class":153},[139,158839,158840,158842,158844],{"class":141,"line":254},[139,158841,157540],{"class":145},[139,158843,150],{"class":149},[139,158845,158846],{"class":153}," 95.5\n",[139,158848,158849],{"class":141,"line":262},[139,158850,843],{"emptyLinePlaceholder":842},[139,158852,158853,158855,158857,158860,158863,158866,158868,158871,158874,158876,158878],{"class":141,"line":313},[139,158854,213],{"class":153},[139,158856,157],{"class":145},[139,158858,158859],{"class":160},"\"姓名:",[139,158861,158862],{"class":153},"%s",[139,158864,158865],{"class":160}," 年龄:",[139,158867,1590],{"class":153},[139,158869,158870],{"class":160}," 分数:",[139,158872,158873],{"class":153},"%.1f",[139,158875,634],{"class":160},[139,158877,158258],{"class":149},[139,158879,158880],{"class":145}," (name, age, score))\n",[19,158882,158883],{},"常用占位符：",[26,158885,158886,158895],{},[29,158887,158888],{},[32,158889,158890,158893],{},[35,158891,158892],{},"占位符",[35,158894,40],{},[42,158896,158897,158905,158913],{},[32,158898,158899,158903],{},[47,158900,158901],{},[50,158902,158862],{},[47,158904,157406],{},[32,158906,158907,158911],{},[47,158908,158909],{},[50,158910,1590],{},[47,158912,157384],{},[32,158914,158915,158920],{},[47,158916,158917],{},[50,158918,158919],{},"%f",[47,158921,157395],{},[19,158923,158924],{},"精度控制：",[130,158926,158928],{"className":132,"code":158927,"language":134,"meta":135,"style":135},"price = 12.3456\nprint(\"%.2f\" % price)\n",[50,158929,158930,158939],{"__ignoreMap":135},[139,158931,158932,158934,158936],{"class":141,"line":142},[139,158933,148890],{"class":145},[139,158935,150],{"class":149},[139,158937,158938],{"class":153}," 12.3456\n",[139,158940,158941,158943,158945,158947,158950,158952,158954],{"class":141,"line":210},[139,158942,213],{"class":153},[139,158944,157],{"class":145},[139,158946,634],{"class":160},[139,158948,158949],{"class":153},"%.2f",[139,158951,634],{"class":160},[139,158953,158258],{"class":149},[139,158955,158956],{"class":145}," price)\n",[1217,158958,158960],{"id":158959},"_2102-format方法","2.10.2 format方法",[130,158962,158964],{"className":132,"code":158963,"language":134,"meta":135,"style":135},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[50,158965,158966,158974,158982,158986,159005,159025],{"__ignoreMap":135},[139,158967,158968,158970,158972],{"class":141,"line":142},[139,158969,148746],{"class":145},[139,158971,150],{"class":149},[139,158973,151554],{"class":160},[139,158975,158976,158978,158980],{"class":141,"line":210},[139,158977,190],{"class":145},[139,158979,150],{"class":149},[139,158981,148760],{"class":153},[139,158983,158984],{"class":141,"line":254},[139,158985,843],{"emptyLinePlaceholder":842},[139,158987,158988,158990,158992,158994,158996,158998,159000,159002],{"class":141,"line":262},[139,158989,213],{"class":153},[139,158991,157],{"class":145},[139,158993,158859],{"class":160},[139,158995,34706],{"class":153},[139,158997,158865],{"class":160},[139,158999,34706],{"class":153},[139,159001,634],{"class":160},[139,159003,159004],{"class":145},".format(name, age))\n",[139,159006,159007,159009,159011,159013,159016,159018,159021,159023],{"class":141,"line":313},[139,159008,213],{"class":153},[139,159010,157],{"class":145},[139,159012,158859],{"class":160},[139,159014,159015],{"class":153},"{0}",[139,159017,158865],{"class":160},[139,159019,159020],{"class":153},"{1}",[139,159022,634],{"class":160},[139,159024,159004],{"class":145},[139,159026,159027,159029,159031,159033,159036,159038,159041,159043,159046,159048,159050,159053,159055,159057],{"class":141,"line":462},[139,159028,213],{"class":153},[139,159030,157],{"class":145},[139,159032,158859],{"class":160},[139,159034,159035],{"class":153},"{name}",[139,159037,158865],{"class":160},[139,159039,159040],{"class":153},"{age}",[139,159042,634],{"class":160},[139,159044,159045],{"class":145},".format(",[139,159047,1676],{"class":2111},[139,159049,150],{"class":149},[139,159051,159052],{"class":145},"name, ",[139,159054,831],{"class":2111},[139,159056,150],{"class":149},[139,159058,159059],{"class":145},"age))\n",[1217,159061,159063],{"id":159062},"_2103-f-string","2.10.3 f-string",[19,159065,159066],{},"推荐写法：",[130,159068,159070],{"className":132,"code":159069,"language":134,"meta":135,"style":135},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[50,159071,159072,159080,159088,159096,159100],{"__ignoreMap":135},[139,159073,159074,159076,159078],{"class":141,"line":142},[139,159075,148746],{"class":145},[139,159077,150],{"class":149},[139,159079,151554],{"class":160},[139,159081,159082,159084,159086],{"class":141,"line":210},[139,159083,190],{"class":145},[139,159085,150],{"class":149},[139,159087,148760],{"class":153},[139,159089,159090,159092,159094],{"class":141,"line":254},[139,159091,157540],{"class":145},[139,159093,150],{"class":149},[139,159095,158846],{"class":153},[139,159097,159098],{"class":141,"line":262},[139,159099,843],{"emptyLinePlaceholder":842},[139,159101,159102,159104,159106,159108,159110,159112,159114,159116,159118,159120,159122,159124,159126,159128,159131,159134,159136,159138],{"class":141,"line":313},[139,159103,213],{"class":153},[139,159105,157],{"class":145},[139,159107,619],{"class":149},[139,159109,158859],{"class":160},[139,159111,625],{"class":153},[139,159113,1676],{"class":145},[139,159115,631],{"class":153},[139,159117,158865],{"class":160},[139,159119,625],{"class":153},[139,159121,831],{"class":145},[139,159123,631],{"class":153},[139,159125,158870],{"class":160},[139,159127,625],{"class":153},[139,159129,159130],{"class":145},"score",[139,159132,159133],{"class":149},":.1f",[139,159135,631],{"class":153},[139,159137,634],{"class":160},[139,159139,164],{"class":145},[19,159141,159142],{},"表达式也可以放进去：",[130,159144,159146],{"className":132,"code":159145,"language":134,"meta":135,"style":135},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[50,159147,159148,159156,159164],{"__ignoreMap":135},[139,159149,159150,159152,159154],{"class":141,"line":142},[139,159151,148890],{"class":145},[139,159153,150],{"class":149},[139,159155,148895],{"class":153},[139,159157,159158,159160,159162],{"class":141,"line":210},[139,159159,148900],{"class":145},[139,159161,150],{"class":149},[139,159163,56661],{"class":153},[139,159165,159166,159168,159170,159172,159175,159177,159179,159181,159184,159186,159189],{"class":141,"line":254},[139,159167,213],{"class":153},[139,159169,157],{"class":145},[139,159171,619],{"class":149},[139,159173,159174],{"class":160},"\"总价:",[139,159176,625],{"class":153},[139,159178,148890],{"class":145},[139,159180,2892],{"class":149},[139,159182,159183],{"class":145}," count",[139,159185,631],{"class":153},[139,159187,159188],{"class":160},"元\"",[139,159190,164],{"class":145},[14,159192,159194],{"id":159193},"_211-input输入","2.11 input输入",[19,159196,159197,159200],{},[50,159198,159199],{},"input()"," 会暂停程序，等待用户输入。",[130,159202,159204],{"className":132,"code":159203,"language":134,"meta":135,"style":135},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[50,159205,159206,159220],{"__ignoreMap":135},[139,159207,159208,159210,159212,159214,159216,159218],{"class":141,"line":142},[139,159209,148746],{"class":145},[139,159211,150],{"class":149},[139,159213,62838],{"class":153},[139,159215,157],{"class":145},[139,159217,154566],{"class":160},[139,159219,164],{"class":145},[139,159221,159222,159224,159226,159228,159231,159233,159235,159237,159239],{"class":141,"line":210},[139,159223,213],{"class":153},[139,159225,157],{"class":145},[139,159227,619],{"class":149},[139,159229,159230],{"class":160},"\"你好，",[139,159232,625],{"class":153},[139,159234,1676],{"class":145},[139,159236,631],{"class":153},[139,159238,634],{"class":160},[139,159240,164],{"class":145},[19,159242,159243],{},"输入整数：",[130,159245,159247],{"className":132,"code":159246,"language":134,"meta":135,"style":135},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[50,159248,159249,159267],{"__ignoreMap":135},[139,159250,159251,159253,159255,159257,159259,159261,159263,159265],{"class":141,"line":142},[139,159252,190],{"class":145},[139,159254,150],{"class":149},[139,159256,154],{"class":153},[139,159258,157],{"class":145},[139,159260,199],{"class":153},[139,159262,157],{"class":145},[139,159264,204],{"class":160},[139,159266,207],{"class":145},[139,159268,159269,159271,159273,159275,159278,159280,159282,159284,159287,159289],{"class":141,"line":210},[139,159270,213],{"class":153},[139,159272,157],{"class":145},[139,159274,619],{"class":149},[139,159276,159277],{"class":160},"\"明年你",[139,159279,625],{"class":153},[139,159281,190],{"class":145},[139,159283,1147],{"class":149},[139,159285,159286],{"class":153}," 1}",[139,159288,151605],{"class":160},[139,159290,164],{"class":145},[19,159292,159293],{},"输入小数：",[130,159295,159297],{"className":132,"code":159296,"language":134,"meta":135,"style":135},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[50,159298,159299,159318],{"__ignoreMap":135},[139,159300,159301,159303,159305,159307,159309,159311,159313,159316],{"class":141,"line":142},[139,159302,157513],{"class":145},[139,159304,150],{"class":149},[139,159306,112018],{"class":153},[139,159308,157],{"class":145},[139,159310,199],{"class":153},[139,159312,157],{"class":145},[139,159314,159315],{"class":160},"\"请输入身高:\"",[139,159317,207],{"class":145},[139,159319,159320,159322,159324,159326,159329,159331,159333,159336,159338,159341],{"class":141,"line":210},[139,159321,213],{"class":153},[139,159323,157],{"class":145},[139,159325,619],{"class":149},[139,159327,159328],{"class":160},"\"身高:",[139,159330,625],{"class":153},[139,159332,27244],{"class":145},[139,159334,159335],{"class":149},":.2f",[139,159337,631],{"class":153},[139,159339,159340],{"class":160},"米\"",[139,159342,164],{"class":145},[14,159344,159346],{"id":159345},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159348,125510],{},[1760,159350,159351,159354,159357,159360],{},[1763,159352,159353],{},"输入商品单价。",[1763,159355,159356],{},"输入购买数量。",[1763,159358,159359],{},"输入折扣，例如 0.8 表示八折。",[1763,159361,159362],{},"输出最终金额，保留两位小数。",[19,159364,12309],{},[130,159366,159368],{"className":132,"code":159367,"language":134,"meta":135,"style":135},"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",[50,159369,159370,159389,159408,159428,159432,159452,159456,159479,159500,159522],{"__ignoreMap":135},[139,159371,159372,159374,159376,159378,159380,159382,159384,159387],{"class":141,"line":142},[139,159373,148890],{"class":145},[139,159375,150],{"class":149},[139,159377,112018],{"class":153},[139,159379,157],{"class":145},[139,159381,199],{"class":153},[139,159383,157],{"class":145},[139,159385,159386],{"class":160},"\"请输入商品单价:\"",[139,159388,207],{"class":145},[139,159390,159391,159393,159395,159397,159399,159401,159403,159406],{"class":141,"line":210},[139,159392,148900],{"class":145},[139,159394,150],{"class":149},[139,159396,154],{"class":153},[139,159398,157],{"class":145},[139,159400,199],{"class":153},[139,159402,157],{"class":145},[139,159404,159405],{"class":160},"\"请输入购买数量:\"",[139,159407,207],{"class":145},[139,159409,159410,159413,159415,159417,159419,159421,159423,159426],{"class":141,"line":254},[139,159411,159412],{"class":145},"discount ",[139,159414,150],{"class":149},[139,159416,112018],{"class":153},[139,159418,157],{"class":145},[139,159420,199],{"class":153},[139,159422,157],{"class":145},[139,159424,159425],{"class":160},"\"请输入折扣:\"",[139,159427,207],{"class":145},[139,159429,159430],{"class":141,"line":262},[139,159431,843],{"emptyLinePlaceholder":842},[139,159433,159434,159437,159439,159442,159444,159447,159449],{"class":141,"line":313},[139,159435,159436],{"class":145},"total ",[139,159438,150],{"class":149},[139,159440,159441],{"class":145}," price ",[139,159443,2892],{"class":149},[139,159445,159446],{"class":145}," count ",[139,159448,2892],{"class":149},[139,159450,159451],{"class":145}," discount\n",[139,159453,159454],{"class":141,"line":462},[139,159455,843],{"emptyLinePlaceholder":842},[139,159457,159458,159460,159462,159464,159467,159469,159471,159473,159475,159477],{"class":141,"line":474},[139,159459,213],{"class":153},[139,159461,157],{"class":145},[139,159463,619],{"class":149},[139,159465,159466],{"class":160},"\"商品单价:",[139,159468,625],{"class":153},[139,159470,82043],{"class":145},[139,159472,159335],{"class":149},[139,159474,631],{"class":153},[139,159476,634],{"class":160},[139,159478,164],{"class":145},[139,159480,159481,159483,159485,159487,159490,159492,159494,159496,159498],{"class":141,"line":484},[139,159482,213],{"class":153},[139,159484,157],{"class":145},[139,159486,619],{"class":149},[139,159488,159489],{"class":160},"\"购买数量:",[139,159491,625],{"class":153},[139,159493,86662],{"class":145},[139,159495,631],{"class":153},[139,159497,634],{"class":160},[139,159499,164],{"class":145},[139,159501,159502,159504,159506,159508,159511,159513,159516,159518,159520],{"class":141,"line":989},[139,159503,213],{"class":153},[139,159505,157],{"class":145},[139,159507,619],{"class":149},[139,159509,159510],{"class":160},"\"折扣:",[139,159512,625],{"class":153},[139,159514,159515],{"class":145},"discount",[139,159517,631],{"class":153},[139,159519,634],{"class":160},[139,159521,164],{"class":145},[139,159523,159524,159526,159528,159530,159533,159535,159538,159540,159542,159544],{"class":141,"line":994},[139,159525,213],{"class":153},[139,159527,157],{"class":145},[139,159529,619],{"class":149},[139,159531,159532],{"class":160},"\"应付金额:",[139,159534,625],{"class":153},[139,159536,159537],{"class":145},"total",[139,159539,159335],{"class":149},[139,159541,631],{"class":153},[139,159543,159188],{"class":160},[139,159545,164],{"class":145},[14,159547,159549],{"id":159548},"_213-易错点","2.13 易错点",[1760,159551,159552,159557,159563,159571,159574],{},[1763,159553,159554,159556],{},[50,159555,159199],{}," 的结果是字符串，做运算前要转换。",[1763,159558,159559,159560,170],{},"字符串拼接时，数字要先 ",[50,159561,159562],{},"str()",[1763,159564,159565,159567,159568,159570],{},[50,159566,150],{}," 是赋值，",[50,159569,5232],{}," 是比较。",[1763,159572,159573],{},"Python 没有自增自减运算符。",[1763,159575,159576],{},"浮点数计算可能有精度误差：",[130,159578,159580],{"className":132,"code":159579,"language":134,"meta":135,"style":135},"print(0.1 + 0.2)\n",[50,159581,159582],{"__ignoreMap":135},[139,159583,159584,159586,159588,159590,159592,159595],{"class":141,"line":142},[139,159585,213],{"class":153},[139,159587,157],{"class":145},[139,159589,88438],{"class":153},[139,159591,47805],{"class":149},[139,159593,159594],{"class":153}," 0.2",[139,159596,164],{"class":145},[19,159598,159599,159600,159603],{},"金额计算如果要求严格，可以后续学习 ",[50,159601,159602],{},"decimal"," 模块。",[14,159605,159607],{"id":159606},"_214-本章练习","2.14 本章练习",[1760,159609,159610,159613,159616,159619,159622],{},[1763,159611,159612],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1763,159614,159615],{},"输入圆的半径，计算面积，保留两位小数。",[1763,159617,159618],{},"输入工资和奖金，计算总收入。",[1763,159620,159621],{},"输入摄氏温度，转换为华氏温度。",[1763,159623,159624],{},"写一个 BMI 计算程序：",[130,159626,159629],{"className":159627,"code":159628,"language":645,"meta":135},[643],"BMI = 体重kg \u002F 身高m ** 2\n",[50,159630,159628],{"__ignoreMap":135},[2348,159632,159633],{},"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":135,"searchDepth":210,"depth":210,"links":159635},[159636,159637,159638,159639,159640,159641,159642,159648,159649,159650,159655,159656,159657,159658],{"id":157203,"depth":210,"text":157204},{"id":157312,"depth":210,"text":157313},{"id":157483,"depth":210,"text":157484},{"id":157560,"depth":210,"text":157561},{"id":52969,"depth":210,"text":52970},{"id":157866,"depth":210,"text":157867},{"id":158088,"depth":210,"text":158089,"children":159643},[159644,159645,159646,159647],{"id":158092,"depth":254,"text":158093},{"id":158285,"depth":254,"text":158286},{"id":158373,"depth":254,"text":158374},{"id":158479,"depth":254,"text":158480},{"id":158588,"depth":210,"text":158589},{"id":158746,"depth":210,"text":158747},{"id":158811,"depth":210,"text":158812,"children":159651},[159652,159653,159654],{"id":158815,"depth":254,"text":158816},{"id":158959,"depth":254,"text":158960},{"id":159062,"depth":254,"text":159063},{"id":159193,"depth":210,"text":159194},{"id":159345,"depth":210,"text":159346},{"id":159548,"depth":210,"text":159549},{"id":159606,"depth":210,"text":159607},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157195,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159665,"title":159666,"body":159667,"description":2384,"extension":2385,"meta":161302,"navigation":842,"path":161303,"seo":161304,"stem":161305,"__hash__":161306},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159668,"toc":161283},[159669,159672,159676,159679,159694,159697,159725,159729,159779,159781,159797,159799,159825,159828,159832,159899,159902,159918,159922,159925,160043,160046,160053,160102,160108,160112,160115,160228,160231,160235,160239,160242,160292,160296,160299,160349,160353,160356,160394,160398,160401,160447,160450,160485,160489,160494,160497,160543,160545,160612,160616,160622,160733,160742,160746,160748,160759,160761,160927,160931,160933,160947,160949,161163,161167,161186,161203,161206,161252,161256,161280],[10,159670,159666],{"id":159671},"_3-判断语句",[14,159673,159675],{"id":159674},"_31-布尔值","3.1 布尔值",[19,159677,159678],{},"判断语句依赖布尔值：",[130,159680,159682],{"className":132,"code":159681,"language":134,"meta":135,"style":135},"True\nFalse\n",[50,159683,159684,159689],{"__ignoreMap":135},[139,159685,159686],{"class":141,"line":142},[139,159687,159688],{"class":153},"True\n",[139,159690,159691],{"class":141,"line":210},[139,159692,159693],{"class":153},"False\n",[19,159695,159696],{},"比较表达式会产生布尔值：",[130,159698,159700],{"className":132,"code":159699,"language":134,"meta":135,"style":135},"age = 18\nprint(age >= 18)  # True\n",[50,159701,159702,159710],{"__ignoreMap":135},[139,159703,159704,159706,159708],{"class":141,"line":142},[139,159705,190],{"class":145},[139,159707,150],{"class":149},[139,159709,148760],{"class":153},[139,159711,159712,159714,159716,159718,159720,159722],{"class":141,"line":210},[139,159713,213],{"class":153},[139,159715,157949],{"class":145},[139,159717,3998],{"class":149},[139,159719,158462],{"class":153},[139,159721,48046],{"class":145},[139,159723,159724],{"class":2512},"# True\n",[14,159726,159728],{"id":159727},"_32-if基础语法","3.2 if基础语法",[130,159730,159732],{"className":132,"code":159731,"language":134,"meta":135,"style":135},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[50,159733,159734,159752,159756,159768],{"__ignoreMap":135},[139,159735,159736,159738,159740,159742,159744,159746,159748,159750],{"class":141,"line":142},[139,159737,190],{"class":145},[139,159739,150],{"class":149},[139,159741,154],{"class":153},[139,159743,157],{"class":145},[139,159745,199],{"class":153},[139,159747,157],{"class":145},[139,159749,204],{"class":160},[139,159751,207],{"class":145},[139,159753,159754],{"class":141,"line":210},[139,159755,843],{"emptyLinePlaceholder":842},[139,159757,159758,159760,159762,159764,159766],{"class":141,"line":254},[139,159759,1729],{"class":149},[139,159761,793],{"class":145},[139,159763,3998],{"class":149},[139,159765,158462],{"class":153},[139,159767,246],{"class":145},[139,159769,159770,159772,159774,159777],{"class":141,"line":262},[139,159771,302],{"class":153},[139,159773,157],{"class":145},[139,159775,159776],{"class":160},"\"可以进入网吧\"",[139,159778,164],{"class":145},[19,159780,11299],{},[1760,159782,159783,159788,159791,159794],{},[1763,159784,159785,159787],{},[50,159786,1729],{}," 后面是条件表达式。",[1763,159789,159790],{},"条件后面必须写冒号。",[1763,159792,159793],{},"条件成立时执行缩进代码块。",[1763,159795,159796],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159798,1992],{},[130,159800,159802],{"className":132,"code":159801,"language":134,"meta":135,"style":135},"if age >= 18\n    print(\"可以进入\")\n",[50,159803,159804,159814],{"__ignoreMap":135},[139,159805,159806,159808,159810,159812],{"class":141,"line":142},[139,159807,1729],{"class":149},[139,159809,793],{"class":145},[139,159811,3998],{"class":149},[139,159813,148760],{"class":153},[139,159815,159816,159818,159820,159823],{"class":141,"line":210},[139,159817,302],{"class":153},[139,159819,157],{"class":145},[139,159821,159822],{"class":160},"\"可以进入\"",[139,159824,164],{"class":145},[19,159826,159827],{},"缺少冒号。",[14,159829,159831],{"id":159830},"_33-if-else","3.3 if else",[130,159833,159835],{"className":132,"code":159834,"language":134,"meta":135,"style":135},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[50,159836,159837,159855,159859,159871,159882,159888],{"__ignoreMap":135},[139,159838,159839,159841,159843,159845,159847,159849,159851,159853],{"class":141,"line":142},[139,159840,190],{"class":145},[139,159842,150],{"class":149},[139,159844,154],{"class":153},[139,159846,157],{"class":145},[139,159848,199],{"class":153},[139,159850,157],{"class":145},[139,159852,204],{"class":160},[139,159854,207],{"class":145},[139,159856,159857],{"class":141,"line":210},[139,159858,843],{"emptyLinePlaceholder":842},[139,159860,159861,159863,159865,159867,159869],{"class":141,"line":254},[139,159862,1729],{"class":149},[139,159864,793],{"class":145},[139,159866,3998],{"class":149},[139,159868,158462],{"class":153},[139,159870,246],{"class":145},[139,159872,159873,159875,159877,159880],{"class":141,"line":262},[139,159874,302],{"class":153},[139,159876,157],{"class":145},[139,159878,159879],{"class":160},"\"成年人\"",[139,159881,164],{"class":145},[139,159883,159884,159886],{"class":141,"line":313},[139,159885,656],{"class":149},[139,159887,246],{"class":145},[139,159889,159890,159892,159894,159897],{"class":141,"line":462},[139,159891,302],{"class":153},[139,159893,157],{"class":145},[139,159895,159896],{"class":160},"\"未成年人\"",[139,159898,164],{"class":145},[19,159900,159901],{},"执行逻辑：",[1760,159903,159904,159910,159915],{},[1763,159905,159906,159907,159909],{},"条件成立，执行 ",[50,159908,1729],{}," 代码块。",[1763,159911,159912,159913,159909],{},"条件不成立，执行 ",[50,159914,656],{},[1763,159916,159917],{},"两个代码块只会执行其中一个。",[14,159919,159921],{"id":159920},"_34-if-elif-else","3.4 if elif else",[19,159923,159924],{},"多条件判断：",[130,159926,159928],{"className":132,"code":159927,"language":134,"meta":135,"style":135},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[50,159929,159930,159948,159952,159966,159977,159991,160002,160015,160026,160032],{"__ignoreMap":135},[139,159931,159932,159934,159936,159938,159940,159942,159944,159946],{"class":141,"line":142},[139,159933,157540],{"class":145},[139,159935,150],{"class":149},[139,159937,154],{"class":153},[139,159939,157],{"class":145},[139,159941,199],{"class":153},[139,159943,157],{"class":145},[139,159945,154594],{"class":160},[139,159947,207],{"class":145},[139,159949,159950],{"class":141,"line":210},[139,159951,843],{"emptyLinePlaceholder":842},[139,159953,159954,159956,159959,159961,159964],{"class":141,"line":254},[139,159955,1729],{"class":149},[139,159957,159958],{"class":145}," score ",[139,159960,3998],{"class":149},[139,159962,159963],{"class":153}," 90",[139,159965,246],{"class":145},[139,159967,159968,159970,159972,159975],{"class":141,"line":262},[139,159969,302],{"class":153},[139,159971,157],{"class":145},[139,159973,159974],{"class":160},"\"优秀\"",[139,159976,164],{"class":145},[139,159978,159979,159982,159984,159986,159989],{"class":141,"line":313},[139,159980,159981],{"class":149},"elif",[139,159983,159958],{"class":145},[139,159985,3998],{"class":149},[139,159987,159988],{"class":153}," 80",[139,159990,246],{"class":145},[139,159992,159993,159995,159997,160000],{"class":141,"line":462},[139,159994,302],{"class":153},[139,159996,157],{"class":145},[139,159998,159999],{"class":160},"\"良好\"",[139,160001,164],{"class":145},[139,160003,160004,160006,160008,160010,160013],{"class":141,"line":474},[139,160005,159981],{"class":149},[139,160007,159958],{"class":145},[139,160009,3998],{"class":149},[139,160011,160012],{"class":153}," 60",[139,160014,246],{"class":145},[139,160016,160017,160019,160021,160024],{"class":141,"line":484},[139,160018,302],{"class":153},[139,160020,157],{"class":145},[139,160022,160023],{"class":160},"\"及格\"",[139,160025,164],{"class":145},[139,160027,160028,160030],{"class":141,"line":989},[139,160029,656],{"class":149},[139,160031,246],{"class":145},[139,160033,160034,160036,160038,160041],{"class":141,"line":994},[139,160035,302],{"class":153},[139,160037,157],{"class":145},[139,160039,160040],{"class":160},"\"不及格\"",[139,160042,164],{"class":145},[19,160044,160045],{},"注意判断顺序很重要。",[19,160047,160048,160049,160052],{},"如果把 ",[50,160050,160051],{},"score >= 60"," 放在最前面：",[130,160054,160056],{"className":132,"code":160055,"language":134,"meta":135,"style":135},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[50,160057,160058,160070,160080,160092],{"__ignoreMap":135},[139,160059,160060,160062,160064,160066,160068],{"class":141,"line":142},[139,160061,1729],{"class":149},[139,160063,159958],{"class":145},[139,160065,3998],{"class":149},[139,160067,160012],{"class":153},[139,160069,246],{"class":145},[139,160071,160072,160074,160076,160078],{"class":141,"line":210},[139,160073,302],{"class":153},[139,160075,157],{"class":145},[139,160077,160023],{"class":160},[139,160079,164],{"class":145},[139,160081,160082,160084,160086,160088,160090],{"class":141,"line":254},[139,160083,159981],{"class":149},[139,160085,159958],{"class":145},[139,160087,3998],{"class":149},[139,160089,159963],{"class":153},[139,160091,246],{"class":145},[139,160093,160094,160096,160098,160100],{"class":141,"line":262},[139,160095,302],{"class":153},[139,160097,157],{"class":145},[139,160099,159974],{"class":160},[139,160101,164],{"class":145},[19,160103,160104,160105,160107],{},"成绩 95 会先满足 ",[50,160106,160051],{},"，后面的优秀分支就不会执行。",[14,160109,160111],{"id":160110},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160113,160114],{},"嵌套判断就是在一个判断内部再写判断。",[130,160116,160118],{"className":132,"code":160117,"language":134,"meta":135,"style":135},"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",[50,160119,160120,160138,160153,160157,160169,160183,160193,160200,160211,160217],{"__ignoreMap":135},[139,160121,160122,160124,160126,160128,160130,160132,160134,160136],{"class":141,"line":142},[139,160123,190],{"class":145},[139,160125,150],{"class":149},[139,160127,154],{"class":153},[139,160129,157],{"class":145},[139,160131,199],{"class":153},[139,160133,157],{"class":145},[139,160135,204],{"class":160},[139,160137,207],{"class":145},[139,160139,160140,160142,160144,160146,160148,160151],{"class":141,"line":210},[139,160141,158538],{"class":145},[139,160143,150],{"class":149},[139,160145,62838],{"class":153},[139,160147,157],{"class":145},[139,160149,160150],{"class":160},"\"是否有票(y\u002Fn):\"",[139,160152,164],{"class":145},[139,160154,160155],{"class":141,"line":254},[139,160156,843],{"emptyLinePlaceholder":842},[139,160158,160159,160161,160163,160165,160167],{"class":141,"line":262},[139,160160,1729],{"class":149},[139,160162,793],{"class":145},[139,160164,3998],{"class":149},[139,160166,158462],{"class":153},[139,160168,246],{"class":145},[139,160170,160171,160173,160176,160178,160181],{"class":141,"line":313},[139,160172,790],{"class":149},[139,160174,160175],{"class":145}," has_ticket ",[139,160177,5232],{"class":149},[139,160179,160180],{"class":160}," \"y\"",[139,160182,246],{"class":145},[139,160184,160185,160187,160189,160191],{"class":141,"line":462},[139,160186,34698],{"class":153},[139,160188,157],{"class":145},[139,160190,159822],{"class":160},[139,160192,164],{"class":145},[139,160194,160195,160198],{"class":141,"line":474},[139,160196,160197],{"class":149},"    else",[139,160199,246],{"class":145},[139,160201,160202,160204,160206,160209],{"class":141,"line":484},[139,160203,34698],{"class":153},[139,160205,157],{"class":145},[139,160207,160208],{"class":160},"\"请先买票\"",[139,160210,164],{"class":145},[139,160212,160213,160215],{"class":141,"line":989},[139,160214,656],{"class":149},[139,160216,246],{"class":145},[139,160218,160219,160221,160223,160226],{"class":141,"line":994},[139,160220,302],{"class":153},[139,160222,157],{"class":145},[139,160224,160225],{"class":160},"\"未成年人禁止进入\"",[139,160227,164],{"class":145},[19,160229,160230],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160232,160234],{"id":160233},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1217,160236,160238],{"id":160237},"_361-and","3.6.1 and",[19,160240,160241],{},"两个条件都成立才成立。",[130,160243,160245],{"className":132,"code":160244,"language":134,"meta":135,"style":135},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[50,160246,160247,160255,160263,160267,160282],{"__ignoreMap":135},[139,160248,160249,160251,160253],{"class":141,"line":142},[139,160250,190],{"class":145},[139,160252,150],{"class":149},[139,160254,90293],{"class":153},[139,160256,160257,160259,160261],{"class":141,"line":210},[139,160258,158538],{"class":145},[139,160260,150],{"class":149},[139,160262,155783],{"class":153},[139,160264,160265],{"class":141,"line":254},[139,160266,843],{"emptyLinePlaceholder":842},[139,160268,160269,160271,160273,160275,160277,160279],{"class":141,"line":262},[139,160270,1729],{"class":149},[139,160272,793],{"class":145},[139,160274,3998],{"class":149},[139,160276,158462],{"class":153},[139,160278,122647],{"class":149},[139,160280,160281],{"class":145}," has_ticket:\n",[139,160283,160284,160286,160288,160290],{"class":141,"line":313},[139,160285,302],{"class":153},[139,160287,157],{"class":145},[139,160289,159822],{"class":160},[139,160291,164],{"class":145},[1217,160293,160295],{"id":160294},"_362-or","3.6.2 or",[19,160297,160298],{},"只要一个条件成立就成立。",[130,160300,160302],{"className":132,"code":160301,"language":134,"meta":135,"style":135},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[50,160303,160304,160313,160322,160326,160338],{"__ignoreMap":135},[139,160305,160306,160309,160311],{"class":141,"line":142},[139,160307,160308],{"class":145},"is_vip ",[139,160310,150],{"class":149},[139,160312,128025],{"class":153},[139,160314,160315,160318,160320],{"class":141,"line":210},[139,160316,160317],{"class":145},"coupon ",[139,160319,150],{"class":149},[139,160321,155783],{"class":153},[139,160323,160324],{"class":141,"line":254},[139,160325,843],{"emptyLinePlaceholder":842},[139,160327,160328,160330,160333,160335],{"class":141,"line":262},[139,160329,1729],{"class":149},[139,160331,160332],{"class":145}," is_vip ",[139,160334,117310],{"class":149},[139,160336,160337],{"class":145}," coupon:\n",[139,160339,160340,160342,160344,160347],{"class":141,"line":313},[139,160341,302],{"class":153},[139,160343,157],{"class":145},[139,160345,160346],{"class":160},"\"可以享受优惠\"",[139,160348,164],{"class":145},[1217,160350,160352],{"id":160351},"_363-not","3.6.3 not",[19,160354,160355],{},"取反。",[130,160357,160359],{"className":132,"code":160358,"language":134,"meta":135,"style":135},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[50,160360,160361,160370,160374,160383],{"__ignoreMap":135},[139,160362,160363,160366,160368],{"class":141,"line":142},[139,160364,160365],{"class":145},"is_closed ",[139,160367,150],{"class":149},[139,160369,128025],{"class":153},[139,160371,160372],{"class":141,"line":210},[139,160373,843],{"emptyLinePlaceholder":842},[139,160375,160376,160378,160380],{"class":141,"line":254},[139,160377,1729],{"class":149},[139,160379,2077],{"class":149},[139,160381,160382],{"class":145}," is_closed:\n",[139,160384,160385,160387,160389,160392],{"class":141,"line":262},[139,160386,302],{"class":153},[139,160388,157],{"class":145},[139,160390,160391],{"class":160},"\"店铺营业中\"",[139,160393,164],{"class":145},[14,160395,160397],{"id":160396},"_37-链式比较","3.7 链式比较",[19,160399,160400],{},"Python 支持链式比较：",[130,160402,160404],{"className":132,"code":160403,"language":134,"meta":135,"style":135},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[50,160405,160406,160415,160419,160436],{"__ignoreMap":135},[139,160407,160408,160410,160412],{"class":141,"line":142},[139,160409,157540],{"class":145},[139,160411,150],{"class":149},[139,160413,160414],{"class":153}," 85\n",[139,160416,160417],{"class":141,"line":210},[139,160418,843],{"emptyLinePlaceholder":842},[139,160420,160421,160423,160425,160428,160430,160432,160434],{"class":141,"line":254},[139,160422,1729],{"class":149},[139,160424,799],{"class":153},[139,160426,160427],{"class":149}," \u003C=",[139,160429,159958],{"class":145},[139,160431,3885],{"class":149},[139,160433,8028],{"class":153},[139,160435,246],{"class":145},[139,160437,160438,160440,160442,160445],{"class":141,"line":262},[139,160439,302],{"class":153},[139,160441,157],{"class":145},[139,160443,160444],{"class":160},"\"成绩合法\"",[139,160446,164],{"class":145},[19,160448,160449],{},"等价于：",[130,160451,160453],{"className":132,"code":160452,"language":134,"meta":135,"style":135},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[50,160454,160455,160475],{"__ignoreMap":135},[139,160456,160457,160459,160461,160463,160465,160467,160469,160471,160473],{"class":141,"line":142},[139,160458,1729],{"class":149},[139,160460,159958],{"class":145},[139,160462,3998],{"class":149},[139,160464,799],{"class":153},[139,160466,122647],{"class":149},[139,160468,159958],{"class":145},[139,160470,3885],{"class":149},[139,160472,8028],{"class":153},[139,160474,246],{"class":145},[139,160476,160477,160479,160481,160483],{"class":141,"line":210},[139,160478,302],{"class":153},[139,160480,157],{"class":145},[139,160482,160444],{"class":160},[139,160484,164],{"class":145},[14,160486,160488],{"id":160487},"_38-真值和假值","3.8 真值和假值",[19,160490,118687,160491,160493],{},[50,160492,1729],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160495,160496],{},"假值：",[130,160498,160500],{"className":132,"code":160499,"language":134,"meta":135,"style":135},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[50,160501,160502,160506,160511,160515,160519,160524,160528,160532,160537],{"__ignoreMap":135},[139,160503,160504],{"class":141,"line":142},[139,160505,159693],{"class":153},[139,160507,160508],{"class":141,"line":210},[139,160509,160510],{"class":153},"None\n",[139,160512,160513],{"class":141,"line":254},[139,160514,5367],{"class":153},[139,160516,160517],{"class":141,"line":262},[139,160518,34589],{"class":153},[139,160520,160521],{"class":141,"line":313},[139,160522,160523],{"class":160},"\"\"\n",[139,160525,160526],{"class":141,"line":462},[139,160527,34604],{"class":145},[139,160529,160530],{"class":141,"line":474},[139,160531,4262],{"class":145},[139,160533,160534],{"class":141,"line":484},[139,160535,160536],{"class":145},"{}\n",[139,160538,160539,160541],{"class":141,"line":989},[139,160540,157472],{"class":153},[139,160542,4262],{"class":145},[19,160544,128],{},[130,160546,160548],{"className":132,"code":160547,"language":134,"meta":135,"style":135},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[50,160549,160550,160564,160568,160575,160595,160601],{"__ignoreMap":135},[139,160551,160552,160554,160556,160558,160560,160562],{"class":141,"line":142},[139,160553,148746],{"class":145},[139,160555,150],{"class":149},[139,160557,62838],{"class":153},[139,160559,157],{"class":145},[139,160561,154566],{"class":160},[139,160563,164],{"class":145},[139,160565,160566],{"class":141,"line":210},[139,160567,843],{"emptyLinePlaceholder":842},[139,160569,160570,160572],{"class":141,"line":254},[139,160571,1729],{"class":149},[139,160573,160574],{"class":145}," name:\n",[139,160576,160577,160579,160581,160583,160585,160587,160589,160591,160593],{"class":141,"line":262},[139,160578,302],{"class":153},[139,160580,157],{"class":145},[139,160582,619],{"class":149},[139,160584,159230],{"class":160},[139,160586,625],{"class":153},[139,160588,1676],{"class":145},[139,160590,631],{"class":153},[139,160592,634],{"class":160},[139,160594,164],{"class":145},[139,160596,160597,160599],{"class":141,"line":313},[139,160598,656],{"class":149},[139,160600,246],{"class":145},[139,160602,160603,160605,160607,160610],{"class":141,"line":462},[139,160604,302],{"class":153},[139,160606,157],{"class":145},[139,160608,160609],{"class":160},"\"姓名不能为空\"",[139,160611,164],{"class":145},[14,160613,160615],{"id":160614},"_39-match语句","3.9 match语句",[19,160617,160618,160619,160621],{},"Python 3.10 开始支持 ",[50,160620,73494],{},"。它适合处理固定选项。",[130,160623,160625],{"className":132,"code":160624,"language":134,"meta":135,"style":135},"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",[50,160626,160627,160643,160647,160654,160664,160675,160684,160695,160704,160715,160722],{"__ignoreMap":135},[139,160628,160629,160632,160634,160636,160638,160641],{"class":141,"line":142},[139,160630,160631],{"class":145},"command ",[139,160633,150],{"class":149},[139,160635,62838],{"class":153},[139,160637,157],{"class":145},[139,160639,160640],{"class":160},"\"请输入命令:\"",[139,160642,164],{"class":145},[139,160644,160645],{"class":141,"line":210},[139,160646,843],{"emptyLinePlaceholder":842},[139,160648,160649,160651],{"class":141,"line":254},[139,160650,73494],{"class":149},[139,160652,160653],{"class":145}," command:\n",[139,160655,160656,160659,160662],{"class":141,"line":262},[139,160657,160658],{"class":149},"    case",[139,160660,160661],{"class":160}," \"start\"",[139,160663,246],{"class":145},[139,160665,160666,160668,160670,160673],{"class":141,"line":313},[139,160667,34698],{"class":153},[139,160669,157],{"class":145},[139,160671,160672],{"class":160},"\"启动\"",[139,160674,164],{"class":145},[139,160676,160677,160679,160682],{"class":141,"line":462},[139,160678,160658],{"class":149},[139,160680,160681],{"class":160}," \"stop\"",[139,160683,246],{"class":145},[139,160685,160686,160688,160690,160693],{"class":141,"line":474},[139,160687,34698],{"class":153},[139,160689,157],{"class":145},[139,160691,160692],{"class":160},"\"停止\"",[139,160694,164],{"class":145},[139,160696,160697,160699,160702],{"class":141,"line":484},[139,160698,160658],{"class":149},[139,160700,160701],{"class":160}," \"restart\"",[139,160703,246],{"class":145},[139,160705,160706,160708,160710,160713],{"class":141,"line":989},[139,160707,34698],{"class":153},[139,160709,157],{"class":145},[139,160711,160712],{"class":160},"\"重启\"",[139,160714,164],{"class":145},[139,160716,160717,160719],{"class":141,"line":994},[139,160718,160658],{"class":149},[139,160720,160721],{"class":145}," _:\n",[139,160723,160724,160726,160728,160731],{"class":141,"line":999},[139,160725,34698],{"class":153},[139,160727,157],{"class":145},[139,160729,160730],{"class":160},"\"未知命令\"",[139,160732,164],{"class":145},[19,160734,160735,160736,160738,160739,160741],{},"入门阶段掌握 ",[50,160737,156841],{}," 更重要，",[50,160740,73494],{}," 可以作为补充。",[14,160743,160745],{"id":160744},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160747,125510],{},[1760,160749,160750,160753,160756],{},[1763,160751,160752],{},"输入成绩。",[1763,160754,160755],{},"判断成绩是否合法。",[1763,160757,160758],{},"输出等级。",[19,160760,12309],{},[130,160762,160764],{"className":132,"code":160763,"language":134,"meta":135,"style":135},"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",[50,160765,160766,160784,160788,160806,160817,160829,160840,160852,160863,160876,160887,160899,160910,160916],{"__ignoreMap":135},[139,160767,160768,160770,160772,160774,160776,160778,160780,160782],{"class":141,"line":142},[139,160769,157540],{"class":145},[139,160771,150],{"class":149},[139,160773,112018],{"class":153},[139,160775,157],{"class":145},[139,160777,199],{"class":153},[139,160779,157],{"class":145},[139,160781,154594],{"class":160},[139,160783,207],{"class":145},[139,160785,160786],{"class":141,"line":210},[139,160787,843],{"emptyLinePlaceholder":842},[139,160789,160790,160792,160794,160796,160798,160800,160802,160804],{"class":141,"line":254},[139,160791,1729],{"class":149},[139,160793,2077],{"class":149},[139,160795,799],{"class":153},[139,160797,160427],{"class":149},[139,160799,159958],{"class":145},[139,160801,3885],{"class":149},[139,160803,8028],{"class":153},[139,160805,246],{"class":145},[139,160807,160808,160810,160812,160815],{"class":141,"line":262},[139,160809,302],{"class":153},[139,160811,157],{"class":145},[139,160813,160814],{"class":160},"\"成绩不合法\"",[139,160816,164],{"class":145},[139,160818,160819,160821,160823,160825,160827],{"class":141,"line":313},[139,160820,159981],{"class":149},[139,160822,159958],{"class":145},[139,160824,3998],{"class":149},[139,160826,159963],{"class":153},[139,160828,246],{"class":145},[139,160830,160831,160833,160835,160838],{"class":141,"line":462},[139,160832,302],{"class":153},[139,160834,157],{"class":145},[139,160836,160837],{"class":160},"\"等级:A\"",[139,160839,164],{"class":145},[139,160841,160842,160844,160846,160848,160850],{"class":141,"line":474},[139,160843,159981],{"class":149},[139,160845,159958],{"class":145},[139,160847,3998],{"class":149},[139,160849,159988],{"class":153},[139,160851,246],{"class":145},[139,160853,160854,160856,160858,160861],{"class":141,"line":484},[139,160855,302],{"class":153},[139,160857,157],{"class":145},[139,160859,160860],{"class":160},"\"等级:B\"",[139,160862,164],{"class":145},[139,160864,160865,160867,160869,160871,160874],{"class":141,"line":989},[139,160866,159981],{"class":149},[139,160868,159958],{"class":145},[139,160870,3998],{"class":149},[139,160872,160873],{"class":153}," 70",[139,160875,246],{"class":145},[139,160877,160878,160880,160882,160885],{"class":141,"line":994},[139,160879,302],{"class":153},[139,160881,157],{"class":145},[139,160883,160884],{"class":160},"\"等级:C\"",[139,160886,164],{"class":145},[139,160888,160889,160891,160893,160895,160897],{"class":141,"line":999},[139,160890,159981],{"class":149},[139,160892,159958],{"class":145},[139,160894,3998],{"class":149},[139,160896,160012],{"class":153},[139,160898,246],{"class":145},[139,160900,160901,160903,160905,160908],{"class":141,"line":1006},[139,160902,302],{"class":153},[139,160904,157],{"class":145},[139,160906,160907],{"class":160},"\"等级:D\"",[139,160909,164],{"class":145},[139,160911,160912,160914],{"class":141,"line":1027},[139,160913,656],{"class":149},[139,160915,246],{"class":145},[139,160917,160918,160920,160922,160925],{"class":141,"line":1040},[139,160919,302],{"class":153},[139,160921,157],{"class":145},[139,160923,160924],{"class":160},"\"等级:E\"",[139,160926,164],{"class":145},[14,160928,160930],{"id":160929},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160932,125510],{},[1760,160934,160935,160938,160941,160944],{},[1763,160936,160937],{},"输入消费金额。",[1763,160939,160940],{},"输入会员等级，普通、银卡、金卡。",[1763,160942,160943],{},"普通不打折，银卡 9 折，金卡 8 折。",[1763,160945,160946],{},"满 500 再减 50。",[19,160948,12309],{},[130,160950,160952],{"className":132,"code":160951,"language":134,"meta":135,"style":135},"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",[50,160953,160954,160974,160990,160994,161002,161006,161020,161030,161043,161052,161065,161073,161079,161090,161094,161108,161112,161126,161136,161140],{"__ignoreMap":135},[139,160955,160956,160959,160961,160963,160965,160967,160969,160972],{"class":141,"line":142},[139,160957,160958],{"class":145},"amount ",[139,160960,150],{"class":149},[139,160962,112018],{"class":153},[139,160964,157],{"class":145},[139,160966,199],{"class":153},[139,160968,157],{"class":145},[139,160970,160971],{"class":160},"\"请输入消费金额:\"",[139,160973,207],{"class":145},[139,160975,160976,160979,160981,160983,160985,160988],{"class":141,"line":210},[139,160977,160978],{"class":145},"level ",[139,160980,150],{"class":149},[139,160982,62838],{"class":153},[139,160984,157],{"class":145},[139,160986,160987],{"class":160},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[139,160989,164],{"class":145},[139,160991,160992],{"class":141,"line":254},[139,160993,843],{"emptyLinePlaceholder":842},[139,160995,160996,160998,161000],{"class":141,"line":262},[139,160997,159412],{"class":145},[139,160999,150],{"class":149},[139,161001,57933],{"class":153},[139,161003,161004],{"class":141,"line":313},[139,161005,843],{"emptyLinePlaceholder":842},[139,161007,161008,161010,161013,161015,161018],{"class":141,"line":462},[139,161009,1729],{"class":149},[139,161011,161012],{"class":145}," level ",[139,161014,5232],{"class":149},[139,161016,161017],{"class":160}," \"银卡\"",[139,161019,246],{"class":145},[139,161021,161022,161025,161027],{"class":141,"line":474},[139,161023,161024],{"class":145},"    discount ",[139,161026,150],{"class":149},[139,161028,161029],{"class":153}," 0.9\n",[139,161031,161032,161034,161036,161038,161041],{"class":141,"line":484},[139,161033,159981],{"class":149},[139,161035,161012],{"class":145},[139,161037,5232],{"class":149},[139,161039,161040],{"class":160}," \"金卡\"",[139,161042,246],{"class":145},[139,161044,161045,161047,161049],{"class":141,"line":989},[139,161046,161024],{"class":145},[139,161048,150],{"class":149},[139,161050,161051],{"class":153}," 0.8\n",[139,161053,161054,161056,161058,161060,161063],{"class":141,"line":994},[139,161055,159981],{"class":149},[139,161057,161012],{"class":145},[139,161059,5232],{"class":149},[139,161061,161062],{"class":160}," \"普通\"",[139,161064,246],{"class":145},[139,161066,161067,161069,161071],{"class":141,"line":999},[139,161068,161024],{"class":145},[139,161070,150],{"class":149},[139,161072,57933],{"class":153},[139,161074,161075,161077],{"class":141,"line":1006},[139,161076,656],{"class":149},[139,161078,246],{"class":145},[139,161080,161081,161083,161085,161088],{"class":141,"line":1027},[139,161082,302],{"class":153},[139,161084,157],{"class":145},[139,161086,161087],{"class":160},"\"会员等级输入错误，按普通会员计算\"",[139,161089,164],{"class":145},[139,161091,161092],{"class":141,"line":1040},[139,161093,843],{"emptyLinePlaceholder":842},[139,161095,161096,161099,161101,161104,161106],{"class":141,"line":2160},[139,161097,161098],{"class":145},"pay ",[139,161100,150],{"class":149},[139,161102,161103],{"class":145}," amount ",[139,161105,2892],{"class":149},[139,161107,159451],{"class":145},[139,161109,161110],{"class":141,"line":2188},[139,161111,843],{"emptyLinePlaceholder":842},[139,161113,161114,161116,161119,161121,161124],{"class":141,"line":3944},[139,161115,1729],{"class":149},[139,161117,161118],{"class":145}," pay ",[139,161120,3998],{"class":149},[139,161122,161123],{"class":153}," 500",[139,161125,246],{"class":145},[139,161127,161128,161131,161133],{"class":141,"line":3963},[139,161129,161130],{"class":145},"    pay ",[139,161132,152447],{"class":149},[139,161134,161135],{"class":153}," 50\n",[139,161137,161138],{"class":141,"line":3968},[139,161139,843],{"emptyLinePlaceholder":842},[139,161141,161142,161144,161146,161148,161150,161152,161155,161157,161159,161161],{"class":141,"line":3982},[139,161143,213],{"class":153},[139,161145,157],{"class":145},[139,161147,619],{"class":149},[139,161149,159532],{"class":160},[139,161151,625],{"class":153},[139,161153,161154],{"class":145},"pay",[139,161156,159335],{"class":149},[139,161158,631],{"class":153},[139,161160,159188],{"class":160},[139,161162,164],{"class":145},[14,161164,161166],{"id":161165},"_312-易错点","3.12 易错点",[1760,161168,161169,161172,161175,161178,161183],{},[1763,161170,161171],{},"冒号不能漏。",[1763,161173,161174],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1763,161176,161177],{},"多分支判断要注意顺序。",[1763,161179,161180,161181,170],{},"判断相等用 ",[50,161182,5232],{},[1763,161184,161185],{},"字符串比较区分大小写：",[130,161187,161189],{"className":132,"code":161188,"language":134,"meta":135,"style":135},"\"Y\" == \"y\"  # False\n",[50,161190,161191],{"__ignoreMap":135},[139,161192,161193,161196,161198,161200],{"class":141,"line":142},[139,161194,161195],{"class":160},"\"Y\"",[139,161197,1735],{"class":149},[139,161199,160180],{"class":160},[139,161201,161202],{"class":2512},"  # False\n",[19,161204,161205],{},"可转换后再判断：",[130,161207,161209],{"className":132,"code":161208,"language":134,"meta":135,"style":135},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[50,161210,161211,161228,161241],{"__ignoreMap":135},[139,161212,161213,161216,161218,161220,161222,161225],{"class":141,"line":142},[139,161214,161215],{"class":145},"answer ",[139,161217,150],{"class":149},[139,161219,62838],{"class":153},[139,161221,157],{"class":145},[139,161223,161224],{"class":160},"\"是否继续(y\u002Fn):\"",[139,161226,161227],{"class":145},").lower()\n",[139,161229,161230,161232,161235,161237,161239],{"class":141,"line":210},[139,161231,1729],{"class":149},[139,161233,161234],{"class":145}," answer ",[139,161236,5232],{"class":149},[139,161238,160180],{"class":160},[139,161240,246],{"class":145},[139,161242,161243,161245,161247,161250],{"class":141,"line":254},[139,161244,302],{"class":153},[139,161246,157],{"class":145},[139,161248,161249],{"class":160},"\"继续\"",[139,161251,164],{"class":145},[14,161253,161255],{"id":161254},"_313-本章练习","3.13 本章练习",[1760,161257,161258,161261,161264,161267,161277],{},[1763,161259,161260],{},"输入年龄，判断是否成年。",[1763,161262,161263],{},"输入年份，判断是否为闰年。",[1763,161265,161266],{},"输入三个数字，输出最大值。",[1763,161268,161269,161270,161273,161274,161276],{},"写登录判断：用户名是 ",[50,161271,161272],{},"admin"," 且密码是 ",[50,161275,17353],{}," 才登录成功。",[1763,161278,161279],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2348,161281,161282],{},"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":135,"searchDepth":210,"depth":210,"links":161284},[161285,161286,161287,161288,161289,161290,161295,161296,161297,161298,161299,161300,161301],{"id":159674,"depth":210,"text":159675},{"id":159727,"depth":210,"text":159728},{"id":159830,"depth":210,"text":159831},{"id":159920,"depth":210,"text":159921},{"id":160110,"depth":210,"text":160111},{"id":160233,"depth":210,"text":160234,"children":161291},[161292,161293,161294],{"id":160237,"depth":254,"text":160238},{"id":160294,"depth":254,"text":160295},{"id":160351,"depth":254,"text":160352},{"id":160396,"depth":210,"text":160397},{"id":160487,"depth":210,"text":160488},{"id":160614,"depth":210,"text":160615},{"id":160744,"depth":210,"text":160745},{"id":160929,"depth":210,"text":160930},{"id":161165,"depth":210,"text":161166},{"id":161254,"depth":210,"text":161255},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159666,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161308,"title":161309,"body":161310,"description":2384,"extension":2385,"meta":163077,"navigation":842,"path":163078,"seo":163079,"stem":163080,"__hash__":163081},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161311,"toc":163057},[161312,161315,161319,161325,161328,161345,161349,161351,161368,161370,161415,161417,161434,161438,161441,161507,161510,161528,161532,161693,161702,161706,161710,161715,161762,161764,161770,161774,161779,161826,161828,161834,161838,161843,161879,161882,161927,161931,161937,161995,162000,162031,162036,162040,162095,162098,162170,162173,162232,162236,162239,162314,162317,162321,162427,162430,162456,162460,162472,162541,162544,162636,162640,162642,162653,162655,162785,162789,162991,162999,163003,163033,163037,163054],[10,161313,161309],{"id":161314},"_4-循环语句",[14,161316,161318],{"id":161317},"_41-为什么需要循环","4.1 为什么需要循环",[19,161320,161321,161322,161324],{},"如果要输出 1 到 100，不应该写 100 行 ",[50,161323,148682],{},"，而应该用循环。",[19,161326,161327],{},"循环适合处理重复任务：",[1760,161329,161330,161333,161336,161339,161342],{},[1763,161331,161332],{},"重复输出。",[1763,161334,161335],{},"重复输入。",[1763,161337,161338],{},"遍历数据。",[1763,161340,161341],{},"持续执行菜单。",[1763,161343,161344],{},"批量处理文件或数据。",[14,161346,161348],{"id":161347},"_42-while循环","4.2 while循环",[19,161350,7459],{},[130,161352,161354],{"className":132,"code":161353,"language":134,"meta":135,"style":135},"while 条件:\n    循环体\n",[50,161355,161356,161363],{"__ignoreMap":135},[139,161357,161358,161360],{"class":141,"line":142},[139,161359,110884],{"class":149},[139,161361,161362],{"class":145}," 条件:\n",[139,161364,161365],{"class":141,"line":210},[139,161366,161367],{"class":145},"    循环体\n",[19,161369,128],{},[130,161371,161373],{"className":132,"code":161372,"language":134,"meta":135,"style":135},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[50,161374,161375,161383,161387,161399,161406],{"__ignoreMap":135},[139,161376,161377,161379,161381],{"class":141,"line":142},[139,161378,102375],{"class":145},[139,161380,150],{"class":149},[139,161382,57933],{"class":153},[139,161384,161385],{"class":141,"line":210},[139,161386,843],{"emptyLinePlaceholder":842},[139,161388,161389,161391,161393,161395,161397],{"class":141,"line":254},[139,161390,110884],{"class":149},[139,161392,11712],{"class":145},[139,161394,3885],{"class":149},[139,161396,4433],{"class":153},[139,161398,246],{"class":145},[139,161400,161401,161403],{"class":141,"line":262},[139,161402,302],{"class":153},[139,161404,161405],{"class":145},"(i)\n",[139,161407,161408,161411,161413],{"class":141,"line":313},[139,161409,161410],{"class":145},"    i ",[139,161412,11751],{"class":149},[139,161414,57933],{"class":153},[19,161416,83157],{},[1760,161418,161419,161425,161428,161431],{},[1763,161420,161421,161422,170],{},"判断条件 ",[50,161423,161424],{},"i \u003C= 5",[1763,161426,161427],{},"条件成立，执行循环体。",[1763,161429,161430],{},"执行完后回到条件判断。",[1763,161432,161433],{},"条件不成立，退出循环。",[14,161435,161437],{"id":161436},"_43-while累加","4.3 while累加",[19,161439,161440],{},"计算 1 到 100 的和：",[130,161442,161444],{"className":132,"code":161443,"language":134,"meta":135,"style":135},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[50,161445,161446,161454,161462,161466,161478,161488,161496,161500],{"__ignoreMap":135},[139,161447,161448,161450,161452],{"class":141,"line":142},[139,161449,102375],{"class":145},[139,161451,150],{"class":149},[139,161453,57933],{"class":153},[139,161455,161456,161458,161460],{"class":141,"line":210},[139,161457,159436],{"class":145},[139,161459,150],{"class":149},[139,161461,49571],{"class":153},[139,161463,161464],{"class":141,"line":254},[139,161465,843],{"emptyLinePlaceholder":842},[139,161467,161468,161470,161472,161474,161476],{"class":141,"line":262},[139,161469,110884],{"class":149},[139,161471,11712],{"class":145},[139,161473,3885],{"class":149},[139,161475,8028],{"class":153},[139,161477,246],{"class":145},[139,161479,161480,161483,161485],{"class":141,"line":313},[139,161481,161482],{"class":145},"    total ",[139,161484,11751],{"class":149},[139,161486,161487],{"class":145}," i\n",[139,161489,161490,161492,161494],{"class":141,"line":462},[139,161491,161410],{"class":145},[139,161493,11751],{"class":149},[139,161495,57933],{"class":153},[139,161497,161498],{"class":141,"line":474},[139,161499,843],{"emptyLinePlaceholder":842},[139,161501,161502,161504],{"class":141,"line":484},[139,161503,213],{"class":153},[139,161505,161506],{"class":145},"(total)\n",[19,161508,161509],{},"核心思想：",[1760,161511,161512,161517,161522],{},[1763,161513,161514,161516],{},[50,161515,2879],{}," 控制循环次数。",[1763,161518,161519,161521],{},[50,161520,159537],{}," 保存累加结果。",[1763,161523,161524,161525,161527],{},"每轮循环都要更新 ",[50,161526,2879],{},"，否则可能死循环。",[14,161529,161531],{"id":161530},"_44-while猜数字","4.4 while猜数字",[130,161533,161535],{"className":132,"code":161534,"language":134,"meta":135,"style":135},"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",[50,161536,161537,161543,161547,161564,161572,161576,161584,161604,161613,161617,161629,161640,161650,161661,161667,161689],{"__ignoreMap":135},[139,161538,161539,161541],{"class":141,"line":142},[139,161540,1064],{"class":149},[139,161542,1232],{"class":145},[139,161544,161545],{"class":141,"line":210},[139,161546,843],{"emptyLinePlaceholder":842},[139,161548,161549,161551,161553,161556,161558,161560,161562],{"class":141,"line":254},[139,161550,161215],{"class":145},[139,161552,150],{"class":149},[139,161554,161555],{"class":145}," random.randint(",[139,161557,410],{"class":153},[139,161559,413],{"class":145},[139,161561,1017],{"class":153},[139,161563,164],{"class":145},[139,161565,161566,161568,161570],{"class":141,"line":262},[139,161567,148900],{"class":145},[139,161569,150],{"class":149},[139,161571,49571],{"class":153},[139,161573,161574],{"class":141,"line":313},[139,161575,843],{"emptyLinePlaceholder":842},[139,161577,161578,161580,161582],{"class":141,"line":462},[139,161579,110884],{"class":149},[139,161581,97519],{"class":153},[139,161583,246],{"class":145},[139,161585,161586,161589,161591,161593,161595,161597,161599,161602],{"class":141,"line":474},[139,161587,161588],{"class":145},"    guess ",[139,161590,150],{"class":149},[139,161592,154],{"class":153},[139,161594,157],{"class":145},[139,161596,199],{"class":153},[139,161598,157],{"class":145},[139,161600,161601],{"class":160},"\"请输入1到100之间的数字:\"",[139,161603,207],{"class":145},[139,161605,161606,161609,161611],{"class":141,"line":484},[139,161607,161608],{"class":145},"    count ",[139,161610,11751],{"class":149},[139,161612,57933],{"class":153},[139,161614,161615],{"class":141,"line":989},[139,161616,843],{"emptyLinePlaceholder":842},[139,161618,161619,161621,161624,161626],{"class":141,"line":994},[139,161620,790],{"class":149},[139,161622,161623],{"class":145}," guess ",[139,161625,958],{"class":149},[139,161627,161628],{"class":145}," answer:\n",[139,161630,161631,161633,161635,161638],{"class":141,"line":999},[139,161632,34698],{"class":153},[139,161634,157],{"class":145},[139,161636,161637],{"class":160},"\"猜大了\"",[139,161639,164],{"class":145},[139,161641,161642,161644,161646,161648],{"class":141,"line":1006},[139,161643,41535],{"class":149},[139,161645,161623],{"class":145},[139,161647,796],{"class":149},[139,161649,161628],{"class":145},[139,161651,161652,161654,161656,161659],{"class":141,"line":1027},[139,161653,34698],{"class":153},[139,161655,157],{"class":145},[139,161657,161658],{"class":160},"\"猜小了\"",[139,161660,164],{"class":145},[139,161662,161663,161665],{"class":141,"line":1040},[139,161664,160197],{"class":149},[139,161666,246],{"class":145},[139,161668,161669,161671,161673,161675,161678,161680,161682,161684,161687],{"class":141,"line":2160},[139,161670,34698],{"class":153},[139,161672,157],{"class":145},[139,161674,619],{"class":149},[139,161676,161677],{"class":160},"\"猜对了，一共猜了",[139,161679,625],{"class":153},[139,161681,86662],{"class":145},[139,161683,631],{"class":153},[139,161685,161686],{"class":160},"次\"",[139,161688,164],{"class":145},[139,161690,161691],{"class":141,"line":2188},[139,161692,33876],{"class":149},[19,161694,161695,161698,161699,161701],{},[50,161696,161697],{},"while True"," 表示无限循环，通常配合 ",[50,161700,4338],{}," 使用。",[14,161703,161705],{"id":161704},"_45-break和continue","4.5 break和continue",[1217,161707,161709],{"id":161708},"_451-break","4.5.1 break",[19,161711,161712,161714],{},[50,161713,4338],{}," 直接结束整个循环。",[130,161716,161718],{"className":132,"code":161717,"language":134,"meta":135,"style":135},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[50,161719,161720,161740,161752,161756],{"__ignoreMap":135},[139,161721,161722,161724,161726,161728,161730,161732,161734,161736,161738],{"class":141,"line":142},[139,161723,1970],{"class":149},[139,161725,11712],{"class":145},[139,161727,1976],{"class":149},[139,161729,34690],{"class":153},[139,161731,157],{"class":145},[139,161733,410],{"class":153},[139,161735,413],{"class":145},[139,161737,2782],{"class":153},[139,161739,558],{"class":145},[139,161741,161742,161744,161746,161748,161750],{"class":141,"line":210},[139,161743,790],{"class":149},[139,161745,11712],{"class":145},[139,161747,5232],{"class":149},[139,161749,80299],{"class":153},[139,161751,246],{"class":145},[139,161753,161754],{"class":141,"line":254},[139,161755,33876],{"class":149},[139,161757,161758,161760],{"class":141,"line":262},[139,161759,302],{"class":153},[139,161761,161405],{"class":145},[19,161763,639],{},[130,161765,161768],{"className":161766,"code":161767,"language":645,"meta":135},[643],"1\n2\n",[50,161769,161767],{"__ignoreMap":135},[1217,161771,161773],{"id":161772},"_452-continue","4.5.2 continue",[19,161775,161776,161778],{},[50,161777,156855],{}," 跳过本轮剩余代码，进入下一轮循环。",[130,161780,161782],{"className":132,"code":161781,"language":134,"meta":135,"style":135},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[50,161783,161784,161804,161816,161820],{"__ignoreMap":135},[139,161785,161786,161788,161790,161792,161794,161796,161798,161800,161802],{"class":141,"line":142},[139,161787,1970],{"class":149},[139,161789,11712],{"class":145},[139,161791,1976],{"class":149},[139,161793,34690],{"class":153},[139,161795,157],{"class":145},[139,161797,410],{"class":153},[139,161799,413],{"class":145},[139,161801,2782],{"class":153},[139,161803,558],{"class":145},[139,161805,161806,161808,161810,161812,161814],{"class":141,"line":210},[139,161807,790],{"class":149},[139,161809,11712],{"class":145},[139,161811,5232],{"class":149},[139,161813,80299],{"class":153},[139,161815,246],{"class":145},[139,161817,161818],{"class":141,"line":254},[139,161819,150713],{"class":149},[139,161821,161822,161824],{"class":141,"line":262},[139,161823,302],{"class":153},[139,161825,161405],{"class":145},[19,161827,639],{},[130,161829,161832],{"className":161830,"code":161831,"language":645,"meta":135},[643],"1\n2\n4\n5\n",[50,161833,161831],{"__ignoreMap":135},[14,161835,161837],{"id":161836},"_46-for循环","4.6 for循环",[19,161839,161840,161842],{},[50,161841,1970],{}," 常用于遍历序列。",[130,161844,161846],{"className":132,"code":161845,"language":134,"meta":135,"style":135},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[50,161847,161848,161857,161861,161872],{"__ignoreMap":135},[139,161849,161850,161852,161854],{"class":141,"line":142},[139,161851,148746],{"class":145},[139,161853,150],{"class":149},[139,161855,161856],{"class":160}," \"python\"\n",[139,161858,161859],{"class":141,"line":210},[139,161860,843],{"emptyLinePlaceholder":842},[139,161862,161863,161865,161868,161870],{"class":141,"line":254},[139,161864,1970],{"class":149},[139,161866,161867],{"class":145}," ch ",[139,161869,1976],{"class":149},[139,161871,160574],{"class":145},[139,161873,161874,161876],{"class":141,"line":262},[139,161875,302],{"class":153},[139,161877,161878],{"class":145},"(ch)\n",[19,161880,161881],{},"遍历列表：",[130,161883,161885],{"className":132,"code":161884,"language":134,"meta":135,"style":135},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[50,161886,161887,161907,161911,161921],{"__ignoreMap":135},[139,161888,161889,161891,161893,161895,161897,161899,161901,161903,161905],{"class":141,"line":142},[139,161890,2244],{"class":145},[139,161892,150],{"class":149},[139,161894,407],{"class":145},[139,161896,1441],{"class":160},[139,161898,413],{"class":145},[139,161900,1446],{"class":160},[139,161902,413],{"class":145},[139,161904,1451],{"class":160},[139,161906,424],{"class":145},[139,161908,161909],{"class":141,"line":210},[139,161910,843],{"emptyLinePlaceholder":842},[139,161912,161913,161915,161917,161919],{"class":141,"line":254},[139,161914,1970],{"class":149},[139,161916,154325],{"class":145},[139,161918,1976],{"class":149},[139,161920,154330],{"class":145},[139,161922,161923,161925],{"class":141,"line":262},[139,161924,302],{"class":153},[139,161926,152241],{"class":145},[14,161928,161930],{"id":161929},"_47-range函数","4.7 range函数",[19,161932,161933,161936],{},[50,161934,161935],{},"range()"," 用于生成整数序列。",[130,161938,161940],{"className":132,"code":161939,"language":134,"meta":135,"style":135},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[50,161941,161942,161956,161974],{"__ignoreMap":135},[139,161943,161944,161946,161948,161950,161953],{"class":141,"line":142},[139,161945,35661],{"class":153},[139,161947,157],{"class":145},[139,161949,1481],{"class":153},[139,161951,161952],{"class":145},")          ",[139,161954,161955],{"class":2512},"# 0,1,2,3,4\n",[139,161957,161958,161960,161962,161964,161966,161968,161971],{"class":141,"line":210},[139,161959,35661],{"class":153},[139,161961,157],{"class":145},[139,161963,410],{"class":153},[139,161965,413],{"class":145},[139,161967,1481],{"class":153},[139,161969,161970],{"class":145},")       ",[139,161972,161973],{"class":2512},"# 1,2,3,4\n",[139,161975,161976,161978,161980,161982,161984,161986,161988,161990,161992],{"class":141,"line":254},[139,161977,35661],{"class":153},[139,161979,157],{"class":145},[139,161981,410],{"class":153},[139,161983,413],{"class":145},[139,161985,536],{"class":153},[139,161987,413],{"class":145},[139,161989,416],{"class":153},[139,161991,157843],{"class":145},[139,161993,161994],{"class":2512},"# 1,3,5,7,9\n",[19,161996,161997,161998,1122],{},"配合 ",[50,161999,1970],{},[130,162001,162003],{"className":132,"code":162002,"language":134,"meta":135,"style":135},"for i in range(1, 6):\n    print(i)\n",[50,162004,162005,162025],{"__ignoreMap":135},[139,162006,162007,162009,162011,162013,162015,162017,162019,162021,162023],{"class":141,"line":142},[139,162008,1970],{"class":149},[139,162010,11712],{"class":145},[139,162012,1976],{"class":149},[139,162014,34690],{"class":153},[139,162016,157],{"class":145},[139,162018,410],{"class":153},[139,162020,413],{"class":145},[139,162022,2782],{"class":153},[139,162024,558],{"class":145},[139,162026,162027,162029],{"class":141,"line":210},[139,162028,302],{"class":153},[139,162030,161405],{"class":145},[19,162032,11299,162033,162035],{},[50,162034,35661],{}," 的结束值不包含在内。",[14,162037,162039],{"id":162038},"_48-for循环求和","4.8 for循环求和",[130,162041,162043],{"className":132,"code":162042,"language":134,"meta":135,"style":135},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[50,162044,162045,162053,162057,162077,162085,162089],{"__ignoreMap":135},[139,162046,162047,162049,162051],{"class":141,"line":142},[139,162048,159436],{"class":145},[139,162050,150],{"class":149},[139,162052,49571],{"class":153},[139,162054,162055],{"class":141,"line":210},[139,162056,843],{"emptyLinePlaceholder":842},[139,162058,162059,162061,162063,162065,162067,162069,162071,162073,162075],{"class":141,"line":254},[139,162060,1970],{"class":149},[139,162062,11712],{"class":145},[139,162064,1976],{"class":149},[139,162066,34690],{"class":153},[139,162068,157],{"class":145},[139,162070,410],{"class":153},[139,162072,413],{"class":145},[139,162074,2775],{"class":153},[139,162076,558],{"class":145},[139,162078,162079,162081,162083],{"class":141,"line":262},[139,162080,161482],{"class":145},[139,162082,11751],{"class":149},[139,162084,161487],{"class":145},[139,162086,162087],{"class":141,"line":313},[139,162088,843],{"emptyLinePlaceholder":842},[139,162090,162091,162093],{"class":141,"line":462},[139,162092,213],{"class":153},[139,162094,161506],{"class":145},[19,162096,162097],{},"求偶数和：",[130,162099,162101],{"className":132,"code":162100,"language":134,"meta":135,"style":135},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[50,162102,162103,162111,162115,162135,162151,162160,162164],{"__ignoreMap":135},[139,162104,162105,162107,162109],{"class":141,"line":142},[139,162106,159436],{"class":145},[139,162108,150],{"class":149},[139,162110,49571],{"class":153},[139,162112,162113],{"class":141,"line":210},[139,162114,843],{"emptyLinePlaceholder":842},[139,162116,162117,162119,162121,162123,162125,162127,162129,162131,162133],{"class":141,"line":254},[139,162118,1970],{"class":149},[139,162120,11712],{"class":145},[139,162122,1976],{"class":149},[139,162124,34690],{"class":153},[139,162126,157],{"class":145},[139,162128,410],{"class":153},[139,162130,413],{"class":145},[139,162132,2775],{"class":153},[139,162134,558],{"class":145},[139,162136,162137,162139,162141,162143,162145,162147,162149],{"class":141,"line":262},[139,162138,790],{"class":149},[139,162140,11712],{"class":145},[139,162142,2766],{"class":149},[139,162144,17024],{"class":153},[139,162146,1735],{"class":149},[139,162148,799],{"class":153},[139,162150,246],{"class":145},[139,162152,162153,162156,162158],{"class":141,"line":313},[139,162154,162155],{"class":145},"        total ",[139,162157,11751],{"class":149},[139,162159,161487],{"class":145},[139,162161,162162],{"class":141,"line":462},[139,162163,843],{"emptyLinePlaceholder":842},[139,162165,162166,162168],{"class":141,"line":474},[139,162167,213],{"class":153},[139,162169,161506],{"class":145},[19,162171,162172],{},"也可以：",[130,162174,162176],{"className":132,"code":162175,"language":134,"meta":135,"style":135},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[50,162177,162178,162186,162190,162214,162222,162226],{"__ignoreMap":135},[139,162179,162180,162182,162184],{"class":141,"line":142},[139,162181,159436],{"class":145},[139,162183,150],{"class":149},[139,162185,49571],{"class":153},[139,162187,162188],{"class":141,"line":210},[139,162189,843],{"emptyLinePlaceholder":842},[139,162191,162192,162194,162196,162198,162200,162202,162204,162206,162208,162210,162212],{"class":141,"line":254},[139,162193,1970],{"class":149},[139,162195,11712],{"class":145},[139,162197,1976],{"class":149},[139,162199,34690],{"class":153},[139,162201,157],{"class":145},[139,162203,416],{"class":153},[139,162205,413],{"class":145},[139,162207,2775],{"class":153},[139,162209,413],{"class":145},[139,162211,416],{"class":153},[139,162213,558],{"class":145},[139,162215,162216,162218,162220],{"class":141,"line":262},[139,162217,161482],{"class":145},[139,162219,11751],{"class":149},[139,162221,161487],{"class":145},[139,162223,162224],{"class":141,"line":313},[139,162225,843],{"emptyLinePlaceholder":842},[139,162227,162228,162230],{"class":141,"line":462},[139,162229,213],{"class":153},[139,162231,161506],{"class":145},[14,162233,162235],{"id":162234},"_49-循环嵌套","4.9 循环嵌套",[19,162237,162238],{},"嵌套循环就是循环里面再写循环。",[130,162240,162242],{"className":132,"code":162241,"language":134,"meta":135,"style":135},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[50,162243,162244,162264,162284],{"__ignoreMap":135},[139,162245,162246,162248,162250,162252,162254,162256,162258,162260,162262],{"class":141,"line":142},[139,162247,1970],{"class":149},[139,162249,11712],{"class":145},[139,162251,1976],{"class":149},[139,162253,34690],{"class":153},[139,162255,157],{"class":145},[139,162257,410],{"class":153},[139,162259,413],{"class":145},[139,162261,1476],{"class":153},[139,162263,558],{"class":145},[139,162265,162266,162268,162270,162272,162274,162276,162278,162280,162282],{"class":141,"line":210},[139,162267,5482],{"class":149},[139,162269,11774],{"class":145},[139,162271,1976],{"class":149},[139,162273,34690],{"class":153},[139,162275,157],{"class":145},[139,162277,410],{"class":153},[139,162279,413],{"class":145},[139,162281,1476],{"class":153},[139,162283,558],{"class":145},[139,162285,162286,162288,162290,162292,162295,162297,162299,162301,162304,162306,162308,162310,162312],{"class":141,"line":254},[139,162287,34698],{"class":153},[139,162289,157],{"class":145},[139,162291,619],{"class":149},[139,162293,162294],{"class":160},"\"i=",[139,162296,625],{"class":153},[139,162298,2879],{"class":145},[139,162300,631],{"class":153},[139,162302,162303],{"class":160},", j=",[139,162305,625],{"class":153},[139,162307,2904],{"class":145},[139,162309,631],{"class":153},[139,162311,634],{"class":160},[139,162313,164],{"class":145},[19,162315,162316],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162318,162320],{"id":162319},"_410-九九乘法表","4.10 九九乘法表",[130,162322,162324],{"className":132,"code":162323,"language":134,"meta":135,"style":135},"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",[50,162325,162326,162346,162369,162421],{"__ignoreMap":135},[139,162327,162328,162330,162332,162334,162336,162338,162340,162342,162344],{"class":141,"line":142},[139,162329,1970],{"class":149},[139,162331,11712],{"class":145},[139,162333,1976],{"class":149},[139,162335,34690],{"class":153},[139,162337,157],{"class":145},[139,162339,410],{"class":153},[139,162341,413],{"class":145},[139,162343,536],{"class":153},[139,162345,558],{"class":145},[139,162347,162348,162350,162352,162354,162356,162358,162360,162363,162365,162367],{"class":141,"line":210},[139,162349,5482],{"class":149},[139,162351,11774],{"class":145},[139,162353,1976],{"class":149},[139,162355,34690],{"class":153},[139,162357,157],{"class":145},[139,162359,410],{"class":153},[139,162361,162362],{"class":145},", i ",[139,162364,1147],{"class":149},[139,162366,27381],{"class":153},[139,162368,558],{"class":145},[139,162370,162371,162373,162375,162377,162379,162381,162383,162385,162387,162389,162391,162393,162395,162397,162399,162401,162403,162405,162407,162409,162411,162413,162415,162417,162419],{"class":141,"line":254},[139,162372,34698],{"class":153},[139,162374,157],{"class":145},[139,162376,619],{"class":149},[139,162378,634],{"class":160},[139,162380,625],{"class":153},[139,162382,2904],{"class":145},[139,162384,631],{"class":153},[139,162386,2892],{"class":160},[139,162388,625],{"class":153},[139,162390,2879],{"class":145},[139,162392,631],{"class":153},[139,162394,150],{"class":160},[139,162396,625],{"class":153},[139,162398,102375],{"class":145},[139,162400,2892],{"class":149},[139,162402,5691],{"class":145},[139,162404,631],{"class":153},[139,162406,634],{"class":160},[139,162408,413],{"class":145},[139,162410,48039],{"class":2111},[139,162412,150],{"class":149},[139,162414,634],{"class":160},[139,162416,3531],{"class":153},[139,162418,634],{"class":160},[139,162420,164],{"class":145},[139,162422,162423,162425],{"class":141,"line":262},[139,162424,302],{"class":153},[139,162426,4262],{"class":145},[19,162428,162429],{},"关键点：",[1760,162431,162432,162438,162444,162450],{},[1763,162433,162434,162435,162437],{},"外层 ",[50,162436,2879],{}," 控制行。",[1763,162439,162440,162441,162443],{},"内层 ",[50,162442,2904],{}," 控制列。",[1763,162445,162446,162447,162449],{},"每行结束后用 ",[50,162448,148682],{}," 换行。",[1763,162451,162452,162455],{},[50,162453,162454],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162457,162459],{"id":162458},"_411-循环else","4.11 循环else",[19,162461,162462,162463,162465,162466,162468,162469,162471],{},"Python 的循环可以带 ",[50,162464,656],{},"。当循环正常结束时执行 ",[50,162467,656],{},"，如果被 ",[50,162470,4338],{}," 打断，则不执行。",[130,162473,162475],{"className":132,"code":162474,"language":134,"meta":135,"style":135},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[50,162476,162477,162497,162509,162520,162524,162530],{"__ignoreMap":135},[139,162478,162479,162481,162483,162485,162487,162489,162491,162493,162495],{"class":141,"line":142},[139,162480,1970],{"class":149},[139,162482,11712],{"class":145},[139,162484,1976],{"class":149},[139,162486,34690],{"class":153},[139,162488,157],{"class":145},[139,162490,410],{"class":153},[139,162492,413],{"class":145},[139,162494,2782],{"class":153},[139,162496,558],{"class":145},[139,162498,162499,162501,162503,162505,162507],{"class":141,"line":210},[139,162500,790],{"class":149},[139,162502,11712],{"class":145},[139,162504,5232],{"class":149},[139,162506,4323],{"class":153},[139,162508,246],{"class":145},[139,162510,162511,162513,162515,162518],{"class":141,"line":254},[139,162512,34698],{"class":153},[139,162514,157],{"class":145},[139,162516,162517],{"class":160},"\"找到了\"",[139,162519,164],{"class":145},[139,162521,162522],{"class":141,"line":262},[139,162523,33876],{"class":149},[139,162525,162526,162528],{"class":141,"line":313},[139,162527,656],{"class":149},[139,162529,246],{"class":145},[139,162531,162532,162534,162536,162539],{"class":141,"line":462},[139,162533,302],{"class":153},[139,162535,157],{"class":145},[139,162537,162538],{"class":160},"\"没找到\"",[139,162540,164],{"class":145},[19,162542,162543],{},"常用于搜索。",[130,162545,162547],{"className":132,"code":162546,"language":134,"meta":135,"style":135},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[50,162548,162549,162570,162579,162583,162595,162606,162616,162620,162626],{"__ignoreMap":135},[139,162550,162551,162554,162556,162558,162560,162562,162564,162566,162568],{"class":141,"line":142},[139,162552,162553],{"class":145},"names ",[139,162555,150],{"class":149},[139,162557,407],{"class":145},[139,162559,1441],{"class":160},[139,162561,413],{"class":145},[139,162563,1446],{"class":160},[139,162565,413],{"class":145},[139,162567,1451],{"class":160},[139,162569,424],{"class":145},[139,162571,162572,162574,162576],{"class":141,"line":210},[139,162573,113799],{"class":145},[139,162575,150],{"class":149},[139,162577,162578],{"class":160}," \"小李\"\n",[139,162580,162581],{"class":141,"line":254},[139,162582,843],{"emptyLinePlaceholder":842},[139,162584,162585,162587,162590,162592],{"class":141,"line":262},[139,162586,1970],{"class":149},[139,162588,162589],{"class":145}," name ",[139,162591,1976],{"class":149},[139,162593,162594],{"class":145}," names:\n",[139,162596,162597,162599,162601,162603],{"class":141,"line":313},[139,162598,790],{"class":149},[139,162600,162589],{"class":145},[139,162602,5232],{"class":149},[139,162604,162605],{"class":145}," target:\n",[139,162607,162608,162610,162612,162614],{"class":141,"line":462},[139,162609,34698],{"class":153},[139,162611,157],{"class":145},[139,162613,162517],{"class":160},[139,162615,164],{"class":145},[139,162617,162618],{"class":141,"line":474},[139,162619,33876],{"class":149},[139,162621,162622,162624],{"class":141,"line":484},[139,162623,656],{"class":149},[139,162625,246],{"class":145},[139,162627,162628,162630,162632,162634],{"class":141,"line":989},[139,162629,302],{"class":153},[139,162631,157],{"class":145},[139,162633,162538],{"class":160},[139,162635,164],{"class":145},[14,162637,162639],{"id":162638},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162641,125510],{},[1760,162643,162644,162647,162650],{},[1763,162645,162646],{},"用户最多输入 3 次密码。",[1763,162648,162649],{},"密码正确则登录成功。",[1763,162651,162652],{},"3 次都错误则锁定账号。",[19,162654,12309],{},[130,162656,162658],{"className":132,"code":162657,"language":134,"meta":135,"style":135},"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",[50,162659,162660,162670,162674,162690,162706,162710,162722,162733,162737,162743,162768,162774],{"__ignoreMap":135},[139,162661,162662,162665,162667],{"class":141,"line":142},[139,162663,162664],{"class":145},"password ",[139,162666,150],{"class":149},[139,162668,162669],{"class":160}," \"123456\"\n",[139,162671,162672],{"class":141,"line":210},[139,162673,843],{"emptyLinePlaceholder":842},[139,162675,162676,162678,162680,162682,162684,162686,162688],{"class":141,"line":254},[139,162677,1970],{"class":149},[139,162679,11712],{"class":145},[139,162681,1976],{"class":149},[139,162683,34690],{"class":153},[139,162685,157],{"class":145},[139,162687,421],{"class":153},[139,162689,558],{"class":145},[139,162691,162692,162695,162697,162699,162701,162704],{"class":141,"line":262},[139,162693,162694],{"class":145},"    user_password ",[139,162696,150],{"class":149},[139,162698,62838],{"class":153},[139,162700,157],{"class":145},[139,162702,162703],{"class":160},"\"请输入密码:\"",[139,162705,164],{"class":145},[139,162707,162708],{"class":141,"line":313},[139,162709,843],{"emptyLinePlaceholder":842},[139,162711,162712,162714,162717,162719],{"class":141,"line":462},[139,162713,790],{"class":149},[139,162715,162716],{"class":145}," user_password ",[139,162718,5232],{"class":149},[139,162720,162721],{"class":145}," password:\n",[139,162723,162724,162726,162728,162731],{"class":141,"line":474},[139,162725,34698],{"class":153},[139,162727,157],{"class":145},[139,162729,162730],{"class":160},"\"登录成功\"",[139,162732,164],{"class":145},[139,162734,162735],{"class":141,"line":484},[139,162736,33876],{"class":149},[139,162738,162739,162741],{"class":141,"line":989},[139,162740,160197],{"class":149},[139,162742,246],{"class":145},[139,162744,162745,162747,162749,162751,162754,162757,162759,162761,162763,162766],{"class":141,"line":994},[139,162746,34698],{"class":153},[139,162748,157],{"class":145},[139,162750,619],{"class":149},[139,162752,162753],{"class":160},"\"密码错误，还剩",[139,162755,162756],{"class":153},"{2",[139,162758,54506],{"class":149},[139,162760,5314],{"class":145},[139,162762,631],{"class":153},[139,162764,162765],{"class":160},"次机会\"",[139,162767,164],{"class":145},[139,162769,162770,162772],{"class":141,"line":999},[139,162771,656],{"class":149},[139,162773,246],{"class":145},[139,162775,162776,162778,162780,162783],{"class":141,"line":1006},[139,162777,302],{"class":153},[139,162779,157],{"class":145},[139,162781,162782],{"class":160},"\"账号已锁定\"",[139,162784,164],{"class":145},[14,162786,162788],{"id":162787},"_413-小案例菜单程序","4.13 小案例：菜单程序",[130,162790,162792],{"className":132,"code":162791,"language":134,"meta":135,"style":135},"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",[50,162793,162794,162802,162813,162824,162835,162846,162857,162861,162876,162880,162892,162903,162915,162926,162938,162949,162961,162971,162975,162981],{"__ignoreMap":135},[139,162795,162796,162798,162800],{"class":141,"line":142},[139,162797,110884],{"class":149},[139,162799,97519],{"class":153},[139,162801,246],{"class":145},[139,162803,162804,162806,162808,162811],{"class":141,"line":210},[139,162805,302],{"class":153},[139,162807,157],{"class":145},[139,162809,162810],{"class":160},"\"====== 菜单 ======\"",[139,162812,164],{"class":145},[139,162814,162815,162817,162819,162822],{"class":141,"line":254},[139,162816,302],{"class":153},[139,162818,157],{"class":145},[139,162820,162821],{"class":160},"\"1. 查询余额\"",[139,162823,164],{"class":145},[139,162825,162826,162828,162830,162833],{"class":141,"line":262},[139,162827,302],{"class":153},[139,162829,157],{"class":145},[139,162831,162832],{"class":160},"\"2. 存款\"",[139,162834,164],{"class":145},[139,162836,162837,162839,162841,162844],{"class":141,"line":313},[139,162838,302],{"class":153},[139,162840,157],{"class":145},[139,162842,162843],{"class":160},"\"3. 取款\"",[139,162845,164],{"class":145},[139,162847,162848,162850,162852,162855],{"class":141,"line":462},[139,162849,302],{"class":153},[139,162851,157],{"class":145},[139,162853,162854],{"class":160},"\"0. 退出\"",[139,162856,164],{"class":145},[139,162858,162859],{"class":141,"line":474},[139,162860,843],{"emptyLinePlaceholder":842},[139,162862,162863,162866,162868,162870,162872,162874],{"class":141,"line":484},[139,162864,162865],{"class":145},"    choice ",[139,162867,150],{"class":149},[139,162869,62838],{"class":153},[139,162871,157],{"class":145},[139,162873,155258],{"class":160},[139,162875,164],{"class":145},[139,162877,162878],{"class":141,"line":989},[139,162879,843],{"emptyLinePlaceholder":842},[139,162881,162882,162884,162886,162888,162890],{"class":141,"line":994},[139,162883,790],{"class":149},[139,162885,155271],{"class":145},[139,162887,5232],{"class":149},[139,162889,155276],{"class":160},[139,162891,246],{"class":145},[139,162893,162894,162896,162898,162901],{"class":141,"line":999},[139,162895,34698],{"class":153},[139,162897,157],{"class":145},[139,162899,162900],{"class":160},"\"余额为1000元\"",[139,162902,164],{"class":145},[139,162904,162905,162907,162909,162911,162913],{"class":141,"line":1006},[139,162906,41535],{"class":149},[139,162908,155271],{"class":145},[139,162910,5232],{"class":149},[139,162912,155295],{"class":160},[139,162914,246],{"class":145},[139,162916,162917,162919,162921,162924],{"class":141,"line":1027},[139,162918,34698],{"class":153},[139,162920,157],{"class":145},[139,162922,162923],{"class":160},"\"存款功能\"",[139,162925,164],{"class":145},[139,162927,162928,162930,162932,162934,162936],{"class":141,"line":1040},[139,162929,41535],{"class":149},[139,162931,155271],{"class":145},[139,162933,5232],{"class":149},[139,162935,155313],{"class":160},[139,162937,246],{"class":145},[139,162939,162940,162942,162944,162947],{"class":141,"line":2160},[139,162941,34698],{"class":153},[139,162943,157],{"class":145},[139,162945,162946],{"class":160},"\"取款功能\"",[139,162948,164],{"class":145},[139,162950,162951,162953,162955,162957,162959],{"class":141,"line":2188},[139,162952,41535],{"class":149},[139,162954,155271],{"class":145},[139,162956,5232],{"class":149},[139,162958,155367],{"class":160},[139,162960,246],{"class":145},[139,162962,162963,162965,162967,162969],{"class":141,"line":3944},[139,162964,34698],{"class":153},[139,162966,157],{"class":145},[139,162968,155378],{"class":160},[139,162970,164],{"class":145},[139,162972,162973],{"class":141,"line":3963},[139,162974,33876],{"class":149},[139,162976,162977,162979],{"class":141,"line":3968},[139,162978,160197],{"class":149},[139,162980,246],{"class":145},[139,162982,162983,162985,162987,162989],{"class":141,"line":3982},[139,162984,34698],{"class":153},[139,162986,157],{"class":145},[139,162988,709],{"class":160},[139,162990,164],{"class":145},[19,162992,162993,162994,162996,162997,170],{},"菜单类程序通常使用 ",[50,162995,161697],{},"，用户选择退出时 ",[50,162998,4338],{},[14,163000,163002],{"id":163001},"_414-易错点","4.14 易错点",[1760,163004,163005,163010,163016,163024,163030],{},[1763,163006,163007,163009],{},[50,163008,110884],{}," 循环必须更新控制变量。",[1763,163011,163012,163015],{},[50,163013,163014],{},"range(1, 10)"," 不包含 10。",[1763,163017,163018,163020,163021,163023],{},[50,163019,4338],{}," 结束整个循环，",[50,163022,156855],{}," 只跳过本轮。",[1763,163025,163026,163027,163029],{},"嵌套循环中，",[50,163028,4338],{}," 只跳出当前所在的一层循环。",[1763,163031,163032],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163034,163036],{"id":163035},"_415-本章练习","4.15 本章练习",[1760,163038,163039,163042,163045,163048,163051],{},[1763,163040,163041],{},"输出 1 到 100。",[1763,163043,163044],{},"计算 1 到 100 的偶数和。",[1763,163046,163047],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1763,163049,163050],{},"编写猜数字游戏，限制最多猜 7 次。",[1763,163052,163053],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2348,163055,163056],{},"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":135,"searchDepth":210,"depth":210,"links":163058},[163059,163060,163061,163062,163063,163067,163068,163069,163070,163071,163072,163073,163074,163075,163076],{"id":161317,"depth":210,"text":161318},{"id":161347,"depth":210,"text":161348},{"id":161436,"depth":210,"text":161437},{"id":161530,"depth":210,"text":161531},{"id":161704,"depth":210,"text":161705,"children":163064},[163065,163066],{"id":161708,"depth":254,"text":161709},{"id":161772,"depth":254,"text":161773},{"id":161836,"depth":210,"text":161837},{"id":161929,"depth":210,"text":161930},{"id":162038,"depth":210,"text":162039},{"id":162234,"depth":210,"text":162235},{"id":162319,"depth":210,"text":162320},{"id":162458,"depth":210,"text":162459},{"id":162638,"depth":210,"text":162639},{"id":162787,"depth":210,"text":162788},{"id":163001,"depth":210,"text":163002},{"id":163035,"depth":210,"text":163036},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161309,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163083,"title":163084,"body":163085,"description":2384,"extension":2385,"meta":165084,"navigation":842,"path":165085,"seo":165086,"stem":165087,"__hash__":165088},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163086,"toc":165064},[163087,163090,163094,163097,163100,163114,163117,163131,163135,163137,163156,163158,163205,163207,163221,163225,163299,163302,163306,163309,163368,163376,163379,163432,163435,163439,163444,163499,163507,163557,163561,163566,163574,163672,163678,163682,163687,163690,163701,163742,163755,163759,163762,163798,163801,163814,163817,163877,163881,163885,163888,163939,163943,163946,163993,163999,164065,164068,164072,164075,164190,164193,164197,164200,164306,164310,164313,164351,164354,164396,164399,164459,164462,164466,164928,164931,164935,164962,164968,165027,165031,165061],[10,163088,163084],{"id":163089},"_5-函数基础",[14,163091,163093],{"id":163092},"_51-为什么需要函数","5.1 为什么需要函数",[19,163095,163096],{},"函数用于封装一段可以重复使用的代码。",[19,163098,163099],{},"不使用函数的问题：",[1760,163101,163102,163105,163108,163111],{},[1763,163103,163104],{},"重复代码多。",[1763,163106,163107],{},"修改逻辑时容易漏改。",[1763,163109,163110],{},"主流程不清晰。",[1763,163112,163113],{},"程序越写越长，难以维护。",[19,163115,163116],{},"使用函数后的好处：",[1760,163118,163119,163122,163125,163128],{},[1763,163120,163121],{},"提高复用性。",[1763,163123,163124],{},"提高可读性。",[1763,163126,163127],{},"便于调试。",[1763,163129,163130],{},"便于分工。",[14,163132,163134],{"id":163133},"_52-函数定义","5.2 函数定义",[19,163136,7459],{},[130,163138,163140],{"className":132,"code":163139,"language":134,"meta":135,"style":135},"def 函数名():\n    函数体\n",[50,163141,163142,163151],{"__ignoreMap":135},[139,163143,163144,163146,163149],{"class":141,"line":142},[139,163145,778],{"class":149},[139,163147,163148],{"class":781}," 函数名",[139,163150,34200],{"class":145},[139,163152,163153],{"class":141,"line":210},[139,163154,163155],{"class":145},"    函数体\n",[19,163157,128],{},[130,163159,163161],{"className":132,"code":163160,"language":134,"meta":135,"style":135},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[50,163162,163163,163172,163182,163192,163196,163200],{"__ignoreMap":135},[139,163164,163165,163167,163170],{"class":141,"line":142},[139,163166,778],{"class":149},[139,163168,163169],{"class":781}," say_hello",[139,163171,34200],{"class":145},[139,163173,163174,163176,163178,163180],{"class":141,"line":210},[139,163175,302],{"class":153},[139,163177,157],{"class":145},[139,163179,8118],{"class":160},[139,163181,164],{"class":145},[139,163183,163184,163186,163188,163190],{"class":141,"line":254},[139,163185,302],{"class":153},[139,163187,157],{"class":145},[139,163189,148848],{"class":160},[139,163191,164],{"class":145},[139,163193,163194],{"class":141,"line":262},[139,163195,843],{"emptyLinePlaceholder":842},[139,163197,163198],{"class":141,"line":313},[139,163199,843],{"emptyLinePlaceholder":842},[139,163201,163202],{"class":141,"line":462},[139,163203,163204],{"class":145},"say_hello()\n",[19,163206,11299],{},[1760,163208,163209,163212,163215,163218],{},[1763,163210,163211],{},"函数必须先定义，再调用。",[1763,163213,163214],{},"函数名遵循变量命名规则。",[1763,163216,163217],{},"函数体需要缩进。",[1763,163219,163220],{},"函数不调用就不会执行。",[14,163222,163224],{"id":163223},"_53-函数调用","5.3 函数调用",[130,163226,163228],{"className":132,"code":163227,"language":134,"meta":135,"style":135},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[50,163229,163230,163239,163250,163261,163272,163282,163286,163290,163295],{"__ignoreMap":135},[139,163231,163232,163234,163237],{"class":141,"line":142},[139,163233,778],{"class":149},[139,163235,163236],{"class":781}," print_menu",[139,163238,34200],{"class":145},[139,163240,163241,163243,163245,163248],{"class":141,"line":210},[139,163242,302],{"class":153},[139,163244,157],{"class":145},[139,163246,163247],{"class":160},"\"1. 查询\"",[139,163249,164],{"class":145},[139,163251,163252,163254,163256,163259],{"class":141,"line":254},[139,163253,302],{"class":153},[139,163255,157],{"class":145},[139,163257,163258],{"class":160},"\"2. 添加\"",[139,163260,164],{"class":145},[139,163262,163263,163265,163267,163270],{"class":141,"line":262},[139,163264,302],{"class":153},[139,163266,157],{"class":145},[139,163268,163269],{"class":160},"\"3. 删除\"",[139,163271,164],{"class":145},[139,163273,163274,163276,163278,163280],{"class":141,"line":313},[139,163275,302],{"class":153},[139,163277,157],{"class":145},[139,163279,162854],{"class":160},[139,163281,164],{"class":145},[139,163283,163284],{"class":141,"line":462},[139,163285,843],{"emptyLinePlaceholder":842},[139,163287,163288],{"class":141,"line":474},[139,163289,843],{"emptyLinePlaceholder":842},[139,163291,163292],{"class":141,"line":484},[139,163293,163294],{"class":145},"print_menu()\n",[139,163296,163297],{"class":141,"line":989},[139,163298,163294],{"class":145},[19,163300,163301],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163303,163305],{"id":163304},"_54-参数","5.4 参数",[19,163307,163308],{},"参数用于向函数传递数据。",[130,163310,163312],{"className":132,"code":163311,"language":134,"meta":135,"style":135},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[50,163313,163314,163323,163343,163347,163351,163360],{"__ignoreMap":135},[139,163315,163316,163318,163320],{"class":141,"line":142},[139,163317,778],{"class":149},[139,163319,163169],{"class":781},[139,163321,163322],{"class":145},"(name):\n",[139,163324,163325,163327,163329,163331,163333,163335,163337,163339,163341],{"class":141,"line":210},[139,163326,302],{"class":153},[139,163328,157],{"class":145},[139,163330,619],{"class":149},[139,163332,159230],{"class":160},[139,163334,625],{"class":153},[139,163336,1676],{"class":145},[139,163338,631],{"class":153},[139,163340,634],{"class":160},[139,163342,164],{"class":145},[139,163344,163345],{"class":141,"line":254},[139,163346,843],{"emptyLinePlaceholder":842},[139,163348,163349],{"class":141,"line":262},[139,163350,843],{"emptyLinePlaceholder":842},[139,163352,163353,163356,163358],{"class":141,"line":313},[139,163354,163355],{"class":145},"say_hello(",[139,163357,1441],{"class":160},[139,163359,164],{"class":145},[139,163361,163362,163364,163366],{"class":141,"line":462},[139,163363,163355],{"class":145},[139,163365,1446],{"class":160},[139,163367,164],{"class":145},[19,163369,163370,163372,163373,163375],{},[50,163371,1676],{}," 是形参，",[50,163374,1441],{}," 是实参。",[19,163377,163378],{},"多个参数：",[130,163380,163382],{"className":132,"code":163381,"language":134,"meta":135,"style":135},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[50,163383,163384,163392,163405,163411,163415,163419],{"__ignoreMap":135},[139,163385,163386,163388,163390],{"class":141,"line":142},[139,163387,778],{"class":149},[139,163389,1134],{"class":781},[139,163391,1137],{"class":145},[139,163393,163394,163397,163399,163401,163403],{"class":141,"line":210},[139,163395,163396],{"class":145},"    result ",[139,163398,150],{"class":149},[139,163400,1144],{"class":145},[139,163402,1147],{"class":149},[139,163404,1150],{"class":145},[139,163406,163407,163409],{"class":141,"line":254},[139,163408,302],{"class":153},[139,163410,78814],{"class":145},[139,163412,163413],{"class":141,"line":262},[139,163414,843],{"emptyLinePlaceholder":842},[139,163416,163417],{"class":141,"line":313},[139,163418,843],{"emptyLinePlaceholder":842},[139,163420,163421,163424,163426,163428,163430],{"class":141,"line":462},[139,163422,163423],{"class":145},"add(",[139,163425,536],{"class":153},[139,163427,413],{"class":145},[139,163429,3135],{"class":153},[139,163431,164],{"class":145},[19,163433,163434],{},"调用时参数数量必须匹配。",[14,163436,163438],{"id":163437},"_55-返回值","5.5 返回值",[19,163440,163441,163443],{},[50,163442,19313],{}," 用于把函数内部的结果返回给调用者。",[130,163445,163447],{"className":132,"code":163446,"language":134,"meta":135,"style":135},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[50,163448,163449,163457,163467,163471,163475,163493],{"__ignoreMap":135},[139,163450,163451,163453,163455],{"class":141,"line":142},[139,163452,778],{"class":149},[139,163454,1134],{"class":781},[139,163456,1137],{"class":145},[139,163458,163459,163461,163463,163465],{"class":141,"line":210},[139,163460,978],{"class":149},[139,163462,1144],{"class":145},[139,163464,1147],{"class":149},[139,163466,1150],{"class":145},[139,163468,163469],{"class":141,"line":254},[139,163470,843],{"emptyLinePlaceholder":842},[139,163472,163473],{"class":141,"line":262},[139,163474,843],{"emptyLinePlaceholder":842},[139,163476,163477,163480,163482,163485,163487,163489,163491],{"class":141,"line":313},[139,163478,163479],{"class":145},"result ",[139,163481,150],{"class":149},[139,163483,163484],{"class":145}," add(",[139,163486,536],{"class":153},[139,163488,413],{"class":145},[139,163490,3135],{"class":153},[139,163492,164],{"class":145},[139,163494,163495,163497],{"class":141,"line":462},[139,163496,213],{"class":153},[139,163498,78814],{"class":145},[19,163500,163501,163502,163504,163505,170],{},"如果函数没有写 ",[50,163503,19313],{},"，默认返回 ",[50,163506,97913],{},[130,163508,163510],{"className":132,"code":163509,"language":134,"meta":135,"style":135},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[50,163511,163512,163520,163530,163534,163538,163547],{"__ignoreMap":135},[139,163513,163514,163516,163518],{"class":141,"line":142},[139,163515,778],{"class":149},[139,163517,163169],{"class":781},[139,163519,34200],{"class":145},[139,163521,163522,163524,163526,163528],{"class":141,"line":210},[139,163523,302],{"class":153},[139,163525,157],{"class":145},[139,163527,8118],{"class":160},[139,163529,164],{"class":145},[139,163531,163532],{"class":141,"line":254},[139,163533,843],{"emptyLinePlaceholder":842},[139,163535,163536],{"class":141,"line":262},[139,163537,843],{"emptyLinePlaceholder":842},[139,163539,163540,163542,163544],{"class":141,"line":313},[139,163541,163479],{"class":145},[139,163543,150],{"class":149},[139,163545,163546],{"class":145}," say_hello()\n",[139,163548,163549,163551,163554],{"class":141,"line":462},[139,163550,213],{"class":153},[139,163552,163553],{"class":145},"(result)  ",[139,163555,163556],{"class":2512},"# None\n",[14,163558,163560],{"id":163559},"_56-return的作用","5.6 return的作用",[19,163562,163563,163565],{},[50,163564,19313],{}," 有两个作用：",[1760,163567,163568,163571],{},[1763,163569,163570],{},"返回结果。",[1763,163572,163573],{},"结束函数。",[130,163575,163577],{"className":132,"code":163576,"language":134,"meta":135,"style":135},"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",[50,163578,163579,163588,163600,163607,163611,163623,163630,163634,163641,163645,163649,163660],{"__ignoreMap":135},[139,163580,163581,163583,163586],{"class":141,"line":142},[139,163582,778],{"class":149},[139,163584,163585],{"class":781}," check_age",[139,163587,785],{"class":145},[139,163589,163590,163592,163594,163596,163598],{"class":141,"line":210},[139,163591,790],{"class":149},[139,163593,793],{"class":145},[139,163595,796],{"class":149},[139,163597,799],{"class":153},[139,163599,246],{"class":145},[139,163601,163602,163604],{"class":141,"line":254},[139,163603,2085],{"class":149},[139,163605,163606],{"class":160}," \"年龄不合法\"\n",[139,163608,163609],{"class":141,"line":262},[139,163610,843],{"emptyLinePlaceholder":842},[139,163612,163613,163615,163617,163619,163621],{"class":141,"line":313},[139,163614,790],{"class":149},[139,163616,793],{"class":145},[139,163618,3998],{"class":149},[139,163620,158462],{"class":153},[139,163622,246],{"class":145},[139,163624,163625,163627],{"class":141,"line":462},[139,163626,2085],{"class":149},[139,163628,163629],{"class":160}," \"成年人\"\n",[139,163631,163632],{"class":141,"line":474},[139,163633,843],{"emptyLinePlaceholder":842},[139,163635,163636,163638],{"class":141,"line":484},[139,163637,978],{"class":149},[139,163639,163640],{"class":160}," \"未成年人\"\n",[139,163642,163643],{"class":141,"line":989},[139,163644,843],{"emptyLinePlaceholder":842},[139,163646,163647],{"class":141,"line":994},[139,163648,843],{"emptyLinePlaceholder":842},[139,163650,163651,163653,163656,163658],{"class":141,"line":999},[139,163652,213],{"class":153},[139,163654,163655],{"class":145},"(check_age(",[139,163657,3135],{"class":153},[139,163659,207],{"class":145},[139,163661,163662,163664,163666,163668,163670],{"class":141,"line":1006},[139,163663,213],{"class":153},[139,163665,163655],{"class":145},[139,163667,855],{"class":149},[139,163669,410],{"class":153},[139,163671,207],{"class":145},[19,163673,163674,163675,163677],{},"函数执行到 ",[50,163676,19313],{}," 后，后面的代码不会继续执行。",[14,163679,163681],{"id":163680},"_57-none","5.7 None",[19,163683,163684,163686],{},[50,163685,97913],{}," 表示空值或没有结果。",[19,163688,163689],{},"常见使用场景：",[1760,163691,163692,163695,163698],{},[1763,163693,163694],{},"函数没有返回值。",[1763,163696,163697],{},"变量暂时没有具体值。",[1763,163699,163700],{},"表示查询不到结果。",[130,163702,163704],{"className":132,"code":163703,"language":134,"meta":135,"style":135},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[50,163705,163706,163714,163718,163731],{"__ignoreMap":135},[139,163707,163708,163710,163712],{"class":141,"line":142},[139,163709,163479],{"class":145},[139,163711,150],{"class":149},[139,163713,154360],{"class":153},[139,163715,163716],{"class":141,"line":210},[139,163717,843],{"emptyLinePlaceholder":842},[139,163719,163720,163722,163725,163727,163729],{"class":141,"line":254},[139,163721,1729],{"class":149},[139,163723,163724],{"class":145}," result ",[139,163726,41170],{"class":149},[139,163728,41175],{"class":153},[139,163730,246],{"class":145},[139,163732,163733,163735,163737,163740],{"class":141,"line":262},[139,163734,302],{"class":153},[139,163736,157],{"class":145},[139,163738,163739],{"class":160},"\"没有数据\"",[139,163741,164],{"class":145},[19,163743,163744,163745,163747,163748,163751,163752,170],{},"判断 ",[50,163746,97913],{}," 推荐使用 ",[50,163749,163750],{},"is None","，不要写成 ",[50,163753,163754],{},"== None",[14,163756,163758],{"id":163757},"_58-函数文档字符串","5.8 函数文档字符串",[19,163760,163761],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[130,163763,163765],{"className":132,"code":163764,"language":134,"meta":135,"style":135},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[50,163766,163767,163777,163782],{"__ignoreMap":135},[139,163768,163769,163771,163774],{"class":141,"line":142},[139,163770,778],{"class":149},[139,163772,163773],{"class":781}," calculate_bmi",[139,163775,163776],{"class":145},"(weight, height):\n",[139,163778,163779],{"class":141,"line":210},[139,163780,163781],{"class":160},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[139,163783,163784,163786,163789,163791,163794,163796],{"class":141,"line":254},[139,163785,978],{"class":149},[139,163787,163788],{"class":145}," weight ",[139,163790,3019],{"class":149},[139,163792,163793],{"class":145}," height ",[139,163795,12935],{"class":149},[139,163797,49961],{"class":153},[19,163799,163800],{},"查看说明：",[130,163802,163804],{"className":132,"code":163803,"language":134,"meta":135,"style":135},"help(calculate_bmi)\n",[50,163805,163806],{"__ignoreMap":135},[139,163807,163808,163811],{"class":141,"line":142},[139,163809,163810],{"class":153},"help",[139,163812,163813],{"class":145},"(calculate_bmi)\n",[19,163815,163816],{},"较完整的写法：",[130,163818,163820],{"className":132,"code":163819,"language":134,"meta":135,"style":135},"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",[50,163821,163822,163830,163835,163840,163844,163849,163854,163859,163863],{"__ignoreMap":135},[139,163823,163824,163826,163828],{"class":141,"line":142},[139,163825,778],{"class":149},[139,163827,163773],{"class":781},[139,163829,163776],{"class":145},[139,163831,163832],{"class":141,"line":210},[139,163833,163834],{"class":160},"    \"\"\"\n",[139,163836,163837],{"class":141,"line":254},[139,163838,163839],{"class":160},"    计算BMI。\n",[139,163841,163842],{"class":141,"line":262},[139,163843,843],{"emptyLinePlaceholder":842},[139,163845,163846],{"class":141,"line":313},[139,163847,163848],{"class":160},"    :param weight: 体重，单位kg\n",[139,163850,163851],{"class":141,"line":462},[139,163852,163853],{"class":160},"    :param height: 身高，单位m\n",[139,163855,163856],{"class":141,"line":474},[139,163857,163858],{"class":160},"    :return: BMI数值\n",[139,163860,163861],{"class":141,"line":484},[139,163862,163834],{"class":160},[139,163864,163865,163867,163869,163871,163873,163875],{"class":141,"line":989},[139,163866,978],{"class":149},[139,163868,163788],{"class":145},[139,163870,3019],{"class":149},[139,163872,163793],{"class":145},[139,163874,12935],{"class":149},[139,163876,49961],{"class":153},[14,163878,163880],{"id":163879},"_59-变量作用域","5.9 变量作用域",[1217,163882,163884],{"id":163883},"_591-局部变量","5.9.1 局部变量",[19,163886,163887],{},"在函数内部定义的变量，只能在函数内部使用。",[130,163889,163891],{"className":132,"code":163890,"language":134,"meta":135,"style":135},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[50,163892,163893,163902,163910,163916,163920,163924,163929],{"__ignoreMap":135},[139,163894,163895,163897,163900],{"class":141,"line":142},[139,163896,778],{"class":149},[139,163898,163899],{"class":781}," test",[139,163901,34200],{"class":145},[139,163903,163904,163906,163908],{"class":141,"line":210},[139,163905,512],{"class":145},[139,163907,150],{"class":149},[139,163909,60661],{"class":153},[139,163911,163912,163914],{"class":141,"line":254},[139,163913,302],{"class":153},[139,163915,2470],{"class":145},[139,163917,163918],{"class":141,"line":262},[139,163919,843],{"emptyLinePlaceholder":842},[139,163921,163922],{"class":141,"line":313},[139,163923,843],{"emptyLinePlaceholder":842},[139,163925,163926],{"class":141,"line":462},[139,163927,163928],{"class":145},"test()\n",[139,163930,163931,163933,163936],{"class":141,"line":474},[139,163932,213],{"class":153},[139,163934,163935],{"class":145},"(num)  ",[139,163937,163938],{"class":2512},"# 报错\n",[1217,163940,163942],{"id":163941},"_592-全局变量","5.9.2 全局变量",[19,163944,163945],{},"在函数外部定义的变量，可以在函数内部读取。",[130,163947,163949],{"className":132,"code":163948,"language":134,"meta":135,"style":135},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[50,163950,163951,163959,163963,163967,163975,163981,163985,163989],{"__ignoreMap":135},[139,163952,163953,163955,163957],{"class":141,"line":142},[139,163954,148746],{"class":145},[139,163956,150],{"class":149},[139,163958,151554],{"class":160},[139,163960,163961],{"class":141,"line":210},[139,163962,843],{"emptyLinePlaceholder":842},[139,163964,163965],{"class":141,"line":254},[139,163966,843],{"emptyLinePlaceholder":842},[139,163968,163969,163971,163973],{"class":141,"line":262},[139,163970,778],{"class":149},[139,163972,163169],{"class":781},[139,163974,34200],{"class":145},[139,163976,163977,163979],{"class":141,"line":313},[139,163978,302],{"class":153},[139,163980,152855],{"class":145},[139,163982,163983],{"class":141,"line":462},[139,163984,843],{"emptyLinePlaceholder":842},[139,163986,163987],{"class":141,"line":474},[139,163988,843],{"emptyLinePlaceholder":842},[139,163990,163991],{"class":141,"line":484},[139,163992,163204],{"class":145},[19,163994,163995,163996,170],{},"如果要在函数内部修改全局变量，需要 ",[50,163997,163998],{},"global",[130,164000,164002],{"className":132,"code":164001,"language":134,"meta":135,"style":135},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[50,164003,164004,164012,164016,164020,164029,164037,164045,164049,164053,164058],{"__ignoreMap":135},[139,164005,164006,164008,164010],{"class":141,"line":142},[139,164007,148900],{"class":145},[139,164009,150],{"class":149},[139,164011,49571],{"class":153},[139,164013,164014],{"class":141,"line":210},[139,164015,843],{"emptyLinePlaceholder":842},[139,164017,164018],{"class":141,"line":254},[139,164019,843],{"emptyLinePlaceholder":842},[139,164021,164022,164024,164027],{"class":141,"line":262},[139,164023,778],{"class":149},[139,164025,164026],{"class":781}," add_count",[139,164028,34200],{"class":145},[139,164030,164031,164034],{"class":141,"line":313},[139,164032,164033],{"class":149},"    global",[139,164035,164036],{"class":145}," count\n",[139,164038,164039,164041,164043],{"class":141,"line":462},[139,164040,161608],{"class":145},[139,164042,11751],{"class":149},[139,164044,57933],{"class":153},[139,164046,164047],{"class":141,"line":474},[139,164048,843],{"emptyLinePlaceholder":842},[139,164050,164051],{"class":141,"line":484},[139,164052,843],{"emptyLinePlaceholder":842},[139,164054,164055],{"class":141,"line":989},[139,164056,164057],{"class":145},"add_count()\n",[139,164059,164060,164062],{"class":141,"line":994},[139,164061,213],{"class":153},[139,164063,164064],{"class":145},"(count)\n",[19,164066,164067],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164069,164071],{"id":164070},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164073,164074],{},"一个函数中可以调用另一个函数。",[130,164076,164078],{"className":132,"code":164077,"language":134,"meta":135,"style":135},"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",[50,164079,164080,164089,164103,164107,164111,164120,164125,164145,164165,164169,164173,164177],{"__ignoreMap":135},[139,164081,164082,164084,164087],{"class":141,"line":142},[139,164083,778],{"class":149},[139,164085,164086],{"class":781}," print_line",[139,164088,34200],{"class":145},[139,164090,164091,164093,164095,164097,164099,164101],{"class":141,"line":210},[139,164092,302],{"class":153},[139,164094,157],{"class":145},[139,164096,34730],{"class":160},[139,164098,8792],{"class":149},[139,164100,80894],{"class":153},[139,164102,164],{"class":145},[139,164104,164105],{"class":141,"line":254},[139,164106,843],{"emptyLinePlaceholder":842},[139,164108,164109],{"class":141,"line":262},[139,164110,843],{"emptyLinePlaceholder":842},[139,164112,164113,164115,164118],{"class":141,"line":313},[139,164114,778],{"class":149},[139,164116,164117],{"class":781}," print_info",[139,164119,151576],{"class":145},[139,164121,164122],{"class":141,"line":462},[139,164123,164124],{"class":145},"    print_line()\n",[139,164126,164127,164129,164131,164133,164135,164137,164139,164141,164143],{"class":141,"line":474},[139,164128,302],{"class":153},[139,164130,157],{"class":145},[139,164132,619],{"class":149},[139,164134,158859],{"class":160},[139,164136,625],{"class":153},[139,164138,1676],{"class":145},[139,164140,631],{"class":153},[139,164142,634],{"class":160},[139,164144,164],{"class":145},[139,164146,164147,164149,164151,164153,164155,164157,164159,164161,164163],{"class":141,"line":484},[139,164148,302],{"class":153},[139,164150,157],{"class":145},[139,164152,619],{"class":149},[139,164154,826],{"class":160},[139,164156,625],{"class":153},[139,164158,831],{"class":145},[139,164160,631],{"class":153},[139,164162,634],{"class":160},[139,164164,164],{"class":145},[139,164166,164167],{"class":141,"line":989},[139,164168,164124],{"class":145},[139,164170,164171],{"class":141,"line":994},[139,164172,843],{"emptyLinePlaceholder":842},[139,164174,164175],{"class":141,"line":999},[139,164176,843],{"emptyLinePlaceholder":842},[139,164178,164179,164182,164184,164186,164188],{"class":141,"line":1006},[139,164180,164181],{"class":145},"print_info(",[139,164183,1441],{"class":160},[139,164185,413],{"class":145},[139,164187,3085],{"class":153},[139,164189,164],{"class":145},[19,164191,164192],{},"这种方式可以把小功能组合成大功能。",[14,164194,164196],{"id":164195},"_511-参数检查","5.11 参数检查",[19,164198,164199],{},"函数内部可以检查参数是否合法。",[130,164201,164203],{"className":132,"code":164202,"language":134,"meta":135,"style":135},"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",[50,164204,164205,164214,164226,164232,164242,164246,164250,164267,164271,164283,164294,164300],{"__ignoreMap":135},[139,164206,164207,164209,164212],{"class":141,"line":142},[139,164208,778],{"class":149},[139,164210,164211],{"class":781}," divide",[139,164213,1137],{"class":145},[139,164215,164216,164218,164220,164222,164224],{"class":141,"line":210},[139,164217,790],{"class":149},[139,164219,13155],{"class":145},[139,164221,5232],{"class":149},[139,164223,799],{"class":153},[139,164225,246],{"class":145},[139,164227,164228,164230],{"class":141,"line":254},[139,164229,2085],{"class":149},[139,164231,154360],{"class":153},[139,164233,164234,164236,164238,164240],{"class":141,"line":262},[139,164235,978],{"class":149},[139,164237,1144],{"class":145},[139,164239,3019],{"class":149},[139,164241,1150],{"class":145},[139,164243,164244],{"class":141,"line":313},[139,164245,843],{"emptyLinePlaceholder":842},[139,164247,164248],{"class":141,"line":462},[139,164249,843],{"emptyLinePlaceholder":842},[139,164251,164252,164254,164256,164259,164261,164263,164265],{"class":141,"line":474},[139,164253,163479],{"class":145},[139,164255,150],{"class":149},[139,164257,164258],{"class":145}," divide(",[139,164260,536],{"class":153},[139,164262,413],{"class":145},[139,164264,2634],{"class":153},[139,164266,164],{"class":145},[139,164268,164269],{"class":141,"line":484},[139,164270,843],{"emptyLinePlaceholder":842},[139,164272,164273,164275,164277,164279,164281],{"class":141,"line":989},[139,164274,1729],{"class":149},[139,164276,163724],{"class":145},[139,164278,41170],{"class":149},[139,164280,41175],{"class":153},[139,164282,246],{"class":145},[139,164284,164285,164287,164289,164292],{"class":141,"line":994},[139,164286,302],{"class":153},[139,164288,157],{"class":145},[139,164290,164291],{"class":160},"\"除数不能为0\"",[139,164293,164],{"class":145},[139,164295,164296,164298],{"class":141,"line":999},[139,164297,656],{"class":149},[139,164299,246],{"class":145},[139,164301,164302,164304],{"class":141,"line":1006},[139,164303,302],{"class":153},[139,164305,78814],{"class":145},[14,164307,164309],{"id":164308},"_512-类型提示","5.12 类型提示",[19,164311,164312],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[130,164314,164316],{"className":132,"code":164315,"language":134,"meta":135,"style":135},"def add(a: int, b: int) -> int:\n    return a + b\n",[50,164317,164318,164341],{"__ignoreMap":135},[139,164319,164320,164322,164324,164327,164329,164332,164334,164337,164339],{"class":141,"line":142},[139,164321,778],{"class":149},[139,164323,1134],{"class":781},[139,164325,164326],{"class":145},"(a: ",[139,164328,2461],{"class":153},[139,164330,164331],{"class":145},", b: ",[139,164333,2461],{"class":153},[139,164335,164336],{"class":145},") -> ",[139,164338,2461],{"class":153},[139,164340,246],{"class":145},[139,164342,164343,164345,164347,164349],{"class":141,"line":210},[139,164344,978],{"class":149},[139,164346,1144],{"class":145},[139,164348,1147],{"class":149},[139,164350,1150],{"class":145},[19,164352,164353],{},"字符串参数：",[130,164355,164357],{"className":132,"code":164356,"language":134,"meta":135,"style":135},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[50,164358,164359,164376],{"__ignoreMap":135},[139,164360,164361,164363,164365,164368,164370,164372,164374],{"class":141,"line":142},[139,164362,778],{"class":149},[139,164364,163169],{"class":781},[139,164366,164367],{"class":145},"(name: ",[139,164369,3600],{"class":153},[139,164371,164336],{"class":145},[139,164373,97913],{"class":153},[139,164375,246],{"class":145},[139,164377,164378,164380,164382,164384,164386,164388,164390,164392,164394],{"class":141,"line":210},[139,164379,302],{"class":153},[139,164381,157],{"class":145},[139,164383,619],{"class":149},[139,164385,159230],{"class":160},[139,164387,625],{"class":153},[139,164389,1676],{"class":145},[139,164391,631],{"class":153},[139,164393,634],{"class":160},[139,164395,164],{"class":145},[19,164397,164398],{},"列表参数：",[130,164400,164402],{"className":132,"code":164401,"language":134,"meta":135,"style":135},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[50,164403,164404,164423,164431,164443,164452],{"__ignoreMap":135},[139,164405,164406,164408,164411,164414,164416,164419,164421],{"class":141,"line":142},[139,164407,778],{"class":149},[139,164409,164410],{"class":781}," get_total",[139,164412,164413],{"class":145},"(numbers: list[",[139,164415,2461],{"class":153},[139,164417,164418],{"class":145},"]) -> ",[139,164420,2461],{"class":153},[139,164422,246],{"class":145},[139,164424,164425,164427,164429],{"class":141,"line":210},[139,164426,161482],{"class":145},[139,164428,150],{"class":149},[139,164430,49571],{"class":153},[139,164432,164433,164435,164438,164440],{"class":141,"line":254},[139,164434,5482],{"class":149},[139,164436,164437],{"class":145}," number ",[139,164439,1976],{"class":149},[139,164441,164442],{"class":145}," numbers:\n",[139,164444,164445,164447,164449],{"class":141,"line":262},[139,164446,162155],{"class":145},[139,164448,11751],{"class":149},[139,164450,164451],{"class":145}," number\n",[139,164453,164454,164456],{"class":141,"line":313},[139,164455,978],{"class":149},[139,164457,164458],{"class":145}," total\n",[19,164460,164461],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164463,164465],{"id":164464},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[130,164467,164469],{"className":132,"code":164468,"language":134,"meta":135,"style":135},"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",[50,164470,164471,164481,164485,164489,164497,164508,164518,164528,164538,164548,164552,164556,164565,164587,164591,164595,164604,164610,164630,164642,164653,164657,164665,164676,164681,164685,164689,164698,164704,164723,164735,164745,164749,164759,164769,164773,164781,164792,164796,164800,164804,164812,164817,164831,164835,164847,164852,164864,164869,164881,164886,164898,164908,164912,164918],{"__ignoreMap":135},[139,164472,164473,164476,164478],{"class":141,"line":142},[139,164474,164475],{"class":145},"balance ",[139,164477,150],{"class":149},[139,164479,164480],{"class":153}," 1000\n",[139,164482,164483],{"class":141,"line":210},[139,164484,843],{"emptyLinePlaceholder":842},[139,164486,164487],{"class":141,"line":254},[139,164488,843],{"emptyLinePlaceholder":842},[139,164490,164491,164493,164495],{"class":141,"line":262},[139,164492,778],{"class":149},[139,164494,154221],{"class":781},[139,164496,34200],{"class":145},[139,164498,164499,164501,164503,164506],{"class":141,"line":313},[139,164500,302],{"class":153},[139,164502,157],{"class":145},[139,164504,164505],{"class":160},"\"====== ATM ======\"",[139,164507,164],{"class":145},[139,164509,164510,164512,164514,164516],{"class":141,"line":462},[139,164511,302],{"class":153},[139,164513,157],{"class":145},[139,164515,162821],{"class":160},[139,164517,164],{"class":145},[139,164519,164520,164522,164524,164526],{"class":141,"line":474},[139,164521,302],{"class":153},[139,164523,157],{"class":145},[139,164525,162832],{"class":160},[139,164527,164],{"class":145},[139,164529,164530,164532,164534,164536],{"class":141,"line":484},[139,164531,302],{"class":153},[139,164533,157],{"class":145},[139,164535,162843],{"class":160},[139,164537,164],{"class":145},[139,164539,164540,164542,164544,164546],{"class":141,"line":989},[139,164541,302],{"class":153},[139,164543,157],{"class":145},[139,164545,162854],{"class":160},[139,164547,164],{"class":145},[139,164549,164550],{"class":141,"line":994},[139,164551,843],{"emptyLinePlaceholder":842},[139,164553,164554],{"class":141,"line":999},[139,164555,843],{"emptyLinePlaceholder":842},[139,164557,164558,164560,164563],{"class":141,"line":1006},[139,164559,778],{"class":149},[139,164561,164562],{"class":781}," show_balance",[139,164564,34200],{"class":145},[139,164566,164567,164569,164571,164573,164576,164578,164581,164583,164585],{"class":141,"line":1027},[139,164568,302],{"class":153},[139,164570,157],{"class":145},[139,164572,619],{"class":149},[139,164574,164575],{"class":160},"\"当前余额:",[139,164577,625],{"class":153},[139,164579,164580],{"class":145},"balance",[139,164582,631],{"class":153},[139,164584,159188],{"class":160},[139,164586,164],{"class":145},[139,164588,164589],{"class":141,"line":1040},[139,164590,843],{"emptyLinePlaceholder":842},[139,164592,164593],{"class":141,"line":2160},[139,164594,843],{"emptyLinePlaceholder":842},[139,164596,164597,164599,164602],{"class":141,"line":2188},[139,164598,778],{"class":149},[139,164600,164601],{"class":781}," save_money",[139,164603,34200],{"class":145},[139,164605,164606,164608],{"class":141,"line":3944},[139,164607,164033],{"class":149},[139,164609,152298],{"class":145},[139,164611,164612,164615,164617,164619,164621,164623,164625,164628],{"class":141,"line":3963},[139,164613,164614],{"class":145},"    money ",[139,164616,150],{"class":149},[139,164618,112018],{"class":153},[139,164620,157],{"class":145},[139,164622,199],{"class":153},[139,164624,157],{"class":145},[139,164626,164627],{"class":160},"\"请输入存款金额:\"",[139,164629,207],{"class":145},[139,164631,164632,164634,164636,164638,164640],{"class":141,"line":3968},[139,164633,790],{"class":149},[139,164635,955],{"class":145},[139,164637,3885],{"class":149},[139,164639,799],{"class":153},[139,164641,246],{"class":145},[139,164643,164644,164646,164648,164651],{"class":141,"line":3982},[139,164645,34698],{"class":153},[139,164647,157],{"class":145},[139,164649,164650],{"class":160},"\"金额必须大于0\"",[139,164652,164],{"class":145},[139,164654,164655],{"class":141,"line":3987},[139,164656,154548],{"class":149},[139,164658,164659,164661,164663],{"class":141,"line":4014},[139,164660,1009],{"class":145},[139,164662,11751],{"class":149},[139,164664,986],{"class":145},[139,164666,164667,164669,164671,164674],{"class":141,"line":4019},[139,164668,302],{"class":153},[139,164670,157],{"class":145},[139,164672,164673],{"class":160},"\"存款成功\"",[139,164675,164],{"class":145},[139,164677,164678],{"class":141,"line":4036},[139,164679,164680],{"class":145},"    show_balance()\n",[139,164682,164683],{"class":141,"line":4041},[139,164684,843],{"emptyLinePlaceholder":842},[139,164686,164687],{"class":141,"line":4046},[139,164688,843],{"emptyLinePlaceholder":842},[139,164690,164691,164693,164696],{"class":141,"line":4051},[139,164692,778],{"class":149},[139,164694,164695],{"class":781}," withdraw_money",[139,164697,34200],{"class":145},[139,164699,164700,164702],{"class":141,"line":4065},[139,164701,164033],{"class":149},[139,164703,152298],{"class":145},[139,164705,164706,164708,164710,164712,164714,164716,164718,164721],{"class":141,"line":4070},[139,164707,164614],{"class":145},[139,164709,150],{"class":149},[139,164711,112018],{"class":153},[139,164713,157],{"class":145},[139,164715,199],{"class":153},[139,164717,157],{"class":145},[139,164719,164720],{"class":160},"\"请输入取款金额:\"",[139,164722,207],{"class":145},[139,164724,164725,164727,164729,164731,164733],{"class":141,"line":4860},[139,164726,790],{"class":149},[139,164728,955],{"class":145},[139,164730,3885],{"class":149},[139,164732,799],{"class":153},[139,164734,246],{"class":145},[139,164736,164737,164739,164741,164743],{"class":141,"line":4874},[139,164738,34698],{"class":153},[139,164740,157],{"class":145},[139,164742,164650],{"class":160},[139,164744,164],{"class":145},[139,164746,164747],{"class":141,"line":4882},[139,164748,154548],{"class":149},[139,164750,164751,164753,164755,164757],{"class":141,"line":4887},[139,164752,790],{"class":149},[139,164754,955],{"class":145},[139,164756,958],{"class":149},[139,164758,961],{"class":145},[139,164760,164761,164763,164765,164767],{"class":141,"line":4893},[139,164762,34698],{"class":153},[139,164764,157],{"class":145},[139,164766,971],{"class":160},[139,164768,164],{"class":145},[139,164770,164771],{"class":141,"line":4899},[139,164772,154548],{"class":149},[139,164774,164775,164777,164779],{"class":141,"line":4904},[139,164776,1009],{"class":145},[139,164778,152447],{"class":149},[139,164780,986],{"class":145},[139,164782,164783,164785,164787,164790],{"class":141,"line":10222},[139,164784,302],{"class":153},[139,164786,157],{"class":145},[139,164788,164789],{"class":160},"\"取款成功\"",[139,164791,164],{"class":145},[139,164793,164794],{"class":141,"line":10246},[139,164795,164680],{"class":145},[139,164797,164798],{"class":141,"line":10251},[139,164799,843],{"emptyLinePlaceholder":842},[139,164801,164802],{"class":141,"line":10257},[139,164803,843],{"emptyLinePlaceholder":842},[139,164805,164806,164808,164810],{"class":141,"line":10284},[139,164807,110884],{"class":149},[139,164809,97519],{"class":153},[139,164811,246],{"class":145},[139,164813,164814],{"class":141,"line":10289},[139,164815,164816],{"class":145},"    show_menu()\n",[139,164818,164819,164821,164823,164825,164827,164829],{"class":141,"line":10295},[139,164820,162865],{"class":145},[139,164822,150],{"class":149},[139,164824,62838],{"class":153},[139,164826,157],{"class":145},[139,164828,155258],{"class":160},[139,164830,164],{"class":145},[139,164832,164833],{"class":141,"line":10307},[139,164834,843],{"emptyLinePlaceholder":842},[139,164836,164837,164839,164841,164843,164845],{"class":141,"line":10319},[139,164838,790],{"class":149},[139,164840,155271],{"class":145},[139,164842,5232],{"class":149},[139,164844,155276],{"class":160},[139,164846,246],{"class":145},[139,164848,164849],{"class":141,"line":10331},[139,164850,164851],{"class":145},"        show_balance()\n",[139,164853,164854,164856,164858,164860,164862],{"class":141,"line":11990},[139,164855,41535],{"class":149},[139,164857,155271],{"class":145},[139,164859,5232],{"class":149},[139,164861,155295],{"class":160},[139,164863,246],{"class":145},[139,164865,164866],{"class":141,"line":12015},[139,164867,164868],{"class":145},"        save_money()\n",[139,164870,164871,164873,164875,164877,164879],{"class":141,"line":12038},[139,164872,41535],{"class":149},[139,164874,155271],{"class":145},[139,164876,5232],{"class":149},[139,164878,155313],{"class":160},[139,164880,246],{"class":145},[139,164882,164883],{"class":141,"line":12062},[139,164884,164885],{"class":145},"        withdraw_money()\n",[139,164887,164888,164890,164892,164894,164896],{"class":141,"line":12067},[139,164889,41535],{"class":149},[139,164891,155271],{"class":145},[139,164893,5232],{"class":149},[139,164895,155367],{"class":160},[139,164897,246],{"class":145},[139,164899,164900,164902,164904,164906],{"class":141,"line":12072},[139,164901,34698],{"class":153},[139,164903,157],{"class":145},[139,164905,155378],{"class":160},[139,164907,164],{"class":145},[139,164909,164910],{"class":141,"line":12077},[139,164911,33876],{"class":149},[139,164913,164914,164916],{"class":141,"line":12086},[139,164915,160197],{"class":149},[139,164917,246],{"class":145},[139,164919,164920,164922,164924,164926],{"class":141,"line":12091},[139,164921,34698],{"class":153},[139,164923,157],{"class":145},[139,164925,709],{"class":160},[139,164927,164],{"class":145},[19,164929,164930],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164932,164934],{"id":164933},"_514-易错点","5.14 易错点",[1760,164936,164937,164940,164943,164948,164953,164956],{},[1763,164938,164939],{},"函数定义后必须调用才会执行。",[1763,164941,164942],{},"函数名后面有括号才是调用。",[1763,164944,164945,164947],{},[50,164946,19313],{}," 后面的代码不会执行。",[1763,164949,164950,164951,170],{},"没有返回值的函数默认返回 ",[50,164952,97913],{},[1763,164954,164955],{},"局部变量不能在函数外部访问。",[1763,164957,164958,164959,164961],{},"不要滥用 ",[50,164960,163998],{},"，更好的方式是让函数返回新值。",[19,164963,164964,164965,164967],{},"例如不用 ",[50,164966,163998],{}," 改写存款：",[130,164969,164971],{"className":132,"code":164970,"language":134,"meta":135,"style":135},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[50,164972,164973,164981,164991,164995,164999,165007,165020],{"__ignoreMap":135},[139,164974,164975,164977,164979],{"class":141,"line":142},[139,164976,778],{"class":149},[139,164978,164601],{"class":781},[139,164980,948],{"class":145},[139,164982,164983,164985,164987,164989],{"class":141,"line":210},[139,164984,978],{"class":149},[139,164986,981],{"class":145},[139,164988,1147],{"class":149},[139,164990,986],{"class":145},[139,164992,164993],{"class":141,"line":254},[139,164994,843],{"emptyLinePlaceholder":842},[139,164996,164997],{"class":141,"line":262},[139,164998,843],{"emptyLinePlaceholder":842},[139,165000,165001,165003,165005],{"class":141,"line":313},[139,165002,164475],{"class":145},[139,165004,150],{"class":149},[139,165006,164480],{"class":153},[139,165008,165009,165011,165013,165016,165018],{"class":141,"line":462},[139,165010,164475],{"class":145},[139,165012,150],{"class":149},[139,165014,165015],{"class":145}," save_money(balance, ",[139,165017,1022],{"class":153},[139,165019,164],{"class":145},[139,165021,165022,165024],{"class":141,"line":474},[139,165023,213],{"class":153},[139,165025,165026],{"class":145},"(balance)\n",[14,165028,165030],{"id":165029},"_515-本章练习","5.15 本章练习",[1760,165032,165033,165040,165046,165052,165058],{},[1763,165034,165035,165036,165039],{},"定义函数 ",[50,165037,165038],{},"print_student(name, age)","，输出学生信息。",[1763,165041,165035,165042,165045],{},[50,165043,165044],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1763,165047,165035,165048,165051],{},[50,165049,165050],{},"is_even(num)","，判断一个数是否为偶数。",[1763,165053,165035,165054,165057],{},[50,165055,165056],{},"calculate_bmi(weight, height)","，返回 BMI。",[1763,165059,165060],{},"把第 4 章的菜单程序拆分成多个函数。",[2348,165062,165063],{},"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":135,"searchDepth":210,"depth":210,"links":165065},[165066,165067,165068,165069,165070,165071,165072,165073,165074,165078,165079,165080,165081,165082,165083],{"id":163092,"depth":210,"text":163093},{"id":163133,"depth":210,"text":163134},{"id":163223,"depth":210,"text":163224},{"id":163304,"depth":210,"text":163305},{"id":163437,"depth":210,"text":163438},{"id":163559,"depth":210,"text":163560},{"id":163680,"depth":210,"text":163681},{"id":163757,"depth":210,"text":163758},{"id":163879,"depth":210,"text":163880,"children":165075},[165076,165077],{"id":163883,"depth":254,"text":163884},{"id":163941,"depth":254,"text":163942},{"id":164070,"depth":210,"text":164071},{"id":164195,"depth":210,"text":164196},{"id":164308,"depth":210,"text":164309},{"id":164464,"depth":210,"text":164465},{"id":164933,"depth":210,"text":164934},{"id":165029,"depth":210,"text":165030},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163084,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165090,"title":165091,"body":165092,"description":2384,"extension":2385,"meta":168135,"navigation":842,"path":168136,"seo":168137,"stem":168138,"__hash__":168139},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165093,"toc":168116},[165094,165097,165101,165104,165107,165211,165214,165218,165221,165301,165304,165308,165311,165371,165374,165410,165413,165428,165432,165505,165508,165563,165566,165636,165639,165723,165733,165791,165795,165840,165843,165869,165872,165978,165982,165985,166027,166030,166094,166097,166101,166104,166165,166168,166198,166201,166239,166243,166246,166255,166258,166382,166385,166426,166430,166433,166444,166484,166487,166502,166507,166510,166577,166580,166670,166674,166677,166725,166728,166755,166757,166787,166790,166810,166813,166844,166847,166880,166884,166887,166911,166914,166938,166941,166965,166969,166972,167102,167105,167185,167188,167263,167267,167270,167319,167322,167364,167367,167391,167393,167417,167420,167475,167478,167544,167548,167551,167554,167592,167595,167648,167651,167697,167700,167733,167736,167740,168059,168063,168092,168096,168113],[10,165095,165091],{"id":165096},"_6-数据容器",[14,165098,165100],{"id":165099},"_61-什么是数据容器","6.1 什么是数据容器",[19,165102,165103],{},"数据容器用于一次保存多个数据。",[19,165105,165106],{},"常见容器：",[26,165108,165109,165126],{},[29,165110,165111],{},[32,165112,165113,165115,165118,165121,165124],{},[35,165114,28034],{},[35,165116,165117],{},"是否有序",[35,165119,165120],{},"是否可变",[35,165122,165123],{},"是否允许重复",[35,165125,29752],{},[42,165127,165128,165146,165162,165177,165194],{},[32,165129,165130,165133,165136,165139,165142],{},[47,165131,165132],{},"list列表",[47,165134,165135],{},"有序",[47,165137,165138],{},"可变",[47,165140,165141],{},"允许",[47,165143,165144],{},[50,165145,157439],{},[32,165147,165148,165151,165153,165156,165158],{},[47,165149,165150],{},"tuple元组",[47,165152,165135],{},[47,165154,165155],{},"不可变",[47,165157,165141],{},[47,165159,165160],{},[50,165161,157452],{},[32,165163,165164,165167,165169,165171,165173],{},[47,165165,165166],{},"str字符串",[47,165168,165135],{},[47,165170,165155],{},[47,165172,165141],{},[47,165174,165175],{},[50,165176,161],{},[32,165178,165179,165182,165185,165187,165190],{},[47,165180,165181],{},"set集合",[47,165183,165184],{},"无序",[47,165186,165138],{},[47,165188,165189],{},"不允许",[47,165191,165192],{},[50,165193,157477],{},[32,165195,165196,165199,165201,165203,165206],{},[47,165197,165198],{},"dict字典",[47,165200,165135],{},[47,165202,165138],{},[47,165204,165205],{},"key不允许重复",[47,165207,165208],{},[50,165209,165210],{},"{\"name\": \"小明\"}",[19,165212,165213],{},"Python 3.7 之后，字典保持插入顺序。",[14,165215,165217],{"id":165216},"_62-列表list","6.2 列表list",[19,165219,165220],{},"列表用于保存一组有顺序的数据。",[130,165222,165224],{"className":132,"code":165223,"language":134,"meta":135,"style":135},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[50,165225,165226,165246,165271,165292],{"__ignoreMap":135},[139,165227,165228,165230,165232,165234,165236,165238,165240,165242,165244],{"class":141,"line":142},[139,165229,162553],{"class":145},[139,165231,150],{"class":149},[139,165233,407],{"class":145},[139,165235,1441],{"class":160},[139,165237,413],{"class":145},[139,165239,1446],{"class":160},[139,165241,413],{"class":145},[139,165243,1451],{"class":160},[139,165245,424],{"class":145},[139,165247,165248,165251,165253,165255,165257,165259,165261,165263,165265,165267,165269],{"class":141,"line":210},[139,165249,165250],{"class":145},"numbers ",[139,165252,150],{"class":149},[139,165254,407],{"class":145},[139,165256,410],{"class":153},[139,165258,413],{"class":145},[139,165260,416],{"class":153},[139,165262,413],{"class":145},[139,165264,421],{"class":153},[139,165266,413],{"class":145},[139,165268,1476],{"class":153},[139,165270,424],{"class":145},[139,165272,165273,165276,165278,165280,165282,165284,165286,165288,165290],{"class":141,"line":254},[139,165274,165275],{"class":145},"mixed ",[139,165277,150],{"class":149},[139,165279,407],{"class":145},[139,165281,1441],{"class":160},[139,165283,413],{"class":145},[139,165285,3085],{"class":153},[139,165287,413],{"class":145},[139,165289,33725],{"class":153},[139,165291,424],{"class":145},[139,165293,165294,165297,165299],{"class":141,"line":262},[139,165295,165296],{"class":145},"empty ",[139,165298,150],{"class":149},[139,165300,2088],{"class":145},[19,165302,165303],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165305,165307],{"id":165306},"_63-列表索引","6.3 列表索引",[19,165309,165310],{},"正向索引从 0 开始：",[130,165312,165314],{"className":132,"code":165313,"language":134,"meta":135,"style":135},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[50,165315,165316,165336,165340,165351,165361],{"__ignoreMap":135},[139,165317,165318,165320,165322,165324,165326,165328,165330,165332,165334],{"class":141,"line":142},[139,165319,162553],{"class":145},[139,165321,150],{"class":149},[139,165323,407],{"class":145},[139,165325,1441],{"class":160},[139,165327,413],{"class":145},[139,165329,1446],{"class":160},[139,165331,413],{"class":145},[139,165333,1451],{"class":160},[139,165335,424],{"class":145},[139,165337,165338],{"class":141,"line":210},[139,165339,843],{"emptyLinePlaceholder":842},[139,165341,165342,165344,165347,165349],{"class":141,"line":254},[139,165343,213],{"class":153},[139,165345,165346],{"class":145},"(names[",[139,165348,2634],{"class":153},[139,165350,6935],{"class":145},[139,165352,165353,165355,165357,165359],{"class":141,"line":262},[139,165354,213],{"class":153},[139,165356,165346],{"class":145},[139,165358,410],{"class":153},[139,165360,6935],{"class":145},[139,165362,165363,165365,165367,165369],{"class":141,"line":313},[139,165364,213],{"class":153},[139,165366,165346],{"class":145},[139,165368,416],{"class":153},[139,165370,6935],{"class":145},[19,165372,165373],{},"反向索引从 -1 开始：",[130,165375,165377],{"className":132,"code":165376,"language":134,"meta":135,"style":135},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[50,165378,165379,165395],{"__ignoreMap":135},[139,165380,165381,165383,165385,165387,165389,165392],{"class":141,"line":142},[139,165382,213],{"class":153},[139,165384,165346],{"class":145},[139,165386,855],{"class":149},[139,165388,410],{"class":153},[139,165390,165391],{"class":145},"])  ",[139,165393,165394],{"class":2512},"# 小刚\n",[139,165396,165397,165399,165401,165403,165405,165407],{"class":141,"line":210},[139,165398,213],{"class":153},[139,165400,165346],{"class":145},[139,165402,855],{"class":149},[139,165404,416],{"class":153},[139,165406,165391],{"class":145},[139,165408,165409],{"class":2512},"# 小红\n",[19,165411,165412],{},"索引越界会报错：",[130,165414,165416],{"className":132,"code":165415,"language":134,"meta":135,"style":135},"print(names[3])\n",[50,165417,165418],{"__ignoreMap":135},[139,165419,165420,165422,165424,165426],{"class":141,"line":142},[139,165421,213],{"class":153},[139,165423,165346],{"class":145},[139,165425,421],{"class":153},[139,165427,6935],{"class":145},[14,165429,165431],{"id":165430},"_64-列表常用方法","6.4 列表常用方法",[130,165433,165435],{"className":132,"code":165434,"language":134,"meta":135,"style":135},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[50,165436,165437,165453,165457,165466,165480,165494,165498],{"__ignoreMap":135},[139,165438,165439,165441,165443,165445,165447,165449,165451],{"class":141,"line":142},[139,165440,162553],{"class":145},[139,165442,150],{"class":149},[139,165444,407],{"class":145},[139,165446,1441],{"class":160},[139,165448,413],{"class":145},[139,165450,1446],{"class":160},[139,165452,424],{"class":145},[139,165454,165455],{"class":141,"line":210},[139,165456,843],{"emptyLinePlaceholder":842},[139,165458,165459,165462,165464],{"class":141,"line":254},[139,165460,165461],{"class":145},"names.append(",[139,165463,1451],{"class":160},[139,165465,164],{"class":145},[139,165467,165468,165471,165473,165475,165478],{"class":141,"line":262},[139,165469,165470],{"class":145},"names.insert(",[139,165472,410],{"class":153},[139,165474,413],{"class":145},[139,165476,165477],{"class":160},"\"小李\"",[139,165479,164],{"class":145},[139,165481,165482,165485,165487,165489,165492],{"class":141,"line":313},[139,165483,165484],{"class":145},"names.extend([",[139,165486,10957],{"class":160},[139,165488,413],{"class":145},[139,165490,165491],{"class":160},"\"小赵\"",[139,165493,6935],{"class":145},[139,165495,165496],{"class":141,"line":462},[139,165497,843],{"emptyLinePlaceholder":842},[139,165499,165500,165502],{"class":141,"line":474},[139,165501,213],{"class":153},[139,165503,165504],{"class":145},"(names)\n",[19,165506,165507],{},"删除元素：",[130,165509,165511],{"className":132,"code":165510,"language":134,"meta":135,"style":135},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[50,165512,165513,165522,165532,165546,165558],{"__ignoreMap":135},[139,165514,165515,165518,165520],{"class":141,"line":142},[139,165516,165517],{"class":145},"names.remove(",[139,165519,1446],{"class":160},[139,165521,164],{"class":145},[139,165523,165524,165527,165529],{"class":141,"line":210},[139,165525,165526],{"class":145},"last ",[139,165528,150],{"class":149},[139,165530,165531],{"class":145}," names.pop()\n",[139,165533,165534,165537,165539,165542,165544],{"class":141,"line":254},[139,165535,165536],{"class":145},"first ",[139,165538,150],{"class":149},[139,165540,165541],{"class":145}," names.pop(",[139,165543,2634],{"class":153},[139,165545,164],{"class":145},[139,165547,165548,165551,165554,165556],{"class":141,"line":262},[139,165549,165550],{"class":149},"del",[139,165552,165553],{"class":145}," names[",[139,165555,2634],{"class":153},[139,165557,424],{"class":145},[139,165559,165560],{"class":141,"line":313},[139,165561,165562],{"class":145},"names.clear()\n",[19,165564,165565],{},"查询和统计：",[130,165567,165569],{"className":132,"code":165568,"language":134,"meta":135,"style":135},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[50,165570,165571,165599,165603,165614,165625],{"__ignoreMap":135},[139,165572,165573,165575,165577,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597],{"class":141,"line":142},[139,165574,165250],{"class":145},[139,165576,150],{"class":149},[139,165578,407],{"class":145},[139,165580,410],{"class":153},[139,165582,413],{"class":145},[139,165584,416],{"class":153},[139,165586,413],{"class":145},[139,165588,421],{"class":153},[139,165590,413],{"class":145},[139,165592,416],{"class":153},[139,165594,413],{"class":145},[139,165596,1476],{"class":153},[139,165598,424],{"class":145},[139,165600,165601],{"class":141,"line":210},[139,165602,843],{"emptyLinePlaceholder":842},[139,165604,165605,165607,165610,165612],{"class":141,"line":254},[139,165606,213],{"class":153},[139,165608,165609],{"class":145},"(numbers.index(",[139,165611,421],{"class":153},[139,165613,207],{"class":145},[139,165615,165616,165618,165621,165623],{"class":141,"line":262},[139,165617,213],{"class":153},[139,165619,165620],{"class":145},"(numbers.count(",[139,165622,416],{"class":153},[139,165624,207],{"class":145},[139,165626,165627,165629,165631,165633],{"class":141,"line":313},[139,165628,213],{"class":153},[139,165630,157],{"class":145},[139,165632,9632],{"class":153},[139,165634,165635],{"class":145},"(numbers))\n",[19,165637,165638],{},"排序：",[130,165640,165642],{"className":132,"code":165641,"language":134,"meta":135,"style":135},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[50,165643,165644,165668,165672,165677,165684,165688,165702,165708,165712,165717],{"__ignoreMap":135},[139,165645,165646,165648,165650,165652,165654,165656,165658,165660,165662,165664,165666],{"class":141,"line":142},[139,165647,165250],{"class":145},[139,165649,150],{"class":149},[139,165651,407],{"class":145},[139,165653,421],{"class":153},[139,165655,413],{"class":145},[139,165657,410],{"class":153},[139,165659,413],{"class":145},[139,165661,1481],{"class":153},[139,165663,413],{"class":145},[139,165665,416],{"class":153},[139,165667,424],{"class":145},[139,165669,165670],{"class":141,"line":210},[139,165671,843],{"emptyLinePlaceholder":842},[139,165673,165674],{"class":141,"line":254},[139,165675,165676],{"class":145},"numbers.sort()\n",[139,165678,165679,165681],{"class":141,"line":262},[139,165680,213],{"class":153},[139,165682,165683],{"class":145},"(numbers)\n",[139,165685,165686],{"class":141,"line":313},[139,165687,843],{"emptyLinePlaceholder":842},[139,165689,165690,165693,165696,165698,165700],{"class":141,"line":462},[139,165691,165692],{"class":145},"numbers.sort(",[139,165694,165695],{"class":2111},"reverse",[139,165697,150],{"class":149},[139,165699,33725],{"class":153},[139,165701,164],{"class":145},[139,165703,165704,165706],{"class":141,"line":474},[139,165705,213],{"class":153},[139,165707,165683],{"class":145},[139,165709,165710],{"class":141,"line":484},[139,165711,843],{"emptyLinePlaceholder":842},[139,165713,165714],{"class":141,"line":989},[139,165715,165716],{"class":145},"numbers.reverse()\n",[139,165718,165719,165721],{"class":141,"line":994},[139,165720,213],{"class":153},[139,165722,165683],{"class":145},[19,165724,165725,165728,165729,165732],{},[50,165726,165727],{},"sort()"," 会修改原列表，",[50,165730,165731],{},"sorted()"," 返回新列表。",[130,165734,165736],{"className":132,"code":165735,"language":134,"meta":135,"style":135},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[50,165737,165738,165762,165774,165778,165784],{"__ignoreMap":135},[139,165739,165740,165742,165744,165746,165748,165750,165752,165754,165756,165758,165760],{"class":141,"line":142},[139,165741,165250],{"class":145},[139,165743,150],{"class":149},[139,165745,407],{"class":145},[139,165747,421],{"class":153},[139,165749,413],{"class":145},[139,165751,410],{"class":153},[139,165753,413],{"class":145},[139,165755,1481],{"class":153},[139,165757,413],{"class":145},[139,165759,416],{"class":153},[139,165761,424],{"class":145},[139,165763,165764,165767,165769,165772],{"class":141,"line":210},[139,165765,165766],{"class":145},"new_numbers ",[139,165768,150],{"class":149},[139,165770,165771],{"class":153}," sorted",[139,165773,165683],{"class":145},[139,165775,165776],{"class":141,"line":254},[139,165777,843],{"emptyLinePlaceholder":842},[139,165779,165780,165782],{"class":141,"line":262},[139,165781,213],{"class":153},[139,165783,165683],{"class":145},[139,165785,165786,165788],{"class":141,"line":313},[139,165787,213],{"class":153},[139,165789,165790],{"class":145},"(new_numbers)\n",[14,165792,165794],{"id":165793},"_65-列表遍历","6.5 列表遍历",[130,165796,165798],{"className":132,"code":165797,"language":134,"meta":135,"style":135},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[50,165799,165800,165820,165824,165834],{"__ignoreMap":135},[139,165801,165802,165804,165806,165808,165810,165812,165814,165816,165818],{"class":141,"line":142},[139,165803,162553],{"class":145},[139,165805,150],{"class":149},[139,165807,407],{"class":145},[139,165809,1441],{"class":160},[139,165811,413],{"class":145},[139,165813,1446],{"class":160},[139,165815,413],{"class":145},[139,165817,1451],{"class":160},[139,165819,424],{"class":145},[139,165821,165822],{"class":141,"line":210},[139,165823,843],{"emptyLinePlaceholder":842},[139,165825,165826,165828,165830,165832],{"class":141,"line":254},[139,165827,1970],{"class":149},[139,165829,162589],{"class":145},[139,165831,1976],{"class":149},[139,165833,162594],{"class":145},[139,165835,165836,165838],{"class":141,"line":262},[139,165837,302],{"class":153},[139,165839,152855],{"class":145},[19,165841,165842],{},"需要索引时：",[130,165844,165846],{"className":132,"code":165845,"language":134,"meta":135,"style":135},"for index, name in enumerate(names):\n    print(index, name)\n",[50,165847,165848,165862],{"__ignoreMap":135},[139,165849,165850,165852,165855,165857,165859],{"class":141,"line":142},[139,165851,1970],{"class":149},[139,165853,165854],{"class":145}," index, name ",[139,165856,1976],{"class":149},[139,165858,33855],{"class":153},[139,165860,165861],{"class":145},"(names):\n",[139,165863,165864,165866],{"class":141,"line":210},[139,165865,302],{"class":153},[139,165867,165868],{"class":145},"(index, name)\n",[19,165870,165871],{},"统计总分：",[130,165873,165875],{"className":132,"code":165874,"language":134,"meta":135,"style":135},"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",[50,165876,165877,165902,165910,165914,165925,165933,165937,165954],{"__ignoreMap":135},[139,165878,165879,165882,165884,165886,165888,165890,165892,165894,165896,165898,165900],{"class":141,"line":142},[139,165880,165881],{"class":145},"scores ",[139,165883,150],{"class":149},[139,165885,407],{"class":145},[139,165887,3297],{"class":153},[139,165889,413],{"class":145},[139,165891,3171],{"class":153},[139,165893,413],{"class":145},[139,165895,2695],{"class":153},[139,165897,413],{"class":145},[139,165899,2996],{"class":153},[139,165901,424],{"class":145},[139,165903,165904,165906,165908],{"class":141,"line":210},[139,165905,159436],{"class":145},[139,165907,150],{"class":149},[139,165909,49571],{"class":153},[139,165911,165912],{"class":141,"line":254},[139,165913,843],{"emptyLinePlaceholder":842},[139,165915,165916,165918,165920,165922],{"class":141,"line":262},[139,165917,1970],{"class":149},[139,165919,159958],{"class":145},[139,165921,1976],{"class":149},[139,165923,165924],{"class":145}," scores:\n",[139,165926,165927,165929,165931],{"class":141,"line":313},[139,165928,161482],{"class":145},[139,165930,11751],{"class":149},[139,165932,3876],{"class":145},[139,165934,165935],{"class":141,"line":462},[139,165936,843],{"emptyLinePlaceholder":842},[139,165938,165939,165942,165944,165947,165949,165951],{"class":141,"line":474},[139,165940,165941],{"class":145},"avg ",[139,165943,150],{"class":149},[139,165945,165946],{"class":145}," total ",[139,165948,3019],{"class":149},[139,165950,9605],{"class":153},[139,165952,165953],{"class":145},"(scores)\n",[139,165955,165956,165958,165960,165962,165965,165967,165970,165972,165974,165976],{"class":141,"line":484},[139,165957,213],{"class":153},[139,165959,157],{"class":145},[139,165961,619],{"class":149},[139,165963,165964],{"class":160},"\"平均分:",[139,165966,625],{"class":153},[139,165968,165969],{"class":145},"avg",[139,165971,159335],{"class":149},[139,165973,631],{"class":153},[139,165975,634],{"class":160},[139,165977,164],{"class":145},[14,165979,165981],{"id":165980},"_66-元组tuple","6.6 元组tuple",[19,165983,165984],{},"元组和列表类似，但不可修改。",[130,165986,165988],{"className":132,"code":165987,"language":134,"meta":135,"style":135},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[50,165989,165990,166007],{"__ignoreMap":135},[139,165991,165992,165995,165997,165999,166001,166003,166005],{"class":141,"line":142},[139,165993,165994],{"class":145},"point ",[139,165996,150],{"class":149},[139,165998,549],{"class":145},[139,166000,536],{"class":153},[139,166002,413],{"class":145},[139,166004,3135],{"class":153},[139,166006,164],{"class":145},[139,166008,166009,166011,166013,166015,166017,166019,166021,166023,166025],{"class":141,"line":210},[139,166010,118534],{"class":145},[139,166012,150],{"class":149},[139,166014,549],{"class":145},[139,166016,1441],{"class":160},[139,166018,413],{"class":145},[139,166020,3085],{"class":153},[139,166022,413],{"class":145},[139,166024,71499],{"class":160},[139,166026,164],{"class":145},[19,166028,166029],{},"单元素元组必须加逗号：",[130,166031,166033],{"className":132,"code":166032,"language":134,"meta":135,"style":135},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[50,166034,166035,166049,166062,166066,166080],{"__ignoreMap":135},[139,166036,166037,166040,166042,166044,166046],{"class":141,"line":142},[139,166038,166039],{"class":145},"t1 ",[139,166041,150],{"class":149},[139,166043,549],{"class":145},[139,166045,536],{"class":153},[139,166047,166048],{"class":145},",)\n",[139,166050,166051,166054,166056,166058,166060],{"class":141,"line":210},[139,166052,166053],{"class":145},"t2 ",[139,166055,150],{"class":149},[139,166057,549],{"class":145},[139,166059,536],{"class":153},[139,166061,164],{"class":145},[139,166063,166064],{"class":141,"line":254},[139,166065,843],{"emptyLinePlaceholder":842},[139,166067,166068,166070,166072,166074,166077],{"class":141,"line":262},[139,166069,213],{"class":153},[139,166071,157],{"class":145},[139,166073,105331],{"class":153},[139,166075,166076],{"class":145},"(t1))  ",[139,166078,166079],{"class":2512},"# tuple\n",[139,166081,166082,166084,166086,166088,166091],{"class":141,"line":313},[139,166083,213],{"class":153},[139,166085,157],{"class":145},[139,166087,105331],{"class":153},[139,166089,166090],{"class":145},"(t2))  ",[139,166092,166093],{"class":2512},"# int\n",[19,166095,166096],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166098,166100],{"id":166099},"_67-字符串str","6.7 字符串str",[19,166102,166103],{},"字符串也是序列，可以索引、切片和遍历。",[130,166105,166107],{"className":132,"code":166106,"language":134,"meta":135,"style":135},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[50,166108,166109,166117,166121,166132,166144,166148,166159],{"__ignoreMap":135},[139,166110,166111,166113,166115],{"class":141,"line":142},[139,166112,158621],{"class":145},[139,166114,150],{"class":149},[139,166116,161856],{"class":160},[139,166118,166119],{"class":141,"line":210},[139,166120,843],{"emptyLinePlaceholder":842},[139,166122,166123,166125,166128,166130],{"class":141,"line":254},[139,166124,213],{"class":153},[139,166126,166127],{"class":145},"(text[",[139,166129,2634],{"class":153},[139,166131,6935],{"class":145},[139,166133,166134,166136,166138,166140,166142],{"class":141,"line":262},[139,166135,213],{"class":153},[139,166137,166127],{"class":145},[139,166139,855],{"class":149},[139,166141,410],{"class":153},[139,166143,6935],{"class":145},[139,166145,166146],{"class":141,"line":313},[139,166147,843],{"emptyLinePlaceholder":842},[139,166149,166150,166152,166154,166156],{"class":141,"line":462},[139,166151,1970],{"class":149},[139,166153,161867],{"class":145},[139,166155,1976],{"class":149},[139,166157,166158],{"class":145}," text:\n",[139,166160,166161,166163],{"class":141,"line":474},[139,166162,302],{"class":153},[139,166164,161878],{"class":145},[19,166166,166167],{},"字符串不可变：",[130,166169,166171],{"className":132,"code":166170,"language":134,"meta":135,"style":135},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[50,166172,166173,166181],{"__ignoreMap":135},[139,166174,166175,166177,166179],{"class":141,"line":142},[139,166176,158621],{"class":145},[139,166178,150],{"class":149},[139,166180,161856],{"class":160},[139,166182,166183,166186,166188,166190,166192,166195],{"class":141,"line":210},[139,166184,166185],{"class":145},"text[",[139,166187,2634],{"class":153},[139,166189,6721],{"class":145},[139,166191,150],{"class":149},[139,166193,166194],{"class":160}," \"P\"",[139,166196,166197],{"class":2512},"  # 报错\n",[19,166199,166200],{},"如果要得到新字符串：",[130,166202,166204],{"className":132,"code":166203,"language":134,"meta":135,"style":135},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[50,166205,166206,166214,166232],{"__ignoreMap":135},[139,166207,166208,166210,166212],{"class":141,"line":142},[139,166209,158621],{"class":145},[139,166211,150],{"class":149},[139,166213,161856],{"class":160},[139,166215,166216,166218,166220,166222,166224,166227,166229],{"class":141,"line":210},[139,166217,158621],{"class":145},[139,166219,150],{"class":149},[139,166221,166194],{"class":160},[139,166223,47805],{"class":149},[139,166225,166226],{"class":145}," text[",[139,166228,410],{"class":153},[139,166230,166231],{"class":145},":]\n",[139,166233,166234,166236],{"class":141,"line":254},[139,166235,213],{"class":153},[139,166237,166238],{"class":145},"(text)\n",[14,166240,166242],{"id":166241},"_68-切片","6.8 切片",[19,166244,166245],{},"切片用于从序列中取一部分。",[130,166247,166249],{"className":132,"code":166248,"language":134,"meta":135,"style":135},"序列[开始:结束:步长]\n",[50,166250,166251],{"__ignoreMap":135},[139,166252,166253],{"class":141,"line":142},[139,166254,166248],{"class":145},[19,166256,166257],{},"结束位置不包含。",[130,166259,166261],{"className":132,"code":166260,"language":134,"meta":135,"style":135},"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",[50,166262,166263,166300,166304,166323,166338,166352,166366],{"__ignoreMap":135},[139,166264,166265,166268,166270,166272,166274,166276,166278,166280,166282,166284,166286,166288,166290,166292,166294,166296,166298],{"class":141,"line":142},[139,166266,166267],{"class":145},"nums ",[139,166269,150],{"class":149},[139,166271,407],{"class":145},[139,166273,2634],{"class":153},[139,166275,413],{"class":145},[139,166277,410],{"class":153},[139,166279,413],{"class":145},[139,166281,416],{"class":153},[139,166283,413],{"class":145},[139,166285,421],{"class":153},[139,166287,413],{"class":145},[139,166289,1476],{"class":153},[139,166291,413],{"class":145},[139,166293,1481],{"class":153},[139,166295,413],{"class":145},[139,166297,2782],{"class":153},[139,166299,424],{"class":145},[139,166301,166302],{"class":141,"line":210},[139,166303,843],{"emptyLinePlaceholder":842},[139,166305,166306,166308,166311,166313,166315,166317,166320],{"class":141,"line":254},[139,166307,213],{"class":153},[139,166309,166310],{"class":145},"(nums[",[139,166312,410],{"class":153},[139,166314,3294],{"class":145},[139,166316,1476],{"class":153},[139,166318,166319],{"class":145},"])    ",[139,166321,166322],{"class":2512},"# [1, 2, 3]\n",[139,166324,166325,166327,166330,166332,166335],{"class":141,"line":262},[139,166326,213],{"class":153},[139,166328,166329],{"class":145},"(nums[:",[139,166331,421],{"class":153},[139,166333,166334],{"class":145},"])     ",[139,166336,166337],{"class":2512},"# [0, 1, 2]\n",[139,166339,166340,166342,166344,166346,166349],{"class":141,"line":313},[139,166341,213],{"class":153},[139,166343,166310],{"class":145},[139,166345,421],{"class":153},[139,166347,166348],{"class":145},":])     ",[139,166350,166351],{"class":2512},"# [3, 4, 5, 6]\n",[139,166353,166354,166356,166359,166361,166363],{"class":141,"line":462},[139,166355,213],{"class":153},[139,166357,166358],{"class":145},"(nums[::",[139,166360,416],{"class":153},[139,166362,166319],{"class":145},[139,166364,166365],{"class":2512},"# [0, 2, 4, 6]\n",[139,166367,166368,166370,166372,166374,166376,166379],{"class":141,"line":474},[139,166369,213],{"class":153},[139,166371,166358],{"class":145},[139,166373,855],{"class":149},[139,166375,410],{"class":153},[139,166377,166378],{"class":145},"])   ",[139,166380,166381],{"class":2512},"# 反转\n",[19,166383,166384],{},"字符串切片：",[130,166386,166388],{"className":132,"code":166387,"language":134,"meta":135,"style":135},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[50,166389,166390,166399,166413],{"__ignoreMap":135},[139,166391,166392,166394,166396],{"class":141,"line":142},[139,166393,158621],{"class":145},[139,166395,150],{"class":149},[139,166397,166398],{"class":160}," \"abcdef\"\n",[139,166400,166401,166403,166405,166407,166409,166411],{"class":141,"line":210},[139,166402,213],{"class":153},[139,166404,166127],{"class":145},[139,166406,410],{"class":153},[139,166408,3294],{"class":145},[139,166410,1476],{"class":153},[139,166412,6935],{"class":145},[139,166414,166415,166417,166420,166422,166424],{"class":141,"line":254},[139,166416,213],{"class":153},[139,166418,166419],{"class":145},"(text[::",[139,166421,855],{"class":149},[139,166423,410],{"class":153},[139,166425,6935],{"class":145},[14,166427,166429],{"id":166428},"_69-集合set","6.9 集合set",[19,166431,166432],{},"集合特点：",[1760,166434,166435,166438,166441],{},[1763,166436,166437],{},"无序。",[1763,166439,166440],{},"元素不重复。",[1763,166442,166443],{},"可以做交集、并集、差集。",[130,166445,166447],{"className":132,"code":166446,"language":134,"meta":135,"style":135},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[50,166448,166449,166477],{"__ignoreMap":135},[139,166450,166451,166453,166455,166457,166459,166461,166463,166465,166467,166469,166471,166473,166475],{"class":141,"line":142},[139,166452,166267],{"class":145},[139,166454,150],{"class":149},[139,166456,6726],{"class":145},[139,166458,410],{"class":153},[139,166460,413],{"class":145},[139,166462,416],{"class":153},[139,166464,413],{"class":145},[139,166466,421],{"class":153},[139,166468,413],{"class":145},[139,166470,421],{"class":153},[139,166472,413],{"class":145},[139,166474,1476],{"class":153},[139,166476,3862],{"class":145},[139,166478,166479,166481],{"class":141,"line":210},[139,166480,213],{"class":153},[139,166482,166483],{"class":145},"(nums)\n",[19,166485,166486],{},"创建空集合：",[130,166488,166490],{"className":132,"code":166489,"language":134,"meta":135,"style":135},"s = set()\n",[50,166491,166492],{"__ignoreMap":135},[139,166493,166494,166496,166498,166500],{"class":141,"line":142},[139,166495,12853],{"class":145},[139,166497,150],{"class":149},[139,166499,121940],{"class":153},[139,166501,4262],{"class":145},[19,166503,11299,166504,166506],{},[50,166505,34706],{}," 是空字典，不是空集合。",[19,166508,166509],{},"集合常用操作：",[130,166511,166513],{"className":132,"code":166512,"language":134,"meta":135,"style":135},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[50,166514,166515,166535,166539,166548,166557,166566],{"__ignoreMap":135},[139,166516,166517,166519,166521,166523,166525,166527,166529,166531,166533],{"class":141,"line":142},[139,166518,12853],{"class":145},[139,166520,150],{"class":149},[139,166522,6726],{"class":145},[139,166524,410],{"class":153},[139,166526,413],{"class":145},[139,166528,416],{"class":153},[139,166530,413],{"class":145},[139,166532,421],{"class":153},[139,166534,3862],{"class":145},[139,166536,166537],{"class":141,"line":210},[139,166538,843],{"emptyLinePlaceholder":842},[139,166540,166541,166544,166546],{"class":141,"line":254},[139,166542,166543],{"class":145},"s.add(",[139,166545,1476],{"class":153},[139,166547,164],{"class":145},[139,166549,166550,166553,166555],{"class":141,"line":262},[139,166551,166552],{"class":145},"s.remove(",[139,166554,416],{"class":153},[139,166556,164],{"class":145},[139,166558,166559,166562,166564],{"class":141,"line":313},[139,166560,166561],{"class":145},"s.discard(",[139,166563,536],{"class":153},[139,166565,164],{"class":145},[139,166567,166568,166570,166572,166574],{"class":141,"line":462},[139,166569,213],{"class":153},[139,166571,157],{"class":145},[139,166573,9632],{"class":153},[139,166575,166576],{"class":145},"(s))\n",[19,166578,166579],{},"交并差：",[130,166581,166583],{"className":132,"code":166582,"language":134,"meta":135,"style":135},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[50,166584,166585,166605,166625,166629,166644,166657],{"__ignoreMap":135},[139,166586,166587,166589,166591,166593,166595,166597,166599,166601,166603],{"class":141,"line":142},[139,166588,13192],{"class":145},[139,166590,150],{"class":149},[139,166592,6726],{"class":145},[139,166594,410],{"class":153},[139,166596,413],{"class":145},[139,166598,416],{"class":153},[139,166600,413],{"class":145},[139,166602,421],{"class":153},[139,166604,3862],{"class":145},[139,166606,166607,166609,166611,166613,166615,166617,166619,166621,166623],{"class":141,"line":210},[139,166608,13218],{"class":145},[139,166610,150],{"class":149},[139,166612,6726],{"class":145},[139,166614,421],{"class":153},[139,166616,413],{"class":145},[139,166618,1476],{"class":153},[139,166620,413],{"class":145},[139,166622,1481],{"class":153},[139,166624,3862],{"class":145},[139,166626,166627],{"class":141,"line":254},[139,166628,843],{"emptyLinePlaceholder":842},[139,166630,166631,166633,166636,166638,166641],{"class":141,"line":262},[139,166632,213],{"class":153},[139,166634,166635],{"class":145},"(a ",[139,166637,2791],{"class":149},[139,166639,166640],{"class":145}," b)  ",[139,166642,166643],{"class":2512},"# 交集\n",[139,166645,166646,166648,166650,166652,166654],{"class":141,"line":313},[139,166647,213],{"class":153},[139,166649,166635],{"class":145},[139,166651,3354],{"class":149},[139,166653,166640],{"class":145},[139,166655,166656],{"class":2512},"# 并集\n",[139,166658,166659,166661,166663,166665,166667],{"class":141,"line":462},[139,166660,213],{"class":153},[139,166662,166635],{"class":145},[139,166664,855],{"class":149},[139,166666,166640],{"class":145},[139,166668,166669],{"class":2512},"# 差集\n",[14,166671,166673],{"id":166672},"_610-字典dict","6.10 字典dict",[19,166675,166676],{},"字典通过 key-value 保存数据。",[130,166678,166680],{"className":132,"code":166679,"language":134,"meta":135,"style":135},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[50,166681,166682,166690,166700,166711,166721],{"__ignoreMap":135},[139,166683,166684,166686,166688],{"class":141,"line":142},[139,166685,151682],{"class":145},[139,166687,150],{"class":149},[139,166689,17840],{"class":145},[139,166691,166692,166694,166696,166698],{"class":141,"line":210},[139,166693,149225],{"class":160},[139,166695,2265],{"class":145},[139,166697,1441],{"class":160},[139,166699,33715],{"class":145},[139,166701,166702,166705,166707,166709],{"class":141,"line":254},[139,166703,166704],{"class":160},"    \"age\"",[139,166706,2265],{"class":145},[139,166708,3085],{"class":153},[139,166710,33715],{"class":145},[139,166712,166713,166716,166718],{"class":141,"line":262},[139,166714,166715],{"class":160},"    \"score\"",[139,166717,2265],{"class":145},[139,166719,166720],{"class":153},"95\n",[139,166722,166723],{"class":141,"line":313},[139,166724,3862],{"class":145},[19,166726,166727],{},"获取值：",[130,166729,166731],{"className":132,"code":166730,"language":134,"meta":135,"style":135},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[50,166732,166733,166744],{"__ignoreMap":135},[139,166734,166735,166737,166740,166742],{"class":141,"line":142},[139,166736,213],{"class":153},[139,166738,166739],{"class":145},"(student[",[139,166741,2262],{"class":160},[139,166743,6935],{"class":145},[139,166745,166746,166748,166751,166753],{"class":141,"line":210},[139,166747,213],{"class":153},[139,166749,166750],{"class":145},"(student.get(",[139,166752,2262],{"class":160},[139,166754,207],{"class":145},[19,166756,17656],{},[130,166758,166760],{"className":132,"code":166759,"language":134,"meta":135,"style":135},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[50,166761,166762,166775],{"__ignoreMap":135},[139,166763,166764,166766,166769,166772],{"class":141,"line":142},[139,166765,155044],{"class":145},[139,166767,166768],{"class":160},"\"address\"",[139,166770,166771],{"class":145},"]     ",[139,166773,166774],{"class":2512},"# key不存在会报错\n",[139,166776,166777,166780,166782,166784],{"class":141,"line":210},[139,166778,166779],{"class":145},"student.get(",[139,166781,166768],{"class":160},[139,166783,2120],{"class":145},[139,166785,166786],{"class":2512},"# key不存在返回None\n",[19,166788,166789],{},"设置默认值：",[130,166791,166793],{"className":132,"code":166792,"language":134,"meta":135,"style":135},"print(student.get(\"address\", \"未知\"))\n",[50,166794,166795],{"__ignoreMap":135},[139,166796,166797,166799,166801,166803,166805,166808],{"class":141,"line":142},[139,166798,213],{"class":153},[139,166800,166750],{"class":145},[139,166802,166768],{"class":160},[139,166804,413],{"class":145},[139,166806,166807],{"class":160},"\"未知\"",[139,166809,207],{"class":145},[19,166811,166812],{},"新增和修改：",[130,166814,166816],{"className":132,"code":166815,"language":134,"meta":135,"style":135},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[50,166817,166818,166831],{"__ignoreMap":135},[139,166819,166820,166822,166824,166826,166828],{"class":141,"line":142},[139,166821,155044],{"class":145},[139,166823,71354],{"class":160},[139,166825,6721],{"class":145},[139,166827,150],{"class":149},[139,166829,166830],{"class":153}," 19\n",[139,166832,166833,166835,166837,166839,166841],{"class":141,"line":210},[139,166834,155044],{"class":145},[139,166836,166768],{"class":160},[139,166838,6721],{"class":145},[139,166840,150],{"class":149},[139,166842,166843],{"class":160}," \"北京\"\n",[19,166845,166846],{},"删除：",[130,166848,166850],{"className":132,"code":166849,"language":134,"meta":135,"style":135},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[50,166851,166852,166865,166875],{"__ignoreMap":135},[139,166853,166854,166856,166858,166861,166863],{"class":141,"line":142},[139,166855,157540],{"class":145},[139,166857,150],{"class":149},[139,166859,166860],{"class":145}," student.pop(",[139,166862,2272],{"class":160},[139,166864,164],{"class":145},[139,166866,166867,166869,166871,166873],{"class":141,"line":210},[139,166868,165550],{"class":149},[139,166870,154337],{"class":145},[139,166872,71354],{"class":160},[139,166874,424],{"class":145},[139,166876,166877],{"class":141,"line":254},[139,166878,166879],{"class":145},"student.clear()\n",[14,166881,166883],{"id":166882},"_611-字典遍历","6.11 字典遍历",[19,166885,166886],{},"遍历 key：",[130,166888,166890],{"className":132,"code":166889,"language":134,"meta":135,"style":135},"for key in student:\n    print(key, student[key])\n",[50,166891,166892,166904],{"__ignoreMap":135},[139,166893,166894,166896,166899,166901],{"class":141,"line":142},[139,166895,1970],{"class":149},[139,166897,166898],{"class":145}," key ",[139,166900,1976],{"class":149},[139,166902,166903],{"class":145}," student:\n",[139,166905,166906,166908],{"class":141,"line":210},[139,166907,302],{"class":153},[139,166909,166910],{"class":145},"(key, student[key])\n",[19,166912,166913],{},"遍历 value：",[130,166915,166917],{"className":132,"code":166916,"language":134,"meta":135,"style":135},"for value in student.values():\n    print(value)\n",[50,166918,166919,166931],{"__ignoreMap":135},[139,166920,166921,166923,166926,166928],{"class":141,"line":142},[139,166922,1970],{"class":149},[139,166924,166925],{"class":145}," value ",[139,166927,1976],{"class":149},[139,166929,166930],{"class":145}," student.values():\n",[139,166932,166933,166935],{"class":141,"line":210},[139,166934,302],{"class":153},[139,166936,166937],{"class":145},"(value)\n",[19,166939,166940],{},"遍历 key 和 value：",[130,166942,166944],{"className":132,"code":166943,"language":134,"meta":135,"style":135},"for key, value in student.items():\n    print(key, value)\n",[50,166945,166946,166958],{"__ignoreMap":135},[139,166947,166948,166950,166953,166955],{"class":141,"line":142},[139,166949,1970],{"class":149},[139,166951,166952],{"class":145}," key, value ",[139,166954,1976],{"class":149},[139,166956,166957],{"class":145}," student.items():\n",[139,166959,166960,166962],{"class":141,"line":210},[139,166961,302],{"class":153},[139,166963,166964],{"class":145},"(key, value)\n",[14,166966,166968],{"id":166967},"_612-嵌套容器","6.12 嵌套容器",[19,166970,166971],{},"列表中保存字典，是项目中最常见的结构之一。",[130,166973,166975],{"className":132,"code":166974,"language":134,"meta":135,"style":135},"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",[50,166976,166977,166985,167013,167041,167069,167073,167077,167087],{"__ignoreMap":135},[139,166978,166979,166981,166983],{"class":141,"line":142},[139,166980,2244],{"class":145},[139,166982,150],{"class":149},[139,166984,57681],{"class":145},[139,166986,166987,166989,166991,166993,166995,166997,166999,167001,167003,167005,167007,167009,167011],{"class":141,"line":210},[139,166988,150586],{"class":145},[139,166990,2262],{"class":160},[139,166992,2265],{"class":145},[139,166994,1441],{"class":160},[139,166996,413],{"class":145},[139,166998,71354],{"class":160},[139,167000,2265],{"class":145},[139,167002,3085],{"class":153},[139,167004,413],{"class":145},[139,167006,2272],{"class":160},[139,167008,2265],{"class":145},[139,167010,2277],{"class":153},[139,167012,7208],{"class":145},[139,167014,167015,167017,167019,167021,167023,167025,167027,167029,167031,167033,167035,167037,167039],{"class":141,"line":254},[139,167016,150586],{"class":145},[139,167018,2262],{"class":160},[139,167020,2265],{"class":145},[139,167022,1446],{"class":160},[139,167024,413],{"class":145},[139,167026,71354],{"class":160},[139,167028,2265],{"class":145},[139,167030,3060],{"class":153},[139,167032,413],{"class":145},[139,167034,2272],{"class":160},[139,167036,2265],{"class":145},[139,167038,3246],{"class":153},[139,167040,7208],{"class":145},[139,167042,167043,167045,167047,167049,167051,167053,167055,167057,167059,167061,167063,167065,167067],{"class":141,"line":262},[139,167044,150586],{"class":145},[139,167046,2262],{"class":160},[139,167048,2265],{"class":145},[139,167050,1451],{"class":160},[139,167052,413],{"class":145},[139,167054,71354],{"class":160},[139,167056,2265],{"class":145},[139,167058,3110],{"class":153},[139,167060,413],{"class":145},[139,167062,2272],{"class":160},[139,167064,2265],{"class":145},[139,167066,2844],{"class":153},[139,167068,7208],{"class":145},[139,167070,167071],{"class":141,"line":313},[139,167072,424],{"class":145},[139,167074,167075],{"class":141,"line":462},[139,167076,843],{"emptyLinePlaceholder":842},[139,167078,167079,167081,167083,167085],{"class":141,"line":474},[139,167080,1970],{"class":149},[139,167082,154325],{"class":145},[139,167084,1976],{"class":149},[139,167086,154330],{"class":145},[139,167088,167089,167091,167093,167095,167098,167100],{"class":141,"line":484},[139,167090,302],{"class":153},[139,167092,166739],{"class":145},[139,167094,2262],{"class":160},[139,167096,167097],{"class":145},"], student[",[139,167099,2272],{"class":160},[139,167101,6935],{"class":145},[19,167103,167104],{},"统计平均分：",[130,167106,167108],{"className":132,"code":167107,"language":134,"meta":135,"style":135},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[50,167109,167110,167118,167122,167132,167144,167148,167163],{"__ignoreMap":135},[139,167111,167112,167114,167116],{"class":141,"line":142},[139,167113,159436],{"class":145},[139,167115,150],{"class":149},[139,167117,49571],{"class":153},[139,167119,167120],{"class":141,"line":210},[139,167121,843],{"emptyLinePlaceholder":842},[139,167123,167124,167126,167128,167130],{"class":141,"line":254},[139,167125,1970],{"class":149},[139,167127,154325],{"class":145},[139,167129,1976],{"class":149},[139,167131,154330],{"class":145},[139,167133,167134,167136,167138,167140,167142],{"class":141,"line":262},[139,167135,161482],{"class":145},[139,167137,11751],{"class":149},[139,167139,154337],{"class":145},[139,167141,2272],{"class":160},[139,167143,424],{"class":145},[139,167145,167146],{"class":141,"line":313},[139,167147,843],{"emptyLinePlaceholder":842},[139,167149,167150,167152,167154,167156,167158,167160],{"class":141,"line":462},[139,167151,165941],{"class":145},[139,167153,150],{"class":149},[139,167155,165946],{"class":145},[139,167157,3019],{"class":149},[139,167159,9605],{"class":153},[139,167161,167162],{"class":145},"(students)\n",[139,167164,167165,167167,167169,167171,167173,167175,167177,167179,167181,167183],{"class":141,"line":474},[139,167166,213],{"class":153},[139,167168,157],{"class":145},[139,167170,619],{"class":149},[139,167172,165964],{"class":160},[139,167174,625],{"class":153},[139,167176,165969],{"class":145},[139,167178,159335],{"class":149},[139,167180,631],{"class":153},[139,167182,634],{"class":160},[139,167184,164],{"class":145},[19,167186,167187],{},"查找学生：",[130,167189,167191],{"className":132,"code":167190,"language":134,"meta":135,"style":135},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[50,167192,167193,167208,167212,167222,167236,167242,167246,167252],{"__ignoreMap":135},[139,167194,167195,167197,167199,167201,167203,167206],{"class":141,"line":142},[139,167196,113799],{"class":145},[139,167198,150],{"class":149},[139,167200,62838],{"class":153},[139,167202,157],{"class":145},[139,167204,167205],{"class":160},"\"请输入学生姓名:\"",[139,167207,164],{"class":145},[139,167209,167210],{"class":141,"line":210},[139,167211,843],{"emptyLinePlaceholder":842},[139,167213,167214,167216,167218,167220],{"class":141,"line":254},[139,167215,1970],{"class":149},[139,167217,154325],{"class":145},[139,167219,1976],{"class":149},[139,167221,154330],{"class":145},[139,167223,167224,167226,167228,167230,167232,167234],{"class":141,"line":262},[139,167225,790],{"class":149},[139,167227,154337],{"class":145},[139,167229,2262],{"class":160},[139,167231,6721],{"class":145},[139,167233,5232],{"class":149},[139,167235,162605],{"class":145},[139,167237,167238,167240],{"class":141,"line":313},[139,167239,34698],{"class":153},[139,167241,152241],{"class":145},[139,167243,167244],{"class":141,"line":462},[139,167245,33876],{"class":149},[139,167247,167248,167250],{"class":141,"line":474},[139,167249,656],{"class":149},[139,167251,246],{"class":145},[139,167253,167254,167256,167258,167261],{"class":141,"line":484},[139,167255,302],{"class":153},[139,167257,157],{"class":145},[139,167259,167260],{"class":160},"\"没有找到\"",[139,167262,164],{"class":145},[14,167264,167266],{"id":167265},"_613-容器通用操作","6.13 容器通用操作",[19,167268,167269],{},"长度：",[130,167271,167273],{"className":132,"code":167272,"language":134,"meta":135,"style":135},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[50,167274,167275,167294,167304],{"__ignoreMap":135},[139,167276,167277,167279,167282,167284,167286,167288,167290,167292],{"class":141,"line":142},[139,167278,9632],{"class":153},[139,167280,167281],{"class":145},"([",[139,167283,410],{"class":153},[139,167285,413],{"class":145},[139,167287,416],{"class":153},[139,167289,413],{"class":145},[139,167291,421],{"class":153},[139,167293,6935],{"class":145},[139,167295,167296,167298,167300,167302],{"class":141,"line":210},[139,167297,9632],{"class":153},[139,167299,157],{"class":145},[139,167301,161],{"class":160},[139,167303,164],{"class":145},[139,167305,167306,167308,167311,167313,167315,167317],{"class":141,"line":254},[139,167307,9632],{"class":153},[139,167309,167310],{"class":145},"({",[139,167312,2262],{"class":160},[139,167314,2265],{"class":145},[139,167316,1441],{"class":160},[139,167318,2280],{"class":145},[19,167320,167321],{},"最大最小：",[130,167323,167325],{"className":132,"code":167324,"language":134,"meta":135,"style":135},"max([1, 2, 3])\nmin([1, 2, 3])\n",[50,167326,167327,167345],{"__ignoreMap":135},[139,167328,167329,167331,167333,167335,167337,167339,167341,167343],{"class":141,"line":142},[139,167330,8289],{"class":153},[139,167332,167281],{"class":145},[139,167334,410],{"class":153},[139,167336,413],{"class":145},[139,167338,416],{"class":153},[139,167340,413],{"class":145},[139,167342,421],{"class":153},[139,167344,6935],{"class":145},[139,167346,167347,167350,167352,167354,167356,167358,167360,167362],{"class":141,"line":210},[139,167348,167349],{"class":153},"min",[139,167351,167281],{"class":145},[139,167353,410],{"class":153},[139,167355,413],{"class":145},[139,167357,416],{"class":153},[139,167359,413],{"class":145},[139,167361,421],{"class":153},[139,167363,6935],{"class":145},[19,167365,167366],{},"求和：",[130,167368,167370],{"className":132,"code":167369,"language":134,"meta":135,"style":135},"sum([1, 2, 3])\n",[50,167371,167372],{"__ignoreMap":135},[139,167373,167374,167377,167379,167381,167383,167385,167387,167389],{"class":141,"line":142},[139,167375,167376],{"class":153},"sum",[139,167378,167281],{"class":145},[139,167380,410],{"class":153},[139,167382,413],{"class":145},[139,167384,416],{"class":153},[139,167386,413],{"class":145},[139,167388,421],{"class":153},[139,167390,6935],{"class":145},[19,167392,165638],{},[130,167394,167396],{"className":132,"code":167395,"language":134,"meta":135,"style":135},"sorted([3, 1, 2])\n",[50,167397,167398],{"__ignoreMap":135},[139,167399,167400,167403,167405,167407,167409,167411,167413,167415],{"class":141,"line":142},[139,167401,167402],{"class":153},"sorted",[139,167404,167281],{"class":145},[139,167406,421],{"class":153},[139,167408,413],{"class":145},[139,167410,410],{"class":153},[139,167412,413],{"class":145},[139,167414,416],{"class":153},[139,167416,6935],{"class":145},[19,167418,167419],{},"类型转换：",[130,167421,167423],{"className":132,"code":167422,"language":134,"meta":135,"style":135},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[50,167424,167425,167435,167453],{"__ignoreMap":135},[139,167426,167427,167429,167431,167433],{"class":141,"line":142},[139,167428,156254],{"class":153},[139,167430,157],{"class":145},[139,167432,161],{"class":160},[139,167434,164],{"class":145},[139,167436,167437,167439,167441,167443,167445,167447,167449,167451],{"class":141,"line":210},[139,167438,157447],{"class":153},[139,167440,167281],{"class":145},[139,167442,410],{"class":153},[139,167444,413],{"class":145},[139,167446,416],{"class":153},[139,167448,413],{"class":145},[139,167450,421],{"class":153},[139,167452,6935],{"class":145},[139,167454,167455,167457,167459,167461,167463,167465,167467,167469,167471,167473],{"class":141,"line":254},[139,167456,157472],{"class":153},[139,167458,167281],{"class":145},[139,167460,410],{"class":153},[139,167462,413],{"class":145},[139,167464,410],{"class":153},[139,167466,413],{"class":145},[139,167468,416],{"class":153},[139,167470,413],{"class":145},[139,167472,421],{"class":153},[139,167474,6935],{"class":145},[19,167476,167477],{},"成员判断：",[130,167479,167481],{"className":132,"code":167480,"language":134,"meta":135,"style":135},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[50,167482,167483,167500,167524],{"__ignoreMap":135},[139,167484,167485,167487,167489,167492,167495,167498],{"class":141,"line":142},[139,167486,213],{"class":153},[139,167488,157],{"class":145},[139,167490,167491],{"class":160},"\"a\"",[139,167493,167494],{"class":149}," in",[139,167496,167497],{"class":160}," \"abc\"",[139,167499,164],{"class":145},[139,167501,167502,167504,167506,167508,167510,167512,167514,167516,167518,167520,167522],{"class":141,"line":210},[139,167503,213],{"class":153},[139,167505,157],{"class":145},[139,167507,410],{"class":153},[139,167509,167494],{"class":149},[139,167511,407],{"class":145},[139,167513,410],{"class":153},[139,167515,413],{"class":145},[139,167517,416],{"class":153},[139,167519,413],{"class":145},[139,167521,421],{"class":153},[139,167523,6935],{"class":145},[139,167525,167526,167528,167530,167532,167534,167536,167538,167540,167542],{"class":141,"line":254},[139,167527,213],{"class":153},[139,167529,157],{"class":145},[139,167531,2262],{"class":160},[139,167533,167494],{"class":149},[139,167535,6726],{"class":145},[139,167537,2262],{"class":160},[139,167539,2265],{"class":145},[139,167541,1441],{"class":160},[139,167543,2280],{"class":145},[14,167545,167547],{"id":167546},"_614-推导式","6.14 推导式",[19,167549,167550],{},"推导式用于快速生成容器。",[19,167552,167553],{},"列表推导式：",[130,167555,167557],{"className":132,"code":167556,"language":134,"meta":135,"style":135},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[50,167558,167559,167586],{"__ignoreMap":135},[139,167560,167561,167563,167565,167568,167570,167572,167574,167576,167578,167580,167582,167584],{"class":141,"line":142},[139,167562,166267],{"class":145},[139,167564,150],{"class":149},[139,167566,167567],{"class":145}," [i ",[139,167569,1970],{"class":149},[139,167571,11712],{"class":145},[139,167573,1976],{"class":149},[139,167575,34690],{"class":153},[139,167577,157],{"class":145},[139,167579,410],{"class":153},[139,167581,413],{"class":145},[139,167583,2782],{"class":153},[139,167585,99527],{"class":145},[139,167587,167588,167590],{"class":141,"line":210},[139,167589,213],{"class":153},[139,167591,166483],{"class":145},[19,167593,167594],{},"带条件：",[130,167596,167598],{"className":132,"code":167597,"language":134,"meta":135,"style":135},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[50,167599,167600,167641],{"__ignoreMap":135},[139,167601,167602,167605,167607,167609,167611,167613,167615,167617,167619,167621,167623,167625,167627,167629,167631,167633,167635,167637,167639],{"class":141,"line":142},[139,167603,167604],{"class":145},"even_nums ",[139,167606,150],{"class":149},[139,167608,167567],{"class":145},[139,167610,1970],{"class":149},[139,167612,11712],{"class":145},[139,167614,1976],{"class":149},[139,167616,34690],{"class":153},[139,167618,157],{"class":145},[139,167620,410],{"class":153},[139,167622,413],{"class":145},[139,167624,2775],{"class":153},[139,167626,2120],{"class":145},[139,167628,1729],{"class":149},[139,167630,11712],{"class":145},[139,167632,2766],{"class":149},[139,167634,17024],{"class":153},[139,167636,1735],{"class":149},[139,167638,799],{"class":153},[139,167640,424],{"class":145},[139,167642,167643,167645],{"class":141,"line":210},[139,167644,213],{"class":153},[139,167646,167647],{"class":145},"(even_nums)\n",[19,167649,167650],{},"字典推导式：",[130,167652,167654],{"className":132,"code":167653,"language":134,"meta":135,"style":135},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[50,167655,167656,167690],{"__ignoreMap":135},[139,167657,167658,167661,167663,167666,167668,167670,167673,167675,167677,167679,167681,167683,167685,167687],{"class":141,"line":142},[139,167659,167660],{"class":145},"squares ",[139,167662,150],{"class":149},[139,167664,167665],{"class":145}," {i: i ",[139,167667,12935],{"class":149},[139,167669,17024],{"class":153},[139,167671,167672],{"class":149}," for",[139,167674,11712],{"class":145},[139,167676,1976],{"class":149},[139,167678,34690],{"class":153},[139,167680,157],{"class":145},[139,167682,410],{"class":153},[139,167684,413],{"class":145},[139,167686,2782],{"class":153},[139,167688,167689],{"class":145},")}\n",[139,167691,167692,167694],{"class":141,"line":210},[139,167693,213],{"class":153},[139,167695,167696],{"class":145},"(squares)\n",[19,167698,167699],{},"集合推导式：",[130,167701,167703],{"className":132,"code":167702,"language":134,"meta":135,"style":135},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[50,167704,167705,167726],{"__ignoreMap":135},[139,167706,167707,167710,167712,167715,167717,167719,167721,167724],{"class":141,"line":142},[139,167708,167709],{"class":145},"chars ",[139,167711,150],{"class":149},[139,167713,167714],{"class":145}," {ch ",[139,167716,1970],{"class":149},[139,167718,161867],{"class":145},[139,167720,1976],{"class":149},[139,167722,167723],{"class":160}," \"hello\"",[139,167725,3862],{"class":145},[139,167727,167728,167730],{"class":141,"line":210},[139,167729,213],{"class":153},[139,167731,167732],{"class":145},"(chars)\n",[19,167734,167735],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167737,167739],{"id":167738},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[130,167741,167743],{"className":132,"code":167742,"language":134,"meta":135,"style":135},"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",[50,167744,167745,167753,167773,167793,167813,167833,167837,167841,167849,167863,167872,167876,167886,167898,167902,167922,167931,167935,167951,167956,167960,167974,167978,168000,168036],{"__ignoreMap":135},[139,167746,167747,167749,167751],{"class":141,"line":142},[139,167748,2244],{"class":145},[139,167750,150],{"class":149},[139,167752,57681],{"class":145},[139,167754,167755,167757,167759,167761,167763,167765,167767,167769,167771],{"class":141,"line":210},[139,167756,150586],{"class":145},[139,167758,2262],{"class":160},[139,167760,2265],{"class":145},[139,167762,1441],{"class":160},[139,167764,413],{"class":145},[139,167766,2272],{"class":160},[139,167768,2265],{"class":145},[139,167770,2277],{"class":153},[139,167772,7208],{"class":145},[139,167774,167775,167777,167779,167781,167783,167785,167787,167789,167791],{"class":141,"line":254},[139,167776,150586],{"class":145},[139,167778,2262],{"class":160},[139,167780,2265],{"class":145},[139,167782,1446],{"class":160},[139,167784,413],{"class":145},[139,167786,2272],{"class":160},[139,167788,2265],{"class":145},[139,167790,3246],{"class":153},[139,167792,7208],{"class":145},[139,167794,167795,167797,167799,167801,167803,167805,167807,167809,167811],{"class":141,"line":262},[139,167796,150586],{"class":145},[139,167798,2262],{"class":160},[139,167800,2265],{"class":145},[139,167802,1451],{"class":160},[139,167804,413],{"class":145},[139,167806,2272],{"class":160},[139,167808,2265],{"class":145},[139,167810,2844],{"class":153},[139,167812,7208],{"class":145},[139,167814,167815,167817,167819,167821,167823,167825,167827,167829,167831],{"class":141,"line":313},[139,167816,150586],{"class":145},[139,167818,2262],{"class":160},[139,167820,2265],{"class":145},[139,167822,165477],{"class":160},[139,167824,413],{"class":145},[139,167826,2272],{"class":160},[139,167828,2265],{"class":145},[139,167830,3317],{"class":153},[139,167832,7208],{"class":145},[139,167834,167835],{"class":141,"line":462},[139,167836,424],{"class":145},[139,167838,167839],{"class":141,"line":474},[139,167840,843],{"emptyLinePlaceholder":842},[139,167842,167843,167845,167847],{"class":141,"line":484},[139,167844,159436],{"class":145},[139,167846,150],{"class":149},[139,167848,49571],{"class":153},[139,167850,167851,167854,167856,167859,167861],{"class":141,"line":989},[139,167852,167853],{"class":145},"max_student ",[139,167855,150],{"class":149},[139,167857,167858],{"class":145}," students[",[139,167860,2634],{"class":153},[139,167862,424],{"class":145},[139,167864,167865,167868,167870],{"class":141,"line":994},[139,167866,167867],{"class":145},"passed ",[139,167869,150],{"class":149},[139,167871,2088],{"class":145},[139,167873,167874],{"class":141,"line":999},[139,167875,843],{"emptyLinePlaceholder":842},[139,167877,167878,167880,167882,167884],{"class":141,"line":1006},[139,167879,1970],{"class":149},[139,167881,154325],{"class":145},[139,167883,1976],{"class":149},[139,167885,154330],{"class":145},[139,167887,167888,167890,167892,167894,167896],{"class":141,"line":1027},[139,167889,161482],{"class":145},[139,167891,11751],{"class":149},[139,167893,154337],{"class":145},[139,167895,2272],{"class":160},[139,167897,424],{"class":145},[139,167899,167900],{"class":141,"line":1040},[139,167901,843],{"emptyLinePlaceholder":842},[139,167903,167904,167906,167908,167910,167912,167914,167917,167919],{"class":141,"line":2160},[139,167905,790],{"class":149},[139,167907,154337],{"class":145},[139,167909,2272],{"class":160},[139,167911,6721],{"class":145},[139,167913,958],{"class":149},[139,167915,167916],{"class":145}," max_student[",[139,167918,2272],{"class":160},[139,167920,167921],{"class":145},"]:\n",[139,167923,167924,167927,167929],{"class":141,"line":2188},[139,167925,167926],{"class":145},"        max_student ",[139,167928,150],{"class":149},[139,167930,154353],{"class":145},[139,167932,167933],{"class":141,"line":3944},[139,167934,843],{"emptyLinePlaceholder":842},[139,167936,167937,167939,167941,167943,167945,167947,167949],{"class":141,"line":3963},[139,167938,790],{"class":149},[139,167940,154337],{"class":145},[139,167942,2272],{"class":160},[139,167944,6721],{"class":145},[139,167946,3998],{"class":149},[139,167948,160012],{"class":153},[139,167950,246],{"class":145},[139,167952,167953],{"class":141,"line":3968},[139,167954,167955],{"class":145},"        passed.append(student)\n",[139,167957,167958],{"class":141,"line":3982},[139,167959,843],{"emptyLinePlaceholder":842},[139,167961,167962,167964,167966,167968,167970,167972],{"class":141,"line":3987},[139,167963,165941],{"class":145},[139,167965,150],{"class":149},[139,167967,165946],{"class":145},[139,167969,3019],{"class":149},[139,167971,9605],{"class":153},[139,167973,167162],{"class":145},[139,167975,167976],{"class":141,"line":4014},[139,167977,843],{"emptyLinePlaceholder":842},[139,167979,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998],{"class":141,"line":4019},[139,167981,213],{"class":153},[139,167983,157],{"class":145},[139,167985,619],{"class":149},[139,167987,165964],{"class":160},[139,167989,625],{"class":153},[139,167991,165969],{"class":145},[139,167993,159335],{"class":149},[139,167995,631],{"class":153},[139,167997,634],{"class":160},[139,167999,164],{"class":145},[139,168001,168002,168004,168006,168008,168011,168013,168016,168018,168020,168022,168024,168026,168028,168030,168032,168034],{"class":141,"line":4036},[139,168003,213],{"class":153},[139,168005,157],{"class":145},[139,168007,619],{"class":149},[139,168009,168010],{"class":160},"\"最高分学生:",[139,168012,625],{"class":153},[139,168014,168015],{"class":145},"max_student[",[139,168017,155067],{"class":160},[139,168019,3373],{"class":145},[139,168021,631],{"class":153},[139,168023,6726],{"class":153},[139,168025,168015],{"class":145},[139,168027,155105],{"class":160},[139,168029,3373],{"class":145},[139,168031,631],{"class":153},[139,168033,634],{"class":160},[139,168035,164],{"class":145},[139,168037,168038,168040,168042,168044,168047,168050,168053,168055,168057],{"class":141,"line":4041},[139,168039,213],{"class":153},[139,168041,157],{"class":145},[139,168043,619],{"class":149},[139,168045,168046],{"class":160},"\"及格人数:",[139,168048,168049],{"class":153},"{len",[139,168051,168052],{"class":145},"(passed)",[139,168054,631],{"class":153},[139,168056,634],{"class":160},[139,168058,164],{"class":145},[14,168060,168062],{"id":168061},"_616-易错点","6.16 易错点",[1760,168064,168065,168068,168071,168074,168080,168089],{},[1763,168066,168067],{},"列表可变，元组和字符串不可变。",[1763,168069,168070],{},"切片结束位置不包含。",[1763,168072,168073],{},"字典通过 key 取值，不是通过索引。",[1763,168075,168076,168077,170],{},"空集合要用 ",[50,168078,168079],{},"set()",[1763,168081,106589,168082,168085,168086,170],{},[50,168083,168084],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[50,168087,168088],{},"get()",[1763,168090,168091],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168093,168095],{"id":168094},"_617-本章练习","6.17 本章练习",[1760,168097,168098,168101,168104,168107,168110],{},[1763,168099,168100],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1763,168102,168103],{},"输入一句话，统计每个字符出现次数。",[1763,168105,168106],{},"使用集合去除列表中的重复元素。",[1763,168108,168109],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1763,168111,168112],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2348,168114,168115],{},"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":135,"searchDepth":210,"depth":210,"links":168117},[168118,168119,168120,168121,168122,168123,168124,168125,168126,168127,168128,168129,168130,168131,168132,168133,168134],{"id":165099,"depth":210,"text":165100},{"id":165216,"depth":210,"text":165217},{"id":165306,"depth":210,"text":165307},{"id":165430,"depth":210,"text":165431},{"id":165793,"depth":210,"text":165794},{"id":165980,"depth":210,"text":165981},{"id":166099,"depth":210,"text":166100},{"id":166241,"depth":210,"text":166242},{"id":166428,"depth":210,"text":166429},{"id":166672,"depth":210,"text":166673},{"id":166882,"depth":210,"text":166883},{"id":166967,"depth":210,"text":166968},{"id":167265,"depth":210,"text":167266},{"id":167546,"depth":210,"text":167547},{"id":167738,"depth":210,"text":167739},{"id":168061,"depth":210,"text":168062},{"id":168094,"depth":210,"text":168095},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165091,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168141,"title":168142,"body":168143,"description":2384,"extension":2385,"meta":170314,"navigation":842,"path":170315,"seo":170316,"stem":170317,"__hash__":170318},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168144,"toc":170289},[168145,168148,168152,168155,168235,168238,168259,168262,168266,168269,168331,168334,168351,168355,168358,168403,168405,168413,168417,168420,168502,168505,168508,168533,168536,168559,168563,168566,168568,168630,168633,168635,168686,168690,168694,168700,168804,168808,168814,168885,168889,168892,168960,168963,169043,169047,169053,169089,169092,169095,169205,169211,169215,169218,169290,169293,169297,169301,169306,169368,169372,169377,169445,169449,169454,169570,169574,169577,169657,169660,169664,169667,169771,169773,169788,169791,169795,169933,169941,169945,169947,169958,169960,170218,170222,170254,170258,170286],[10,168146,168142],{"id":168147},"_7-函数进阶",[14,168149,168151],{"id":168150},"_71-多返回值","7.1 多返回值",[19,168153,168154],{},"Python 函数可以返回多个值，本质上返回的是元组。",[130,168156,168158],{"className":132,"code":168157,"language":134,"meta":135,"style":135},"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",[50,168159,168160,168169,168177,168185,168194,168201,168205,168209,168218,168224],{"__ignoreMap":135},[139,168161,168162,168164,168167],{"class":141,"line":142},[139,168163,778],{"class":149},[139,168165,168166],{"class":781}," get_info",[139,168168,34200],{"class":145},[139,168170,168171,168173,168175],{"class":141,"line":210},[139,168172,154557],{"class":145},[139,168174,150],{"class":149},[139,168176,151554],{"class":160},[139,168178,168179,168181,168183],{"class":141,"line":254},[139,168180,283],{"class":145},[139,168182,150],{"class":149},[139,168184,148760],{"class":153},[139,168186,168187,168189,168191],{"class":141,"line":262},[139,168188,154586],{"class":145},[139,168190,150],{"class":149},[139,168192,168193],{"class":153}," 95\n",[139,168195,168196,168198],{"class":141,"line":313},[139,168197,978],{"class":149},[139,168199,168200],{"class":145}," name, age, score\n",[139,168202,168203],{"class":141,"line":462},[139,168204,843],{"emptyLinePlaceholder":842},[139,168206,168207],{"class":141,"line":474},[139,168208,843],{"emptyLinePlaceholder":842},[139,168210,168211,168213,168215],{"class":141,"line":484},[139,168212,163479],{"class":145},[139,168214,150],{"class":149},[139,168216,168217],{"class":145}," get_info()\n",[139,168219,168220,168222],{"class":141,"line":989},[139,168221,213],{"class":153},[139,168223,78814],{"class":145},[139,168225,168226,168228,168230,168232],{"class":141,"line":994},[139,168227,213],{"class":153},[139,168229,157],{"class":145},[139,168231,105331],{"class":153},[139,168233,168234],{"class":145},"(result))\n",[19,168236,168237],{},"可以直接解包：",[130,168239,168241],{"className":132,"code":168240,"language":134,"meta":135,"style":135},"name, age, score = get_info()\nprint(name, age, score)\n",[50,168242,168243,168252],{"__ignoreMap":135},[139,168244,168245,168248,168250],{"class":141,"line":142},[139,168246,168247],{"class":145},"name, age, score ",[139,168249,150],{"class":149},[139,168251,168217],{"class":145},[139,168253,168254,168256],{"class":141,"line":210},[139,168255,213],{"class":153},[139,168257,168258],{"class":145},"(name, age, score)\n",[19,168260,168261],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168263,168265],{"id":168264},"_72-位置参数","7.2 位置参数",[19,168267,168268],{},"位置参数按顺序传递。",[130,168270,168272],{"className":132,"code":168271,"language":134,"meta":135,"style":135},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[50,168273,168274,168282,168310,168314,168318],{"__ignoreMap":135},[139,168275,168276,168278,168280],{"class":141,"line":142},[139,168277,778],{"class":149},[139,168279,151573],{"class":781},[139,168281,151576],{"class":145},[139,168283,168284,168286,168288,168290,168292,168294,168296,168298,168300,168302,168304,168306,168308],{"class":141,"line":210},[139,168285,302],{"class":153},[139,168287,157],{"class":145},[139,168289,619],{"class":149},[139,168291,151587],{"class":160},[139,168293,625],{"class":153},[139,168295,1676],{"class":145},[139,168297,631],{"class":153},[139,168299,151596],{"class":160},[139,168301,625],{"class":153},[139,168303,831],{"class":145},[139,168305,631],{"class":153},[139,168307,151605],{"class":160},[139,168309,164],{"class":145},[139,168311,168312],{"class":141,"line":254},[139,168313,843],{"emptyLinePlaceholder":842},[139,168315,168316],{"class":141,"line":262},[139,168317,843],{"emptyLinePlaceholder":842},[139,168319,168320,168323,168325,168327,168329],{"class":141,"line":313},[139,168321,168322],{"class":145},"introduce(",[139,168324,1441],{"class":160},[139,168326,413],{"class":145},[139,168328,3085],{"class":153},[139,168330,164],{"class":145},[19,168332,168333],{},"顺序错了就会得到错误含义：",[130,168335,168337],{"className":132,"code":168336,"language":134,"meta":135,"style":135},"introduce(18, \"小明\")\n",[50,168338,168339],{"__ignoreMap":135},[139,168340,168341,168343,168345,168347,168349],{"class":141,"line":142},[139,168342,168322],{"class":145},[139,168344,3085],{"class":153},[139,168346,413],{"class":145},[139,168348,1441],{"class":160},[139,168350,164],{"class":145},[14,168352,168354],{"id":168353},"_73-关键字参数","7.3 关键字参数",[19,168356,168357],{},"关键字参数按参数名传递。",[130,168359,168361],{"className":132,"code":168360,"language":134,"meta":135,"style":135},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[50,168362,168363,168383],{"__ignoreMap":135},[139,168364,168365,168367,168369,168371,168373,168375,168377,168379,168381],{"class":141,"line":142},[139,168366,168322],{"class":145},[139,168368,1676],{"class":2111},[139,168370,150],{"class":149},[139,168372,1441],{"class":160},[139,168374,413],{"class":145},[139,168376,831],{"class":2111},[139,168378,150],{"class":149},[139,168380,3085],{"class":153},[139,168382,164],{"class":145},[139,168384,168385,168387,168389,168391,168393,168395,168397,168399,168401],{"class":141,"line":210},[139,168386,168322],{"class":145},[139,168388,831],{"class":2111},[139,168390,150],{"class":149},[139,168392,3085],{"class":153},[139,168394,413],{"class":145},[139,168396,1676],{"class":2111},[139,168398,150],{"class":149},[139,168400,1441],{"class":160},[139,168402,164],{"class":145},[19,168404,120154],{},[1760,168406,168407,168410],{},[1763,168408,168409],{},"顺序不容易错。",[1763,168411,168412],{},"调用时可读性更强。",[14,168414,168416],{"id":168415},"_74-默认参数","7.4 默认参数",[19,168418,168419],{},"默认参数给参数设置默认值。",[130,168421,168423],{"className":132,"code":168422,"language":134,"meta":135,"style":135},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[50,168424,168425,168441,168471,168475,168479,168489],{"__ignoreMap":135},[139,168426,168427,168429,168431,168434,168436,168439],{"class":141,"line":142},[139,168428,778],{"class":149},[139,168430,124311],{"class":781},[139,168432,168433],{"class":145},"(host, port",[139,168435,150],{"class":149},[139,168437,168438],{"class":153},"3306",[139,168440,558],{"class":145},[139,168442,168443,168445,168447,168449,168452,168454,168456,168458,168460,168462,168465,168467,168469],{"class":141,"line":210},[139,168444,302],{"class":153},[139,168446,157],{"class":145},[139,168448,619],{"class":149},[139,168450,168451],{"class":160},"\"连接",[139,168453,625],{"class":153},[139,168455,29655],{"class":145},[139,168457,631],{"class":153},[139,168459,3294],{"class":160},[139,168461,625],{"class":153},[139,168463,168464],{"class":145},"port",[139,168466,631],{"class":153},[139,168468,634],{"class":160},[139,168470,164],{"class":145},[139,168472,168473],{"class":141,"line":254},[139,168474,843],{"emptyLinePlaceholder":842},[139,168476,168477],{"class":141,"line":262},[139,168478,843],{"emptyLinePlaceholder":842},[139,168480,168481,168484,168487],{"class":141,"line":313},[139,168482,168483],{"class":145},"connect(",[139,168485,168486],{"class":160},"\"localhost\"",[139,168488,164],{"class":145},[139,168490,168491,168493,168495,168497,168500],{"class":141,"line":462},[139,168492,168483],{"class":145},[139,168494,168486],{"class":160},[139,168496,413],{"class":145},[139,168498,168499],{"class":153},"6379",[139,168501,164],{"class":145},[19,168503,168504],{},"注意：默认参数必须放在非默认参数后面。",[19,168506,168507],{},"错误：",[130,168509,168511],{"className":132,"code":168510,"language":134,"meta":135,"style":135},"def connect(port=3306, host):\n    pass\n",[50,168512,168513,168529],{"__ignoreMap":135},[139,168514,168515,168517,168519,168522,168524,168526],{"class":141,"line":142},[139,168516,778],{"class":149},[139,168518,124311],{"class":781},[139,168520,168521],{"class":145},"(port",[139,168523,150],{"class":149},[139,168525,168438],{"class":153},[139,168527,168528],{"class":145},", host):\n",[139,168530,168531],{"class":141,"line":210},[139,168532,930],{"class":149},[19,168534,168535],{},"正确：",[130,168537,168539],{"className":132,"code":168538,"language":134,"meta":135,"style":135},"def connect(host, port=3306):\n    pass\n",[50,168540,168541,168555],{"__ignoreMap":135},[139,168542,168543,168545,168547,168549,168551,168553],{"class":141,"line":142},[139,168544,778],{"class":149},[139,168546,124311],{"class":781},[139,168548,168433],{"class":145},[139,168550,150],{"class":149},[139,168552,168438],{"class":153},[139,168554,558],{"class":145},[139,168556,168557],{"class":141,"line":210},[139,168558,930],{"class":149},[14,168560,168562],{"id":168561},"_75-默认参数的坑","7.5 默认参数的坑",[19,168564,168565],{},"不要使用可变对象作为默认参数。",[19,168567,1992],{},[130,168569,168571],{"className":132,"code":168570,"language":134,"meta":135,"style":135},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[50,168572,168573,168588,168593,168600,168604,168608,168619],{"__ignoreMap":135},[139,168574,168575,168577,168580,168583,168585],{"class":141,"line":142},[139,168576,778],{"class":149},[139,168578,168579],{"class":781}," add_item",[139,168581,168582],{"class":145},"(item, items",[139,168584,150],{"class":149},[139,168586,168587],{"class":145},"[]):\n",[139,168589,168590],{"class":141,"line":210},[139,168591,168592],{"class":145},"    items.append(item)\n",[139,168594,168595,168597],{"class":141,"line":254},[139,168596,978],{"class":149},[139,168598,168599],{"class":145}," items\n",[139,168601,168602],{"class":141,"line":262},[139,168603,843],{"emptyLinePlaceholder":842},[139,168605,168606],{"class":141,"line":313},[139,168607,843],{"emptyLinePlaceholder":842},[139,168609,168610,168612,168615,168617],{"class":141,"line":462},[139,168611,213],{"class":153},[139,168613,168614],{"class":145},"(add_item(",[139,168616,167491],{"class":160},[139,168618,207],{"class":145},[139,168620,168621,168623,168625,168628],{"class":141,"line":474},[139,168622,213],{"class":153},[139,168624,168614],{"class":145},[139,168626,168627],{"class":160},"\"b\"",[139,168629,207],{"class":145},[19,168631,168632],{},"第二次调用会复用第一次的列表。",[19,168634,158066],{},[130,168636,168638],{"className":132,"code":168637,"language":134,"meta":135,"style":135},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[50,168639,168640,168654,168667,168676,168680],{"__ignoreMap":135},[139,168641,168642,168644,168646,168648,168650,168652],{"class":141,"line":142},[139,168643,778],{"class":149},[139,168645,168579],{"class":781},[139,168647,168582],{"class":145},[139,168649,150],{"class":149},[139,168651,97913],{"class":153},[139,168653,558],{"class":145},[139,168655,168656,168658,168661,168663,168665],{"class":141,"line":210},[139,168657,790],{"class":149},[139,168659,168660],{"class":145}," items ",[139,168662,41170],{"class":149},[139,168664,41175],{"class":153},[139,168666,246],{"class":145},[139,168668,168669,168672,168674],{"class":141,"line":254},[139,168670,168671],{"class":145},"        items ",[139,168673,150],{"class":149},[139,168675,2088],{"class":145},[139,168677,168678],{"class":141,"line":262},[139,168679,168592],{"class":145},[139,168681,168682,168684],{"class":141,"line":313},[139,168683,978],{"class":149},[139,168685,168599],{"class":145},[14,168687,168689],{"id":168688},"_76-不定长参数","7.6 不定长参数",[1217,168691,168693],{"id":168692},"_761-args","7.6.1 *args",[19,168695,168696,168699],{},[50,168697,168698],{},"*args"," 接收任意数量的位置参数，得到元组。",[130,168701,168703],{"className":132,"code":168702,"language":134,"meta":135,"style":135},"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",[50,168704,168705,168718,168726,168737,168746,168752,168756,168760,168778],{"__ignoreMap":135},[139,168706,168707,168709,168711,168713,168715],{"class":141,"line":142},[139,168708,778],{"class":149},[139,168710,1134],{"class":781},[139,168712,157],{"class":145},[139,168714,2892],{"class":149},[139,168716,168717],{"class":145},"args):\n",[139,168719,168720,168722,168724],{"class":141,"line":210},[139,168721,161482],{"class":145},[139,168723,150],{"class":149},[139,168725,49571],{"class":153},[139,168727,168728,168730,168732,168734],{"class":141,"line":254},[139,168729,5482],{"class":149},[139,168731,158357],{"class":145},[139,168733,1976],{"class":149},[139,168735,168736],{"class":145}," args:\n",[139,168738,168739,168741,168743],{"class":141,"line":262},[139,168740,162155],{"class":145},[139,168742,11751],{"class":149},[139,168744,168745],{"class":145}," num\n",[139,168747,168748,168750],{"class":141,"line":313},[139,168749,978],{"class":149},[139,168751,164458],{"class":145},[139,168753,168754],{"class":141,"line":462},[139,168755,843],{"emptyLinePlaceholder":842},[139,168757,168758],{"class":141,"line":474},[139,168759,843],{"emptyLinePlaceholder":842},[139,168761,168762,168764,168766,168768,168770,168772,168774,168776],{"class":141,"line":484},[139,168763,213],{"class":153},[139,168765,1747],{"class":145},[139,168767,410],{"class":153},[139,168769,413],{"class":145},[139,168771,416],{"class":153},[139,168773,413],{"class":145},[139,168775,421],{"class":153},[139,168777,207],{"class":145},[139,168779,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800,168802],{"class":141,"line":989},[139,168781,213],{"class":153},[139,168783,1747],{"class":145},[139,168785,410],{"class":153},[139,168787,413],{"class":145},[139,168789,416],{"class":153},[139,168791,413],{"class":145},[139,168793,421],{"class":153},[139,168795,413],{"class":145},[139,168797,1476],{"class":153},[139,168799,413],{"class":145},[139,168801,1481],{"class":153},[139,168803,207],{"class":145},[1217,168805,168807],{"id":168806},"_762-kwargs","7.6.2 **kwargs",[19,168809,168810,168813],{},[50,168811,168812],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[130,168815,168817],{"className":132,"code":168816,"language":134,"meta":135,"style":135},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[50,168818,168819,168832,168843,168849,168853,168857],{"__ignoreMap":135},[139,168820,168821,168823,168825,168827,168829],{"class":141,"line":142},[139,168822,778],{"class":149},[139,168824,164117],{"class":781},[139,168826,157],{"class":145},[139,168828,12935],{"class":149},[139,168830,168831],{"class":145},"kwargs):\n",[139,168833,168834,168836,168838,168840],{"class":141,"line":210},[139,168835,5482],{"class":149},[139,168837,166952],{"class":145},[139,168839,1976],{"class":149},[139,168841,168842],{"class":145}," kwargs.items():\n",[139,168844,168845,168847],{"class":141,"line":254},[139,168846,34698],{"class":153},[139,168848,166964],{"class":145},[139,168850,168851],{"class":141,"line":262},[139,168852,843],{"emptyLinePlaceholder":842},[139,168854,168855],{"class":141,"line":313},[139,168856,843],{"emptyLinePlaceholder":842},[139,168858,168859,168861,168863,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883],{"class":141,"line":462},[139,168860,164181],{"class":145},[139,168862,1676],{"class":2111},[139,168864,150],{"class":149},[139,168866,1441],{"class":160},[139,168868,413],{"class":145},[139,168870,831],{"class":2111},[139,168872,150],{"class":149},[139,168874,3085],{"class":153},[139,168876,413],{"class":145},[139,168878,72501],{"class":2111},[139,168880,150],{"class":149},[139,168882,71499],{"class":160},[139,168884,164],{"class":145},[14,168886,168888],{"id":168887},"_77-参数解包","7.7 参数解包",[19,168890,168891],{},"列表或元组解包为位置参数：",[130,168893,168895],{"className":132,"code":168894,"language":134,"meta":135,"style":135},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[50,168896,168897,168906,168921,168925,168929,168949],{"__ignoreMap":135},[139,168898,168899,168901,168903],{"class":141,"line":142},[139,168900,778],{"class":149},[139,168902,1134],{"class":781},[139,168904,168905],{"class":145},"(a, b, c):\n",[139,168907,168908,168910,168912,168914,168916,168918],{"class":141,"line":210},[139,168909,978],{"class":149},[139,168911,1144],{"class":145},[139,168913,1147],{"class":149},[139,168915,13155],{"class":145},[139,168917,1147],{"class":149},[139,168919,168920],{"class":145}," c\n",[139,168922,168923],{"class":141,"line":254},[139,168924,843],{"emptyLinePlaceholder":842},[139,168926,168927],{"class":141,"line":262},[139,168928,843],{"emptyLinePlaceholder":842},[139,168930,168931,168933,168935,168937,168939,168941,168943,168945,168947],{"class":141,"line":313},[139,168932,166267],{"class":145},[139,168934,150],{"class":149},[139,168936,407],{"class":145},[139,168938,410],{"class":153},[139,168940,413],{"class":145},[139,168942,416],{"class":153},[139,168944,413],{"class":145},[139,168946,421],{"class":153},[139,168948,424],{"class":145},[139,168950,168951,168953,168955,168957],{"class":141,"line":462},[139,168952,213],{"class":153},[139,168954,1747],{"class":145},[139,168956,2892],{"class":149},[139,168958,168959],{"class":145},"nums))\n",[19,168961,168962],{},"字典解包为关键字参数：",[130,168964,168966],{"className":132,"code":168965,"language":134,"meta":135,"style":135},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[50,168967,168968,168976,169002,169006,169010,169034],{"__ignoreMap":135},[139,168969,168970,168972,168974],{"class":141,"line":142},[139,168971,778],{"class":149},[139,168973,151573],{"class":781},[139,168975,151576],{"class":145},[139,168977,168978,168980,168982,168984,168986,168988,168990,168992,168994,168996,168998,169000],{"class":141,"line":210},[139,168979,302],{"class":153},[139,168981,157],{"class":145},[139,168983,619],{"class":149},[139,168985,634],{"class":160},[139,168987,625],{"class":153},[139,168989,1676],{"class":145},[139,168991,631],{"class":153},[139,168993,6726],{"class":153},[139,168995,831],{"class":145},[139,168997,631],{"class":153},[139,168999,634],{"class":160},[139,169001,164],{"class":145},[139,169003,169004],{"class":141,"line":254},[139,169005,843],{"emptyLinePlaceholder":842},[139,169007,169008],{"class":141,"line":262},[139,169009,843],{"emptyLinePlaceholder":842},[139,169011,169012,169014,169016,169018,169020,169022,169024,169026,169028,169030,169032],{"class":141,"line":313},[139,169013,118534],{"class":145},[139,169015,150],{"class":149},[139,169017,6726],{"class":145},[139,169019,2262],{"class":160},[139,169021,2265],{"class":145},[139,169023,1441],{"class":160},[139,169025,413],{"class":145},[139,169027,71354],{"class":160},[139,169029,2265],{"class":145},[139,169031,3085],{"class":153},[139,169033,3862],{"class":145},[139,169035,169036,169038,169040],{"class":141,"line":462},[139,169037,168322],{"class":145},[139,169039,12935],{"class":149},[139,169041,169042],{"class":145},"info)\n",[14,169044,169046],{"id":169045},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169048,169049,169052],{},[50,169050,169051],{},"lambda"," 用于定义简单匿名函数。",[130,169054,169056],{"className":132,"code":169055,"language":134,"meta":135,"style":135},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[50,169057,169058,169075],{"__ignoreMap":135},[139,169059,169060,169063,169065,169068,169071,169073],{"class":141,"line":142},[139,169061,169062],{"class":145},"add ",[139,169064,150],{"class":149},[139,169066,169067],{"class":149}," lambda",[139,169069,169070],{"class":145}," a, b: a ",[139,169072,1147],{"class":149},[139,169074,1150],{"class":145},[139,169076,169077,169079,169081,169083,169085,169087],{"class":141,"line":210},[139,169078,213],{"class":153},[139,169080,1747],{"class":145},[139,169082,410],{"class":153},[139,169084,413],{"class":145},[139,169086,416],{"class":153},[139,169088,207],{"class":145},[19,169090,169091],{},"常和排序、过滤等函数一起使用。",[19,169093,169094],{},"按分数排序：",[130,169096,169098],{"className":132,"code":169097,"language":134,"meta":135,"style":135},"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",[50,169099,169100,169108,169128,169148,169168,169172,169176,169199],{"__ignoreMap":135},[139,169101,169102,169104,169106],{"class":141,"line":142},[139,169103,2244],{"class":145},[139,169105,150],{"class":149},[139,169107,57681],{"class":145},[139,169109,169110,169112,169114,169116,169118,169120,169122,169124,169126],{"class":141,"line":210},[139,169111,150586],{"class":145},[139,169113,2262],{"class":160},[139,169115,2265],{"class":145},[139,169117,1441],{"class":160},[139,169119,413],{"class":145},[139,169121,2272],{"class":160},[139,169123,2265],{"class":145},[139,169125,2277],{"class":153},[139,169127,7208],{"class":145},[139,169129,169130,169132,169134,169136,169138,169140,169142,169144,169146],{"class":141,"line":254},[139,169131,150586],{"class":145},[139,169133,2262],{"class":160},[139,169135,2265],{"class":145},[139,169137,1446],{"class":160},[139,169139,413],{"class":145},[139,169141,2272],{"class":160},[139,169143,2265],{"class":145},[139,169145,3246],{"class":153},[139,169147,7208],{"class":145},[139,169149,169150,169152,169154,169156,169158,169160,169162,169164,169166],{"class":141,"line":262},[139,169151,150586],{"class":145},[139,169153,2262],{"class":160},[139,169155,2265],{"class":145},[139,169157,1451],{"class":160},[139,169159,413],{"class":145},[139,169161,2272],{"class":160},[139,169163,2265],{"class":145},[139,169165,2844],{"class":153},[139,169167,7208],{"class":145},[139,169169,169170],{"class":141,"line":313},[139,169171,424],{"class":145},[139,169173,169174],{"class":141,"line":462},[139,169175,843],{"emptyLinePlaceholder":842},[139,169177,169178,169181,169183,169185,169187,169189,169191,169193,169195,169197],{"class":141,"line":474},[139,169179,169180],{"class":145},"students.sort(",[139,169182,156130],{"class":2111},[139,169184,156133],{"class":149},[139,169186,156136],{"class":145},[139,169188,2272],{"class":160},[139,169190,1484],{"class":145},[139,169192,165695],{"class":2111},[139,169194,150],{"class":149},[139,169196,33725],{"class":153},[139,169198,164],{"class":145},[139,169200,169201,169203],{"class":141,"line":484},[139,169202,213],{"class":153},[139,169204,167162],{"class":145},[19,169206,169207,169208,169210],{},"如果逻辑复杂，不要硬写 ",[50,169209,169051],{},"，定义普通函数更清晰。",[14,169212,169214],{"id":169213},"_79-函数作为参数","7.9 函数作为参数",[19,169216,169217],{},"函数可以作为参数传给另一个函数。",[130,169219,169221],{"className":132,"code":169220,"language":134,"meta":135,"style":135},"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",[50,169222,169223,169231,169241,169245,169249,169259,169266,169270,169274],{"__ignoreMap":135},[139,169224,169225,169227,169229],{"class":141,"line":142},[139,169226,778],{"class":149},[139,169228,1134],{"class":781},[139,169230,1137],{"class":145},[139,169232,169233,169235,169237,169239],{"class":141,"line":210},[139,169234,978],{"class":149},[139,169236,1144],{"class":145},[139,169238,1147],{"class":149},[139,169240,1150],{"class":145},[139,169242,169243],{"class":141,"line":254},[139,169244,843],{"emptyLinePlaceholder":842},[139,169246,169247],{"class":141,"line":262},[139,169248,843],{"emptyLinePlaceholder":842},[139,169250,169251,169253,169256],{"class":141,"line":313},[139,169252,778],{"class":149},[139,169254,169255],{"class":781}," calculate",[139,169257,169258],{"class":145},"(a, b, func):\n",[139,169260,169261,169263],{"class":141,"line":462},[139,169262,978],{"class":149},[139,169264,169265],{"class":145}," func(a, b)\n",[139,169267,169268],{"class":141,"line":474},[139,169269,843],{"emptyLinePlaceholder":842},[139,169271,169272],{"class":141,"line":484},[139,169273,843],{"emptyLinePlaceholder":842},[139,169275,169276,169278,169281,169283,169285,169287],{"class":141,"line":989},[139,169277,213],{"class":153},[139,169279,169280],{"class":145},"(calculate(",[139,169282,536],{"class":153},[139,169284,413],{"class":145},[139,169286,3135],{"class":153},[139,169288,169289],{"class":145},", add))\n",[19,169291,169292],{},"这种思想在排序、回调、框架中经常出现。",[14,169294,169296],{"id":169295},"_710-mapfiltersorted","7.10 map、filter、sorted",[1217,169298,169300],{"id":169299},"_7101-map","7.10.1 map",[19,169302,169303,169305],{},[50,169304,76273],{}," 对每个元素执行函数。",[130,169307,169309],{"className":132,"code":169308,"language":134,"meta":135,"style":135},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[50,169310,169311,169335,169358],{"__ignoreMap":135},[139,169312,169313,169315,169317,169319,169321,169323,169325,169327,169329,169331,169333],{"class":141,"line":142},[139,169314,166267],{"class":145},[139,169316,150],{"class":149},[139,169318,407],{"class":145},[139,169320,410],{"class":153},[139,169322,413],{"class":145},[139,169324,416],{"class":153},[139,169326,413],{"class":145},[139,169328,421],{"class":153},[139,169330,413],{"class":145},[139,169332,1476],{"class":153},[139,169334,424],{"class":145},[139,169336,169337,169339,169341,169344,169346,169348,169351,169353,169355],{"class":141,"line":210},[139,169338,163479],{"class":145},[139,169340,150],{"class":149},[139,169342,169343],{"class":153}," map",[139,169345,157],{"class":145},[139,169347,169051],{"class":149},[139,169349,169350],{"class":145}," x: x ",[139,169352,2892],{"class":149},[139,169354,17024],{"class":153},[139,169356,169357],{"class":145},", nums)\n",[139,169359,169360,169362,169364,169366],{"class":141,"line":254},[139,169361,213],{"class":153},[139,169363,157],{"class":145},[139,169365,156254],{"class":153},[139,169367,168234],{"class":145},[1217,169369,169371],{"id":169370},"_7102-filter","7.10.2 filter",[19,169373,169374,169376],{},[50,169375,82279],{}," 保留满足条件的元素。",[130,169378,169380],{"className":132,"code":169379,"language":134,"meta":135,"style":135},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[50,169381,169382,169410,169435],{"__ignoreMap":135},[139,169383,169384,169386,169388,169390,169392,169394,169396,169398,169400,169402,169404,169406,169408],{"class":141,"line":142},[139,169385,166267],{"class":145},[139,169387,150],{"class":149},[139,169389,407],{"class":145},[139,169391,410],{"class":153},[139,169393,413],{"class":145},[139,169395,416],{"class":153},[139,169397,413],{"class":145},[139,169399,421],{"class":153},[139,169401,413],{"class":145},[139,169403,1476],{"class":153},[139,169405,413],{"class":145},[139,169407,1481],{"class":153},[139,169409,424],{"class":145},[139,169411,169412,169414,169416,169419,169421,169423,169425,169427,169429,169431,169433],{"class":141,"line":210},[139,169413,163479],{"class":145},[139,169415,150],{"class":149},[139,169417,169418],{"class":153}," filter",[139,169420,157],{"class":145},[139,169422,169051],{"class":149},[139,169424,169350],{"class":145},[139,169426,2766],{"class":149},[139,169428,17024],{"class":153},[139,169430,1735],{"class":149},[139,169432,799],{"class":153},[139,169434,169357],{"class":145},[139,169436,169437,169439,169441,169443],{"class":141,"line":254},[139,169438,213],{"class":153},[139,169440,157],{"class":145},[139,169442,156254],{"class":153},[139,169444,168234],{"class":145},[1217,169446,169448],{"id":169447},"_7103-sorted","7.10.3 sorted",[19,169450,169451,169453],{},[50,169452,167402],{}," 返回排序后的新列表。",[130,169455,169457],{"className":132,"code":169456,"language":134,"meta":135,"style":135},"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",[50,169458,169459,169467,169487,169507,169527,169531,169535,169564],{"__ignoreMap":135},[139,169460,169461,169463,169465],{"class":141,"line":142},[139,169462,2244],{"class":145},[139,169464,150],{"class":149},[139,169466,57681],{"class":145},[139,169468,169469,169471,169473,169475,169477,169479,169481,169483,169485],{"class":141,"line":210},[139,169470,150586],{"class":145},[139,169472,2262],{"class":160},[139,169474,2265],{"class":145},[139,169476,1441],{"class":160},[139,169478,413],{"class":145},[139,169480,2272],{"class":160},[139,169482,2265],{"class":145},[139,169484,2277],{"class":153},[139,169486,7208],{"class":145},[139,169488,169489,169491,169493,169495,169497,169499,169501,169503,169505],{"class":141,"line":254},[139,169490,150586],{"class":145},[139,169492,2262],{"class":160},[139,169494,2265],{"class":145},[139,169496,1446],{"class":160},[139,169498,413],{"class":145},[139,169500,2272],{"class":160},[139,169502,2265],{"class":145},[139,169504,3246],{"class":153},[139,169506,7208],{"class":145},[139,169508,169509,169511,169513,169515,169517,169519,169521,169523,169525],{"class":141,"line":262},[139,169510,150586],{"class":145},[139,169512,2262],{"class":160},[139,169514,2265],{"class":145},[139,169516,1451],{"class":160},[139,169518,413],{"class":145},[139,169520,2272],{"class":160},[139,169522,2265],{"class":145},[139,169524,2844],{"class":153},[139,169526,7208],{"class":145},[139,169528,169529],{"class":141,"line":313},[139,169530,424],{"class":145},[139,169532,169533],{"class":141,"line":462},[139,169534,843],{"emptyLinePlaceholder":842},[139,169536,169537,169539,169541,169543,169546,169548,169550,169552,169554,169556,169558,169560,169562],{"class":141,"line":474},[139,169538,163479],{"class":145},[139,169540,150],{"class":149},[139,169542,165771],{"class":153},[139,169544,169545],{"class":145},"(students, ",[139,169547,156130],{"class":2111},[139,169549,156133],{"class":149},[139,169551,156136],{"class":145},[139,169553,2272],{"class":160},[139,169555,1484],{"class":145},[139,169557,165695],{"class":2111},[139,169559,150],{"class":149},[139,169561,33725],{"class":153},[139,169563,164],{"class":145},[139,169565,169566,169568],{"class":141,"line":484},[139,169567,213],{"class":153},[139,169569,78814],{"class":145},[14,169571,169573],{"id":169572},"_711-闭包入门","7.11 闭包入门",[19,169575,169576],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[130,169578,169580],{"className":132,"code":169579,"language":134,"meta":135,"style":135},"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",[50,169581,169582,169592,169602,169613,169617,169624,169628,169632,169646],{"__ignoreMap":135},[139,169583,169584,169586,169589],{"class":141,"line":142},[139,169585,778],{"class":149},[139,169587,169588],{"class":781}," outer",[139,169590,169591],{"class":145},"(base):\n",[139,169593,169594,169596,169599],{"class":141,"line":210},[139,169595,33053],{"class":149},[139,169597,169598],{"class":781}," inner",[139,169600,169601],{"class":145},"(num):\n",[139,169603,169604,169606,169609,169611],{"class":141,"line":254},[139,169605,2085],{"class":149},[139,169607,169608],{"class":145}," base ",[139,169610,1147],{"class":149},[139,169612,168745],{"class":145},[139,169614,169615],{"class":141,"line":262},[139,169616,843],{"emptyLinePlaceholder":842},[139,169618,169619,169621],{"class":141,"line":313},[139,169620,978],{"class":149},[139,169622,169623],{"class":145}," inner\n",[139,169625,169626],{"class":141,"line":462},[139,169627,843],{"emptyLinePlaceholder":842},[139,169629,169630],{"class":141,"line":474},[139,169631,843],{"emptyLinePlaceholder":842},[139,169633,169634,169637,169639,169642,169644],{"class":141,"line":484},[139,169635,169636],{"class":145},"add_10 ",[139,169638,150],{"class":149},[139,169640,169641],{"class":145}," outer(",[139,169643,536],{"class":153},[139,169645,164],{"class":145},[139,169647,169648,169650,169653,169655],{"class":141,"line":989},[139,169649,213],{"class":153},[139,169651,169652],{"class":145},"(add_10(",[139,169654,1481],{"class":153},[139,169656,207],{"class":145},[19,169658,169659],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169661,169663],{"id":169662},"_712-装饰器入门","7.12 装饰器入门",[19,169665,169666],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[130,169668,169670],{"className":132,"code":169669,"language":134,"meta":135,"style":135},"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",[50,169671,169672,169681,169690,169701,169706,169717,169721,169728,169732,169736,169741,169749,169759,169763,169767],{"__ignoreMap":135},[139,169673,169674,169676,169678],{"class":141,"line":142},[139,169675,778],{"class":149},[139,169677,89419],{"class":781},[139,169679,169680],{"class":145},"(func):\n",[139,169682,169683,169685,169688],{"class":141,"line":210},[139,169684,33053],{"class":149},[139,169686,169687],{"class":781}," wrapper",[139,169689,34200],{"class":145},[139,169691,169692,169694,169696,169699],{"class":141,"line":254},[139,169693,34698],{"class":153},[139,169695,157],{"class":145},[139,169697,169698],{"class":160},"\"函数开始执行\"",[139,169700,164],{"class":145},[139,169702,169703],{"class":141,"line":262},[139,169704,169705],{"class":145},"        func()\n",[139,169707,169708,169710,169712,169715],{"class":141,"line":313},[139,169709,34698],{"class":153},[139,169711,157],{"class":145},[139,169713,169714],{"class":160},"\"函数执行结束\"",[139,169716,164],{"class":145},[139,169718,169719],{"class":141,"line":462},[139,169720,843],{"emptyLinePlaceholder":842},[139,169722,169723,169725],{"class":141,"line":474},[139,169724,978],{"class":149},[139,169726,169727],{"class":145}," wrapper\n",[139,169729,169730],{"class":141,"line":484},[139,169731,843],{"emptyLinePlaceholder":842},[139,169733,169734],{"class":141,"line":989},[139,169735,843],{"emptyLinePlaceholder":842},[139,169737,169738],{"class":141,"line":994},[139,169739,169740],{"class":781},"@log\n",[139,169742,169743,169745,169747],{"class":141,"line":999},[139,169744,778],{"class":149},[139,169746,163169],{"class":781},[139,169748,34200],{"class":145},[139,169750,169751,169753,169755,169757],{"class":141,"line":1006},[139,169752,302],{"class":153},[139,169754,157],{"class":145},[139,169756,8118],{"class":160},[139,169758,164],{"class":145},[139,169760,169761],{"class":141,"line":1027},[139,169762,843],{"emptyLinePlaceholder":842},[139,169764,169765],{"class":141,"line":1040},[139,169766,843],{"emptyLinePlaceholder":842},[139,169768,169769],{"class":141,"line":2160},[139,169770,163204],{"class":145},[19,169772,160449],{},[130,169774,169776],{"className":132,"code":169775,"language":134,"meta":135,"style":135},"say_hello = log(say_hello)\n",[50,169777,169778],{"__ignoreMap":135},[139,169779,169780,169783,169785],{"class":141,"line":142},[139,169781,169782],{"class":145},"say_hello ",[139,169784,150],{"class":149},[139,169786,169787],{"class":145}," log(say_hello)\n",[19,169789,169790],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169792,169794],{"id":169793},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[130,169796,169798],{"className":132,"code":169797,"language":134,"meta":135,"style":135},"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",[50,169799,169800,169808,169825,169835,169854,169864,169871,169875,169881,169885,169889,169893,169901,169911,169915,169919],{"__ignoreMap":135},[139,169801,169802,169804,169806],{"class":141,"line":142},[139,169803,778],{"class":149},[139,169805,89419],{"class":781},[139,169807,169680],{"class":145},[139,169809,169810,169812,169814,169816,169818,169821,169823],{"class":141,"line":210},[139,169811,33053],{"class":149},[139,169813,169687],{"class":781},[139,169815,157],{"class":145},[139,169817,2892],{"class":149},[139,169819,169820],{"class":145},"args, ",[139,169822,12935],{"class":149},[139,169824,168831],{"class":145},[139,169826,169827,169829,169831,169833],{"class":141,"line":254},[139,169828,34698],{"class":153},[139,169830,157],{"class":145},[139,169832,169698],{"class":160},[139,169834,164],{"class":145},[139,169836,169837,169840,169842,169845,169847,169849,169851],{"class":141,"line":262},[139,169838,169839],{"class":145},"        result ",[139,169841,150],{"class":149},[139,169843,169844],{"class":145}," func(",[139,169846,2892],{"class":149},[139,169848,169820],{"class":145},[139,169850,12935],{"class":149},[139,169852,169853],{"class":145},"kwargs)\n",[139,169855,169856,169858,169860,169862],{"class":141,"line":313},[139,169857,34698],{"class":153},[139,169859,157],{"class":145},[139,169861,169714],{"class":160},[139,169863,164],{"class":145},[139,169865,169866,169868],{"class":141,"line":462},[139,169867,2085],{"class":149},[139,169869,169870],{"class":145}," result\n",[139,169872,169873],{"class":141,"line":474},[139,169874,843],{"emptyLinePlaceholder":842},[139,169876,169877,169879],{"class":141,"line":484},[139,169878,978],{"class":149},[139,169880,169727],{"class":145},[139,169882,169883],{"class":141,"line":989},[139,169884,843],{"emptyLinePlaceholder":842},[139,169886,169887],{"class":141,"line":994},[139,169888,843],{"emptyLinePlaceholder":842},[139,169890,169891],{"class":141,"line":999},[139,169892,169740],{"class":781},[139,169894,169895,169897,169899],{"class":141,"line":1006},[139,169896,778],{"class":149},[139,169898,1134],{"class":781},[139,169900,1137],{"class":145},[139,169902,169903,169905,169907,169909],{"class":141,"line":1027},[139,169904,978],{"class":149},[139,169906,1144],{"class":145},[139,169908,1147],{"class":149},[139,169910,1150],{"class":145},[139,169912,169913],{"class":141,"line":1040},[139,169914,843],{"emptyLinePlaceholder":842},[139,169916,169917],{"class":141,"line":2160},[139,169918,843],{"emptyLinePlaceholder":842},[139,169920,169921,169923,169925,169927,169929,169931],{"class":141,"line":2188},[139,169922,213],{"class":153},[139,169924,1747],{"class":145},[139,169926,536],{"class":153},[139,169928,413],{"class":145},[139,169930,3135],{"class":153},[139,169932,207],{"class":145},[19,169934,169935,169936,103245,169938,169940],{},"这个写法使用 ",[50,169937,168698],{},[50,169939,168812],{}," 接收原函数的所有参数。",[14,169942,169944],{"id":169943},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169946,125510],{},[1760,169948,169949,169952,169955],{},[1763,169950,169951],{},"给定一组学生数据。",[1763,169953,169954],{},"封装函数，根据传入规则筛选学生。",[1763,169956,169957],{},"筛选及格、优秀、未成年学生。",[19,169959,12309],{},[130,169961,169963],{"className":132,"code":169962,"language":134,"meta":135,"style":135},"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",[50,169964,169965,169973,170001,170029,170057,170061,170065,170069,170079,170087,170097,170104,170109,170115,170119,170123,170147,170170,170193,170197,170204,170211],{"__ignoreMap":135},[139,169966,169967,169969,169971],{"class":141,"line":142},[139,169968,2244],{"class":145},[139,169970,150],{"class":149},[139,169972,57681],{"class":145},[139,169974,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995,169997,169999],{"class":141,"line":210},[139,169976,150586],{"class":145},[139,169978,2262],{"class":160},[139,169980,2265],{"class":145},[139,169982,1441],{"class":160},[139,169984,413],{"class":145},[139,169986,71354],{"class":160},[139,169988,2265],{"class":145},[139,169990,3085],{"class":153},[139,169992,413],{"class":145},[139,169994,2272],{"class":160},[139,169996,2265],{"class":145},[139,169998,2277],{"class":153},[139,170000,7208],{"class":145},[139,170002,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027],{"class":141,"line":254},[139,170004,150586],{"class":145},[139,170006,2262],{"class":160},[139,170008,2265],{"class":145},[139,170010,1446],{"class":160},[139,170012,413],{"class":145},[139,170014,71354],{"class":160},[139,170016,2265],{"class":145},[139,170018,3060],{"class":153},[139,170020,413],{"class":145},[139,170022,2272],{"class":160},[139,170024,2265],{"class":145},[139,170026,3246],{"class":153},[139,170028,7208],{"class":145},[139,170030,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055],{"class":141,"line":262},[139,170032,150586],{"class":145},[139,170034,2262],{"class":160},[139,170036,2265],{"class":145},[139,170038,1451],{"class":160},[139,170040,413],{"class":145},[139,170042,71354],{"class":160},[139,170044,2265],{"class":145},[139,170046,3110],{"class":153},[139,170048,413],{"class":145},[139,170050,2272],{"class":160},[139,170052,2265],{"class":145},[139,170054,3317],{"class":153},[139,170056,7208],{"class":145},[139,170058,170059],{"class":141,"line":313},[139,170060,424],{"class":145},[139,170062,170063],{"class":141,"line":462},[139,170064,843],{"emptyLinePlaceholder":842},[139,170066,170067],{"class":141,"line":474},[139,170068,843],{"emptyLinePlaceholder":842},[139,170070,170071,170073,170076],{"class":141,"line":484},[139,170072,778],{"class":149},[139,170074,170075],{"class":781}," filter_students",[139,170077,170078],{"class":145},"(students, condition):\n",[139,170080,170081,170083,170085],{"class":141,"line":989},[139,170082,163396],{"class":145},[139,170084,150],{"class":149},[139,170086,2088],{"class":145},[139,170088,170089,170091,170093,170095],{"class":141,"line":994},[139,170090,5482],{"class":149},[139,170092,154325],{"class":145},[139,170094,1976],{"class":149},[139,170096,154330],{"class":145},[139,170098,170099,170101],{"class":141,"line":999},[139,170100,4780],{"class":149},[139,170102,170103],{"class":145}," condition(student):\n",[139,170105,170106],{"class":141,"line":1006},[139,170107,170108],{"class":145},"            result.append(student)\n",[139,170110,170111,170113],{"class":141,"line":1027},[139,170112,978],{"class":149},[139,170114,169870],{"class":145},[139,170116,170117],{"class":141,"line":1040},[139,170118,843],{"emptyLinePlaceholder":842},[139,170120,170121],{"class":141,"line":2160},[139,170122,843],{"emptyLinePlaceholder":842},[139,170124,170125,170127,170129,170132,170134,170137,170139,170141,170143,170145],{"class":141,"line":2188},[139,170126,167867],{"class":145},[139,170128,150],{"class":149},[139,170130,170131],{"class":145}," filter_students(students, ",[139,170133,169051],{"class":149},[139,170135,170136],{"class":145}," s: s[",[139,170138,2272],{"class":160},[139,170140,6721],{"class":145},[139,170142,3998],{"class":149},[139,170144,160012],{"class":153},[139,170146,164],{"class":145},[139,170148,170149,170152,170154,170156,170158,170160,170162,170164,170166,170168],{"class":141,"line":3944},[139,170150,170151],{"class":145},"excellent ",[139,170153,150],{"class":149},[139,170155,170131],{"class":145},[139,170157,169051],{"class":149},[139,170159,170136],{"class":145},[139,170161,2272],{"class":160},[139,170163,6721],{"class":145},[139,170165,3998],{"class":149},[139,170167,159963],{"class":153},[139,170169,164],{"class":145},[139,170171,170172,170175,170177,170179,170181,170183,170185,170187,170189,170191],{"class":141,"line":3963},[139,170173,170174],{"class":145},"under_age ",[139,170176,150],{"class":149},[139,170178,170131],{"class":145},[139,170180,169051],{"class":149},[139,170182,170136],{"class":145},[139,170184,71354],{"class":160},[139,170186,6721],{"class":145},[139,170188,796],{"class":149},[139,170190,158462],{"class":153},[139,170192,164],{"class":145},[139,170194,170195],{"class":141,"line":3968},[139,170196,843],{"emptyLinePlaceholder":842},[139,170198,170199,170201],{"class":141,"line":3982},[139,170200,213],{"class":153},[139,170202,170203],{"class":145},"(passed)\n",[139,170205,170206,170208],{"class":141,"line":3987},[139,170207,213],{"class":153},[139,170209,170210],{"class":145},"(excellent)\n",[139,170212,170213,170215],{"class":141,"line":4014},[139,170214,213],{"class":153},[139,170216,170217],{"class":145},"(under_age)\n",[14,170219,170221],{"id":170220},"_715-易错点","7.15 易错点",[1760,170223,170224,170227,170235,170240,170251],{},[1763,170225,170226],{},"默认参数不要写可变对象。",[1763,170228,170229,170231,170232,170234],{},[50,170230,168698],{}," 是元组，",[50,170233,168812],{}," 是字典。",[1763,170236,170237,170239],{},[50,170238,169051],{}," 只适合简单表达式。",[1763,170241,170242,103245,170244,170246,170247,170250],{},[50,170243,76273],{},[50,170245,82279],{}," 的结果是迭代器，常用 ",[50,170248,170249],{},"list()"," 转换查看。",[1763,170252,170253],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170255,170257],{"id":170256},"_716-本章练习","7.16 本章练习",[1760,170259,170260,170267,170273,170278,170283],{},[1763,170261,170262,170263,170266],{},"写函数 ",[50,170264,170265],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1763,170268,170262,170269,170272],{},[50,170270,170271],{},"print_user(**kwargs)","，输出用户所有字段。",[1763,170274,106589,170275,170277],{},[50,170276,169051],{}," 对学生列表按年龄排序。",[1763,170279,106589,170280,170282],{},[50,170281,82279],{}," 找出成绩不及格的学生。",[1763,170284,170285],{},"写一个装饰器，统计函数执行前后的提示信息。",[2348,170287,170288],{},"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":135,"searchDepth":210,"depth":210,"links":170290},[170291,170292,170293,170294,170295,170296,170300,170301,170302,170303,170308,170309,170310,170311,170312,170313],{"id":168150,"depth":210,"text":168151},{"id":168264,"depth":210,"text":168265},{"id":168353,"depth":210,"text":168354},{"id":168415,"depth":210,"text":168416},{"id":168561,"depth":210,"text":168562},{"id":168688,"depth":210,"text":168689,"children":170297},[170298,170299],{"id":168692,"depth":254,"text":168693},{"id":168806,"depth":254,"text":168807},{"id":168887,"depth":210,"text":168888},{"id":169045,"depth":210,"text":169046},{"id":169213,"depth":210,"text":169214},{"id":169295,"depth":210,"text":169296,"children":170304},[170305,170306,170307],{"id":169299,"depth":254,"text":169300},{"id":169370,"depth":254,"text":169371},{"id":169447,"depth":254,"text":169448},{"id":169572,"depth":210,"text":169573},{"id":169662,"depth":210,"text":169663},{"id":169793,"depth":210,"text":169794},{"id":169943,"depth":210,"text":169944},{"id":170220,"depth":210,"text":170221},{"id":170256,"depth":210,"text":170257},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168142,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170320,"title":170321,"body":170322,"description":2384,"extension":2385,"meta":172838,"navigation":842,"path":172839,"seo":172840,"stem":172841,"__hash__":172842},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170323,"toc":172813},[170324,170327,170331,170334,170337,170368,170372,170376,170379,170406,170410,170413,170464,170467,170482,170485,170520,170524,170526,170550,170553,170613,170617,170621,170624,170681,170684,170704,170708,170711,170774,170778,170781,170837,170844,170868,170872,170875,170938,170942,170947,170998,171001,171005,171010,171077,171080,171162,171166,171171,171222,171225,171229,171232,171235,171243,171246,171292,171295,171341,171345,171351,171394,171397,171443,171446,171485,171488,171549,171553,171556,171646,171649,171791,171794,171861,171865,171868,171871,172012,172015,172093,172096,172272,172276,172278,172289,172291,172490,172494,172737,172741,172775,172779,172810],[10,170325,170321],{"id":170326},"_8-文件操作",[14,170328,170330],{"id":170329},"_81-文件操作的意义","8.1 文件操作的意义",[19,170332,170333],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170335,170336],{},"常见文件类型：",[1760,170338,170339,170345,170351,170357,170363],{},[1763,170340,170341,170344],{},[50,170342,170343],{},".txt","：普通文本。",[1763,170346,170347,170350],{},[50,170348,170349],{},".csv","：表格文本。",[1763,170352,170353,170356],{},[50,170354,170355],{},".json","：结构化数据。",[1763,170358,170359,170362],{},[50,170360,170361],{},".log","：日志文件。",[1763,170364,170365,170367],{},[50,170366,1114],{},"：Python 源代码。",[14,170369,170371],{"id":170370},"_82-路径","8.2 路径",[1217,170373,170375],{"id":170374},"_821-相对路径","8.2.1 相对路径",[19,170377,170378],{},"相对当前运行目录：",[130,170380,170382],{"className":132,"code":170381,"language":134,"meta":135,"style":135},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[50,170383,170384],{"__ignoreMap":135},[139,170385,170386,170388,170390,170392,170394,170396,170398,170400,170402,170404],{"class":141,"line":142},[139,170387,89143],{"class":153},[139,170389,157],{"class":145},[139,170391,149004],{"class":160},[139,170393,413],{"class":145},[139,170395,2106],{"class":160},[139,170397,413],{"class":145},[139,170399,2112],{"class":2111},[139,170401,150],{"class":149},[139,170403,2117],{"class":160},[139,170405,164],{"class":145},[1217,170407,170409],{"id":170408},"_822-绝对路径","8.2.2 绝对路径",[19,170411,170412],{},"从根目录或盘符开始：",[130,170414,170416],{"className":132,"code":170415,"language":134,"meta":135,"style":135},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[50,170417,170418,170441],{"__ignoreMap":135},[139,170419,170420,170422,170424,170427,170429,170431,170433,170435,170437,170439],{"class":141,"line":142},[139,170421,89143],{"class":153},[139,170423,157],{"class":145},[139,170425,170426],{"class":160},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[139,170428,413],{"class":145},[139,170430,2106],{"class":160},[139,170432,413],{"class":145},[139,170434,2112],{"class":2111},[139,170436,150],{"class":149},[139,170438,2117],{"class":160},[139,170440,164],{"class":145},[139,170442,170443,170445,170447,170450,170452,170454,170456,170458,170460,170462],{"class":141,"line":210},[139,170444,89143],{"class":153},[139,170446,157],{"class":145},[139,170448,170449],{"class":160},"\"D:\u002Fdata\u002Fdata.txt\"",[139,170451,413],{"class":145},[139,170453,2106],{"class":160},[139,170455,413],{"class":145},[139,170457,2112],{"class":2111},[139,170459,150],{"class":149},[139,170461,2117],{"class":160},[139,170463,164],{"class":145},[19,170465,170466],{},"Windows 路径建议写成：",[130,170468,170470],{"className":132,"code":170469,"language":134,"meta":135,"style":135},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[50,170471,170472],{"__ignoreMap":135},[139,170473,170474,170477,170479],{"class":141,"line":142},[139,170475,170476],{"class":145},"path ",[139,170478,150],{"class":149},[139,170480,170481],{"class":160}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170483,170484],{},"或原始字符串：",[130,170486,170488],{"className":132,"code":170487,"language":134,"meta":135,"style":135},"path = r\"D:\\data\\data.txt\"\n",[50,170489,170490],{"__ignoreMap":135},[139,170491,170492,170494,170496,170498,170500,170503,170506,170509,170511,170513,170515,170518],{"class":141,"line":142},[139,170493,170476],{"class":145},[139,170495,150],{"class":149},[139,170497,19388],{"class":149},[139,170499,634],{"class":160},[139,170501,170502],{"class":50215},"D:",[139,170504,170505],{"class":153},"\\d",[139,170507,170508],{"class":50215},"ata",[139,170510,170505],{"class":153},[139,170512,170508],{"class":50215},[139,170514,2993],{"class":153},[139,170516,170517],{"class":50215},"txt",[139,170519,27396],{"class":160},[14,170521,170523],{"id":170522},"_83-open函数","8.3 open函数",[19,170525,7459],{},[130,170527,170529],{"className":132,"code":170528,"language":134,"meta":135,"style":135},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[50,170530,170531],{"__ignoreMap":135},[139,170532,170533,170535,170537,170539,170542,170544,170546,170548],{"class":141,"line":142},[139,170534,2137],{"class":2111},[139,170536,15836],{"class":149},[139,170538,2100],{"class":153},[139,170540,170541],{"class":145},"(文件路径, 打开模式, ",[139,170543,2112],{"class":2111},[139,170545,150],{"class":149},[139,170547,2117],{"class":160},[139,170549,164],{"class":145},[19,170551,170552],{},"常见模式：",[26,170554,170555,170564],{},[29,170556,170557],{},[32,170558,170559,170562],{},[35,170560,170561],{},"模式",[35,170563,40],{},[42,170565,170566,170575,170584,170593,170603],{},[32,170567,170568,170572],{},[47,170569,170570],{},[50,170571,3105],{},[47,170573,170574],{},"只读，文件不存在会报错",[32,170576,170577,170581],{},[47,170578,170579],{},[50,170580,3230],{},[47,170582,170583],{},"只写，文件不存在会创建，存在会清空",[32,170585,170586,170590],{},[47,170587,170588],{},[50,170589,2680],{},[47,170591,170592],{},"追加，文件不存在会创建",[32,170594,170595,170600],{},[47,170596,170597],{},[50,170598,170599],{},"rb",[47,170601,170602],{},"二进制只读",[32,170604,170605,170610],{},[47,170606,170607],{},[50,170608,170609],{},"wb",[47,170611,170612],{},"二进制只写",[14,170614,170616],{"id":170615},"_84-读取文件","8.4 读取文件",[1217,170618,170620],{"id":170619},"_841-read","8.4.1 read",[19,170622,170623],{},"一次读取全部内容：",[130,170625,170627],{"className":132,"code":170626,"language":134,"meta":135,"style":135},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[50,170628,170629,170655,170667,170674],{"__ignoreMap":135},[139,170630,170631,170633,170635,170637,170639,170641,170643,170645,170647,170649,170651,170653],{"class":141,"line":142},[139,170632,2137],{"class":2111},[139,170634,15836],{"class":149},[139,170636,2100],{"class":153},[139,170638,157],{"class":145},[139,170640,149004],{"class":160},[139,170642,413],{"class":145},[139,170644,2106],{"class":160},[139,170646,413],{"class":145},[139,170648,2112],{"class":2111},[139,170650,150],{"class":149},[139,170652,2117],{"class":160},[139,170654,164],{"class":145},[139,170656,170657,170660,170662,170664],{"class":141,"line":210},[139,170658,170659],{"class":145},"content ",[139,170661,150],{"class":149},[139,170663,2125],{"class":2111},[139,170665,170666],{"class":145},".read()\n",[139,170668,170669,170671],{"class":141,"line":254},[139,170670,213],{"class":153},[139,170672,170673],{"class":145},"(content)\n",[139,170675,170676,170678],{"class":141,"line":262},[139,170677,2137],{"class":2111},[139,170679,170680],{"class":145},".close()\n",[19,170682,170683],{},"可以指定读取字符数：",[130,170685,170687],{"className":132,"code":170686,"language":134,"meta":135,"style":135},"content = file.read(10)\n",[50,170688,170689],{"__ignoreMap":135},[139,170690,170691,170693,170695,170697,170700,170702],{"class":141,"line":142},[139,170692,170659],{"class":145},[139,170694,150],{"class":149},[139,170696,2125],{"class":2111},[139,170698,170699],{"class":145},".read(",[139,170701,536],{"class":153},[139,170703,164],{"class":145},[1217,170705,170707],{"id":170706},"_842-readline","8.4.2 readline",[19,170709,170710],{},"一次读取一行：",[130,170712,170714],{"className":132,"code":170713,"language":134,"meta":135,"style":135},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[50,170715,170716,170742,170746,170757,170764,170768],{"__ignoreMap":135},[139,170717,170718,170720,170722,170724,170726,170728,170730,170732,170734,170736,170738,170740],{"class":141,"line":142},[139,170719,2137],{"class":2111},[139,170721,15836],{"class":149},[139,170723,2100],{"class":153},[139,170725,157],{"class":145},[139,170727,149004],{"class":160},[139,170729,413],{"class":145},[139,170731,2106],{"class":160},[139,170733,413],{"class":145},[139,170735,2112],{"class":2111},[139,170737,150],{"class":149},[139,170739,2117],{"class":160},[139,170741,164],{"class":145},[139,170743,170744],{"class":141,"line":210},[139,170745,843],{"emptyLinePlaceholder":842},[139,170747,170748,170750,170752,170754],{"class":141,"line":254},[139,170749,149455],{"class":145},[139,170751,150],{"class":149},[139,170753,2125],{"class":2111},[139,170755,170756],{"class":145},".readline()\n",[139,170758,170759,170761],{"class":141,"line":262},[139,170760,213],{"class":153},[139,170762,170763],{"class":145},"(line)\n",[139,170765,170766],{"class":141,"line":313},[139,170767,843],{"emptyLinePlaceholder":842},[139,170769,170770,170772],{"class":141,"line":462},[139,170771,2137],{"class":2111},[139,170773,170680],{"class":145},[1217,170775,170777],{"id":170776},"_843-readlines","8.4.3 readlines",[19,170779,170780],{},"读取所有行，返回列表：",[130,170782,170784],{"className":132,"code":170783,"language":134,"meta":135,"style":135},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[50,170785,170786,170812,170824,170831],{"__ignoreMap":135},[139,170787,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808,170810],{"class":141,"line":142},[139,170789,2137],{"class":2111},[139,170791,15836],{"class":149},[139,170793,2100],{"class":153},[139,170795,157],{"class":145},[139,170797,149004],{"class":160},[139,170799,413],{"class":145},[139,170801,2106],{"class":160},[139,170803,413],{"class":145},[139,170805,2112],{"class":2111},[139,170807,150],{"class":149},[139,170809,2117],{"class":160},[139,170811,164],{"class":145},[139,170813,170814,170817,170819,170821],{"class":141,"line":210},[139,170815,170816],{"class":145},"lines ",[139,170818,150],{"class":149},[139,170820,2125],{"class":2111},[139,170822,170823],{"class":145},".readlines()\n",[139,170825,170826,170828],{"class":141,"line":254},[139,170827,213],{"class":153},[139,170829,170830],{"class":145},"(lines)\n",[139,170832,170833,170835],{"class":141,"line":262},[139,170834,2137],{"class":2111},[139,170836,170680],{"class":145},[19,170838,170839,170840,170843],{},"每一行通常带有换行符，可以用 ",[50,170841,170842],{},"strip()"," 去掉：",[130,170845,170847],{"className":132,"code":170846,"language":134,"meta":135,"style":135},"for line in lines:\n    print(line.strip())\n",[50,170848,170849,170861],{"__ignoreMap":135},[139,170850,170851,170853,170856,170858],{"class":141,"line":142},[139,170852,1970],{"class":149},[139,170854,170855],{"class":145}," line ",[139,170857,1976],{"class":149},[139,170859,170860],{"class":145}," lines:\n",[139,170862,170863,170865],{"class":141,"line":210},[139,170864,302],{"class":153},[139,170866,170867],{"class":145},"(line.strip())\n",[1217,170869,170871],{"id":170870},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170873,170874],{},"推荐读取大文件时使用：",[130,170876,170878],{"className":132,"code":170877,"language":134,"meta":135,"style":135},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[50,170879,170880,170906,170910,170922,170928,170932],{"__ignoreMap":135},[139,170881,170882,170884,170886,170888,170890,170892,170894,170896,170898,170900,170902,170904],{"class":141,"line":142},[139,170883,2137],{"class":2111},[139,170885,15836],{"class":149},[139,170887,2100],{"class":153},[139,170889,157],{"class":145},[139,170891,149004],{"class":160},[139,170893,413],{"class":145},[139,170895,2106],{"class":160},[139,170897,413],{"class":145},[139,170899,2112],{"class":2111},[139,170901,150],{"class":149},[139,170903,2117],{"class":160},[139,170905,164],{"class":145},[139,170907,170908],{"class":141,"line":210},[139,170909,843],{"emptyLinePlaceholder":842},[139,170911,170912,170914,170916,170918,170920],{"class":141,"line":254},[139,170913,1970],{"class":149},[139,170915,170855],{"class":145},[139,170917,1976],{"class":149},[139,170919,2125],{"class":2111},[139,170921,246],{"class":145},[139,170923,170924,170926],{"class":141,"line":262},[139,170925,302],{"class":153},[139,170927,170867],{"class":145},[139,170929,170930],{"class":141,"line":313},[139,170931,843],{"emptyLinePlaceholder":842},[139,170933,170934,170936],{"class":141,"line":462},[139,170935,2137],{"class":2111},[139,170937,170680],{"class":145},[14,170939,170941],{"id":170940},"_85-with语句","8.5 with语句",[19,170943,170944,170946],{},[50,170945,110056],{}," 会自动关闭文件，推荐使用。",[130,170948,170950],{"className":132,"code":170949,"language":134,"meta":135,"style":135},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[50,170951,170952,170982,170992],{"__ignoreMap":135},[139,170953,170954,170956,170958,170960,170962,170964,170966,170968,170970,170972,170974,170976,170978,170980],{"class":141,"line":142},[139,170955,110056],{"class":149},[139,170957,2100],{"class":153},[139,170959,157],{"class":145},[139,170961,149004],{"class":160},[139,170963,413],{"class":145},[139,170965,2106],{"class":160},[139,170967,413],{"class":145},[139,170969,2112],{"class":2111},[139,170971,150],{"class":149},[139,170973,2117],{"class":160},[139,170975,2120],{"class":145},[139,170977,1035],{"class":149},[139,170979,2125],{"class":2111},[139,170981,246],{"class":145},[139,170983,170984,170986,170988,170990],{"class":141,"line":210},[139,170985,149028],{"class":145},[139,170987,150],{"class":149},[139,170989,2125],{"class":2111},[139,170991,170666],{"class":145},[139,170993,170994,170996],{"class":141,"line":254},[139,170995,302],{"class":153},[139,170997,170673],{"class":145},[19,170999,171000],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171002,171004],{"id":171003},"_86-写入文件","8.6 写入文件",[19,171006,171007,171009],{},[50,171008,3230],{}," 模式会清空原文件。",[130,171011,171013],{"className":132,"code":171012,"language":134,"meta":135,"style":135},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[50,171014,171015,171045,171062],{"__ignoreMap":135},[139,171016,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035,171037,171039,171041,171043],{"class":141,"line":142},[139,171018,110056],{"class":149},[139,171020,2100],{"class":153},[139,171022,157],{"class":145},[139,171024,149004],{"class":160},[139,171026,413],{"class":145},[139,171028,2169],{"class":160},[139,171030,413],{"class":145},[139,171032,2112],{"class":2111},[139,171034,150],{"class":149},[139,171036,2117],{"class":160},[139,171038,2120],{"class":145},[139,171040,1035],{"class":149},[139,171042,2125],{"class":2111},[139,171044,246],{"class":145},[139,171046,171047,171050,171053,171056,171058,171060],{"class":141,"line":210},[139,171048,171049],{"class":2111},"    file",[139,171051,171052],{"class":145},".write(",[139,171054,171055],{"class":160},"\"hello",[139,171057,158702],{"class":153},[139,171059,634],{"class":160},[139,171061,164],{"class":145},[139,171063,171064,171066,171068,171071,171073,171075],{"class":141,"line":254},[139,171065,171049],{"class":2111},[139,171067,171052],{"class":145},[139,171069,171070],{"class":160},"\"python",[139,171072,158702],{"class":153},[139,171074,634],{"class":160},[139,171076,164],{"class":145},[19,171078,171079],{},"写入多行：",[130,171081,171083],{"className":132,"code":171082,"language":134,"meta":135,"style":135},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[50,171084,171085,171120,171124,171155],{"__ignoreMap":135},[139,171086,171087,171089,171091,171093,171096,171098,171100,171102,171105,171107,171109,171111,171114,171116,171118],{"class":141,"line":142},[139,171088,170816],{"class":145},[139,171090,150],{"class":149},[139,171092,407],{"class":145},[139,171094,171095],{"class":160},"\"小明,18",[139,171097,158702],{"class":153},[139,171099,634],{"class":160},[139,171101,413],{"class":145},[139,171103,171104],{"class":160},"\"小红,17",[139,171106,158702],{"class":153},[139,171108,634],{"class":160},[139,171110,413],{"class":145},[139,171112,171113],{"class":160},"\"小刚,19",[139,171115,158702],{"class":153},[139,171117,634],{"class":160},[139,171119,424],{"class":145},[139,171121,171122],{"class":141,"line":210},[139,171123,843],{"emptyLinePlaceholder":842},[139,171125,171126,171128,171130,171132,171135,171137,171139,171141,171143,171145,171147,171149,171151,171153],{"class":141,"line":254},[139,171127,110056],{"class":149},[139,171129,2100],{"class":153},[139,171131,157],{"class":145},[139,171133,171134],{"class":160},"\"students.txt\"",[139,171136,413],{"class":145},[139,171138,2169],{"class":160},[139,171140,413],{"class":145},[139,171142,2112],{"class":2111},[139,171144,150],{"class":149},[139,171146,2117],{"class":160},[139,171148,2120],{"class":145},[139,171150,1035],{"class":149},[139,171152,2125],{"class":2111},[139,171154,246],{"class":145},[139,171156,171157,171159],{"class":141,"line":262},[139,171158,171049],{"class":2111},[139,171160,171161],{"class":145},".writelines(lines)\n",[14,171163,171165],{"id":171164},"_87-追加文件","8.7 追加文件",[19,171167,171168,171170],{},[50,171169,2680],{}," 模式不会清空原内容，而是在末尾追加。",[130,171172,171174],{"className":132,"code":171173,"language":134,"meta":135,"style":135},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[50,171175,171176,171207],{"__ignoreMap":135},[139,171177,171178,171180,171182,171184,171187,171189,171191,171193,171195,171197,171199,171201,171203,171205],{"class":141,"line":142},[139,171179,110056],{"class":149},[139,171181,2100],{"class":153},[139,171183,157],{"class":145},[139,171185,171186],{"class":160},"\"log.txt\"",[139,171188,413],{"class":145},[139,171190,167491],{"class":160},[139,171192,413],{"class":145},[139,171194,2112],{"class":2111},[139,171196,150],{"class":149},[139,171198,2117],{"class":160},[139,171200,2120],{"class":145},[139,171202,1035],{"class":149},[139,171204,2125],{"class":2111},[139,171206,246],{"class":145},[139,171208,171209,171211,171213,171216,171218,171220],{"class":141,"line":210},[139,171210,171049],{"class":2111},[139,171212,171052],{"class":145},[139,171214,171215],{"class":160},"\"程序启动",[139,171217,158702],{"class":153},[139,171219,634],{"class":160},[139,171221,164],{"class":145},[19,171223,171224],{},"日志类文件常用追加模式。",[14,171226,171228],{"id":171227},"_88-文件编码","8.8 文件编码",[19,171230,171231],{},"编码决定文字如何保存为字节。",[19,171233,171234],{},"常见编码：",[1760,171236,171237,171240],{},[1763,171238,171239],{},"UTF-8：推荐。",[1763,171241,171242],{},"GBK：部分 Windows 中文文件常见。",[19,171244,171245],{},"读取文件乱码时，可以尝试：",[130,171247,171249],{"className":132,"code":171248,"language":134,"meta":135,"style":135},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[50,171250,171251,171282],{"__ignoreMap":135},[139,171252,171253,171255,171257,171259,171261,171263,171265,171267,171269,171271,171274,171276,171278,171280],{"class":141,"line":142},[139,171254,110056],{"class":149},[139,171256,2100],{"class":153},[139,171258,157],{"class":145},[139,171260,149004],{"class":160},[139,171262,413],{"class":145},[139,171264,2106],{"class":160},[139,171266,413],{"class":145},[139,171268,2112],{"class":2111},[139,171270,150],{"class":149},[139,171272,171273],{"class":160},"\"gbk\"",[139,171275,2120],{"class":145},[139,171277,1035],{"class":149},[139,171279,2125],{"class":2111},[139,171281,246],{"class":145},[139,171283,171284,171286,171288,171290],{"class":141,"line":210},[139,171285,149028],{"class":145},[139,171287,150],{"class":149},[139,171289,2125],{"class":2111},[139,171291,170666],{"class":145},[19,171293,171294],{},"写文件时建议统一 UTF-8：",[130,171296,171298],{"className":132,"code":171297,"language":134,"meta":135,"style":135},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[50,171299,171300,171330],{"__ignoreMap":135},[139,171301,171302,171304,171306,171308,171310,171312,171314,171316,171318,171320,171322,171324,171326,171328],{"class":141,"line":142},[139,171303,110056],{"class":149},[139,171305,2100],{"class":153},[139,171307,157],{"class":145},[139,171309,149004],{"class":160},[139,171311,413],{"class":145},[139,171313,2169],{"class":160},[139,171315,413],{"class":145},[139,171317,2112],{"class":2111},[139,171319,150],{"class":149},[139,171321,2117],{"class":160},[139,171323,2120],{"class":145},[139,171325,1035],{"class":149},[139,171327,2125],{"class":2111},[139,171329,246],{"class":145},[139,171331,171332,171334,171336,171339],{"class":141,"line":210},[139,171333,171049],{"class":2111},[139,171335,171052],{"class":145},[139,171337,171338],{"class":160},"\"中文内容\"",[139,171340,164],{"class":145},[14,171342,171344],{"id":171343},"_89-pathlib","8.9 pathlib",[19,171346,171347,171350],{},[50,171348,171349],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[130,171352,171354],{"className":132,"code":171353,"language":134,"meta":135,"style":135},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[50,171355,171356,171366,171370,171388],{"__ignoreMap":135},[139,171357,171358,171360,171362,171364],{"class":141,"line":142},[139,171359,1265],{"class":149},[139,171361,2037],{"class":145},[139,171363,1064],{"class":149},[139,171365,2042],{"class":145},[139,171367,171368],{"class":141,"line":210},[139,171369,843],{"emptyLinePlaceholder":842},[139,171371,171372,171374,171376,171378,171381,171383,171385],{"class":141,"line":254},[139,171373,170476],{"class":145},[139,171375,150],{"class":149},[139,171377,110766],{"class":145},[139,171379,171380],{"class":160},"\"data\"",[139,171382,2120],{"class":145},[139,171384,3019],{"class":149},[139,171386,171387],{"class":160}," \"students.txt\"\n",[139,171389,171390,171392],{"class":141,"line":262},[139,171391,213],{"class":153},[139,171393,1986],{"class":145},[19,171395,171396],{},"创建目录：",[130,171398,171400],{"className":132,"code":171399,"language":134,"meta":135,"style":135},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[50,171401,171402,171412,171416,171429],{"__ignoreMap":135},[139,171403,171404,171406,171408,171410],{"class":141,"line":142},[139,171405,1265],{"class":149},[139,171407,2037],{"class":145},[139,171409,1064],{"class":149},[139,171411,2042],{"class":145},[139,171413,171414],{"class":141,"line":210},[139,171415,843],{"emptyLinePlaceholder":842},[139,171417,171418,171421,171423,171425,171427],{"class":141,"line":254},[139,171419,171420],{"class":145},"data_dir ",[139,171422,150],{"class":149},[139,171424,110766],{"class":145},[139,171426,171380],{"class":160},[139,171428,164],{"class":145},[139,171430,171431,171434,171437,171439,171441],{"class":141,"line":262},[139,171432,171433],{"class":145},"data_dir.mkdir(",[139,171435,171436],{"class":2111},"exist_ok",[139,171438,150],{"class":149},[139,171440,33725],{"class":153},[139,171442,164],{"class":145},[19,171444,171445],{},"判断文件是否存在：",[130,171447,171449],{"className":132,"code":171448,"language":134,"meta":135,"style":135},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[50,171450,171451,171464,171468,171474],{"__ignoreMap":135},[139,171452,171453,171455,171457,171459,171462],{"class":141,"line":142},[139,171454,170476],{"class":145},[139,171456,150],{"class":149},[139,171458,110766],{"class":145},[139,171460,171461],{"class":160},"\"data\u002Fstudents.txt\"",[139,171463,164],{"class":145},[139,171465,171466],{"class":141,"line":210},[139,171467,843],{"emptyLinePlaceholder":842},[139,171469,171470,171472],{"class":141,"line":254},[139,171471,1729],{"class":149},[139,171473,2080],{"class":145},[139,171475,171476,171478,171480,171483],{"class":141,"line":262},[139,171477,302],{"class":153},[139,171479,157],{"class":145},[139,171481,171482],{"class":160},"\"文件存在\"",[139,171484,164],{"class":145},[19,171486,171487],{},"读写文本：",[130,171489,171491],{"className":132,"code":171490,"language":134,"meta":135,"style":135},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[50,171492,171493,171505,171509,171526,171543],{"__ignoreMap":135},[139,171494,171495,171497,171499,171501,171503],{"class":141,"line":142},[139,171496,170476],{"class":145},[139,171498,150],{"class":149},[139,171500,110766],{"class":145},[139,171502,149004],{"class":160},[139,171504,164],{"class":145},[139,171506,171507],{"class":141,"line":210},[139,171508,843],{"emptyLinePlaceholder":842},[139,171510,171511,171514,171516,171518,171520,171522,171524],{"class":141,"line":254},[139,171512,171513],{"class":145},"path.write_text(",[139,171515,148093],{"class":160},[139,171517,413],{"class":145},[139,171519,2112],{"class":2111},[139,171521,150],{"class":149},[139,171523,2117],{"class":160},[139,171525,164],{"class":145},[139,171527,171528,171530,171532,171535,171537,171539,171541],{"class":141,"line":262},[139,171529,170659],{"class":145},[139,171531,150],{"class":149},[139,171533,171534],{"class":145}," path.read_text(",[139,171536,2112],{"class":2111},[139,171538,150],{"class":149},[139,171540,2117],{"class":160},[139,171542,164],{"class":145},[139,171544,171545,171547],{"class":141,"line":313},[139,171546,213],{"class":153},[139,171548,170673],{"class":145},[14,171550,171552],{"id":171551},"_810-json文件","8.10 JSON文件",[19,171554,171555],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[130,171557,171559],{"className":132,"code":171558,"language":134,"meta":135,"style":135},"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",[50,171560,171561,171567,171571,171579,171589,171599,171607,171611,171615,171640],{"__ignoreMap":135},[139,171562,171563,171565],{"class":141,"line":142},[139,171564,1064],{"class":149},[139,171566,2030],{"class":145},[139,171568,171569],{"class":141,"line":210},[139,171570,843],{"emptyLinePlaceholder":842},[139,171572,171573,171575,171577],{"class":141,"line":254},[139,171574,151682],{"class":145},[139,171576,150],{"class":149},[139,171578,17840],{"class":145},[139,171580,171581,171583,171585,171587],{"class":141,"line":262},[139,171582,149225],{"class":160},[139,171584,2265],{"class":145},[139,171586,1441],{"class":160},[139,171588,33715],{"class":145},[139,171590,171591,171593,171595,171597],{"class":141,"line":313},[139,171592,166704],{"class":160},[139,171594,2265],{"class":145},[139,171596,3085],{"class":153},[139,171598,33715],{"class":145},[139,171600,171601,171603,171605],{"class":141,"line":462},[139,171602,166715],{"class":160},[139,171604,2265],{"class":145},[139,171606,166720],{"class":153},[139,171608,171609],{"class":141,"line":474},[139,171610,3862],{"class":145},[139,171612,171613],{"class":141,"line":484},[139,171614,843],{"emptyLinePlaceholder":842},[139,171616,171617,171619,171621,171624,171626,171628,171630,171632,171634,171636,171638],{"class":141,"line":989},[139,171618,158621],{"class":145},[139,171620,150],{"class":149},[139,171622,171623],{"class":145}," json.dumps(student, ",[139,171625,2198],{"class":2111},[139,171627,150],{"class":149},[139,171629,2203],{"class":153},[139,171631,413],{"class":145},[139,171633,2208],{"class":2111},[139,171635,150],{"class":149},[139,171637,416],{"class":153},[139,171639,164],{"class":145},[139,171641,171642,171644],{"class":141,"line":994},[139,171643,213],{"class":153},[139,171645,166238],{"class":145},[19,171647,171648],{},"写入 JSON 文件：",[130,171650,171652],{"className":132,"code":171651,"language":134,"meta":135,"style":135},"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",[50,171653,171654,171660,171664,171672,171700,171728,171732,171736,171766],{"__ignoreMap":135},[139,171655,171656,171658],{"class":141,"line":142},[139,171657,1064],{"class":149},[139,171659,2030],{"class":145},[139,171661,171662],{"class":141,"line":210},[139,171663,843],{"emptyLinePlaceholder":842},[139,171665,171666,171668,171670],{"class":141,"line":254},[139,171667,2244],{"class":145},[139,171669,150],{"class":149},[139,171671,57681],{"class":145},[139,171673,171674,171676,171678,171680,171682,171684,171686,171688,171690,171692,171694,171696,171698],{"class":141,"line":262},[139,171675,150586],{"class":145},[139,171677,2262],{"class":160},[139,171679,2265],{"class":145},[139,171681,1441],{"class":160},[139,171683,413],{"class":145},[139,171685,71354],{"class":160},[139,171687,2265],{"class":145},[139,171689,3085],{"class":153},[139,171691,413],{"class":145},[139,171693,2272],{"class":160},[139,171695,2265],{"class":145},[139,171697,2277],{"class":153},[139,171699,7208],{"class":145},[139,171701,171702,171704,171706,171708,171710,171712,171714,171716,171718,171720,171722,171724,171726],{"class":141,"line":313},[139,171703,150586],{"class":145},[139,171705,2262],{"class":160},[139,171707,2265],{"class":145},[139,171709,1446],{"class":160},[139,171711,413],{"class":145},[139,171713,71354],{"class":160},[139,171715,2265],{"class":145},[139,171717,3060],{"class":153},[139,171719,413],{"class":145},[139,171721,2272],{"class":160},[139,171723,2265],{"class":145},[139,171725,3246],{"class":153},[139,171727,7208],{"class":145},[139,171729,171730],{"class":141,"line":462},[139,171731,424],{"class":145},[139,171733,171734],{"class":141,"line":474},[139,171735,843],{"emptyLinePlaceholder":842},[139,171737,171738,171740,171742,171744,171746,171748,171750,171752,171754,171756,171758,171760,171762,171764],{"class":141,"line":484},[139,171739,110056],{"class":149},[139,171741,2100],{"class":153},[139,171743,157],{"class":145},[139,171745,2252],{"class":160},[139,171747,413],{"class":145},[139,171749,2169],{"class":160},[139,171751,413],{"class":145},[139,171753,2112],{"class":2111},[139,171755,150],{"class":149},[139,171757,2117],{"class":160},[139,171759,2120],{"class":145},[139,171761,1035],{"class":149},[139,171763,2125],{"class":2111},[139,171765,246],{"class":145},[139,171767,171768,171771,171773,171775,171777,171779,171781,171783,171785,171787,171789],{"class":141,"line":989},[139,171769,171770],{"class":145},"    json.dump(students, ",[139,171772,2137],{"class":2111},[139,171774,413],{"class":145},[139,171776,2198],{"class":2111},[139,171778,150],{"class":149},[139,171780,2203],{"class":153},[139,171782,413],{"class":145},[139,171784,2208],{"class":2111},[139,171786,150],{"class":149},[139,171788,416],{"class":153},[139,171790,164],{"class":145},[19,171792,171793],{},"读取 JSON 文件：",[130,171795,171797],{"className":132,"code":171796,"language":134,"meta":135,"style":135},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[50,171798,171799,171805,171809,171839,171851,171855],{"__ignoreMap":135},[139,171800,171801,171803],{"class":141,"line":142},[139,171802,1064],{"class":149},[139,171804,2030],{"class":145},[139,171806,171807],{"class":141,"line":210},[139,171808,843],{"emptyLinePlaceholder":842},[139,171810,171811,171813,171815,171817,171819,171821,171823,171825,171827,171829,171831,171833,171835,171837],{"class":141,"line":254},[139,171812,110056],{"class":149},[139,171814,2100],{"class":153},[139,171816,157],{"class":145},[139,171818,2252],{"class":160},[139,171820,413],{"class":145},[139,171822,2106],{"class":160},[139,171824,413],{"class":145},[139,171826,2112],{"class":2111},[139,171828,150],{"class":149},[139,171830,2117],{"class":160},[139,171832,2120],{"class":145},[139,171834,1035],{"class":149},[139,171836,2125],{"class":2111},[139,171838,246],{"class":145},[139,171840,171841,171843,171845,171847,171849],{"class":141,"line":262},[139,171842,155222],{"class":145},[139,171844,150],{"class":149},[139,171846,2134],{"class":145},[139,171848,2137],{"class":2111},[139,171850,164],{"class":145},[139,171852,171853],{"class":141,"line":313},[139,171854,843],{"emptyLinePlaceholder":842},[139,171856,171857,171859],{"class":141,"line":462},[139,171858,213],{"class":153},[139,171860,167162],{"class":145},[14,171862,171864],{"id":171863},"_811-csv文件","8.11 CSV文件",[19,171866,171867],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171869,171870],{},"写入 CSV：",[130,171872,171874],{"className":132,"code":171873,"language":134,"meta":135,"style":135},"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",[50,171875,171876,171883,171887,171895,171913,171929,171945,171949,171953,171993,172007],{"__ignoreMap":135},[139,171877,171878,171880],{"class":141,"line":142},[139,171879,1064],{"class":149},[139,171881,171882],{"class":145}," csv\n",[139,171884,171885],{"class":141,"line":210},[139,171886,843],{"emptyLinePlaceholder":842},[139,171888,171889,171891,171893],{"class":141,"line":254},[139,171890,2244],{"class":145},[139,171892,150],{"class":149},[139,171894,57681],{"class":145},[139,171896,171897,171900,171902,171904,171906,171908,171911],{"class":141,"line":262},[139,171898,171899],{"class":145},"    [",[139,171901,75328],{"class":160},[139,171903,413],{"class":145},[139,171905,75361],{"class":160},[139,171907,413],{"class":145},[139,171909,171910],{"class":160},"\"成绩\"",[139,171912,90064],{"class":145},[139,171914,171915,171917,171919,171921,171923,171925,171927],{"class":141,"line":313},[139,171916,171899],{"class":145},[139,171918,1441],{"class":160},[139,171920,413],{"class":145},[139,171922,3085],{"class":153},[139,171924,413],{"class":145},[139,171926,2277],{"class":153},[139,171928,90064],{"class":145},[139,171930,171931,171933,171935,171937,171939,171941,171943],{"class":141,"line":462},[139,171932,171899],{"class":145},[139,171934,1446],{"class":160},[139,171936,413],{"class":145},[139,171938,3060],{"class":153},[139,171940,413],{"class":145},[139,171942,3246],{"class":153},[139,171944,90064],{"class":145},[139,171946,171947],{"class":141,"line":474},[139,171948,424],{"class":145},[139,171950,171951],{"class":141,"line":484},[139,171952,843],{"emptyLinePlaceholder":842},[139,171954,171955,171957,171959,171961,171964,171966,171968,171970,171972,171974,171976,171978,171981,171983,171985,171987,171989,171991],{"class":141,"line":989},[139,171956,110056],{"class":149},[139,171958,2100],{"class":153},[139,171960,157],{"class":145},[139,171962,171963],{"class":160},"\"students.csv\"",[139,171965,413],{"class":145},[139,171967,2169],{"class":160},[139,171969,413],{"class":145},[139,171971,2112],{"class":2111},[139,171973,150],{"class":149},[139,171975,2117],{"class":160},[139,171977,413],{"class":145},[139,171979,171980],{"class":2111},"newline",[139,171982,150],{"class":149},[139,171984,9926],{"class":160},[139,171986,2120],{"class":145},[139,171988,1035],{"class":149},[139,171990,2125],{"class":2111},[139,171992,246],{"class":145},[139,171994,171995,171998,172000,172003,172005],{"class":141,"line":994},[139,171996,171997],{"class":145},"    writer ",[139,171999,150],{"class":149},[139,172001,172002],{"class":145}," csv.writer(",[139,172004,2137],{"class":2111},[139,172006,164],{"class":145},[139,172008,172009],{"class":141,"line":999},[139,172010,172011],{"class":145},"    writer.writerows(students)\n",[19,172013,172014],{},"读取 CSV：",[130,172016,172018],{"className":132,"code":172017,"language":134,"meta":135,"style":135},"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",[50,172019,172020,172026,172030,172060,172074,172086],{"__ignoreMap":135},[139,172021,172022,172024],{"class":141,"line":142},[139,172023,1064],{"class":149},[139,172025,171882],{"class":145},[139,172027,172028],{"class":141,"line":210},[139,172029,843],{"emptyLinePlaceholder":842},[139,172031,172032,172034,172036,172038,172040,172042,172044,172046,172048,172050,172052,172054,172056,172058],{"class":141,"line":254},[139,172033,110056],{"class":149},[139,172035,2100],{"class":153},[139,172037,157],{"class":145},[139,172039,171963],{"class":160},[139,172041,413],{"class":145},[139,172043,2106],{"class":160},[139,172045,413],{"class":145},[139,172047,2112],{"class":2111},[139,172049,150],{"class":149},[139,172051,2117],{"class":160},[139,172053,2120],{"class":145},[139,172055,1035],{"class":149},[139,172057,2125],{"class":2111},[139,172059,246],{"class":145},[139,172061,172062,172065,172067,172070,172072],{"class":141,"line":262},[139,172063,172064],{"class":145},"    reader ",[139,172066,150],{"class":149},[139,172068,172069],{"class":145}," csv.reader(",[139,172071,2137],{"class":2111},[139,172073,164],{"class":145},[139,172075,172076,172078,172081,172083],{"class":141,"line":313},[139,172077,5482],{"class":149},[139,172079,172080],{"class":145}," row ",[139,172082,1976],{"class":149},[139,172084,172085],{"class":145}," reader:\n",[139,172087,172088,172090],{"class":141,"line":462},[139,172089,34698],{"class":153},[139,172091,172092],{"class":145},"(row)\n",[19,172094,172095],{},"使用字典写入：",[130,172097,172099],{"className":132,"code":172098,"language":134,"meta":135,"style":135},"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",[50,172100,172101,172107,172111,172119,172147,172175,172179,172183,172221,172242,172263,172268],{"__ignoreMap":135},[139,172102,172103,172105],{"class":141,"line":142},[139,172104,1064],{"class":149},[139,172106,171882],{"class":145},[139,172108,172109],{"class":141,"line":210},[139,172110,843],{"emptyLinePlaceholder":842},[139,172112,172113,172115,172117],{"class":141,"line":254},[139,172114,2244],{"class":145},[139,172116,150],{"class":149},[139,172118,57681],{"class":145},[139,172120,172121,172123,172125,172127,172129,172131,172133,172135,172137,172139,172141,172143,172145],{"class":141,"line":262},[139,172122,150586],{"class":145},[139,172124,2262],{"class":160},[139,172126,2265],{"class":145},[139,172128,1441],{"class":160},[139,172130,413],{"class":145},[139,172132,71354],{"class":160},[139,172134,2265],{"class":145},[139,172136,3085],{"class":153},[139,172138,413],{"class":145},[139,172140,2272],{"class":160},[139,172142,2265],{"class":145},[139,172144,2277],{"class":153},[139,172146,7208],{"class":145},[139,172148,172149,172151,172153,172155,172157,172159,172161,172163,172165,172167,172169,172171,172173],{"class":141,"line":313},[139,172150,150586],{"class":145},[139,172152,2262],{"class":160},[139,172154,2265],{"class":145},[139,172156,1446],{"class":160},[139,172158,413],{"class":145},[139,172160,71354],{"class":160},[139,172162,2265],{"class":145},[139,172164,3060],{"class":153},[139,172166,413],{"class":145},[139,172168,2272],{"class":160},[139,172170,2265],{"class":145},[139,172172,3246],{"class":153},[139,172174,7208],{"class":145},[139,172176,172177],{"class":141,"line":462},[139,172178,424],{"class":145},[139,172180,172181],{"class":141,"line":474},[139,172182,843],{"emptyLinePlaceholder":842},[139,172184,172185,172187,172189,172191,172193,172195,172197,172199,172201,172203,172205,172207,172209,172211,172213,172215,172217,172219],{"class":141,"line":484},[139,172186,110056],{"class":149},[139,172188,2100],{"class":153},[139,172190,157],{"class":145},[139,172192,171963],{"class":160},[139,172194,413],{"class":145},[139,172196,2169],{"class":160},[139,172198,413],{"class":145},[139,172200,2112],{"class":2111},[139,172202,150],{"class":149},[139,172204,2117],{"class":160},[139,172206,413],{"class":145},[139,172208,171980],{"class":2111},[139,172210,150],{"class":149},[139,172212,9926],{"class":160},[139,172214,2120],{"class":145},[139,172216,1035],{"class":149},[139,172218,2125],{"class":2111},[139,172220,246],{"class":145},[139,172222,172223,172226,172228,172230,172232,172234,172236,172238,172240],{"class":141,"line":989},[139,172224,172225],{"class":145},"    fieldnames ",[139,172227,150],{"class":149},[139,172229,407],{"class":145},[139,172231,2262],{"class":160},[139,172233,413],{"class":145},[139,172235,71354],{"class":160},[139,172237,413],{"class":145},[139,172239,2272],{"class":160},[139,172241,424],{"class":145},[139,172243,172244,172246,172248,172251,172253,172255,172258,172260],{"class":141,"line":994},[139,172245,171997],{"class":145},[139,172247,150],{"class":149},[139,172249,172250],{"class":145}," csv.DictWriter(",[139,172252,2137],{"class":2111},[139,172254,413],{"class":145},[139,172256,172257],{"class":2111},"fieldnames",[139,172259,150],{"class":149},[139,172261,172262],{"class":145},"fieldnames)\n",[139,172264,172265],{"class":141,"line":999},[139,172266,172267],{"class":145},"    writer.writeheader()\n",[139,172269,172270],{"class":141,"line":1006},[139,172271,172011],{"class":145},[14,172273,172275],{"id":172274},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172277,125510],{},[1760,172279,172280,172283,172286],{},[1763,172281,172282],{},"读取文本文件。",[1763,172284,172285],{},"统计每个单词出现次数。",[1763,172287,172288],{},"输出出现次数最多的前 10 个单词。",[19,172290,12309],{},[130,172292,172294],{"className":132,"code":172293,"language":134,"meta":135,"style":135},"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",[50,172295,172296,172306,172310,172323,172339,172343,172353,172362,172366,172378,172398,172407,172411,172429,172433,172463,172467,172483],{"__ignoreMap":135},[139,172297,172298,172300,172302,172304],{"class":141,"line":142},[139,172299,1265],{"class":149},[139,172301,2037],{"class":145},[139,172303,1064],{"class":149},[139,172305,2042],{"class":145},[139,172307,172308],{"class":141,"line":210},[139,172309,843],{"emptyLinePlaceholder":842},[139,172311,172312,172314,172316,172318,172321],{"class":141,"line":254},[139,172313,170476],{"class":145},[139,172315,150],{"class":149},[139,172317,110766],{"class":145},[139,172319,172320],{"class":160},"\"article.txt\"",[139,172322,164],{"class":145},[139,172324,172325,172327,172329,172331,172333,172335,172337],{"class":141,"line":262},[139,172326,170659],{"class":145},[139,172328,150],{"class":149},[139,172330,171534],{"class":145},[139,172332,2112],{"class":2111},[139,172334,150],{"class":149},[139,172336,2117],{"class":160},[139,172338,164],{"class":145},[139,172340,172341],{"class":141,"line":313},[139,172342,843],{"emptyLinePlaceholder":842},[139,172344,172345,172348,172350],{"class":141,"line":462},[139,172346,172347],{"class":145},"words ",[139,172349,150],{"class":149},[139,172351,172352],{"class":145}," content.lower().split()\n",[139,172354,172355,172358,172360],{"class":141,"line":474},[139,172356,172357],{"class":145},"counter ",[139,172359,150],{"class":149},[139,172361,90096],{"class":145},[139,172363,172364],{"class":141,"line":484},[139,172365,843],{"emptyLinePlaceholder":842},[139,172367,172368,172370,172373,172375],{"class":141,"line":989},[139,172369,1970],{"class":149},[139,172371,172372],{"class":145}," word ",[139,172374,1976],{"class":149},[139,172376,172377],{"class":145}," words:\n",[139,172379,172380,172383,172385,172388,172391,172393,172396],{"class":141,"line":994},[139,172381,172382],{"class":145},"    word ",[139,172384,150],{"class":149},[139,172386,172387],{"class":145}," word.strip(",[139,172389,172390],{"class":160},"\".,!?;:",[139,172392,158672],{"class":153},[139,172394,172395],{"class":160},"'()[]\"",[139,172397,164],{"class":145},[139,172399,172400,172402,172404],{"class":141,"line":999},[139,172401,790],{"class":149},[139,172403,2077],{"class":149},[139,172405,172406],{"class":145}," word:\n",[139,172408,172409],{"class":141,"line":1006},[139,172410,150713],{"class":149},[139,172412,172413,172416,172418,172421,172423,172425,172427],{"class":141,"line":1027},[139,172414,172415],{"class":145},"    counter[word] ",[139,172417,150],{"class":149},[139,172419,172420],{"class":145}," counter.get(word, ",[139,172422,2634],{"class":153},[139,172424,2120],{"class":145},[139,172426,1147],{"class":149},[139,172428,57933],{"class":153},[139,172430,172431],{"class":141,"line":1040},[139,172432,843],{"emptyLinePlaceholder":842},[139,172434,172435,172438,172440,172442,172445,172447,172449,172451,172453,172455,172457,172459,172461],{"class":141,"line":2160},[139,172436,172437],{"class":145},"items ",[139,172439,150],{"class":149},[139,172441,165771],{"class":153},[139,172443,172444],{"class":145},"(counter.items(), ",[139,172446,156130],{"class":2111},[139,172448,156133],{"class":149},[139,172450,156136],{"class":145},[139,172452,410],{"class":153},[139,172454,1484],{"class":145},[139,172456,165695],{"class":2111},[139,172458,150],{"class":149},[139,172460,33725],{"class":153},[139,172462,164],{"class":145},[139,172464,172465],{"class":141,"line":2188},[139,172466,843],{"emptyLinePlaceholder":842},[139,172468,172469,172471,172474,172476,172479,172481],{"class":141,"line":3944},[139,172470,1970],{"class":149},[139,172472,172473],{"class":145}," word, count ",[139,172475,1976],{"class":149},[139,172477,172478],{"class":145}," items[:",[139,172480,536],{"class":153},[139,172482,167921],{"class":145},[139,172484,172485,172487],{"class":141,"line":3963},[139,172486,302],{"class":153},[139,172488,172489],{"class":145},"(word, count)\n",[14,172491,172493],{"id":172492},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[130,172495,172497],{"className":132,"code":172496,"language":134,"meta":135,"style":135},"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",[50,172498,172499,172505,172515,172519,172531,172535,172539,172547,172557,172563,172567,172597,172607,172611,172615,172623,172653,172677,172681,172685,172693,172721,172726],{"__ignoreMap":135},[139,172500,172501,172503],{"class":141,"line":142},[139,172502,1064],{"class":149},[139,172504,2030],{"class":145},[139,172506,172507,172509,172511,172513],{"class":141,"line":210},[139,172508,1265],{"class":149},[139,172510,2037],{"class":145},[139,172512,1064],{"class":149},[139,172514,2042],{"class":145},[139,172516,172517],{"class":141,"line":254},[139,172518,843],{"emptyLinePlaceholder":842},[139,172520,172521,172523,172525,172527,172529],{"class":141,"line":262},[139,172522,154015],{"class":153},[139,172524,15836],{"class":149},[139,172526,110766],{"class":145},[139,172528,2252],{"class":160},[139,172530,164],{"class":145},[139,172532,172533],{"class":141,"line":313},[139,172534,843],{"emptyLinePlaceholder":842},[139,172536,172537],{"class":141,"line":462},[139,172538,843],{"emptyLinePlaceholder":842},[139,172540,172541,172543,172545],{"class":141,"line":474},[139,172542,778],{"class":149},[139,172544,154038],{"class":781},[139,172546,34200],{"class":145},[139,172548,172549,172551,172553,172555],{"class":141,"line":484},[139,172550,790],{"class":149},[139,172552,2077],{"class":149},[139,172554,154049],{"class":153},[139,172556,154052],{"class":145},[139,172558,172559,172561],{"class":141,"line":989},[139,172560,2085],{"class":149},[139,172562,2088],{"class":145},[139,172564,172565],{"class":141,"line":994},[139,172566,843],{"emptyLinePlaceholder":842},[139,172568,172569,172571,172573,172575,172577,172579,172581,172583,172585,172587,172589,172591,172593,172595],{"class":141,"line":999},[139,172570,2097],{"class":149},[139,172572,2100],{"class":153},[139,172574,157],{"class":145},[139,172576,154015],{"class":153},[139,172578,413],{"class":145},[139,172580,2106],{"class":160},[139,172582,413],{"class":145},[139,172584,2112],{"class":2111},[139,172586,150],{"class":149},[139,172588,2117],{"class":160},[139,172590,2120],{"class":145},[139,172592,1035],{"class":149},[139,172594,2125],{"class":2111},[139,172596,246],{"class":145},[139,172598,172599,172601,172603,172605],{"class":141,"line":1006},[139,172600,2085],{"class":149},[139,172602,2134],{"class":145},[139,172604,2137],{"class":2111},[139,172606,164],{"class":145},[139,172608,172609],{"class":141,"line":1027},[139,172610,843],{"emptyLinePlaceholder":842},[139,172612,172613],{"class":141,"line":1040},[139,172614,843],{"emptyLinePlaceholder":842},[139,172616,172617,172619,172621],{"class":141,"line":2160},[139,172618,778],{"class":149},[139,172620,154148],{"class":781},[139,172622,154151],{"class":145},[139,172624,172625,172627,172629,172631,172633,172635,172637,172639,172641,172643,172645,172647,172649,172651],{"class":141,"line":2188},[139,172626,2097],{"class":149},[139,172628,2100],{"class":153},[139,172630,157],{"class":145},[139,172632,154015],{"class":153},[139,172634,413],{"class":145},[139,172636,2169],{"class":160},[139,172638,413],{"class":145},[139,172640,2112],{"class":2111},[139,172642,150],{"class":149},[139,172644,2117],{"class":160},[139,172646,2120],{"class":145},[139,172648,1035],{"class":149},[139,172650,2125],{"class":2111},[139,172652,246],{"class":145},[139,172654,172655,172657,172659,172661,172663,172665,172667,172669,172671,172673,172675],{"class":141,"line":3944},[139,172656,154186],{"class":145},[139,172658,2137],{"class":2111},[139,172660,413],{"class":145},[139,172662,2198],{"class":2111},[139,172664,150],{"class":149},[139,172666,2203],{"class":153},[139,172668,413],{"class":145},[139,172670,2208],{"class":2111},[139,172672,150],{"class":149},[139,172674,416],{"class":153},[139,172676,164],{"class":145},[139,172678,172679],{"class":141,"line":3963},[139,172680,843],{"emptyLinePlaceholder":842},[139,172682,172683],{"class":141,"line":3968},[139,172684,843],{"emptyLinePlaceholder":842},[139,172686,172687,172689,172691],{"class":141,"line":3982},[139,172688,2244],{"class":145},[139,172690,150],{"class":149},[139,172692,155227],{"class":145},[139,172694,172695,172697,172699,172701,172703,172705,172707,172709,172711,172713,172715,172717,172719],{"class":141,"line":3987},[139,172696,2259],{"class":145},[139,172698,2262],{"class":160},[139,172700,2265],{"class":145},[139,172702,1441],{"class":160},[139,172704,413],{"class":145},[139,172706,71354],{"class":160},[139,172708,2265],{"class":145},[139,172710,3085],{"class":153},[139,172712,413],{"class":145},[139,172714,2272],{"class":160},[139,172716,2265],{"class":145},[139,172718,2277],{"class":153},[139,172720,2280],{"class":145},[139,172722,172723],{"class":141,"line":4014},[139,172724,172725],{"class":145},"save_students(students)\n",[139,172727,172728,172730,172732,172735],{"class":141,"line":4019},[139,172729,213],{"class":153},[139,172731,157],{"class":145},[139,172733,172734],{"class":160},"\"保存成功\"",[139,172736,164],{"class":145},[14,172738,172740],{"id":172739},"_814-易错点","8.14 易错点",[1760,172742,172743,172747,172753,172758,172765,172772],{},[1763,172744,172745,171009],{},[50,172746,3230],{},[1763,172748,172749,172750,170],{},"读写中文要指定 ",[50,172751,172752],{},"encoding=\"utf-8\"",[1763,172754,172755,172756,170],{},"打开文件后要关闭，推荐使用 ",[50,172757,110056],{},[1763,172759,172760,172761,172764],{},"读取大文件不要直接 ",[50,172762,172763],{},"read()"," 全部内容。",[1763,172766,172767,172768,172771],{},"Windows 写 CSV 时建议加 ",[50,172769,172770],{},"newline=\"\"","，避免空行。",[1763,172773,172774],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172776,172778],{"id":172777},"_815-本章练习","8.15 本章练习",[1760,172780,172781,172788,172793,172796,172799],{},[1763,172782,172783,172784,172787],{},"写入一个 ",[50,172785,172786],{},"students.txt","，每行保存一个学生姓名。",[1763,172789,106578,172790,172792],{},[50,172791,172786],{}," 并输出所有学生。",[1763,172794,172795],{},"把学生列表保存为 JSON 文件。",[1763,172797,172798],{},"从 JSON 文件读取学生数据，计算平均分。",[1763,172800,172801,172802,172805,172806,172809],{},"写一个日志函数 ",[50,172803,172804],{},"write_log(message)","，每次调用向 ",[50,172807,172808],{},"app.log"," 追加一行。",[2348,172811,172812],{},"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":135,"searchDepth":210,"depth":210,"links":172814},[172815,172816,172820,172821,172827,172828,172829,172830,172831,172832,172833,172834,172835,172836,172837],{"id":170329,"depth":210,"text":170330},{"id":170370,"depth":210,"text":170371,"children":172817},[172818,172819],{"id":170374,"depth":254,"text":170375},{"id":170408,"depth":254,"text":170409},{"id":170522,"depth":210,"text":170523},{"id":170615,"depth":210,"text":170616,"children":172822},[172823,172824,172825,172826],{"id":170619,"depth":254,"text":170620},{"id":170706,"depth":254,"text":170707},{"id":170776,"depth":254,"text":170777},{"id":170870,"depth":254,"text":170871},{"id":170940,"depth":210,"text":170941},{"id":171003,"depth":210,"text":171004},{"id":171164,"depth":210,"text":171165},{"id":171227,"depth":210,"text":171228},{"id":171343,"depth":210,"text":171344},{"id":171551,"depth":210,"text":171552},{"id":171863,"depth":210,"text":171864},{"id":172274,"depth":210,"text":172275},{"id":172492,"depth":210,"text":172493},{"id":172739,"depth":210,"text":172740},{"id":172777,"depth":210,"text":172778},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170321,"description":2384},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":4,"title":5,"body":172844,"description":2384,"extension":2385,"meta":174770,"navigation":842,"path":2387,"seo":174771,"stem":2389,"__hash__":2390},{"type":7,"value":172845,"toc":174738},[172846,172848,172850,172852,172854,172930,172932,172950,172954,172956,172958,172960,172988,172992,172994,172996,172998,173022,173024,173074,173078,173130,173132,173222,173224,173288,173290,173344,173346,173351,173353,173357,173361,173449,173453,173455,173457,173531,173533,173569,173571,173683,173685,173687,173689,173731,173733,173735,173739,173743,173791,173793,173821,173823,173825,173853,173855,173887,173889,173921,173957,173959,173973,173975,173977,173979,174055,174057,174095,174097,174143,174145,174175,174177,174203,174209,174213,174217,174273,174275,174281,174283,174285,174289,174291,174296,174298,174312,174316,174318,174322,174334,174336,174368,174370,174380,174382,174396,174398,174412,174414,174418,174448,174450,174452,174457,174459,174461,174463,174468,174472,174636,174640,174698,174700,174718,174720,174736],[10,172847,5],{"id":12},[14,172849,17],{"id":16},[19,172851,21],{},[19,172853,24],{},[26,172855,172856,172864],{},[29,172857,172858],{},[32,172859,172860,172862],{},[35,172861,37],{},[35,172863,40],{},[42,172865,172866,172874,172882,172890,172898,172906,172914,172922],{},[32,172867,172868,172872],{},[47,172869,172870],{},[50,172871,52],{},[47,172873,55],{},[32,172875,172876,172880],{},[47,172877,172878],{},[50,172879,62],{},[47,172881,65],{},[32,172883,172884,172888],{},[47,172885,172886],{},[50,172887,72],{},[47,172889,75],{},[32,172891,172892,172896],{},[47,172893,172894],{},[50,172895,82],{},[47,172897,85],{},[32,172899,172900,172904],{},[47,172901,172902],{},[50,172903,92],{},[47,172905,95],{},[32,172907,172908,172912],{},[47,172909,172910],{},[50,172911,102],{},[47,172913,105],{},[32,172915,172916,172920],{},[47,172917,172918],{},[50,172919,112],{},[47,172921,115],{},[32,172923,172924,172928],{},[47,172925,172926],{},[50,172927,122],{},[47,172929,125],{},[19,172931,128],{},[130,172933,172934],{"className":132,"code":133,"language":134,"meta":135,"style":135},[50,172935,172936],{"__ignoreMap":135},[139,172937,172938,172940,172942,172944,172946,172948],{"class":141,"line":142},[139,172939,146],{"class":145},[139,172941,150],{"class":149},[139,172943,154],{"class":153},[139,172945,157],{"class":145},[139,172947,161],{"class":160},[139,172949,164],{"class":145},[19,172951,167,172952,170],{},[50,172953,72],{},[14,172955,174],{"id":173},[19,172957,177],{},[19,172959,180],{},[130,172961,172962],{"className":132,"code":183,"language":134,"meta":135,"style":135},[50,172963,172964,172982],{"__ignoreMap":135},[139,172965,172966,172968,172970,172972,172974,172976,172978,172980],{"class":141,"line":142},[139,172967,190],{"class":145},[139,172969,150],{"class":149},[139,172971,154],{"class":153},[139,172973,157],{"class":145},[139,172975,199],{"class":153},[139,172977,157],{"class":145},[139,172979,204],{"class":160},[139,172981,207],{"class":145},[139,172983,172984,172986],{"class":141,"line":210},[139,172985,213],{"class":153},[139,172987,216],{"class":145},[19,172989,219,172990,223],{},[50,172991,222],{},[19,172993,226],{},[14,172995,230],{"id":229},[19,172997,233],{},[130,172999,173000],{"className":132,"code":236,"language":134,"meta":135,"style":135},[50,173001,173002,173008,173012,173018],{"__ignoreMap":135},[139,173003,173004,173006],{"class":141,"line":142},[139,173005,243],{"class":149},[139,173007,246],{"class":145},[139,173009,173010],{"class":141,"line":210},[139,173011,251],{"class":145},[139,173013,173014,173016],{"class":141,"line":254},[139,173015,257],{"class":149},[139,173017,246],{"class":145},[139,173019,173020],{"class":141,"line":262},[139,173021,265],{"class":145},[19,173023,128],{},[130,173025,173026],{"className":132,"code":270,"language":134,"meta":135,"style":135},[50,173027,173028,173034,173052,173058,173064],{"__ignoreMap":135},[139,173029,173030,173032],{"class":141,"line":142},[139,173031,243],{"class":149},[139,173033,246],{"class":145},[139,173035,173036,173038,173040,173042,173044,173046,173048,173050],{"class":141,"line":210},[139,173037,283],{"class":145},[139,173039,150],{"class":149},[139,173041,154],{"class":153},[139,173043,157],{"class":145},[139,173045,199],{"class":153},[139,173047,157],{"class":145},[139,173049,204],{"class":160},[139,173051,207],{"class":145},[139,173053,173054,173056],{"class":141,"line":254},[139,173055,302],{"class":153},[139,173057,216],{"class":145},[139,173059,173060,173062],{"class":141,"line":262},[139,173061,257],{"class":149},[139,173063,246],{"class":145},[139,173065,173066,173068,173070,173072],{"class":141,"line":313},[139,173067,302],{"class":153},[139,173069,157],{"class":145},[139,173071,320],{"class":160},[139,173073,164],{"class":145},[19,173075,325,173076,328],{},[50,173077,257],{},[130,173079,173080],{"className":132,"code":331,"language":134,"meta":135,"style":135},[50,173081,173082,173088,173106,173112,173120],{"__ignoreMap":135},[139,173083,173084,173086],{"class":141,"line":142},[139,173085,243],{"class":149},[139,173087,246],{"class":145},[139,173089,173090,173092,173094,173096,173098,173100,173102,173104],{"class":141,"line":210},[139,173091,283],{"class":145},[139,173093,150],{"class":149},[139,173095,154],{"class":153},[139,173097,157],{"class":145},[139,173099,199],{"class":153},[139,173101,157],{"class":145},[139,173103,204],{"class":160},[139,173105,207],{"class":145},[139,173107,173108,173110],{"class":141,"line":254},[139,173109,302],{"class":153},[139,173111,216],{"class":145},[139,173113,173114,173116,173118],{"class":141,"line":262},[139,173115,257],{"class":149},[139,173117,370],{"class":153},[139,173119,246],{"class":145},[139,173121,173122,173124,173126,173128],{"class":141,"line":313},[139,173123,302],{"class":153},[139,173125,157],{"class":145},[139,173127,320],{"class":160},[139,173129,164],{"class":145},[14,173131,386],{"id":385},[130,173133,173134],{"className":132,"code":389,"language":134,"meta":135,"style":135},[50,173135,173136,173142,173162,173180,173186,173194,173204,173212],{"__ignoreMap":135},[139,173137,173138,173140],{"class":141,"line":142},[139,173139,243],{"class":149},[139,173141,246],{"class":145},[139,173143,173144,173146,173148,173150,173152,173154,173156,173158,173160],{"class":141,"line":210},[139,173145,402],{"class":145},[139,173147,150],{"class":149},[139,173149,407],{"class":145},[139,173151,410],{"class":153},[139,173153,413],{"class":145},[139,173155,416],{"class":153},[139,173157,413],{"class":145},[139,173159,421],{"class":153},[139,173161,424],{"class":145},[139,173163,173164,173166,173168,173170,173172,173174,173176,173178],{"class":141,"line":254},[139,173165,429],{"class":145},[139,173167,150],{"class":149},[139,173169,154],{"class":153},[139,173171,157],{"class":145},[139,173173,199],{"class":153},[139,173175,157],{"class":145},[139,173177,442],{"class":160},[139,173179,207],{"class":145},[139,173181,173182,173184],{"class":141,"line":262},[139,173183,302],{"class":153},[139,173185,451],{"class":145},[139,173187,173188,173190,173192],{"class":141,"line":313},[139,173189,257],{"class":149},[139,173191,370],{"class":153},[139,173193,246],{"class":145},[139,173195,173196,173198,173200,173202],{"class":141,"line":462},[139,173197,302],{"class":153},[139,173199,157],{"class":145},[139,173201,469],{"class":160},[139,173203,164],{"class":145},[139,173205,173206,173208,173210],{"class":141,"line":474},[139,173207,257],{"class":149},[139,173209,479],{"class":153},[139,173211,246],{"class":145},[139,173213,173214,173216,173218,173220],{"class":141,"line":484},[139,173215,302],{"class":153},[139,173217,157],{"class":145},[139,173219,491],{"class":160},[139,173221,164],{"class":145},[19,173223,496],{},[130,173225,173226],{"className":132,"code":499,"language":134,"meta":135,"style":135},[50,173227,173228,173234,173252,173264,173278],{"__ignoreMap":135},[139,173229,173230,173232],{"class":141,"line":142},[139,173231,243],{"class":149},[139,173233,246],{"class":145},[139,173235,173236,173238,173240,173242,173244,173246,173248,173250],{"class":141,"line":210},[139,173237,512],{"class":145},[139,173239,150],{"class":149},[139,173241,154],{"class":153},[139,173243,157],{"class":145},[139,173245,199],{"class":153},[139,173247,157],{"class":145},[139,173249,525],{"class":160},[139,173251,207],{"class":145},[139,173253,173254,173256,173258,173260,173262],{"class":141,"line":254},[139,173255,302],{"class":153},[139,173257,157],{"class":145},[139,173259,536],{"class":153},[139,173261,539],{"class":149},[139,173263,542],{"class":145},[139,173265,173266,173268,173270,173272,173274,173276],{"class":141,"line":262},[139,173267,257],{"class":149},[139,173269,549],{"class":145},[139,173271,72],{"class":153},[139,173273,413],{"class":145},[139,173275,112],{"class":153},[139,173277,558],{"class":145},[139,173279,173280,173282,173284,173286],{"class":141,"line":313},[139,173281,302],{"class":153},[139,173283,157],{"class":145},[139,173285,567],{"class":160},[139,173287,164],{"class":145},[14,173289,573],{"id":572},[130,173291,173292],{"className":132,"code":576,"language":134,"meta":135,"style":135},[50,173293,173294,173300,173314,173324],{"__ignoreMap":135},[139,173295,173296,173298],{"class":141,"line":142},[139,173297,243],{"class":149},[139,173299,246],{"class":145},[139,173301,173302,173304,173306,173308,173310,173312],{"class":141,"line":210},[139,173303,512],{"class":145},[139,173305,150],{"class":149},[139,173307,154],{"class":153},[139,173309,157],{"class":145},[139,173311,161],{"class":160},[139,173313,164],{"class":145},[139,173315,173316,173318,173320,173322],{"class":141,"line":254},[139,173317,257],{"class":149},[139,173319,370],{"class":153},[139,173321,607],{"class":149},[139,173323,610],{"class":145},[139,173325,173326,173328,173330,173332,173334,173336,173338,173340,173342],{"class":141,"line":262},[139,173327,302],{"class":153},[139,173329,157],{"class":145},[139,173331,619],{"class":149},[139,173333,622],{"class":160},[139,173335,625],{"class":153},[139,173337,628],{"class":145},[139,173339,631],{"class":153},[139,173341,634],{"class":160},[139,173343,164],{"class":145},[19,173345,639],{},[130,173347,173349],{"className":173348,"code":644,"language":645,"meta":135},[643],[50,173350,644],{"__ignoreMap":135},[14,173352,651],{"id":650},[19,173354,173355,657],{},[50,173356,656],{},[19,173358,173359,663],{},[50,173360,662],{},[130,173362,173363],{"className":132,"code":666,"language":134,"meta":135,"style":135},[50,173364,173365,173371,173389,173397,173407,173413,173433,173439],{"__ignoreMap":135},[139,173366,173367,173369],{"class":141,"line":142},[139,173368,243],{"class":149},[139,173370,246],{"class":145},[139,173372,173373,173375,173377,173379,173381,173383,173385,173387],{"class":141,"line":210},[139,173374,512],{"class":145},[139,173376,150],{"class":149},[139,173378,154],{"class":153},[139,173380,157],{"class":145},[139,173382,199],{"class":153},[139,173384,157],{"class":145},[139,173386,525],{"class":160},[139,173388,207],{"class":145},[139,173390,173391,173393,173395],{"class":141,"line":254},[139,173392,257],{"class":149},[139,173394,370],{"class":153},[139,173396,246],{"class":145},[139,173398,173399,173401,173403,173405],{"class":141,"line":262},[139,173400,302],{"class":153},[139,173402,157],{"class":145},[139,173404,709],{"class":160},[139,173406,164],{"class":145},[139,173408,173409,173411],{"class":141,"line":313},[139,173410,656],{"class":149},[139,173412,246],{"class":145},[139,173414,173415,173417,173419,173421,173423,173425,173427,173429,173431],{"class":141,"line":462},[139,173416,302],{"class":153},[139,173418,157],{"class":145},[139,173420,619],{"class":149},[139,173422,728],{"class":160},[139,173424,625],{"class":153},[139,173426,733],{"class":145},[139,173428,631],{"class":153},[139,173430,634],{"class":160},[139,173432,164],{"class":145},[139,173434,173435,173437],{"class":141,"line":474},[139,173436,662],{"class":149},[139,173438,246],{"class":145},[139,173440,173441,173443,173445,173447],{"class":141,"line":484},[139,173442,302],{"class":153},[139,173444,157],{"class":145},[139,173446,754],{"class":160},[139,173448,164],{"class":145},[19,173450,173451,761],{},[50,173452,662],{},[14,173454,765],{"id":764},[19,173456,768],{},[130,173458,173459],{"className":132,"code":771,"language":134,"meta":135,"style":135},[50,173460,173461,173469,173481,173493,173513,173517,173521],{"__ignoreMap":135},[139,173462,173463,173465,173467],{"class":141,"line":142},[139,173464,778],{"class":149},[139,173466,782],{"class":781},[139,173468,785],{"class":145},[139,173470,173471,173473,173475,173477,173479],{"class":141,"line":210},[139,173472,790],{"class":149},[139,173474,793],{"class":145},[139,173476,796],{"class":149},[139,173478,799],{"class":153},[139,173480,246],{"class":145},[139,173482,173483,173485,173487,173489,173491],{"class":141,"line":254},[139,173484,806],{"class":149},[139,173486,370],{"class":153},[139,173488,157],{"class":145},[139,173490,813],{"class":160},[139,173492,164],{"class":145},[139,173494,173495,173497,173499,173501,173503,173505,173507,173509,173511],{"class":141,"line":262},[139,173496,302],{"class":153},[139,173498,157],{"class":145},[139,173500,619],{"class":149},[139,173502,826],{"class":160},[139,173504,625],{"class":153},[139,173506,831],{"class":145},[139,173508,631],{"class":153},[139,173510,634],{"class":160},[139,173512,164],{"class":145},[139,173514,173515],{"class":141,"line":313},[139,173516,843],{"emptyLinePlaceholder":842},[139,173518,173519],{"class":141,"line":462},[139,173520,843],{"emptyLinePlaceholder":842},[139,173522,173523,173525,173527,173529],{"class":141,"line":474},[139,173524,852],{"class":145},[139,173526,855],{"class":149},[139,173528,410],{"class":153},[139,173530,164],{"class":145},[19,173532,862],{},[130,173534,173535],{"className":132,"code":865,"language":134,"meta":135,"style":135},[50,173536,173537,173543,173553,173563],{"__ignoreMap":135},[139,173538,173539,173541],{"class":141,"line":142},[139,173540,243],{"class":149},[139,173542,246],{"class":145},[139,173544,173545,173547,173549,173551],{"class":141,"line":210},[139,173546,878],{"class":145},[139,173548,855],{"class":149},[139,173550,410],{"class":153},[139,173552,164],{"class":145},[139,173554,173555,173557,173559,173561],{"class":141,"line":254},[139,173556,257],{"class":149},[139,173558,370],{"class":153},[139,173560,607],{"class":149},[139,173562,610],{"class":145},[139,173564,173565,173567],{"class":141,"line":262},[139,173566,302],{"class":153},[139,173568,901],{"class":145},[14,173570,905],{"id":904},[130,173572,173573],{"className":132,"code":908,"language":134,"meta":135,"style":135},[50,173574,173575,173587,173591,173595,173599,173607,173617,173627,173637,173641,173645,173651,173667,173677],{"__ignoreMap":135},[139,173576,173577,173579,173581,173583,173585],{"class":141,"line":142},[139,173578,915],{"class":149},[139,173580,918],{"class":781},[139,173582,157],{"class":145},[139,173584,923],{"class":153},[139,173586,558],{"class":145},[139,173588,173589],{"class":141,"line":210},[139,173590,930],{"class":149},[139,173592,173593],{"class":141,"line":254},[139,173594,843],{"emptyLinePlaceholder":842},[139,173596,173597],{"class":141,"line":262},[139,173598,843],{"emptyLinePlaceholder":842},[139,173600,173601,173603,173605],{"class":141,"line":313},[139,173602,778],{"class":149},[139,173604,945],{"class":781},[139,173606,948],{"class":145},[139,173608,173609,173611,173613,173615],{"class":141,"line":462},[139,173610,790],{"class":149},[139,173612,955],{"class":145},[139,173614,958],{"class":149},[139,173616,961],{"class":145},[139,173618,173619,173621,173623,173625],{"class":141,"line":474},[139,173620,806],{"class":149},[139,173622,968],{"class":145},[139,173624,971],{"class":160},[139,173626,164],{"class":145},[139,173628,173629,173631,173633,173635],{"class":141,"line":484},[139,173630,978],{"class":149},[139,173632,981],{"class":145},[139,173634,855],{"class":149},[139,173636,986],{"class":145},[139,173638,173639],{"class":141,"line":989},[139,173640,843],{"emptyLinePlaceholder":842},[139,173642,173643],{"class":141,"line":994},[139,173644,843],{"emptyLinePlaceholder":842},[139,173646,173647,173649],{"class":141,"line":999},[139,173648,243],{"class":149},[139,173650,246],{"class":145},[139,173652,173653,173655,173657,173659,173661,173663,173665],{"class":141,"line":1006},[139,173654,1009],{"class":145},[139,173656,150],{"class":149},[139,173658,1014],{"class":145},[139,173660,1017],{"class":153},[139,173662,413],{"class":145},[139,173664,1022],{"class":153},[139,173666,164],{"class":145},[139,173668,173669,173671,173673,173675],{"class":141,"line":1027},[139,173670,257],{"class":149},[139,173672,1032],{"class":145},[139,173674,1035],{"class":149},[139,173676,610],{"class":145},[139,173678,173679,173681],{"class":141,"line":1040},[139,173680,302],{"class":153},[139,173682,901],{"class":145},[19,173684,1047],{},[14,173686,1051],{"id":1050},[19,173688,1054],{},[130,173690,173691],{"className":132,"code":1057,"language":134,"meta":135,"style":135},[50,173692,173693,173699,173703,173709,173719,173727],{"__ignoreMap":135},[139,173694,173695,173697],{"class":141,"line":142},[139,173696,1064],{"class":149},[139,173698,1067],{"class":145},[139,173700,173701],{"class":141,"line":210},[139,173702,843],{"emptyLinePlaceholder":842},[139,173704,173705,173707],{"class":141,"line":254},[139,173706,243],{"class":149},[139,173708,246],{"class":145},[139,173710,173711,173713,173715,173717],{"class":141,"line":262},[139,173712,1082],{"class":153},[139,173714,157],{"class":145},[139,173716,161],{"class":160},[139,173718,164],{"class":145},[139,173720,173721,173723,173725],{"class":141,"line":313},[139,173722,257],{"class":149},[139,173724,370],{"class":153},[139,173726,246],{"class":145},[139,173728,173729],{"class":141,"line":462},[139,173730,1101],{"class":145},[19,173732,1104],{},[14,173734,1108],{"id":1107},[19,173736,1111,173737,1115],{},[50,173738,1114],{},[19,173740,1118,173741,1122],{},[50,173742,1121],{},[130,173744,173745],{"className":132,"code":1125,"language":134,"meta":135,"style":135},[50,173746,173747,173755,173765,173769,173773,173781],{"__ignoreMap":135},[139,173748,173749,173751,173753],{"class":141,"line":142},[139,173750,778],{"class":149},[139,173752,1134],{"class":781},[139,173754,1137],{"class":145},[139,173756,173757,173759,173761,173763],{"class":141,"line":210},[139,173758,978],{"class":149},[139,173760,1144],{"class":145},[139,173762,1147],{"class":149},[139,173764,1150],{"class":145},[139,173766,173767],{"class":141,"line":254},[139,173768,843],{"emptyLinePlaceholder":842},[139,173770,173771],{"class":141,"line":262},[139,173772,843],{"emptyLinePlaceholder":842},[139,173774,173775,173777,173779],{"class":141,"line":313},[139,173776,778],{"class":149},[139,173778,1165],{"class":781},[139,173780,1137],{"class":145},[139,173782,173783,173785,173787,173789],{"class":141,"line":462},[139,173784,978],{"class":149},[139,173786,1144],{"class":145},[139,173788,855],{"class":149},[139,173790,1150],{"class":145},[19,173792,1180],{},[130,173794,173795],{"className":132,"code":1183,"language":134,"meta":135,"style":135},[50,173796,173797,173803,173807],{"__ignoreMap":135},[139,173798,173799,173801],{"class":141,"line":142},[139,173800,1064],{"class":149},[139,173802,1192],{"class":145},[139,173804,173805],{"class":141,"line":210},[139,173806,843],{"emptyLinePlaceholder":842},[139,173808,173809,173811,173813,173815,173817,173819],{"class":141,"line":254},[139,173810,213],{"class":153},[139,173812,1203],{"class":145},[139,173814,410],{"class":153},[139,173816,413],{"class":145},[139,173818,416],{"class":153},[139,173820,207],{"class":145},[14,173822,1215],{"id":1214},[1217,173824,1220],{"id":1219},[130,173826,173827],{"className":132,"code":1223,"language":134,"meta":135,"style":135},[50,173828,173829,173835,173839],{"__ignoreMap":135},[139,173830,173831,173833],{"class":141,"line":142},[139,173832,1064],{"class":149},[139,173834,1232],{"class":145},[139,173836,173837],{"class":141,"line":210},[139,173838,843],{"emptyLinePlaceholder":842},[139,173840,173841,173843,173845,173847,173849,173851],{"class":141,"line":254},[139,173842,213],{"class":153},[139,173844,1243],{"class":145},[139,173846,410],{"class":153},[139,173848,413],{"class":145},[139,173850,536],{"class":153},[139,173852,207],{"class":145},[1217,173854,1255],{"id":1254},[130,173856,173857],{"className":132,"code":1258,"language":134,"meta":135,"style":135},[50,173858,173859,173869,173873],{"__ignoreMap":135},[139,173860,173861,173863,173865,173867],{"class":141,"line":142},[139,173862,1265],{"class":149},[139,173864,1268],{"class":145},[139,173866,1064],{"class":149},[139,173868,1273],{"class":145},[139,173870,173871],{"class":141,"line":210},[139,173872,843],{"emptyLinePlaceholder":842},[139,173874,173875,173877,173879,173881,173883,173885],{"class":141,"line":254},[139,173876,213],{"class":153},[139,173878,1284],{"class":145},[139,173880,410],{"class":153},[139,173882,413],{"class":145},[139,173884,536],{"class":153},[139,173886,207],{"class":145},[1217,173888,1296],{"id":1295},[130,173890,173891],{"className":132,"code":1299,"language":134,"meta":135,"style":135},[50,173892,173893,173903,173907],{"__ignoreMap":135},[139,173894,173895,173897,173899,173901],{"class":141,"line":142},[139,173896,1064],{"class":149},[139,173898,1268],{"class":145},[139,173900,1035],{"class":149},[139,173902,1312],{"class":145},[139,173904,173905],{"class":141,"line":210},[139,173906,843],{"emptyLinePlaceholder":842},[139,173908,173909,173911,173913,173915,173917,173919],{"class":141,"line":254},[139,173910,213],{"class":153},[139,173912,1323],{"class":145},[139,173914,410],{"class":153},[139,173916,413],{"class":145},[139,173918,536],{"class":153},[139,173920,207],{"class":145},[130,173922,173923],{"className":132,"code":1334,"language":134,"meta":135,"style":135},[50,173924,173925,173939,173943],{"__ignoreMap":135},[139,173926,173927,173929,173931,173933,173935,173937],{"class":141,"line":142},[139,173928,1265],{"class":149},[139,173930,1268],{"class":145},[139,173932,1064],{"class":149},[139,173934,1347],{"class":145},[139,173936,1035],{"class":149},[139,173938,1352],{"class":145},[139,173940,173941],{"class":141,"line":210},[139,173942,843],{"emptyLinePlaceholder":842},[139,173944,173945,173947,173949,173951,173953,173955],{"class":141,"line":254},[139,173946,213],{"class":153},[139,173948,1363],{"class":145},[139,173950,410],{"class":153},[139,173952,413],{"class":145},[139,173954,536],{"class":153},[139,173956,207],{"class":145},[1217,173958,1375],{"id":1374},[130,173960,173961],{"className":132,"code":1378,"language":134,"meta":135,"style":135},[50,173962,173963],{"__ignoreMap":135},[139,173964,173965,173967,173969,173971],{"class":141,"line":142},[139,173966,1265],{"class":149},[139,173968,1268],{"class":145},[139,173970,1064],{"class":149},[139,173972,1391],{"class":149},[19,173974,1394],{},[14,173976,1398],{"id":1397},[1217,173978,1402],{"id":1401},[130,173980,173981],{"className":132,"code":1405,"language":134,"meta":135,"style":135},[50,173982,173983,173989,173993,174007,174025],{"__ignoreMap":135},[139,173984,173985,173987],{"class":141,"line":142},[139,173986,1064],{"class":149},[139,173988,1232],{"class":145},[139,173990,173991],{"class":141,"line":210},[139,173992,843],{"emptyLinePlaceholder":842},[139,173994,173995,173997,173999,174001,174003,174005],{"class":141,"line":254},[139,173996,213],{"class":153},[139,173998,1243],{"class":145},[139,174000,410],{"class":153},[139,174002,413],{"class":145},[139,174004,536],{"class":153},[139,174006,207],{"class":145},[139,174008,174009,174011,174013,174015,174017,174019,174021,174023],{"class":141,"line":262},[139,174010,213],{"class":153},[139,174012,1438],{"class":145},[139,174014,1441],{"class":160},[139,174016,413],{"class":145},[139,174018,1446],{"class":160},[139,174020,413],{"class":145},[139,174022,1451],{"class":160},[139,174024,1454],{"class":145},[139,174026,174027,174029,174031,174033,174035,174037,174039,174041,174043,174045,174047,174049,174051,174053],{"class":141,"line":313},[139,174028,213],{"class":153},[139,174030,1461],{"class":145},[139,174032,410],{"class":153},[139,174034,413],{"class":145},[139,174036,416],{"class":153},[139,174038,413],{"class":145},[139,174040,421],{"class":153},[139,174042,413],{"class":145},[139,174044,1476],{"class":153},[139,174046,413],{"class":145},[139,174048,1481],{"class":153},[139,174050,1484],{"class":145},[139,174052,416],{"class":153},[139,174054,207],{"class":145},[1217,174056,1492],{"id":1491},[130,174058,174059],{"className":132,"code":1495,"language":134,"meta":135,"style":135},[50,174060,174061,174067,174071,174077,174085],{"__ignoreMap":135},[139,174062,174063,174065],{"class":141,"line":142},[139,174064,1064],{"class":149},[139,174066,1504],{"class":145},[139,174068,174069],{"class":141,"line":210},[139,174070,843],{"emptyLinePlaceholder":842},[139,174072,174073,174075],{"class":141,"line":254},[139,174074,213],{"class":153},[139,174076,1515],{"class":145},[139,174078,174079,174081,174083],{"class":141,"line":262},[139,174080,1520],{"class":145},[139,174082,410],{"class":153},[139,174084,164],{"class":145},[139,174086,174087,174089,174091,174093],{"class":141,"line":313},[139,174088,213],{"class":153},[139,174090,157],{"class":145},[139,174092,1533],{"class":160},[139,174094,164],{"class":145},[1217,174096,1539],{"id":1538},[130,174098,174099],{"className":132,"code":1542,"language":134,"meta":135,"style":135},[50,174100,174101,174111,174115,174123,174129],{"__ignoreMap":135},[139,174102,174103,174105,174107,174109],{"class":141,"line":142},[139,174104,1265],{"class":149},[139,174106,1551],{"class":145},[139,174108,1064],{"class":149},[139,174110,1556],{"class":145},[139,174112,174113],{"class":141,"line":210},[139,174114,843],{"emptyLinePlaceholder":842},[139,174116,174117,174119,174121],{"class":141,"line":254},[139,174118,1565],{"class":145},[139,174120,150],{"class":149},[139,174122,1570],{"class":145},[139,174124,174125,174127],{"class":141,"line":262},[139,174126,213],{"class":153},[139,174128,1577],{"class":145},[139,174130,174131,174133,174135,174137,174139,174141],{"class":141,"line":313},[139,174132,213],{"class":153},[139,174134,1584],{"class":145},[139,174136,1587],{"class":160},[139,174138,1590],{"class":153},[139,174140,1593],{"class":160},[139,174142,207],{"class":145},[1217,174144,1599],{"id":1598},[130,174146,174147],{"className":132,"code":1602,"language":134,"meta":135,"style":135},[50,174148,174149,174155,174159,174165],{"__ignoreMap":135},[139,174150,174151,174153],{"class":141,"line":142},[139,174152,1064],{"class":149},[139,174154,1611],{"class":145},[139,174156,174157],{"class":141,"line":210},[139,174158,843],{"emptyLinePlaceholder":842},[139,174160,174161,174163],{"class":141,"line":254},[139,174162,213],{"class":153},[139,174164,1622],{"class":145},[139,174166,174167,174169,174171,174173],{"class":141,"line":262},[139,174168,213],{"class":153},[139,174170,1629],{"class":145},[139,174172,1632],{"class":160},[139,174174,207],{"class":145},[1217,174176,1638],{"id":1637},[130,174178,174179],{"className":132,"code":1641,"language":134,"meta":135,"style":135},[50,174180,174181,174187,174191,174197],{"__ignoreMap":135},[139,174182,174183,174185],{"class":141,"line":142},[139,174184,1064],{"class":149},[139,174186,1650],{"class":145},[139,174188,174189],{"class":141,"line":210},[139,174190,843],{"emptyLinePlaceholder":842},[139,174192,174193,174195],{"class":141,"line":254},[139,174194,213],{"class":153},[139,174196,1661],{"class":145},[139,174198,174199,174201],{"class":141,"line":262},[139,174200,213],{"class":153},[139,174202,1668],{"class":145},[14,174204,1672,174205,1677,174207,634],{"id":1671},[1674,174206,1676],{},[1674,174208,1680],{},[19,174210,1683,174211,1687],{},[50,174212,1686],{},[19,174214,1690,174215,1122],{},[50,174216,1693],{},[130,174218,174219],{"className":132,"code":1696,"language":134,"meta":135,"style":135},[50,174220,174221,174229,174239,174243,174247,174259],{"__ignoreMap":135},[139,174222,174223,174225,174227],{"class":141,"line":142},[139,174224,778],{"class":149},[139,174226,1134],{"class":781},[139,174228,1137],{"class":145},[139,174230,174231,174233,174235,174237],{"class":141,"line":210},[139,174232,978],{"class":149},[139,174234,1144],{"class":145},[139,174236,1147],{"class":149},[139,174238,1150],{"class":145},[139,174240,174241],{"class":141,"line":254},[139,174242,843],{"emptyLinePlaceholder":842},[139,174244,174245],{"class":141,"line":262},[139,174246,843],{"emptyLinePlaceholder":842},[139,174248,174249,174251,174253,174255,174257],{"class":141,"line":313},[139,174250,1729],{"class":149},[139,174252,1732],{"class":153},[139,174254,1735],{"class":149},[139,174256,1738],{"class":160},[139,174258,246],{"class":145},[139,174260,174261,174263,174265,174267,174269,174271],{"class":141,"line":462},[139,174262,302],{"class":153},[139,174264,1747],{"class":145},[139,174266,410],{"class":153},[139,174268,413],{"class":145},[139,174270,416],{"class":153},[139,174272,207],{"class":145},[19,174274,1758],{},[1760,174276,174277,174279],{},[1763,174278,1765],{},[1763,174280,1768],{},[19,174282,1771],{},[14,174284,1775],{"id":1774},[19,174286,1778,174287,1782],{},[50,174288,1781],{},[19,174290,1785],{},[130,174292,174294],{"className":174293,"code":1789,"language":645,"meta":135},[643],[50,174295,1789],{"__ignoreMap":135},[19,174297,1794],{},[130,174299,174300],{"className":132,"code":1797,"language":134,"meta":135,"style":135},[50,174301,174302],{"__ignoreMap":135},[139,174303,174304,174306,174308,174310],{"class":141,"line":142},[139,174305,1265],{"class":149},[139,174307,1806],{"class":145},[139,174309,1064],{"class":149},[139,174311,1811],{"class":145},[19,174313,174314,1816],{},[50,174315,1781],{},[14,174317,1820],{"id":1819},[19,174319,1823,174320,1827],{},[50,174321,1826],{},[130,174323,174324],{"className":1830,"code":1831,"language":1832,"meta":135,"style":135},[50,174325,174326],{"__ignoreMap":135},[139,174327,174328,174330,174332],{"class":141,"line":142},[139,174329,1826],{"class":781},[139,174331,1841],{"class":160},[139,174333,1844],{"class":160},[19,174335,1847],{},[130,174337,174338],{"className":132,"code":1850,"language":134,"meta":135,"style":135},[50,174339,174340,174346,174350,174362],{"__ignoreMap":135},[139,174341,174342,174344],{"class":141,"line":142},[139,174343,1064],{"class":149},[139,174345,1844],{"class":145},[139,174347,174348],{"class":141,"line":210},[139,174349,843],{"emptyLinePlaceholder":842},[139,174351,174352,174354,174356,174358,174360],{"class":141,"line":254},[139,174353,1867],{"class":145},[139,174355,150],{"class":149},[139,174357,1872],{"class":145},[139,174359,1875],{"class":160},[139,174361,164],{"class":145},[139,174363,174364,174366],{"class":141,"line":262},[139,174365,213],{"class":153},[139,174367,1884],{"class":145},[19,174369,1887],{},[130,174371,174372],{"className":1830,"code":1890,"language":1832,"meta":135,"style":135},[50,174373,174374],{"__ignoreMap":135},[139,174375,174376,174378],{"class":141,"line":142},[139,174377,1826],{"class":781},[139,174379,1899],{"class":160},[19,174381,1902],{},[130,174383,174384],{"className":1830,"code":1905,"language":1832,"meta":135,"style":135},[50,174385,174386],{"__ignoreMap":135},[139,174387,174388,174390,174392,174394],{"class":141,"line":142},[139,174389,1826],{"class":781},[139,174391,1914],{"class":160},[139,174393,1917],{"class":149},[139,174395,1920],{"class":160},[19,174397,1923],{},[130,174399,174400],{"className":1830,"code":1926,"language":1832,"meta":135,"style":135},[50,174401,174402],{"__ignoreMap":135},[139,174403,174404,174406,174408,174410],{"class":141,"line":142},[139,174405,1826],{"class":781},[139,174407,1841],{"class":160},[139,174409,1937],{"class":153},[139,174411,1920],{"class":160},[14,174413,1943],{"id":1942},[19,174415,1946,174416,1950],{},[50,174417,1949],{},[130,174419,174420],{"className":132,"code":1953,"language":134,"meta":135,"style":135},[50,174421,174422,174428,174432,174442],{"__ignoreMap":135},[139,174423,174424,174426],{"class":141,"line":142},[139,174425,1064],{"class":149},[139,174427,1650],{"class":145},[139,174429,174430],{"class":141,"line":210},[139,174431,843],{"emptyLinePlaceholder":842},[139,174433,174434,174436,174438,174440],{"class":141,"line":254},[139,174435,1970],{"class":149},[139,174437,1973],{"class":145},[139,174439,1976],{"class":149},[139,174441,1979],{"class":145},[139,174443,174444,174446],{"class":141,"line":262},[139,174445,302],{"class":153},[139,174447,1986],{"class":145},[19,174449,1989],{},[19,174451,1992],{},[130,174453,174455],{"className":174454,"code":1996,"language":645,"meta":135},[643],[50,174456,1996],{"__ignoreMap":135},[19,174458,2001],{},[14,174460,2005],{"id":2004},[19,174462,1785],{},[130,174464,174466],{"className":174465,"code":2011,"language":645,"meta":135},[643],[50,174467,2011],{"__ignoreMap":135},[19,174469,174470,1122],{},[50,174471,2018],{},[130,174473,174474],{"className":132,"code":2021,"language":134,"meta":135,"style":135},[50,174475,174476,174482,174492,174496,174500,174508,174516,174524,174530,174534,174560,174570,174574,174578,174586,174612],{"__ignoreMap":135},[139,174477,174478,174480],{"class":141,"line":142},[139,174479,1064],{"class":149},[139,174481,2030],{"class":145},[139,174483,174484,174486,174488,174490],{"class":141,"line":210},[139,174485,1265],{"class":149},[139,174487,2037],{"class":145},[139,174489,1064],{"class":149},[139,174491,2042],{"class":145},[139,174493,174494],{"class":141,"line":254},[139,174495,843],{"emptyLinePlaceholder":842},[139,174497,174498],{"class":141,"line":262},[139,174499,843],{"emptyLinePlaceholder":842},[139,174501,174502,174504,174506],{"class":141,"line":313},[139,174503,778],{"class":149},[139,174505,2057],{"class":781},[139,174507,2060],{"class":145},[139,174509,174510,174512,174514],{"class":141,"line":462},[139,174511,2065],{"class":145},[139,174513,150],{"class":149},[139,174515,2070],{"class":145},[139,174517,174518,174520,174522],{"class":141,"line":474},[139,174519,790],{"class":149},[139,174521,2077],{"class":149},[139,174523,2080],{"class":145},[139,174525,174526,174528],{"class":141,"line":484},[139,174527,2085],{"class":149},[139,174529,2088],{"class":145},[139,174531,174532],{"class":141,"line":989},[139,174533,843],{"emptyLinePlaceholder":842},[139,174535,174536,174538,174540,174542,174544,174546,174548,174550,174552,174554,174556,174558],{"class":141,"line":994},[139,174537,2097],{"class":149},[139,174539,2100],{"class":153},[139,174541,2103],{"class":145},[139,174543,2106],{"class":160},[139,174545,413],{"class":145},[139,174547,2112],{"class":2111},[139,174549,150],{"class":149},[139,174551,2117],{"class":160},[139,174553,2120],{"class":145},[139,174555,1035],{"class":149},[139,174557,2125],{"class":2111},[139,174559,246],{"class":145},[139,174561,174562,174564,174566,174568],{"class":141,"line":999},[139,174563,2085],{"class":149},[139,174565,2134],{"class":145},[139,174567,2137],{"class":2111},[139,174569,164],{"class":145},[139,174571,174572],{"class":141,"line":1006},[139,174573,843],{"emptyLinePlaceholder":842},[139,174575,174576],{"class":141,"line":1027},[139,174577,843],{"emptyLinePlaceholder":842},[139,174579,174580,174582,174584],{"class":141,"line":1040},[139,174581,778],{"class":149},[139,174583,2154],{"class":781},[139,174585,2157],{"class":145},[139,174587,174588,174590,174592,174594,174596,174598,174600,174602,174604,174606,174608,174610],{"class":141,"line":2160},[139,174589,2097],{"class":149},[139,174591,2100],{"class":153},[139,174593,2103],{"class":145},[139,174595,2169],{"class":160},[139,174597,413],{"class":145},[139,174599,2112],{"class":2111},[139,174601,150],{"class":149},[139,174603,2117],{"class":160},[139,174605,2120],{"class":145},[139,174607,1035],{"class":149},[139,174609,2125],{"class":2111},[139,174611,246],{"class":145},[139,174613,174614,174616,174618,174620,174622,174624,174626,174628,174630,174632,174634],{"class":141,"line":2188},[139,174615,2191],{"class":145},[139,174617,2137],{"class":2111},[139,174619,413],{"class":145},[139,174621,2198],{"class":2111},[139,174623,150],{"class":149},[139,174625,2203],{"class":153},[139,174627,413],{"class":145},[139,174629,2208],{"class":2111},[139,174631,150],{"class":149},[139,174633,416],{"class":153},[139,174635,164],{"class":145},[19,174637,174638,1122],{},[50,174639,2219],{},[130,174641,174642],{"className":132,"code":2222,"language":134,"meta":135,"style":135},[50,174643,174644,174654,174658,174670,174690],{"__ignoreMap":135},[139,174645,174646,174648,174650,174652],{"class":141,"line":142},[139,174647,1265],{"class":149},[139,174649,1806],{"class":145},[139,174651,1064],{"class":149},[139,174653,2235],{"class":145},[139,174655,174656],{"class":141,"line":210},[139,174657,843],{"emptyLinePlaceholder":842},[139,174659,174660,174662,174664,174666,174668],{"class":141,"line":254},[139,174661,2244],{"class":145},[139,174663,150],{"class":149},[139,174665,2249],{"class":145},[139,174667,2252],{"class":160},[139,174669,164],{"class":145},[139,174671,174672,174674,174676,174678,174680,174682,174684,174686,174688],{"class":141,"line":262},[139,174673,2259],{"class":145},[139,174675,2262],{"class":160},[139,174677,2265],{"class":145},[139,174679,1441],{"class":160},[139,174681,413],{"class":145},[139,174683,2272],{"class":160},[139,174685,2265],{"class":145},[139,174687,2277],{"class":153},[139,174689,2280],{"class":145},[139,174691,174692,174694,174696],{"class":141,"line":313},[139,174693,2285],{"class":145},[139,174695,2252],{"class":160},[139,174697,2290],{"class":145},[14,174699,2294],{"id":2293},[1760,174701,174702,174704,174708,174712,174714,174716],{},[1763,174703,2299],{},[1763,174705,2302,174706,170],{},[50,174707,257],{},[1763,174709,174710,2309],{},[50,174711,662],{},[1763,174713,2312],{},[1763,174715,2315],{},[1763,174717,2318],{},[14,174719,2322],{"id":2321},[1760,174721,174722,174724,174726,174730,174734],{},[1763,174723,2327],{},[1763,174725,2330],{},[1763,174727,1690,174728,2336],{},[50,174729,2335],{},[1763,174731,2339,174732,2343],{},[50,174733,2342],{},[1763,174735,2346],{},[2348,174737,2350],{},{"title":135,"searchDepth":210,"depth":210,"links":174739},[174740,174741,174742,174743,174744,174745,174746,174747,174748,174749,174750,174756,174763,174764,174765,174766,174767,174768,174769],{"id":16,"depth":210,"text":17},{"id":173,"depth":210,"text":174},{"id":229,"depth":210,"text":230},{"id":385,"depth":210,"text":386},{"id":572,"depth":210,"text":573},{"id":650,"depth":210,"text":651},{"id":764,"depth":210,"text":765},{"id":904,"depth":210,"text":905},{"id":1050,"depth":210,"text":1051},{"id":1107,"depth":210,"text":1108},{"id":1214,"depth":210,"text":1215,"children":174751},[174752,174753,174754,174755],{"id":1219,"depth":254,"text":1220},{"id":1254,"depth":254,"text":1255},{"id":1295,"depth":254,"text":1296},{"id":1374,"depth":254,"text":1375},{"id":1397,"depth":210,"text":1398,"children":174757},[174758,174759,174760,174761,174762],{"id":1401,"depth":254,"text":1402},{"id":1491,"depth":254,"text":1492},{"id":1538,"depth":254,"text":1539},{"id":1598,"depth":254,"text":1599},{"id":1637,"depth":254,"text":1638},{"id":1671,"depth":210,"text":2377},{"id":1774,"depth":210,"text":1775},{"id":1819,"depth":210,"text":1820},{"id":1942,"depth":210,"text":1943},{"id":2004,"depth":210,"text":2005},{"id":2293,"depth":210,"text":2294},{"id":2321,"depth":210,"text":2322},{},{"title":5,"description":2384},{"id":174773,"title":174774,"body":174775,"description":174938,"extension":2385,"meta":174939,"navigation":842,"path":174940,"seo":174941,"stem":174942,"__hash__":174943},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174776,"toc":174933},[174777,174780,174783,174786,174797,174799,174873,174876,174879,174882,174885,174888,174891,174894,174897,174900,174903],[10,174778,174774],{"id":174779},"python教程",[19,174781,174782],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174784,174785],{},"建议学习环境：",[1760,174787,174788,174791,174794],{},[1763,174789,174790],{},"Python 版本：Python 3.10 及以上。",[1763,174792,174793],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1763,174795,174796],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174798,119298],{"id":119298},[1760,174800,174801,174807,174813,174819,174825,174831,174837,174843,174849,174855,174861,174867],{},[1763,174802,174803],{},[2680,174804,174806],{"href":174805},".\u002Fch1-Python","Python环境与第一个程序",[1763,174808,174809],{},[2680,174810,174812],{"href":174811},".\u002Fch2","基础语法、变量与字符串",[1763,174814,174815],{},[2680,174816,174818],{"href":174817},".\u002Fch3","判断语句",[1763,174820,174821],{},[2680,174822,174824],{"href":174823},".\u002Fch4","循环语句",[1763,174826,174827],{},[2680,174828,174830],{"href":174829},".\u002Fch5","函数基础",[1763,174832,174833],{},[2680,174834,174836],{"href":174835},".\u002Fch6","数据容器",[1763,174838,174839],{},[2680,174840,174842],{"href":174841},".\u002Fch7","函数进阶",[1763,174844,174845],{},[2680,174846,174848],{"href":174847},".\u002Fch8","文件操作",[1763,174850,174851],{},[2680,174852,174854],{"href":174853},".\u002Fch9","异常、模块与包",[1763,174856,174857],{},[2680,174858,174860],{"href":174859},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1763,174862,174863],{},[2680,174864,174866],{"href":174865},".\u002Fch11","面向对象基础",[1763,174868,174869],{},[2680,174870,174872],{"href":174871},".\u002Fch12","综合案例与复习路线",[14,174874,174875],{"id":174875},"学习路线",[19,174877,174878],{},"第一阶段：能运行程序。",[19,174880,174881],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174883,174884],{},"第二阶段：能组织数据。",[19,174886,174887],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174889,174890],{},"第三阶段：能封装逻辑。",[19,174892,174893],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174895,174896],{},"第四阶段：能做小项目。",[19,174898,174899],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174901,174902],{"id":174902},"参考资料",[1760,174904,174905,174912,174919,174926],{},[1763,174906,174907,174908],{},"黑马程序员 Python 入门教程推荐：",[2680,174909,174910],{"href":174910,"rel":174911},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26128],[1763,174913,174914,174915],{},"Python 官方中文教程：",[2680,174916,174917],{"href":174917,"rel":174918},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26128],[1763,174920,174921,174922],{},"Python 标准库文档：",[2680,174923,174924],{"href":174924,"rel":174925},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26128],[1763,174927,174928,174929],{},"pyecharts 文档：",[2680,174930,174931],{"href":174931,"rel":174932},"https:\u002F\u002Fpyecharts.org\u002F",[26128],{"title":135,"searchDepth":210,"depth":210,"links":174934},[174935,174936,174937],{"id":119298,"depth":210,"text":119298},{"id":174875,"depth":210,"text":174875},{"id":174902,"depth":210,"text":174902},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25645},"\u002Fwiki\u002F2024-10-10-python",{"title":174774,"description":174938},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331479855]